2 * Copyright 2011 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
9 #include "sk_tool_utils.h"
10 #include "SkBlurDrawLooper.h"
11 #include "SkBlurMask.h"
12 #include "SkColorFilter.h"
13 #include "SkMaskFilter.h"
18 ///////////////////////////////////////////////////////////////////////////////
20 static void setup(SkPaint* paint, SkColor c, SkScalar strokeWidth) {
22 if (strokeWidth < 0) {
23 paint->setStyle(SkPaint::kFill_Style);
25 paint->setStyle(SkPaint::kStroke_Style);
26 paint->setStrokeWidth(strokeWidth);
30 class ShadowsGM : public GM {
37 void onOnceBeforeDraw() override {
38 this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
39 fCirclePath.addCircle(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(10) );
40 fRect.set(SkIntToScalar(10), SkIntToScalar(10),
41 SkIntToScalar(30), SkIntToScalar(30));
42 fBitmap.allocPixels(SkImageInfo::Make(20, 20, SkColorType::kAlpha_8_SkColorType,
43 kPremul_SkAlphaType));
44 SkCanvas canvas(fBitmap);
47 canvas.drawRect(SkRect::MakeXYWH(10, 0, 10, 10), p);
48 canvas.drawRect(SkRect::MakeXYWH(0, 10, 10, 10), p);
51 SkString onShortName() override {
52 return SkString("shadows");
55 SkISize onISize() override {
56 return SkISize::Make(200, 200);
59 void onDraw(SkCanvas* canvas) override {
60 sk_sp<SkDrawLooper> shadowLoopers[] = {
61 SkBlurDrawLooper::Make(SK_ColorBLUE,
62 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(10)),
63 SkIntToScalar(5), SkIntToScalar(10)),
64 SkBlurDrawLooper::Make(SK_ColorBLUE,
65 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(10)),
66 SkIntToScalar(5), SkIntToScalar(10)),
67 SkBlurDrawLooper::Make(SK_ColorBLACK,
68 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)),
71 SkBlurDrawLooper::Make(0x7FFF0000,
72 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)),
73 SkIntToScalar(-5), SkIntToScalar(-10)),
74 SkBlurDrawLooper::Make(SK_ColorBLACK, SkIntToScalar(0),
75 SkIntToScalar(5), SkIntToScalar(5)),
80 SkScalar fStrokeWidth;
82 { SK_ColorRED, -SK_Scalar1 },
83 { SK_ColorGREEN, SkIntToScalar(4) },
84 { SK_ColorBLUE, SkIntToScalar(0)},
88 paint.setAntiAlias(true);
89 for (size_t i = 0; i < SK_ARRAY_COUNT(shadowLoopers); ++i) {
90 SkAutoCanvasRestore acr(canvas, true);
92 paint.setLooper(shadowLoopers[i]);
94 canvas->translate(SkIntToScalar((unsigned int)i*40), SkIntToScalar(0));
95 setup(&paint, gRec[0].fColor, gRec[0].fStrokeWidth);
96 canvas->drawRect(fRect, paint);
98 canvas->translate(SkIntToScalar(0), SkIntToScalar(40));
99 setup(&paint, gRec[1].fColor, gRec[1].fStrokeWidth);
100 canvas->drawPath(fCirclePath, paint);
102 canvas->translate(SkIntToScalar(0), SkIntToScalar(40));
103 setup(&paint, gRec[2].fColor, gRec[2].fStrokeWidth);
104 canvas->drawPath(fCirclePath, paint);
106 // see bug.skia.org/562 (reference, draws correct)
107 canvas->translate(0, 40);
108 paint.setColor(SK_ColorBLACK);
109 canvas->drawBitmap(fBitmap, 10, 10, &paint);
111 canvas->translate(0, 40);
112 paint.setShader(SkShader::MakeBitmapShader(
113 fBitmap, SkShader::kRepeat_TileMode,
114 SkShader::kRepeat_TileMode));
116 // see bug.skia.org/562 (shows bug as reported)
117 paint.setStyle(SkPaint::kFill_Style);
118 canvas->drawRect(SkRect::MakeXYWH(10, 10, 20, 20), paint);
119 paint.setShader(nullptr);
124 typedef GM INHERITED;
127 ///////////////////////////////////////////////////////////////////////////////
129 static GM* MyFactory(void*) { return new ShadowsGM; }
130 static GMRegistry reg(MyFactory);