Changeset 57613 in webkit
- Timestamp:
- Apr 14, 2010 3:15:57 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r57609 r57613 1 2010-04-14 Steve Falkenburg <sfalken@apple.com> 2 3 Reviewed by Dan Bernstein. 4 5 Don't cache SimpleFontData* in getLastResortFallbackFont. The cached entry may be invalidated. 6 https://bugs.webkit.org/show_bug.cgi?id=37599 7 8 * platform/graphics/win/FontCacheWin.cpp: 9 (WebCore::fontDataFromDescriptionAndLogFont): 10 (WebCore::FontCache::getLastResortFallbackFont): 11 1 12 2010-04-14 Andrey Kosyakov <caseq@chromium.ru> 2 13 -
trunk/WebCore/platform/graphics/win/FontCacheWin.cpp
r57490 r57613 302 302 } 303 303 304 static SimpleFontData* fontDataFromDescriptionAndLogFont(FontCache* fontCache, const FontDescription& fontDescription, const LOGFONT& font) 305 { 306 String fontFamily = String(font.lfFaceName, wcsnlen(font.lfFaceName, LF_FACESIZE)); 307 return fontCache->getCachedFontData(fontDescription, fontFamily); 304 static SimpleFontData* fontDataFromDescriptionAndLogFont(FontCache* fontCache, const FontDescription& fontDescription, const LOGFONT& font, AtomicString& outFontFamilyName) 305 { 306 AtomicString familyName = String(font.lfFaceName, wcsnlen(font.lfFaceName, LF_FACESIZE)); 307 SimpleFontData* fontData = fontCache->getCachedFontData(fontDescription, familyName); 308 if (fontData) 309 outFontFamilyName = familyName; 310 return fontData; 308 311 } 309 312 310 313 SimpleFontData* FontCache::getLastResortFallbackFont(const FontDescription& fontDescription) 311 314 { 312 DEFINE_STATIC_LOCAL( SimpleFontData*, simpleFont, ());313 if ( simpleFont)314 return simpleFont;315 DEFINE_STATIC_LOCAL(AtomicString, fallbackFontName, ()); 316 if (!fallbackFontName.isEmpty()) 317 return getCachedFontData(fontDescription, fallbackFontName); 315 318 316 319 // FIXME: Would be even better to somehow get the user's default font here. For now we'll pick … … 327 330 AtomicString("Arial") 328 331 }; 332 SimpleFontData* simpleFont; 329 333 for (int i = 0; i < ARRAYSIZE(fallbackFonts); ++i) { 330 if (simpleFont = getCachedFontData(fontDescription, fallbackFonts[i])) 334 if (simpleFont = getCachedFontData(fontDescription, fallbackFonts[i])) { 335 fallbackFontName = fallbackFonts[i]; 331 336 return simpleFont; 337 } 332 338 } 333 339 … … 336 342 LOGFONT defaultGUILogFont; 337 343 GetObject(defaultGUIFont, sizeof(defaultGUILogFont), &defaultGUILogFont); 338 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, defaultGUILogFont ))344 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, defaultGUILogFont, fallbackFontName)) 339 345 return simpleFont; 340 346 } … … 344 350 nonClientMetrics.cbSize = sizeof(nonClientMetrics); 345 351 if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(nonClientMetrics), &nonClientMetrics, 0)) { 346 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfMessageFont ))352 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfMessageFont, fallbackFontName)) 347 353 return simpleFont; 348 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfMenuFont ))354 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfMenuFont, fallbackFontName)) 349 355 return simpleFont; 350 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfStatusFont ))356 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfStatusFont, fallbackFontName)) 351 357 return simpleFont; 352 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfCaptionFont ))358 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfCaptionFont, fallbackFontName)) 353 359 return simpleFont; 354 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfSmCaptionFont ))360 if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfSmCaptionFont, fallbackFontName)) 355 361 return simpleFont; 356 362 }
Note: See TracChangeset
for help on using the changeset viewer.