1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2016 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "gm/gm.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFont.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkFontTypes.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTextBlob.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "tools/fonts/FontToolUtils.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker #include <string.h> 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker // https://bugs.skia.org/5321 20*c8dee2aaSAndroid Build Coastguard Worker // two strings should draw the same. PDF did not. 21*c8dee2aaSAndroid Build Coastguard Worker DEF_SIMPLE_GM(skbug_5321, canvas, 128, 128) { 22*c8dee2aaSAndroid Build Coastguard Worker SkFont font = ToolUtils::DefaultPortableFont(); 23*c8dee2aaSAndroid Build Coastguard Worker font.setEdging(SkFont::Edging::kAlias); 24*c8dee2aaSAndroid Build Coastguard Worker font.setSize(30); 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker const char text[] = "x\314\200y"; // utf8(u"x\u0300y") 27*c8dee2aaSAndroid Build Coastguard Worker SkScalar x = 20, y = 45; 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker size_t byteLength = strlen(text); 30*c8dee2aaSAndroid Build Coastguard Worker canvas->drawSimpleText(text, byteLength, SkTextEncoding::kUTF8, x, y, font, SkPaint()); 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker y += font.getMetrics(nullptr); 33*c8dee2aaSAndroid Build Coastguard Worker int glyph_count = font.countText(text, byteLength, SkTextEncoding::kUTF8); 34*c8dee2aaSAndroid Build Coastguard Worker SkTextBlobBuilder builder; 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker auto rec = builder.allocRunPosH(font, glyph_count, y); 37*c8dee2aaSAndroid Build Coastguard Worker font.textToGlyphs(text, byteLength, SkTextEncoding::kUTF8, rec.glyphs, glyph_count); 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker font.getWidths(rec.glyphs, glyph_count, rec.pos); 40*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < glyph_count; ++i) { 41*c8dee2aaSAndroid Build Coastguard Worker SkScalar w = rec.pos[i]; 42*c8dee2aaSAndroid Build Coastguard Worker rec.pos[i] = x; 43*c8dee2aaSAndroid Build Coastguard Worker x += w; 44*c8dee2aaSAndroid Build Coastguard Worker } 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker canvas->drawTextBlob(builder.make(), 0, 0, SkPaint()); 47*c8dee2aaSAndroid Build Coastguard Worker } 48