1 /* 2 * Copyright (C) 2008 Alp Toker <alp (at) 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 30 void FontCache::platformInit() 31 { 32 if (!FontPlatformData::init()) 33 ASSERT_NOT_REACHED(); 34 } 35 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 62 SimpleFontData* FontCache::getSimilarFontPlatformData(const Font& font) 63 { 64 return 0; 65 } 66 67 SimpleFontData* 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 getCachedFontData(fontDescription, timesStr); 73 } 74 75 void FontCache::getTraitsInFamily(const AtomicString& familyName, Vector<unsigned>& traitsMasks) 76 { 77 } 78 79 FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family) 80 { 81 return new FontPlatformData(fontDescription, family); 82 } 83 84 } 85