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

Side by Side Diff: gm/typeface.cpp

Issue 2350453002: GM: add test for type1 font (Closed)
Patch Set: comments from bungeman@ Created 4 years, 3 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 | « no previous file | resources/fonts/Roboto2-Regular.pfa » ('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 * Copyright 2012 Google Inc. 2 * Copyright 2012 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 "Resources.h" 9 #include "Resources.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 drawKernText(canvas, text, textLen, x + 240, y, paint); 147 drawKernText(canvas, text, textLen, x + 240, y, paint);
148 } 148 }
149 y += dy; 149 y += dy;
150 } 150 }
151 } 151 }
152 152
153 private: 153 private:
154 typedef skiagm::GM INHERITED; 154 typedef skiagm::GM INHERITED;
155 }; 155 };
156 156
157 class TypefaceRenderingGM : public skiagm::GM { 157 DEF_GM( return new TypefaceStylesGM(false); )
158 sk_sp<SkTypeface> fFace; 158 DEF_GM( return new TypefaceStylesGM(true); )
159 159
160 protected: 160 ////////////////////////////////////////////////////////////////////////////////
161 void onOnceBeforeDraw() override {
162 fFace = MakeResourceAsTypeface("/fonts/hintgasp.ttf");
163 }
164 161
165 SkString onShortName() override { 162 static void draw_typeface_rendering_gm(SkCanvas* canvas, sk_sp<SkTypeface> face,
166 SkString name("typefacerendering"); 163 char character = 'A') {
167 name.append(sk_tool_utils::major_platform_os_name());
168 return name;
169 }
170
171 SkISize onISize() override {
172 return SkISize::Make(640, 680);
173 }
174
175 void onDraw(SkCanvas* canvas) override {
176 struct AliasType { 164 struct AliasType {
177 bool antiAlias; 165 bool antiAlias;
178 bool subpixelAntitalias; 166 bool subpixelAntitalias;
179 bool inLayer; 167 bool inLayer;
180 } constexpr aliasTypes[] { 168 } constexpr aliasTypes[] {
181 #ifndef SK_BUILD_FOR_IOS 169 #ifndef SK_BUILD_FOR_IOS
182 // This gm crashes on iOS when drawing an embedded bitmap when reque sting aliased rendering. 170 // This gm crashes on iOS when drawing an embedded bitmap when reque sting aliased rendering.
183 // The crash looks like 171 // The crash looks like
184 // libTrueTypeScaler.dylib`<redacted> + 80 172 // libTrueTypeScaler.dylib`<redacted> + 80
185 // stop reason = EXC_BAD_ACCESS (code=EXC_ARM_DA_ALIGN, address=.. .) 173 // stop reason = EXC_BAD_ACCESS (code=EXC_ARM_DA_ALIGN, address=.. .)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 } constexpr subpixelTypes[] = { 207 } constexpr subpixelTypes[] = {
220 { false, { 0.00, 0.00 } }, 208 { false, { 0.00, 0.00 } },
221 { true , { 0.00, 0.00 } }, 209 { true , { 0.00, 0.00 } },
222 { true , { 0.25, 0.00 } }, 210 { true , { 0.25, 0.00 } },
223 { true , { 0.25, 0.25 } }, 211 { true , { 0.25, 0.25 } },
224 }; 212 };
225 213
226 constexpr bool rotateABitTypes[] = { false, true }; 214 constexpr bool rotateABitTypes[] = { false, true };
227 215
228 SkPaint paint; 216 SkPaint paint;
229 paint.setTypeface(fFace); 217 paint.setTypeface(face);
230 paint.setEmbeddedBitmapText(true); 218 paint.setEmbeddedBitmapText(true);
231 219
232 SkScalar x = 0; 220 SkScalar x = 0;
233 SkScalar xMax = x; 221 SkScalar xMax = x;
234 SkScalar xBase = 0; 222 SkScalar xBase = 0;
235 SkScalar y = 0; // The baseline of the previous output 223 SkScalar y = 0; // The baseline of the previous output
236 for (const SubpixelType subpixel : subpixelTypes) { 224 for (const SubpixelType subpixel : subpixelTypes) {
237 y = 0; 225 y = 0;
238 paint.setSubpixelText(subpixel.requested); 226 paint.setSubpixelText(subpixel.requested);
239 227
(...skipping 13 matching lines...) Expand all
253 y += dy; 241 y += dy;
254 for (const SkPaint::Hinting& hinting : hintingTypes) { 242 for (const SkPaint::Hinting& hinting : hintingTypes) {
255 paint.setHinting(hinting); 243 paint.setHinting(hinting);
256 244
257 for (const bool& rotateABit : rotateABitTypes) { 245 for (const bool& rotateABit : rotateABitTypes) {
258 SkAutoCanvasRestore acr(canvas, true); 246 SkAutoCanvasRestore acr(canvas, true);
259 if (rotateABit) { 247 if (rotateABit) {
260 canvas->rotate(2, x + subpixel.offset.x(), 248 canvas->rotate(2, x + subpixel.offset.x(),
261 y + subpixel.offset.y()); 249 y + subpixel.offset.y());
262 } 250 }
263 canvas->drawText("A", 1, x + subpixel.offset.x(), 251 canvas->drawText(&character, 1,
264 y + subpixel.offset.y(), pa int); 252 x + subpixel.offset.x(),
253 y + subpixel.offset.y(), paint);
265 254
266 SkScalar dx = SkScalarCeilToScalar(paint.measureText ("A", 1)) + 5; 255 SkScalar dx = SkScalarCeilToScalar(
256 paint.measureText(&character, 1)) + 5;
267 x += dx; 257 x += dx;
268 xMax = SkTMax(x, xMax); 258 xMax = SkTMax(x, xMax);
269 } 259 }
270 } 260 }
271 } 261 }
272 y += 10; 262 y += 10;
273 } 263 }
274 xBase = xMax; 264 xBase = xMax;
275 } 265 }
266 }
267
268 DEF_SIMPLE_GM_BG_NAME(typefacerendering, canvas, 640, 680, SK_ColorWHITE,
269 SkStringPrintf("typefacerendering%s",
270 sk_tool_utils::major_platform_os_name().c_s tr())) {
271 if (sk_sp<SkTypeface> face = MakeResourceAsTypeface("/fonts/hintgasp.ttf")) {
272 draw_typeface_rendering_gm(canvas, std::move(face));
276 } 273 }
274 }
277 275
278 private: 276 // Type1 fonts don't currently work in Skia on Windows.
279 typedef skiagm::GM INHERITED; 277 #ifndef SK_BUILD_FOR_WIN
280 };
281 278
282 /////////////////////////////////////////////////////////////////////////////// 279 DEF_SIMPLE_GM_BG_NAME(typefacerendering_pfa, canvas, 640, 680, SK_ColorWHITE,
280 SkStringPrintf("typefacerendering_pfa%s",
281 sk_tool_utils::major_platform_os_name().c_s tr())) {
282 if (sk_sp<SkTypeface> face = MakeResourceAsTypeface("fonts/Roboto2-Regular.p fa")) {
283 // This subsetted typeface doesn't have the character 'A'.
284 draw_typeface_rendering_gm(canvas, std::move(face), 'O');
285 }
286 }
283 287
284 DEF_GM( return new TypefaceStylesGM(false); ) 288 DEF_SIMPLE_GM_BG_NAME(typefacerendering_pfb, canvas, 640, 680, SK_ColorWHITE,
285 DEF_GM( return new TypefaceStylesGM(true); ) 289 SkStringPrintf("typefacerendering_pfb%s",
286 DEF_GM( return new TypefaceRenderingGM(); ) 290 sk_tool_utils::major_platform_os_name().c_s tr())) {
291 if (sk_sp<SkTypeface> face = MakeResourceAsTypeface("fonts/Roboto2-Regular.p fb")) {
292 draw_typeface_rendering_gm(canvas, std::move(face), 'O');
293 }
294 }
295
296 #endif
OLDNEW
« no previous file with comments | « no previous file | resources/fonts/Roboto2-Regular.pfa » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698