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/ArrayUtils.h"
8 :
9 : #include "nsCOMPtr.h"
10 : #include "nsGkAtoms.h"
11 : #include "mozilla/dom/SVGMaskElement.h"
12 : #include "mozilla/dom/SVGMaskElementBinding.h"
13 :
14 4 : NS_IMPL_NS_NEW_NAMESPACED_SVG_ELEMENT(Mask)
15 :
16 : namespace mozilla {
17 : namespace dom {
18 :
19 : JSObject*
20 0 : SVGMaskElement::WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto)
21 : {
22 0 : return SVGMaskElementBinding::Wrap(aCx, this, aGivenProto);
23 : }
24 :
25 : //--------------------- Masks ------------------------
26 :
27 : nsSVGElement::LengthInfo SVGMaskElement::sLengthInfo[4] =
28 : {
29 : { &nsGkAtoms::x, -10, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::X },
30 : { &nsGkAtoms::y, -10, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::Y },
31 : { &nsGkAtoms::width, 120, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::X },
32 : { &nsGkAtoms::height, 120, nsIDOMSVGLength::SVG_LENGTHTYPE_PERCENTAGE, SVGContentUtils::Y },
33 : };
34 :
35 : nsSVGElement::EnumInfo SVGMaskElement::sEnumInfo[2] =
36 : {
37 : { &nsGkAtoms::maskUnits,
38 : sSVGUnitTypesMap,
39 : SVG_UNIT_TYPE_OBJECTBOUNDINGBOX
40 : },
41 : { &nsGkAtoms::maskContentUnits,
42 : sSVGUnitTypesMap,
43 : SVG_UNIT_TYPE_USERSPACEONUSE
44 : }
45 : };
46 :
47 : //----------------------------------------------------------------------
48 : // Implementation
49 :
50 2 : SVGMaskElement::SVGMaskElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
51 2 : : SVGMaskElementBase(aNodeInfo)
52 : {
53 2 : }
54 :
55 : //----------------------------------------------------------------------
56 : // nsIDOMNode method
57 :
58 0 : NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGMaskElement)
59 :
60 : //----------------------------------------------------------------------
61 :
62 : already_AddRefed<SVGAnimatedEnumeration>
63 0 : SVGMaskElement::MaskUnits()
64 : {
65 0 : return mEnumAttributes[MASKUNITS].ToDOMAnimatedEnum(this);
66 : }
67 :
68 : already_AddRefed<SVGAnimatedEnumeration>
69 0 : SVGMaskElement::MaskContentUnits()
70 : {
71 0 : return mEnumAttributes[MASKCONTENTUNITS].ToDOMAnimatedEnum(this);
72 : }
73 :
74 : already_AddRefed<SVGAnimatedLength>
75 0 : SVGMaskElement::X()
76 : {
77 0 : return mLengthAttributes[ATTR_X].ToDOMAnimatedLength(this);
78 : }
79 :
80 : already_AddRefed<SVGAnimatedLength>
81 0 : SVGMaskElement::Y()
82 : {
83 0 : return mLengthAttributes[ATTR_Y].ToDOMAnimatedLength(this);
84 : }
85 :
86 : already_AddRefed<SVGAnimatedLength>
87 0 : SVGMaskElement::Width()
88 : {
89 0 : return mLengthAttributes[ATTR_WIDTH].ToDOMAnimatedLength(this);
90 : }
91 :
92 : already_AddRefed<SVGAnimatedLength>
93 0 : SVGMaskElement::Height()
94 : {
95 0 : return mLengthAttributes[ATTR_HEIGHT].ToDOMAnimatedLength(this);
96 : }
97 :
98 : //----------------------------------------------------------------------
99 : // nsSVGElement methods
100 :
101 : /* virtual */ bool
102 0 : SVGMaskElement::HasValidDimensions() const
103 : {
104 0 : return (!mLengthAttributes[ATTR_WIDTH].IsExplicitlySet() ||
105 0 : mLengthAttributes[ATTR_WIDTH].GetAnimValInSpecifiedUnits() > 0) &&
106 0 : (!mLengthAttributes[ATTR_HEIGHT].IsExplicitlySet() ||
107 0 : mLengthAttributes[ATTR_HEIGHT].GetAnimValInSpecifiedUnits() > 0);
108 : }
109 :
110 : nsSVGElement::LengthAttributesInfo
111 4 : SVGMaskElement::GetLengthInfo()
112 : {
113 : return LengthAttributesInfo(mLengthAttributes, sLengthInfo,
114 4 : ArrayLength(sLengthInfo));
115 : }
116 :
117 : nsSVGElement::EnumAttributesInfo
118 4 : SVGMaskElement::GetEnumInfo()
119 : {
120 : return EnumAttributesInfo(mEnumAttributes, sEnumInfo,
121 4 : ArrayLength(sEnumInfo));
122 : }
123 :
124 : //----------------------------------------------------------------------
125 : // nsIContent methods
126 :
127 : NS_IMETHODIMP_(bool)
128 8 : SVGMaskElement::IsAttributeMapped(const nsIAtom* name) const
129 : {
130 : static const MappedAttributeEntry* const map[] = {
131 : sColorMap,
132 : sFEFloodMap,
133 : sFillStrokeMap,
134 : sFiltersMap,
135 : sFontSpecificationMap,
136 : sGradientStopMap,
137 : sGraphicsMap,
138 : sMarkersMap,
139 : sMaskMap,
140 : sTextContentElementsMap,
141 : sViewportsMap
142 : };
143 :
144 16 : return FindAttributeDependence(name, map) ||
145 16 : SVGMaskElementBase::IsAttributeMapped(name);
146 : }
147 :
148 : } // namespace dom
149 : } // namespace mozilla
|