15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) Research In Motion Limited 2010. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA.
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef SVGRect_h
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define SVGRect_h
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "core/svg/properties/SVGProperty.h"
241e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatRect.h"
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class SVGRectTearOff;
2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
3007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochclass SVGRect : public SVGPropertyBase {
31f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)public:
3209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    typedef SVGRectTearOff TearOffType;
3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
34f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    struct InvalidSVGRectTag { };
35f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    static PassRefPtr<SVGRect> create()
3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return adoptRef(new SVGRect());
3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
4009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    static PassRefPtr<SVGRect> create(InvalidSVGRectTag)
4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return adoptRef(new SVGRect(InvalidSVGRectTag()));
4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    static PassRefPtr<SVGRect> create(const FloatRect& rect)
4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return adoptRef(new SVGRect(rect));
4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    PassRefPtr<SVGRect> clone() const;
5207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    virtual PassRefPtr<SVGPropertyBase> cloneForAnimation(const String&) const OVERRIDE;
5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    const FloatRect& value() const { return m_value; }
5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setValue(const FloatRect& v) { m_value = v; }
5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    float x() const { return m_value.x(); }
5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    float y() const { return m_value.y(); }
5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    float width() const { return m_value.width(); }
6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    float height() const { return m_value.height(); }
6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setX(float f) { m_value.setX(f); }
6209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setY(float f) { m_value.setY(f); }
6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setWidth(float f) { m_value.setWidth(f); }
6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setHeight(float f) { m_value.setHeight(f); }
6509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool operator==(const SVGRect&) const;
6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool operator!=(const SVGRect& other) const { return !operator==(other); }
6809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual String valueAsString() const OVERRIDE;
7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setValueAsString(const String&, ExceptionState&);
7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
72d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual void add(PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) OVERRIDE;
7307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    virtual void calculateAnimatedValue(SVGAnimationElement*, float percentage, unsigned repeatCount, PassRefPtr<SVGPropertyBase> from, PassRefPtr<SVGPropertyBase> to, PassRefPtr<SVGPropertyBase> toAtEndOfDurationValue, SVGElement* contextElement) OVERRIDE;
7407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    virtual float calculateDistance(PassRefPtr<SVGPropertyBase> to, SVGElement* contextElement) OVERRIDE;
75f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
76f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    bool isValid() const { return m_isValid; }
7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setInvalid();
7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    static AnimatedPropertyType classType() { return AnimatedRect; }
80f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
81f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)private:
8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    SVGRect();
8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    SVGRect(InvalidSVGRectTag);
8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    SVGRect(const FloatRect&);
8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    template<typename CharType>
8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void parse(const CharType*& ptr, const CharType* end, ExceptionState&);
8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
89f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    bool m_isValid;
9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    FloatRect m_value;
91f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)};
92e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
9307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochinline PassRefPtr<SVGRect> toSVGRect(PassRefPtr<SVGPropertyBase> passBase)
9409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
9507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    RefPtr<SVGPropertyBase> base = passBase;
9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    ASSERT(base->type() == SVGRect::classType());
9709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return static_pointer_cast<SVGRect>(base.release());
9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // SVGRect_h
103