1 | /* |
2 | * Copyright (C) 2013 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 HOLDER “AS IS” AND ANY |
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
19 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE |
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
21 | * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
22 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
23 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR |
25 | * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF |
26 | * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
27 | * SUCH DAMAGE. |
28 | */ |
29 | |
30 | #ifndef IntRectExtent_h |
31 | #define IntRectExtent_h |
32 | |
33 | #include "LayoutRect.h" |
34 | |
35 | namespace WebCore { |
36 | |
37 | class IntRectExtent { |
38 | public: |
39 | IntRectExtent() |
40 | : m_top(0) |
41 | , m_right(0) |
42 | , m_bottom(0) |
43 | , m_left(0) |
44 | { |
45 | } |
46 | |
47 | IntRectExtent(int top, int right, int bottom, int left) |
48 | : m_top(top) |
49 | , m_right(right) |
50 | , m_bottom(bottom) |
51 | , m_left(left) |
52 | { |
53 | } |
54 | |
55 | int top() const { return m_top; } |
56 | void setTop(int top) { m_top = top; } |
57 | |
58 | int right() const { return m_right; } |
59 | void setRight(int right) { m_right = right; } |
60 | |
61 | int bottom() const { return m_bottom; } |
62 | void setBottom(int bottom) { m_bottom = bottom; } |
63 | |
64 | int left() const { return m_left; } |
65 | void setLeft(int left) { m_left = left; } |
66 | |
67 | void expandRect(LayoutRect& rect) const |
68 | { |
69 | if (isZero()) |
70 | return; |
71 | |
72 | rect.move(-left(), -top()); |
73 | rect.expand(left() + right(), top() + bottom()); |
74 | } |
75 | |
76 | private: |
77 | bool isZero() const { return !left() && !right() && !top() && !bottom(); } |
78 | |
79 | int m_top; |
80 | int m_right; |
81 | int m_bottom; |
82 | int m_left; |
83 | }; |
84 | |
85 | inline bool operator==(const IntRectExtent& a, const IntRectExtent& b) |
86 | { |
87 | return a.top() == b.top() |
88 | && a.right() == b.right() |
89 | && a.bottom() == b.bottom() |
90 | && a.left() == b.left(); |
91 | } |
92 | |
93 | inline bool operator!=(const IntRectExtent& a, const IntRectExtent& b) |
94 | { |
95 | return !(a == b); |
96 | } |
97 | |
98 | inline void operator+=(IntRectExtent& a, const IntRectExtent& b) |
99 | { |
100 | a.setTop(a.top() + b.top()); |
101 | a.setRight(a.right() + b.right()); |
102 | a.setBottom(a.bottom() + b.bottom()); |
103 | a.setLeft(a.left() + b.left()); |
104 | } |
105 | |
106 | } // namespace WebCore |
107 | |
108 | #endif // IntRectExtent_h |
109 | |