Index: Source/core/css/SVGCSSComputedStyleDeclaration.cpp |
diff --git a/Source/core/css/SVGCSSComputedStyleDeclaration.cpp b/Source/core/css/SVGCSSComputedStyleDeclaration.cpp |
index 584b67705a6306991b5ef164f9746e50e19fab8f..4435910a19dc654d650f394e27255bc1165bdfc6 100644 |
--- a/Source/core/css/SVGCSSComputedStyleDeclaration.cpp |
+++ b/Source/core/css/SVGCSSComputedStyleDeclaration.cpp |
@@ -26,7 +26,6 @@ |
#include "core/css/CSSPrimitiveValueMappings.h" |
#include "core/dom/Document.h" |
#include "core/rendering/style/RenderStyle.h" |
-#include "core/svg/SVGPaint.h" |
namespace WebCore { |
@@ -83,12 +82,25 @@ static PassRefPtrWillBeRawPtr<CSSValue> paintOrderToCSSValueList(EPaintOrder pai |
return list.release(); |
} |
-PassRefPtrWillBeRawPtr<SVGPaint> CSSComputedStyleDeclaration::adjustSVGPaintForCurrentColor(PassRefPtrWillBeRawPtr<SVGPaint> newPaint, RenderStyle& style) const |
+static PassRefPtrWillBeRawPtr<CSSValue> adjustSVGPaintForCurrentColor(SVGPaintType paintType, const String& url, const Color& color, const Color& currentColor) |
{ |
- RefPtrWillBeRawPtr<SVGPaint> paint = newPaint; |
- if (paint->paintType() == SVGPaint::SVG_PAINTTYPE_CURRENTCOLOR || paint->paintType() == SVGPaint::SVG_PAINTTYPE_URI_CURRENTCOLOR) |
- paint->setColor(style.color()); |
- return paint.release(); |
+ if (paintType >= SVG_PAINTTYPE_URI_NONE) { |
+ RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createSpaceSeparated(); |
+ values->append(CSSPrimitiveValue::create(url, CSSPrimitiveValue::CSS_URI)); |
+ if (paintType == SVG_PAINTTYPE_URI_NONE) |
+ values->append(CSSPrimitiveValue::create(CSSValueNone)); |
+ else if (paintType == SVG_PAINTTYPE_URI_CURRENTCOLOR) |
+ values->append(CSSPrimitiveValue::createColor(currentColor.rgb())); |
+ else if (paintType == SVG_PAINTTYPE_URI_RGBCOLOR) |
+ values->append(CSSPrimitiveValue::createColor(color.rgb())); |
+ return values.release(); |
+ } |
+ if (paintType == SVG_PAINTTYPE_NONE) |
+ return CSSPrimitiveValue::create(CSSValueNone); |
+ if (paintType == SVG_PAINTTYPE_CURRENTCOLOR) |
+ return CSSPrimitiveValue::createColor(currentColor.rgb()); |
+ |
+ return CSSPrimitiveValue::createColor(color.rgb()); |
} |
static inline String serializeAsFragmentIdentifier(const AtomicString& resource) |
@@ -168,7 +180,7 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSComputedStyleDeclaration::getSVGPropertyCSSV |
case CSSPropertyStopColor: |
return currentColorOrValidColor(*style, svgStyle->stopColor()); |
case CSSPropertyFill: |
- return adjustSVGPaintForCurrentColor(SVGPaint::create(svgStyle->fillPaintType(), svgStyle->fillPaintUri(), svgStyle->fillPaintColor()), *style); |
+ return adjustSVGPaintForCurrentColor(svgStyle->fillPaintType(), svgStyle->fillPaintUri(), svgStyle->fillPaintColor(), style->color()); |
case CSSPropertyMarkerEnd: |
if (!svgStyle->markerEndResource().isEmpty()) |
return CSSPrimitiveValue::create(serializeAsFragmentIdentifier(svgStyle->markerEndResource()), CSSPrimitiveValue::CSS_URI); |
@@ -182,7 +194,7 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSComputedStyleDeclaration::getSVGPropertyCSSV |
return CSSPrimitiveValue::create(serializeAsFragmentIdentifier(svgStyle->markerStartResource()), CSSPrimitiveValue::CSS_URI); |
return CSSPrimitiveValue::createIdentifier(CSSValueNone); |
case CSSPropertyStroke: |
- return adjustSVGPaintForCurrentColor(SVGPaint::create(svgStyle->strokePaintType(), svgStyle->strokePaintUri(), svgStyle->strokePaintColor()), *style); |
+ return adjustSVGPaintForCurrentColor(svgStyle->strokePaintType(), svgStyle->strokePaintUri(), svgStyle->strokePaintColor(), style->color()); |
case CSSPropertyStrokeDasharray: |
return strokeDashArrayToCSSValueList(svgStyle->strokeDashArray()); |
case CSSPropertyStrokeDashoffset: |