diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-11-26 14:39:50 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-11-26 14:39:50 +0000 |
commit | 53007a2b1724c15c170340658daac012f9d909be (patch) | |
tree | eba91f8c887ebdc37ce5e760bb87a15ad1ba8700 /gm/blurrect.cpp | |
parent | 53ec73d1e663c781cf44def060b5e8f669709fdc (diff) |
choose correct blitrow proc based on global alpha
fixes https://bugs.webkit.org/show_bug.cgi?id=103062
add gm to exercise this new fix
git-svn-id: http://skia.googlecode.com/svn/trunk@6544 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/blurrect.cpp')
-rw-r--r-- | gm/blurrect.cpp | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/gm/blurrect.cpp b/gm/blurrect.cpp index 36e59ead88..6c74497e82 100644 --- a/gm/blurrect.cpp +++ b/gm/blurrect.cpp @@ -59,18 +59,36 @@ static void draw_donut_skewed(SkCanvas* canvas, const SkRect& r, const SkPaint& canvas->drawPath(path, p); } +#include "SkGradientShader.h" + +typedef void (*PaintProc)(SkPaint*, SkScalar width); + +static void setgrad(SkPaint* paint, SkScalar width) { + SkPoint pts[] = { { 0, 0 }, { width, 0 } }; + SkColor colors[] = { SK_ColorRED, SK_ColorGREEN }; + SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 2, + SkShader::kClamp_TileMode); + paint->setShader(s)->unref(); +} + class BlurRectGM : public skiagm::GM { SkAutoTUnref<SkMaskFilter> fMaskFilter; + SkString fName; + PaintProc fPProc; + SkAlpha fAlpha; public: - BlurRectGM() : + BlurRectGM(const char name[], PaintProc pproc, U8CPU alpha) : fMaskFilter(SkBlurMaskFilter::Create(STROKE_WIDTH/2, SkBlurMaskFilter::kNormal_BlurStyle, SkBlurMaskFilter::kHighQuality_BlurFlag)) + , fName(name) + , fPProc(pproc) + , fAlpha(SkToU8(alpha)) {} protected: virtual SkString onShortName() { - return SkString("blurrect"); + return fName; } virtual SkISize onISize() { @@ -80,15 +98,19 @@ protected: virtual void onDraw(SkCanvas* canvas) { canvas->translate(STROKE_WIDTH*3/2, STROKE_WIDTH*3/2); + SkRect r = { 0, 0, 250, 120 }; + SkPaint paint; paint.setMaskFilter(fMaskFilter); + if (fPProc) { + fPProc(&paint, r.width()); + } + paint.setAlpha(fAlpha); static const Proc procs[] = { fill_rect, draw_donut, draw_donut_skewed }; - SkRect r = { 0, 0, 250, 120 }; - this->drawProcs(canvas, r, paint, false, procs, SK_ARRAY_COUNT(procs)); canvas->translate(r.width() * 4/3, 0); this->drawProcs(canvas, r, paint, true, procs, SK_ARRAY_COUNT(procs)); @@ -120,5 +142,6 @@ private: ////////////////////////////////////////////////////////////////////////////// -DEF_GM(return new BlurRectGM;) +DEF_GM(return new BlurRectGM("blurrect", NULL, 0xFF);) +DEF_GM(return new BlurRectGM("blurrect_grad_80", setgrad, 0x80);) |