Add support for -moz-text-size-adjust CSS property. (Bug 627842, patch 1) r=bzbarsky

This property is analogous to the -webkit-text-size-adjust property (and
*maybe* also the -ms-text-size-adjust property).  It allows pages to opt
out of text size adjustments performed on mobile devices by specifying
-moz-text-size-adjust: none.
This commit is contained in:
L. David Baron 2011-11-23 18:48:23 -08:00
parent cd93642b6e
commit 59c0a28be1
9 changed files with 58 additions and 1 deletions

View File

@ -51,7 +51,7 @@
* http://www.w3.org/TR/DOM-Level-2-Style * http://www.w3.org/TR/DOM-Level-2-Style
*/ */
[builtinclass, scriptable, uuid(519ae4fa-0fee-4aaa-bcb9-34b503236801)] [builtinclass, scriptable, uuid(0a6fc4c6-a62a-4f52-9ab6-3d398b958843)]
interface nsIDOMCSS2Properties : nsISupports interface nsIDOMCSS2Properties : nsISupports
{ {
attribute DOMString background; attribute DOMString background;
@ -764,4 +764,7 @@ interface nsIDOMCSS2Properties : nsISupports
attribute DOMString MozAnimation; attribute DOMString MozAnimation;
// raises(DOMException) on setting // raises(DOMException) on setting
attribute DOMString MozTextSizeAdjust;
// raises(DOMException) on setting
}; };

View File

@ -713,6 +713,10 @@ static inline mozilla::css::Side operator++(mozilla::css::Side& side, int) {
#define NS_STYLE_HYPHENS_MANUAL 1 #define NS_STYLE_HYPHENS_MANUAL 1
#define NS_STYLE_HYPHENS_AUTO 2 #define NS_STYLE_HYPHENS_AUTO 2
// See nsStyleText
#define NS_STYLE_TEXT_SIZE_ADJUST_NONE 0
#define NS_STYLE_TEXT_SIZE_ADJUST_AUTO 1
// See nsStyleText // See nsStyleText
#define NS_STYLE_LINE_HEIGHT_BLOCK_HEIGHT 0 #define NS_STYLE_LINE_HEIGHT_BLOCK_HEIGHT 0

View File

@ -2235,6 +2235,15 @@ CSS_PROP_TEXT(
nsnull, nsnull,
offsetof(nsStyleText, mTextShadow), offsetof(nsStyleText, mTextShadow),
eStyleAnimType_Shadow) eStyleAnimType_Shadow)
CSS_PROP_TEXT(
-moz-text-size-adjust,
text_size_adjust,
CSS_PROP_DOMPROP_PREFIXED(TextSizeAdjust),
CSS_PROPERTY_PARSE_VALUE,
VARIANT_AUTO | VARIANT_NONE | VARIANT_INHERIT,
nsnull,
CSS_PROP_NO_OFFSET,
eStyleAnimType_None)
CSS_PROP_TEXT( CSS_PROP_TEXT(
text-transform, text-transform,
text_transform, text_transform,

View File

@ -2643,6 +2643,24 @@ nsComputedDOMStyle::DoGetHyphens()
return val; return val;
} }
nsIDOMCSSValue*
nsComputedDOMStyle::DoGetTextSizeAdjust()
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
switch (GetStyleText()->mTextSizeAdjust) {
default:
NS_NOTREACHED("unexpected value");
// fall through
case NS_STYLE_TEXT_SIZE_ADJUST_AUTO:
val->SetIdent(eCSSKeyword_auto);
break;
case NS_STYLE_TEXT_SIZE_ADJUST_NONE:
val->SetIdent(eCSSKeyword_none);
break;
}
return val;
}
nsIDOMCSSValue* nsIDOMCSSValue*
nsComputedDOMStyle::DoGetPointerEvents() nsComputedDOMStyle::DoGetPointerEvents()
{ {
@ -4579,6 +4597,7 @@ nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength)
COMPUTED_STYLE_MAP_ENTRY(text_decoration_color, MozTextDecorationColor), COMPUTED_STYLE_MAP_ENTRY(text_decoration_color, MozTextDecorationColor),
COMPUTED_STYLE_MAP_ENTRY(text_decoration_line, MozTextDecorationLine), COMPUTED_STYLE_MAP_ENTRY(text_decoration_line, MozTextDecorationLine),
COMPUTED_STYLE_MAP_ENTRY(text_decoration_style, MozTextDecorationStyle), COMPUTED_STYLE_MAP_ENTRY(text_decoration_style, MozTextDecorationStyle),
COMPUTED_STYLE_MAP_ENTRY(text_size_adjust, TextSizeAdjust),
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_transform, MozTransform), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_transform, MozTransform),
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_transform_origin, MozTransformOrigin), COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_transform_origin, MozTransformOrigin),
COMPUTED_STYLE_MAP_ENTRY(transform_style, MozTransformStyle), COMPUTED_STYLE_MAP_ENTRY(transform_style, MozTransformStyle),

View File

@ -322,6 +322,7 @@ private:
nsIDOMCSSValue* DoGetWordWrap(); nsIDOMCSSValue* DoGetWordWrap();
nsIDOMCSSValue* DoGetHyphens(); nsIDOMCSSValue* DoGetHyphens();
nsIDOMCSSValue* DoGetMozTabSize(); nsIDOMCSSValue* DoGetMozTabSize();
nsIDOMCSSValue* DoGetTextSizeAdjust();
/* Visibility properties */ /* Visibility properties */
nsIDOMCSSValue* DoGetOpacity(); nsIDOMCSSValue* DoGetOpacity();

View File

@ -3398,6 +3398,15 @@ nsRuleNode::ComputeTextData(void* aStartStruct,
SETDSC_ENUMERATED, parentText->mHyphens, SETDSC_ENUMERATED, parentText->mHyphens,
NS_STYLE_HYPHENS_MANUAL, 0, 0, 0, 0); NS_STYLE_HYPHENS_MANUAL, 0, 0, 0, 0);
// text-size-adjust: none, auto, inherit, initial
SetDiscrete(*aRuleData->ValueForTextSizeAdjust(), text->mTextSizeAdjust,
canStoreInRuleTree, SETDSC_NONE | SETDSC_AUTO,
parentText->mTextSizeAdjust,
NS_STYLE_TEXT_SIZE_ADJUST_AUTO, // initial value
NS_STYLE_TEXT_SIZE_ADJUST_AUTO, // auto value
NS_STYLE_TEXT_SIZE_ADJUST_NONE, // none value
0, 0);
COMPUTE_END_INHERITED(Text, text) COMPUTE_END_INHERITED(Text, text)
} }

View File

@ -2800,6 +2800,7 @@ nsStyleText::nsStyleText(void)
mWhiteSpace = NS_STYLE_WHITESPACE_NORMAL; mWhiteSpace = NS_STYLE_WHITESPACE_NORMAL;
mWordWrap = NS_STYLE_WORDWRAP_NORMAL; mWordWrap = NS_STYLE_WORDWRAP_NORMAL;
mHyphens = NS_STYLE_HYPHENS_MANUAL; mHyphens = NS_STYLE_HYPHENS_MANUAL;
mTextSizeAdjust = NS_STYLE_TEXT_SIZE_ADJUST_AUTO;
mLetterSpacing.SetNormalValue(); mLetterSpacing.SetNormalValue();
mLineHeight.SetNormalValue(); mLineHeight.SetNormalValue();
@ -2816,6 +2817,7 @@ nsStyleText::nsStyleText(const nsStyleText& aSource)
mWhiteSpace(aSource.mWhiteSpace), mWhiteSpace(aSource.mWhiteSpace),
mWordWrap(aSource.mWordWrap), mWordWrap(aSource.mWordWrap),
mHyphens(aSource.mHyphens), mHyphens(aSource.mHyphens),
mTextSizeAdjust(aSource.mTextSizeAdjust),
mTabSize(aSource.mTabSize), mTabSize(aSource.mTabSize),
mLetterSpacing(aSource.mLetterSpacing), mLetterSpacing(aSource.mLetterSpacing),
mLineHeight(aSource.mLineHeight), mLineHeight(aSource.mLineHeight),
@ -2843,6 +2845,7 @@ nsChangeHint nsStyleText::CalcDifference(const nsStyleText& aOther) const
(mWhiteSpace != aOther.mWhiteSpace) || (mWhiteSpace != aOther.mWhiteSpace) ||
(mWordWrap != aOther.mWordWrap) || (mWordWrap != aOther.mWordWrap) ||
(mHyphens != aOther.mHyphens) || (mHyphens != aOther.mHyphens) ||
(mTextSizeAdjust != aOther.mTextSizeAdjust) ||
(mLetterSpacing != aOther.mLetterSpacing) || (mLetterSpacing != aOther.mLetterSpacing) ||
(mLineHeight != aOther.mLineHeight) || (mLineHeight != aOther.mLineHeight) ||
(mTextIndent != aOther.mTextIndent) || (mTextIndent != aOther.mTextIndent) ||

View File

@ -1280,6 +1280,7 @@ struct nsStyleText {
PRUint8 mWhiteSpace; // [inherited] see nsStyleConsts.h PRUint8 mWhiteSpace; // [inherited] see nsStyleConsts.h
PRUint8 mWordWrap; // [inherited] see nsStyleConsts.h PRUint8 mWordWrap; // [inherited] see nsStyleConsts.h
PRUint8 mHyphens; // [inherited] see nsStyleConsts.h PRUint8 mHyphens; // [inherited] see nsStyleConsts.h
PRUint8 mTextSizeAdjust; // [inherited] see nsStyleConsts.h
PRInt32 mTabSize; // [inherited] see nsStyleConsts.h PRInt32 mTabSize; // [inherited] see nsStyleConsts.h
nsStyleCoord mLetterSpacing; // [inherited] coord, normal nsStyleCoord mLetterSpacing; // [inherited] coord, normal

View File

@ -925,6 +925,14 @@ var gCSSProperties = {
other_values: [ "0", "3", "99", "12000" ], other_values: [ "0", "3", "99", "12000" ],
invalid_values: [ "-1", "-808", "3.0", "17.5" ] invalid_values: [ "-1", "-808", "3.0", "17.5" ]
}, },
"-moz-text-size-adjust": {
domProp: "MozTextSizeAdjust",
inherited: true,
type: CSS_TYPE_LONGHAND,
initial_values: [ "auto" ],
other_values: [ "none" ],
invalid_values: [ "-5%", "0", "100", "0%", "50%", "100%", "220.3%" ]
},
"-moz-transform": { "-moz-transform": {
domProp: "MozTransform", domProp: "MozTransform",
inherited: false, inherited: false,