OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SampleCode.h" | 8 #include "SampleCode.h" |
9 #include "SkView.h" | 9 #include "SkView.h" |
10 #include "SkBlurMask.h" | 10 #include "SkBlurMask.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 static void setNamedTypeface(SkPaint* paint, const char name[]) { | 30 static void setNamedTypeface(SkPaint* paint, const char name[]) { |
31 paint->setTypeface(SkTypeface::MakeFromName(name, SkFontStyle())); | 31 paint->setTypeface(SkTypeface::MakeFromName(name, SkFontStyle())); |
32 } | 32 } |
33 | 33 |
34 static uint16_t gBG[] = { 0xFFFF, 0xCCCF, 0xCCCF, 0xFFFF }; | 34 static uint16_t gBG[] = { 0xFFFF, 0xCCCF, 0xCCCF, 0xFFFF }; |
35 | 35 |
36 class XfermodesBlurView : public SampleView { | 36 class XfermodesBlurView : public SampleView { |
37 SkBitmap fBG; | 37 SkBitmap fBG; |
38 SkBitmap fSrcB, fDstB; | 38 SkBitmap fSrcB, fDstB; |
39 | 39 |
40 void draw_mode(SkCanvas* canvas, sk_sp<SkXfermode> mode, int alpha, | 40 void draw_mode(SkCanvas* canvas, SkBlendMode mode, int alpha, SkScalar x, Sk
Scalar y) { |
41 SkScalar x, SkScalar y) { | |
42 SkPaint p; | 41 SkPaint p; |
43 p.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, | 42 p.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, |
44 SkBlurMask::ConvertRadiusToSigma(
5), | 43 SkBlurMask::ConvertRadiusToSigma(
5), |
45 SkBlurMaskFilter::kNone_BlurFlag)
); | 44 SkBlurMaskFilter::kNone_BlurFlag)
); |
46 | 45 |
47 SkScalar ww = SkIntToScalar(W); | 46 SkScalar ww = SkIntToScalar(W); |
48 SkScalar hh = SkIntToScalar(H); | 47 SkScalar hh = SkIntToScalar(H); |
49 | 48 |
50 // draw a circle covering the upper | 49 // draw a circle covering the upper |
51 // left three quarters of the canvas | 50 // left three quarters of the canvas |
52 p.setColor(0xFFCC44FF); | 51 p.setColor(0xFFCC44FF); |
53 SkRect r; | 52 SkRect r; |
54 r.set(0, 0, ww*3/4, hh*3/4); | 53 r.set(0, 0, ww*3/4, hh*3/4); |
55 r.offset(x, y); | 54 r.offset(x, y); |
56 canvas->drawOval(r, p); | 55 canvas->drawOval(r, p); |
57 | 56 |
58 p.setXfermode(std::move(mode)); | 57 p.setBlendMode(mode); |
59 | 58 |
60 // draw a square overlapping the circle | 59 // draw a square overlapping the circle |
61 // in the lower right of the canvas | 60 // in the lower right of the canvas |
62 p.setColor(0x00AA6633 | alpha << 24); | 61 p.setColor(0x00AA6633 | alpha << 24); |
63 r.set(ww/3, hh/3, ww*19/20, hh*19/20); | 62 r.set(ww/3, hh/3, ww*19/20, hh*19/20); |
64 r.offset(x, y); | 63 r.offset(x, y); |
65 canvas->drawRect(r, p); | 64 canvas->drawRect(r, p); |
66 } | 65 } |
67 | 66 |
68 public: | 67 public: |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 SkRect r0 = { 0, 0, 10.5f, 20 }; | 102 SkRect r0 = { 0, 0, 10.5f, 20 }; |
104 SkRect r1 = { 10.5f, 10, 20, 30 }; | 103 SkRect r1 = { 10.5f, 10, 20, 30 }; |
105 paint.setColor(SK_ColorRED); | 104 paint.setColor(SK_ColorRED); |
106 canvas->drawRect(r0, paint); | 105 canvas->drawRect(r0, paint); |
107 paint.setColor(SK_ColorBLUE); | 106 paint.setColor(SK_ColorBLUE); |
108 canvas->drawRect(r1, paint); | 107 canvas->drawRect(r1, paint); |
109 return; | 108 return; |
110 } | 109 } |
111 | 110 |
112 const struct { | 111 const struct { |
113 SkXfermode::Mode fMode; | 112 SkBlendMode fMode; |
114 const char* fLabel; | 113 const char* fLabel; |
115 } gModes[] = { | 114 } gModes[] = { |
116 { SkXfermode::kClear_Mode, "Clear" }, | 115 { SkBlendMode::kClear, "Clear" }, |
117 { SkXfermode::kSrc_Mode, "Src" }, | 116 { SkBlendMode::kSrc, "Src" }, |
118 { SkXfermode::kDst_Mode, "Dst" }, | 117 { SkBlendMode::kDst, "Dst" }, |
119 { SkXfermode::kSrcOver_Mode, "SrcOver" }, | 118 { SkBlendMode::kSrcOver, "SrcOver" }, |
120 { SkXfermode::kDstOver_Mode, "DstOver" }, | 119 { SkBlendMode::kDstOver, "DstOver" }, |
121 { SkXfermode::kSrcIn_Mode, "SrcIn" }, | 120 { SkBlendMode::kSrcIn, "SrcIn" }, |
122 { SkXfermode::kDstIn_Mode, "DstIn" }, | 121 { SkBlendMode::kDstIn, "DstIn" }, |
123 { SkXfermode::kSrcOut_Mode, "SrcOut" }, | 122 { SkBlendMode::kSrcOut, "SrcOut" }, |
124 { SkXfermode::kDstOut_Mode, "DstOut" }, | 123 { SkBlendMode::kDstOut, "DstOut" }, |
125 { SkXfermode::kSrcATop_Mode, "SrcATop" }, | 124 { SkBlendMode::kSrcATop, "SrcATop" }, |
126 { SkXfermode::kDstATop_Mode, "DstATop" }, | 125 { SkBlendMode::kDstATop, "DstATop" }, |
127 { SkXfermode::kXor_Mode, "Xor" }, | 126 { SkBlendMode::kXor, "Xor" }, |
128 | 127 |
129 { SkXfermode::kPlus_Mode, "Plus" }, | 128 { SkBlendMode::kPlus, "Plus" }, |
130 /*{ SkXfermode::kModulate_Mode, "Modulate" }, | |
131 { SkXfermode::kScreen_Mode, "Screen" }, | |
132 { SkXfermode::kOverlay_Mode, "Overlay" }, | |
133 { SkXfermode::kDarken_Mode, "Darken" }, | |
134 { SkXfermode::kLighten_Mode, "Lighten" }, | |
135 { SkXfermode::kColorDodge_Mode, "ColorDodge" }, | |
136 { SkXfermode::kColorBurn_Mode, "ColorBurn" }, | |
137 { SkXfermode::kHardLight_Mode, "HardLight" }, | |
138 { SkXfermode::kSoftLight_Mode, "SoftLight" }, | |
139 { SkXfermode::kDifference_Mode, "Difference" }, | |
140 { SkXfermode::kExclusion_Mode, "Exclusion" },*/ | |
141 }; | 129 }; |
142 | 130 |
143 const SkScalar w = SkIntToScalar(W); | 131 const SkScalar w = SkIntToScalar(W); |
144 const SkScalar h = SkIntToScalar(H); | 132 const SkScalar h = SkIntToScalar(H); |
145 SkMatrix m; | 133 SkMatrix m; |
146 m.setScale(SkIntToScalar(6), SkIntToScalar(6)); | 134 m.setScale(SkIntToScalar(6), SkIntToScalar(6)); |
147 auto s = SkShader::MakeBitmapShader(fBG, SkShader::kRepeat_TileMode, | 135 auto s = SkShader::MakeBitmapShader(fBG, SkShader::kRepeat_TileMode, |
148 SkShader::kRepeat_TileMode, &m); | 136 SkShader::kRepeat_TileMode, &m); |
149 | 137 |
150 SkPaint labelP; | 138 SkPaint labelP; |
(...skipping 10 matching lines...) Expand all Loading... |
161 for (size_t i = 0; i < SK_ARRAY_COUNT(gModes); i++) { | 149 for (size_t i = 0; i < SK_ARRAY_COUNT(gModes); i++) { |
162 SkRect r; | 150 SkRect r; |
163 r.set(x, y, x+w, y+h); | 151 r.set(x, y, x+w, y+h); |
164 | 152 |
165 SkPaint p; | 153 SkPaint p; |
166 p.setStyle(SkPaint::kFill_Style); | 154 p.setStyle(SkPaint::kFill_Style); |
167 p.setShader(s); | 155 p.setShader(s); |
168 canvas->drawRect(r, p); | 156 canvas->drawRect(r, p); |
169 | 157 |
170 canvas->saveLayer(&r, nullptr); | 158 canvas->saveLayer(&r, nullptr); |
171 draw_mode(canvas, SkXfermode::Make(gModes[i].fMode), | 159 draw_mode(canvas, gModes[i].fMode, twice ? 0x88 : 0xFF, r.fLeft,
r.fTop); |
172 twice ? 0x88 : 0xFF, r.fLeft, r.fTop); | |
173 canvas->restore(); | 160 canvas->restore(); |
174 | 161 |
175 r.inset(-SK_ScalarHalf, -SK_ScalarHalf); | 162 r.inset(-SK_ScalarHalf, -SK_ScalarHalf); |
176 p.setStyle(SkPaint::kStroke_Style); | 163 p.setStyle(SkPaint::kStroke_Style); |
177 p.setShader(nullptr); | 164 p.setShader(nullptr); |
178 canvas->drawRect(r, p); | 165 canvas->drawRect(r, p); |
179 | 166 |
180 canvas->drawText(gModes[i].fLabel, strlen(gModes[i].fLabel), | 167 canvas->drawText(gModes[i].fLabel, strlen(gModes[i].fLabel), |
181 x + w/2, y - labelP.getTextSize()/2, labelP); | 168 x + w/2, y - labelP.getTextSize()/2, labelP); |
182 x += w + SkIntToScalar(10); | 169 x += w + SkIntToScalar(10); |
183 if ((i % W) == W - 1) { | 170 if ((i % W) == W - 1) { |
184 x = x0; | 171 x = x0; |
185 y += h + SkIntToScalar(30); | 172 y += h + SkIntToScalar(30); |
186 } | 173 } |
187 } | 174 } |
188 x0 += SkIntToScalar(400); | 175 x0 += SkIntToScalar(400); |
189 } | 176 } |
190 } | 177 } |
191 | 178 |
192 private: | 179 private: |
193 typedef SampleView INHERITED; | 180 typedef SampleView INHERITED; |
194 }; | 181 }; |
195 | 182 |
196 ////////////////////////////////////////////////////////////////////////////// | 183 ////////////////////////////////////////////////////////////////////////////// |
197 | 184 |
198 static SkView* MyFactory() { return new XfermodesBlurView; } | 185 static SkView* MyFactory() { return new XfermodesBlurView; } |
199 static SkViewRegister reg(MyFactory); | 186 static SkViewRegister reg(MyFactory); |
OLD | NEW |