1 /*
2 * Copyright (C) 2008 Alp Toker <alp@atoker.com>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 *
19 */
20
21 #include "config.h"
22 #include "FontCache.h"
23
24 #include "Font.h"
25 #include "SimpleFontData.h"
26 #include <wtf/Assertions.h>
27
28 namespace WebCore {
29
platformInit()30 void FontCache::platformInit()
31 {
32 if (!FontPlatformData::init())
33 ASSERT_NOT_REACHED();
34 }
35
getFontDataForCharacters(const Font & font,const UChar * characters,int length)36 const SimpleFontData* FontCache::getFontDataForCharacters(const Font& font, const UChar* characters, int length)
37 {
38 #if defined(USE_FREETYPE)
39 FcResult fresult;
40 FontPlatformData* prim = const_cast<FontPlatformData*>(&font.primaryFont()->platformData());
41
42 if (!prim->m_fallbacks)
43 prim->m_fallbacks = FcFontSort(NULL, prim->m_pattern, FcTrue, NULL, &fresult);
44
45 FcFontSet* fs = prim->m_fallbacks;
46
47 for (int i = 0; i < fs->nfont; i++) {
48 FcPattern* fin = FcFontRenderPrepare(NULL, prim->m_pattern, fs->fonts[i]);
49 cairo_font_face_t* fontFace = cairo_ft_font_face_create_for_pattern(fin);
50 FontPlatformData alternateFont(fontFace, font.fontDescription().computedPixelSize(), false, false);
51 cairo_font_face_destroy(fontFace);
52 alternateFont.m_pattern = fin;
53 SimpleFontData* sfd = getCachedFontData(&alternateFont);
54 if (sfd->containsCharacters(characters, length))
55 return sfd;
56 }
57 #endif
58
59 return 0;
60 }
61
getSimilarFontPlatformData(const Font & font)62 FontPlatformData* FontCache::getSimilarFontPlatformData(const Font& font)
63 {
64 return 0;
65 }
66
getLastResortFallbackFont(const FontDescription & fontDescription)67 FontPlatformData* FontCache::getLastResortFallbackFont(const FontDescription& fontDescription)
68 {
69 // FIXME: Would be even better to somehow get the user's default font here.
70 // For now we'll pick the default that the user would get without changing any prefs.
71 static AtomicString timesStr("Times New Roman");
72 return getCachedFontPlatformData(fontDescription, timesStr);
73 }
74
getTraitsInFamily(const AtomicString & familyName,Vector<unsigned> & traitsMasks)75 void FontCache::getTraitsInFamily(const AtomicString& familyName, Vector<unsigned>& traitsMasks)
76 {
77 }
78
createFontPlatformData(const FontDescription & fontDescription,const AtomicString & family)79 FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family)
80 {
81 return new FontPlatformData(fontDescription, family);
82 }
83
84 }
85