OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "SampleCode.h" | 8 #include "SampleCode.h" |
9 #include "SkBlurMask.h" | 9 #include "SkBlurMask.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 result[i] = src[i] & mask; | 73 result[i] = src[i] & mask; |
74 } | 74 } |
75 } | 75 } |
76 | 76 |
77 private: | 77 private: |
78 SkPMColor fMask; | 78 SkPMColor fMask; |
79 }; | 79 }; |
80 | 80 |
81 /////////////////////////////////////////////////////////// | 81 /////////////////////////////////////////////////////////// |
82 | 82 |
83 static void r0(SkLayerRasterizer* rast, SkPaint& p) { | 83 static void r0(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
84 p.setMaskFilter(SkBlurMaskFilter::Create(SkBlurMaskFilter::kNormal_BlurStyle
, | 84 p.setMaskFilter(SkBlurMaskFilter::Create(SkBlurMaskFilter::kNormal_BlurStyle
, |
85 SkBlurMask::ConvertRadiusToSigma(Sk
IntToScalar(3)), | 85 SkBlurMask::ConvertRadiusToSigma(Sk
IntToScalar(3)), |
86 SkBlurMaskFilter::kNone_BlurFlag))-
>unref(); | 86 SkBlurMaskFilter::kNone_BlurFlag))-
>unref(); |
87 rast->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); | 87 rastBuilder->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); |
88 | 88 |
89 p.setMaskFilter(NULL); | 89 p.setMaskFilter(NULL); |
90 p.setStyle(SkPaint::kStroke_Style); | 90 p.setStyle(SkPaint::kStroke_Style); |
91 p.setStrokeWidth(SK_Scalar1); | 91 p.setStrokeWidth(SK_Scalar1); |
92 rast->addLayer(p); | 92 rastBuilder->addLayer(p); |
93 | 93 |
94 p.setAlpha(0x11); | 94 p.setAlpha(0x11); |
95 p.setStyle(SkPaint::kFill_Style); | 95 p.setStyle(SkPaint::kFill_Style); |
96 p.setXfermodeMode(SkXfermode::kSrc_Mode); | 96 p.setXfermodeMode(SkXfermode::kSrc_Mode); |
97 rast->addLayer(p); | 97 rastBuilder->addLayer(p); |
98 } | 98 } |
99 | 99 |
100 static void r1(SkLayerRasterizer* rast, SkPaint& p) { | 100 static void r1(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
101 rast->addLayer(p); | 101 rastBuilder->addLayer(p); |
102 | 102 |
103 p.setAlpha(0x40); | 103 p.setAlpha(0x40); |
104 p.setXfermodeMode(SkXfermode::kSrc_Mode); | 104 p.setXfermodeMode(SkXfermode::kSrc_Mode); |
105 p.setStyle(SkPaint::kStroke_Style); | 105 p.setStyle(SkPaint::kStroke_Style); |
106 p.setStrokeWidth(SK_Scalar1*2); | 106 p.setStrokeWidth(SK_Scalar1*2); |
107 rast->addLayer(p); | 107 rastBuilder->addLayer(p); |
108 } | 108 } |
109 | 109 |
110 static void r2(SkLayerRasterizer* rast, SkPaint& p) { | 110 static void r2(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
111 p.setStyle(SkPaint::kStrokeAndFill_Style); | 111 p.setStyle(SkPaint::kStrokeAndFill_Style); |
112 p.setStrokeWidth(SK_Scalar1*4); | 112 p.setStrokeWidth(SK_Scalar1*4); |
113 rast->addLayer(p); | 113 rastBuilder->addLayer(p); |
114 | 114 |
115 p.setStyle(SkPaint::kStroke_Style); | 115 p.setStyle(SkPaint::kStroke_Style); |
116 p.setStrokeWidth(SK_Scalar1*3/2); | 116 p.setStrokeWidth(SK_Scalar1*3/2); |
117 p.setXfermodeMode(SkXfermode::kClear_Mode); | 117 p.setXfermodeMode(SkXfermode::kClear_Mode); |
118 rast->addLayer(p); | 118 rastBuilder->addLayer(p); |
119 } | 119 } |
120 | 120 |
121 static void r3(SkLayerRasterizer* rast, SkPaint& p) { | 121 static void r3(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
122 p.setStyle(SkPaint::kStroke_Style); | 122 p.setStyle(SkPaint::kStroke_Style); |
123 p.setStrokeWidth(SK_Scalar1*3); | 123 p.setStrokeWidth(SK_Scalar1*3); |
124 rast->addLayer(p); | 124 rastBuilder->addLayer(p); |
125 | 125 |
126 p.setAlpha(0x20); | 126 p.setAlpha(0x20); |
127 p.setStyle(SkPaint::kFill_Style); | 127 p.setStyle(SkPaint::kFill_Style); |
128 p.setXfermodeMode(SkXfermode::kSrc_Mode); | 128 p.setXfermodeMode(SkXfermode::kSrc_Mode); |
129 rast->addLayer(p); | 129 rastBuilder->addLayer(p); |
130 } | 130 } |
131 | 131 |
132 static void r4(SkLayerRasterizer* rast, SkPaint& p) { | 132 static void r4(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
133 p.setAlpha(0x60); | 133 p.setAlpha(0x60); |
134 rast->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); | 134 rastBuilder->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); |
135 | 135 |
136 p.setAlpha(0xFF); | 136 p.setAlpha(0xFF); |
137 p.setXfermodeMode(SkXfermode::kClear_Mode); | 137 p.setXfermodeMode(SkXfermode::kClear_Mode); |
138 rast->addLayer(p, SK_Scalar1*3/2, SK_Scalar1*3/2); | 138 rastBuilder->addLayer(p, SK_Scalar1*3/2, SK_Scalar1*3/2); |
139 | 139 |
140 p.setXfermode(NULL); | 140 p.setXfermode(NULL); |
141 rast->addLayer(p); | 141 rastBuilder->addLayer(p); |
142 } | 142 } |
143 | 143 |
144 static void r5(SkLayerRasterizer* rast, SkPaint& p) { | 144 static void r5(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
145 rast->addLayer(p); | 145 rastBuilder->addLayer(p); |
146 | 146 |
147 p.setPathEffect(SkDiscretePathEffect::Create(SK_Scalar1*4, SK_Scalar1*3))->u
nref(); | 147 p.setPathEffect(SkDiscretePathEffect::Create(SK_Scalar1*4, SK_Scalar1*3))->u
nref(); |
148 p.setXfermodeMode(SkXfermode::kSrcOut_Mode); | 148 p.setXfermodeMode(SkXfermode::kSrcOut_Mode); |
149 rast->addLayer(p); | 149 rastBuilder->addLayer(p); |
150 } | 150 } |
151 | 151 |
152 static void r6(SkLayerRasterizer* rast, SkPaint& p) { | 152 static void r6(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
153 rast->addLayer(p); | 153 rastBuilder->addLayer(p); |
154 | 154 |
155 p.setAntiAlias(false); | 155 p.setAntiAlias(false); |
156 SkLayerRasterizer* rast2 = new SkLayerRasterizer; | 156 SkLayerRasterizer::Builder rastBuilder2; |
157 r5(rast2, p); | 157 r5(&rastBuilder2, p); |
158 p.setRasterizer(rast2)->unref(); | 158 p.setRasterizer(rastBuilder2.detachRasterizer())->unref(); |
159 p.setXfermodeMode(SkXfermode::kClear_Mode); | 159 p.setXfermodeMode(SkXfermode::kClear_Mode); |
160 rast->addLayer(p); | 160 rastBuilder->addLayer(p); |
161 } | 161 } |
162 | 162 |
163 class Dot2DPathEffect : public Sk2DPathEffect { | 163 class Dot2DPathEffect : public Sk2DPathEffect { |
164 public: | 164 public: |
165 Dot2DPathEffect(SkScalar radius, const SkMatrix& matrix) | 165 Dot2DPathEffect(SkScalar radius, const SkMatrix& matrix) |
166 : Sk2DPathEffect(matrix), fRadius(radius) {} | 166 : Sk2DPathEffect(matrix), fRadius(radius) {} |
167 | 167 |
168 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(Dot2DPathEffect) | 168 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(Dot2DPathEffect) |
169 | 169 |
170 protected: | 170 protected: |
171 virtual void next(const SkPoint& loc, int u, int v, SkPath* dst) const SK_OV
ERRIDE { | 171 virtual void next(const SkPoint& loc, int u, int v, SkPath* dst) const SK_OV
ERRIDE { |
172 dst->addCircle(loc.fX, loc.fY, fRadius); | 172 dst->addCircle(loc.fX, loc.fY, fRadius); |
173 } | 173 } |
174 | 174 |
175 Dot2DPathEffect(SkReadBuffer& buffer) : INHERITED(buffer) { | 175 Dot2DPathEffect(SkReadBuffer& buffer) : INHERITED(buffer) { |
176 fRadius = buffer.readScalar(); | 176 fRadius = buffer.readScalar(); |
177 } | 177 } |
178 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE { | 178 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE { |
179 this->INHERITED::flatten(buffer); | 179 this->INHERITED::flatten(buffer); |
180 buffer.writeScalar(fRadius); | 180 buffer.writeScalar(fRadius); |
181 } | 181 } |
182 | 182 |
183 private: | 183 private: |
184 SkScalar fRadius; | 184 SkScalar fRadius; |
185 | 185 |
186 typedef Sk2DPathEffect INHERITED; | 186 typedef Sk2DPathEffect INHERITED; |
187 }; | 187 }; |
188 | 188 |
189 static void r7(SkLayerRasterizer* rast, SkPaint& p) { | 189 static void r7(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
190 SkMatrix lattice; | 190 SkMatrix lattice; |
191 lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); | 191 lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); |
192 lattice.postSkew(SK_Scalar1/3, 0, 0, 0); | 192 lattice.postSkew(SK_Scalar1/3, 0, 0, 0); |
193 p.setPathEffect(new Dot2DPathEffect(SK_Scalar1*4, lattice))->unref(); | 193 p.setPathEffect(new Dot2DPathEffect(SK_Scalar1*4, lattice))->unref(); |
194 rast->addLayer(p); | 194 rastBuilder->addLayer(p); |
195 } | 195 } |
196 | 196 |
197 static void r8(SkLayerRasterizer* rast, SkPaint& p) { | 197 static void r8(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
198 rast->addLayer(p); | 198 rastBuilder->addLayer(p); |
199 | 199 |
200 SkMatrix lattice; | 200 SkMatrix lattice; |
201 lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); | 201 lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); |
202 lattice.postSkew(SK_Scalar1/3, 0, 0, 0); | 202 lattice.postSkew(SK_Scalar1/3, 0, 0, 0); |
203 p.setPathEffect(new Dot2DPathEffect(SK_Scalar1*2, lattice))->unref(); | 203 p.setPathEffect(new Dot2DPathEffect(SK_Scalar1*2, lattice))->unref(); |
204 p.setXfermodeMode(SkXfermode::kClear_Mode); | 204 p.setXfermodeMode(SkXfermode::kClear_Mode); |
205 rast->addLayer(p); | 205 rastBuilder->addLayer(p); |
206 | 206 |
207 p.setPathEffect(NULL); | 207 p.setPathEffect(NULL); |
208 p.setXfermode(NULL); | 208 p.setXfermode(NULL); |
209 p.setStyle(SkPaint::kStroke_Style); | 209 p.setStyle(SkPaint::kStroke_Style); |
210 p.setStrokeWidth(SK_Scalar1); | 210 p.setStrokeWidth(SK_Scalar1); |
211 rast->addLayer(p); | 211 rastBuilder->addLayer(p); |
212 } | 212 } |
213 | 213 |
214 static void r9(SkLayerRasterizer* rast, SkPaint& p) { | 214 static void r9(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
215 rast->addLayer(p); | 215 rastBuilder->addLayer(p); |
216 | 216 |
217 SkMatrix lattice; | 217 SkMatrix lattice; |
218 lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0); | 218 lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0); |
219 lattice.postRotate(SkIntToScalar(30), 0, 0); | 219 lattice.postRotate(SkIntToScalar(30), 0, 0); |
220 p.setPathEffect(SkLine2DPathEffect::Create(SK_Scalar1*2, lattice))->unref(); | 220 p.setPathEffect(SkLine2DPathEffect::Create(SK_Scalar1*2, lattice))->unref(); |
221 p.setXfermodeMode(SkXfermode::kClear_Mode); | 221 p.setXfermodeMode(SkXfermode::kClear_Mode); |
222 rast->addLayer(p); | 222 rastBuilder->addLayer(p); |
223 | 223 |
224 p.setPathEffect(NULL); | 224 p.setPathEffect(NULL); |
225 p.setXfermode(NULL); | 225 p.setXfermode(NULL); |
226 p.setStyle(SkPaint::kStroke_Style); | 226 p.setStyle(SkPaint::kStroke_Style); |
227 p.setStrokeWidth(SK_Scalar1); | 227 p.setStrokeWidth(SK_Scalar1); |
228 rast->addLayer(p); | 228 rastBuilder->addLayer(p); |
229 } | 229 } |
230 | 230 |
231 typedef void (*raster_proc)(SkLayerRasterizer*, SkPaint&); | 231 typedef void (*raster_proc)(SkLayerRasterizer::Builder*, SkPaint&); |
232 | 232 |
233 static const raster_proc gRastProcs[] = { | 233 static const raster_proc gRastProcs[] = { |
234 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 | 234 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 |
235 }; | 235 }; |
236 | 236 |
237 static const struct { | 237 static const struct { |
238 SkColor fMul, fAdd; | 238 SkColor fMul, fAdd; |
239 } gLightingColors[] = { | 239 } gLightingColors[] = { |
240 { 0x808080, 0x800000 }, // general case | 240 { 0x808080, 0x800000 }, // general case |
241 { 0x707070, 0x707070 }, // no-pin case | 241 { 0x707070, 0x707070 }, // no-pin case |
242 { 0xFFFFFF, 0x800000 }, // just-add case | 242 { 0xFFFFFF, 0x800000 }, // just-add case |
243 { 0x808080, 0x000000 }, // just-mul case | 243 { 0x808080, 0x000000 }, // just-mul case |
244 { 0xFFFFFF, 0x000000 } // identity case | 244 { 0xFFFFFF, 0x000000 } // identity case |
245 }; | 245 }; |
246 | 246 |
247 static void apply_shader(SkPaint* paint, int index) { | 247 static void apply_shader(SkPaint* paint, int index) { |
248 raster_proc proc = gRastProcs[index]; | 248 raster_proc proc = gRastProcs[index]; |
249 if (proc) { | 249 if (proc) { |
250 SkPaint p; | 250 SkPaint p; |
251 SkLayerRasterizer* rast = new SkLayerRasterizer; | 251 SkLayerRasterizer::Builder rastBuilder; |
252 | 252 |
253 p.setAntiAlias(true); | 253 p.setAntiAlias(true); |
254 proc(rast, p); | 254 proc(&rastBuilder, p); |
255 paint->setRasterizer(rast)->unref(); | 255 paint->setRasterizer(rastBuilder.detachRasterizer())->unref(); |
256 } | 256 } |
257 | 257 |
258 #if 1 | 258 #if 1 |
259 SkScalar dir[] = { SK_Scalar1, SK_Scalar1, SK_Scalar1 }; | 259 SkScalar dir[] = { SK_Scalar1, SK_Scalar1, SK_Scalar1 }; |
260 paint->setMaskFilter(SkBlurMaskFilter::CreateEmboss( | 260 paint->setMaskFilter(SkBlurMaskFilter::CreateEmboss( |
261 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(3)), dir, | 261 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(3)), dir, |
262 SK_Scalar1/4, SkIntToScalar(4)))->unref(); | 262 SK_Scalar1/4, SkIntToScalar(4)))->unref(); |
263 paint->setColor(SK_ColorBLUE); | 263 paint->setColor(SK_ColorBLUE); |
264 #endif | 264 #endif |
265 } | 265 } |
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 private: | 642 private: |
643 SkPoint fClickPt; | 643 SkPoint fClickPt; |
644 SkBitmap fBug, fTb, fTx; | 644 SkBitmap fBug, fTb, fTx; |
645 typedef SampleView INHERITED; | 645 typedef SampleView INHERITED; |
646 }; | 646 }; |
647 | 647 |
648 ////////////////////////////////////////////////////////////////////////////// | 648 ////////////////////////////////////////////////////////////////////////////// |
649 | 649 |
650 static SkView* MyFactory() { return new DemoView; } | 650 static SkView* MyFactory() { return new DemoView; } |
651 static SkViewRegister reg(MyFactory); | 651 static SkViewRegister reg(MyFactory); |
OLD | NEW |