#ifndef RectangleShape_h
#define RectangleShape_h
#include "FloatPoint.h"
#include "FloatRect.h"
#include "FloatSize.h"
#include "Shape.h"
#include <wtf/Assertions.h>
#include <wtf/Vector.h>
namespace WebCore {
class FloatRoundedRect : public FloatRect {
public:
FloatRoundedRect() { }
FloatRoundedRect(const FloatRect& bounds, const FloatSize& radii)
: FloatRect(bounds)
, m_radii(radii)
{
}
float rx() const { return m_radii.width(); }
float ry() const { return m_radii.height(); }
FloatRoundedRect marginBounds(float margin) const;
FloatRoundedRect paddingBounds(float padding) const;
FloatPoint cornerInterceptForWidth(float width) const;
private:
FloatSize m_radii;
};
class RectangleShape : public Shape {
public:
RectangleShape(const FloatRect& bounds, const FloatSize& radii)
: Shape()
, m_bounds(bounds, radii)
, m_haveInitializedMarginBounds(false)
, m_haveInitializedPaddingBounds(false)
{
}
virtual LayoutRect shapeMarginLogicalBoundingBox() const OVERRIDE { return static_cast<LayoutRect>(shapeMarginBounds()); }
virtual LayoutRect shapePaddingLogicalBoundingBox() const OVERRIDE { return static_cast<LayoutRect>(shapePaddingBounds()); }
virtual bool isEmpty() const OVERRIDE { return m_bounds.isEmpty(); }
virtual void getExcludedIntervals(LayoutUnit logicalTop, LayoutUnit logicalHeight, SegmentList&) const OVERRIDE;
virtual void getIncludedIntervals(LayoutUnit logicalTop, LayoutUnit logicalHeight, SegmentList&) const OVERRIDE;
virtual bool firstIncludedIntervalLogicalTop(LayoutUnit minLogicalIntervalTop, const LayoutSize& minLogicalIntervalSize, LayoutUnit&) const OVERRIDE;
private:
FloatRoundedRect shapeMarginBounds() const;
FloatRoundedRect shapePaddingBounds() const;
FloatRoundedRect m_bounds;
mutable FloatRoundedRect m_marginBounds;
mutable FloatRoundedRect m_paddingBounds;
mutable bool m_haveInitializedMarginBounds : 1;
mutable bool m_haveInitializedPaddingBounds : 1;
};
}
#endif // RectangleShape_h