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 |