Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Side by Side Diff: Source/core/svg/SVGMarkerElement.cpp

Issue 112003003: [SVG] SVGLength{,List} migration to new SVG property impl. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: revert aggressive svgAttributeChanged, add NeedsRebaseline Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/svg/SVGMarkerElement.h ('k') | Source/core/svg/SVGMaskElement.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde .org> 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde .org>
3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. 4 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 27 matching lines...) Expand all
38 PropertyIsReadWrite, 38 PropertyIsReadWrite,
39 SVGNames::orientAttr, 39 SVGNames::orientAttr,
40 orientTypeIdentifier(), 40 orientTypeIdentifier(),
41 &SVGMarkerElement::synchronizeOrien tType, 41 &SVGMarkerElement::synchronizeOrien tType,
42 &SVGMarkerElement::lookupOrCreateOr ientTypeWrapper); 42 &SVGMarkerElement::lookupOrCreateOr ientTypeWrapper);
43 } 43 }
44 return s_propertyInfo; 44 return s_propertyInfo;
45 } 45 }
46 46
47 // Animated property definitions 47 // Animated property definitions
48 DEFINE_ANIMATED_LENGTH(SVGMarkerElement, SVGNames::refXAttr, RefX, refX)
49 DEFINE_ANIMATED_LENGTH(SVGMarkerElement, SVGNames::refYAttr, RefY, refY)
50 DEFINE_ANIMATED_LENGTH(SVGMarkerElement, SVGNames::markerWidthAttr, MarkerWidth, markerWidth)
51 DEFINE_ANIMATED_LENGTH(SVGMarkerElement, SVGNames::markerHeightAttr, MarkerHeigh t, markerHeight)
52 DEFINE_ANIMATED_ENUMERATION(SVGMarkerElement, SVGNames::markerUnitsAttr, MarkerU nits, markerUnits, SVGMarkerUnitsType) 48 DEFINE_ANIMATED_ENUMERATION(SVGMarkerElement, SVGNames::markerUnitsAttr, MarkerU nits, markerUnits, SVGMarkerUnitsType)
53 DEFINE_ANIMATED_ANGLE_AND_ENUMERATION(SVGMarkerElement, SVGNames::orientAttr, or ientAngleIdentifier(), OrientAngle, orientAngle) 49 DEFINE_ANIMATED_ANGLE_AND_ENUMERATION(SVGMarkerElement, SVGNames::orientAttr, or ientAngleIdentifier(), OrientAngle, orientAngle)
54 DEFINE_ANIMATED_RECT(SVGMarkerElement, SVGNames::viewBoxAttr, ViewBox, viewBox) 50 DEFINE_ANIMATED_RECT(SVGMarkerElement, SVGNames::viewBoxAttr, ViewBox, viewBox)
55 DEFINE_ANIMATED_PRESERVEASPECTRATIO(SVGMarkerElement, SVGNames::preserveAspectRa tioAttr, PreserveAspectRatio, preserveAspectRatio) 51 DEFINE_ANIMATED_PRESERVEASPECTRATIO(SVGMarkerElement, SVGNames::preserveAspectRa tioAttr, PreserveAspectRatio, preserveAspectRatio)
56 52
57 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGMarkerElement) 53 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGMarkerElement)
58 REGISTER_LOCAL_ANIMATED_PROPERTY(refX)
59 REGISTER_LOCAL_ANIMATED_PROPERTY(refY)
60 REGISTER_LOCAL_ANIMATED_PROPERTY(markerWidth)
61 REGISTER_LOCAL_ANIMATED_PROPERTY(markerHeight)
62 REGISTER_LOCAL_ANIMATED_PROPERTY(markerUnits) 54 REGISTER_LOCAL_ANIMATED_PROPERTY(markerUnits)
63 REGISTER_LOCAL_ANIMATED_PROPERTY(orientAngle) 55 REGISTER_LOCAL_ANIMATED_PROPERTY(orientAngle)
64 REGISTER_LOCAL_ANIMATED_PROPERTY(orientType) 56 REGISTER_LOCAL_ANIMATED_PROPERTY(orientType)
65 REGISTER_LOCAL_ANIMATED_PROPERTY(viewBox) 57 REGISTER_LOCAL_ANIMATED_PROPERTY(viewBox)
66 REGISTER_LOCAL_ANIMATED_PROPERTY(preserveAspectRatio) 58 REGISTER_LOCAL_ANIMATED_PROPERTY(preserveAspectRatio)
67 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGElement) 59 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGElement)
68 END_REGISTER_ANIMATED_PROPERTIES 60 END_REGISTER_ANIMATED_PROPERTIES
69 61
70 inline SVGMarkerElement::SVGMarkerElement(Document& document) 62 inline SVGMarkerElement::SVGMarkerElement(Document& document)
71 : SVGElement(SVGNames::markerTag, document) 63 : SVGElement(SVGNames::markerTag, document)
64 , m_refX(SVGAnimatedLength::create(this, SVGNames::refXAttr, SVGLength::crea te(LengthModeWidth)))
65 , m_refY(SVGAnimatedLength::create(this, SVGNames::refXAttr, SVGLength::crea te(LengthModeWidth)))
66 , m_markerWidth(SVGAnimatedLength::create(this, SVGNames::markerWidthAttr, S VGLength::create(LengthModeWidth)))
67 , m_markerHeight(SVGAnimatedLength::create(this, SVGNames::markerHeightAttr, SVGLength::create(LengthModeHeight)))
72 , m_orientType(SVGMarkerOrientAngle) 68 , m_orientType(SVGMarkerOrientAngle)
73 , m_refX(LengthModeWidth)
74 , m_refY(LengthModeHeight)
75 , m_markerWidth(LengthModeWidth, "3")
76 , m_markerHeight(LengthModeHeight, "3")
77 , m_markerUnits(SVGMarkerUnitsStrokeWidth) 69 , m_markerUnits(SVGMarkerUnitsStrokeWidth)
78 { 70 {
71 ScriptWrappable::init(this);
72
79 // Spec: If the markerWidth/markerHeight attribute is not specified, the eff ect is as if a value of "3" were specified. 73 // Spec: If the markerWidth/markerHeight attribute is not specified, the eff ect is as if a value of "3" were specified.
80 ScriptWrappable::init(this); 74 m_markerWidth->setDefaultValueAsString("3");
75 m_markerHeight->setDefaultValueAsString("3");
76
77 addToPropertyMap(m_refX);
78 addToPropertyMap(m_refY);
79 addToPropertyMap(m_markerWidth);
80 addToPropertyMap(m_markerHeight);
81
81 registerAnimatedPropertiesForSVGMarkerElement(); 82 registerAnimatedPropertiesForSVGMarkerElement();
82 } 83 }
83 84
84 PassRefPtr<SVGMarkerElement> SVGMarkerElement::create(Document& document) 85 PassRefPtr<SVGMarkerElement> SVGMarkerElement::create(Document& document)
85 { 86 {
86 return adoptRef(new SVGMarkerElement(document)); 87 return adoptRef(new SVGMarkerElement(document));
87 } 88 }
88 89
89 const AtomicString& SVGMarkerElement::orientTypeIdentifier() 90 const AtomicString& SVGMarkerElement::orientTypeIdentifier()
90 { 91 {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 { 123 {
123 SVGParsingError parseError = NoError; 124 SVGParsingError parseError = NoError;
124 125
125 if (!isSupportedAttribute(name)) 126 if (!isSupportedAttribute(name))
126 SVGElement::parseAttribute(name, value); 127 SVGElement::parseAttribute(name, value);
127 else if (name == SVGNames::markerUnitsAttr) { 128 else if (name == SVGNames::markerUnitsAttr) {
128 SVGMarkerUnitsType propertyValue = SVGPropertyTraits<SVGMarkerUnitsType> ::fromString(value); 129 SVGMarkerUnitsType propertyValue = SVGPropertyTraits<SVGMarkerUnitsType> ::fromString(value);
129 if (propertyValue > 0) 130 if (propertyValue > 0)
130 setMarkerUnitsBaseValue(propertyValue); 131 setMarkerUnitsBaseValue(propertyValue);
131 } else if (name == SVGNames::refXAttr) 132 } else if (name == SVGNames::refXAttr)
132 setRefXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError )); 133 m_refX->setBaseValueAsString(value, AllowNegativeLengths, parseError);
133 else if (name == SVGNames::refYAttr) 134 else if (name == SVGNames::refYAttr)
134 setRefYBaseValue(SVGLength::construct(LengthModeHeight, value, parseErro r)); 135 m_refY->setBaseValueAsString(value, AllowNegativeLengths, parseError);
135 else if (name == SVGNames::markerWidthAttr) 136 else if (name == SVGNames::markerWidthAttr)
136 setMarkerWidthBaseValue(SVGLength::construct(LengthModeWidth, value, par seError)); 137 m_markerWidth->setBaseValueAsString(value, ForbidNegativeLengths, parseE rror);
137 else if (name == SVGNames::markerHeightAttr) 138 else if (name == SVGNames::markerHeightAttr)
138 setMarkerHeightBaseValue(SVGLength::construct(LengthModeHeight, value, p arseError)); 139 m_markerHeight->setBaseValueAsString(value, ForbidNegativeLengths, parse Error);
139 else if (name == SVGNames::orientAttr) { 140 else if (name == SVGNames::orientAttr) {
140 SVGAngle angle; 141 SVGAngle angle;
141 SVGMarkerOrientType orientType = SVGPropertyTraits<SVGMarkerOrientType>: :fromString(value, angle); 142 SVGMarkerOrientType orientType = SVGPropertyTraits<SVGMarkerOrientType>: :fromString(value, angle);
142 if (orientType > 0) 143 if (orientType > 0)
143 setOrientTypeBaseValue(orientType); 144 setOrientTypeBaseValue(orientType);
144 if (orientType == SVGMarkerOrientAngle) 145 if (orientType == SVGMarkerOrientAngle)
145 setOrientAngleBaseValue(angle); 146 setOrientAngleBaseValue(angle);
146 } else if (SVGFitToViewBox::parseAttribute(this, name, value)) { 147 } else if (SVGFitToViewBox::parseAttribute(this, name, value)) {
147 } else 148 } else
148 ASSERT_NOT_REACHED(); 149 ASSERT_NOT_REACHED();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 svgAttributeChanged(orientAnglePropertyInfo()->attributeName); 206 svgAttributeChanged(orientAnglePropertyInfo()->attributeName);
206 } 207 }
207 208
208 RenderObject* SVGMarkerElement::createRenderer(RenderStyle*) 209 RenderObject* SVGMarkerElement::createRenderer(RenderStyle*)
209 { 210 {
210 return new RenderSVGResourceMarker(this); 211 return new RenderSVGResourceMarker(this);
211 } 212 }
212 213
213 bool SVGMarkerElement::selfHasRelativeLengths() const 214 bool SVGMarkerElement::selfHasRelativeLengths() const
214 { 215 {
215 return refXCurrentValue().isRelative() 216 return m_refX->currentValue()->isRelative()
216 || refYCurrentValue().isRelative() 217 || m_refY->currentValue()->isRelative()
217 || markerWidthCurrentValue().isRelative() 218 || m_markerWidth->currentValue()->isRelative()
218 || markerHeightCurrentValue().isRelative(); 219 || m_markerHeight->currentValue()->isRelative();
219 } 220 }
220 221
221 void SVGMarkerElement::synchronizeOrientType(SVGElement* contextElement) 222 void SVGMarkerElement::synchronizeOrientType(SVGElement* contextElement)
222 { 223 {
223 ASSERT(contextElement); 224 ASSERT(contextElement);
224 SVGMarkerElement* ownerType = toSVGMarkerElement(contextElement); 225 SVGMarkerElement* ownerType = toSVGMarkerElement(contextElement);
225 if (!ownerType->m_orientType.shouldSynchronize) 226 if (!ownerType->m_orientType.shouldSynchronize)
226 return; 227 return;
227 228
228 // If orient is not auto, the previous call to synchronizeOrientAngle alread y set the orientAttr to the right angle. 229 // If orient is not auto, the previous call to synchronizeOrientAngle alread y set the orientAttr to the right angle.
(...skipping 12 matching lines...) Expand all
241 (ownerType, orientTypePropertyInfo(), ownerType->m_orientType.value); 242 (ownerType, orientTypePropertyInfo(), ownerType->m_orientType.value);
242 } 243 }
243 244
244 PassRefPtr<SVGAnimatedEnumerationPropertyTearOff<SVGMarkerOrientType> > SVGMarke rElement::orientType() 245 PassRefPtr<SVGAnimatedEnumerationPropertyTearOff<SVGMarkerOrientType> > SVGMarke rElement::orientType()
245 { 246 {
246 m_orientType.shouldSynchronize = true; 247 m_orientType.shouldSynchronize = true;
247 return static_pointer_cast<SVGAnimatedEnumerationPropertyTearOff<SVGMarkerOr ientType> >(lookupOrCreateOrientTypeWrapper(this)); 248 return static_pointer_cast<SVGAnimatedEnumerationPropertyTearOff<SVGMarkerOr ientType> >(lookupOrCreateOrientTypeWrapper(this));
248 } 249 }
249 250
250 } 251 }
OLDNEW
« no previous file with comments | « Source/core/svg/SVGMarkerElement.h ('k') | Source/core/svg/SVGMaskElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698