Bug 1248708 - Part1: parse and compute -webkit-text-stroke property. r=heycam

This commit is contained in:
Jeremy Chen 2016-04-23 01:40:39 +08:00
Родитель 51c6f6da30
Коммит 84a70f3910
15 изменённых файлов: 222 добавлений и 5 удалений

Просмотреть файл

@ -1311,6 +1311,28 @@ Declaration::GetValue(nsCSSProperty aProperty, nsAString& aValue,
// we don't have a shorthand that can express. Bail. // we don't have a shorthand that can express. Bail.
break; break;
} }
case eCSSProperty__webkit_text_stroke: {
const nsCSSValue* strokeWidth =
data->ValueFor(eCSSProperty__webkit_text_stroke_width);
const nsCSSValue* strokeColor =
data->ValueFor(eCSSProperty__webkit_text_stroke_color);
bool isDefaultColor = strokeColor->GetUnit() == eCSSUnit_EnumColor &&
strokeColor->GetIntValue() == NS_COLOR_CURRENTCOLOR;
if (strokeWidth->GetUnit() != eCSSUnit_Integer ||
strokeWidth->GetIntValue() != 0 || isDefaultColor) {
AppendValueToString(eCSSProperty__webkit_text_stroke_width,
aValue, aSerialization);
if (!isDefaultColor) {
aValue.Append(char16_t(' '));
}
}
if (!isDefaultColor) {
AppendValueToString(eCSSProperty__webkit_text_stroke_color,
aValue, aSerialization);
}
break;
}
case eCSSProperty_all: case eCSSProperty_all:
// If we got here, then we didn't have all "inherit" or "initial" or // If we got here, then we didn't have all "inherit" or "initial" or
// "unset" values for all of the longhand property components of 'all'. // "unset" values for all of the longhand property components of 'all'.

Просмотреть файл

@ -3635,6 +3635,14 @@ StyleAnimationValue::ExtractComputedValue(nsCSSProperty aProperty,
break; break;
} }
case eCSSProperty__webkit_text_stroke_color: {
auto styleText = static_cast<const nsStyleText*>(styleStruct);
SetCurrentOrActualColor(styleText->mWebkitTextStrokeColorForeground,
styleText->mWebkitTextStrokeColor,
aComputedValue);
break;
}
case eCSSProperty_border_spacing: { case eCSSProperty_border_spacing: {
const nsStyleTableBorder *styleTableBorder = const nsStyleTableBorder *styleTableBorder =
static_cast<const nsStyleTableBorder*>(styleStruct); static_cast<const nsStyleTableBorder*>(styleStruct);

Просмотреть файл

@ -1086,6 +1086,7 @@ protected:
bool ParseScrollSnapPoints(nsCSSValue& aValue, nsCSSProperty aPropID); bool ParseScrollSnapPoints(nsCSSValue& aValue, nsCSSProperty aPropID);
bool ParseScrollSnapDestination(nsCSSValue& aValue); bool ParseScrollSnapDestination(nsCSSValue& aValue);
bool ParseScrollSnapCoordinate(nsCSSValue& aValue); bool ParseScrollSnapCoordinate(nsCSSValue& aValue);
bool ParseWebkitTextStroke();
/** /**
* Parses a variable value from a custom property declaration. * Parses a variable value from a custom property declaration.
@ -10803,6 +10804,37 @@ CSSParserImpl::ParseWebkitGradient(nsCSSValue& aValue)
return true; return true;
} }
bool
CSSParserImpl::ParseWebkitTextStroke()
{
static const nsCSSProperty kWebkitTextStrokeIDs[] = {
eCSSProperty__webkit_text_stroke_width,
eCSSProperty__webkit_text_stroke_color
};
const size_t numProps = ArrayLength(kWebkitTextStrokeIDs);
nsCSSValue values[numProps];
int32_t found = ParseChoice(values, kWebkitTextStrokeIDs, numProps);
if (found < 1) {
return false;
}
if (!(found & 1)) { // Provide default -webkit-text-stroke-width
values[0].SetFloatValue(0, eCSSUnit_Pixel);
}
if (!(found & 2)) { // Provide default -webkit-text-stroke-color
values[1].SetIntValue(NS_COLOR_CURRENTCOLOR, eCSSUnit_EnumColor);
}
for (size_t index = 0; index < numProps; ++index) {
AppendValue(kWebkitTextStrokeIDs[index], values[index]);
}
return true;
}
int32_t int32_t
CSSParserImpl::ParseChoice(nsCSSValue aValues[], CSSParserImpl::ParseChoice(nsCSSValue aValues[],
const nsCSSProperty aPropIDs[], int32_t aNumIDs) const nsCSSProperty aPropIDs[], int32_t aNumIDs)
@ -11576,6 +11608,8 @@ CSSParserImpl::ParsePropertyByFunction(nsCSSProperty aPropID)
case eCSSProperty_mask_size: case eCSSProperty_mask_size:
return ParseImageLayerSize(eCSSProperty_mask_size); return ParseImageLayerSize(eCSSProperty_mask_size);
#endif #endif
case eCSSProperty__webkit_text_stroke:
return ParseWebkitTextStroke();
case eCSSProperty_all: case eCSSProperty_all:
return ParseAll(); return ParseAll();
default: default:

Просмотреть файл

@ -4051,6 +4051,38 @@ CSS_PROP_TEXT(
nullptr, nullptr,
CSS_PROP_NO_OFFSET, CSS_PROP_NO_OFFSET,
eStyleAnimType_None) eStyleAnimType_None)
CSS_PROP_SHORTHAND(
-webkit-text-stroke,
_webkit_text_stroke,
WebkitTextStroke,
CSS_PROPERTY_PARSE_FUNCTION,
"layout.css.prefixes.webkit")
CSS_PROP_TEXT(
-webkit-text-stroke-color,
_webkit_text_stroke_color,
WebkitTextStrokeColor,
CSS_PROPERTY_PARSE_VALUE |
CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
CSS_PROPERTY_APPLIES_TO_PLACEHOLDER |
CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
"layout.css.prefixes.webkit",
VARIANT_HC,
nullptr,
offsetof(nsStyleText, mWebkitTextStrokeColor),
eStyleAnimType_Custom)
CSS_PROP_TEXT(
-webkit-text-stroke-width,
_webkit_text_stroke_width,
WebkitTextStrokeWidth,
CSS_PROPERTY_PARSE_VALUE |
CSS_PROPERTY_VALUE_NONNEGATIVE |
CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
CSS_PROPERTY_APPLIES_TO_PLACEHOLDER,
"layout.css.prefixes.webkit",
VARIANT_HKL | VARIANT_CALC,
kBorderWidthKTable,
CSS_PROP_NO_OFFSET,
eStyleAnimType_None)
CSS_PROP_TEXT( CSS_PROP_TEXT(
text-transform, text-transform,
text_transform, text_transform,

Просмотреть файл

@ -2919,6 +2919,12 @@ static const nsCSSProperty gTextEmphasisSubpropTable[] = {
eCSSProperty_UNKNOWN eCSSProperty_UNKNOWN
}; };
static const nsCSSProperty gWebkitTextStrokeSubpropTable[] = {
eCSSProperty__webkit_text_stroke_width,
eCSSProperty__webkit_text_stroke_color,
eCSSProperty_UNKNOWN
};
static const nsCSSProperty gTransitionSubpropTable[] = { static const nsCSSProperty gTransitionSubpropTable[] = {
eCSSProperty_transition_property, eCSSProperty_transition_property,
eCSSProperty_transition_duration, eCSSProperty_transition_duration,

Просмотреть файл

@ -3927,6 +3927,22 @@ nsComputedDOMStyle::DoGetWebkitTextFillColor()
return val.forget(); return val.forget();
} }
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetWebkitTextStrokeColor()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
SetToRGBAColor(val, mStyleContext->GetTextStrokeColor());
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetWebkitTextStrokeWidth()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
val->SetAppUnits(StyleText()->mWebkitTextStrokeWidth.GetCoordValue());
return val.forget();
}
already_AddRefed<CSSValue> already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetPointerEvents() nsComputedDOMStyle::DoGetPointerEvents()
{ {

Просмотреть файл

@ -426,6 +426,8 @@ private:
already_AddRefed<CSSValue> DoGetTabSize(); already_AddRefed<CSSValue> DoGetTabSize();
already_AddRefed<CSSValue> DoGetTextSizeAdjust(); already_AddRefed<CSSValue> DoGetTextSizeAdjust();
already_AddRefed<CSSValue> DoGetWebkitTextFillColor(); already_AddRefed<CSSValue> DoGetWebkitTextFillColor();
already_AddRefed<CSSValue> DoGetWebkitTextStrokeColor();
already_AddRefed<CSSValue> DoGetWebkitTextStrokeWidth();
/* Visibility properties */ /* Visibility properties */
already_AddRefed<CSSValue> DoGetColorAdjust(); already_AddRefed<CSSValue> DoGetColorAdjust();
@ -721,4 +723,3 @@ NS_NewComputedDOMStyle(mozilla::dom::Element* aElement,
nsComputedDOMStyle::eAll); nsComputedDOMStyle::eAll);
#endif /* nsComputedDOMStyle_h__ */ #endif /* nsComputedDOMStyle_h__ */

Просмотреть файл

@ -303,6 +303,9 @@ COMPUTED_STYLE_PROP(_moz_window_shadow, WindowShadow)
\* ********************************** */ \* ********************************** */
COMPUTED_STYLE_PROP(_webkit_text_fill_color, WebkitTextFillColor) COMPUTED_STYLE_PROP(_webkit_text_fill_color, WebkitTextFillColor)
//// COMPUTED_STYLE_PROP(webkit-text-stroke, WebkitTextStroke)
COMPUTED_STYLE_PROP(_webkit_text_stroke_color, WebkitTextStrokeColor)
COMPUTED_STYLE_PROP(_webkit_text_stroke_width, WebkitTextStrokeWidth)
/* ***************************** *\ /* ***************************** *\
* Implementations of SVG styles * * Implementations of SVG styles *

Просмотреть файл

@ -4717,6 +4717,47 @@ nsRuleNode::ComputeTextData(void* aStartStruct,
text->mWebkitTextFillColor, conditions); text->mWebkitTextFillColor, conditions);
} }
// -webkit-text-stroke-color: color, string, inherit, initial
const nsCSSValue* webkitTextStrokeColorValue =
aRuleData->ValueForWebkitTextStrokeColor();
if (webkitTextStrokeColorValue->GetUnit() == eCSSUnit_Null) {
// We don't want to change anything in this case.
} else if (webkitTextStrokeColorValue->GetUnit() == eCSSUnit_Inherit ||
webkitTextStrokeColorValue->GetUnit() == eCSSUnit_Unset) {
conditions.SetUncacheable();
text->mWebkitTextStrokeColorForeground =
parentText->mWebkitTextStrokeColorForeground;
text->mWebkitTextStrokeColor = parentText->mWebkitTextStrokeColor;
} else if ((webkitTextStrokeColorValue->GetUnit() == eCSSUnit_EnumColor &&
webkitTextStrokeColorValue->GetIntValue() == NS_COLOR_CURRENTCOLOR) ||
webkitTextStrokeColorValue->GetUnit() == eCSSUnit_Initial) {
text->mWebkitTextStrokeColorForeground = true;
text->mWebkitTextStrokeColor = mPresContext->DefaultColor();
} else {
text->mWebkitTextStrokeColorForeground = false;
SetColor(*webkitTextStrokeColorValue, 0, mPresContext, aContext,
text->mWebkitTextStrokeColor, conditions);
}
// -webkit-text-stroke-width: length, inherit, initial, enum
const nsCSSValue*
webkitTextStrokeWidthValue = aRuleData->ValueForWebkitTextStrokeWidth();
if (webkitTextStrokeWidthValue->GetUnit() == eCSSUnit_Enumerated) {
NS_ASSERTION(webkitTextStrokeWidthValue->GetIntValue() == NS_STYLE_BORDER_WIDTH_THIN ||
webkitTextStrokeWidthValue->GetIntValue() == NS_STYLE_BORDER_WIDTH_MEDIUM ||
webkitTextStrokeWidthValue->GetIntValue() == NS_STYLE_BORDER_WIDTH_THICK,
"Unexpected enum value");
text->mWebkitTextStrokeWidth.SetCoordValue(
mPresContext->GetBorderWidthTable()[webkitTextStrokeWidthValue->GetIntValue()]);
} else {
SetCoord(*webkitTextStrokeWidthValue, text->mWebkitTextStrokeWidth,
parentText->mWebkitTextStrokeWidth,
SETCOORD_LH | SETCOORD_CALC_LENGTH_ONLY |
SETCOORD_CALC_CLAMP_NONNEGATIVE |
SETCOORD_INITIAL_ZERO | SETCOORD_UNSET_INHERIT,
aContext, mPresContext, conditions);
}
// -moz-control-character-visibility: enum, inherit, initial // -moz-control-character-visibility: enum, inherit, initial
SetDiscrete(*aRuleData->ValueForControlCharacterVisibility(), SetDiscrete(*aRuleData->ValueForControlCharacterVisibility(),
text->mControlCharacterVisibility, text->mControlCharacterVisibility,

Просмотреть файл

@ -1134,7 +1134,10 @@ nsStyleContext::CalcStyleDifference(nsStyleContext* aOther,
thisVisText->mTextEmphasisColor != otherVisText->mTextEmphasisColor || thisVisText->mTextEmphasisColor != otherVisText->mTextEmphasisColor ||
thisVisText->mWebkitTextFillColorForeground != thisVisText->mWebkitTextFillColorForeground !=
otherVisText->mWebkitTextFillColorForeground || otherVisText->mWebkitTextFillColorForeground ||
thisVisText->mWebkitTextFillColor != otherVisText->mWebkitTextFillColor) { thisVisText->mWebkitTextFillColor != otherVisText->mWebkitTextFillColor ||
thisVisText->mWebkitTextStrokeColorForeground !=
otherVisText->mWebkitTextStrokeColorForeground ||
thisVisText->mWebkitTextStrokeColor != otherVisText->mWebkitTextStrokeColor) {
change = true; change = true;
} }
} }
@ -1354,6 +1357,7 @@ nsStyleContext::GetVisitedDependentColor(nsCSSProperty aProperty)
aProperty == eCSSProperty_text_decoration_color || aProperty == eCSSProperty_text_decoration_color ||
aProperty == eCSSProperty_text_emphasis_color || aProperty == eCSSProperty_text_emphasis_color ||
aProperty == eCSSProperty__webkit_text_fill_color || aProperty == eCSSProperty__webkit_text_fill_color ||
aProperty == eCSSProperty__webkit_text_stroke_color ||
aProperty == eCSSProperty_fill || aProperty == eCSSProperty_fill ||
aProperty == eCSSProperty_stroke, aProperty == eCSSProperty_stroke,
"we need to add to nsStyleContext::CalcStyleDifference"); "we need to add to nsStyleContext::CalcStyleDifference");

Просмотреть файл

@ -188,6 +188,16 @@ public:
? StyleColor()->mColor : StyleText()->mWebkitTextFillColor; ? StyleColor()->mColor : StyleText()->mWebkitTextFillColor;
} }
/**
* Get the color that should be used to stroke text: either
* the current foreground color, or a separately-specified text stroke color.
*/
nscolor GetTextStrokeColor() {
const nsStyleText* textStyle = StyleText();
return textStyle->mWebkitTextStrokeColorForeground
? StyleColor()->mColor : textStyle->mWebkitTextStrokeColor;
}
// Does this style context or any of its ancestors have text // Does this style context or any of its ancestors have text
// decoration lines? // decoration lines?
// Differs from nsStyleTextReset::HasTextDecorationLines, which tests // Differs from nsStyleTextReset::HasTextDecorationLines, which tests

Просмотреть файл

@ -3573,6 +3573,7 @@ nsStyleText::nsStyleText(StyleStructContext aContext)
mTextAlignLastTrue = false; mTextAlignLastTrue = false;
mTextEmphasisColorForeground = true; mTextEmphasisColorForeground = true;
mWebkitTextFillColorForeground = true; mWebkitTextFillColorForeground = true;
mWebkitTextStrokeColorForeground = true;
mTextTransform = NS_STYLE_TEXT_TRANSFORM_NONE; mTextTransform = NS_STYLE_TEXT_TRANSFORM_NONE;
mWhiteSpace = NS_STYLE_WHITESPACE_NORMAL; mWhiteSpace = NS_STYLE_WHITESPACE_NORMAL;
mWordBreak = NS_STYLE_WORDBREAK_NORMAL; mWordBreak = NS_STYLE_WORDBREAK_NORMAL;
@ -3591,12 +3592,14 @@ nsStyleText::nsStyleText(StyleStructContext aContext)
NS_STYLE_TEXT_EMPHASIS_POSITION_DEFAULT; NS_STYLE_TEXT_EMPHASIS_POSITION_DEFAULT;
mTextEmphasisColor = aContext.DefaultColor(); mTextEmphasisColor = aContext.DefaultColor();
mWebkitTextFillColor = aContext.DefaultColor(); mWebkitTextFillColor = aContext.DefaultColor();
mWebkitTextStrokeColor = aContext.DefaultColor();
mControlCharacterVisibility = nsCSSParser::ControlCharVisibilityDefault(); mControlCharacterVisibility = nsCSSParser::ControlCharVisibilityDefault();
mWordSpacing.SetCoordValue(0); mWordSpacing.SetCoordValue(0);
mLetterSpacing.SetNormalValue(); mLetterSpacing.SetNormalValue();
mLineHeight.SetNormalValue(); mLineHeight.SetNormalValue();
mTextIndent.SetCoordValue(0); mTextIndent.SetCoordValue(0);
mWebkitTextStrokeWidth.SetCoordValue(0);
mTextShadow = nullptr; mTextShadow = nullptr;
mTabSize = NS_STYLE_TABSIZE_INITIAL; mTabSize = NS_STYLE_TABSIZE_INITIAL;
@ -3609,6 +3612,7 @@ nsStyleText::nsStyleText(const nsStyleText& aSource)
mTextAlignLastTrue(false), mTextAlignLastTrue(false),
mTextEmphasisColorForeground(aSource.mTextEmphasisColorForeground), mTextEmphasisColorForeground(aSource.mTextEmphasisColorForeground),
mWebkitTextFillColorForeground(aSource.mWebkitTextFillColorForeground), mWebkitTextFillColorForeground(aSource.mWebkitTextFillColorForeground),
mWebkitTextStrokeColorForeground(aSource.mWebkitTextStrokeColorForeground),
mTextTransform(aSource.mTextTransform), mTextTransform(aSource.mTextTransform),
mWhiteSpace(aSource.mWhiteSpace), mWhiteSpace(aSource.mWhiteSpace),
mWordBreak(aSource.mWordBreak), mWordBreak(aSource.mWordBreak),
@ -3625,10 +3629,12 @@ nsStyleText::nsStyleText(const nsStyleText& aSource)
mTabSize(aSource.mTabSize), mTabSize(aSource.mTabSize),
mTextEmphasisColor(aSource.mTextEmphasisColor), mTextEmphasisColor(aSource.mTextEmphasisColor),
mWebkitTextFillColor(aSource.mWebkitTextFillColor), mWebkitTextFillColor(aSource.mWebkitTextFillColor),
mWebkitTextStrokeColor(aSource.mWebkitTextStrokeColor),
mWordSpacing(aSource.mWordSpacing), mWordSpacing(aSource.mWordSpacing),
mLetterSpacing(aSource.mLetterSpacing), mLetterSpacing(aSource.mLetterSpacing),
mLineHeight(aSource.mLineHeight), mLineHeight(aSource.mLineHeight),
mTextIndent(aSource.mTextIndent), mTextIndent(aSource.mTextIndent),
mWebkitTextStrokeWidth(aSource.mWebkitTextStrokeWidth),
mTextShadow(aSource.mTextShadow), mTextShadow(aSource.mTextShadow),
mTextEmphasisStyleString(aSource.mTextEmphasisStyleString) mTextEmphasisStyleString(aSource.mTextEmphasisStyleString)
{ {
@ -3692,7 +3698,8 @@ nsChangeHint nsStyleText::CalcDifference(const nsStyleText& aOther) const
if (!AreShadowArraysEqual(mTextShadow, aOther.mTextShadow) || if (!AreShadowArraysEqual(mTextShadow, aOther.mTextShadow) ||
mTextEmphasisStyle != aOther.mTextEmphasisStyle || mTextEmphasisStyle != aOther.mTextEmphasisStyle ||
mTextEmphasisStyleString != aOther.mTextEmphasisStyleString) { mTextEmphasisStyleString != aOther.mTextEmphasisStyleString ||
mWebkitTextStrokeWidth != aOther.mWebkitTextStrokeWidth) {
hint |= nsChangeHint_UpdateSubtreeOverflow | hint |= nsChangeHint_UpdateSubtreeOverflow |
nsChangeHint_SchedulePaint | nsChangeHint_SchedulePaint |
nsChangeHint_RepaintFrame; nsChangeHint_RepaintFrame;
@ -3709,7 +3716,9 @@ nsChangeHint nsStyleText::CalcDifference(const nsStyleText& aOther) const
if (mTextEmphasisColorForeground != aOther.mTextEmphasisColorForeground || if (mTextEmphasisColorForeground != aOther.mTextEmphasisColorForeground ||
mTextEmphasisColor != aOther.mTextEmphasisColor || mTextEmphasisColor != aOther.mTextEmphasisColor ||
mWebkitTextFillColorForeground != aOther.mWebkitTextFillColorForeground || mWebkitTextFillColorForeground != aOther.mWebkitTextFillColorForeground ||
mWebkitTextFillColor != aOther.mWebkitTextFillColor) { mWebkitTextFillColor != aOther.mWebkitTextFillColor ||
mWebkitTextStrokeColorForeground != aOther.mWebkitTextStrokeColorForeground ||
mWebkitTextStrokeColor != aOther.mWebkitTextStrokeColor) {
NS_UpdateHint(hint, nsChangeHint_SchedulePaint); NS_UpdateHint(hint, nsChangeHint_SchedulePaint);
NS_UpdateHint(hint, nsChangeHint_RepaintFrame); NS_UpdateHint(hint, nsChangeHint_RepaintFrame);
} }

Просмотреть файл

@ -2022,6 +2022,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleText
bool mTextAlignLastTrue : 1; // [inherited] see nsStyleConsts.h bool mTextAlignLastTrue : 1; // [inherited] see nsStyleConsts.h
bool mTextEmphasisColorForeground : 1;// [inherited] whether text-emphasis-color is currentColor bool mTextEmphasisColorForeground : 1;// [inherited] whether text-emphasis-color is currentColor
bool mWebkitTextFillColorForeground : 1; // [inherited] whether -webkit-text-fill-color is currentColor bool mWebkitTextFillColorForeground : 1; // [inherited] whether -webkit-text-fill-color is currentColor
bool mWebkitTextStrokeColorForeground : 1; // [inherited] whether -webkit-text-stroke-color is currentColor
uint8_t mTextTransform; // [inherited] see nsStyleConsts.h uint8_t mTextTransform; // [inherited] see nsStyleConsts.h
uint8_t mWhiteSpace; // [inherited] see nsStyleConsts.h uint8_t mWhiteSpace; // [inherited] see nsStyleConsts.h
uint8_t mWordBreak; // [inherited] see nsStyleConsts.h uint8_t mWordBreak; // [inherited] see nsStyleConsts.h
@ -2038,11 +2039,13 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleText
int32_t mTabSize; // [inherited] see nsStyleConsts.h int32_t mTabSize; // [inherited] see nsStyleConsts.h
nscolor mTextEmphasisColor; // [inherited] nscolor mTextEmphasisColor; // [inherited]
nscolor mWebkitTextFillColor; // [inherited] nscolor mWebkitTextFillColor; // [inherited]
nscolor mWebkitTextStrokeColor; // [inherited]
nsStyleCoord mWordSpacing; // [inherited] coord, percent, calc nsStyleCoord mWordSpacing; // [inherited] coord, percent, calc
nsStyleCoord mLetterSpacing; // [inherited] coord, normal nsStyleCoord mLetterSpacing; // [inherited] coord, normal
nsStyleCoord mLineHeight; // [inherited] coord, factor, normal nsStyleCoord mLineHeight; // [inherited] coord, factor, normal
nsStyleCoord mTextIndent; // [inherited] coord, percent, calc nsStyleCoord mTextIndent; // [inherited] coord, percent, calc
nsStyleCoord mWebkitTextStrokeWidth; // [inherited] coord
RefPtr<nsCSSShadowArray> mTextShadow; // [inherited] nullptr in case of a zero-length RefPtr<nsCSSShadowArray> mTextShadow; // [inherited] nullptr in case of a zero-length

Просмотреть файл

@ -7040,6 +7040,33 @@ if (IsCSSPropertyPrefEnabled("layout.css.prefixes.webkit")) {
other_values: [ "red", "rgba(255,255,255,0.5)", "transparent" ], other_values: [ "red", "rgba(255,255,255,0.5)", "transparent" ],
invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000", "000000", "ff00ff", "rgb(255,xxx,255)" ] invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000", "000000", "ff00ff", "rgb(255,xxx,255)" ]
}; };
gCSSProperties["-webkit-text-stroke"] = {
domProp: "webkitTextStroke",
inherited: true,
type: CSS_TYPE_TRUE_SHORTHAND,
prerequisites: { "color": "black" },
subproperties: [ "-webkit-text-stroke-width", "-webkit-text-stroke-color" ],
initial_values: [ "0 currentColor", "currentColor 0px", "0", "currentColor", "0px black" ],
other_values: [ "thin black", "#f00 medium", "thick rgba(0,0,255,0.5)", "calc(4px - 8px) green", "2px", "green 0", "currentColor 4em", "currentColor calc(5px - 1px)" ],
invalid_values: [ "-3px black", "calc(50%+ 2px) #000", "30% #f00" ]
};
gCSSProperties["-webkit-text-stroke-color"] = {
domProp: "webkitTextStrokeColor",
inherited: true,
type: CSS_TYPE_LONGHAND,
prerequisites: { "color": "black" },
initial_values: [ "currentColor", "black", "#000", "#000000", "rgb(0,0,0)" ],
other_values: [ "red", "rgba(255,255,255,0.5)", "transparent" ],
invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000", "000000", "ff00ff", "rgb(255,xxx,255)" ]
};
gCSSProperties["-webkit-text-stroke-width"] = {
domProp: "webkitTextStrokeWidth",
inherited: true,
type: CSS_TYPE_LONGHAND,
initial_values: [ "0", "0px", "0em", "0ex", "calc(0pt)", "calc(4px - 8px)" ],
other_values: [ "thin", "medium", "thick", "17px", "0.2em", "calc(3*25px + 5em)", "calc(5px - 1px)" ],
invalid_values: [ "5%", "1px calc(nonsense)", "1px red", "-0.1px", "-3px", "30%" ]
},
gCSSProperties["-webkit-text-size-adjust"] = { gCSSProperties["-webkit-text-size-adjust"] = {
domProp: "webkitTextSizeAdjust", domProp: "webkitTextSizeAdjust",
inherited: true, inherited: true,

Просмотреть файл

@ -272,7 +272,8 @@ var supported_properties = {
test_length_clamped, test_percent_clamped ], test_length_clamped, test_percent_clamped ],
"word-spacing": [ test_length_transition, test_length_unclamped ], "word-spacing": [ test_length_transition, test_length_unclamped ],
"z-index": [ test_integer_transition, test_pos_integer_or_auto_transition ], "z-index": [ test_integer_transition, test_pos_integer_or_auto_transition ],
"-webkit-text-fill-color": [ test_color_transition ] "-webkit-text-fill-color": [ test_color_transition ],
"-webkit-text-stroke-color": [ test_color_transition ]
}; };
if (SupportsMaskShorthand()) { if (SupportsMaskShorthand()) {