OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. | 2 * Copyright (c) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 { | 69 { |
70 FontDescription substituteDescription(fontDescription); | 70 FontDescription substituteDescription(fontDescription); |
71 substituteDescription.setStyle(FontStyleNormal); | 71 substituteDescription.setStyle(FontStyleNormal); |
72 substituteDescription.setWeight(FontWeightNormal); | 72 substituteDescription.setWeight(FontWeightNormal); |
73 | 73 |
74 FontFaceCreationParams creationParams(substituteDescription.family().family(
)); | 74 FontFaceCreationParams creationParams(substituteDescription.family().family(
)); |
75 FontPlatformData* substitutePlatformData = getFontPlatformData(substituteDes
cription, creationParams); | 75 FontPlatformData* substitutePlatformData = getFontPlatformData(substituteDes
cription, creationParams); |
76 if (substitutePlatformData && substitutePlatformData->fontContainsCharacter(
character)) { | 76 if (substitutePlatformData && substitutePlatformData->fontContainsCharacter(
character)) { |
77 FontPlatformData platformData = FontPlatformData(*substitutePlatformData
); | 77 FontPlatformData platformData = FontPlatformData(*substitutePlatformData
); |
78 platformData.setSyntheticBold(fontDescription.weight() >= FontWeight600)
; | 78 platformData.setSyntheticBold(fontDescription.weight() >= FontWeight600)
; |
79 platformData.setSyntheticItalic(fontDescription.style() == FontStyleItal
ic); | 79 platformData.setSyntheticItalic(fontDescription.style() == FontStyleItal
ic || fontDescription.style() == FontStyleOblique); |
80 return fontDataFromFontPlatformData(&platformData, DoNotRetain); | 80 return fontDataFromFontPlatformData(&platformData, DoNotRetain); |
81 } | 81 } |
82 | 82 |
83 return nullptr; | 83 return nullptr; |
84 } | 84 } |
85 | 85 |
86 #if !OS(WIN) && !OS(ANDROID) | 86 #if !OS(WIN) && !OS(ANDROID) |
87 PassRefPtr<SimpleFontData> FontCache::fallbackFontForCharacter(const FontDescrip
tion& fontDescription, UChar32 c, const SimpleFontData*) | 87 PassRefPtr<SimpleFontData> FontCache::fallbackFontForCharacter(const FontDescrip
tion& fontDescription, UChar32 c, const SimpleFontData*) |
88 { | 88 { |
89 // First try the specified font with standard style & weight. | 89 // First try the specified font with standard style & weight. |
(...skipping 20 matching lines...) Expand all Loading... |
110 bool shouldSetSyntheticItalic = false; | 110 bool shouldSetSyntheticItalic = false; |
111 FontDescription description(fontDescription); | 111 FontDescription description(fontDescription); |
112 if (fallbackFont.isBold && description.weight() < FontWeightBold) | 112 if (fallbackFont.isBold && description.weight() < FontWeightBold) |
113 description.setWeight(FontWeightBold); | 113 description.setWeight(FontWeightBold); |
114 if (!fallbackFont.isBold && description.weight() >= FontWeightBold) { | 114 if (!fallbackFont.isBold && description.weight() >= FontWeightBold) { |
115 shouldSetSyntheticBold = true; | 115 shouldSetSyntheticBold = true; |
116 description.setWeight(FontWeightNormal); | 116 description.setWeight(FontWeightNormal); |
117 } | 117 } |
118 if (fallbackFont.isItalic && description.style() == FontStyleNormal) | 118 if (fallbackFont.isItalic && description.style() == FontStyleNormal) |
119 description.setStyle(FontStyleItalic); | 119 description.setStyle(FontStyleItalic); |
120 if (!fallbackFont.isItalic && description.style() == FontStyleItalic) { | 120 if (!fallbackFont.isItalic && (description.style() == FontStyleItalic || des
cription.style() == FontStyleOblique)) { |
121 shouldSetSyntheticItalic = true; | 121 shouldSetSyntheticItalic = true; |
122 description.setStyle(FontStyleNormal); | 122 description.setStyle(FontStyleNormal); |
123 } | 123 } |
124 | 124 |
125 FontPlatformData* substitutePlatformData = getFontPlatformData(description,
creationParams); | 125 FontPlatformData* substitutePlatformData = getFontPlatformData(description,
creationParams); |
126 if (!substitutePlatformData) | 126 if (!substitutePlatformData) |
127 return nullptr; | 127 return nullptr; |
128 FontPlatformData platformData = FontPlatformData(*substitutePlatformData); | 128 FontPlatformData platformData = FontPlatformData(*substitutePlatformData); |
129 platformData.setSyntheticBold(shouldSetSyntheticBold); | 129 platformData.setSyntheticBold(shouldSetSyntheticBold); |
130 platformData.setSyntheticItalic(shouldSetSyntheticItalic); | 130 platformData.setSyntheticItalic(shouldSetSyntheticItalic); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 { | 241 { |
242 CString name; | 242 CString name; |
243 RefPtr<SkTypeface> tf(createTypeface(fontDescription, creationParams, name))
; | 243 RefPtr<SkTypeface> tf(createTypeface(fontDescription, creationParams, name))
; |
244 if (!tf) | 244 if (!tf) |
245 return 0; | 245 return 0; |
246 | 246 |
247 FontPlatformData* result = new FontPlatformData(tf, | 247 FontPlatformData* result = new FontPlatformData(tf, |
248 name.data(), | 248 name.data(), |
249 fontSize, | 249 fontSize, |
250 (fontDescription.weight() >= FontWeight600 && !tf->isBold()) || fontDesc
ription.isSyntheticBold(), | 250 (fontDescription.weight() >= FontWeight600 && !tf->isBold()) || fontDesc
ription.isSyntheticBold(), |
251 (fontDescription.style() && !tf->isItalic()) || fontDescription.isSynthe
ticItalic(), | 251 ((fontDescription.style() == FontStyleItalic || fontDescription.style()
== FontStyleOblique) && !tf->isItalic()) || fontDescription.isSyntheticItalic(), |
252 fontDescription.orientation(), | 252 fontDescription.orientation(), |
253 fontDescription.useSubpixelPositioning()); | 253 fontDescription.useSubpixelPositioning()); |
254 return result; | 254 return result; |
255 } | 255 } |
256 #endif // !OS(WIN) | 256 #endif // !OS(WIN) |
257 | 257 |
258 } // namespace blink | 258 } // namespace blink |
OLD | NEW |