| 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 |