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

Unified Diff: src/ports/SkFontConfigInterface_direct.cpp

Issue 1471033002: Fix Google3 fonts. (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: Rename back to SkFontConfigInterface_direct.h 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
« no previous file with comments | « src/ports/SkFontConfigInterface_direct.h ('k') | src/ports/SkFontConfigInterface_direct_factory.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ports/SkFontConfigInterface_direct.cpp
diff --git a/src/ports/SkFontConfigInterface_direct.cpp b/src/ports/SkFontConfigInterface_direct.cpp
index 8a8e4a1b538dfcfa270ed40b24d9f60adb3be023..a25bfbdc07a8cc9875bc4858f16c9c08b894dd1e 100644
--- a/src/ports/SkFontConfigInterface_direct.cpp
+++ b/src/ports/SkFontConfigInterface_direct.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2009 Google Inc.
+ * Copyright 2009-2015 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
@@ -9,7 +9,7 @@
#include "SkBuffer.h"
#include "SkDataTable.h"
-#include "SkFontConfigInterface.h"
+#include "SkFontConfigInterface_direct.h"
#include "SkFontStyle.h"
#include "SkMutex.h"
#include "SkStream.h"
@@ -107,37 +107,6 @@ static void fontconfiginterface_unittest() {
}
#endif
-class SkFontConfigInterfaceDirect : public SkFontConfigInterface {
-public:
- SkFontConfigInterfaceDirect();
- virtual ~SkFontConfigInterfaceDirect();
-
- virtual bool matchFamilyName(const char familyName[],
- SkTypeface::Style requested,
- FontIdentity* outFontIdentifier,
- SkString* outFamilyName,
- SkTypeface::Style* outStyle) override;
- SkStreamAsset* openStream(const FontIdentity&) override;
-
- // new APIs
- SkDataTable* getFamilyNames() override;
- virtual bool matchFamilySet(const char inFamilyName[],
- SkString* outFamilyName,
- SkTArray<FontIdentity>*) override;
-
-private:
- SkMutex mutex_;
-};
-
-SkFontConfigInterface* SkFontConfigInterface::GetSingletonDirectInterface(SkBaseMutex* mutex) {
- SkAutoMutexAcquire ac(mutex);
- static SkFontConfigInterfaceDirect* singleton = nullptr;
- if (singleton == nullptr) {
- singleton = new SkFontConfigInterfaceDirect;
- }
- return singleton;
-}
-
///////////////////////////////////////////////////////////////////////////////
// Returns the string from the pattern, or nullptr
@@ -334,7 +303,64 @@ bool IsFallbackFontAllowed(const SkString& family) {
strcasecmp(family_cstr, "monospace") == 0;
}
-static bool valid_pattern(FcPattern* pattern) {
+// Retrieves |is_bold|, |is_italic| and |font_family| properties from |font|.
+SkTypeface::Style GetFontStyle(FcPattern* font) {
+ int resulting_bold;
+ if (FcPatternGetInteger(font, FC_WEIGHT, 0, &resulting_bold))
+ resulting_bold = FC_WEIGHT_NORMAL;
+
+ int resulting_italic;
+ if (FcPatternGetInteger(font, FC_SLANT, 0, &resulting_italic))
+ resulting_italic = FC_SLANT_ROMAN;
+
+ // If we ask for an italic font, fontconfig might take a roman font and set
+ // the undocumented property FC_MATRIX to a skew matrix. It'll then say
+ // that the font is italic or oblique. So, if we see a matrix, we don't
+ // believe that it's italic.
+ FcValue matrix;
+ const bool have_matrix = FcPatternGet(font, FC_MATRIX, 0, &matrix) == 0;
+
+ // If we ask for an italic font, fontconfig might take a roman font and set
+ // FC_EMBOLDEN.
+ FcValue embolden;
+ const bool have_embolden = FcPatternGet(font, FC_EMBOLDEN, 0, &embolden) == 0;
+
+ int styleBits = 0;
+ if (resulting_bold > FC_WEIGHT_MEDIUM && !have_embolden) {
+ styleBits |= SkTypeface::kBold;
+ }
+ if (resulting_italic > FC_SLANT_ROMAN && !have_matrix) {
+ styleBits |= SkTypeface::kItalic;
+ }
+
+ return (SkTypeface::Style)styleBits;
+}
+
+} // anonymous namespace
+
+///////////////////////////////////////////////////////////////////////////////
+
+#define kMaxFontFamilyLength 2048
+
+SkFontConfigInterfaceDirect::SkFontConfigInterfaceDirect() {
+ SkAutoMutexAcquire ac(mutex_);
+
+ FcInit();
+
+ SkDEBUGCODE(fontconfiginterface_unittest();)
+}
+
+SkFontConfigInterfaceDirect::~SkFontConfigInterfaceDirect() {
+}
+
+bool SkFontConfigInterfaceDirect::isAccessible(const char* filename) {
+ if (access(filename, R_OK) != 0) {
+ return false;
+ }
+ return true;
+}
+
+bool SkFontConfigInterfaceDirect::isValidPattern(FcPattern* pattern) {
#ifdef SK_FONT_CONFIG_ONLY_ALLOW_SCALABLE_FONTS
FcBool is_scalable;
if (FcPatternGetBool(pattern, FC_SCALABLE, 0, &is_scalable) != FcResultMatch
@@ -348,22 +374,19 @@ static bool valid_pattern(FcPattern* pattern) {
if (!c_filename) {
return false;
}
- if (access(c_filename, R_OK) != 0) {
- return false;
- }
- return true;
+ return this->isAccessible(c_filename);
}
// Find matching font from |font_set| for the given font family.
-FcPattern* MatchFont(FcFontSet* font_set,
- const char* post_config_family,
- const SkString& family) {
+FcPattern* SkFontConfigInterfaceDirect::MatchFont(FcFontSet* font_set,
+ const char* post_config_family,
+ const SkString& family) {
// Older versions of fontconfig have a bug where they cannot select
// only scalable fonts so we have to manually filter the results.
FcPattern* match = nullptr;
for (int i = 0; i < font_set->nfont; ++i) {
FcPattern* current = font_set->fonts[i];
- if (valid_pattern(current)) {
+ if (this->isValidPattern(current)) {
match = current;
break;
}
@@ -394,56 +417,6 @@ FcPattern* MatchFont(FcFontSet* font_set,
return match;
}
-// Retrieves |is_bold|, |is_italic| and |font_family| properties from |font|.
-SkTypeface::Style GetFontStyle(FcPattern* font) {
- int resulting_bold;
- if (FcPatternGetInteger(font, FC_WEIGHT, 0, &resulting_bold))
- resulting_bold = FC_WEIGHT_NORMAL;
-
- int resulting_italic;
- if (FcPatternGetInteger(font, FC_SLANT, 0, &resulting_italic))
- resulting_italic = FC_SLANT_ROMAN;
-
- // If we ask for an italic font, fontconfig might take a roman font and set
- // the undocumented property FC_MATRIX to a skew matrix. It'll then say
- // that the font is italic or oblique. So, if we see a matrix, we don't
- // believe that it's italic.
- FcValue matrix;
- const bool have_matrix = FcPatternGet(font, FC_MATRIX, 0, &matrix) == 0;
-
- // If we ask for an italic font, fontconfig might take a roman font and set
- // FC_EMBOLDEN.
- FcValue embolden;
- const bool have_embolden = FcPatternGet(font, FC_EMBOLDEN, 0, &embolden) == 0;
-
- int styleBits = 0;
- if (resulting_bold > FC_WEIGHT_MEDIUM && !have_embolden) {
- styleBits |= SkTypeface::kBold;
- }
- if (resulting_italic > FC_SLANT_ROMAN && !have_matrix) {
- styleBits |= SkTypeface::kItalic;
- }
-
- return (SkTypeface::Style)styleBits;
-}
-
-} // anonymous namespace
-
-///////////////////////////////////////////////////////////////////////////////
-
-#define kMaxFontFamilyLength 2048
-
-SkFontConfigInterfaceDirect::SkFontConfigInterfaceDirect() {
- SkAutoMutexAcquire ac(mutex_);
-
- FcInit();
-
- SkDEBUGCODE(fontconfiginterface_unittest();)
-}
-
-SkFontConfigInterfaceDirect::~SkFontConfigInterfaceDirect() {
-}
-
bool SkFontConfigInterfaceDirect::matchFamilyName(const char familyName[],
SkTypeface::Style style,
FontIdentity* outIdentity,
@@ -514,7 +487,7 @@ bool SkFontConfigInterfaceDirect::matchFamilyName(const char familyName[],
return false;
}
- FcPattern* match = MatchFont(font_set, post_config_family, familyStr);
+ FcPattern* match = this->MatchFont(font_set, post_config_family, familyStr);
if (!match) {
FcPatternDestroy(pattern);
FcFontSetDestroy(font_set);
@@ -671,7 +644,7 @@ bool SkFontConfigInterfaceDirect::matchFamilySet(const char inFamilyName[],
return false;
}
- FcPattern* match = MatchFont(font_set, post_config_family, familyStr);
+ FcPattern* match = this->MatchFont(font_set, post_config_family, familyStr);
if (!match) {
FcPatternDestroy(pattern);
FcFontSetDestroy(font_set);
@@ -716,7 +689,7 @@ bool SkFontConfigInterfaceDirect::matchFamilySet(const char inFamilyName[],
////////////////////
int count;
- FcPattern** match = MatchFont(font_set, post_config_family, &count);
+ FcPattern** match = this->MatchFont(font_set, post_config_family, &count);
if (!match) {
FcPatternDestroy(pattern);
FcFontSetDestroy(font_set);
« no previous file with comments | « src/ports/SkFontConfigInterface_direct.h ('k') | src/ports/SkFontConfigInterface_direct_factory.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698