~ubuntu-branches/ubuntu/raring/qtwebkit-source/raring-proposed

« back to all changes in this revision

Viewing changes to Source/WebCore/platform/graphics/RoundedRect.h

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-02-18 14:24:18 UTC
  • Revision ID: package-import@ubuntu.com-20130218142418-eon0jmjg3nj438uy
Tags: upstream-2.3
ImportĀ upstreamĀ versionĀ 2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2003, 2006, 2009 Apple Inc. All rights reserved.
 
3
 * Copyright (C) 2010 Google Inc. All rights reserved.
 
4
 *
 
5
 * Redistribution and use in source and binary forms, with or without
 
6
 * modification, are permitted provided that the following conditions
 
7
 * are met:
 
8
 *
 
9
 * 1.  Redistributions of source code must retain the above copyright
 
10
 *     notice, this list of conditions and the following disclaimer.
 
11
 * 2.  Redistributions in binary form must reproduce the above copyright
 
12
 *     notice, this list of conditions and the following disclaimer in the
 
13
 *     documentation and/or other materials provided with the distribution.
 
14
 *
 
15
 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
 
16
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 
17
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
18
 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 
19
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 
20
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 
21
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 
22
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
23
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 
24
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
25
 */
 
26
 
 
27
#ifndef RoundedRect_h
 
28
#define RoundedRect_h
 
29
 
 
30
#include "IntRect.h"
 
31
 
 
32
namespace WebCore {
 
33
 
 
34
 
 
35
class RoundedRect {
 
36
public:
 
37
    class Radii {
 
38
    public:
 
39
        Radii() {}
 
40
        Radii(const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight)
 
41
            : m_topLeft(topLeft)
 
42
            , m_topRight(topRight)
 
43
            , m_bottomLeft(bottomLeft)
 
44
            , m_bottomRight(bottomRight)
 
45
        {
 
46
        }
 
47
 
 
48
        void setTopLeft(const IntSize& size) { m_topLeft = size; }
 
49
        void setTopRight(const IntSize& size) { m_topRight = size; }
 
50
        void setBottomLeft(const IntSize& size) { m_bottomLeft = size; }
 
51
        void setBottomRight(const IntSize& size) { m_bottomRight = size; }
 
52
        const IntSize& topLeft() const { return m_topLeft; }
 
53
        const IntSize& topRight() const { return m_topRight; }
 
54
        const IntSize& bottomLeft() const { return m_bottomLeft; }
 
55
        const IntSize& bottomRight() const { return m_bottomRight; }
 
56
 
 
57
        bool isZero() const;
 
58
 
 
59
        void includeLogicalEdges(const Radii& edges, bool isHorizontal, bool includeLogicalLeftEdge, bool includeLogicalRightEdge);
 
60
        void excludeLogicalEdges(bool isHorizontal, bool excludeLogicalLeftEdge, bool excludeLogicalRightEdge);
 
61
 
 
62
        void scale(float factor);
 
63
        void expand(int topWidth, int bottomWidth, int leftWidth, int rightWidth);
 
64
        void expand(int size) { expand(size, size, size, size); }
 
65
        void shrink(int topWidth, int bottomWidth, int leftWidth, int rightWidth) { expand(-topWidth, -bottomWidth, -leftWidth, -rightWidth); }
 
66
        void shrink(int size) { shrink(size, size, size, size); }
 
67
 
 
68
    private:
 
69
        IntSize m_topLeft;
 
70
        IntSize m_topRight;
 
71
        IntSize m_bottomLeft;
 
72
        IntSize m_bottomRight;
 
73
    };
 
74
 
 
75
    explicit RoundedRect(const IntRect&, const Radii& = Radii());
 
76
    RoundedRect(int x, int y, int width, int height);
 
77
    RoundedRect(const IntRect&, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight);
 
78
 
 
79
    const IntRect& rect() const { return m_rect; }
 
80
    const Radii& radii() const { return m_radii; }
 
81
    bool isRounded() const { return !m_radii.isZero(); }
 
82
    bool isEmpty() const { return m_rect.isEmpty(); }
 
83
 
 
84
    void setRect(const IntRect& rect) { m_rect = rect; }
 
85
    void setRadii(const Radii& radii) { m_radii = radii; }
 
86
 
 
87
    void move(const IntSize& size) { m_rect.move(size); }
 
88
    void inflate(int size) { m_rect.inflate(size);  }
 
89
    void inflateWithRadii(int size);
 
90
    void expandRadii(int size) { m_radii.expand(size); }
 
91
    void shrinkRadii(int size) { m_radii.shrink(size); }
 
92
 
 
93
    void includeLogicalEdges(const Radii& edges, bool isHorizontal, bool includeLogicalLeftEdge, bool includeLogicalRightEdge);
 
94
    void excludeLogicalEdges(bool isHorizontal, bool excludeLogicalLeftEdge, bool excludeLogicalRightEdge);
 
95
 
 
96
    bool isRenderable() const;
 
97
    void adjustRadii();
 
98
 
 
99
private:
 
100
    IntRect m_rect;
 
101
    Radii m_radii;
 
102
};
 
103
 
 
104
inline bool operator==(const RoundedRect::Radii& a, const RoundedRect::Radii& b)
 
105
{
 
106
    return a.topLeft() == b.topLeft() && a.topRight() == b.topRight() && a.bottomLeft() == b.bottomLeft() && a.bottomRight() == b.bottomRight();
 
107
}
 
108
 
 
109
inline bool operator==(const RoundedRect& a, const RoundedRect& b)
 
110
{
 
111
    return a.rect() == b.rect() && a.radii() == b.radii();
 
112
}
 
113
 
 
114
 
 
115
} // namespace WebCore
 
116
 
 
117
#endif // RoundedRect_h