diff options
author | Ben Wagner <bungeman@google.com> | 2018-02-20 17:06:07 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-21 03:31:14 +0000 |
commit | 483c772cfdd646fad3ae8aa187136191ae3babdc (patch) | |
tree | 6bfe0818629abcf41fab36a48daeb0327e2ec6a4 /tools/fonts/SkTestFontMgr.cpp | |
parent | 14b7375aa648ef88135396ec14296aa676f40004 (diff) |
Add nativeFonts flag to Viewer.
This moves DMFontMgr and several related files which are tightly related
to fonts into tools/fonts, moves some flags around to prevent
duplication, and adds the nativeFonts handling to Viewer.
Change-Id: Id1bdad708a6b74319ac5ac9adfe21025db4ca0b2
Reviewed-on: https://skia-review.googlesource.com/108904
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'tools/fonts/SkTestFontMgr.cpp')
-rw-r--r-- | tools/fonts/SkTestFontMgr.cpp | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/tools/fonts/SkTestFontMgr.cpp b/tools/fonts/SkTestFontMgr.cpp new file mode 100644 index 0000000000..3b5d1589f2 --- /dev/null +++ b/tools/fonts/SkTestFontMgr.cpp @@ -0,0 +1,147 @@ +/* + * Copyright 2017 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkFontDescriptor.h" +#include "SkTestFontMgr.h" +#include "sk_tool_utils.h" + +namespace { + +static constexpr const char* kFamilyNames[] = { + "Toy Liberation Sans", + "Toy Liberation Serif", + "Toy Liberation Mono", +}; + +class FontStyleSet final : public SkFontStyleSet { +public: + explicit FontStyleSet(int familyIndex) { + using sk_tool_utils::create_portable_typeface; + const char* familyName = kFamilyNames[familyIndex]; + + fTypefaces[0] = create_portable_typeface(familyName, SkFontStyle::Normal()); + fTypefaces[1] = create_portable_typeface(familyName, SkFontStyle::Bold()); + fTypefaces[2] = create_portable_typeface(familyName, SkFontStyle::Italic()); + fTypefaces[3] = create_portable_typeface(familyName, SkFontStyle::BoldItalic()); + } + + int count() override { return 4; } + + void getStyle(int index, SkFontStyle* style, SkString* name) override { + switch (index) { + default: + case 0: if (style) { *style = SkFontStyle::Normal(); } + if (name) { *name = "Normal"; } + break; + case 1: if (style) { *style = SkFontStyle::Bold(); } + if (name) { *name = "Bold"; } + break; + case 2: if (style) { *style = SkFontStyle::Italic(); } + if (name) { *name = "Italic"; } + break; + case 3: if (style) { *style = SkFontStyle::BoldItalic(); } + if (name) { *name = "BoldItalic"; } + break; + } + } + + SkTypeface* createTypeface(int index) override { + return SkRef(fTypefaces[index].get()); + } + + SkTypeface* matchStyle(const SkFontStyle& pattern) override { + return this->matchStyleCSS3(pattern); + } + +private: + sk_sp<SkTypeface> fTypefaces[4]; +}; + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // + +class FontMgr final : public SkFontMgr { +public: + FontMgr() { + fFamilies[0] = sk_make_sp<FontStyleSet>(0); + fFamilies[1] = sk_make_sp<FontStyleSet>(1); + fFamilies[2] = sk_make_sp<FontStyleSet>(2); + } + + int onCountFamilies() const override { return SK_ARRAY_COUNT(fFamilies); } + + void onGetFamilyName(int index, SkString* familyName) const override { + *familyName = kFamilyNames[index]; + } + + SkFontStyleSet* onCreateStyleSet(int index) const override { + return SkRef(fFamilies[index].get()); + } + + SkFontStyleSet* onMatchFamily(const char familyName[]) const override { + if (familyName) { + if (strstr(familyName, "ans")) { return this->createStyleSet(0); } + if (strstr(familyName, "erif")) { return this->createStyleSet(1); } + if (strstr(familyName, "ono")) { return this->createStyleSet(2); } + } + return this->createStyleSet(0); + } + + + SkTypeface* onMatchFamilyStyle(const char familyName[], + const SkFontStyle& style) const override { + sk_sp<SkFontStyleSet> styleSet(this->matchFamily(familyName)); + return styleSet->matchStyle(style); + } + + SkTypeface* onMatchFamilyStyleCharacter(const char familyName[], + const SkFontStyle& style, + const char* bcp47[], int bcp47Count, + SkUnichar character) const override { + (void)bcp47; + (void)bcp47Count; + (void)character; + return this->matchFamilyStyle(familyName, style); + } + + SkTypeface* onMatchFaceStyle(const SkTypeface* tf, + const SkFontStyle& style) const override { + SkString familyName; + tf->getFamilyName(&familyName); + return this->matchFamilyStyle(familyName.c_str(), style); + } + + sk_sp<SkTypeface> onMakeFromData(sk_sp<SkData>, int ttcIndex) const override { + return nullptr; + } + sk_sp<SkTypeface> onMakeFromStreamIndex(std::unique_ptr<SkStreamAsset>, + int ttcIndex) const override { + return nullptr; + } + sk_sp<SkTypeface> onMakeFromStreamArgs(std::unique_ptr<SkStreamAsset>, + const SkFontArguments&) const override { + return nullptr; + } + sk_sp<SkTypeface> onMakeFromFontData(std::unique_ptr<SkFontData>) const override { + return nullptr; + } + sk_sp<SkTypeface> onMakeFromFile(const char path[], int ttcIndex) const override { + return nullptr; + } + + sk_sp<SkTypeface> onLegacyMakeTypeface(const char familyName[], + SkFontStyle style) const override { + return sk_sp<SkTypeface>(this->matchFamilyStyle(familyName, style)); + } + +private: + sk_sp<FontStyleSet> fFamilies[3]; +}; +} + +namespace sk_tool_utils { +sk_sp<SkFontMgr> MakePortableFontMgr() { return sk_make_sp<FontMgr>(); } +} // namespace sk_tool_utils |