aboutsummaryrefslogtreecommitdiffstats
path: root/gm/nocolorbleed.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gm/nocolorbleed.cpp')
-rwxr-xr-xgm/nocolorbleed.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/gm/nocolorbleed.cpp b/gm/nocolorbleed.cpp
new file mode 100755
index 0000000..3dec7cc
--- /dev/null
+++ b/gm/nocolorbleed.cpp
@@ -0,0 +1,75 @@
+#include "gm.h"
+
+namespace skiagm {
+
+class NoColorBleedGM : public GM {
+public:
+ NoColorBleedGM() {}
+
+protected:
+ virtual SkString onShortName() {
+ return SkString("nocolorbleed");
+ }
+
+ virtual SkISize onISize() {
+ return make_isize(200, 200);
+ }
+
+ void drawBG(SkCanvas* canvas) {
+ canvas->drawColor(0xFFDDDDDD);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ drawBG(canvas);
+
+ SkBitmap sprite;
+ sprite.setConfig(SkBitmap::kARGB_8888_Config, 4, 4, 4*sizeof(SkColor));
+ const SkColor spriteData[16] = {
+ SK_ColorBLACK, SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW,
+ SK_ColorBLACK, SK_ColorWHITE, SK_ColorBLACK, SK_ColorRED,
+ SK_ColorGREEN, SK_ColorBLACK, SK_ColorWHITE, SK_ColorBLUE,
+ SK_ColorYELLOW, SK_ColorMAGENTA, SK_ColorCYAN, SK_ColorBLACK
+ };
+ sprite.allocPixels();
+ sprite.lockPixels();
+ SkPMColor* addr = sprite.getAddr32(0, 0);
+ for (size_t i = 0; i < SK_ARRAY_COUNT(spriteData); ++i) {
+ addr[i] = SkPreMultiplyColor(spriteData[i]);
+ }
+ sprite.unlockPixels();
+
+ // We draw a magnified subrect of the sprite
+ // sample interpolation may cause color bleeding around edges
+ // the subrect is a pure white area
+ SkIRect srcRect;
+ SkRect dstRect;
+ SkPaint paint;
+ paint.setFilterBitmap(true);
+ //First row : full texture with and without filtering
+ srcRect.setXYWH(0, 0, 4, 4);
+ dstRect.setXYWH(SkIntToScalar(0), SkIntToScalar(0)
+ , SkIntToScalar(100), SkIntToScalar(100));
+ canvas->drawBitmapRect(sprite, &srcRect, dstRect, &paint);
+ dstRect.setXYWH(SkIntToScalar(100), SkIntToScalar(0)
+ , SkIntToScalar(100), SkIntToScalar(100));
+ canvas->drawBitmapRect(sprite, &srcRect, dstRect);
+ //Second row : sub rect of texture with and without filtering
+ srcRect.setXYWH(1, 1, 2, 2);
+ dstRect.setXYWH(SkIntToScalar(25), SkIntToScalar(125)
+ , SkIntToScalar(50), SkIntToScalar(50));
+ canvas->drawBitmapRect(sprite, &srcRect, dstRect, &paint);
+ dstRect.setXYWH(SkIntToScalar(125), SkIntToScalar(125)
+ , SkIntToScalar(50), SkIntToScalar(50));
+ canvas->drawBitmapRect(sprite, &srcRect, dstRect);
+ }
+
+private:
+ typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static GM* MyFactory(void*) { return new NoColorBleedGM; }
+static GMRegistry reg(MyFactory);
+
+}