summaryrefslogtreecommitdiffstats
path: root/gfx/skia/skia/src/utils/SkOrderedFontMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/skia/skia/src/utils/SkOrderedFontMgr.cpp')
-rw-r--r--gfx/skia/skia/src/utils/SkOrderedFontMgr.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/utils/SkOrderedFontMgr.cpp b/gfx/skia/skia/src/utils/SkOrderedFontMgr.cpp
new file mode 100644
index 0000000000..c4ff5a60ef
--- /dev/null
+++ b/gfx/skia/skia/src/utils/SkOrderedFontMgr.cpp
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2021 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "include/utils/SkOrderedFontMgr.h"
+
+#include "include/core/SkData.h" // IWYU pragma: keep
+#include "include/core/SkFontStyle.h"
+#include "include/core/SkStream.h" // IWYU pragma: keep
+#include "include/core/SkTypeface.h" // IWYU pragma: keep
+
+#include <utility>
+
+class SkString;
+struct SkFontArguments;
+
+SkOrderedFontMgr::SkOrderedFontMgr() {}
+SkOrderedFontMgr::~SkOrderedFontMgr() {}
+
+void SkOrderedFontMgr::append(sk_sp<SkFontMgr> fm) {
+ fList.push_back(std::move(fm));
+}
+
+int SkOrderedFontMgr::onCountFamilies() const {
+ int count = 0;
+ for (const auto& fm : fList) {
+ count += fm->countFamilies();
+ }
+ return count;
+}
+
+void SkOrderedFontMgr::onGetFamilyName(int index, SkString* familyName) const {
+ for (const auto& fm : fList) {
+ const int count = fm->countFamilies();
+ if (index < count) {
+ return fm->getFamilyName(index, familyName);
+ }
+ index -= count;
+ }
+}
+
+SkFontStyleSet* SkOrderedFontMgr::onCreateStyleSet(int index) const {
+ for (const auto& fm : fList) {
+ const int count = fm->countFamilies();
+ if (index < count) {
+ return fm->createStyleSet(index);
+ }
+ index -= count;
+ }
+ return nullptr;
+}
+
+SkFontStyleSet* SkOrderedFontMgr::onMatchFamily(const char familyName[]) const {
+ for (const auto& fm : fList) {
+ if (auto fs = fm->matchFamily(familyName)) {
+ return fs;
+ }
+ }
+ return nullptr;
+}
+
+SkTypeface* SkOrderedFontMgr::onMatchFamilyStyle(const char family[],
+ const SkFontStyle& style) const {
+ for (const auto& fm : fList) {
+ if (auto tf = fm->matchFamilyStyle(family, style)) {
+ return tf;
+ }
+ }
+ return nullptr;
+}
+
+SkTypeface* SkOrderedFontMgr::onMatchFamilyStyleCharacter(const char familyName[],
+ const SkFontStyle& style,
+ const char* bcp47[], int bcp47Count,
+ SkUnichar uni) const {
+ for (const auto& fm : fList) {
+ if (auto tf = fm->matchFamilyStyleCharacter(familyName, style, bcp47, bcp47Count, uni)) {
+ return tf;
+ }
+ }
+ return nullptr;
+}
+
+// All of these are defined to fail by returning null
+
+sk_sp<SkTypeface> SkOrderedFontMgr::onMakeFromData(sk_sp<SkData>, int ttcIndex) const {
+ return nullptr;
+}
+
+sk_sp<SkTypeface> SkOrderedFontMgr::onMakeFromStreamIndex(std::unique_ptr<SkStreamAsset>,
+ int ttcIndex) const {
+ return nullptr;
+}
+
+sk_sp<SkTypeface> SkOrderedFontMgr::onMakeFromStreamArgs(std::unique_ptr<SkStreamAsset>,
+ const SkFontArguments&) const {
+ return nullptr;
+}
+
+sk_sp<SkTypeface> SkOrderedFontMgr::onMakeFromFile(const char path[], int ttcIndex) const {
+ return nullptr;
+}
+
+sk_sp<SkTypeface> SkOrderedFontMgr::onLegacyMakeTypeface(const char family[], SkFontStyle) const {
+ return nullptr;
+}