]> git.localhorst.tv Git - blobs.git/blob - src/ui/Widget.hpp
shoddy meters
[blobs.git] / src / ui / Widget.hpp
1 #ifndef BLOBS_UI_WIDGET_HPP_
2 #define BLOBS_UI_WIDGET_HPP_
3
4 #include "align.hpp"
5 #include "../graphics/glm.hpp"
6
7
8 namespace blobs {
9 namespace app {
10         struct Assets;
11 }
12 namespace graphics {
13         class Viewport;
14 }
15 namespace ui {
16
17 class Widget {
18
19 public:
20         Widget();
21         virtual ~Widget();
22
23         Widget(const Widget &) = delete;
24         Widget &operator =(const Widget &) = delete;
25
26         Widget(Widget &&) = delete;
27         Widget &operator =(Widget &&) = delete;
28
29 public:
30         Widget *Position(const glm::vec3 &p) noexcept { pos = p; return this; }
31         const glm::vec3 &Position() const noexcept { return pos; }
32         glm::vec3 AlignedPosition() noexcept;
33         glm::vec3 TopLeft() noexcept;
34
35         Widget *Origin(Gravity o) noexcept { origin = o; return this; }
36         Gravity Origin() const noexcept { return origin; }
37
38         virtual glm::vec2 Size() = 0;
39         virtual void Draw(app::Assets &, graphics::Viewport &) noexcept = 0;
40
41 private:
42         glm::vec3 pos;
43         Gravity origin;
44
45 };
46
47 }
48 }
49
50 #endif