DM: hide DM:FontMgr behind a factory
Change-Id: I4dc745479ceb1d5ca1ddb4a0904f342576e4562c Reviewed-on: https://skia-review.googlesource.com/71240 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Hal Canary <halcanary@google.com>
This commit is contained in:
parent
3e31e99bab
commit
ccafca0054
@ -1320,16 +1320,12 @@ int main(int argc, char** argv) {
|
||||
SkCommandLineFlags::Parse(argc, argv);
|
||||
|
||||
if (!FLAGS_nativeFonts) {
|
||||
gSkFontMgr_DefaultFactory = []() -> sk_sp<SkFontMgr> {
|
||||
return sk_make_sp<DM::FontMgr>();
|
||||
};
|
||||
gSkFontMgr_DefaultFactory = &DM::MakeFontMgr;
|
||||
}
|
||||
|
||||
#if defined(SK_BUILD_FOR_WIN)
|
||||
if (FLAGS_gdi) {
|
||||
gSkFontMgr_DefaultFactory = []() -> sk_sp<SkFontMgr> {
|
||||
return SkFontMgr_New_GDI();
|
||||
};
|
||||
gSkFontMgr_DefaultFactory = &SkFontMgr_New_GDI;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
105
dm/DMFontMgr.cpp
105
dm/DMFontMgr.cpp
@ -9,15 +9,17 @@
|
||||
#include "SkFontDescriptor.h"
|
||||
#include "sk_tool_utils.h"
|
||||
|
||||
namespace DM {
|
||||
namespace {
|
||||
|
||||
static constexpr const char* kFamilyNames[] = {
|
||||
"Toy Liberation Sans",
|
||||
"Toy Liberation Serif",
|
||||
"Toy Liberation Mono",
|
||||
};
|
||||
static constexpr const char* kFamilyNames[] = {
|
||||
"Toy Liberation Sans",
|
||||
"Toy Liberation Serif",
|
||||
"Toy Liberation Mono",
|
||||
};
|
||||
|
||||
FontStyleSet::FontStyleSet(int familyIndex) {
|
||||
class FontStyleSet final : public SkFontStyleSet {
|
||||
public:
|
||||
explicit FontStyleSet(int familyIndex) {
|
||||
using sk_tool_utils::create_portable_typeface;
|
||||
const char* familyName = kFamilyNames[familyIndex];
|
||||
|
||||
@ -27,9 +29,9 @@ namespace DM {
|
||||
fTypefaces[3] = create_portable_typeface(familyName, SkFontStyle::BoldItalic());
|
||||
}
|
||||
|
||||
int FontStyleSet::count() { return 4; }
|
||||
int count() override { return 4; }
|
||||
|
||||
void FontStyleSet::getStyle(int index, SkFontStyle* style, SkString* name) {
|
||||
void getStyle(int index, SkFontStyle* style, SkString* name) override {
|
||||
switch (index) {
|
||||
default:
|
||||
case 0: if (style) { *style = SkFontStyle::Normal(); }
|
||||
@ -47,33 +49,39 @@ namespace DM {
|
||||
}
|
||||
}
|
||||
|
||||
SkTypeface* FontStyleSet::createTypeface(int index) {
|
||||
SkTypeface* createTypeface(int index) override {
|
||||
return SkRef(fTypefaces[index].get());
|
||||
}
|
||||
|
||||
SkTypeface* FontStyleSet::matchStyle(const SkFontStyle& pattern) {
|
||||
SkTypeface* matchStyle(const SkFontStyle& pattern) override {
|
||||
return this->matchStyleCSS3(pattern);
|
||||
}
|
||||
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
|
||||
private:
|
||||
sk_sp<SkTypeface> fTypefaces[4];
|
||||
};
|
||||
|
||||
FontMgr::FontMgr() {
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
|
||||
|
||||
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 FontMgr::onCountFamilies() const { return SK_ARRAY_COUNT(fFamilies); }
|
||||
int onCountFamilies() const override { return SK_ARRAY_COUNT(fFamilies); }
|
||||
|
||||
void FontMgr::onGetFamilyName(int index, SkString* familyName) const {
|
||||
void onGetFamilyName(int index, SkString* familyName) const override {
|
||||
*familyName = kFamilyNames[index];
|
||||
}
|
||||
|
||||
SkFontStyleSet* FontMgr::onCreateStyleSet(int index) const {
|
||||
SkFontStyleSet* onCreateStyleSet(int index) const override {
|
||||
return SkRef(fFamilies[index].get());
|
||||
}
|
||||
|
||||
SkFontStyleSet* FontMgr::onMatchFamily(const char familyName[]) const {
|
||||
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); }
|
||||
@ -82,55 +90,58 @@ namespace DM {
|
||||
return this->createStyleSet(0);
|
||||
}
|
||||
|
||||
SkTypeface* FontMgr::onMatchFamilyStyle(const char familyName[],
|
||||
const SkFontStyle& style) const {
|
||||
|
||||
SkTypeface* onMatchFamilyStyle(const char familyName[],
|
||||
const SkFontStyle& style) const override {
|
||||
sk_sp<SkFontStyleSet> styleSet(this->matchFamily(familyName));
|
||||
return styleSet->matchStyle(style);
|
||||
}
|
||||
|
||||
SkTypeface* FontMgr::onMatchFamilyStyleCharacter(const char familyName[],
|
||||
const SkFontStyle& style,
|
||||
const char* bcp47[],
|
||||
int bcp47Count,
|
||||
SkUnichar character) const {
|
||||
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* FontMgr::onMatchFaceStyle(const SkTypeface* tf,
|
||||
const SkFontStyle& style) const {
|
||||
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> FontMgr::onMakeFromData(sk_sp<SkData>, int ttcIndex) const {
|
||||
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> FontMgr::onMakeFromStreamIndex(std::unique_ptr<SkStreamAsset>,
|
||||
int ttcIndex) const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
sk_sp<SkTypeface> FontMgr::onMakeFromStreamArgs(std::unique_ptr<SkStreamAsset>,
|
||||
const SkFontArguments&) const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
sk_sp<SkTypeface> FontMgr::onMakeFromFontData(std::unique_ptr<SkFontData>) const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
sk_sp<SkTypeface> FontMgr::onMakeFromFile(const char path[], int ttcIndex) const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
sk_sp<SkTypeface> FontMgr::onLegacyMakeTypeface(const char familyName[],
|
||||
SkFontStyle style) const {
|
||||
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 DM {
|
||||
sk_sp<SkFontMgr> MakeFontMgr() { return sk_make_sp<FontMgr>(); }
|
||||
} // namespace DM
|
||||
|
@ -13,53 +13,7 @@
|
||||
// An SkFontMgr that always uses sk_tool_utils::create_portable_typeface().
|
||||
|
||||
namespace DM {
|
||||
|
||||
class FontStyleSet final : public SkFontStyleSet {
|
||||
public:
|
||||
explicit FontStyleSet(int familyIndex);
|
||||
|
||||
int count() override;
|
||||
void getStyle(int index, SkFontStyle* style, SkString* name) override;
|
||||
SkTypeface* createTypeface(int index) override;
|
||||
SkTypeface* matchStyle(const SkFontStyle& pattern) override;
|
||||
|
||||
private:
|
||||
sk_sp<SkTypeface> fTypefaces[4];
|
||||
};
|
||||
|
||||
class FontMgr final : public SkFontMgr {
|
||||
public:
|
||||
FontMgr();
|
||||
|
||||
int onCountFamilies() const override;
|
||||
void onGetFamilyName(int index, SkString* familyName) const override;
|
||||
|
||||
SkFontStyleSet* onCreateStyleSet(int index) const override;
|
||||
SkFontStyleSet* onMatchFamily(const char familyName[]) const override;
|
||||
|
||||
SkTypeface* onMatchFamilyStyle(const char familyName[],
|
||||
const SkFontStyle&) const override;
|
||||
SkTypeface* onMatchFamilyStyleCharacter(const char familyName[],
|
||||
const SkFontStyle&,
|
||||
const char* bcp47[], int bcp47Count,
|
||||
SkUnichar character) const override;
|
||||
SkTypeface* onMatchFaceStyle(const SkTypeface*,
|
||||
const SkFontStyle&) const override;
|
||||
|
||||
sk_sp<SkTypeface> onMakeFromData(sk_sp<SkData>, int ttcIndex) const override;
|
||||
sk_sp<SkTypeface> onMakeFromStreamIndex(std::unique_ptr<SkStreamAsset>,
|
||||
int ttcIndex) const override;
|
||||
sk_sp<SkTypeface> onMakeFromStreamArgs(std::unique_ptr<SkStreamAsset>,
|
||||
const SkFontArguments&) const override;
|
||||
sk_sp<SkTypeface> onMakeFromFontData(std::unique_ptr<SkFontData>) const override;
|
||||
sk_sp<SkTypeface> onMakeFromFile(const char path[], int ttcIndex) const override;
|
||||
|
||||
sk_sp<SkTypeface> onLegacyMakeTypeface(const char familyName[], SkFontStyle) const override;
|
||||
|
||||
private:
|
||||
sk_sp<FontStyleSet> fFamilies[3];
|
||||
};
|
||||
|
||||
sk_sp<SkFontMgr> MakeFontMgr();
|
||||
} // namespace DM
|
||||
|
||||
#endif//DMFontMgr_DEFINED
|
||||
|
@ -305,11 +305,7 @@ struct PortableFonts : Dst {
|
||||
|
||||
Status draw(Src* src) override {
|
||||
static SkOnce once;
|
||||
once([]{
|
||||
gSkFontMgr_DefaultFactory = []() -> sk_sp<SkFontMgr> {
|
||||
return sk_make_sp<DM::FontMgr>();
|
||||
};
|
||||
});
|
||||
once([]{ gSkFontMgr_DefaultFactory = &DM::MakeFontMgr; });
|
||||
return target->draw(src);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user