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

Side by Side Diff: Source/platform/fonts/win/FontCacheSkiaWin.cpp

Issue 221153002: [DirectWrite] Set minimum anti-aliased font size on a per script basis (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove FIXME Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 24 matching lines...) Expand all
35 #include "RuntimeEnabledFeatures.h" 35 #include "RuntimeEnabledFeatures.h"
36 #include "SkFontMgr.h" 36 #include "SkFontMgr.h"
37 #include "SkTypeface_win.h" 37 #include "SkTypeface_win.h"
38 #include "platform/fonts/FontDescription.h" 38 #include "platform/fonts/FontDescription.h"
39 #include "platform/fonts/SimpleFontData.h" 39 #include "platform/fonts/SimpleFontData.h"
40 #include "platform/fonts/harfbuzz/FontPlatformDataHarfbuzz.h" 40 #include "platform/fonts/harfbuzz/FontPlatformDataHarfbuzz.h"
41 #include "platform/fonts/win/FontFallbackWin.h" 41 #include "platform/fonts/win/FontFallbackWin.h"
42 42
43 namespace WebCore { 43 namespace WebCore {
44 44
45 // Minimum size, in pixels, at which anti alias is enabled for certain
46 // scripts. Only applies to the Direct Write backend for now.
47 static const unsigned s_minSizeForComplexScriptsAntiAlias = 32;
48
49 FontCache::FontCache() 45 FontCache::FontCache()
50 : m_purgePreventCount(0) 46 : m_purgePreventCount(0)
51 { 47 {
52 SkFontMgr* fontManager; 48 SkFontMgr* fontManager;
53 49
54 if (s_useDirectWrite) { 50 if (s_useDirectWrite) {
55 fontManager = SkFontMgr_New_DirectWrite(); 51 fontManager = SkFontMgr_New_DirectWrite();
56 } else { 52 } else {
57 fontManager = SkFontMgr_New_GDI(); 53 fontManager = SkFontMgr_New_GDI();
58 // Subpixel text positioning is not supported by the GDI backend. 54 // Subpixel text positioning is not supported by the GDI backend.
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 if (!matchesRequestedFamily) { 180 if (!matchesRequestedFamily) {
185 SkString familyName; 181 SkString familyName;
186 tf->getFamilyName(&familyName); 182 tf->getFamilyName(&familyName);
187 if (equalIgnoringCase(family, familyName)) 183 if (equalIgnoringCase(family, familyName))
188 matchesRequestedFamily = true; 184 matchesRequestedFamily = true;
189 } 185 }
190 186
191 return matchesRequestedFamily; 187 return matchesRequestedFamily;
192 } 188 }
193 189
190 // Minimum size, in pixels, at which anti alias is enabled for certain
191 // scripts. Only applies to the Direct Write backend for now.
192 static unsigned minSizeForAntiAlias(UScriptCode script)
193 {
194 switch (script) {
195 case USCRIPT_TRADITIONAL_HAN:
196 return 24;
197 case USCRIPT_SIMPLIFIED_HAN:
198 case USCRIPT_HIRAGANA:
199 case USCRIPT_KATAKANA:
200 case USCRIPT_KATAKANA_OR_HIRAGANA:
201 case USCRIPT_HANGUL:
202 case USCRIPT_BENGALI:
203 return 16;
204 case USCRIPT_THAI:
205 case USCRIPT_HEBREW:
206 case USCRIPT_ARABIC:
207 case USCRIPT_DEVANAGARI:
208 case USCRIPT_GURMUKHI:
209 case USCRIPT_GUJARATI:
210 case USCRIPT_TAMIL:
211 case USCRIPT_TELUGU:
212 case USCRIPT_KANNADA:
213 case USCRIPT_GEORGIAN:
214 case USCRIPT_ARMENIAN:
215 case USCRIPT_THAANA:
216 case USCRIPT_CANADIAN_ABORIGINAL:
217 case USCRIPT_CHEROKEE:
218 case USCRIPT_MONGOLIAN:
219 default:
220 return 0;
221 }
222 }
223
194 FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontD escription, const AtomicString& family, float fontSize) 224 FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontD escription, const AtomicString& family, float fontSize)
195 { 225 {
196 CString name; 226 CString name;
197 RefPtr<SkTypeface> tf = createTypeface(fontDescription, family, name); 227 RefPtr<SkTypeface> tf = createTypeface(fontDescription, family, name);
198 if (!tf) 228 if (!tf)
199 return 0; 229 return 0;
200 230
201 // Windows will always give us a valid pointer here, even if the face name 231 // Windows will always give us a valid pointer here, even if the face name
202 // is non-existent. We have to double-check and see if the family name was 232 // is non-existent. We have to double-check and see if the family name was
203 // really used. 233 // really used.
204 // FIXME: Do we need to use predefined fonts "guaranteed" to exist 234 // FIXME: Do we need to use predefined fonts "guaranteed" to exist
205 // when we're running in layout-test mode? 235 // when we're running in layout-test mode?
206 if (!typefacesMatchesFamily(tf.get(), family)) { 236 if (!typefacesMatchesFamily(tf.get(), family)) {
207 return 0; 237 return 0;
208 } 238 }
209 239
210 FontPlatformData* result = new FontPlatformData(tf, 240 FontPlatformData* result = new FontPlatformData(tf,
211 name.data(), 241 name.data(),
212 fontSize, 242 fontSize,
213 fontDescription.weight() >= FontWeightBold && !tf->isBold() || fontDescr iption.isSyntheticBold(), 243 fontDescription.weight() >= FontWeightBold && !tf->isBold() || fontDescr iption.isSyntheticBold(),
214 fontDescription.style() == FontStyleItalic && !tf->isItalic() || fontDes cription.isSyntheticItalic(), 244 fontDescription.style() == FontStyleItalic && !tf->isItalic() || fontDes cription.isSyntheticItalic(),
215 fontDescription.orientation(), 245 fontDescription.orientation(),
216 s_useSubpixelPositioning); 246 s_useSubpixelPositioning);
217 247
218 // FIXME: Turn this into a script to min-size table. 248 if (s_useDirectWrite) {
219 if (s_useDirectWrite 249 result->setMinSizeForAntiAlias(
220 && (fontDescription.script() == USCRIPT_SIMPLIFIED_HAN 250 minSizeForAntiAlias(fontDescription.script()));
221 || fontDescription.script() == USCRIPT_TRADITIONAL_HAN
222 || fontDescription.script() == USCRIPT_HIRAGANA
223 || fontDescription.script() == USCRIPT_KATAKANA
224 || fontDescription.script() == USCRIPT_KATAKANA_OR_HIRAGANA
225 || fontDescription.script() == USCRIPT_HANGUL
226 || fontDescription.script() == USCRIPT_THAI
227 || fontDescription.script() == USCRIPT_HEBREW
228 || fontDescription.script() == USCRIPT_ARABIC
229 || fontDescription.script() == USCRIPT_DEVANAGARI
230 || fontDescription.script() == USCRIPT_BENGALI
231 || fontDescription.script() == USCRIPT_GURMUKHI
232 || fontDescription.script() == USCRIPT_GUJARATI
233 || fontDescription.script() == USCRIPT_TAMIL
234 || fontDescription.script() == USCRIPT_TELUGU
235 || fontDescription.script() == USCRIPT_KANNADA
236 || fontDescription.script() == USCRIPT_GEORGIAN
237 || fontDescription.script() == USCRIPT_ARMENIAN
238 || fontDescription.script() == USCRIPT_THAANA
239 || fontDescription.script() == USCRIPT_CANADIAN_ABORIGINAL
240 || fontDescription.script() == USCRIPT_CHEROKEE
241 || fontDescription.script() == USCRIPT_MONGOLIAN)) {
242 result->setMinSizeForAntiAlias(s_minSizeForComplexScriptsAntiAlias);
243 } 251 }
244 252
245 return result; 253 return result;
246 } 254 }
247 255
248 } 256 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698