/src/mozilla-central/dom/svg/nsSVGElement.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | | /* vim: set ts=8 sts=2 et sw=2 tw=80: */ |
3 | | /* This Source Code Form is subject to the terms of the Mozilla Public |
4 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
5 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
6 | | |
7 | | #ifndef __NS_SVGELEMENT_H__ |
8 | | #define __NS_SVGELEMENT_H__ |
9 | | |
10 | | /* |
11 | | nsSVGElement is the base class for all SVG content elements. |
12 | | It implements all the common DOM interfaces and handles attributes. |
13 | | */ |
14 | | |
15 | | #include "mozilla/Attributes.h" |
16 | | #include "nsAutoPtr.h" |
17 | | #include "nsChangeHint.h" |
18 | | #include "nsCOMPtr.h" |
19 | | #include "nsCycleCollectionParticipant.h" |
20 | | #include "nsError.h" |
21 | | #include "mozilla/dom/DOMRect.h" |
22 | | #include "mozilla/dom/Element.h" |
23 | | #include "mozilla/gfx/MatrixFwd.h" |
24 | | #include "nsISupportsImpl.h" |
25 | | #include "nsStyledElement.h" |
26 | | #include "nsSVGClass.h" |
27 | | #include "SVGContentUtils.h" |
28 | | #include "gfxMatrix.h" |
29 | | |
30 | | class nsSVGAngle; |
31 | | class nsSVGBoolean; |
32 | | class nsSVGEnum; |
33 | | class nsSVGInteger; |
34 | | class nsSVGIntegerPair; |
35 | | class nsSVGLength2; |
36 | | class nsSVGNumber2; |
37 | | class nsSVGNumberPair; |
38 | | class nsSVGString; |
39 | | class nsSVGViewBox; |
40 | | |
41 | | namespace mozilla { |
42 | | class DeclarationBlock; |
43 | | |
44 | | namespace dom { |
45 | | class SVGSVGElement; |
46 | | class SVGViewportElement; |
47 | | |
48 | | } // namespace dom |
49 | | |
50 | | class SVGAnimatedNumberList; |
51 | | class SVGNumberList; |
52 | | class SVGAnimatedLengthList; |
53 | | class SVGUserUnitList; |
54 | | class SVGAnimatedPointList; |
55 | | class SVGAnimatedPathSegList; |
56 | | class SVGAnimatedPreserveAspectRatio; |
57 | | class nsSVGAnimatedTransformList; |
58 | | class SVGStringList; |
59 | | class DOMSVGStringList; |
60 | | |
61 | | } // namespace mozilla |
62 | | |
63 | | struct nsSVGEnumMapping; |
64 | | |
65 | | typedef nsStyledElement nsSVGElementBase; |
66 | | |
67 | | class nsSVGElement : public nsSVGElementBase // nsIContent |
68 | | { |
69 | | protected: |
70 | | explicit nsSVGElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo); |
71 | | friend nsresult NS_NewSVGElement(mozilla::dom::Element **aResult, |
72 | | already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo); |
73 | | nsresult Init(); |
74 | | virtual ~nsSVGElement(); |
75 | | |
76 | | public: |
77 | | |
78 | | virtual nsresult Clone(mozilla::dom::NodeInfo*, nsINode** aResult) const |
79 | | MOZ_MUST_OVERRIDE override; |
80 | | |
81 | | typedef mozilla::SVGNumberList SVGNumberList; |
82 | | typedef mozilla::SVGAnimatedNumberList SVGAnimatedNumberList; |
83 | | typedef mozilla::SVGUserUnitList SVGUserUnitList; |
84 | | typedef mozilla::SVGAnimatedLengthList SVGAnimatedLengthList; |
85 | | typedef mozilla::SVGAnimatedPointList SVGAnimatedPointList; |
86 | | typedef mozilla::SVGAnimatedPathSegList SVGAnimatedPathSegList; |
87 | | typedef mozilla::SVGAnimatedPreserveAspectRatio SVGAnimatedPreserveAspectRatio; |
88 | | typedef mozilla::nsSVGAnimatedTransformList nsSVGAnimatedTransformList; |
89 | | typedef mozilla::SVGStringList SVGStringList; |
90 | | |
91 | | // nsISupports |
92 | | NS_INLINE_DECL_REFCOUNTING_INHERITED(nsSVGElement, nsSVGElementBase) |
93 | | |
94 | | void DidAnimateClass(); |
95 | | |
96 | | // nsIContent interface methods |
97 | | |
98 | | virtual nsresult BindToTree(nsIDocument* aDocument, |
99 | | nsIContent* aParent, |
100 | | nsIContent* aBindingParent) override; |
101 | | |
102 | | virtual nsChangeHint GetAttributeChangeHint(const nsAtom* aAttribute, |
103 | | int32_t aModType) const override; |
104 | | |
105 | | virtual bool IsNodeOfType(uint32_t aFlags) const override; |
106 | | |
107 | | /** |
108 | | * We override the default to unschedule computation of Servo declaration blocks |
109 | | * when adopted across documents. |
110 | | */ |
111 | | virtual void NodeInfoChanged(nsIDocument* aOldDoc) override; |
112 | | |
113 | | |
114 | | NS_IMETHOD_(bool) IsAttributeMapped(const nsAtom* aAttribute) const override; |
115 | | |
116 | | static const MappedAttributeEntry sFillStrokeMap[]; |
117 | | static const MappedAttributeEntry sGraphicsMap[]; |
118 | | static const MappedAttributeEntry sTextContentElementsMap[]; |
119 | | static const MappedAttributeEntry sFontSpecificationMap[]; |
120 | | static const MappedAttributeEntry sGradientStopMap[]; |
121 | | static const MappedAttributeEntry sViewportsMap[]; |
122 | | static const MappedAttributeEntry sMarkersMap[]; |
123 | | static const MappedAttributeEntry sColorMap[]; |
124 | | static const MappedAttributeEntry sFiltersMap[]; |
125 | | static const MappedAttributeEntry sFEFloodMap[]; |
126 | | static const MappedAttributeEntry sLightingEffectsMap[]; |
127 | | static const MappedAttributeEntry sMaskMap[]; |
128 | | |
129 | | NS_IMPL_FROMNODE(nsSVGElement, kNameSpaceID_SVG) |
130 | | |
131 | | // Gets the element that establishes the rectangular viewport against which |
132 | | // we should resolve percentage lengths (our "coordinate context"). Returns |
133 | | // nullptr for outer <svg> or SVG without an <svg> parent (invalid SVG). |
134 | | mozilla::dom::SVGViewportElement* GetCtx() const; |
135 | | |
136 | | /** |
137 | | * Returns aMatrix pre-multiplied by (explicit or implicit) transforms that |
138 | | * are introduced by attributes on this element. |
139 | | * |
140 | | * If aWhich is eAllTransforms, then all the transforms from the coordinate |
141 | | * space established by this element for its children to the coordinate |
142 | | * space established by this element's parent element for this element, are |
143 | | * included. |
144 | | * |
145 | | * If aWhich is eUserSpaceToParent, then only the transforms from this |
146 | | * element's userspace to the coordinate space established by its parent is |
147 | | * included. This includes any transforms introduced by the 'transform' |
148 | | * attribute, transform animations and animateMotion, but not any offsets |
149 | | * due to e.g. 'x'/'y' attributes, or any transform due to a 'viewBox' |
150 | | * attribute. (SVG userspace is defined to be the coordinate space in which |
151 | | * coordinates on an element apply.) |
152 | | * |
153 | | * If aWhich is eChildToUserSpace, then only the transforms from the |
154 | | * coordinate space established by this element for its childre to this |
155 | | * elements userspace are included. This includes any offsets due to e.g. |
156 | | * 'x'/'y' attributes, and any transform due to a 'viewBox' attribute, but |
157 | | * does not include any transforms due to the 'transform' attribute. |
158 | | */ |
159 | | virtual gfxMatrix PrependLocalTransformsTo( |
160 | | const gfxMatrix &aMatrix, SVGTransformTypes aWhich = eAllTransforms) const; |
161 | | |
162 | | // Setter for to set the current <animateMotion> transformation |
163 | | // Only visible for nsSVGGraphicElement, so it's a no-op here, and that |
164 | | // subclass has the useful implementation. |
165 | 0 | virtual void SetAnimateMotionTransform(const mozilla::gfx::Matrix* aMatrix) {/*no-op*/} |
166 | 0 | virtual const mozilla::gfx::Matrix* GetAnimateMotionTransform() const { return nullptr; } |
167 | | |
168 | 0 | bool IsStringAnimatable(uint8_t aAttrEnum) { |
169 | 0 | return GetStringInfo().mStringInfo[aAttrEnum].mIsAnimatable; |
170 | 0 | } |
171 | 0 | bool NumberAttrAllowsPercentage(uint8_t aAttrEnum) { |
172 | 0 | return GetNumberInfo().mNumberInfo[aAttrEnum].mPercentagesAllowed; |
173 | 0 | } |
174 | 0 | virtual bool HasValidDimensions() const { |
175 | 0 | return true; |
176 | 0 | } |
177 | | void SetLength(nsAtom* aName, const nsSVGLength2 &aLength); |
178 | | |
179 | | nsAttrValue WillChangeLength(uint8_t aAttrEnum); |
180 | | nsAttrValue WillChangeNumberPair(uint8_t aAttrEnum); |
181 | | nsAttrValue WillChangeIntegerPair(uint8_t aAttrEnum); |
182 | | nsAttrValue WillChangeAngle(uint8_t aAttrEnum); |
183 | | nsAttrValue WillChangeViewBox(); |
184 | | nsAttrValue WillChangePreserveAspectRatio(); |
185 | | nsAttrValue WillChangeNumberList(uint8_t aAttrEnum); |
186 | | nsAttrValue WillChangeLengthList(uint8_t aAttrEnum); |
187 | | nsAttrValue WillChangePointList(); |
188 | | nsAttrValue WillChangePathSegList(); |
189 | | nsAttrValue WillChangeTransformList(); |
190 | | nsAttrValue WillChangeStringList(bool aIsConditionalProcessingAttribute, |
191 | | uint8_t aAttrEnum); |
192 | | |
193 | | void DidChangeLength(uint8_t aAttrEnum, const nsAttrValue& aEmptyOrOldValue); |
194 | | void DidChangeNumber(uint8_t aAttrEnum); |
195 | | void DidChangeNumberPair(uint8_t aAttrEnum, |
196 | | const nsAttrValue& aEmptyOrOldValue); |
197 | | void DidChangeInteger(uint8_t aAttrEnum); |
198 | | void DidChangeIntegerPair(uint8_t aAttrEnum, |
199 | | const nsAttrValue& aEmptyOrOldValue); |
200 | | void DidChangeAngle(uint8_t aAttrEnum, const nsAttrValue& aEmptyOrOldValue); |
201 | | void DidChangeBoolean(uint8_t aAttrEnum); |
202 | | void DidChangeEnum(uint8_t aAttrEnum); |
203 | | void DidChangeViewBox(const nsAttrValue& aEmptyOrOldValue); |
204 | | void DidChangePreserveAspectRatio(const nsAttrValue& aEmptyOrOldValue); |
205 | | void DidChangeNumberList(uint8_t aAttrEnum, |
206 | | const nsAttrValue& aEmptyOrOldValue); |
207 | | void DidChangeLengthList(uint8_t aAttrEnum, |
208 | | const nsAttrValue& aEmptyOrOldValue); |
209 | | void DidChangePointList(const nsAttrValue& aEmptyOrOldValue); |
210 | | void DidChangePathSegList(const nsAttrValue& aEmptyOrOldValue); |
211 | | void DidChangeTransformList(const nsAttrValue& aEmptyOrOldValue); |
212 | 0 | void DidChangeString(uint8_t aAttrEnum) {} |
213 | | void DidChangeStringList(bool aIsConditionalProcessingAttribute, |
214 | | uint8_t aAttrEnum, |
215 | | const nsAttrValue& aEmptyOrOldValue); |
216 | | |
217 | | void DidAnimateLength(uint8_t aAttrEnum); |
218 | | void DidAnimateNumber(uint8_t aAttrEnum); |
219 | | void DidAnimateNumberPair(uint8_t aAttrEnum); |
220 | | void DidAnimateInteger(uint8_t aAttrEnum); |
221 | | void DidAnimateIntegerPair(uint8_t aAttrEnum); |
222 | | void DidAnimateAngle(uint8_t aAttrEnum); |
223 | | void DidAnimateBoolean(uint8_t aAttrEnum); |
224 | | void DidAnimateEnum(uint8_t aAttrEnum); |
225 | | void DidAnimateViewBox(); |
226 | | void DidAnimatePreserveAspectRatio(); |
227 | | void DidAnimateNumberList(uint8_t aAttrEnum); |
228 | | void DidAnimateLengthList(uint8_t aAttrEnum); |
229 | | void DidAnimatePointList(); |
230 | | void DidAnimatePathSegList(); |
231 | | void DidAnimateTransformList(int32_t aModType); |
232 | | void DidAnimateString(uint8_t aAttrEnum); |
233 | | |
234 | | enum { |
235 | | /** |
236 | | * Flag to indicate to GetAnimatedXxx() methods that the object being |
237 | | * requested should be allocated if it hasn't already been allocated, and |
238 | | * that the method should not return null. Only applicable to methods that |
239 | | * need to allocate the object that they return. |
240 | | */ |
241 | | DO_ALLOCATE = 0x1 |
242 | | }; |
243 | | |
244 | | nsSVGLength2* GetAnimatedLength(const nsAtom *aAttrName); |
245 | | void GetAnimatedLengthValues(float *aFirst, ...); |
246 | | void GetAnimatedNumberValues(float *aFirst, ...); |
247 | | void GetAnimatedIntegerValues(int32_t *aFirst, ...); |
248 | | SVGAnimatedNumberList* GetAnimatedNumberList(uint8_t aAttrEnum); |
249 | | SVGAnimatedNumberList* GetAnimatedNumberList(nsAtom *aAttrName); |
250 | | void GetAnimatedLengthListValues(SVGUserUnitList *aFirst, ...); |
251 | | SVGAnimatedLengthList* GetAnimatedLengthList(uint8_t aAttrEnum); |
252 | 0 | virtual SVGAnimatedPointList* GetAnimatedPointList() { |
253 | 0 | return nullptr; |
254 | 0 | } |
255 | 0 | virtual SVGAnimatedPathSegList* GetAnimPathSegList() { |
256 | 0 | // DOM interface 'SVGAnimatedPathData' (*inherited* by nsSVGPathElement) |
257 | 0 | // has a member called 'animatedPathSegList' member, so we have a shorter |
258 | 0 | // name so we don't get hidden by the GetAnimatedPathSegList declared by |
259 | 0 | // NS_DECL_NSIDOMSVGANIMATEDPATHDATA. |
260 | 0 | return nullptr; |
261 | 0 | } |
262 | | /** |
263 | | * Get the nsSVGAnimatedTransformList for this element. |
264 | | * |
265 | | * Despite the fact that animated transform lists are used for a variety of |
266 | | * attributes, no SVG element uses more than one. |
267 | | * |
268 | | * It's relatively uncommon for elements to have their transform attribute |
269 | | * set, so to save memory the nsSVGAnimatedTransformList is not allocated until |
270 | | * the attribute is set/animated or its DOM wrapper is created. Callers that |
271 | | * require the nsSVGAnimatedTransformList to be allocated and for this method |
272 | | * to return non-null must pass the DO_ALLOCATE flag. |
273 | | */ |
274 | | virtual nsSVGAnimatedTransformList* GetAnimatedTransformList( |
275 | 0 | uint32_t aFlags = 0) { |
276 | 0 | return nullptr; |
277 | 0 | } |
278 | | |
279 | | mozilla::UniquePtr<nsISMILAttr> GetAnimatedAttr(int32_t aNamespaceID, |
280 | | nsAtom* aName) override; |
281 | | void AnimationNeedsResample(); |
282 | | void FlushAnimations(); |
283 | | |
284 | | virtual void RecompileScriptEventListeners() override; |
285 | | |
286 | | void GetStringBaseValue(uint8_t aAttrEnum, nsAString& aResult) const; |
287 | | void SetStringBaseValue(uint8_t aAttrEnum, const nsAString& aValue); |
288 | | |
289 | 0 | virtual nsAtom* GetPointListAttrName() const { |
290 | 0 | return nullptr; |
291 | 0 | } |
292 | 0 | virtual nsAtom* GetPathDataAttrName() const { |
293 | 0 | return nullptr; |
294 | 0 | } |
295 | 0 | virtual nsAtom* GetTransformListAttrName() const { |
296 | 0 | return nullptr; |
297 | 0 | } |
298 | | const nsAttrValue* GetAnimatedClassName() const |
299 | 0 | { |
300 | 0 | if (!mClassAttribute.IsAnimated()) { |
301 | 0 | return nullptr; |
302 | 0 | } |
303 | 0 | return mClassAnimAttr; |
304 | 0 | } |
305 | | |
306 | 0 | virtual void ClearAnyCachedPath() {} |
307 | 0 | virtual bool IsTransformable() { return false; } |
308 | | |
309 | | // WebIDL |
310 | | mozilla::dom::SVGSVGElement* GetOwnerSVGElement(); |
311 | | nsSVGElement* GetViewportElement(); |
312 | | already_AddRefed<mozilla::dom::SVGAnimatedString> ClassName(); |
313 | | |
314 | | virtual bool IsSVGFocusable(bool* aIsFocusable, int32_t* aTabIndex); |
315 | | virtual bool IsFocusableInternal(int32_t* aTabIndex, bool aWithMouse) override; |
316 | | |
317 | | void UpdateContentDeclarationBlock(); |
318 | | const mozilla::DeclarationBlock* GetContentDeclarationBlock() const; |
319 | | |
320 | | protected: |
321 | | virtual JSObject* WrapNode(JSContext *cx, JS::Handle<JSObject*> aGivenProto) override; |
322 | | |
323 | | // We define BeforeSetAttr here and mark it final to ensure it is NOT used |
324 | | // by SVG elements. |
325 | | // This is because we're not currently passing the correct value for aValue to |
326 | | // BeforeSetAttr since it would involve allocating extra SVG value types. |
327 | | // See the comment in nsSVGElement::WillChangeValue. |
328 | | nsresult BeforeSetAttr(int32_t aNamespaceID, nsAtom* aName, |
329 | | const nsAttrValueOrString* aValue, |
330 | | bool aNotify) final; |
331 | | virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsAtom* aName, |
332 | | const nsAttrValue* aValue, |
333 | | const nsAttrValue* aOldValue, |
334 | | nsIPrincipal* aSubjectPrincipal, |
335 | | bool aNotify) override; |
336 | | virtual bool ParseAttribute(int32_t aNamespaceID, nsAtom* aAttribute, |
337 | | const nsAString& aValue, |
338 | | nsIPrincipal* aMaybeScriptedPrincipal, |
339 | | nsAttrValue& aResult) override; |
340 | | static nsresult ReportAttributeParseFailure(nsIDocument* aDocument, |
341 | | nsAtom* aAttribute, |
342 | | const nsAString& aValue); |
343 | | |
344 | | nsAttrValue WillChangeValue(nsAtom* aName); |
345 | | // aNewValue is set to the old value. This value may be invalid if |
346 | | // !StoresOwnData. |
347 | | void DidChangeValue(nsAtom* aName, const nsAttrValue& aEmptyOrOldValue, |
348 | | nsAttrValue& aNewValue); |
349 | | void MaybeSerializeAttrBeforeRemoval(nsAtom* aName, bool aNotify); |
350 | | |
351 | | static nsAtom* GetEventNameForAttr(nsAtom* aAttr); |
352 | | |
353 | | struct LengthInfo { |
354 | | nsStaticAtom** mName; |
355 | | float mDefaultValue; |
356 | | uint8_t mDefaultUnitType; |
357 | | uint8_t mCtxType; |
358 | | }; |
359 | | |
360 | | struct LengthAttributesInfo { |
361 | | nsSVGLength2* mLengths; |
362 | | LengthInfo* mLengthInfo; |
363 | | uint32_t mLengthCount; |
364 | | |
365 | | LengthAttributesInfo(nsSVGLength2 *aLengths, |
366 | | LengthInfo *aLengthInfo, |
367 | | uint32_t aLengthCount) : |
368 | | mLengths(aLengths), mLengthInfo(aLengthInfo), mLengthCount(aLengthCount) |
369 | 0 | {} |
370 | | |
371 | | void Reset(uint8_t aAttrEnum); |
372 | | }; |
373 | | |
374 | | struct NumberInfo { |
375 | | nsStaticAtom** mName; |
376 | | float mDefaultValue; |
377 | | bool mPercentagesAllowed; |
378 | | }; |
379 | | |
380 | | struct NumberAttributesInfo { |
381 | | nsSVGNumber2* mNumbers; |
382 | | NumberInfo* mNumberInfo; |
383 | | uint32_t mNumberCount; |
384 | | |
385 | | NumberAttributesInfo(nsSVGNumber2 *aNumbers, |
386 | | NumberInfo *aNumberInfo, |
387 | | uint32_t aNumberCount) : |
388 | | mNumbers(aNumbers), mNumberInfo(aNumberInfo), mNumberCount(aNumberCount) |
389 | 0 | {} |
390 | | |
391 | | void Reset(uint8_t aAttrEnum); |
392 | | }; |
393 | | |
394 | | struct NumberPairInfo { |
395 | | nsStaticAtom** mName; |
396 | | float mDefaultValue1; |
397 | | float mDefaultValue2; |
398 | | }; |
399 | | |
400 | | struct NumberPairAttributesInfo { |
401 | | nsSVGNumberPair* mNumberPairs; |
402 | | NumberPairInfo* mNumberPairInfo; |
403 | | uint32_t mNumberPairCount; |
404 | | |
405 | | NumberPairAttributesInfo(nsSVGNumberPair *aNumberPairs, |
406 | | NumberPairInfo *aNumberPairInfo, |
407 | | uint32_t aNumberPairCount) : |
408 | | mNumberPairs(aNumberPairs), mNumberPairInfo(aNumberPairInfo), |
409 | | mNumberPairCount(aNumberPairCount) |
410 | 0 | {} |
411 | | |
412 | | void Reset(uint8_t aAttrEnum); |
413 | | }; |
414 | | |
415 | | struct IntegerInfo { |
416 | | nsStaticAtom** mName; |
417 | | int32_t mDefaultValue; |
418 | | }; |
419 | | |
420 | | struct IntegerAttributesInfo { |
421 | | nsSVGInteger* mIntegers; |
422 | | IntegerInfo* mIntegerInfo; |
423 | | uint32_t mIntegerCount; |
424 | | |
425 | | IntegerAttributesInfo(nsSVGInteger *aIntegers, |
426 | | IntegerInfo *aIntegerInfo, |
427 | | uint32_t aIntegerCount) : |
428 | | mIntegers(aIntegers), mIntegerInfo(aIntegerInfo), mIntegerCount(aIntegerCount) |
429 | 0 | {} |
430 | | |
431 | | void Reset(uint8_t aAttrEnum); |
432 | | }; |
433 | | |
434 | | struct IntegerPairInfo { |
435 | | nsStaticAtom** mName; |
436 | | int32_t mDefaultValue1; |
437 | | int32_t mDefaultValue2; |
438 | | }; |
439 | | |
440 | | struct IntegerPairAttributesInfo { |
441 | | nsSVGIntegerPair* mIntegerPairs; |
442 | | IntegerPairInfo* mIntegerPairInfo; |
443 | | uint32_t mIntegerPairCount; |
444 | | |
445 | | IntegerPairAttributesInfo(nsSVGIntegerPair *aIntegerPairs, |
446 | | IntegerPairInfo *aIntegerPairInfo, |
447 | | uint32_t aIntegerPairCount) : |
448 | | mIntegerPairs(aIntegerPairs), mIntegerPairInfo(aIntegerPairInfo), |
449 | | mIntegerPairCount(aIntegerPairCount) |
450 | 0 | {} |
451 | | |
452 | | void Reset(uint8_t aAttrEnum); |
453 | | }; |
454 | | |
455 | | struct AngleInfo { |
456 | | nsStaticAtom** mName; |
457 | | float mDefaultValue; |
458 | | uint8_t mDefaultUnitType; |
459 | | }; |
460 | | |
461 | | struct AngleAttributesInfo { |
462 | | nsSVGAngle* mAngles; |
463 | | AngleInfo* mAngleInfo; |
464 | | uint32_t mAngleCount; |
465 | | |
466 | | AngleAttributesInfo(nsSVGAngle *aAngles, |
467 | | AngleInfo *aAngleInfo, |
468 | | uint32_t aAngleCount) : |
469 | | mAngles(aAngles), mAngleInfo(aAngleInfo), mAngleCount(aAngleCount) |
470 | 0 | {} |
471 | | |
472 | | void Reset(uint8_t aAttrEnum); |
473 | | }; |
474 | | |
475 | | struct BooleanInfo { |
476 | | nsStaticAtom** mName; |
477 | | bool mDefaultValue; |
478 | | }; |
479 | | |
480 | | struct BooleanAttributesInfo { |
481 | | nsSVGBoolean* mBooleans; |
482 | | BooleanInfo* mBooleanInfo; |
483 | | uint32_t mBooleanCount; |
484 | | |
485 | | BooleanAttributesInfo(nsSVGBoolean *aBooleans, |
486 | | BooleanInfo *aBooleanInfo, |
487 | | uint32_t aBooleanCount) : |
488 | | mBooleans(aBooleans), mBooleanInfo(aBooleanInfo), mBooleanCount(aBooleanCount) |
489 | 0 | {} |
490 | | |
491 | | void Reset(uint8_t aAttrEnum); |
492 | | }; |
493 | | |
494 | | friend class nsSVGEnum; |
495 | | |
496 | | struct EnumInfo { |
497 | | nsStaticAtom** mName; |
498 | | nsSVGEnumMapping* mMapping; |
499 | | uint16_t mDefaultValue; |
500 | | }; |
501 | | |
502 | | struct EnumAttributesInfo { |
503 | | nsSVGEnum* mEnums; |
504 | | EnumInfo* mEnumInfo; |
505 | | uint32_t mEnumCount; |
506 | | |
507 | | EnumAttributesInfo(nsSVGEnum *aEnums, |
508 | | EnumInfo *aEnumInfo, |
509 | | uint32_t aEnumCount) : |
510 | | mEnums(aEnums), mEnumInfo(aEnumInfo), mEnumCount(aEnumCount) |
511 | 0 | {} |
512 | | |
513 | | void Reset(uint8_t aAttrEnum); |
514 | | void SetUnknownValue(uint8_t aAttrEnum); |
515 | | }; |
516 | | |
517 | | struct NumberListInfo { |
518 | | nsStaticAtom** mName; |
519 | | }; |
520 | | |
521 | | struct NumberListAttributesInfo { |
522 | | SVGAnimatedNumberList* mNumberLists; |
523 | | NumberListInfo* mNumberListInfo; |
524 | | uint32_t mNumberListCount; |
525 | | |
526 | | NumberListAttributesInfo(SVGAnimatedNumberList *aNumberLists, |
527 | | NumberListInfo *aNumberListInfo, |
528 | | uint32_t aNumberListCount) |
529 | | : mNumberLists(aNumberLists) |
530 | | , mNumberListInfo(aNumberListInfo) |
531 | | , mNumberListCount(aNumberListCount) |
532 | 0 | {} |
533 | | |
534 | | void Reset(uint8_t aAttrEnum); |
535 | | }; |
536 | | |
537 | | struct LengthListInfo { |
538 | | nsStaticAtom** mName; |
539 | | uint8_t mAxis; |
540 | | /** |
541 | | * Flag to indicate whether appending zeros to the end of the list would |
542 | | * change the rendering of the SVG for the attribute in question. For x and |
543 | | * y on the <text> element this is true, but for dx and dy on <text> this |
544 | | * is false. This flag is fed down to SVGLengthListSMILType so it can |
545 | | * determine if it can sensibly animate from-to lists of different lengths, |
546 | | * which is desirable in the case of dx and dy. |
547 | | */ |
548 | | bool mCouldZeroPadList; |
549 | | }; |
550 | | |
551 | | struct LengthListAttributesInfo { |
552 | | SVGAnimatedLengthList* mLengthLists; |
553 | | LengthListInfo* mLengthListInfo; |
554 | | uint32_t mLengthListCount; |
555 | | |
556 | | LengthListAttributesInfo(SVGAnimatedLengthList *aLengthLists, |
557 | | LengthListInfo *aLengthListInfo, |
558 | | uint32_t aLengthListCount) |
559 | | : mLengthLists(aLengthLists) |
560 | | , mLengthListInfo(aLengthListInfo) |
561 | | , mLengthListCount(aLengthListCount) |
562 | 0 | {} |
563 | | |
564 | | void Reset(uint8_t aAttrEnum); |
565 | | }; |
566 | | |
567 | | struct StringInfo { |
568 | | nsStaticAtom** mName; |
569 | | int32_t mNamespaceID; |
570 | | bool mIsAnimatable; |
571 | | }; |
572 | | |
573 | | struct StringAttributesInfo { |
574 | | nsSVGString* mStrings; |
575 | | StringInfo* mStringInfo; |
576 | | uint32_t mStringCount; |
577 | | |
578 | | StringAttributesInfo(nsSVGString *aStrings, |
579 | | StringInfo *aStringInfo, |
580 | | uint32_t aStringCount) : |
581 | | mStrings(aStrings), mStringInfo(aStringInfo), mStringCount(aStringCount) |
582 | 0 | {} |
583 | | |
584 | | void Reset(uint8_t aAttrEnum); |
585 | | }; |
586 | | |
587 | | friend class mozilla::DOMSVGStringList; |
588 | | |
589 | | struct StringListInfo { |
590 | | nsStaticAtom** mName; |
591 | | }; |
592 | | |
593 | | struct StringListAttributesInfo { |
594 | | SVGStringList* mStringLists; |
595 | | StringListInfo* mStringListInfo; |
596 | | uint32_t mStringListCount; |
597 | | |
598 | | StringListAttributesInfo(SVGStringList *aStringLists, |
599 | | StringListInfo *aStringListInfo, |
600 | | uint32_t aStringListCount) : |
601 | | mStringLists(aStringLists), mStringListInfo(aStringListInfo), |
602 | | mStringListCount(aStringListCount) |
603 | 0 | {} |
604 | | |
605 | | void Reset(uint8_t aAttrEnum); |
606 | | }; |
607 | | |
608 | | virtual LengthAttributesInfo GetLengthInfo(); |
609 | | virtual NumberAttributesInfo GetNumberInfo(); |
610 | | virtual NumberPairAttributesInfo GetNumberPairInfo(); |
611 | | virtual IntegerAttributesInfo GetIntegerInfo(); |
612 | | virtual IntegerPairAttributesInfo GetIntegerPairInfo(); |
613 | | virtual AngleAttributesInfo GetAngleInfo(); |
614 | | virtual BooleanAttributesInfo GetBooleanInfo(); |
615 | | virtual EnumAttributesInfo GetEnumInfo(); |
616 | | // We assume all viewboxes and preserveAspectRatios are alike |
617 | | // so we don't need to wrap the class |
618 | | virtual nsSVGViewBox *GetViewBox(); |
619 | | virtual SVGAnimatedPreserveAspectRatio *GetPreserveAspectRatio(); |
620 | | virtual NumberListAttributesInfo GetNumberListInfo(); |
621 | | virtual LengthListAttributesInfo GetLengthListInfo(); |
622 | | virtual StringAttributesInfo GetStringInfo(); |
623 | | virtual StringListAttributesInfo GetStringListInfo(); |
624 | | |
625 | | static nsSVGEnumMapping sSVGUnitTypesMap[]; |
626 | | |
627 | | private: |
628 | | void UnsetAttrInternal(int32_t aNameSpaceID, nsAtom* aAttribute, |
629 | | bool aNotify); |
630 | | |
631 | | nsSVGClass mClassAttribute; |
632 | | nsAutoPtr<nsAttrValue> mClassAnimAttr; |
633 | | RefPtr<mozilla::DeclarationBlock> mContentDeclarationBlock; |
634 | | }; |
635 | | |
636 | | /** |
637 | | * A macro to implement the NS_NewSVGXXXElement() functions. |
638 | | */ |
639 | | #define NS_IMPL_NS_NEW_SVG_ELEMENT(_elementName) \ |
640 | | nsresult \ |
641 | | NS_NewSVG##_elementName##Element(nsIContent **aResult, \ |
642 | | already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo) \ |
643 | | { \ |
644 | | RefPtr<nsSVG##_elementName##Element> it = \ |
645 | | new nsSVG##_elementName##Element(std::move(aNodeInfo)); \ |
646 | | \ |
647 | | nsresult rv = it->Init(); \ |
648 | | \ |
649 | | if (NS_FAILED(rv)) { \ |
650 | | return rv; \ |
651 | | } \ |
652 | | \ |
653 | | it.forget(aResult); \ |
654 | | \ |
655 | | return rv; \ |
656 | | } |
657 | | |
658 | | #define NS_IMPL_NS_NEW_NAMESPACED_SVG_ELEMENT(_elementName) \ |
659 | | nsresult \ |
660 | | NS_NewSVG##_elementName##Element(nsIContent **aResult, \ |
661 | 0 | already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo) \ |
662 | 0 | { \ |
663 | 0 | RefPtr<mozilla::dom::SVG##_elementName##Element> it = \ |
664 | 0 | new mozilla::dom::SVG##_elementName##Element(std::move(aNodeInfo)); \ |
665 | 0 | \ |
666 | 0 | nsresult rv = it->Init(); \ |
667 | 0 | \ |
668 | 0 | if (NS_FAILED(rv)) { \ |
669 | 0 | return rv; \ |
670 | 0 | } \ |
671 | 0 | \ |
672 | 0 | it.forget(aResult); \ |
673 | 0 | \ |
674 | 0 | return rv; \ |
675 | 0 | } Unexecuted instantiation: NS_NewSVGAElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGAnimateElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGAnimateMotionElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGAnimateTransformElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGCircleElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGClipPathElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGDefsElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGDescElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGEllipseElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEBlendElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEColorMatrixElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEComponentTransferElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFECompositeElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEConvolveMatrixElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEDiffuseLightingElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEDisplacementMapElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEDistantLightElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEDropShadowElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEFloodElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEGaussianBlurElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEImageElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEMergeElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEMergeNodeElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEMorphologyElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEOffsetElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEPointLightElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFESpecularLightingElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFESpotLightElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFETileElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFETurbulenceElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFilterElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGForeignObjectElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGGElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGLinearGradientElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGRadialGradientElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGImageElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGLineElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGMPathElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGMarkerElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGMaskElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGMetadataElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGPathElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGPatternElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGPolygonElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGPolylineElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGRectElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGSetElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGStopElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGStyleElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGSwitchElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGSymbolElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGTSpanElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGTextElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGTextPathElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGTitleElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGUseElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGViewElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEFuncRElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEFuncGElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEFuncBElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) Unexecuted instantiation: NS_NewSVGFEFuncAElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&) |
676 | | |
677 | | #define NS_IMPL_NS_NEW_NAMESPACED_SVG_ELEMENT_CHECK_PARSER(_elementName) \ |
678 | | nsresult \ |
679 | | NS_NewSVG##_elementName##Element(nsIContent **aResult, \ |
680 | | already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo, \ |
681 | 0 | mozilla::dom::FromParser aFromParser) \ |
682 | 0 | { \ |
683 | 0 | RefPtr<mozilla::dom::SVG##_elementName##Element> it = \ |
684 | 0 | new mozilla::dom::SVG##_elementName##Element(std::move(aNodeInfo), \ |
685 | 0 | aFromParser); \ |
686 | 0 | \ |
687 | 0 | nsresult rv = it->Init(); \ |
688 | 0 | \ |
689 | 0 | if (NS_FAILED(rv)) { \ |
690 | 0 | return rv; \ |
691 | 0 | } \ |
692 | 0 | \ |
693 | 0 | it.forget(aResult); \ |
694 | 0 | \ |
695 | 0 | return rv; \ |
696 | 0 | } Unexecuted instantiation: NS_NewSVGSVGElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&, mozilla::dom::FromParser) Unexecuted instantiation: NS_NewSVGScriptElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&, mozilla::dom::FromParser) |
697 | | |
698 | | // No unlinking, we'd need to null out the value pointer (the object it |
699 | | // points to is held by the element) and null-check it everywhere. |
700 | | #define NS_SVG_VAL_IMPL_CYCLE_COLLECTION(_val, _element) \ |
701 | | NS_IMPL_CYCLE_COLLECTION_CLASS(_val) \ |
702 | | NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_val) \ |
703 | | NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_element) \ |
704 | | NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \ |
705 | | NS_IMPL_CYCLE_COLLECTION_UNLINK_0(_val) |
706 | | |
707 | | #define NS_SVG_VAL_IMPL_CYCLE_COLLECTION_WRAPPERCACHED(_val, _element) \ |
708 | 0 | NS_IMPL_CYCLE_COLLECTION_CLASS(_val) \ |
709 | 0 | NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_val) \ |
710 | 0 | NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \ |
711 | 0 | NS_IMPL_CYCLE_COLLECTION_UNLINK_END \ Unexecuted instantiation: mozilla::DOMSVGAnimatedLengthList::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::DOMSVGAnimatedNumberList::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::DOMSVGStringList::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::SVGAngle::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedAngle::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedBoolean::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedEnumeration::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedInteger::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedLength::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedNumber::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::DOMSVGAnimatedPreserveAspectRatio::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedRect::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedTransformList::cycleCollection::Unlink(void*) Unexecuted instantiation: mozilla::dom::DOMSVGPreserveAspectRatio::cycleCollection::Unlink(void*) Unexecuted instantiation: DOMAnimatedString::cycleCollection::Unlink(void*) Unexecuted instantiation: nsSVGString::DOMAnimatedString::cycleCollection::Unlink(void*) Unexecuted instantiation: nsSVGViewBox::DOMBaseVal::cycleCollection::Unlink(void*) Unexecuted instantiation: nsSVGViewBox::DOMAnimVal::cycleCollection::Unlink(void*) |
712 | 0 | NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_val) \ |
713 | 0 | NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_element) \ |
714 | 0 | NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \ Unexecuted instantiation: mozilla::DOMSVGAnimatedLengthList::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::DOMSVGAnimatedNumberList::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::DOMSVGStringList::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::SVGAngle::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::SVGAnimatedAngle::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::SVGAnimatedBoolean::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::SVGAnimatedEnumeration::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::SVGAnimatedInteger::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::SVGAnimatedLength::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::SVGAnimatedNumber::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::DOMSVGAnimatedPreserveAspectRatio::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::SVGAnimatedRect::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::SVGAnimatedTransformList::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: mozilla::dom::DOMSVGPreserveAspectRatio::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: DOMAnimatedString::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: nsSVGString::DOMAnimatedString::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: nsSVGViewBox::DOMBaseVal::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) Unexecuted instantiation: nsSVGViewBox::DOMAnimVal::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&) |
715 | 0 | NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(_val) \ |
716 | 0 | NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER \ |
717 | 0 | NS_IMPL_CYCLE_COLLECTION_TRACE_END Unexecuted instantiation: mozilla::DOMSVGAnimatedLengthList::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::DOMSVGAnimatedNumberList::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::DOMSVGStringList::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::SVGAngle::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedAngle::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedBoolean::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedEnumeration::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedInteger::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedLength::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedNumber::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::DOMSVGAnimatedPreserveAspectRatio::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedRect::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::SVGAnimatedTransformList::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: mozilla::dom::DOMSVGPreserveAspectRatio::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: DOMAnimatedString::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: nsSVGString::DOMAnimatedString::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: nsSVGViewBox::DOMBaseVal::cycleCollection::Trace(void*, TraceCallbacks const&, void*) Unexecuted instantiation: nsSVGViewBox::DOMAnimVal::cycleCollection::Trace(void*, TraceCallbacks const&, void*) |
718 | | |
719 | | #endif // __NS_SVGELEMENT_H__ |