1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     util_Rect.h
4 
5   Copyright (C)2009-2012 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 46347 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_UTIL_UTIL_RECT_H_
17 #define NN_UTIL_UTIL_RECT_H_
18 
19 #ifdef __cplusplus
20 
21 namespace nn { namespace util {
22 
23 //--------------------------------------------------------------------------
24 //
25 //---------------------------------------------------------------------------
26 struct Rect
27 {
28 public:
29     /* ------------------------------------------------------------------------
30             Variables
31        ------------------------------------------------------------------------ */
32     f32 left;     //
33     f32 top;      //
34     f32 right;    //
35     f32 bottom;   //
36 
37     /* ------------------------------------------------------------------------
38             Functions
39        ------------------------------------------------------------------------ */
40     //----------------------------------------
41     //
42     //
43 
44     //--------------------------------------------------------------------------
45     //
46     //---------------------------------------------------------------------------
RectRect47     Rect()
48     : left(0),
49       top(0),
50       right(0),
51       bottom(0)
52     {
53     }
54 
55     //--------------------------------------------------------------------------
56     //
57     //
58     //
59     //
60     //
61     //
62     //---------------------------------------------------------------------------
RectRect63     Rect(f32 l, f32 t, f32 r, f32 b)
64     : left(l),
65       top(t),
66       right(r),
67       bottom(b)
68     {
69     }
70 
71     //--------------------------------------------------------------------------
72     //
73     //---------------------------------------------------------------------------
RectRect74     Rect(const Rect& v)
75     : left(v.left),
76       top(v.top),
77       right(v.right),
78       bottom(v.bottom)
79     {
80     }
81 
82     //--------------------------------------------------------------------------
83     //
84     //---------------------------------------------------------------------------
~RectRect85     ~Rect() {}
86 
87     //
88 
89     //----------------------------------------
90     //
91     //
92 
93     //--------------------------------------------------------------------------
94     //
95     //
96     //
97     //---------------------------------------------------------------------------
GetWidthRect98     f32     GetWidth() const { return right - left; }
99 
100     //--------------------------------------------------------------------------
101     //
102     //
103     //
104     //---------------------------------------------------------------------------
GetHeightRect105     f32     GetHeight() const { return bottom - top; }
106 
107     //--------------------------------------------------------------------------
108     //
109     //
110     //
111     //---------------------------------------------------------------------------
GetXRect112     f32     GetX() const { return left; }
113 
114     //--------------------------------------------------------------------------
115     //
116     //
117     //
118     //---------------------------------------------------------------------------
GetYRect119     f32     GetY() const { return top; }
120 
121     //--------------------------------------------------------------------------
122     //
123     //
124     //
125     //---------------------------------------------------------------------------
SetWidthRect126     void    SetWidth(f32 width) { right = left + width; }
127 
128     //--------------------------------------------------------------------------
129     //
130     //
131     //
132     //---------------------------------------------------------------------------
SetHeightRect133     void    SetHeight(f32 height) { bottom = top + height; }
134 
135     //--------------------------------------------------------------------------
136     //
137     //
138     //
139     //
140     //---------------------------------------------------------------------------
MoveToRect141     void    MoveTo(f32 x, f32 y)
142     {
143         right  = x + GetWidth();
144         left   = x;
145         bottom = y + GetHeight();
146         top    = y;
147     }
148 
149     //--------------------------------------------------------------------------
150     //
151     //
152     //
153     //
154     //---------------------------------------------------------------------------
MoveRect155     void    Move(f32 dx, f32 dy)
156     {
157         left    += dx;
158         right   += dx;
159         top     += dy;
160         bottom  += dy;
161     }
162 
163     //--------------------------------------------------------------------------
164     //
165     //
166     //
167     //
168     //
169     //
170     //---------------------------------------------------------------------------
SetOriginAndSizeRect171     void    SetOriginAndSize(f32 x, f32 y, f32 width, f32 height )
172     {
173         left    = x;
174         right   = x + width;
175         top     = y;
176         bottom  = y + height;
177     }
178 
179     //
180 
181     //--------------------------------------------------------------------------
182     //
183     //---------------------------------------------------------------------------
NormalizeRect184     void    Normalize()
185     {
186         const f32 l = left;
187         const f32 t = top;
188         const f32 r = right;
189         const f32 b = bottom;
190 
191         left    = (r - l) >= 0 ? l : r;
192         right   = (r - l) >= 0 ? r : l;
193         top     = (b - t) >= 0 ? t : b;
194         bottom  = (b - t) >= 0 ? b : t;
195     }
196 };
197 
198 }} /* namespace nn::util */
199 
200 #endif // __cplusplus
201 
202 #endif //  NN_UTIL_UTIL_RECT_H_
203