aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/composeshader.cpp
diff options
context:
space:
mode:
authorGravatar scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-06-29 17:28:50 +0000
committerGravatar scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-06-29 17:28:50 +0000
commit32f20eb02cd06fcbacb6ef15dab4a86e5ad7cc03 (patch)
treed67f8f01bd5c85701b8c6f6c7814d387b09c3523 /gm/composeshader.cpp
parentb6789115b74a17eceaa71c0e30e247bb886c12d2 (diff)
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
Diffstat (limited to 'gm/composeshader.cpp')
-rw-r--r--gm/composeshader.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/gm/composeshader.cpp b/gm/composeshader.cpp
new file mode 100644
index 0000000000..6e52f642ad
--- /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
+