15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    copyright notice, this list of conditions and the following
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    disclaimer.
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    copyright notice, this list of conditions and the following
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    disclaimer in the documentation and/or other materials
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    provided with the distribution.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SUCH DAMAGE.
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef CSSBasicShapes_h
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define CSSBasicShapes_h
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSPrimitiveValue.h"
34e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "platform/graphics/GraphicsTypes.h"
35e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/RefPtr.h"
36e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Vector.h"
37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/text/WTFString.h"
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
39c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CSSBasicShape : public RefCountedWillBeGarbageCollected<CSSBasicShape> {
42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(CSSBasicShape);
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum Type {
4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        CSSBasicShapeEllipseType,
4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        CSSBasicShapePolygonType,
4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        CSSBasicShapeCircleType,
4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        CSSBasicShapeInsetType
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual Type type() const = 0;
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual String cssText() const = 0;
53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual bool equals(const CSSBasicShape&) const = 0;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    CSSPrimitiveValue* referenceBox() const { return m_referenceBox.get(); }
56aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void setReferenceBox(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> referenceBox) { m_referenceBox = referenceBox; }
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
58aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    virtual void trace(Visitor* visitor) { visitor->trace(m_referenceBox); }
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected:
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CSSBasicShape() { }
62aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    RefPtrWillBeMember<CSSPrimitiveValue> m_referenceBox;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class CSSBasicShapeCircle FINAL : public CSSBasicShape {
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static PassRefPtrWillBeRawPtr<CSSBasicShapeCircle> create() { return adoptRefWillBeNoop(new CSSBasicShapeCircle); }
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual Type type() const OVERRIDE { return CSSBasicShapeCircleType; }
7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual String cssText() const OVERRIDE;
7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool equals(const CSSBasicShape&) const OVERRIDE;
7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* centerX() const { return m_centerX.get(); }
7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* centerY() const { return m_centerY.get(); }
7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* radius() const { return m_radius.get(); }
7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setCenterX(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> centerX) { m_centerX = centerX; }
78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setCenterY(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> centerY) { m_centerY = centerY; }
79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setRadius(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> radius) { m_radius = radius; }
80d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
81d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual void trace(Visitor*);
8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)private:
8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSBasicShapeCircle() { }
8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
86d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_centerX;
87d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_centerY;
88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_radius;
8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)};
9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
9109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class CSSBasicShapeEllipse FINAL : public CSSBasicShape {
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
93d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static PassRefPtrWillBeRawPtr<CSSBasicShapeEllipse> create() { return adoptRefWillBeNoop(new CSSBasicShapeEllipse); }
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual Type type() const OVERRIDE { return CSSBasicShapeEllipseType; }
9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual String cssText() const OVERRIDE;
9709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool equals(const CSSBasicShape&) const OVERRIDE;
9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CSSPrimitiveValue* centerX() const { return m_centerX.get(); }
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CSSPrimitiveValue* centerY() const { return m_centerY.get(); }
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CSSPrimitiveValue* radiusX() const { return m_radiusX.get(); }
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CSSPrimitiveValue* radiusY() const { return m_radiusY.get(); }
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
104d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setCenterX(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> centerX) { m_centerX = centerX; }
105d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setCenterY(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> centerY) { m_centerY = centerY; }
106d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setRadiusX(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> radiusX) { m_radiusX = radiusX; }
107d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setRadiusY(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> radiusY) { m_radiusY = radiusY; }
108d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
109d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual void trace(Visitor*);
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)private:
11209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSBasicShapeEllipse() { }
11309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
114d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_centerX;
115d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_centerY;
116d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_radiusX;
117d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_radiusY;
11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)};
11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
12009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class CSSBasicShapePolygon FINAL : public CSSBasicShape {
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
122d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static PassRefPtrWillBeRawPtr<CSSBasicShapePolygon> create() { return adoptRefWillBeNoop(new CSSBasicShapePolygon); }
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void appendPoint(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> x, PassRefPtrWillBeRawPtr<CSSPrimitiveValue> y)
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_values.append(x);
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_values.append(y);
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
130d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> getXAt(unsigned i) const { return m_values.at(i * 2); }
131d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CSSPrimitiveValue> getYAt(unsigned i) const { return m_values.at(i * 2 + 1); }
132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    const WillBeHeapVector<RefPtrWillBeMember<CSSPrimitiveValue> >& values() const { return m_values; }
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setWindRule(WindRule w) { m_windRule = w; }
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WindRule windRule() const { return m_windRule; }
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual Type type() const OVERRIDE { return CSSBasicShapePolygonType; }
13809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual String cssText() const OVERRIDE;
13909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool equals(const CSSBasicShape&) const OVERRIDE;
140d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
141d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual void trace(Visitor*);
142d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CSSBasicShapePolygon()
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        : m_windRule(RULE_NONZERO)
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
149d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WillBeHeapVector<RefPtrWillBeMember<CSSPrimitiveValue> > m_values;
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WindRule m_windRule;
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class CSSBasicShapeInset : public CSSBasicShape {
15409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)public:
155d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static PassRefPtrWillBeRawPtr<CSSBasicShapeInset> create() { return adoptRefWillBeNoop(new CSSBasicShapeInset); }
15609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
15709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* top() const { return m_top.get(); }
15809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* right() const { return m_right.get(); }
15909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* bottom() const { return m_bottom.get(); }
16009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* left() const { return m_left.get(); }
16109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
16209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* topLeftRadius() const { return m_topLeftRadius.get(); }
16309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* topRightRadius() const { return m_topRightRadius.get(); }
16409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* bottomRightRadius() const { return m_bottomRightRadius.get(); }
16509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSPrimitiveValue* bottomLeftRadius() const { return m_bottomLeftRadius.get(); }
16609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
167d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setTop(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> top) { m_top = top; }
168d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setRight(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> right) { m_right = right; }
169d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setBottom(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> bottom) { m_bottom = bottom; }
170d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setLeft(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> left) { m_left = left; }
17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
17209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void updateShapeSize4Values(CSSPrimitiveValue* top, CSSPrimitiveValue* right, CSSPrimitiveValue* bottom, CSSPrimitiveValue* left)
17309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
17409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        setTop(top);
17509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        setRight(right);
17609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        setBottom(bottom);
17709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        setLeft(left);
17809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
17909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
18009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void updateShapeSize1Value(CSSPrimitiveValue* value1)
18109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
18209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        updateShapeSize4Values(value1, value1, value1, value1);
18309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
18409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
18509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void updateShapeSize2Values(CSSPrimitiveValue* value1,  CSSPrimitiveValue* value2)
18609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
18709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        updateShapeSize4Values(value1, value2, value1, value2);
18809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
18909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
19009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void updateShapeSize3Values(CSSPrimitiveValue* value1, CSSPrimitiveValue* value2,  CSSPrimitiveValue* value3)
19109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
19209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        updateShapeSize4Values(value1, value2, value3, value2);
19309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
19409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
196d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setTopLeftRadius(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> radius) { m_topLeftRadius = radius; }
197d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setTopRightRadius(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> radius) { m_topRightRadius = radius; }
198d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setBottomRightRadius(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> radius) { m_bottomRightRadius = radius; }
199d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setBottomLeftRadius(PassRefPtrWillBeRawPtr<CSSPrimitiveValue> radius) { m_bottomLeftRadius = radius; }
20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual Type type() const OVERRIDE { return CSSBasicShapeInsetType; }
20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual String cssText() const OVERRIDE;
20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool equals(const CSSBasicShape&) const OVERRIDE;
20409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
205d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual void trace(Visitor*);
206d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)private:
20809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    CSSBasicShapeInset() { }
20909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
210d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_top;
211d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_right;
212d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_bottom;
213d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_left;
21409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
215d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_topLeftRadius;
216d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_topRightRadius;
217d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_bottomRightRadius;
218d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RefPtrWillBeMember<CSSPrimitiveValue> m_bottomLeftRadius;
21909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)};
22009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
221c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // CSSBasicShapes_h
224