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