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 "SVGAngle.h"
8 : #include "nsSVGAngle.h"
9 : #include "mozilla/dom/SVGAngleBinding.h"
10 :
11 : using namespace mozilla;
12 : using namespace mozilla::dom;
13 :
14 0 : NS_SVG_VAL_IMPL_CYCLE_COLLECTION_WRAPPERCACHED(SVGAngle, mSVGElement)
15 :
16 0 : NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(SVGAngle, AddRef)
17 0 : NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(SVGAngle, Release)
18 :
19 : JSObject*
20 0 : SVGAngle::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
21 : {
22 0 : return SVGAngleBinding::Wrap(aCx, this, aGivenProto);
23 : }
24 :
25 : uint16_t
26 0 : SVGAngle::UnitType() const
27 : {
28 0 : if (mType == AnimValue) {
29 0 : return mVal->mAnimValUnit;
30 : }
31 0 : return mVal->mBaseValUnit;
32 : }
33 :
34 : float
35 0 : SVGAngle::Value() const
36 : {
37 0 : if (mType == AnimValue) {
38 0 : return mVal->GetAnimValue();
39 : }
40 0 : return mVal->GetBaseValue();
41 : }
42 :
43 : void
44 0 : SVGAngle::SetValue(float aValue, ErrorResult& rv)
45 : {
46 0 : if (mType == AnimValue) {
47 0 : rv.Throw(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR);
48 0 : return;
49 : }
50 0 : bool isBaseVal = mType == BaseValue;
51 0 : mVal->SetBaseValue(aValue, isBaseVal ? mSVGElement.get() : nullptr,
52 0 : isBaseVal);
53 : }
54 :
55 : float
56 0 : SVGAngle::ValueInSpecifiedUnits() const
57 : {
58 0 : if (mType == AnimValue) {
59 0 : return mVal->mAnimVal;
60 : }
61 0 : return mVal->mBaseVal;
62 : }
63 :
64 : void
65 0 : SVGAngle::SetValueInSpecifiedUnits(float aValue, ErrorResult& rv)
66 : {
67 0 : if (mType == AnimValue) {
68 0 : rv.Throw(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR);
69 0 : return;
70 0 : } else if (mType == BaseValue) {
71 0 : mVal->SetBaseValueInSpecifiedUnits(aValue, mSVGElement);
72 : } else {
73 0 : mVal->mBaseVal = aValue;
74 : }
75 : }
76 :
77 : void
78 0 : SVGAngle::NewValueSpecifiedUnits(uint16_t unitType,
79 : float valueInSpecifiedUnits,
80 : ErrorResult& rv)
81 : {
82 0 : if (mType == AnimValue) {
83 0 : rv.Throw(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR);
84 0 : return;
85 : }
86 0 : rv = mVal->NewValueSpecifiedUnits(unitType, valueInSpecifiedUnits,
87 0 : mType == BaseValue ? mSVGElement.get()
88 0 : : nullptr);
89 : }
90 :
91 : void
92 0 : SVGAngle::ConvertToSpecifiedUnits(uint16_t unitType, ErrorResult& rv)
93 : {
94 0 : if (mType == AnimValue) {
95 0 : rv.Throw(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR);
96 0 : return;
97 : }
98 0 : rv = mVal->ConvertToSpecifiedUnits(unitType, mType == BaseValue ?
99 0 : mSVGElement.get() : nullptr);
100 : }
101 :
102 : void
103 0 : SVGAngle::SetValueAsString(const nsAString& aValue, ErrorResult& rv)
104 : {
105 0 : if (mType == AnimValue) {
106 0 : rv.Throw(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR);
107 0 : return;
108 : }
109 0 : bool isBaseVal = mType == BaseValue;
110 0 : rv = mVal->SetBaseValueString(aValue, isBaseVal ? mSVGElement.get() : nullptr,
111 0 : isBaseVal);
112 : }
113 :
114 : void
115 0 : SVGAngle::GetValueAsString(nsAString& aValue)
116 : {
117 0 : if (mType == AnimValue) {
118 0 : mVal->GetAnimValueString(aValue);
119 : } else {
120 0 : mVal->GetBaseValueString(aValue);
121 : }
122 0 : }
123 :
|