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/SVGPropertyTraits.h"
24#include "platform/geometry/FloatRect.h"
25#include "wtf/text/StringBuilder.h"
26
27namespace WebCore {
28
29class SVGRect : public FloatRect {
30public:
31    struct InvalidSVGRectTag { };
32
33    SVGRect()
34        : m_isValid(true) { }
35    SVGRect(InvalidSVGRectTag)
36        : m_isValid(false) { }
37    SVGRect(const FloatRect& rect)
38        : FloatRect(rect), m_isValid(true) { }
39    SVGRect(const FloatPoint& location, const FloatSize& size)
40        : FloatRect(location, size), m_isValid(true) { }
41    SVGRect(float x, float y, float width, float height)
42        : FloatRect(x, y, width, height), m_isValid(true) { }
43    SVGRect(const IntRect& intRect)
44        : FloatRect(intRect), m_isValid(true) { }
45    SVGRect(const LayoutRect& layoutRect)
46        : FloatRect(layoutRect), m_isValid(true) { }
47    SVGRect(const SkRect& skRect)
48        : FloatRect(skRect), m_isValid(true) { }
49
50    bool isValid() const { return m_isValid; }
51
52private:
53    bool m_isValid;
54};
55
56template<>
57struct SVGPropertyTraits<SVGRect> {
58    static SVGRect initialValue() { return SVGRect(SVGRect::InvalidSVGRectTag()); }
59    static String toString(const SVGRect& type)
60    {
61        StringBuilder builder;
62        builder.append(String::number(type.x()));
63        builder.append(' ');
64        builder.append(String::number(type.y()));
65        builder.append(' ');
66        builder.append(String::number(type.width()));
67        builder.append(' ');
68        builder.append(String::number(type.height()));
69        return builder.toString();
70    }
71};
72
73} // namespace WebCore
74
75#endif // SVGRect_h
76