| 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 "gm.h" | 8 #include "gm.h" |
| 9 #include "SkBlurMask.h" | 9 #include "SkBlurMask.h" |
| 10 #include "SkBlurMaskFilter.h" | 10 #include "SkBlurMaskFilter.h" |
| 11 #include "SkReadBuffer.h" | 11 #include "SkReadBuffer.h" |
| 12 #include "SkTextBlob.h" | 12 #include "SkTextBlob.h" |
| 13 #include "SkWriteBuffer.h" | 13 #include "SkWriteBuffer.h" |
| 14 #include "SkLayerRasterizer.h" | 14 #include "SkLayerRasterizer.h" |
| 15 | 15 |
| 16 static void r0(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 16 static void r0(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 17 p.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, | 17 p.setMaskFilter(SkBlurMaskFilter::Make(kNormal_SkBlurStyle, |
| 18 SkBlurMask::ConvertRadiusToSigma(SkIn
tToScalar(3)))); | 18 SkBlurMask::ConvertRadiusToSigma(SkIn
tToScalar(3)))); |
| 19 rastBuilder->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); | 19 rastBuilder->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); |
| 20 | 20 |
| 21 p.setMaskFilter(nullptr); | 21 p.setMaskFilter(nullptr); |
| 22 p.setStyle(SkPaint::kStroke_Style); | 22 p.setStyle(SkPaint::kStroke_Style); |
| 23 p.setStrokeWidth(SK_Scalar1); | 23 p.setStrokeWidth(SK_Scalar1); |
| 24 rastBuilder->addLayer(p); | 24 rastBuilder->addLayer(p); |
| 25 | 25 |
| 26 p.setAlpha(0x11); | 26 p.setAlpha(0x11); |
| 27 p.setStyle(SkPaint::kFill_Style); | 27 p.setStyle(SkPaint::kFill_Style); |
| 28 p.setXfermodeMode(SkXfermode::kSrc_Mode); | 28 p.setBlendMode(SkBlendMode::kSrc); |
| 29 rastBuilder->addLayer(p); | 29 rastBuilder->addLayer(p); |
| 30 } | 30 } |
| 31 | 31 |
| 32 static void r1(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 32 static void r1(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 33 rastBuilder->addLayer(p); | 33 rastBuilder->addLayer(p); |
| 34 | 34 |
| 35 p.setAlpha(0x40); | 35 p.setAlpha(0x40); |
| 36 p.setXfermodeMode(SkXfermode::kSrc_Mode); | 36 p.setBlendMode(SkBlendMode::kSrc); |
| 37 p.setStyle(SkPaint::kStroke_Style); | 37 p.setStyle(SkPaint::kStroke_Style); |
| 38 p.setStrokeWidth(SK_Scalar1*2); | 38 p.setStrokeWidth(SK_Scalar1*2); |
| 39 rastBuilder->addLayer(p); | 39 rastBuilder->addLayer(p); |
| 40 } | 40 } |
| 41 | 41 |
| 42 static void r2(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 42 static void r2(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 43 p.setStyle(SkPaint::kStrokeAndFill_Style); | 43 p.setStyle(SkPaint::kStrokeAndFill_Style); |
| 44 p.setStrokeWidth(SK_Scalar1*4); | 44 p.setStrokeWidth(SK_Scalar1*4); |
| 45 rastBuilder->addLayer(p); | 45 rastBuilder->addLayer(p); |
| 46 | 46 |
| 47 p.setStyle(SkPaint::kStroke_Style); | 47 p.setStyle(SkPaint::kStroke_Style); |
| 48 p.setStrokeWidth(SK_Scalar1*3/2); | 48 p.setStrokeWidth(SK_Scalar1*3/2); |
| 49 p.setXfermodeMode(SkXfermode::kClear_Mode); | 49 p.setBlendMode(SkBlendMode::kClear); |
| 50 rastBuilder->addLayer(p); | 50 rastBuilder->addLayer(p); |
| 51 } | 51 } |
| 52 | 52 |
| 53 static void r3(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 53 static void r3(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 54 p.setStyle(SkPaint::kStroke_Style); | 54 p.setStyle(SkPaint::kStroke_Style); |
| 55 p.setStrokeWidth(SK_Scalar1*3); | 55 p.setStrokeWidth(SK_Scalar1*3); |
| 56 rastBuilder->addLayer(p); | 56 rastBuilder->addLayer(p); |
| 57 | 57 |
| 58 p.setAlpha(0x20); | 58 p.setAlpha(0x20); |
| 59 p.setStyle(SkPaint::kFill_Style); | 59 p.setStyle(SkPaint::kFill_Style); |
| 60 p.setXfermodeMode(SkXfermode::kSrc_Mode); | 60 p.setBlendMode(SkBlendMode::kSrc); |
| 61 rastBuilder->addLayer(p); | 61 rastBuilder->addLayer(p); |
| 62 } | 62 } |
| 63 | 63 |
| 64 static void r4(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 64 static void r4(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 65 p.setAlpha(0x60); | 65 p.setAlpha(0x60); |
| 66 rastBuilder->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); | 66 rastBuilder->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); |
| 67 | 67 |
| 68 p.setAlpha(0xFF); | 68 p.setAlpha(0xFF); |
| 69 p.setXfermodeMode(SkXfermode::kClear_Mode); | 69 p.setBlendMode(SkBlendMode::kClear); |
| 70 rastBuilder->addLayer(p, SK_Scalar1*3/2, SK_Scalar1*3/2); | 70 rastBuilder->addLayer(p, SK_Scalar1*3/2, SK_Scalar1*3/2); |
| 71 | 71 |
| 72 p.setXfermode(nullptr); | 72 p.setBlendMode(SkBlendMode::kSrcOver); |
| 73 rastBuilder->addLayer(p); | 73 rastBuilder->addLayer(p); |
| 74 } | 74 } |
| 75 | 75 |
| 76 #include "SkDiscretePathEffect.h" | 76 #include "SkDiscretePathEffect.h" |
| 77 | 77 |
| 78 static void r5(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 78 static void r5(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 79 rastBuilder->addLayer(p); | 79 rastBuilder->addLayer(p); |
| 80 | 80 |
| 81 p.setPathEffect(SkDiscretePathEffect::Make(SK_Scalar1*4, SK_Scalar1*3)); | 81 p.setPathEffect(SkDiscretePathEffect::Make(SK_Scalar1*4, SK_Scalar1*3)); |
| 82 p.setXfermodeMode(SkXfermode::kSrcOut_Mode); | 82 p.setBlendMode(SkBlendMode::kSrcOut); |
| 83 rastBuilder->addLayer(p); | 83 rastBuilder->addLayer(p); |
| 84 } | 84 } |
| 85 | 85 |
| 86 static void r6(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 86 static void r6(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 87 rastBuilder->addLayer(p); | 87 rastBuilder->addLayer(p); |
| 88 | 88 |
| 89 p.setAntiAlias(false); | 89 p.setAntiAlias(false); |
| 90 SkLayerRasterizer::Builder rastBuilder2; | 90 SkLayerRasterizer::Builder rastBuilder2; |
| 91 r5(&rastBuilder2, p); | 91 r5(&rastBuilder2, p); |
| 92 p.setRasterizer(rastBuilder2.detach()); | 92 p.setRasterizer(rastBuilder2.detach()); |
| 93 p.setXfermodeMode(SkXfermode::kClear_Mode); | 93 p.setBlendMode(SkBlendMode::kClear); |
| 94 rastBuilder->addLayer(p); | 94 rastBuilder->addLayer(p); |
| 95 } | 95 } |
| 96 | 96 |
| 97 #include "Sk2DPathEffect.h" | 97 #include "Sk2DPathEffect.h" |
| 98 | 98 |
| 99 static sk_sp<SkPathEffect> MakeDotEffect(SkScalar radius, const SkMatrix& matrix
) { | 99 static sk_sp<SkPathEffect> MakeDotEffect(SkScalar radius, const SkMatrix& matrix
) { |
| 100 SkPath path; | 100 SkPath path; |
| 101 path.addCircle(0, 0, radius); | 101 path.addCircle(0, 0, radius); |
| 102 return SkPath2DPathEffect::Make(matrix, path); | 102 return SkPath2DPathEffect::Make(matrix, path); |
| 103 } | 103 } |
| 104 | 104 |
| 105 static void r7(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 105 static void r7(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 106 SkMatrix lattice; | 106 SkMatrix lattice; |
| 107 lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); | 107 lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); |
| 108 lattice.postSkew(SK_Scalar1/3, 0, 0, 0); | 108 lattice.postSkew(SK_Scalar1/3, 0, 0, 0); |
| 109 p.setPathEffect(MakeDotEffect(SK_Scalar1*4, lattice)); | 109 p.setPathEffect(MakeDotEffect(SK_Scalar1*4, lattice)); |
| 110 rastBuilder->addLayer(p); | 110 rastBuilder->addLayer(p); |
| 111 } | 111 } |
| 112 | 112 |
| 113 static void r8(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 113 static void r8(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 114 rastBuilder->addLayer(p); | 114 rastBuilder->addLayer(p); |
| 115 | 115 |
| 116 SkMatrix lattice; | 116 SkMatrix lattice; |
| 117 lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); | 117 lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); |
| 118 lattice.postSkew(SK_Scalar1/3, 0, 0, 0); | 118 lattice.postSkew(SK_Scalar1/3, 0, 0, 0); |
| 119 p.setPathEffect(MakeDotEffect(SK_Scalar1*2, lattice)); | 119 p.setPathEffect(MakeDotEffect(SK_Scalar1*2, lattice)); |
| 120 p.setXfermodeMode(SkXfermode::kClear_Mode); | 120 p.setBlendMode(SkBlendMode::kClear); |
| 121 rastBuilder->addLayer(p); | 121 rastBuilder->addLayer(p); |
| 122 | 122 |
| 123 p.setPathEffect(nullptr); | 123 p.setPathEffect(nullptr); |
| 124 p.setXfermode(nullptr); | 124 p.setBlendMode(SkBlendMode::kSrcOver); |
| 125 p.setStyle(SkPaint::kStroke_Style); | 125 p.setStyle(SkPaint::kStroke_Style); |
| 126 p.setStrokeWidth(SK_Scalar1); | 126 p.setStrokeWidth(SK_Scalar1); |
| 127 rastBuilder->addLayer(p); | 127 rastBuilder->addLayer(p); |
| 128 } | 128 } |
| 129 | 129 |
| 130 static void r9(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { | 130 static void r9(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) { |
| 131 rastBuilder->addLayer(p); | 131 rastBuilder->addLayer(p); |
| 132 | 132 |
| 133 SkMatrix lattice; | 133 SkMatrix lattice; |
| 134 lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0); | 134 lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0); |
| 135 lattice.postRotate(SkIntToScalar(30), 0, 0); | 135 lattice.postRotate(SkIntToScalar(30), 0, 0); |
| 136 p.setPathEffect(SkLine2DPathEffect::Make(SK_Scalar1*2, lattice)); | 136 p.setPathEffect(SkLine2DPathEffect::Make(SK_Scalar1*2, lattice)); |
| 137 p.setXfermodeMode(SkXfermode::kClear_Mode); | 137 p.setBlendMode(SkBlendMode::kClear); |
| 138 rastBuilder->addLayer(p); | 138 rastBuilder->addLayer(p); |
| 139 | 139 |
| 140 p.setPathEffect(nullptr); | 140 p.setPathEffect(nullptr); |
| 141 p.setXfermode(nullptr); | 141 p.setBlendMode(SkBlendMode::kSrcOver); |
| 142 p.setStyle(SkPaint::kStroke_Style); | 142 p.setStyle(SkPaint::kStroke_Style); |
| 143 p.setStrokeWidth(SK_Scalar1); | 143 p.setStrokeWidth(SK_Scalar1); |
| 144 rastBuilder->addLayer(p); | 144 rastBuilder->addLayer(p); |
| 145 } | 145 } |
| 146 | 146 |
| 147 typedef void (*raster_proc)(SkLayerRasterizer::Builder*, SkPaint&); | 147 typedef void (*raster_proc)(SkLayerRasterizer::Builder*, SkPaint&); |
| 148 | 148 |
| 149 constexpr raster_proc gRastProcs[] = { | 149 constexpr raster_proc gRastProcs[] = { |
| 150 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 | 150 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 |
| 151 }; | 151 }; |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 | 489 |
| 490 SkScalar start = textPt.fX; | 490 SkScalar start = textPt.fX; |
| 491 SkScalar end = posX; | 491 SkScalar end = posX; |
| 492 SkScalar uPos = pos[0].fY + uWidth; | 492 SkScalar uPos = pos[0].fY + uWidth; |
| 493 SkPath underline = create_underline(intersections, start, end, uPos, uWi
dth, textSize); | 493 SkPath underline = create_underline(intersections, start, end, uPos, uWi
dth, textSize); |
| 494 paint.setStyle(SkPaint::kStroke_Style); | 494 paint.setStyle(SkPaint::kStroke_Style); |
| 495 canvas->drawPath(underline, paint); | 495 canvas->drawPath(underline, paint); |
| 496 canvas->translate(0, textSize * 1.3f); | 496 canvas->translate(0, textSize * 1.3f); |
| 497 } | 497 } |
| 498 } | 498 } |
| OLD | NEW |