Implement percentage for CSS opacity keywords.
parent
c740d50026
commit
3da4381dae
|
@ -905,7 +905,7 @@ inDOMUtils::CssPropertySupportsType(const nsAString& aProperty, uint32_t aType,
|
|||
break;
|
||||
case TYPE_NUMBER:
|
||||
// Include integers under "number"?
|
||||
variant = VARIANT_NUMBER | VARIANT_INTEGER;
|
||||
variant = VARIANT_NUMBER | VARIANT_INTEGER | VARIANT_OPACITY;
|
||||
break;
|
||||
default:
|
||||
// Unknown type
|
||||
|
|
|
@ -7789,6 +7789,7 @@ CSSParserImpl::ParseNonNegativeVariant(nsCSSValue& aValue,
|
|||
VARIANT_NUMBER |
|
||||
VARIANT_LENGTH |
|
||||
VARIANT_PERCENT |
|
||||
VARIANT_OPACITY |
|
||||
VARIANT_INTEGER)) == 0,
|
||||
"need to update code below to handle additional variants");
|
||||
|
||||
|
@ -7829,6 +7830,7 @@ CSSParserImpl::ParseOneOrLargerVariant(nsCSSValue& aValue,
|
|||
// that we specifically handle.
|
||||
MOZ_ASSERT((aVariantMask & ~(VARIANT_ALL_NONNUMERIC |
|
||||
VARIANT_NUMBER |
|
||||
VARIANT_OPACITY |
|
||||
VARIANT_INTEGER)) == 0,
|
||||
"need to update code below to handle additional variants");
|
||||
|
||||
|
@ -7957,9 +7959,9 @@ CSSParserImpl::ParseVariant(nsCSSValue& aValue,
|
|||
}
|
||||
}
|
||||
}
|
||||
// Check VARIANT_NUMBER and VARIANT_INTEGER before VARIANT_LENGTH or
|
||||
// VARIANT_ZERO_ANGLE.
|
||||
if (((aVariantMask & VARIANT_NUMBER) != 0) &&
|
||||
// Check VARIANT_NUMBER, number tokens for VARIANT_OPACITY, and
|
||||
// VARIANT_INTEGER before VARIANT_LENGTH or VARIANT_ZERO_ANGLE.
|
||||
if (((aVariantMask & (VARIANT_NUMBER | VARIANT_OPACITY)) != 0) &&
|
||||
(eCSSToken_Number == tk->mType)) {
|
||||
aValue.SetFloatValue(tk->mNumber, eCSSUnit_Number);
|
||||
return CSSParseResult::Ok;
|
||||
|
@ -7969,6 +7971,7 @@ CSSParserImpl::ParseVariant(nsCSSValue& aValue,
|
|||
aValue.SetIntValue(tk->mInteger, eCSSUnit_Integer);
|
||||
return CSSParseResult::Ok;
|
||||
}
|
||||
|
||||
if (((aVariantMask & (VARIANT_LENGTH | VARIANT_ANGLE |
|
||||
VARIANT_FREQUENCY | VARIANT_TIME)) != 0 &&
|
||||
eCSSToken_Dimension == tk->mType) ||
|
||||
|
@ -7994,6 +7997,15 @@ CSSParserImpl::ParseVariant(nsCSSValue& aValue,
|
|||
aValue.SetPercentValue(tk->mNumber);
|
||||
return CSSParseResult::Ok;
|
||||
}
|
||||
// We need to store eCSSToken_Percentage in eCSSUnit_Number in order to
|
||||
// serialize opacity according to spec. All percentage tokens are stored
|
||||
// as floats, so no type conversion is needed to make this possible.
|
||||
// Percentage tokens have to be evaluated later than number tokens.
|
||||
if (((aVariantMask & VARIANT_OPACITY) != 0) &&
|
||||
(eCSSToken_Percentage == tk->mType)) {
|
||||
aValue.SetFloatValue(tk->mNumber, eCSSUnit_Number);
|
||||
return CSSParseResult::Ok;
|
||||
}
|
||||
if (mUnitlessLengthQuirk) { // NONSTANDARD: Nav interprets unitless numbers as px
|
||||
if (((aVariantMask & VARIANT_LENGTH) != 0) &&
|
||||
(eCSSToken_Number == tk->mType)) {
|
||||
|
|
|
@ -1703,7 +1703,7 @@ CSS_PROP_SVG(
|
|||
FillOpacity,
|
||||
CSS_PROPERTY_PARSE_VALUE,
|
||||
"",
|
||||
VARIANT_HN | VARIANT_OPENTYPE_SVG_KEYWORD,
|
||||
VARIANT_INHERIT | VARIANT_OPACITY | VARIANT_OPENTYPE_SVG_KEYWORD,
|
||||
kContextOpacityKTable,
|
||||
offsetof(nsStyleSVG, mFillOpacity),
|
||||
eStyleAnimType_float)
|
||||
|
@ -1841,7 +1841,7 @@ CSS_PROP_SVGRESET(
|
|||
FloodOpacity,
|
||||
CSS_PROPERTY_PARSE_VALUE,
|
||||
"",
|
||||
VARIANT_HN,
|
||||
VARIANT_INHERIT | VARIANT_OPACITY,
|
||||
nullptr,
|
||||
offsetof(nsStyleSVGReset, mFloodOpacity),
|
||||
eStyleAnimType_float)
|
||||
|
@ -3070,7 +3070,7 @@ CSS_PROP_EFFECTS(
|
|||
CSS_PROPERTY_CAN_ANIMATE_ON_COMPOSITOR |
|
||||
CSS_PROPERTY_CREATES_STACKING_CONTEXT,
|
||||
"",
|
||||
VARIANT_HN,
|
||||
VARIANT_INHERIT | VARIANT_OPACITY,
|
||||
nullptr,
|
||||
offsetof(nsStyleEffects, mOpacity),
|
||||
eStyleAnimType_float)
|
||||
|
@ -3761,7 +3761,7 @@ CSS_PROP_SVGRESET(
|
|||
StopOpacity,
|
||||
CSS_PROPERTY_PARSE_VALUE,
|
||||
"",
|
||||
VARIANT_HN,
|
||||
VARIANT_INHERIT | VARIANT_OPACITY,
|
||||
nullptr,
|
||||
offsetof(nsStyleSVGReset, mStopOpacity),
|
||||
eStyleAnimType_float)
|
||||
|
@ -3836,7 +3836,7 @@ CSS_PROP_SVG(
|
|||
StrokeOpacity,
|
||||
CSS_PROPERTY_PARSE_VALUE,
|
||||
"",
|
||||
VARIANT_HN | VARIANT_OPENTYPE_SVG_KEYWORD,
|
||||
VARIANT_INHERIT | VARIANT_OPACITY | VARIANT_OPENTYPE_SVG_KEYWORD,
|
||||
kContextOpacityKTable,
|
||||
offsetof(nsStyleSVG, mStrokeOpacity),
|
||||
eStyleAnimType_float)
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#define VARIANT_IDENTIFIER 0x002000 // D
|
||||
#define VARIANT_IDENTIFIER_NO_INHERIT 0x004000 // like above, but excluding
|
||||
// 'inherit' and 'initial'
|
||||
#define VARIANT_OPACITY 0x008000 // Take floats and percents as input, output float.
|
||||
#define VARIANT_AUTO 0x010000 // A
|
||||
#define VARIANT_INHERIT 0x020000 // H eCSSUnit_Initial, eCSSUnit_Inherit, eCSSUnit_Unset
|
||||
#define VARIANT_NONE 0x040000 // O
|
||||
|
|
|
@ -3540,7 +3540,7 @@ var gCSSProperties = {
|
|||
inherited: false,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "1", "17", "397.376", "3e1", "3e+1", "3e0", "3e+0", "3e-0" ],
|
||||
other_values: [ "0", "0.4", "0.0000", "-3", "3e-1" ],
|
||||
other_values: [ "0", "0.4", "0.0000", "-3", "3e-1" "-100%", "50%" ],
|
||||
invalid_values: [ "0px", "1px" ]
|
||||
},
|
||||
"-moz-orient": {
|
||||
|
@ -4272,8 +4272,8 @@ var gCSSProperties = {
|
|||
domProp: "fillOpacity",
|
||||
inherited: true,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "1", "2.8", "1.000", "context-fill-opacity", "context-stroke-opacity" ],
|
||||
other_values: [ "0", "0.3", "-7.3" ],
|
||||
initial_values: [ "1", "2.8", "1.000", "300%", "context-fill-opacity", "context-stroke-opacity" ],
|
||||
other_values: [ "0", "0.3", "-7.3", "-100%", "50%" ],
|
||||
invalid_values: []
|
||||
},
|
||||
"fill-rule": {
|
||||
|
@ -4305,8 +4305,8 @@ var gCSSProperties = {
|
|||
domProp: "floodOpacity",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "1", "2.8", "1.000" ],
|
||||
other_values: [ "0", "0.3", "-7.3" ],
|
||||
initial_values: [ "1", "2.8", "1.000", "300%" ],
|
||||
other_values: [ "0", "0.3", "-7.3", "-100%", "50%" ],
|
||||
invalid_values: []
|
||||
},
|
||||
"image-rendering": {
|
||||
|
@ -4380,8 +4380,8 @@ var gCSSProperties = {
|
|||
domProp: "stopOpacity",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "1", "2.8", "1.000" ],
|
||||
other_values: [ "0", "0.3", "-7.3" ],
|
||||
initial_values: [ "1", "2.8", "1.000", "300%" ],
|
||||
other_values: [ "0", "0.3", "-7.3", "-100%", "50%" ],
|
||||
invalid_values: []
|
||||
},
|
||||
"stroke": {
|
||||
|
@ -4436,8 +4436,8 @@ var gCSSProperties = {
|
|||
domProp: "strokeOpacity",
|
||||
inherited: true,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "1", "2.8", "1.000", "context-fill-opacity", "context-stroke-opacity" ],
|
||||
other_values: [ "0", "0.3", "-7.3" ],
|
||||
initial_values: [ "1", "2.8", "1.000", "300%", "context-fill-opacity", "context-stroke-opacity" ],
|
||||
other_values: [ "0", "0.3", "-7.3", "-100%", "50% ],
|
||||
invalid_values: []
|
||||
},
|
||||
"stroke-width": {
|
||||
|
|
Loading…
Reference in New Issue