sk_sp<SkTypeface> emoji_typeface() { if (!strcmp(sk_tool_utils::platform_os_emoji(), "CBDT")) { return MakeResourceAsTypeface("/fonts/Funkster.ttf"); } if (!strcmp(sk_tool_utils::platform_os_emoji(), "SBIX")) { return SkTypeface::MakeFromName("Apple Color Emoji", SkFontStyle()); } if (!strcmp(sk_tool_utils::platform_os_emoji(), "COLR")) { sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault()); const char *colorEmojiFontName = "Segoe UI Emoji"; sk_sp<SkTypeface> typeface(fm->matchFamilyStyle(colorEmojiFontName, SkFontStyle())); if (typeface) { return typeface; } sk_sp<SkTypeface> fallback(fm->matchFamilyStyleCharacter( colorEmojiFontName, SkFontStyle(), nullptr /* bcp47 */, 0 /* bcp47Count */, 0x1f4b0 /* character: 💰 */)); if (fallback) { return fallback; } // If we don't have Segoe UI Emoji and can't find a fallback, try Segoe UI Symbol. // Windows 7 does not have Segoe UI Emoji; Segoe UI Symbol has the (non - color) emoji. return SkTypeface::MakeFromName("Segoe UI Symbol", SkFontStyle()); } return nullptr; }
sk_sp<SkTypeface> emoji_typeface() { if (!strcmp(sk_tool_utils::platform_os_emoji(), "CBDT")) { return MakeResourceAsTypeface("/fonts/Funkster.ttf"); } if (!strcmp(sk_tool_utils::platform_os_emoji(), "SBIX")) { return SkTypeface::MakeFromName("Apple Color Emoji", SkTypeface::kNormal); } return nullptr; }
DEF_TEST(serial_typeface, reporter) { auto tf0 = MakeResourceAsTypeface("fonts/hintgasp.ttf"); auto tf1 = MakeResourceAsTypeface("fonts/Roboto2-Regular_NoEmbed.ttf"); if (!tf0 || !tf1 || tf0.get() == tf1.get()) { return; // need two different typefaces for this test to make sense. } auto pic = make_picture(tf0, tf1); int counter = 0; SkSerialProcs procs; procs.fTypefaceProc = [](SkTypeface* tf, void* ctx) -> sk_sp<SkData> { *(int*)ctx += 1; return nullptr; }; procs.fTypefaceCtx = &counter; auto data = pic->serialize(&procs); // The picture has 2 references to each typeface, but we want the serialized picture to // only have written the data 1 time per typeface. REPORTER_ASSERT(reporter, counter == 2); }
sk_sp<SkTypeface> emoji_typeface() { const char* filename; #if defined(SK_BUILD_FOR_WIN) filename = "fonts/colr.ttf"; #elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) filename = "fonts/sbix.ttf"; #else filename = "fonts/cbdt.ttf"; #endif sk_sp<SkTypeface> typeface = MakeResourceAsTypeface(filename); if (typeface) { return typeface; } return SkTypeface::MakeFromName("Emoji", SkFontStyle()); }
static sk_sp<SkTypeface> chinese_typeface() { #ifdef SK_BUILD_FOR_ANDROID return MakeResourceAsTypeface("fonts/NotoSansCJK-Regular.ttc"); #elif defined(SK_BUILD_FOR_WIN) return SkTypeface::MakeFromName("SimSun", SkFontStyle()); #elif defined(SK_BUILD_FOR_MAC) return SkTypeface::MakeFromName("Hiragino Sans GB W3", SkFontStyle()); #elif defined(SK_BUILD_FOR_IOS) return SkTypeface::MakeFromName("Hiragino Sans GB W3", SkFontStyle()); #elif defined(SK_BUILD_FOR_UNIX) return SkTypeface::MakeFromName("Noto Sans CJK SC", SkFontStyle()); #else return nullptr; #endif }
sk_sp<SkTypeface> planet_typeface() { static const sk_sp<SkTypeface> planetTypeface = []() { const char* filename; #if defined(SK_BUILD_FOR_WIN) filename = "fonts/planetcolr.ttf"; #elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) filename = "fonts/planetsbix.ttf"; #else filename = "fonts/planetcbdt.ttf"; #endif sk_sp<SkTypeface> typeface = MakeResourceAsTypeface(filename); if (typeface) { return typeface; } return SkTypeface::MakeFromName("Planet", SkFontStyle()); }(); return planetTypeface; }
void onDelayedSetup() override { if (fDoColorEmoji) { SkASSERT(kBW == fFQ); fColorEmojiTypeface = MakeResourceAsTypeface("fonts/Funkster.ttf"); } if (fDoPos) { size_t len = fText.size(); SkScalar* adv = new SkScalar[len]; fPaint.getTextWidths(fText.c_str(), len, adv); fPos = new SkPoint[len]; SkScalar x = 0; for (size_t i = 0; i < len; ++i) { fPos[i].set(x, SkIntToScalar(50)); x += adv[i]; } delete[] adv; } }
void onOnceBeforeDraw() override { fEmFace = MakeResourceAsTypeface("/fonts/Em.ttf"); }
const SkPaint& paint) { size_t textLen = strlen(text); SkAutoTArray<SkScalar> widths(SkToInt(textLen)); paint.getTextWidths(text, textLen, &widths[0]); SkAutoTArray<SkPoint> pos(SkToInt(textLen)); for (int i = 0; i < SkToInt(textLen); ++i) { pos[i].set(x, y); x += widths[i]; } canvas->drawPosText(text, textLen, &pos[0], paint); } DEF_SIMPLE_GM(pdf_never_embed, canvas, 512, 512) { SkPaint p; p.setTextSize(60); p.setTypeface(MakeResourceAsTypeface("fonts/Roboto2-Regular_NoEmbed.ttf")); p.setAntiAlias(true); if (!p.getTypeface()) { return; } const char text[] = "HELLO, WORLD!"; canvas->drawColor(SK_ColorWHITE); excercise_draw_pos_text(canvas, text, 30, 90, p); canvas->save(); canvas->rotate(45.0f); p.setColor(0xF0800000); excercise_draw_pos_text(canvas, text, 30, 45, p);