summaryrefslogtreecommitdiffstats
path: root/webkit/api/src/gtk
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-14 05:14:07 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-14 05:14:07 +0000
commit565243e032009b7022b49c085b1157c3fb4986d4 (patch)
tree905ee4504d259801a879e1873edb91c300a6392a /webkit/api/src/gtk
parentd41c2bd79c85c07d0f1303a3d9d88ae7279181fa (diff)
downloadchromium_src-565243e032009b7022b49c085b1157c3fb4986d4.zip
chromium_src-565243e032009b7022b49c085b1157c3fb4986d4.tar.gz
chromium_src-565243e032009b7022b49c085b1157c3fb4986d4.tar.bz2
Linux: workaround a fontconfig bug.
Fontconfig cannot filter out non-scalable fonts on Hardy. http://codereview.chromium.org/149482 BUG=16411 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20604 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/api/src/gtk')
-rw-r--r--webkit/api/src/gtk/WebFontInfo.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/webkit/api/src/gtk/WebFontInfo.cpp b/webkit/api/src/gtk/WebFontInfo.cpp
index 264efff..60fdde4 100644
--- a/webkit/api/src/gtk/WebFontInfo.cpp
+++ b/webkit/api/src/gtk/WebFontInfo.cpp
@@ -66,21 +66,34 @@ WebString WebFontInfo::familyForChars(const WebUChar* characters, size_t numChar
FcDefaultSubstitute(pattern);
FcResult result;
- FcPattern* match = FcFontMatch(0, pattern, &result);
+ FcFontSet* fontSet = FcFontSort(0, pattern, 0, 0, &result);
FcPatternDestroy(pattern);
FcCharSetDestroy(cset);
- if (match) {
+ if (!fontSet)
+ return WebString();
+
+ // Older versions of fontconfig have a bug where they cannot select
+ // only scalable fonts so we have to manually filter the results.
+ for (int i = 0; i < fontSet->nfont; ++i) {
+ FcPattern* current = fontSet->fonts[i];
+ FcBool isScalable;
+
+ if (FcPatternGetBool(current, FC_SCALABLE, 0, &isScalable) != FcResultMatch
+ || !isScalable)
+ continue;
+
FcChar8* family;
WebString result;
- if (FcPatternGetString(match, FC_FAMILY, 0, &family) == FcResultMatch) {
+ if (FcPatternGetString(current, FC_FAMILY, 0, &family) == FcResultMatch) {
const char* charFamily = reinterpret_cast<char*>(family);
result = WebString::fromUTF8(charFamily, strlen(charFamily));
}
- FcPatternDestroy(match);
+ FcFontSetDestroy(fontSet);
return result;
}
+ FcFontSetDestroy(fontSet);
return WebString();
}