Index: Source/core/svg/SVGPaint.cpp |
diff --git a/Source/core/svg/SVGPaint.cpp b/Source/core/svg/SVGPaint.cpp |
index 893c19c4d4675029c02030cf9473214ba4dddc8f..7eb67bda05a80de31037ebd405defa08caf59a1c 100644 |
--- a/Source/core/svg/SVGPaint.cpp |
+++ b/Source/core/svg/SVGPaint.cpp |
@@ -24,34 +24,13 @@ |
#include "bindings/v8/ExceptionMessages.h" |
#include "bindings/v8/ExceptionState.h" |
+#include "core/css/RGBColor.h" |
+#include "core/css/parser/BisonCSSParser.h" |
namespace WebCore { |
-static inline SVGColor::SVGColorType colorTypeForPaintType(const SVGPaint::SVGPaintType& paintType) |
-{ |
- switch (paintType) { |
- case SVGPaint::SVG_PAINTTYPE_NONE: |
- case SVGPaint::SVG_PAINTTYPE_UNKNOWN: |
- case SVGPaint::SVG_PAINTTYPE_URI: |
- case SVGPaint::SVG_PAINTTYPE_URI_NONE: |
- return SVGColor::SVG_COLORTYPE_UNKNOWN; |
- case SVGPaint::SVG_PAINTTYPE_URI_RGBCOLOR: |
- case SVGPaint::SVG_PAINTTYPE_RGBCOLOR: |
- return SVGColor::SVG_COLORTYPE_RGBCOLOR; |
- case SVGPaint::SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR: |
- case SVGPaint::SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR: |
- return SVGColor::SVG_COLORTYPE_RGBCOLOR_ICCCOLOR; |
- case SVGPaint::SVG_PAINTTYPE_URI_CURRENTCOLOR: |
- case SVGPaint::SVG_PAINTTYPE_CURRENTCOLOR: |
- return SVGColor::SVG_COLORTYPE_CURRENTCOLOR; |
- } |
- |
- ASSERT_NOT_REACHED(); |
- return SVGColor::SVG_COLORTYPE_UNKNOWN; |
-} |
- |
SVGPaint::SVGPaint(const SVGPaintType& paintType, const String& uri) |
- : SVGColor(SVGPaintClass, colorTypeForPaintType(paintType)) |
+ : CSSValue(SVGPaintClass) |
, m_paintType(paintType) |
, m_uri(uri) |
{ |
@@ -64,19 +43,18 @@ String SVGPaint::customCSSText() const |
return String(); |
case SVG_PAINTTYPE_RGBCOLOR: |
case SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR: |
+ return m_color.serializedAsCSSComponentValue(); |
case SVG_PAINTTYPE_CURRENTCOLOR: |
- return SVGColor::customCSSText(); |
+ return "currentColor"; |
case SVG_PAINTTYPE_NONE: |
return "none"; |
case SVG_PAINTTYPE_URI_NONE: |
return m_uri + " none"; |
case SVG_PAINTTYPE_URI_CURRENTCOLOR: |
+ return "url(" + m_uri + ") currentColor"; |
case SVG_PAINTTYPE_URI_RGBCOLOR: |
case SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR: { |
- String color = SVGColor::customCSSText(); |
- if (color.isEmpty()) |
- return m_uri; |
- return "url(" + m_uri + ") " + color; |
+ return "url(" + m_uri + ") " + m_color.serializedAsCSSComponentValue(); |
} |
case SVG_PAINTTYPE_URI: |
return "url(" + m_uri + ')'; |
@@ -87,8 +65,9 @@ String SVGPaint::customCSSText() const |
} |
SVGPaint::SVGPaint(const SVGPaint& cloneFrom) |
- : SVGColor(SVGPaintClass, cloneFrom) |
+ : CSSValue(SVGPaintClass, /*isCSSOMSafe*/ true) |
, m_paintType(cloneFrom.m_paintType) |
+ , m_color(cloneFrom.m_color) |
, m_uri(cloneFrom.m_uri) |
{ |
} |
@@ -100,7 +79,17 @@ PassRefPtrWillBeRawPtr<SVGPaint> SVGPaint::cloneForCSSOM() const |
bool SVGPaint::equals(const SVGPaint& other) const |
{ |
- return m_paintType == other.m_paintType && m_uri == other.m_uri && SVGColor::equals(other); |
+ return m_paintType == other.m_paintType && m_uri == other.m_uri && m_color == other.m_color; |
+} |
+ |
+StyleColor SVGPaint::colorFromRGBColorString(const String& colorString) |
+{ |
+ // FIXME: Rework css parser so it is more SVG aware. |
+ RGBA32 color; |
+ if (BisonCSSParser::parseColor(color, colorString.stripWhiteSpace())) |
+ return StyleColor(color); |
+ // FIXME: This branch catches the string currentColor, but we should error if we have an illegal color value. |
+ return StyleColor::currentColor(); |
} |
} |