1 2/* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8#include "gm.h" 9#include "SkBlurDrawLooper.h" 10 11namespace skiagm { 12 13/////////////////////////////////////////////////////////////////////////////// 14 15static void setup(SkPaint* paint, SkColor c, SkScalar strokeWidth) { 16 paint->setColor(c); 17 if (strokeWidth < 0) { 18 paint->setStyle(SkPaint::kFill_Style); 19 } else { 20 paint->setStyle(SkPaint::kStroke_Style); 21 paint->setStrokeWidth(strokeWidth); 22 } 23} 24 25class ShadowsGM : public GM { 26public: 27 SkPath fCirclePath; 28 SkRect fRect; 29 30 ShadowsGM() { 31 this->setBGColor(0xFFDDDDDD); 32 fCirclePath.addCircle(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(10) ); 33 fRect.set(SkIntToScalar(10), SkIntToScalar(10), 34 SkIntToScalar(30), SkIntToScalar(30)); 35 } 36 37protected: 38 virtual SkString onShortName() { 39 return SkString("shadows"); 40 } 41 42 virtual SkISize onISize() { 43 return make_isize(200, 80); 44 } 45 46 virtual void onDraw(SkCanvas* canvas) { 47 SkBlurDrawLooper* shadowLoopers[5]; 48 shadowLoopers[0] = 49 new SkBlurDrawLooper (SkIntToScalar(10), SkIntToScalar(5), 50 SkIntToScalar(10), 0xFF0000FF, 51 SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 52 SkBlurDrawLooper::kOverrideColor_BlurFlag | 53 SkBlurDrawLooper::kHighQuality_BlurFlag ); 54 SkAutoUnref aurL0(shadowLoopers[0]); 55 shadowLoopers[1] = 56 new SkBlurDrawLooper (SkIntToScalar(10), SkIntToScalar(5), 57 SkIntToScalar(10), 0xFF0000FF, 58 SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 59 SkBlurDrawLooper::kOverrideColor_BlurFlag ); 60 SkAutoUnref aurL1(shadowLoopers[1]); 61 shadowLoopers[2] = 62 new SkBlurDrawLooper (SkIntToScalar(5), SkIntToScalar(5), 63 SkIntToScalar(10), 0xFF000000, 64 SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 65 SkBlurDrawLooper::kHighQuality_BlurFlag ); 66 SkAutoUnref aurL2(shadowLoopers[2]); 67 shadowLoopers[3] = 68 new SkBlurDrawLooper (SkIntToScalar(5), SkIntToScalar(-5), 69 SkIntToScalar(-10), 0x7FFF0000, 70 SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 71 SkBlurDrawLooper::kOverrideColor_BlurFlag | 72 SkBlurDrawLooper::kHighQuality_BlurFlag ); 73 SkAutoUnref aurL3(shadowLoopers[3]); 74 shadowLoopers[4] = 75 new SkBlurDrawLooper (SkIntToScalar(0), SkIntToScalar(5), 76 SkIntToScalar(5), 0xFF000000, 77 SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 78 SkBlurDrawLooper::kOverrideColor_BlurFlag | 79 SkBlurDrawLooper::kHighQuality_BlurFlag ); 80 SkAutoUnref aurL4(shadowLoopers[4]); 81 82 static const struct { 83 SkColor fColor; 84 SkScalar fStrokeWidth; 85 } gRec[] = { 86 { SK_ColorRED, -SK_Scalar1 }, 87 { SK_ColorGREEN, SkIntToScalar(4) }, 88 }; 89 90 SkPaint paint; 91 paint.setAntiAlias(true); 92 for (size_t i = 0; i < SK_ARRAY_COUNT(shadowLoopers); ++i) { 93 SkAutoCanvasRestore acr(canvas, true); 94 95 paint.setLooper(shadowLoopers[i]); 96 97 canvas->translate(SkIntToScalar(i*40), SkIntToScalar(0)); 98 setup(&paint, gRec[0].fColor, gRec[0].fStrokeWidth); 99 canvas->drawRect(fRect, paint); 100 101 canvas->translate(SkIntToScalar(0), SkIntToScalar(40)); 102 setup(&paint, gRec[1].fColor, gRec[1].fStrokeWidth); 103 canvas->drawPath(fCirclePath, paint); 104 } 105} 106 107private: 108 typedef GM INHERITED; 109}; 110 111/////////////////////////////////////////////////////////////////////////////// 112 113static GM* MyFactory(void*) { return new ShadowsGM; } 114static GMRegistry reg(MyFactory); 115 116} 117