• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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