1 #include "Test.h"
2 #include "SkBitmap.h"
3 #include "SkCanvas.h"
4
check_for_all_zeros(const SkBitmap & bm)5 static bool check_for_all_zeros(const SkBitmap& bm) {
6 SkAutoLockPixels alp(bm);
7
8 size_t count = bm.width() * bm.bytesPerPixel();
9 for (int y = 0; y < bm.height(); y++) {
10 const uint8_t* ptr = reinterpret_cast<const uint8_t*>(bm.getAddr(0, y));
11 for (size_t i = 0; i < count; i++) {
12 if (ptr[i]) {
13 return false;
14 }
15 }
16 }
17 return true;
18 }
19
20 static const int gWidth = 256;
21 static const int gHeight = 256;
22
create(SkBitmap * bm,SkBitmap::Config config,SkColor color)23 static void create(SkBitmap* bm, SkBitmap::Config config, SkColor color) {
24 bm->setConfig(config, gWidth, gHeight);
25 bm->allocPixels();
26 bm->eraseColor(color);
27 }
28
TestDrawBitmapRect(skiatest::Reporter * reporter)29 static void TestDrawBitmapRect(skiatest::Reporter* reporter) {
30 SkBitmap src, dst;
31
32 create(&src, SkBitmap::kARGB_8888_Config, 0xFFFFFFFF);
33 create(&dst, SkBitmap::kARGB_8888_Config, 0);
34
35 SkCanvas canvas(dst);
36
37 SkIRect srcR = { gWidth, 0, gWidth + 16, 16 };
38 SkRect dstR = { 0, 0, SkIntToScalar(16), SkIntToScalar(16) };
39
40 canvas.drawBitmapRect(src, &srcR, dstR, NULL);
41
42 // ensure that we draw nothing if srcR does not intersect the bitmap
43 REPORTER_ASSERT(reporter, check_for_all_zeros(dst));
44 }
45
46 #include "TestClassDef.h"
47 DEFINE_TESTCLASS("DrawBitmapRect", TestDrawBitmapRectClass, TestDrawBitmapRect)
48