diff options
Diffstat (limited to 'Source/WebCore/style/StyleFontSizeFunctions.cpp')
-rw-r--r-- | Source/WebCore/style/StyleFontSizeFunctions.cpp | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/Source/WebCore/style/StyleFontSizeFunctions.cpp b/Source/WebCore/style/StyleFontSizeFunctions.cpp index 0ab3e163f..c92cc4c40 100644 --- a/Source/WebCore/style/StyleFontSizeFunctions.cpp +++ b/Source/WebCore/style/StyleFontSizeFunctions.cpp @@ -39,9 +39,13 @@ namespace WebCore { namespace Style { -enum ESmartMinimumForFontSize { DoNotUseSmartMinimumForFontSize, UseSmartMinimumForFontFize }; +enum MinimumFontSizeRule { + DoNotApplyMinimumFontSize, + DoNotUseSmartMinimumForFontSize, + UseSmartMinimumForFontFize +}; -static float computedFontSizeFromSpecifiedSize(float specifiedSize, bool isAbsoluteSize, float zoomFactor, ESmartMinimumForFontSize useSmartMinimumForFontSize, const Settings* settings) +static float computedFontSizeFromSpecifiedSize(float specifiedSize, bool isAbsoluteSize, float zoomFactor, MinimumFontSizeRule minimumSizeRule, const Settings& settings) { // Text with a 0px font size should not be visible and therefore needs to be // exempt from minimum font size rules. Acid3 relies on this for pixel-perfect @@ -60,11 +64,11 @@ static float computedFontSizeFromSpecifiedSize(float specifiedSize, bool isAbsol // However we always allow the page to set an explicit pixel size that is smaller, // since sites will mis-render otherwise (e.g., http://www.gamespot.com with a 9px minimum). - if (!settings) - return 1.0f; + if (minimumSizeRule == DoNotApplyMinimumFontSize) + return specifiedSize; - int minSize = settings->minimumFontSize(); - int minLogicalSize = settings->minimumLogicalFontSize(); + int minSize = settings.minimumFontSize(); + int minLogicalSize = settings.minimumLogicalFontSize(); float zoomedSize = specifiedSize * zoomFactor; // Apply the hard minimum first. We only apply the hard minimum if after zooming we're still too small. @@ -75,7 +79,7 @@ static float computedFontSizeFromSpecifiedSize(float specifiedSize, bool isAbsol // after zooming. The font size must either be relative to the user default or the original size // must have been acceptable. In other words, we only apply the smart minimum whenever we're positive // doing so won't disrupt the layout. - if (useSmartMinimumForFontSize && zoomedSize < minLogicalSize && (specifiedSize >= minLogicalSize || !isAbsoluteSize)) + if (minimumSizeRule == UseSmartMinimumForFontFize && zoomedSize < minLogicalSize && (specifiedSize >= minLogicalSize || !isAbsoluteSize)) zoomedSize = minLogicalSize; // Also clamp to a reasonable maximum to prevent insane font sizes from causing crashes on various @@ -88,10 +92,11 @@ float computedFontSizeFromSpecifiedSize(float specifiedSize, bool isAbsoluteSize float zoomFactor = 1.0f; if (!useSVGZoomRules) { zoomFactor = style->effectiveZoom(); - if (Frame* frame = document.frame()) + Frame* frame = document.frame(); + if (frame && style->textZoom() != TextZoomReset) zoomFactor *= frame->textZoomFactor(); } - return computedFontSizeFromSpecifiedSize(specifiedSize, isAbsoluteSize, zoomFactor, UseSmartMinimumForFontFize, document.settings()); + return computedFontSizeFromSpecifiedSize(specifiedSize, isAbsoluteSize, zoomFactor, useSVGZoomRules ? DoNotApplyMinimumFontSize : UseSmartMinimumForFontFize, document.settings()); } float computedFontSizeFromSpecifiedSizeForSVGInlineText(float specifiedSize, bool isAbsoluteSize, float zoomFactor, const Document& document) @@ -143,12 +148,8 @@ static const float fontSizeFactors[totalKeywords] = { 0.60f, 0.75f, 0.89f, 1.0f, float fontSizeForKeyword(unsigned keywordID, bool shouldUseFixedDefaultSize, const Document& document) { - Settings* settings = document.settings(); - if (!settings) - return 1.0f; - bool quirksMode = document.inQuirksMode(); - int mediumSize = shouldUseFixedDefaultSize ? settings->defaultFixedFontSize() : settings->defaultFontSize(); + int mediumSize = shouldUseFixedDefaultSize ? document.settings().defaultFixedFontSize() : document.settings().defaultFontSize(); if (mediumSize >= fontSizeTableMin && mediumSize <= fontSizeTableMax) { // Look up the entry in the table. int row = mediumSize - fontSizeTableMin; @@ -157,7 +158,7 @@ float fontSizeForKeyword(unsigned keywordID, bool shouldUseFixedDefaultSize, con } // Value is outside the range of the table. Apply the scale factor instead. - float minLogicalSize = std::max(settings->minimumLogicalFontSize(), 1); + float minLogicalSize = std::max(document.settings().minimumLogicalFontSize(), 1); return std::max(fontSizeFactors[keywordID - CSSValueXxSmall] * mediumSize, minLogicalSize); } @@ -174,12 +175,8 @@ static int findNearestLegacyFontSize(int pixelFontSize, const T* table, int mult int legacyFontSizeForPixelSize(int pixelFontSize, bool shouldUseFixedDefaultSize, const Document& document) { - Settings* settings = document.settings(); - if (!settings) - return 1; - bool quirksMode = document.inQuirksMode(); - int mediumSize = shouldUseFixedDefaultSize ? settings->defaultFixedFontSize() : settings->defaultFontSize(); + int mediumSize = shouldUseFixedDefaultSize ? document.settings().defaultFixedFontSize() : document.settings().defaultFontSize(); if (mediumSize >= fontSizeTableMin && mediumSize <= fontSizeTableMax) { int row = mediumSize - fontSizeTableMin; return findNearestLegacyFontSize<int>(pixelFontSize, quirksMode ? quirksFontSizeTable[row] : strictFontSizeTable[row], 1); |