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