• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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