summaryrefslogtreecommitdiff
path: root/Source/WebCore/style/StyleFontSizeFunctions.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/style/StyleFontSizeFunctions.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/style/StyleFontSizeFunctions.cpp')
-rw-r--r--Source/WebCore/style/StyleFontSizeFunctions.cpp37
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);