Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Side by Side Diff: Source/core/platform/graphics/skia/FontCacheSkiaWin.cpp

Issue 23480016: Switch non-gdi windows font path to use new SkFontMgr (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007 Apple Computer, Inc. 2 * Copyright (C) 2006, 2007 Apple Computer, Inc.
3 * Copyright (c) 2006, 2007, 2008, 2009, 2012 Google Inc. All rights reserved. 3 * Copyright (c) 2006, 2007, 2008, 2009, 2012 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 14 matching lines...) Expand all
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32 #include "config.h" 32 #include "config.h"
33 #include "core/platform/graphics/FontCache.h" 33 #include "core/platform/graphics/FontCache.h"
34 34
35 #include "SkFontMgr.h"
36 #include "SkTypeface_win.h"
35 #include "core/platform/NotImplemented.h" 37 #include "core/platform/NotImplemented.h"
36 #include "core/platform/graphics/Font.h" 38 #include "core/platform/graphics/Font.h"
37 #include "core/platform/graphics/SimpleFontData.h" 39 #include "core/platform/graphics/SimpleFontData.h"
38 #include "core/platform/graphics/chromium/FontPlatformDataChromiumWin.h" 40 #include "core/platform/graphics/chromium/FontPlatformDataChromiumWin.h"
39 #include "core/platform/graphics/chromium/FontUtilsChromiumWin.h" 41 #include "core/platform/graphics/chromium/FontUtilsChromiumWin.h"
40 42
41 namespace WebCore { 43 namespace WebCore {
42 44
45 FontCache::FontCache()
46 : m_purgePreventCount(0)
47 {
48 m_fontManager = SkFontMgr_New_GDI();
49 }
50
51 FontCache::~FontCache()
52 {
53 m_fontManager->unref();
54 }
55
56
43 static bool fontContainsCharacter(const FontPlatformData* fontData, const wchar_ t* family, UChar32 character) 57 static bool fontContainsCharacter(const FontPlatformData* fontData, const wchar_ t* family, UChar32 character)
44 { 58 {
45 SkPaint paint; 59 SkPaint paint;
46 fontData->setupPaint(&paint); 60 fontData->setupPaint(&paint);
47 paint.setTextEncoding(SkPaint::kUTF32_TextEncoding); 61 paint.setTextEncoding(SkPaint::kUTF32_TextEncoding);
48 62
49 uint16_t glyph; 63 uint16_t glyph;
50 paint.textToGlyphs(&character, sizeof(character), &glyph); 64 paint.textToGlyphs(&character, sizeof(character), &glyph);
51 return glyph != 0; 65 return glyph != 0;
52 } 66 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 } 175 }
162 } 176 }
163 actualFamilies->unref(); 177 actualFamilies->unref();
164 178
165 return matchesRequestedFamily; 179 return matchesRequestedFamily;
166 } 180 }
167 181
168 FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontD escription, const AtomicString& family) 182 FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontD escription, const AtomicString& family)
169 { 183 {
170 CString name; 184 CString name;
171 SkTypeface* tf = createTypeface(fontDescription, family, name); 185 getFontNameIncludingFallback(fontDescription, family, name);
186
187 // FIXME: Use SkFontStyle and matchFamilyStyle instead of legacyCreateTypefa ce.
188 int style = SkTypeface::kNormal;
189 if (fontDescription.weight() >= FontWeightBold)
190 style |= SkTypeface::kBold;
191 if (fontDescription.italic())
192 style |= SkTypeface::kItalic;
193
194 SkTypeface* tf = m_fontManager->legacyCreateTypeface(name.data(), style);
172 if (!tf) 195 if (!tf)
173 return 0; 196 return 0;
174 197
175 // Windows will always give us a valid pointer here, even if the face name 198 // Windows will always give us a valid pointer here, even if the face name
176 // is non-existent. We have to double-check and see if the family name was 199 // is non-existent. We have to double-check and see if the family name was
177 // really used. 200 // really used.
178 // FIXME: Do we need to use predefined fonts "guaranteed" to exist 201 // FIXME: Do we need to use predefined fonts "guaranteed" to exist
179 // when we're running in layout-test mode? 202 // when we're running in layout-test mode?
180 if (!typefacesMatchesFamily(tf, family)) { 203 if (!typefacesMatchesFamily(tf, family)) {
181 tf->unref(); 204 tf->unref();
182 return 0; 205 return 0;
183 } 206 }
184 207
185 FontPlatformData* result = new FontPlatformData(tf, 208 FontPlatformData* result = new FontPlatformData(tf,
186 name.data(), 209 name.data(),
187 fontDescription.computedSize(), 210 fontDescription.computedSize(),
188 fontDescription.weight() >= FontWeightBold && !tf->isBold(), 211 fontDescription.weight() >= FontWeightBold && !tf->isBold(),
189 fontDescription.italic() && !tf->isItalic(), 212 fontDescription.italic() && !tf->isItalic(),
190 fontDescription.orientation()); 213 fontDescription.orientation());
191 tf->unref(); 214 tf->unref();
192 return result; 215 return result;
193 } 216 }
194 217
195 } 218 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698