diff options
Diffstat (limited to 'gm/colormatrix.cpp')
-rw-r--r-- | gm/colormatrix.cpp | 120 |
1 files changed, 47 insertions, 73 deletions
diff --git a/gm/colormatrix.cpp b/gm/colormatrix.cpp index 8dcdf15e50..a80f8cb581 100644 --- a/gm/colormatrix.cpp +++ b/gm/colormatrix.cpp @@ -8,60 +8,40 @@ #include "gm.h" #include "SkColorMatrixFilter.h" #include "SkGradientShader.h" +#include "SkImage.h" #define WIDTH 500 #define HEIGHT 500 -class SkDoOnce { -public: - SkDoOnce() : fOnce(false) {}; - - bool once() const { - if (fOnce) { - return false; - } - fOnce = true; - return true; - } - -private: - mutable bool fOnce; -}; - -static void setColorMatrix(SkPaint* paint, const SkColorMatrix& matrix) { +static void set_color_matrix(SkPaint* paint, const SkColorMatrix& matrix) { paint->setColorFilter(SkColorMatrixFilter::Create(matrix))->unref(); } -static void setArray(SkPaint* paint, const SkScalar array[]) { +static void set_array(SkPaint* paint, const SkScalar array[]) { paint->setColorFilter(SkColorMatrixFilter::Create(array))->unref(); } -namespace skiagm { - -class ColorMatrixGM : public GM { - SkDoOnce fOnce; - void init() { - if (fOnce.once()) { - fSolidBitmap = this->createSolidBitmap(64, 64); - fTransparentBitmap = this->createTransparentBitmap(64, 64); - } - } - +class ColorMatrixGM : public skiagm::GM { public: ColorMatrixGM() { this->setBGColor(sk_tool_utils::color_to_565(0xFF808080)); } protected: - virtual SkString onShortName() { + SkString onShortName() override { return SkString("colormatrix"); } - virtual SkISize onISize() { + SkISize onISize() override { return SkISize::Make(WIDTH, HEIGHT); } + + void onOnceBeforeDraw() override { + fSolidImg.reset(CreateSolidBitmap(64, 64)); + fTransparentImg.reset(CreateTransparentBitmap(64, 64)); + } - SkBitmap createSolidBitmap(int width, int height) { + static SkImage* CreateSolidBitmap(int width, int height) { SkBitmap bm; bm.allocN32Pixels(width, height); SkCanvas canvas(bm); @@ -74,11 +54,11 @@ protected: SkIntToScalar(y), SK_Scalar1, SK_Scalar1), paint); } } - return bm; + return SkImage::NewFromBitmap(bm); } // creates a bitmap with shades of transparent gray. - SkBitmap createTransparentBitmap(int width, int height) { + static SkImage* CreateTransparentBitmap(int width, int height) { SkBitmap bm; bm.allocN32Pixels(width, height); SkCanvas canvas(bm); @@ -90,58 +70,56 @@ protected: paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode))->unref(); canvas.drawRect(SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height)), paint); - return bm; + return SkImage::NewFromBitmap(bm); } - virtual void onDraw(SkCanvas* canvas) { - this->init(); - + void onDraw(SkCanvas* canvas) override { SkPaint paint; SkColorMatrix matrix; paint.setXfermodeMode(SkXfermode::kSrc_Mode); - const SkBitmap bmps[] = { fSolidBitmap, fTransparentBitmap }; + const SkImage* bmps[] = { fSolidImg, fTransparentImg }; for (size_t i = 0; i < SK_ARRAY_COUNT(bmps); ++i) { matrix.setIdentity(); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 0, 0, &paint); + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 0, 0, &paint); matrix.setRotate(SkColorMatrix::kR_Axis, 90); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 80, 0, &paint); + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 80, 0, &paint); matrix.setRotate(SkColorMatrix::kG_Axis, 90); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 160, 0, &paint); + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 160, 0, &paint); matrix.setRotate(SkColorMatrix::kB_Axis, 90); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 240, 0, &paint); - + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 240, 0, &paint); + /////////////////////////////////////////////// matrix.setSaturation(0.0f); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 0, 80, &paint); + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 0, 80, &paint); matrix.setSaturation(0.5f); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 80, 80, &paint); + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 80, 80, &paint); matrix.setSaturation(1.0f); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 160, 80, &paint); + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 160, 80, &paint); matrix.setSaturation(2.0f); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 240, 80, &paint); - + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 240, 80, &paint); + /////////////////////////////////////////////// matrix.setRGB2YUV(); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 0, 160, &paint); + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 0, 160, &paint); matrix.setYUV2RGB(); - setColorMatrix(&paint, matrix); - canvas->drawBitmap(bmps[i], 80, 160, &paint); + set_color_matrix(&paint, matrix); + canvas->drawImage(bmps[i], 80, 160, &paint); SkScalar s1 = SK_Scalar1; SkScalar s255 = SkIntToScalar(255); @@ -153,22 +131,18 @@ protected: s1, 0, 0, 0, 0, }; - setArray(&paint, data); - canvas->drawBitmap(bmps[i], 160, 160, &paint); - + set_array(&paint, data); + canvas->drawImage(bmps[i], 160, 160, &paint); + /////////////////////////////////////////////// canvas->translate(0, 240); } } private: - SkBitmap fSolidBitmap; - SkBitmap fTransparentBitmap; - typedef GM INHERITED; -}; - -////////////////////////////////////////////////////////////////////////////// + SkAutoTUnref<SkImage> fSolidImg; + SkAutoTUnref<SkImage> fTransparentImg; -static GM* MyFactory(void*) { return new ColorMatrixGM; } -static GMRegistry reg(MyFactory); + typedef skiagm::GM INHERITED; +}; +DEF_GM( return new ColorMatrixGM; ) -} |