diff --git a/mozilla/layout/style/nsCSSDeclaration.cpp b/mozilla/layout/style/nsCSSDeclaration.cpp index 71ad35bcbcb..edd965c2559 100644 --- a/mozilla/layout/style/nsCSSDeclaration.cpp +++ b/mozilla/layout/style/nsCSSDeclaration.cpp @@ -344,37 +344,9 @@ nsCSSDeclaration::AppendCSSValueToString(nsCSSProperty aProperty, } } else if (eCSSUnit_Integer == unit) { - switch (aProperty) { - case eCSSProperty_color: - case eCSSProperty_background_color: - case eCSSProperty_border_top_color: - case eCSSProperty_border_bottom_color: - case eCSSProperty_border_left_color_value: - case eCSSProperty_border_right_color_value: - case eCSSProperty_border_start_color_value: - case eCSSProperty_border_end_color_value: - case eCSSProperty_outline_color: { - // we can lookup the property in the ColorTable and then - // get a string mapping the name - nsCAutoString str; - if (nsCSSProps::GetColorName(aValue.GetIntValue(), str)){ - AppendASCIItoUTF16(str, aResult); - } else { - nsAutoString tmpStr; - tmpStr.AppendInt(aValue.GetIntValue(), 10); - aResult.Append(tmpStr); - } - } - break; - - default: - { - nsAutoString tmpStr; - tmpStr.AppendInt(aValue.GetIntValue(), 10); - aResult.Append(tmpStr); - } - break; - } + nsAutoString tmpStr; + tmpStr.AppendInt(aValue.GetIntValue(), 10); + aResult.Append(tmpStr); } else if (eCSSUnit_Enumerated == unit) { if (eCSSProperty_text_decoration == aProperty) { @@ -422,6 +394,16 @@ nsCSSDeclaration::AppendCSSValueToString(nsCSSProperty aProperty, AppendASCIItoUTF16(name, aResult); } } + else if (eCSSUnit_EnumColor == unit) { + // we can lookup the property in the ColorTable and then + // get a string mapping the name + nsCAutoString str; + if (nsCSSProps::GetColorName(aValue.GetIntValue(), str)){ + AppendASCIItoUTF16(str, aResult); + } else { + NS_NOTREACHED("bad color value"); + } + } else if (eCSSUnit_Color == unit) { nscolor color = aValue.GetColorValue(); if (color == NS_RGBA(0, 0, 0, 0)) { @@ -487,6 +469,7 @@ nsCSSDeclaration::AppendCSSValueToString(nsCSSProperty aProperty, case eCSSUnit_Counters: aResult.Append(PRUnichar(')')); break; case eCSSUnit_Integer: break; case eCSSUnit_Enumerated: break; + case eCSSUnit_EnumColor: break; case eCSSUnit_Color: break; case eCSSUnit_Percent: aResult.Append(PRUnichar('%')); break; case eCSSUnit_Number: break; diff --git a/mozilla/layout/style/nsCSSParser.cpp b/mozilla/layout/style/nsCSSParser.cpp index 7426e6f6560..e83ba78cb47 100644 --- a/mozilla/layout/style/nsCSSParser.cpp +++ b/mozilla/layout/style/nsCSSParser.cpp @@ -1124,7 +1124,7 @@ CSSParserImpl::ParseColorString(const nsSubstring& aBuffer, } else if (value.GetUnit() == eCSSUnit_Color) { (*aColor) = value.GetColorValue(); rv = NS_OK; - } else if (value.GetUnit() == eCSSUnit_Integer) { + } else if (value.GetUnit() == eCSSUnit_EnumColor) { PRInt32 intValue = value.GetIntValue(); if (intValue >= 0) { nsCOMPtr lfSvc = do_GetService("@mozilla.org/widget/lookandfeel;1"); @@ -2941,7 +2941,7 @@ PRBool CSSParserImpl::ParseColor(nsresult& aErrorCode, nsCSSValue& aValue) return PR_TRUE; } if (nsCSSProps::FindKeyword(keyword, nsCSSProps::kColorKTable, value)) { - aValue.SetIntValue(value, eCSSUnit_Integer); + aValue.SetIntValue(value, eCSSUnit_EnumColor); return PR_TRUE; } } @@ -6374,7 +6374,7 @@ PRBool CSSParserImpl::ParseTextShadow(nsresult& aErrorCode) } else { // Must be a color (as string or color value) NS_ASSERTION(unit == eCSSUnit_String || unit == eCSSUnit_Color || - unit == eCSSUnit_Integer, + unit == eCSSUnit_EnumColor, "Must be a color value (named color, numeric color, " "or system color)"); haveColor = PR_TRUE; diff --git a/mozilla/layout/style/nsCSSValue.cpp b/mozilla/layout/style/nsCSSValue.cpp index 7a448c7b486..25a522bf5ca 100644 --- a/mozilla/layout/style/nsCSSValue.cpp +++ b/mozilla/layout/style/nsCSSValue.cpp @@ -52,10 +52,10 @@ nsCSSValue::nsCSSValue(PRInt32 aValue, nsCSSUnit aUnit) : mUnit(aUnit) { - NS_ASSERTION((eCSSUnit_Integer == aUnit) || - (eCSSUnit_Enumerated == aUnit), "not an int value"); - if ((eCSSUnit_Integer == aUnit) || - (eCSSUnit_Enumerated == aUnit)) { + NS_ASSERTION(aUnit == eCSSUnit_Integer || aUnit == eCSSUnit_Enumerated || + aUnit == eCSSUnit_EnumColor, "not an int value"); + if (aUnit == eCSSUnit_Integer || aUnit == eCSSUnit_Enumerated || + aUnit == eCSSUnit_EnumColor) { mValue.mInt = aValue; } else { @@ -131,7 +131,7 @@ nsCSSValue::nsCSSValue(const nsCSSValue& aCopy) mValue.mString = aCopy.mValue.mString; mValue.mString->AddRef(); } - else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) { + else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_EnumColor)) { mValue.mInt = aCopy.mValue.mInt; } else if (eCSSUnit_Color == mUnit){ @@ -173,7 +173,7 @@ PRBool nsCSSValue::operator==(const nsCSSValue& aOther) const return (NS_strcmp(GetBufferValue(mValue.mString), GetBufferValue(aOther.mValue.mString)) == 0); } - else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_Enumerated)) { + else if ((eCSSUnit_Integer <= mUnit) && (mUnit <= eCSSUnit_EnumColor)) { return mValue.mInt == aOther.mValue.mInt; } else if (eCSSUnit_Color == mUnit) { @@ -255,11 +255,11 @@ void nsCSSValue::DoReset() void nsCSSValue::SetIntValue(PRInt32 aValue, nsCSSUnit aUnit) { - NS_ASSERTION((eCSSUnit_Integer == aUnit) || - (eCSSUnit_Enumerated == aUnit), "not an int value"); + NS_ASSERTION(aUnit == eCSSUnit_Integer || aUnit == eCSSUnit_Enumerated || + aUnit == eCSSUnit_EnumColor, "not an int value"); Reset(); - if ((eCSSUnit_Integer == aUnit) || - (eCSSUnit_Enumerated == aUnit)) { + if (aUnit == eCSSUnit_Integer || aUnit == eCSSUnit_Enumerated || + aUnit == eCSSUnit_EnumColor) { mUnit = aUnit; mValue.mInt = aValue; } diff --git a/mozilla/layout/style/nsCSSValue.h b/mozilla/layout/style/nsCSSValue.h index 796e8b5823a..720c150fcf6 100644 --- a/mozilla/layout/style/nsCSSValue.h +++ b/mozilla/layout/style/nsCSSValue.h @@ -73,7 +73,8 @@ enum nsCSSUnit { eCSSUnit_Image = 31, // (nsCSSValue::Image*) value eCSSUnit_Integer = 50, // (int) simple value eCSSUnit_Enumerated = 51, // (int) value has enumerated meaning - eCSSUnit_Color = 80, // (color) an RGBA value + eCSSUnit_EnumColor = 80, // (int) enumerated color (kColorKTable) + eCSSUnit_Color = 81, // (nscolor) an RGBA value eCSSUnit_Percent = 90, // (float) 1.0 == 100%) value is percentage of something eCSSUnit_Number = 91, // (float) value is numeric (usually multiplier, different behavior that percent) @@ -174,7 +175,8 @@ public: PRInt32 GetIntValue() const { - NS_ASSERTION(mUnit == eCSSUnit_Integer || mUnit == eCSSUnit_Enumerated, + NS_ASSERTION(mUnit == eCSSUnit_Integer || mUnit == eCSSUnit_Enumerated || + mUnit == eCSSUnit_EnumColor, "not an int value"); return mValue.mInt; } diff --git a/mozilla/layout/style/nsRuleNode.cpp b/mozilla/layout/style/nsRuleNode.cpp index e2c335ce2ed..a03d010643d 100644 --- a/mozilla/layout/style/nsRuleNode.cpp +++ b/mozilla/layout/style/nsRuleNode.cpp @@ -389,7 +389,7 @@ static PRBool SetColor(const nsCSSValue& aValue, const nscolor aParentColor, result = PR_TRUE; } } - else if (eCSSUnit_Integer == unit) { + else if (eCSSUnit_EnumColor == unit) { PRInt32 intValue = aValue.GetIntValue(); if (0 <= intValue) { nsILookAndFeel* look = aPresContext->LookAndFeel(); @@ -725,7 +725,7 @@ CheckColorCallback(const nsRuleDataStruct& aData, static_cast(aData); // currentColor values for color require inheritance - if (colorData.mColor.GetUnit() == eCSSUnit_Integer && + if (colorData.mColor.GetUnit() == eCSSUnit_EnumColor && colorData.mColor.GetIntValue() == NS_COLOR_CURRENTCOLOR) { NS_ASSERTION(aResult == nsRuleNode::eRuleFullReset, "we should already be counted as full-reset"); @@ -3381,7 +3381,7 @@ nsRuleNode::ComputeColorData(void* aStartStruct, // color: color, string, inherit // Special case for currentColor. According to CSS3, setting color to 'currentColor' // should behave as if it is inherited - if (colorData.mColor.GetUnit() == eCSSUnit_Integer && + if (colorData.mColor.GetUnit() == eCSSUnit_EnumColor && colorData.mColor.GetIntValue() == NS_COLOR_CURRENTCOLOR) { color->mColor = parentColor->mColor; inherited = PR_TRUE; diff --git a/mozilla/layout/style/test/property_database.js b/mozilla/layout/style/test/property_database.js index 3e81eccf9ca..f50530a85b9 100644 --- a/mozilla/layout/style/test/property_database.js +++ b/mozilla/layout/style/test/property_database.js @@ -108,7 +108,7 @@ var gCSSProperties = { inherited: false, type: CSS_TYPE_LONGHAND, initial_values: [ "none" ], - other_values: [ "red green", "red #fc3", "#ff00cc" ], + other_values: [ "red green", "red #fc3", "#ff00cc", "currentColor", "blue currentColor orange currentColor" ], invalid_values: [ "red none", "red inherit", "red, green" ] }, "-moz-border-end": { @@ -154,7 +154,7 @@ var gCSSProperties = { inherited: false, type: CSS_TYPE_LONGHAND, initial_values: [ "none" ], - other_values: [ "red green", "red #fc3", "#ff00cc" ], + other_values: [ "red green", "red #fc3", "#ff00cc", "currentColor", "blue currentColor orange currentColor" ], invalid_values: [ "red none", "red inherit", "red, green" ] }, "-moz-border-radius": { @@ -203,7 +203,7 @@ var gCSSProperties = { inherited: false, type: CSS_TYPE_LONGHAND, initial_values: [ "none" ], - other_values: [ "red green", "red #fc3", "#ff00cc" ], + other_values: [ "red green", "red #fc3", "#ff00cc", "currentColor", "blue currentColor orange currentColor" ], invalid_values: [ "red none", "red inherit", "red, green" ] }, "-moz-border-start": { @@ -249,7 +249,7 @@ var gCSSProperties = { inherited: false, type: CSS_TYPE_LONGHAND, initial_values: [ "none" ], - other_values: [ "red green", "red #fc3", "#ff00cc" ], + other_values: [ "red green", "red #fc3", "#ff00cc", "currentColor", "blue currentColor orange currentColor" ], invalid_values: [ "red none", "red inherit", "red, green" ] }, "-moz-box-align": { @@ -1495,7 +1495,7 @@ var gCSSProperties = { backend_only: true, type: CSS_TYPE_LONGHAND, initial_values: [ "none" ], - other_values: [ "2px 2px", "2px 2px 1px", "2px 2px green", "2px 2px 1px green", "green 2px 2px", "green 2px 2px 1px", "green 2px 2px, blue 1px 3px 4px" ], + other_values: [ "2px 2px", "2px 2px 1px", "2px 2px green", "2px 2px 1px green", "green 2px 2px", "green 2px 2px 1px", "green 2px 2px, blue 1px 3px 4px", "currentColor 3px 3px", "blue 2px 2px, currentColor 1px 2px" ], invalid_values: [ "3% 3%", "2px 2px 2px 2px", "2px 2px, none" ] }, "text-transform": { @@ -1651,8 +1651,9 @@ var gCSSProperties = { domProp: null, inherited: true, type: CSS_TYPE_LONGHAND, + prerequisites: { "color": "blue" }, initial_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)" ], - other_values: [ "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green', "none" ], + other_values: [ "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green', "none", "currentColor" ], invalid_values: [] }, "fill-opacity": { @@ -1683,8 +1684,9 @@ var gCSSProperties = { domProp: null, inherited: false, type: CSS_TYPE_LONGHAND, + prerequisites: { "color": "blue" }, initial_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)" ], - other_values: [ "green", "#fc3" ], + other_values: [ "green", "#fc3", "currentColor" ], invalid_values: [ "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green' ] }, "flood-opacity": { @@ -1699,8 +1701,9 @@ var gCSSProperties = { domProp: null, inherited: false, type: CSS_TYPE_LONGHAND, + prerequisites: { "color": "blue" }, initial_values: [ "white", "#fff", "#ffffff", "rgb(255,255,255)", "rgba(255,255,255,1.0)", "rgba(255,255,255,42.0)" ], - other_values: [ "green", "#fc3" ], + other_values: [ "green", "#fc3", "currentColor" ], invalid_values: [ "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green' ] }, "marker": { @@ -1764,8 +1767,9 @@ var gCSSProperties = { domProp: null, inherited: false, type: CSS_TYPE_LONGHAND, + prerequisites: { "color": "blue" }, initial_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)" ], - other_values: [ "green", "#fc3" ], + other_values: [ "green", "#fc3", "currentColor" ], invalid_values: [ "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green' ] }, "stop-opacity": { @@ -1781,7 +1785,7 @@ var gCSSProperties = { inherited: true, type: CSS_TYPE_LONGHAND, initial_values: [ "none" ], - other_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)", "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green' ], + other_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)", "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green', "currentColor" ], invalid_values: [] }, "stroke-dasharray": {