Line data Source code
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 : #include "mozilla/dom/SVGTextPathElement.h"
8 : #include "mozilla/dom/SVGTextPathElementBinding.h"
9 : #include "nsSVGElement.h"
10 : #include "nsGkAtoms.h"
11 : #include "nsError.h"
12 :
13 0 : NS_IMPL_NS_NEW_NAMESPACED_SVG_ELEMENT(TextPath)
14 :
15 : namespace mozilla {
16 : namespace dom {
17 :
18 : class SVGAnimatedLength;
19 :
20 : JSObject*
21 0 : SVGTextPathElement::WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto)
22 : {
23 0 : return SVGTextPathElementBinding::Wrap(aCx, this, aGivenProto);
24 : }
25 :
26 : nsSVGElement::LengthInfo SVGTextPathElement::sLengthInfo[2] =
27 : {
28 : // from SVGTextContentElement:
29 : { &nsGkAtoms::textLength, 0, nsIDOMSVGLength::SVG_LENGTHTYPE_NUMBER, SVGContentUtils::XY },
30 : // from SVGTextPathElement:
31 : { &nsGkAtoms::startOffset, 0, nsIDOMSVGLength::SVG_LENGTHTYPE_NUMBER, SVGContentUtils::X }
32 : };
33 :
34 : nsSVGEnumMapping SVGTextPathElement::sMethodMap[] = {
35 : {&nsGkAtoms::align, TEXTPATH_METHODTYPE_ALIGN},
36 : {&nsGkAtoms::stretch, TEXTPATH_METHODTYPE_STRETCH},
37 : {nullptr, 0}
38 : };
39 :
40 : nsSVGEnumMapping SVGTextPathElement::sSpacingMap[] = {
41 : {&nsGkAtoms::_auto, TEXTPATH_SPACINGTYPE_AUTO},
42 : {&nsGkAtoms::exact, TEXTPATH_SPACINGTYPE_EXACT},
43 : {nullptr, 0}
44 : };
45 :
46 : nsSVGElement::EnumInfo SVGTextPathElement::sEnumInfo[3] =
47 : {
48 : // from SVGTextContentElement:
49 : { &nsGkAtoms::lengthAdjust,
50 : sLengthAdjustMap,
51 : SVG_LENGTHADJUST_SPACING
52 : },
53 : // from SVGTextPathElement:
54 : { &nsGkAtoms::method,
55 : sMethodMap,
56 : TEXTPATH_METHODTYPE_ALIGN
57 : },
58 : { &nsGkAtoms::spacing,
59 : sSpacingMap,
60 : TEXTPATH_SPACINGTYPE_EXACT
61 : }
62 : };
63 :
64 : nsSVGElement::StringInfo SVGTextPathElement::sStringInfo[2] =
65 : {
66 : { &nsGkAtoms::href, kNameSpaceID_None, true },
67 : { &nsGkAtoms::href, kNameSpaceID_XLink, true }
68 : };
69 :
70 : //----------------------------------------------------------------------
71 : // Implementation
72 :
73 0 : SVGTextPathElement::SVGTextPathElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
74 0 : : SVGTextPathElementBase(aNodeInfo)
75 : {
76 0 : }
77 :
78 : //----------------------------------------------------------------------
79 : // nsIDOMNode methods
80 :
81 0 : NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGTextPathElement)
82 :
83 : already_AddRefed<SVGAnimatedString>
84 0 : SVGTextPathElement::Href()
85 : {
86 0 : return mStringAttributes[HREF].IsExplicitlySet()
87 : ? mStringAttributes[HREF].ToDOMAnimatedString(this)
88 0 : : mStringAttributes[XLINK_HREF].ToDOMAnimatedString(this);
89 : }
90 :
91 : //----------------------------------------------------------------------
92 :
93 : already_AddRefed<SVGAnimatedLength>
94 0 : SVGTextPathElement::StartOffset()
95 : {
96 0 : return mLengthAttributes[STARTOFFSET].ToDOMAnimatedLength(this);
97 : }
98 :
99 : already_AddRefed<SVGAnimatedEnumeration>
100 0 : SVGTextPathElement::Method()
101 : {
102 0 : return mEnumAttributes[METHOD].ToDOMAnimatedEnum(this);
103 : }
104 :
105 : already_AddRefed<SVGAnimatedEnumeration>
106 0 : SVGTextPathElement::Spacing()
107 : {
108 0 : return mEnumAttributes[SPACING].ToDOMAnimatedEnum(this);
109 : }
110 :
111 : //----------------------------------------------------------------------
112 : // nsIContent methods
113 :
114 : NS_IMETHODIMP_(bool)
115 0 : SVGTextPathElement::IsAttributeMapped(const nsIAtom* name) const
116 : {
117 : static const MappedAttributeEntry* const map[] = {
118 : sColorMap,
119 : sFillStrokeMap,
120 : sFontSpecificationMap,
121 : sGraphicsMap,
122 : sTextContentElementsMap
123 : };
124 :
125 0 : return FindAttributeDependence(name, map) ||
126 0 : SVGTextPathElementBase::IsAttributeMapped(name);
127 : }
128 :
129 : //----------------------------------------------------------------------
130 : // nsSVGElement overrides
131 :
132 : nsSVGElement::LengthAttributesInfo
133 0 : SVGTextPathElement::GetLengthInfo()
134 : {
135 : return LengthAttributesInfo(mLengthAttributes, sLengthInfo,
136 0 : ArrayLength(sLengthInfo));
137 : }
138 :
139 : nsSVGElement::EnumAttributesInfo
140 0 : SVGTextPathElement::GetEnumInfo()
141 : {
142 : return EnumAttributesInfo(mEnumAttributes, sEnumInfo,
143 0 : ArrayLength(sEnumInfo));
144 : }
145 :
146 : nsSVGElement::StringAttributesInfo
147 0 : SVGTextPathElement::GetStringInfo()
148 : {
149 : return StringAttributesInfo(mStringAttributes, sStringInfo,
150 0 : ArrayLength(sStringInfo));
151 : }
152 :
153 : } // namespace dom
154 : } // namespace mozilla
|