libaurum: apply smart pointer wider and extract impl out
[platform/core/uifw/aurum.git] / libaurum / inc / Misc / Rect.h
1 #pragma once
2 #include "Point2D.h"
3
4 /**
5  * @brief Rect Class
6  * @since_tizen 5.5
7  */
8 template <typename T>
9 class Rect {
10 public:
11     /**
12      * @brief TBD
13      * @since_tizen 5.5
14      */
15     Rect() : mTopLeft{0, 0}, mBottomRight{0, 0} {}
16
17     /**
18      * @brief TBD
19      * @since_tizen 5.5
20      */
21     Rect(const Point2D<T> &tl, const Point2D<T> &br)
22         : mTopLeft(tl), mBottomRight(br)
23     {
24     }
25
26     /**
27      * @brief TBD
28      * @since_tizen 5.5
29      */
30     Rect(const T &x1, const T &y1, const T &x2, const T &y2)
31         : mTopLeft{x1, y1}, mBottomRight{x2, y2}
32     {
33     }
34
35     /**
36      * @brief TBD
37      * @since_tizen 5.5
38      */
39     Rect(const Rect<T> &src)
40
41     {
42         this->mTopLeft = Point2D<int>{src.mTopLeft};
43         this->mBottomRight = Point2D<int>{src.mBottomRight};
44     }
45
46     /**
47      * @brief TBD
48      * @since_tizen 5.5
49      */
50     Point2D<T> midPoint() const
51     {
52         return Point2D<T>{mTopLeft.x + static_cast<T>(width() / 2),
53                           mTopLeft.y + static_cast<T>(height() / 2)};
54     }
55
56     /**
57      * @brief TBD
58      * @since_tizen 5.5
59      */
60     T width() const { return mBottomRight.x - mTopLeft.x; }
61
62     /**
63      * @brief TBD
64      * @since_tizen 5.5
65      */
66     T height() const { return mBottomRight.y - mTopLeft.y; }
67
68     /**
69      * @brief TBD
70      */
71     Point2D<T> mTopLeft;
72
73     /**
74      * @brief TBD
75      */
76     Point2D<T> mBottomRight;
77 };