Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(806)

Unified Diff: src/ports/SkFontConfigInterface_direct_google3.cpp

Issue 1471033002: Fix Google3 fonts. (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: Move files back to ports. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/ports/SkFontConfigInterface_direct_google3.cpp
diff --git a/src/ports/SkFontConfigInterface_direct_google3.cpp b/src/ports/SkFontConfigInterface_direct_google3.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..23f2b52735d3b51e485dc413294f811ed52b3213
--- /dev/null
+++ b/src/ports/SkFontConfigInterface_direct_google3.cpp
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* migrated from chrome/src/skia/ext/SkFontHost_fontconfig_direct.cpp */
+
+#include "google_font_file_buffering.h"
+
+#include "SkFontConfigInterfaceDirect.h"
+#include "SkMutex.h"
+#include "SkStream.h"
+#include "SkString.h"
+#include "SkTypes.h"
+
+#include <fontconfig/fontconfig.h>
+
+// Loads fonts using GoogleFt2ReadFontFromMemory.
+class SkFontConfigInterfaceDirectGoogle3 : public SkFontConfigInterfaceDirect {
+public:
+ SkFontConfigInterfaceDirectGoogle3() {}
+ ~SkFontConfigInterfaceDirectGoogle3() override {}
+
+ SkStreamAsset* openStream(const FontIdentity&) override;
+protected:
+ // Override isValidPattern to return true if the font is in the cache.
+ bool isValidPattern(FcPattern* pattern) override;
+private:
+ typedef SkFontConfigInterfaceDirect INHERITED;
+};
+
+SkFontConfigInterface* SkFontConfigInterface::GetSingletonDirectInterface(SkBaseMutex* mutex) {
bungeman-skia 2015/11/24 21:56:36 It would be nice if this were in SkFontConfigInte
dogben 2015/11/30 17:15:31 Done. Required adding a .h.
+ SkAutoMutexAcquire ac(mutex);
+ static SkFontConfigInterfaceDirectGoogle3* singleton = nullptr;
+ if (singleton == nullptr) {
+ singleton = new SkFontConfigInterfaceDirectGoogle3;
+ }
+ return singleton;
+}
+
+bool SkFontConfigInterfaceDirectGoogle3::isValidPattern(FcPattern* pattern) {
+#ifdef SK_FONT_CONFIG_ONLY_ALLOW_SCALABLE_FONTS
+ FcBool is_scalable;
+ if (FcPatternGetBool(pattern, FC_SCALABLE, 0, &is_scalable) != FcResultMatch
+ || !is_scalable) {
+ return false;
+ }
+#endif
+
+ const char* c_filename = INHERITED::GetName(pattern, FC_FILE);
+ if (!c_filename) {
+ return false;
+ }
+ // Check if this font has been pre-loaded into memory.
+ const char* unused;
+ if (GoogleFreeType::GoogleFt2ReadFontFromMemory(c_filename, &unused) >= 0) {
+ return true;
+ }
+ return this->INHERITED::valid_pattern(pattern);
+}
+
+SkStreamAsset* SkFontConfigInterfaceDirectGoogle3::openStream(const FontIdentity& identity) {
+ const char* c_filename = identity.fString.c_str();
+ // Read the system fonts from the fonts we've pre-loaded into memory.
+ const char* buffer;
+ int length = GoogleFreeType::GoogleFt2ReadFontFromMemory(
+ c_filename, &buffer);
+ if (length >= 0) return new SkMemoryStream(buffer, length);
+ return this->INHERITED::openStream(identity);
+}

Powered by Google App Engine
This is Rietveld 408576698