From 7842c817e920a0e0c83be339f8d7e19b016c3373 Mon Sep 17 00:00:00 2001 From: "commit-bot@chromium.org" Date: Fri, 6 Dec 2013 20:14:39 +0000 Subject: Add GM to test bitmap shaders with basic geometry and bitmap masks. R=reed@google.com, bsalomon@google.com, rmistry@google.com Author: djsollen@google.com Review URL: https://codereview.chromium.org/98433004 git-svn-id: http://skia.googlecode.com/svn/trunk@12543 2bbb7eff-a529-9590-31e7-b0007b416f81 --- gm/bitmapshader.cpp | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 gm/bitmapshader.cpp (limited to 'gm/bitmapshader.cpp') diff --git a/gm/bitmapshader.cpp b/gm/bitmapshader.cpp new file mode 100644 index 0000000000..4ec234898c --- /dev/null +++ b/gm/bitmapshader.cpp @@ -0,0 +1,103 @@ + +/* + * Copyright 2013 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" + +#include "SkBitmap.h" +#include "SkPaint.h" +#include "SkShader.h" + +namespace skiagm { + +static void draw_bm(SkBitmap* bm) { + SkPaint bluePaint; + bluePaint.setColor(SK_ColorBLUE); + + bm->setConfig(SkBitmap::kARGB_8888_Config, 20, 20); + bm->allocPixels(); + bm->eraseColor(SK_ColorRED); + + SkCanvas canvas(*bm); + canvas.drawCircle(10, 10, 5, bluePaint); +} + +static void draw_mask(SkBitmap* bm) { + SkPaint circlePaint; + circlePaint.setColor(SK_ColorBLACK); + + bm->setConfig(SkBitmap::kA8_Config, 20, 20); + bm->allocPixels(); + bm->eraseColor(SK_ColorTRANSPARENT); + + SkCanvas canvas(*bm); + canvas.drawCircle(10, 10, 10, circlePaint); +} + +class BitmapShaderGM : public GM { +public: + + BitmapShaderGM() { + this->setBGColor(SK_ColorGRAY); + draw_bm(&fBitmap); + draw_mask(&fMask); + } + +protected: + virtual SkString onShortName() { + return SkString("bitmapshaders"); + } + + virtual SkISize onISize() { + return make_isize(75, 100); + } + + virtual void onDraw(SkCanvas* canvas) { + SkShader* shader = SkShader::CreateBitmapShader(fBitmap, + SkShader::kClamp_TileMode, + SkShader::kClamp_TileMode); + SkPaint paint; + paint.setShader(shader); + // release the shader ref as the paint now holds a reference + shader->unref(); + + // draw the shader with a bitmap mask + canvas->drawBitmap(fMask, 0, 0, &paint); + canvas->drawBitmap(fMask, 30, 0, &paint); + + canvas->translate(0, 25); + + // draw the shader with standard geometry + canvas->drawCircle(10, 10, 10, paint); + canvas->drawCircle(40, 10, 10, paint); // no blue circle expected + + canvas->translate(0, 25); + + shader = SkShader::CreateBitmapShader(fMask, + SkShader::kRepeat_TileMode, + SkShader::kRepeat_TileMode); + paint.setShader(shader); + paint.setColor(SK_ColorRED); + shader->unref(); + + // draw the mask using the shader and a color + canvas->drawRect(SkRect::MakeXYWH(0, 0, 20, 20), paint); + canvas->drawRect(SkRect::MakeXYWH(30, 0, 20, 20), paint); + } + +private: + SkBitmap fBitmap; + SkBitmap fMask; + + typedef GM INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +static GM* MyFactory(void*) { return new BitmapShaderGM; } +static GMRegistry reg(MyFactory); + +} -- cgit v1.2.3