1 /*
2  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3  * Distributed under the MIT License
4  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5  */
6 
7 #ifndef MYGUI_COORD_CONVERTER_H_
8 #define MYGUI_COORD_CONVERTER_H_
9 
10 #include "MyGUI_Prerequest.h"
11 #include "MyGUI_Types.h"
12 
13 namespace MyGUI
14 {
15 
16 	class MYGUI_EXPORT CoordConverter
17 	{
18 	public:
19 		/** Convert pixel coordinates to texture UV coordinates */
convertTextureCoord(const IntCoord & _coord,const IntSize & _textureSize)20 		static FloatRect convertTextureCoord(const IntCoord& _coord, const IntSize& _textureSize)
21 		{
22 			if (!_textureSize.width || !_textureSize.height) return FloatRect();
23 			return FloatRect(
24 				(float)_coord.left / (float)_textureSize.width,
25 				(float)_coord.top / (float)_textureSize.height,
26 				(float)_coord.right() / (float)_textureSize.width,
27 				(float)_coord.bottom() / (float)_textureSize.height);
28 		}
29 
30 		/* Convert from relative to pixel coordinates.
31 			@param _coord relative coordinates.
32 		*/
convertFromRelative(const FloatCoord & _coord,const IntSize & _view)33 		static IntCoord convertFromRelative(const FloatCoord& _coord, const IntSize& _view)
34 		{
35 			return IntCoord(int(_coord.left * _view.width), int(_coord.top * _view.height), int(_coord.width * _view.width), int(_coord.height * _view.height));
36 		}
37 
38 		/* Convert from relative to pixel coordinates.
39 			@param _coord relative coordinates.
40 		*/
convertFromRelative(const FloatSize & _size,const IntSize & _view)41 		static IntSize convertFromRelative(const FloatSize& _size, const IntSize& _view)
42 		{
43 			return IntSize(int(_size.width * _view.width), int(_size.height * _view.height));
44 		}
45 
46 		/* Convert from relative to pixel coordinates.
47 			@param _coord relative coordinates.
48 		*/
convertFromRelative(const FloatPoint & _point,const IntSize & _view)49 		static IntPoint convertFromRelative(const FloatPoint& _point, const IntSize& _view)
50 		{
51 			return IntPoint(int(_point.left * _view.width), int(_point.top * _view.height));
52 		}
53 
54 		/* Convert from pixel to relative coordinates.
55 			@param _coord pixel coordinates.
56 		*/
convertToRelative(const IntCoord & _coord,const IntSize & _view)57 		static FloatCoord convertToRelative(const IntCoord& _coord, const IntSize& _view)
58 		{
59 			return FloatCoord(_coord.left / (float)_view.width, _coord.top / (float)_view.height, _coord.width / (float)_view.width, _coord.height / (float)_view.height);
60 		}
61 
convertToRelative(const IntSize & _size,const IntSize & _view)62 		static FloatSize convertToRelative(const IntSize& _size, const IntSize& _view)
63 		{
64 			return FloatSize(_size.width / (float)_view.width, _size.height / (float)_view.height);
65 		}
66 
convertToRelative(const IntPoint & _point,const IntSize & _view)67 		static FloatPoint convertToRelative(const IntPoint& _point, const IntSize& _view)
68 		{
69 			return FloatPoint(_point.left / (float)_view.width, _point.top / (float)_view.height);
70 		}
71 
convertFromRelative(const DoubleCoord & _coord,const IntSize & _view)72 		static IntCoord convertFromRelative(const DoubleCoord& _coord, const IntSize& _view)
73 		{
74 			return IntCoord(int(_coord.left * _view.width), int(_coord.top * _view.height), int(_coord.width * _view.width), int(_coord.height * _view.height));
75 		}
76 
convertToRelativeD(const IntCoord & _coord,const IntSize & _view)77 		static DoubleCoord convertToRelativeD(const IntCoord& _coord, const IntSize& _view)
78 		{
79 			return DoubleCoord(_coord.left / (double)_view.width, _coord.top / (double)_view.height, _coord.width / (double)_view.width, _coord.height / (double)_view.height);
80 		}
81 	};
82 
83 } // namespace MyGUI
84 
85 #endif // MYGUI_COORD_CONVERTER_H_
86