summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/CSSBasicShapes.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/css/CSSBasicShapes.h')
-rw-r--r--Source/WebCore/css/CSSBasicShapes.h217
1 files changed, 114 insertions, 103 deletions
diff --git a/Source/WebCore/css/CSSBasicShapes.h b/Source/WebCore/css/CSSBasicShapes.h
index 006a0c538..8373e9dfa 100644
--- a/Source/WebCore/css/CSSBasicShapes.h
+++ b/Source/WebCore/css/CSSBasicShapes.h
@@ -33,116 +33,104 @@
#include "CSSPrimitiveValue.h"
#include "WindRule.h"
#include <wtf/RefPtr.h>
+#include <wtf/TypeCasts.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
+class SVGPathByteStream;
+
class CSSBasicShape : public RefCounted<CSSBasicShape> {
public:
enum Type {
- CSSBasicShapeRectangleType = 1,
- CSSBasicShapeCircleType = 2,
- CSSBasicShapeEllipseType = 3,
- CSSBasicShapePolygonType = 4,
- CSSBasicShapeInsetRectangleType = 5
+ CSSBasicShapePolygonType,
+ CSSBasicShapeCircleType,
+ CSSBasicShapeEllipseType,
+ CSSBasicShapeInsetType,
+ CSSBasicShapePathType
};
virtual Type type() const = 0;
virtual String cssText() const = 0;
virtual bool equals(const CSSBasicShape&) const = 0;
-#if ENABLE(CSS_VARIABLES)
- virtual String serializeResolvingVariables(const HashMap<AtomicString, String>&) const = 0;
- virtual bool hasVariableReference() const = 0;
-#endif
-
public:
virtual ~CSSBasicShape() { }
protected:
CSSBasicShape() { }
+ RefPtr<CSSPrimitiveValue> m_referenceBox;
};
-class CSSBasicShapeRectangle : public CSSBasicShape {
+class CSSBasicShapeInset final : public CSSBasicShape {
public:
- static PassRefPtr<CSSBasicShapeRectangle> create() { return adoptRef(new CSSBasicShapeRectangle); }
-
- CSSPrimitiveValue* x() const { return m_x.get(); }
- CSSPrimitiveValue* y() const { return m_y.get(); }
- CSSPrimitiveValue* width() const { return m_width.get(); }
- CSSPrimitiveValue* height() const { return m_height.get(); }
- CSSPrimitiveValue* radiusX() const { return m_radiusX.get(); }
- CSSPrimitiveValue* radiusY() const { return m_radiusY.get(); }
-
- void setX(PassRefPtr<CSSPrimitiveValue> x) { m_x = x; }
- void setY(PassRefPtr<CSSPrimitiveValue> y) { m_y = y; }
- void setWidth(PassRefPtr<CSSPrimitiveValue> width) { m_width = width; }
- void setHeight(PassRefPtr<CSSPrimitiveValue> height) { m_height = height; }
- void setRadiusX(PassRefPtr<CSSPrimitiveValue> radiusX) { m_radiusX = radiusX; }
- void setRadiusY(PassRefPtr<CSSPrimitiveValue> radiusY) { m_radiusY = radiusY; }
-
- virtual Type type() const { return CSSBasicShapeRectangleType; }
- virtual String cssText() const;
- virtual bool equals(const CSSBasicShape&) const;
-
-#if ENABLE(CSS_VARIABLES)
- virtual String serializeResolvingVariables(const HashMap<AtomicString, String>&) const;
- virtual bool hasVariableReference() const;
-#endif
-
-private:
- CSSBasicShapeRectangle() { }
-
- RefPtr<CSSPrimitiveValue> m_y;
- RefPtr<CSSPrimitiveValue> m_x;
- RefPtr<CSSPrimitiveValue> m_width;
- RefPtr<CSSPrimitiveValue> m_height;
- RefPtr<CSSPrimitiveValue> m_radiusX;
- RefPtr<CSSPrimitiveValue> m_radiusY;
-};
-
-class CSSBasicShapeInsetRectangle : public CSSBasicShape {
-public:
- static PassRefPtr<CSSBasicShapeInsetRectangle> create() { return adoptRef(new CSSBasicShapeInsetRectangle); }
+ static Ref<CSSBasicShapeInset> create() { return adoptRef(*new CSSBasicShapeInset); }
CSSPrimitiveValue* top() const { return m_top.get(); }
CSSPrimitiveValue* right() const { return m_right.get(); }
CSSPrimitiveValue* bottom() const { return m_bottom.get(); }
CSSPrimitiveValue* left() const { return m_left.get(); }
- CSSPrimitiveValue* radiusX() const { return m_radiusX.get(); }
- CSSPrimitiveValue* radiusY() const { return m_radiusY.get(); }
+
+ CSSPrimitiveValue* topLeftRadius() const { return m_topLeftRadius.get(); }
+ CSSPrimitiveValue* topRightRadius() const { return m_topRightRadius.get(); }
+ CSSPrimitiveValue* bottomRightRadius() const { return m_bottomRightRadius.get(); }
+ CSSPrimitiveValue* bottomLeftRadius() const { return m_bottomLeftRadius.get(); }
void setTop(PassRefPtr<CSSPrimitiveValue> top) { m_top = top; }
void setRight(PassRefPtr<CSSPrimitiveValue> right) { m_right = right; }
void setBottom(PassRefPtr<CSSPrimitiveValue> bottom) { m_bottom = bottom; }
void setLeft(PassRefPtr<CSSPrimitiveValue> left) { m_left = left; }
- void setRadiusX(PassRefPtr<CSSPrimitiveValue> radiusX) { m_radiusX = radiusX; }
- void setRadiusY(PassRefPtr<CSSPrimitiveValue> radiusY) { m_radiusY = radiusY; }
- virtual Type type() const { return CSSBasicShapeInsetRectangleType; }
- virtual String cssText() const;
- virtual bool equals(const CSSBasicShape&) const;
+ void updateShapeSize4Values(CSSPrimitiveValue* top, CSSPrimitiveValue* right, CSSPrimitiveValue* bottom, CSSPrimitiveValue* left)
+ {
+ setTop(top);
+ setRight(right);
+ setBottom(bottom);
+ setLeft(left);
+ }
+
+ void updateShapeSize1Value(CSSPrimitiveValue* value1)
+ {
+ updateShapeSize4Values(value1, value1, value1, value1);
+ }
+
+ void updateShapeSize2Values(CSSPrimitiveValue* value1, CSSPrimitiveValue* value2)
+ {
+ updateShapeSize4Values(value1, value2, value1, value2);
+ }
+
+ void updateShapeSize3Values(CSSPrimitiveValue* value1, CSSPrimitiveValue* value2, CSSPrimitiveValue* value3)
+ {
+ updateShapeSize4Values(value1, value2, value3, value2);
+ }
-#if ENABLE(CSS_VARIABLES)
- virtual String serializeResolvingVariables(const HashMap<AtomicString, String>&) const;
- virtual bool hasVariableReference() const;
-#endif
+ void setTopLeftRadius(PassRefPtr<CSSPrimitiveValue> radius) { m_topLeftRadius = radius; }
+ void setTopRightRadius(PassRefPtr<CSSPrimitiveValue> radius) { m_topRightRadius = radius; }
+ void setBottomRightRadius(PassRefPtr<CSSPrimitiveValue> radius) { m_bottomRightRadius = radius; }
+ void setBottomLeftRadius(PassRefPtr<CSSPrimitiveValue> radius) { m_bottomLeftRadius = radius; }
private:
- CSSBasicShapeInsetRectangle() { }
+ CSSBasicShapeInset() { }
+
+ virtual Type type() const override { return CSSBasicShapeInsetType; }
+ virtual String cssText() const override;
+ virtual bool equals(const CSSBasicShape&) const override;
- RefPtr<CSSPrimitiveValue> m_right;
RefPtr<CSSPrimitiveValue> m_top;
+ RefPtr<CSSPrimitiveValue> m_right;
RefPtr<CSSPrimitiveValue> m_bottom;
RefPtr<CSSPrimitiveValue> m_left;
- RefPtr<CSSPrimitiveValue> m_radiusX;
- RefPtr<CSSPrimitiveValue> m_radiusY;
+
+ RefPtr<CSSPrimitiveValue> m_topLeftRadius;
+ RefPtr<CSSPrimitiveValue> m_topRightRadius;
+ RefPtr<CSSPrimitiveValue> m_bottomRightRadius;
+ RefPtr<CSSPrimitiveValue> m_bottomLeftRadius;
};
-class CSSBasicShapeCircle : public CSSBasicShape {
+class CSSBasicShapeCircle final : public CSSBasicShape {
public:
- static PassRefPtr<CSSBasicShapeCircle> create() { return adoptRef(new CSSBasicShapeCircle); }
+ static Ref<CSSBasicShapeCircle> create() { return adoptRef(*new CSSBasicShapeCircle); }
CSSPrimitiveValue* centerX() const { return m_centerX.get(); }
CSSPrimitiveValue* centerY() const { return m_centerY.get(); }
@@ -152,26 +140,21 @@ public:
void setCenterY(PassRefPtr<CSSPrimitiveValue> centerY) { m_centerY = centerY; }
void setRadius(PassRefPtr<CSSPrimitiveValue> radius) { m_radius = radius; }
- virtual Type type() const { return CSSBasicShapeCircleType; }
- virtual String cssText() const;
- virtual bool equals(const CSSBasicShape&) const;
-
-#if ENABLE(CSS_VARIABLES)
- virtual String serializeResolvingVariables(const HashMap<AtomicString, String>&) const;
- virtual bool hasVariableReference() const;
-#endif
-
private:
CSSBasicShapeCircle() { }
- RefPtr<CSSPrimitiveValue> m_centerY;
+ virtual Type type() const override { return CSSBasicShapeCircleType; }
+ virtual String cssText() const override;
+ virtual bool equals(const CSSBasicShape&) const override;
+
RefPtr<CSSPrimitiveValue> m_centerX;
+ RefPtr<CSSPrimitiveValue> m_centerY;
RefPtr<CSSPrimitiveValue> m_radius;
};
-class CSSBasicShapeEllipse : public CSSBasicShape {
+class CSSBasicShapeEllipse final : public CSSBasicShape {
public:
- static PassRefPtr<CSSBasicShapeEllipse> create() { return adoptRef(new CSSBasicShapeEllipse); }
+ static Ref<CSSBasicShapeEllipse> create() { return adoptRef(*new CSSBasicShapeEllipse); }
CSSPrimitiveValue* centerX() const { return m_centerX.get(); }
CSSPrimitiveValue* centerY() const { return m_centerY.get(); }
@@ -183,27 +166,22 @@ public:
void setRadiusX(PassRefPtr<CSSPrimitiveValue> radiusX) { m_radiusX = radiusX; }
void setRadiusY(PassRefPtr<CSSPrimitiveValue> radiusY) { m_radiusY = radiusY; }
- virtual Type type() const { return CSSBasicShapeEllipseType; }
- virtual String cssText() const;
- virtual bool equals(const CSSBasicShape&) const;
-
-#if ENABLE(CSS_VARIABLES)
- virtual String serializeResolvingVariables(const HashMap<AtomicString, String>&) const;
- virtual bool hasVariableReference() const;
-#endif
-
private:
CSSBasicShapeEllipse() { }
+ virtual Type type() const override { return CSSBasicShapeEllipseType; }
+ virtual String cssText() const override;
+ virtual bool equals(const CSSBasicShape&) const override;
+
RefPtr<CSSPrimitiveValue> m_centerX;
RefPtr<CSSPrimitiveValue> m_centerY;
RefPtr<CSSPrimitiveValue> m_radiusX;
RefPtr<CSSPrimitiveValue> m_radiusY;
};
-class CSSBasicShapePolygon : public CSSBasicShape {
+class CSSBasicShapePolygon final : public CSSBasicShape {
public:
- static PassRefPtr<CSSBasicShapePolygon> create() { return adoptRef(new CSSBasicShapePolygon); }
+ static Ref<CSSBasicShapePolygon> create() { return adoptRef(*new CSSBasicShapePolygon); }
void appendPoint(PassRefPtr<CSSPrimitiveValue> x, PassRefPtr<CSSPrimitiveValue> y)
{
@@ -211,31 +189,64 @@ public:
m_values.append(y);
}
- PassRefPtr<CSSPrimitiveValue> getXAt(unsigned i) const { return m_values.at(i * 2); }
- PassRefPtr<CSSPrimitiveValue> getYAt(unsigned i) const { return m_values.at(i * 2 + 1); }
- const Vector<RefPtr<CSSPrimitiveValue> >& values() const { return m_values; }
+ RefPtr<CSSPrimitiveValue> getXAt(unsigned i) const { return m_values.at(i * 2); }
+ RefPtr<CSSPrimitiveValue> getYAt(unsigned i) const { return m_values.at(i * 2 + 1); }
+ const Vector<RefPtr<CSSPrimitiveValue>>& values() const { return m_values; }
- void setWindRule(WindRule w) { m_windRule = w; }
+ void setWindRule(WindRule rule) { m_windRule = rule; }
WindRule windRule() const { return m_windRule; }
- virtual Type type() const { return CSSBasicShapePolygonType; }
- virtual String cssText() const;
- virtual bool equals(const CSSBasicShape&) const;
-#if ENABLE(CSS_VARIABLES)
- virtual String serializeResolvingVariables(const HashMap<AtomicString, String>&) const;
- virtual bool hasVariableReference() const;
-#endif
-
private:
CSSBasicShapePolygon()
: m_windRule(RULE_NONZERO)
{
}
- Vector<RefPtr<CSSPrimitiveValue> > m_values;
+ virtual Type type() const override { return CSSBasicShapePolygonType; }
+ virtual String cssText() const override;
+ virtual bool equals(const CSSBasicShape&) const override;
+
+ Vector<RefPtr<CSSPrimitiveValue>> m_values;
WindRule m_windRule;
};
+class CSSBasicShapePath final : public CSSBasicShape {
+public:
+ static Ref<CSSBasicShapePath> create(std::unique_ptr<SVGPathByteStream>&& pathData)
+ {
+ return adoptRef(*new CSSBasicShapePath(WTFMove(pathData)));
+ }
+
+ const SVGPathByteStream& pathData() const
+ {
+ return *m_byteStream;
+ }
+
+ void setWindRule(WindRule rule) { m_windRule = rule; }
+ WindRule windRule() const { return m_windRule; }
+
+private:
+ CSSBasicShapePath(std::unique_ptr<SVGPathByteStream>&&);
+
+ virtual Type type() const override { return CSSBasicShapePathType; }
+ virtual String cssText() const override;
+ virtual bool equals(const CSSBasicShape&) const override;
+
+ std::unique_ptr<SVGPathByteStream> m_byteStream;
+ WindRule m_windRule { RULE_NONZERO };
+};
+
} // namespace WebCore
+#define SPECIALIZE_TYPE_TRAITS_CSS_BASIC_SHAPES(ToValueTypeName) \
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToValueTypeName) \
+ static bool isType(const WebCore::CSSBasicShape& basicShape) { return basicShape.type() == WebCore::CSSBasicShape::ToValueTypeName##Type; } \
+SPECIALIZE_TYPE_TRAITS_END()
+
+SPECIALIZE_TYPE_TRAITS_CSS_BASIC_SHAPES(CSSBasicShapeInset)
+SPECIALIZE_TYPE_TRAITS_CSS_BASIC_SHAPES(CSSBasicShapeCircle)
+SPECIALIZE_TYPE_TRAITS_CSS_BASIC_SHAPES(CSSBasicShapeEllipse)
+SPECIALIZE_TYPE_TRAITS_CSS_BASIC_SHAPES(CSSBasicShapePolygon)
+SPECIALIZE_TYPE_TRAITS_CSS_BASIC_SHAPES(CSSBasicShapePath)
+
#endif // CSSBasicShapes_h