Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: samplecode/SampleAll.cpp

Issue 176873004: Builder class for SkLayerRasterizer. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Make ReadLayers private Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « samplecode/ClockFaceView.cpp ('k') | samplecode/SamplePathEffects.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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);
OLDNEW
« no previous file with comments | « samplecode/ClockFaceView.cpp ('k') | samplecode/SamplePathEffects.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698