86 {
87 constexpr int WW = 100,
88 HH = 32;
89
94
97 0, 0, 0, 0,
98 0, 0, 0, one,
99 0, one, 0, 0,
100 0, 0, one, 0,
101 0, one, one, 0,
102 0, one, -one, 0,
103 0, one/2, one/2, 0,
104 0, one/2, one/2, one/4,
105 0, one/2, one/2, -one/4,
106 one/4, one/2, one/2, 0,
107 -one/4, one/2, one/2, 0,
108 };
109
112
113
114
117 while (k < stop) {
118 {
126 dstFilter, srcFilter, rect));
129
132 }
133
134 k += 4;
136 }
137
138
139
140
141
142
143 for (int i = 0; i < 2; i++) {
144 const bool enforcePMColor = (i == 0);
145
146 {
151
154 nullptr, nullptr);
157 std::move(bg), dstFilter, rect));
161
162
164 SkString str(enforcePMColor ?
"enforcePM" :
"no enforcePM");
166 }
168 }
169 }
static sk_sp< SkImage > make_src(int w, int h)
static sk_sp< SkImage > make_dst(int w, int h)
static void show_k_text(SkCanvas *canvas, SkScalar x, SkScalar y, const SkScalar k[])
int saveLayer(const SkRect *bounds, const SkPaint *paint)
void translate(SkScalar dx, SkScalar dy)
void drawString(const char str[], SkScalar x, SkScalar y, const SkFont &font, const SkPaint &paint)
void drawImage(const SkImage *image, SkScalar left, SkScalar top)
static sk_sp< SkImageFilter > Arithmetic(SkScalar k1, SkScalar k2, SkScalar k3, SkScalar k4, bool enforcePMColor, sk_sp< SkImageFilter > background, sk_sp< SkImageFilter > foreground, const CropRect &cropRect={})
static sk_sp< SkImageFilter > Image(sk_sp< SkImage > image, const SkRect &srcRect, const SkRect &dstRect, const SkSamplingOptions &sampling)
sk_sp< SkBlender > blender SkRect rect
font
Font Metadata and Metrics.
static constexpr SkRect MakeWH(float w, float h)