DrawBitmapRectTest.cpp revision 1cab2921ab279367f8206cdadc9259d12e603548
11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "Test.h" 987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkBitmap.h" 1087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkCanvas.h" 1187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 1287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic bool check_for_all_zeros(const SkBitmap& bm) { 1387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkAutoLockPixels alp(bm); 1487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 1587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger size_t count = bm.width() * bm.bytesPerPixel(); 1687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger for (int y = 0; y < bm.height(); y++) { 1787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger const uint8_t* ptr = reinterpret_cast<const uint8_t*>(bm.getAddr(0, y)); 1887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger for (size_t i = 0; i < count; i++) { 1987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger if (ptr[i]) { 2087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger return false; 2187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 2287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 2387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 2487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger return true; 2587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger} 2687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 2787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic const int gWidth = 256; 2887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic const int gHeight = 256; 2987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 3087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic void create(SkBitmap* bm, SkBitmap::Config config, SkColor color) { 3187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger bm->setConfig(config, gWidth, gHeight); 3287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger bm->allocPixels(); 3387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger bm->eraseColor(color); 3487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger} 3587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 3687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic void TestDrawBitmapRect(skiatest::Reporter* reporter) { 3787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkBitmap src, dst; 3887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 3987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger create(&src, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF); 4087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger create(&dst, SkBitmap::kARGB_8888_Config, 0); 4187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkCanvas canvas(dst); 4387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkIRect srcR = { gWidth, 0, gWidth + 16, 16 }; 4587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkRect dstR = { 0, 0, SkIntToScalar(16), SkIntToScalar(16) }; 4687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger canvas.drawBitmapRect(src, &srcR, dstR, NULL); 4887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger // ensure that we draw nothing if srcR does not intersect the bitmap 5087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, check_for_all_zeros(dst)); 5187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger} 5287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 5387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "TestClassDef.h" 5487b8e645865f9633f410c02252a0fd3feb18f09bDerek SollenbergerDEFINE_TESTCLASS("DrawBitmapRect", TestDrawBitmapRectClass, TestDrawBitmapRect) 55