lxgui
Loading...
Searching...
No Matches
gui_anchor.hpp
1#ifndef LXGUI_GUI_ANCHOR_HPP
2#define LXGUI_GUI_ANCHOR_HPP
3
4#include "lxgui/gui_vector2.hpp"
5#include "lxgui/lxgui.hpp"
6#include "lxgui/utils.hpp"
7#include "lxgui/utils_observer.hpp"
8
9#include <string>
10
11namespace lxgui::gui {
12
13class region;
14
15enum class anchor_type { abs, rel };
16
17enum class point {
18 top_left = 0,
19 top,
21 right,
23 bottom,
25 left,
26 center
27};
28
29enum class constraint { none, x, y };
30
33 anchor_data(point input_point) :
34 object_point(input_point), parent_name("$default"), parent_point(input_point) {}
35
36 anchor_data(point input_point, const std::string& input_parent) :
37 object_point(input_point), parent_name(input_parent), parent_point(input_point) {}
38
39 anchor_data(point input_point, const std::string& input_parent, point input_parent_point) :
40 object_point(input_point), parent_name(input_parent), parent_point(input_parent_point) {}
41
43 point input_point,
44 const std::string& input_parent,
45 point input_parent_point,
46 const vector2f& input_offset,
47 anchor_type input_type = anchor_type::abs) :
48 object_point(input_point),
49 parent_name(input_parent),
50 parent_point(input_parent_point),
51 offset(input_offset),
52 type(input_type) {}
53
55 point input_point,
56 const std::string& input_parent,
57 const vector2f& input_offset,
58 anchor_type input_type = anchor_type::abs) :
59 object_point(input_point),
60 parent_name(input_parent),
61 parent_point(input_point),
62 offset(input_offset),
63 type(input_type) {}
64
66 point input_point,
67 const vector2f& input_offset,
68 anchor_type input_type = anchor_type::abs) :
69 object_point(input_point),
70 parent_name("$default"),
71 parent_point(input_point),
72 offset(input_offset),
73 type(input_type) {}
74
76 point input_point,
77 point input_parent_point,
78 const vector2f& input_offset,
79 anchor_type input_type = anchor_type::abs) :
80 object_point(input_point),
81 parent_name("$default"),
82 parent_point(input_parent_point),
83 offset(input_offset),
84 type(input_type) {}
85
86 anchor_data(point input_point, point input_parent_point) :
87 object_point(input_point), parent_name("$default"), parent_point(input_parent_point) {}
88
90 std::string parent_name;
94};
95
97class anchor : private anchor_data {
98public:
102 using anchor_data::type;
103
109 anchor(region& object, const anchor_data& data);
110
111 // Non-copiable, non-movable
112 anchor(const anchor&) = delete;
113 anchor(anchor&&) = delete;
114 anchor& operator=(const anchor&) = delete;
115 anchor& operator=(anchor&&) = delete;
116
122 vector2f get_point(const region& object) const;
123
128 const utils::observer_ptr<region>& get_parent() {
129 return parent_;
130 }
131
136 utils::observer_ptr<const region> get_parent() const {
137 return parent_;
138 }
139
145 std::string serialize(const std::string& tab) const;
146
151 const anchor_data& get_data() const {
152 return *this;
153 }
154
155private:
160 void update_parent_(region& object);
161
162 utils::observer_ptr<region> parent_ = nullptr;
163};
164
165} // namespace lxgui::gui
166
167#endif
Stores a position for a UI region.
anchor(const anchor &)=delete
vector2f get_point(const region &object) const
Returns this anchor's absolute coordinates (in pixels).
anchor & operator=(const anchor &)=delete
anchor(anchor &&)=delete
anchor & operator=(anchor &&)=delete
const utils::observer_ptr< region > & get_parent()
Returns this anchor's parent region.
std::string serialize(const std::string &tab) const
Prints all relevant information about this anchor in a string.
const anchor_data & get_data() const
Returns the raw data used for this anchor.
utils::observer_ptr< const region > get_parent() const
Returns this anchor's parent region.
The base class of all elements in the GUI.
Raw data of an anchor (value type)
anchor_data(point input_point, const std::string &input_parent, point input_parent_point)
anchor_data(point input_point, point input_parent_point, const vector2f &input_offset, anchor_type input_type=anchor_type::abs)
anchor_data(point input_point, point input_parent_point)
anchor_data(point input_point, const std::string &input_parent)
anchor_data(point input_point)
anchor_data(point input_point, const std::string &input_parent, point input_parent_point, const vector2f &input_offset, anchor_type input_type=anchor_type::abs)
anchor_data(point input_point, const vector2f &input_offset, anchor_type input_type=anchor_type::abs)
anchor_data(point input_point, const std::string &input_parent, const vector2f &input_offset, anchor_type input_type=anchor_type::abs)