lxgui
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 
11 namespace lxgui::gui {
12 
13 class region;
14 
15 enum class anchor_type { abs, rel };
16 
17 enum class point {
18  top_left = 0,
19  top,
20  top_right,
21  right,
23  bottom,
25  left,
26  center
27 };
28 
29 enum class constraint { none, x, y };
30 
32 struct anchor_data {
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 
97 class anchor : private anchor_data {
98 public:
100  using anchor_data::offset;
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 
155 private:
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.
Definition: gui_anchor.hpp:97
anchor(const anchor &)=delete
vector2f get_point(const region &object) const
Returns this anchor's absolute coordinates (in pixels).
Definition: gui_anchor.cpp:55
utils::observer_ptr< const region > get_parent() const
Returns this anchor's parent region.
Definition: gui_anchor.hpp:136
anchor(anchor &&)=delete
anchor(region &object, const anchor_data &data)
Constructor.
Definition: gui_anchor.cpp:15
const utils::observer_ptr< region > & get_parent()
Returns this anchor's parent region.
Definition: gui_anchor.hpp:128
anchor & operator=(const anchor &)=delete
std::string serialize(const std::string &tab) const
Prints all relevant information about this anchor in a string.
Definition: gui_anchor.cpp:113
anchor & operator=(anchor &&)=delete
const anchor_data & get_data() const
Returns the raw data used for this anchor.
Definition: gui_anchor.hpp:151
The base class of all elements in the GUI.
Definition: gui_region.hpp:161
Raw data of an anchor (value type)
Definition: gui_anchor.hpp:32
anchor_data(point input_point, const std::string &input_parent, point input_parent_point)
Definition: gui_anchor.hpp:39
anchor_data(point input_point, point input_parent_point, const vector2f &input_offset, anchor_type input_type=anchor_type::abs)
Definition: gui_anchor.hpp:75
anchor_data(point input_point, point input_parent_point)
Definition: gui_anchor.hpp:86
anchor_data(point input_point, const std::string &input_parent)
Definition: gui_anchor.hpp:36
anchor_data(point input_point)
Definition: gui_anchor.hpp:33
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)
Definition: gui_anchor.hpp:42
anchor_data(point input_point, const vector2f &input_offset, anchor_type input_type=anchor_type::abs)
Definition: gui_anchor.hpp:65
anchor_data(point input_point, const std::string &input_parent, const vector2f &input_offset, anchor_type input_type=anchor_type::abs)
Definition: gui_anchor.hpp:54