1 /*
2 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20 #ifndef SVGRect_h
21 #define SVGRect_h
22
23 #include "core/svg/properties/SVGPropertyHelper.h"
24 #include "platform/geometry/FloatRect.h"
25
26 namespace blink {
27
28 class SVGRectTearOff;
29
30 class SVGRect : public SVGPropertyHelper<SVGRect> {
31 public:
32 typedef SVGRectTearOff TearOffType;
33
34 struct InvalidSVGRectTag { };
35
create()36 static PassRefPtr<SVGRect> create()
37 {
38 return adoptRef(new SVGRect());
39 }
40
create(InvalidSVGRectTag)41 static PassRefPtr<SVGRect> create(InvalidSVGRectTag)
42 {
43 return adoptRef(new SVGRect(InvalidSVGRectTag()));
44 }
45
create(const FloatRect & rect)46 static PassRefPtr<SVGRect> create(const FloatRect& rect)
47 {
48 return adoptRef(new SVGRect(rect));
49 }
50
51 PassRefPtr<SVGRect> clone() const;
52
value()53 const FloatRect& value() const { return m_value; }
setValue(const FloatRect & v)54 void setValue(const FloatRect& v) { m_value = v; }
55
x()56 float x() const { return m_value.x(); }
y()57 float y() const { return m_value.y(); }
width()58 float width() const { return m_value.width(); }
height()59 float height() const { return m_value.height(); }
setX(float f)60 void setX(float f) { m_value.setX(f); }
setY(float f)61 void setY(float f) { m_value.setY(f); }
setWidth(float f)62 void setWidth(float f) { m_value.setWidth(f); }
setHeight(float f)63 void setHeight(float f) { m_value.setHeight(f); }
64
65 virtual String valueAsString() const OVERRIDE;
66 void setValueAsString(const String&, ExceptionState&);
67
68 virtual void add(PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) OVERRIDE;
69 virtual void calculateAnimatedValue(SVGAnimationElement*, float percentage, unsigned repeatCount, PassRefPtr<SVGPropertyBase> from, PassRefPtr<SVGPropertyBase> to, PassRefPtr<SVGPropertyBase> toAtEndOfDurationValue, SVGElement* contextElement) OVERRIDE;
70 virtual float calculateDistance(PassRefPtr<SVGPropertyBase> to, SVGElement* contextElement) OVERRIDE;
71
isValid()72 bool isValid() const { return m_isValid; }
73 void setInvalid();
74
classType()75 static AnimatedPropertyType classType() { return AnimatedRect; }
76
77 private:
78 SVGRect();
79 SVGRect(InvalidSVGRectTag);
80 SVGRect(const FloatRect&);
81
82 template<typename CharType>
83 void parse(const CharType*& ptr, const CharType* end, ExceptionState&);
84
85 bool m_isValid;
86 FloatRect m_value;
87 };
88
toSVGRect(PassRefPtr<SVGPropertyBase> passBase)89 inline PassRefPtr<SVGRect> toSVGRect(PassRefPtr<SVGPropertyBase> passBase)
90 {
91 RefPtr<SVGPropertyBase> base = passBase;
92 ASSERT(base->type() == SVGRect::classType());
93 return static_pointer_cast<SVGRect>(base.release());
94 }
95
96 } // namespace blink
97
98 #endif // SVGRect_h
99