1 #include "gm.h"
2
3 namespace skiagm {
4
5 class NoColorBleedGM : public GM {
6 public:
NoColorBleedGM()7 NoColorBleedGM() {}
8
9 protected:
onShortName()10 virtual SkString onShortName() {
11 return SkString("nocolorbleed");
12 }
13
onISize()14 virtual SkISize onISize() {
15 return make_isize(200, 200);
16 }
17
drawBG(SkCanvas * canvas)18 void drawBG(SkCanvas* canvas) {
19 canvas->drawColor(0xFFDDDDDD);
20 }
21
onDraw(SkCanvas * canvas)22 virtual void onDraw(SkCanvas* canvas) {
23 drawBG(canvas);
24
25 SkBitmap sprite;
26 sprite.setConfig(SkBitmap::kARGB_8888_Config, 4, 4, 4*sizeof(SkColor));
27 const SkColor spriteData[16] = {
28 SK_ColorBLACK, SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW,
29 SK_ColorBLACK, SK_ColorWHITE, SK_ColorBLACK, SK_ColorRED,
30 SK_ColorGREEN, SK_ColorBLACK, SK_ColorWHITE, SK_ColorBLUE,
31 SK_ColorYELLOW, SK_ColorMAGENTA, SK_ColorCYAN, SK_ColorBLACK
32 };
33 sprite.allocPixels();
34 sprite.lockPixels();
35 SkPMColor* addr = sprite.getAddr32(0, 0);
36 for (size_t i = 0; i < SK_ARRAY_COUNT(spriteData); ++i) {
37 addr[i] = SkPreMultiplyColor(spriteData[i]);
38 }
39 sprite.unlockPixels();
40
41 // We draw a magnified subrect of the sprite
42 // sample interpolation may cause color bleeding around edges
43 // the subrect is a pure white area
44 SkIRect srcRect;
45 SkRect dstRect;
46 SkPaint paint;
47 paint.setFilterBitmap(true);
48 //First row : full texture with and without filtering
49 srcRect.setXYWH(0, 0, 4, 4);
50 dstRect.setXYWH(SkIntToScalar(0), SkIntToScalar(0)
51 , SkIntToScalar(100), SkIntToScalar(100));
52 canvas->drawBitmapRect(sprite, &srcRect, dstRect, &paint);
53 dstRect.setXYWH(SkIntToScalar(100), SkIntToScalar(0)
54 , SkIntToScalar(100), SkIntToScalar(100));
55 canvas->drawBitmapRect(sprite, &srcRect, dstRect);
56 //Second row : sub rect of texture with and without filtering
57 srcRect.setXYWH(1, 1, 2, 2);
58 dstRect.setXYWH(SkIntToScalar(25), SkIntToScalar(125)
59 , SkIntToScalar(50), SkIntToScalar(50));
60 canvas->drawBitmapRect(sprite, &srcRect, dstRect, &paint);
61 dstRect.setXYWH(SkIntToScalar(125), SkIntToScalar(125)
62 , SkIntToScalar(50), SkIntToScalar(50));
63 canvas->drawBitmapRect(sprite, &srcRect, dstRect);
64 }
65
66 private:
67 typedef GM INHERITED;
68 };
69
70 //////////////////////////////////////////////////////////////////////////////
71
MyFactory(void *)72 static GM* MyFactory(void*) { return new NoColorBleedGM; }
73 static GMRegistry reg(MyFactory);
74
75 }
76