diff options
author | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-14 05:14:07 +0000 |
---|---|---|
committer | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-14 05:14:07 +0000 |
commit | 565243e032009b7022b49c085b1157c3fb4986d4 (patch) | |
tree | 905ee4504d259801a879e1873edb91c300a6392a /webkit/api/src/gtk | |
parent | d41c2bd79c85c07d0f1303a3d9d88ae7279181fa (diff) | |
download | chromium_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.cpp | 21 |
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(); } |