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