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

Side by Side Diff: third_party/WebKit/Source/platform/fonts/mac/FontCacheMac.mm

Issue 2386333002: reflow comments in platform/fonts (Closed)
Patch Set: comments Created 4 years, 2 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, 2008, 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> 3 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com>
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 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. 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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 inLanguage:nil]; 139 inLanguage:nil];
140 [string release]; 140 [string release];
141 141
142 // FIXME: Remove this SPI usage: http://crbug.com/255122 142 // FIXME: Remove this SPI usage: http://crbug.com/255122
143 if (!substituteFont && codeUnitsLength == 1) 143 if (!substituteFont && codeUnitsLength == 1)
144 substituteFont = 144 substituteFont =
145 [NSFont findFontLike:nsFont forCharacter:codeUnits[0] inLanguage:nil]; 145 [NSFont findFontLike:nsFont forCharacter:codeUnits[0] inLanguage:nil];
146 if (!substituteFont) 146 if (!substituteFont)
147 return nullptr; 147 return nullptr;
148 148
149 // Use the family name from the AppKit-supplied substitute font, requesting th e 149 // Use the family name from the AppKit-supplied substitute font, requesting
150 // traits, weight, and size we want. One way this does better than the origina l 150 // the traits, weight, and size we want. One way this does better than the
151 // AppKit request is that it takes synthetic bold and oblique into account. 151 // original AppKit request is that it takes synthetic bold and oblique into
152 // But it does create the possibility that we could end up with a font that 152 // account. But it does create the possibility that we could end up with a
153 // doesn't actually cover the characters we need. 153 // font that doesn't actually cover the characters we need.
154 154
155 NSFontManager* fontManager = [NSFontManager sharedFontManager]; 155 NSFontManager* fontManager = [NSFontManager sharedFontManager];
156 156
157 NSFontTraitMask traits; 157 NSFontTraitMask traits;
158 NSInteger weight; 158 NSInteger weight;
159 CGFloat size; 159 CGFloat size;
160 160
161 if (nsFont) { 161 if (nsFont) {
162 traits = [fontManager traitsOfFont:nsFont]; 162 traits = [fontManager traitsOfFont:nsFont];
163 if (platformData.m_syntheticBold) 163 if (platformData.m_syntheticBold)
(...skipping 27 matching lines...) Expand all
191 substituteFont = bestVariation; 191 substituteFont = bestVariation;
192 } 192 }
193 } 193 }
194 194
195 substituteFont = 195 substituteFont =
196 useHinting() ? [substituteFont screenFont] : [substituteFont printerFont]; 196 useHinting() ? [substituteFont screenFont] : [substituteFont printerFont];
197 197
198 substituteFontTraits = [fontManager traitsOfFont:substituteFont]; 198 substituteFontTraits = [fontManager traitsOfFont:substituteFont];
199 substituteFontWeight = [fontManager weightOfFont:substituteFont]; 199 substituteFontWeight = [fontManager weightOfFont:substituteFont];
200 200
201 // TODO(eae): Remove once skia supports bold emoji. See https://bugs.chromium. org/p/skia/issues/detail?id=4904 201 // TODO(eae): Remove once skia supports bold emoji. See
202 // https://bugs.chromium.org/p/skia/issues/detail?id=4904
202 // Bold emoji look the same as normal emoji, so syntheticBold isn't needed. 203 // Bold emoji look the same as normal emoji, so syntheticBold isn't needed.
203 bool syntheticBold = 204 bool syntheticBold =
204 isAppKitFontWeightBold(weight) && 205 isAppKitFontWeightBold(weight) &&
205 !isAppKitFontWeightBold(substituteFontWeight) && 206 !isAppKitFontWeightBold(substituteFontWeight) &&
206 ![substituteFont.familyName isEqual:@"Apple Color Emoji"]; 207 ![substituteFont.familyName isEqual:@"Apple Color Emoji"];
207 208
208 FontPlatformData alternateFont( 209 FontPlatformData alternateFont(
209 substituteFont, platformData.size(), syntheticBold, 210 substituteFont, platformData.size(), syntheticBold,
210 (traits & NSFontItalicTrait) && 211 (traits & NSFontItalicTrait) &&
211 !(substituteFontTraits & NSFontItalicTrait), 212 !(substituteFontTraits & NSFontItalicTrait),
212 platformData.orientation()); 213 platformData.orientation());
213 214
214 return fontDataFromFontPlatformData(&alternateFont, DoNotRetain); 215 return fontDataFromFontPlatformData(&alternateFont, DoNotRetain);
215 } 216 }
216 217
217 PassRefPtr<SimpleFontData> FontCache::getLastResortFallbackFont( 218 PassRefPtr<SimpleFontData> FontCache::getLastResortFallbackFont(
218 const FontDescription& fontDescription, 219 const FontDescription& fontDescription,
219 ShouldRetain shouldRetain) { 220 ShouldRetain shouldRetain) {
220 DEFINE_STATIC_LOCAL(AtomicString, timesStr, ("Times")); 221 DEFINE_STATIC_LOCAL(AtomicString, timesStr, ("Times"));
221 222
222 // FIXME: Would be even better to somehow get the user's default font here. F or now we'll pick 223 // FIXME: Would be even better to somehow get the user's default font here.
223 // the default that the user would get without changing any prefs. 224 // For now we'll pick the default that the user would get without changing
225 // any prefs.
224 RefPtr<SimpleFontData> simpleFontData = 226 RefPtr<SimpleFontData> simpleFontData =
225 getFontData(fontDescription, timesStr, false, shouldRetain); 227 getFontData(fontDescription, timesStr, false, shouldRetain);
226 if (simpleFontData) 228 if (simpleFontData)
227 return simpleFontData.release(); 229 return simpleFontData.release();
228 230
229 // The Times fallback will almost always work, but in the highly unusual case where 231 // The Times fallback will almost always work, but in the highly unusual case
230 // the user doesn't have it, we fall back on Lucida Grande because that's 232 // where the user doesn't have it, we fall back on Lucida Grande because
231 // guaranteed to be there, according to Nathan Taylor. This is good enough 233 // that's guaranteed to be there, according to Nathan Taylor. This is good
232 // to avoid a crash at least. 234 // enough to avoid a crash at least.
233 DEFINE_STATIC_LOCAL(AtomicString, lucidaGrandeStr, ("Lucida Grande")); 235 DEFINE_STATIC_LOCAL(AtomicString, lucidaGrandeStr, ("Lucida Grande"));
234 return getFontData(fontDescription, lucidaGrandeStr, false, shouldRetain); 236 return getFontData(fontDescription, lucidaGrandeStr, false, shouldRetain);
235 } 237 }
236 238
237 std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData( 239 std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(
238 const FontDescription& fontDescription, 240 const FontDescription& fontDescription,
239 const FontFaceCreationParams& creationParams, 241 const FontFaceCreationParams& creationParams,
240 float fontSize) { 242 float fontSize) {
241 NSFontTraitMask traits = fontDescription.style() ? NSFontItalicTrait : 0; 243 NSFontTraitMask traits = fontDescription.style() ? NSFontItalicTrait : 0;
242 float size = fontSize; 244 float size = fontSize;
243 245
244 NSFont* nsFont = MatchNSFontFamily(creationParams.family(), traits, 246 NSFont* nsFont = MatchNSFontFamily(creationParams.family(), traits,
245 fontDescription.weight(), size); 247 fontDescription.weight(), size);
246 if (!nsFont) 248 if (!nsFont)
247 return nullptr; 249 return nullptr;
248 250
249 NSFontManager* fontManager = [NSFontManager sharedFontManager]; 251 NSFontManager* fontManager = [NSFontManager sharedFontManager];
250 NSFontTraitMask actualTraits = 0; 252 NSFontTraitMask actualTraits = 0;
251 if (fontDescription.style()) 253 if (fontDescription.style())
252 actualTraits = [fontManager traitsOfFont:nsFont]; 254 actualTraits = [fontManager traitsOfFont:nsFont];
253 NSInteger actualWeight = [fontManager weightOfFont:nsFont]; 255 NSInteger actualWeight = [fontManager weightOfFont:nsFont];
254 256
255 NSFont* platformFont = 257 NSFont* platformFont =
256 useHinting() ? [nsFont screenFont] : [nsFont printerFont]; 258 useHinting() ? [nsFont screenFont] : [nsFont printerFont];
257 NSInteger appKitWeight = toAppKitFontWeight(fontDescription.weight()); 259 NSInteger appKitWeight = toAppKitFontWeight(fontDescription.weight());
258 260
259 // TODO(eae): Remove once skia supports bold emoji. See https://bugs.chromium. org/p/skia/issues/detail?id=4904 261 // TODO(eae): Remove once skia supports bold emoji. See
262 // https://bugs.chromium.org/p/skia/issues/detail?id=4904
260 // Bold emoji look the same as normal emoji, so syntheticBold isn't needed. 263 // Bold emoji look the same as normal emoji, so syntheticBold isn't needed.
261 bool syntheticBold = [platformFont.familyName isEqual:@"Apple Color Emoji"] 264 bool syntheticBold = [platformFont.familyName isEqual:@"Apple Color Emoji"]
262 ? false 265 ? false
263 : (isAppKitFontWeightBold(appKitWeight) && 266 : (isAppKitFontWeightBold(appKitWeight) &&
264 !isAppKitFontWeightBold(actualWeight)) || 267 !isAppKitFontWeightBold(actualWeight)) ||
265 fontDescription.isSyntheticBold(); 268 fontDescription.isSyntheticBold();
266 269
267 bool syntheticItalic = 270 bool syntheticItalic =
268 ((traits & NSFontItalicTrait) && !(actualTraits & NSFontItalicTrait)) || 271 ((traits & NSFontItalicTrait) && !(actualTraits & NSFontItalicTrait)) ||
269 fontDescription.isSyntheticItalic(); 272 fontDescription.isSyntheticItalic();
270 273
271 // FontPlatformData::typeface() is null in the case of Chromium out-of-process font loading failing. 274 // FontPlatformData::typeface() is null in the case of Chromium out-of-process
272 // Out-of-process loading occurs for registered fonts stored in non-system loc ations. 275 // font loading failing. Out-of-process loading occurs for registered fonts
273 // When loading fails, we do not want to use the returned FontPlatformData sin ce it will not have 276 // stored in non-system locations. When loading fails, we do not want to use
274 // a valid SkTypeface. 277 // the returned FontPlatformData since it will not have a valid SkTypeface.
275 std::unique_ptr<FontPlatformData> platformData = wrapUnique( 278 std::unique_ptr<FontPlatformData> platformData = wrapUnique(
276 new FontPlatformData(platformFont, size, syntheticBold, syntheticItalic, 279 new FontPlatformData(platformFont, size, syntheticBold, syntheticItalic,
277 fontDescription.orientation())); 280 fontDescription.orientation()));
278 if (!platformData->typeface()) { 281 if (!platformData->typeface()) {
279 return nullptr; 282 return nullptr;
280 } 283 }
281 return platformData; 284 return platformData;
282 } 285 }
283 286
284 } // namespace blink 287 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698