Home | History | Annotate | Download | only in shapes
      1 /*
      2  * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * 1. Redistributions of source code must retain the above
      9  *    copyright notice, this list of conditions and the following
     10  *    disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above
     12  *    copyright notice, this list of conditions and the following
     13  *    disclaimer in the documentation and/or other materials
     14  *    provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     19  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     20  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     21  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     23  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     25  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     27  * OF THE POSSIBILITY OF SUCH DAMAGE.
     28  */
     29 
     30 #ifndef RectangleShape_h
     31 #define RectangleShape_h
     32 
     33 #include "core/platform/graphics/FloatPoint.h"
     34 #include "core/platform/graphics/FloatRect.h"
     35 #include "core/platform/graphics/FloatSize.h"
     36 #include "core/rendering/shapes/Shape.h"
     37 #include "wtf/Assertions.h"
     38 #include "wtf/Vector.h"
     39 
     40 namespace WebCore {
     41 
     42 class FloatRoundedRect : public FloatRect {
     43 public:
     44     FloatRoundedRect() { }
     45     FloatRoundedRect(const FloatRect& bounds, const FloatSize& radii)
     46         : FloatRect(bounds)
     47         , m_radii(radii)
     48     {
     49     }
     50 
     51     float rx() const { return m_radii.width(); }
     52     float ry() const { return m_radii.height(); }
     53     FloatRoundedRect marginBounds(float margin) const;
     54     FloatRoundedRect paddingBounds(float padding) const;
     55     FloatPoint cornerInterceptForWidth(float width) const;
     56 
     57 private:
     58     FloatSize m_radii;
     59 };
     60 
     61 class RectangleShape : public Shape {
     62 public:
     63     RectangleShape(const FloatRect& bounds, const FloatSize& radii)
     64         : Shape()
     65         , m_bounds(bounds, radii)
     66         , m_haveInitializedMarginBounds(false)
     67         , m_haveInitializedPaddingBounds(false)
     68     {
     69     }
     70 
     71     virtual LayoutRect shapeMarginLogicalBoundingBox() const OVERRIDE { return static_cast<LayoutRect>(shapeMarginBounds()); }
     72     virtual LayoutRect shapePaddingLogicalBoundingBox() const OVERRIDE { return static_cast<LayoutRect>(shapePaddingBounds()); }
     73     virtual bool isEmpty() const OVERRIDE { return m_bounds.isEmpty(); }
     74     virtual void getExcludedIntervals(LayoutUnit logicalTop, LayoutUnit logicalHeight, SegmentList&) const OVERRIDE;
     75     virtual void getIncludedIntervals(LayoutUnit logicalTop, LayoutUnit logicalHeight, SegmentList&) const OVERRIDE;
     76     virtual bool firstIncludedIntervalLogicalTop(LayoutUnit minLogicalIntervalTop, const LayoutSize& minLogicalIntervalSize, LayoutUnit&) const OVERRIDE;
     77 
     78 private:
     79     FloatRoundedRect shapeMarginBounds() const;
     80     FloatRoundedRect shapePaddingBounds() const;
     81 
     82     FloatRoundedRect m_bounds;
     83     mutable FloatRoundedRect m_marginBounds;
     84     mutable FloatRoundedRect m_paddingBounds;
     85     mutable bool m_haveInitializedMarginBounds : 1;
     86     mutable bool m_haveInitializedPaddingBounds : 1;
     87 };
     88 
     89 } // namespace WebCore
     90 
     91 #endif // RectangleShape_h
     92