From 32f20eb02cd06fcbacb6ef15dab4a86e5ad7cc03 Mon Sep 17 00:00:00 2001 From: "scroggo@google.com" Date: Fri, 29 Jun 2012 17:28:50 +0000 Subject: [PATCH] Create a new GM to exercise ComposeShader. Code borrowed from samplecode/SampleShaders.cpp Review URL: https://codereview.appspot.com/6371043 git-svn-id: http://skia.googlecode.com/svn/trunk@4407 2bbb7eff-a529-9590-31e7-b0007b416f81 --- gm/composeshader.cpp | 88 ++++++++++++++++++++++++++++++++++++++++++++ gyp/gmslides.gypi | 1 + 2 files changed, 89 insertions(+) create mode 100644 gm/composeshader.cpp diff --git a/gm/composeshader.cpp b/gm/composeshader.cpp new file mode 100644 index 000000000..6e52f642a --- /dev/null +++ b/gm/composeshader.cpp @@ -0,0 +1,88 @@ + +/* + * Copyright 2012 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 "SkCanvas.h" +#include "SkComposeShader.h" +#include "SkGradientShader.h" +#include "SkGraphics.h" +#include "SkShader.h" +#include "SkString.h" +#include "SkXfermode.h" + +namespace skiagm { + +class ShaderGM : public GM { +public: + ShaderGM() { + SkPoint pts[2]; + SkColor colors[2]; + + pts[0].set(0, 0); + pts[1].set(SkIntToScalar(100), 0); + colors[0] = SK_ColorRED; + colors[1] = SK_ColorBLUE; + SkShader* shaderA = SkGradientShader::CreateLinear(pts, colors, NULL, 2, + SkShader::kClamp_TileMode); + + pts[0].set(0, 0); + pts[1].set(0, SkIntToScalar(100)); + colors[0] = SK_ColorBLACK; + colors[1] = SkColorSetARGB(0x80, 0, 0, 0); + SkShader* shaderB = SkGradientShader::CreateLinear(pts, colors, NULL, 2, + SkShader::kClamp_TileMode); + + SkXfermode* mode = SkXfermode::Create(SkXfermode::kDstIn_Mode); + + fShader = new SkComposeShader(shaderA, shaderB, mode); + shaderA->unref(); + shaderB->unref(); + mode->unref(); + } + + virtual ~ShaderGM() { + SkSafeUnref(fShader); + } + +protected: + virtual SkString onShortName() SK_OVERRIDE { + return SkString("composeshader"); + } + + virtual SkISize onISize() SK_OVERRIDE { + return make_isize(640, 480); + } + + virtual uint32_t onGetFlags() const SK_OVERRIDE { + return this->INHERITED::onGetFlags() | GM::kSkipPDF_Flag; + } + + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { + + SkPaint paint; + SkRect r; + + paint.setColor(SK_ColorGREEN); + canvas->drawRectCoords(0, 0, SkIntToScalar(100), SkIntToScalar(100), paint); + paint.setShader(fShader); + canvas->drawRectCoords(0, 0, SkIntToScalar(100), SkIntToScalar(100), paint); + } + +private: + SkShader* fShader; + typedef GM INHERITED ; +}; + +////////////////////////////////////////////////////////////////////////////// + +static GM* MyFactory(void*) { return new ShaderGM; } +static GMRegistry reg(MyFactory); + +} // namespace + diff --git a/gyp/gmslides.gypi b/gyp/gmslides.gypi index 874c79a14..7c648441d 100644 --- a/gyp/gmslides.gypi +++ b/gyp/gmslides.gypi @@ -13,6 +13,7 @@ '../gm/colormatrix.cpp', '../gm/complexclip.cpp', '../gm/complexclip2.cpp', + '../gm/composeshader.cpp', '../gm/convexpaths.cpp', '../gm/cubicpaths.cpp', '../gm/cmykjpeg.cpp',