summaryrefslogtreecommitdiffstats
path: root/WebCore/svg/SVGGradientElement.cpp
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2008-12-17 18:05:15 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2008-12-17 18:05:15 -0800
commit1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353 (patch)
tree4457a7306ea5acb43fe05bfe0973b1f7faf97ba2 /WebCore/svg/SVGGradientElement.cpp
parent9364f22aed35e1a1e9d07c121510f80be3ab0502 (diff)
downloadexternal_webkit-1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353.zip
external_webkit-1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353.tar.gz
external_webkit-1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353.tar.bz2
Code drop from //branches/cupcake/...@124589
Diffstat (limited to 'WebCore/svg/SVGGradientElement.cpp')
-rw-r--r--WebCore/svg/SVGGradientElement.cpp37
1 files changed, 15 insertions, 22 deletions
diff --git a/WebCore/svg/SVGGradientElement.cpp b/WebCore/svg/SVGGradientElement.cpp
index 88c2bd9..e4e3213 100644
--- a/WebCore/svg/SVGGradientElement.cpp
+++ b/WebCore/svg/SVGGradientElement.cpp
@@ -38,13 +38,15 @@
namespace WebCore {
+char SVGGradientElementIdentifier[] = "SVGGradientElement";
+
SVGGradientElement::SVGGradientElement(const QualifiedName& tagName, Document* doc)
: SVGStyledElement(tagName, doc)
, SVGURIReference()
, SVGExternalResourcesRequired()
- , m_spreadMethod(0)
- , m_gradientUnits(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
- , m_gradientTransform(new SVGTransformList(SVGNames::gradientTransformAttr))
+ , m_spreadMethod(this, SVGNames::spreadMethodAttr)
+ , m_gradientUnits(this, SVGNames::gradientUnitsAttr, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
+ , m_gradientTransform(this, SVGNames::gradientTransformAttr, SVGTransformList::create(SVGNames::gradientTransformAttr))
{
}
@@ -52,10 +54,6 @@ SVGGradientElement::~SVGGradientElement()
{
}
-ANIMATED_PROPERTY_DEFINITIONS(SVGGradientElement, int, Enumeration, enumeration, GradientUnits, gradientUnits, SVGNames::gradientUnitsAttr, m_gradientUnits)
-ANIMATED_PROPERTY_DEFINITIONS(SVGGradientElement, SVGTransformList*, TransformList, transformList, GradientTransform, gradientTransform, SVGNames::gradientTransformAttr, m_gradientTransform.get())
-ANIMATED_PROPERTY_DEFINITIONS(SVGGradientElement, int, Enumeration, enumeration, SpreadMethod, spreadMethod, SVGNames::spreadMethodAttr, m_spreadMethod)
-
void SVGGradientElement::parseMappedAttribute(MappedAttribute* attr)
{
if (attr->name() == SVGNames::gradientUnitsAttr) {
@@ -71,11 +69,11 @@ void SVGGradientElement::parseMappedAttribute(MappedAttribute* attr)
}
} else if (attr->name() == SVGNames::spreadMethodAttr) {
if (attr->value() == "reflect")
- setSpreadMethodBaseValue(SVG_SPREADMETHOD_REFLECT);
+ setSpreadMethodBaseValue(SpreadMethodReflect);
else if (attr->value() == "repeat")
- setSpreadMethodBaseValue(SVG_SPREADMETHOD_REPEAT);
+ setSpreadMethodBaseValue(SpreadMethodRepeat);
else if (attr->value() == "pad")
- setSpreadMethodBaseValue(SVG_SPREADMETHOD_PAD);
+ setSpreadMethodBaseValue(SpreadMethodPad);
} else {
if (SVGURIReference::parseMappedAttribute(attr))
return;
@@ -102,9 +100,9 @@ void SVGGradientElement::svgAttributeChanged(const QualifiedName& attrName)
m_resource->invalidate();
}
-void SVGGradientElement::childrenChanged(bool changedByParser)
+void SVGGradientElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
- SVGStyledElement::childrenChanged(changedByParser);
+ SVGStyledElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
if (m_resource)
m_resource->invalidate();
@@ -119,9 +117,9 @@ SVGResource* SVGGradientElement::canvasResource()
{
if (!m_resource) {
if (gradientType() == LinearGradientPaintServer)
- m_resource = new SVGPaintServerLinearGradient(this);
+ m_resource = SVGPaintServerLinearGradient::create(this);
else
- m_resource = new SVGPaintServerRadialGradient(this);
+ m_resource = SVGPaintServerRadialGradient::create(this);
}
return m_resource.get();
@@ -130,7 +128,7 @@ SVGResource* SVGGradientElement::canvasResource()
Vector<SVGGradientStop> SVGGradientElement::buildStops() const
{
Vector<SVGGradientStop> stops;
- RenderStyle* gradientStyle = 0;
+ RefPtr<RenderStyle> gradientStyle;
for (Node* n = firstChild(); n; n = n->nextSibling()) {
SVGElement* element = n->isSVGElement() ? static_cast<SVGElement*>(n) : 0;
@@ -151,23 +149,18 @@ Vector<SVGGradientStop> SVGGradientElement::buildStops() const
// set display="none" - ie. <g display="none"><linearGradient><stop>..
// Unfortunately we have to manually rebuild the stop style. See pservers-grad-19-b.svg
if (!gradientStyle)
- gradientStyle = const_cast<SVGGradientElement*>(this)->styleForRenderer(parent()->renderer());
+ gradientStyle = const_cast<SVGGradientElement*>(this)->styleForRenderer();
- RenderStyle* stopStyle = stop->resolveStyle(gradientStyle);
+ RefPtr<RenderStyle> stopStyle = stop->resolveStyle(gradientStyle.get());
color = stopStyle->svgStyle()->stopColor();
opacity = stopStyle->svgStyle()->stopOpacity();
-
- stopStyle->deref(document()->renderArena());
}
stops.append(makeGradientStop(stopOffset, makeRGBA(color.red(), color.green(), color.blue(), int(opacity * 255.))));
}
}
- if (gradientStyle)
- gradientStyle->deref(document()->renderArena());
-
return stops;
}