/* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "gm.h" namespace skiagm { class NoColorBleedGM : public GM { public: NoColorBleedGM() { this->setBGColor(0xFFDDDDDD); } protected: virtual SkString onShortName() { return SkString("nocolorbleed"); } virtual SkISize onISize() { return make_isize(200, 200); } virtual void onDraw(SkCanvas* 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); }