Index: gm/composeshader.cpp |
diff --git a/gm/composeshader.cpp b/gm/composeshader.cpp |
index b5607d511b9bcf92704ef1eb212a0f87990b2ead..9fdcb74369566e89e83bbe4ebd9f2d371004dcad 100644 |
--- a/gm/composeshader.cpp |
+++ b/gm/composeshader.cpp |
@@ -15,32 +15,33 @@ |
#include "SkString.h" |
#include "SkXfermode.h" |
+static SkShader* make_shader(SkXfermode::Mode mode) { |
+ 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; |
+ SkAutoTUnref<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); |
+ SkAutoTUnref<SkShader> shaderB(SkGradientShader::CreateLinear(pts, colors, NULL, 2, |
+ SkShader::kClamp_TileMode)); |
+ |
+ SkAutoTUnref<SkXfermode> xfer(SkXfermode::Create(mode)); |
+ |
+ return SkNEW_ARGS(SkComposeShader, (shaderA, shaderB, xfer)); |
+} |
+ |
class ComposeShaderGM : public skiagm::GM { |
public: |
ComposeShaderGM() { |
- 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(); |
+ fShader = make_shader(SkXfermode::kDstIn_Mode); |
} |
virtual ~ComposeShaderGM() { |
@@ -77,7 +78,7 @@ private: |
typedef GM INHERITED ; |
}; |
-class ComposeShaderAlphaGM : public ComposeShaderGM { |
+class ComposeShaderAlphaGM : public skiagm::GM { |
public: |
ComposeShaderAlphaGM() {} |
@@ -87,24 +88,35 @@ protected: |
} |
virtual SkISize onISize() SK_OVERRIDE { |
- return SkISize::Make(120, 1024); |
+ return SkISize::Make(220, 750); |
} |
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
+ SkAutoTUnref<SkShader> shader0(make_shader(SkXfermode::kDstIn_Mode)); |
+ SkAutoTUnref<SkShader> shader1(make_shader(SkXfermode::kSrcOver_Mode)); |
+ SkShader* shaders[] = { shader0.get(), shader1.get() }; |
+ |
SkPaint paint; |
paint.setColor(SK_ColorGREEN); |
const SkRect r = SkRect::MakeXYWH(5, 5, 100, 100); |
- for (int alpha = 0xFF; alpha > 0; alpha -= 0x20) { |
- paint.setAlpha(0xFF); |
- paint.setShader(NULL); |
- canvas->drawRect(r, paint); |
- |
- paint.setAlpha(alpha); |
- paint.setShader(fShader); |
- canvas->drawRect(r, paint); |
- |
- canvas->translate(r.width() + 5, 0); |
+ |
+ for (size_t y = 0; y < SK_ARRAY_COUNT(shaders); ++y) { |
+ SkShader* shader = shaders[y]; |
+ canvas->save(); |
+ for (int alpha = 0xFF; alpha > 0; alpha -= 0x28) { |
+ paint.setAlpha(0xFF); |
+ paint.setShader(NULL); |
+ canvas->drawRect(r, paint); |
+ |
+ paint.setAlpha(alpha); |
+ paint.setShader(shader); |
+ canvas->drawRect(r, paint); |
+ |
+ canvas->translate(r.width() + 5, 0); |
+ } |
+ canvas->restore(); |
+ canvas->translate(0, r.height() + 5); |
} |
} |
}; |