diff --git a/content/html/style/src/nsCSSStyleRule.cpp b/content/html/style/src/nsCSSStyleRule.cpp index e2917cc62d4b..7eb2e08fd41f 100644 --- a/content/html/style/src/nsCSSStyleRule.cpp +++ b/content/html/style/src/nsCSSStyleRule.cpp @@ -589,20 +589,23 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a const nsFont& normal = aPresContext->GetDefaultFont(); const nsFont& normalFixed = aPresContext->GetDefaultFixedFont(); + PRInt32 scaler = aPresContext->GetFontScaler(); + float scaleFactor = nsStyleUtil::GetScalingFactor(scaler); + if ((NS_STYLE_FONT_SIZE_XXSMALL <= value) && (value <= NS_STYLE_FONT_SIZE_XXLARGE)) { - font->mFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normal.size); - font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normalFixed.size); + font->mFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normal.size, scaleFactor); + font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normalFixed.size, scaleFactor); } else if (NS_STYLE_FONT_SIZE_LARGER == value) { - PRInt32 index = nsStyleUtil::FindNextLargerFontSize(parentFont->mFont.size, (PRInt32)normal.size); - font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size); - font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size); + PRInt32 index = nsStyleUtil::FindNextLargerFontSize(parentFont->mFont.size, (PRInt32)normal.size, scaleFactor); + font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size, scaleFactor); + font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size, scaleFactor); } else if (NS_STYLE_FONT_SIZE_SMALLER == value) { - PRInt32 index = nsStyleUtil::FindNextSmallerFontSize(parentFont->mFont.size, (PRInt32)normal.size); - font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size); - font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size); + PRInt32 index = nsStyleUtil::FindNextSmallerFontSize(parentFont->mFont.size, (PRInt32)normal.size, scaleFactor); + font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size, scaleFactor); + font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size, scaleFactor); } // this does NOT explicitly set font size } diff --git a/content/html/style/src/nsStyleUtil.cpp b/content/html/style/src/nsStyleUtil.cpp index 7a09a40b7874..50e443f4b255 100644 --- a/content/html/style/src/nsStyleUtil.cpp +++ b/content/html/style/src/nsStyleUtil.cpp @@ -21,7 +21,41 @@ #include "nsIStyleContext.h" #include "nsStyleConsts.h" -nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize) +#define POSITIVE_SCALE_FACTOR 1.10 /* 10% */ +#define NEGATIVE_SCALE_FACTOR .90 /* 10% */ + +/* + * Return the scaling percentage given a font scaler + * Lifted from layutil.c + */ +float nsStyleUtil::GetScalingFactor(PRInt32 aScaler) +{ + double scale = 1.0; + double mult; + PRInt32 count; + + if(aScaler < 0) { + count = -aScaler; + mult = NEGATIVE_SCALE_FACTOR; + } + else { + count = aScaler; + mult = POSITIVE_SCALE_FACTOR; + } + + /* use the percentage scaling factor to the power of the pref */ + while(count--) { + scale *= mult; + } + + return scale; +} + +/* + * Lifted from winfe/cxdc.cpp + */ +nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize, + float aScalingFactor) { // lifted directly from Nav 5.0 code to replicate rounding errors double dFontSize; @@ -54,23 +88,28 @@ nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize default: dFontSize = aBasePointSize; } + + dFontSize *= aScalingFactor; + return (nscoord)dFontSize; } -PRInt32 nsStyleUtil::FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize) +PRInt32 nsStyleUtil::FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor) { PRInt32 index; for (index = 7; index > 1; index--) - if (aFontSize > nsStyleUtil::CalcFontPointSize(index, aBasePointSize)) + if (aFontSize > nsStyleUtil::CalcFontPointSize(index, aBasePointSize, aScalingFactor)) break; return index; } -PRInt32 nsStyleUtil::FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize) +PRInt32 nsStyleUtil::FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor) { PRInt32 index; for (index = 1; index < 7; index++) - if (aFontSize < nsStyleUtil::CalcFontPointSize(index, aBasePointSize)) + if (aFontSize < nsStyleUtil::CalcFontPointSize(index, aBasePointSize, aScalingFactor)) break; return index; } diff --git a/content/shared/src/nsStyleUtil.cpp b/content/shared/src/nsStyleUtil.cpp index 7a09a40b7874..50e443f4b255 100644 --- a/content/shared/src/nsStyleUtil.cpp +++ b/content/shared/src/nsStyleUtil.cpp @@ -21,7 +21,41 @@ #include "nsIStyleContext.h" #include "nsStyleConsts.h" -nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize) +#define POSITIVE_SCALE_FACTOR 1.10 /* 10% */ +#define NEGATIVE_SCALE_FACTOR .90 /* 10% */ + +/* + * Return the scaling percentage given a font scaler + * Lifted from layutil.c + */ +float nsStyleUtil::GetScalingFactor(PRInt32 aScaler) +{ + double scale = 1.0; + double mult; + PRInt32 count; + + if(aScaler < 0) { + count = -aScaler; + mult = NEGATIVE_SCALE_FACTOR; + } + else { + count = aScaler; + mult = POSITIVE_SCALE_FACTOR; + } + + /* use the percentage scaling factor to the power of the pref */ + while(count--) { + scale *= mult; + } + + return scale; +} + +/* + * Lifted from winfe/cxdc.cpp + */ +nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize, + float aScalingFactor) { // lifted directly from Nav 5.0 code to replicate rounding errors double dFontSize; @@ -54,23 +88,28 @@ nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize default: dFontSize = aBasePointSize; } + + dFontSize *= aScalingFactor; + return (nscoord)dFontSize; } -PRInt32 nsStyleUtil::FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize) +PRInt32 nsStyleUtil::FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor) { PRInt32 index; for (index = 7; index > 1; index--) - if (aFontSize > nsStyleUtil::CalcFontPointSize(index, aBasePointSize)) + if (aFontSize > nsStyleUtil::CalcFontPointSize(index, aBasePointSize, aScalingFactor)) break; return index; } -PRInt32 nsStyleUtil::FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize) +PRInt32 nsStyleUtil::FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor) { PRInt32 index; for (index = 1; index < 7; index++) - if (aFontSize < nsStyleUtil::CalcFontPointSize(index, aBasePointSize)) + if (aFontSize < nsStyleUtil::CalcFontPointSize(index, aBasePointSize, aScalingFactor)) break; return index; } diff --git a/layout/html/forms/src/nsInputButton.cpp b/layout/html/forms/src/nsInputButton.cpp index 6256c3706da7..c658af8fb337 100644 --- a/layout/html/forms/src/nsInputButton.cpp +++ b/layout/html/forms/src/nsInputButton.cpp @@ -569,8 +569,10 @@ nsInputButtonFrame::PostCreateWidget(nsIPresContext* aPresContext, nsIView *aVie widgetFont.name = "Arail"; // XXX windows specific font widgetFont.weight = NS_FONT_WEIGHT_NORMAL; const nsFont& normal = aPresContext->GetDefaultFont(); - PRInt32 fontIndex = nsStyleUtil::FindNextSmallerFontSize(widgetFont.size, (PRInt32)normal.size); - widgetFont.size = nsStyleUtil::CalcFontPointSize(fontIndex, (PRInt32)normal.size); + PRInt32 scaler = aPresContext->GetFontScaler(); + float scaleFactor = nsStyleUtil::GetScalingFactor(scaler); + PRInt32 fontIndex = nsStyleUtil::FindNextSmallerFontSize(widgetFont.size, (PRInt32)normal.size, scaleFactor); + widgetFont.size = nsStyleUtil::CalcFontPointSize(fontIndex, (PRInt32)normal.size, scaleFactor); button->SetFont(widgetFont); } } diff --git a/layout/html/forms/src/nsSelect.cpp b/layout/html/forms/src/nsSelect.cpp index eb17bd4fff8a..b911c8e09d51 100644 --- a/layout/html/forms/src/nsSelect.cpp +++ b/layout/html/forms/src/nsSelect.cpp @@ -337,8 +337,10 @@ nsSelectFrame::PostCreateWidget(nsIPresContext* aPresContext, nsIView *aView) widgetFont.name = "Arail"; // XXX windows specific font widgetFont.weight = NS_FONT_WEIGHT_NORMAL; const nsFont& normal = aPresContext->GetDefaultFont(); - PRInt32 fontIndex = nsStyleUtil::FindNextSmallerFontSize(widgetFont.size, (PRInt32)normal.size); - widgetFont.size = nsStyleUtil::CalcFontPointSize(fontIndex, (PRInt32)normal.size); + PRInt32 scaler = aPresContext->GetFontScaler(); + float scaleFactor = nsStyleUtil::GetScalingFactor(scaler); + PRInt32 fontIndex = nsStyleUtil::FindNextSmallerFontSize(widgetFont.size, (PRInt32)normal.size, scaleFactor); + widgetFont.size = nsStyleUtil::CalcFontPointSize(fontIndex, (PRInt32)normal.size, scaleFactor); list->SetFont(widgetFont); } diff --git a/layout/html/style/public/nsStyleUtil.h b/layout/html/style/public/nsStyleUtil.h index 75a750cf7b0c..45e7ac116424 100644 --- a/layout/html/style/public/nsStyleUtil.h +++ b/layout/html/style/public/nsStyleUtil.h @@ -27,10 +27,15 @@ struct nsStyleColor; // Style utility functions class nsStyleUtil { public: + + static float GetScalingFactor(PRInt32 aScaler); - static nscoord CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize); - static PRInt32 FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize); - static PRInt32 FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize); + static nscoord CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize, + float aScalingFactor); + static PRInt32 FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor); + static PRInt32 FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor); static const nsStyleColor* FindNonTransparentBackground(nsIStyleContext* aContext); }; diff --git a/layout/html/style/src/nsCSSStyleRule.cpp b/layout/html/style/src/nsCSSStyleRule.cpp index e2917cc62d4b..7eb2e08fd41f 100644 --- a/layout/html/style/src/nsCSSStyleRule.cpp +++ b/layout/html/style/src/nsCSSStyleRule.cpp @@ -589,20 +589,23 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a const nsFont& normal = aPresContext->GetDefaultFont(); const nsFont& normalFixed = aPresContext->GetDefaultFixedFont(); + PRInt32 scaler = aPresContext->GetFontScaler(); + float scaleFactor = nsStyleUtil::GetScalingFactor(scaler); + if ((NS_STYLE_FONT_SIZE_XXSMALL <= value) && (value <= NS_STYLE_FONT_SIZE_XXLARGE)) { - font->mFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normal.size); - font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normalFixed.size); + font->mFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normal.size, scaleFactor); + font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normalFixed.size, scaleFactor); } else if (NS_STYLE_FONT_SIZE_LARGER == value) { - PRInt32 index = nsStyleUtil::FindNextLargerFontSize(parentFont->mFont.size, (PRInt32)normal.size); - font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size); - font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size); + PRInt32 index = nsStyleUtil::FindNextLargerFontSize(parentFont->mFont.size, (PRInt32)normal.size, scaleFactor); + font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size, scaleFactor); + font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size, scaleFactor); } else if (NS_STYLE_FONT_SIZE_SMALLER == value) { - PRInt32 index = nsStyleUtil::FindNextSmallerFontSize(parentFont->mFont.size, (PRInt32)normal.size); - font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size); - font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size); + PRInt32 index = nsStyleUtil::FindNextSmallerFontSize(parentFont->mFont.size, (PRInt32)normal.size, scaleFactor); + font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size, scaleFactor); + font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size, scaleFactor); } // this does NOT explicitly set font size } diff --git a/layout/html/style/src/nsStyleUtil.cpp b/layout/html/style/src/nsStyleUtil.cpp index 7a09a40b7874..50e443f4b255 100644 --- a/layout/html/style/src/nsStyleUtil.cpp +++ b/layout/html/style/src/nsStyleUtil.cpp @@ -21,7 +21,41 @@ #include "nsIStyleContext.h" #include "nsStyleConsts.h" -nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize) +#define POSITIVE_SCALE_FACTOR 1.10 /* 10% */ +#define NEGATIVE_SCALE_FACTOR .90 /* 10% */ + +/* + * Return the scaling percentage given a font scaler + * Lifted from layutil.c + */ +float nsStyleUtil::GetScalingFactor(PRInt32 aScaler) +{ + double scale = 1.0; + double mult; + PRInt32 count; + + if(aScaler < 0) { + count = -aScaler; + mult = NEGATIVE_SCALE_FACTOR; + } + else { + count = aScaler; + mult = POSITIVE_SCALE_FACTOR; + } + + /* use the percentage scaling factor to the power of the pref */ + while(count--) { + scale *= mult; + } + + return scale; +} + +/* + * Lifted from winfe/cxdc.cpp + */ +nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize, + float aScalingFactor) { // lifted directly from Nav 5.0 code to replicate rounding errors double dFontSize; @@ -54,23 +88,28 @@ nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize default: dFontSize = aBasePointSize; } + + dFontSize *= aScalingFactor; + return (nscoord)dFontSize; } -PRInt32 nsStyleUtil::FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize) +PRInt32 nsStyleUtil::FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor) { PRInt32 index; for (index = 7; index > 1; index--) - if (aFontSize > nsStyleUtil::CalcFontPointSize(index, aBasePointSize)) + if (aFontSize > nsStyleUtil::CalcFontPointSize(index, aBasePointSize, aScalingFactor)) break; return index; } -PRInt32 nsStyleUtil::FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize) +PRInt32 nsStyleUtil::FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor) { PRInt32 index; for (index = 1; index < 7; index++) - if (aFontSize < nsStyleUtil::CalcFontPointSize(index, aBasePointSize)) + if (aFontSize < nsStyleUtil::CalcFontPointSize(index, aBasePointSize, aScalingFactor)) break; return index; } diff --git a/layout/style/nsCSSStyleRule.cpp b/layout/style/nsCSSStyleRule.cpp index e2917cc62d4b..7eb2e08fd41f 100644 --- a/layout/style/nsCSSStyleRule.cpp +++ b/layout/style/nsCSSStyleRule.cpp @@ -589,20 +589,23 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a const nsFont& normal = aPresContext->GetDefaultFont(); const nsFont& normalFixed = aPresContext->GetDefaultFixedFont(); + PRInt32 scaler = aPresContext->GetFontScaler(); + float scaleFactor = nsStyleUtil::GetScalingFactor(scaler); + if ((NS_STYLE_FONT_SIZE_XXSMALL <= value) && (value <= NS_STYLE_FONT_SIZE_XXLARGE)) { - font->mFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normal.size); - font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normalFixed.size); + font->mFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normal.size, scaleFactor); + font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(value + 1, (PRInt32)normalFixed.size, scaleFactor); } else if (NS_STYLE_FONT_SIZE_LARGER == value) { - PRInt32 index = nsStyleUtil::FindNextLargerFontSize(parentFont->mFont.size, (PRInt32)normal.size); - font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size); - font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size); + PRInt32 index = nsStyleUtil::FindNextLargerFontSize(parentFont->mFont.size, (PRInt32)normal.size, scaleFactor); + font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size, scaleFactor); + font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size, scaleFactor); } else if (NS_STYLE_FONT_SIZE_SMALLER == value) { - PRInt32 index = nsStyleUtil::FindNextSmallerFontSize(parentFont->mFont.size, (PRInt32)normal.size); - font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size); - font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size); + PRInt32 index = nsStyleUtil::FindNextSmallerFontSize(parentFont->mFont.size, (PRInt32)normal.size, scaleFactor); + font->mFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normal.size, scaleFactor); + font->mFixedFont.size = nsStyleUtil::CalcFontPointSize(index, (PRInt32)normalFixed.size, scaleFactor); } // this does NOT explicitly set font size } diff --git a/layout/style/nsStyleUtil.cpp b/layout/style/nsStyleUtil.cpp index 7a09a40b7874..50e443f4b255 100644 --- a/layout/style/nsStyleUtil.cpp +++ b/layout/style/nsStyleUtil.cpp @@ -21,7 +21,41 @@ #include "nsIStyleContext.h" #include "nsStyleConsts.h" -nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize) +#define POSITIVE_SCALE_FACTOR 1.10 /* 10% */ +#define NEGATIVE_SCALE_FACTOR .90 /* 10% */ + +/* + * Return the scaling percentage given a font scaler + * Lifted from layutil.c + */ +float nsStyleUtil::GetScalingFactor(PRInt32 aScaler) +{ + double scale = 1.0; + double mult; + PRInt32 count; + + if(aScaler < 0) { + count = -aScaler; + mult = NEGATIVE_SCALE_FACTOR; + } + else { + count = aScaler; + mult = POSITIVE_SCALE_FACTOR; + } + + /* use the percentage scaling factor to the power of the pref */ + while(count--) { + scale *= mult; + } + + return scale; +} + +/* + * Lifted from winfe/cxdc.cpp + */ +nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize, + float aScalingFactor) { // lifted directly from Nav 5.0 code to replicate rounding errors double dFontSize; @@ -54,23 +88,28 @@ nscoord nsStyleUtil::CalcFontPointSize(PRInt32 aHTMLSize, PRInt32 aBasePointSize default: dFontSize = aBasePointSize; } + + dFontSize *= aScalingFactor; + return (nscoord)dFontSize; } -PRInt32 nsStyleUtil::FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize) +PRInt32 nsStyleUtil::FindNextSmallerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor) { PRInt32 index; for (index = 7; index > 1; index--) - if (aFontSize > nsStyleUtil::CalcFontPointSize(index, aBasePointSize)) + if (aFontSize > nsStyleUtil::CalcFontPointSize(index, aBasePointSize, aScalingFactor)) break; return index; } -PRInt32 nsStyleUtil::FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize) +PRInt32 nsStyleUtil::FindNextLargerFontSize(nscoord aFontSize, PRInt32 aBasePointSize, + float aScalingFactor) { PRInt32 index; for (index = 1; index < 7; index++) - if (aFontSize < nsStyleUtil::CalcFontPointSize(index, aBasePointSize)) + if (aFontSize < nsStyleUtil::CalcFontPointSize(index, aBasePointSize, aScalingFactor)) break; return index; }