Crazy Eddie's GUI System  0.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
CoordConverter.h
1 /***********************************************************************
2  filename: CEGUICoordConverter.h
3  created: Sun Sep 18 2005
4  author: Paul D Turner <paul@cegui.org.uk>
5 *************************************************************************/
6 /***************************************************************************
7  * Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining
10  * a copy of this software and associated documentation files (the
11  * "Software"), to deal in the Software without restriction, including
12  * without limitation the rights to use, copy, modify, merge, publish,
13  * distribute, sublicense, and/or sell copies of the Software, and to
14  * permit persons to whom the Software is furnished to do so, subject to
15  * the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be
18  * included in all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26  * OTHER DEALINGS IN THE SOFTWARE.
27  ***************************************************************************/
28 #ifndef _CEGUICoordConverter_h_
29 #define _CEGUICoordConverter_h_
30 
31 #include "CEGUI/UDim.h"
32 #include "CEGUI/Vector.h"
33 #include "CEGUI/Size.h"
34 #include "CEGUI/Rect.h"
35 
36 // Start of CEGUI namespace section
37 namespace CEGUI
38 {
45 class CEGUIEXPORT CoordConverter
46 {
47 public:
63  inline static float alignToPixels(float x)
64  {
65  return (float)(int)(( x ) + (( x ) > 0.0f ? 0.5f : -0.5f));
66  }
67 
72  inline static float asAbsolute(const UDim& u, float base, bool pixelAlign = true)
73  {
74  return pixelAlign ? alignToPixels(base * u.d_scale + u.d_offset) : base * u.d_scale + u.d_offset;
75  }
76 
81  inline static float asRelative(const UDim& u, float base)
82  {
83  return (base != 0.0f) ? u.d_offset / base + u.d_scale : 0.0f;
84  }
85 
90  inline static Vector2f asAbsolute(const Vector2<UDim>& v, const Sizef& base, bool pixelAlign = true)
91  {
92  return Vector2f(asAbsolute(v.d_x, base.d_width, pixelAlign), asAbsolute(v.d_y, base.d_height, pixelAlign));
93  }
94 
99  inline static Vector2f asRelative(const Vector2<UDim>& v, const Sizef& base)
100  {
101  return Vector2f(asRelative(v.d_x, base.d_width), asRelative(v.d_y, base.d_height));
102  }
103 
108  inline static Sizef asAbsolute(const Size<UDim>& v, const Sizef& base, bool pixelAlign = true)
109  {
110  return Sizef(asAbsolute(v.d_width, base.d_width, pixelAlign), asAbsolute(v.d_height, base.d_height, pixelAlign));
111  }
112 
117  inline static Sizef asRelative(const Size<UDim>& v, const Sizef& base)
118  {
119  return Sizef(asRelative(v.d_width, base.d_width), asRelative(v.d_height, base.d_height));
120  }
121 
122  inline static Rectf asAbsolute(const URect& r, const Sizef& base, bool pixelAlign = true)
123  {
124  return Rectf(
125  asAbsolute(r.d_min.d_x, base.d_width, pixelAlign),
126  asAbsolute(r.d_min.d_y, base.d_height, pixelAlign),
127  asAbsolute(r.d_max.d_x, base.d_width, pixelAlign),
128  asAbsolute(r.d_max.d_y, base.d_height, pixelAlign)
129  );
130  }
131 
132  inline static Rectf asRelative(const URect& r, const Sizef& base)
133  {
134  return Rectf(
135  asRelative(r.d_min.d_x, base.d_width),
136  asRelative(r.d_min.d_y, base.d_height),
137  asRelative(r.d_max.d_x, base.d_width),
138  asRelative(r.d_max.d_y, base.d_height)
139  );
140  }
141 
157  static float screenToWindowX(const Window& window, const UDim& x);
158 
174  static float screenToWindowX(const Window& window, const float x);
175 
191  static float screenToWindowY(const Window& window, const UDim& y);
192 
208  static float screenToWindowY(const Window& window, const float y);
209 
225  static Vector2f screenToWindow(const Window& window, const UVector2& vec);
226 
242  static Vector2f screenToWindow(const Window& window, const Vector2f& vec);
243 
258  static Rectf screenToWindow(const Window& window, const URect& rect);
259 
274  static Rectf screenToWindow(const Window& window, const Rectf& rect);
275 
276 private:
278  CoordConverter();
279 
291  static float getBaseXValue(const Window& window);
292 
304  static float getBaseYValue(const Window& window);
305 
317  static Vector2f getBaseValue(const Window& window);
318 };
319 
320 } // End of CEGUI namespace section
321 
322 
323 #endif // end of guard _CEGUICoordConverter_h_