1 #include "lxgui/gui_anchor.hpp"
3 #include "lxgui/gui_frame.hpp"
4 #include "lxgui/gui_frame_renderer.hpp"
5 #include "lxgui/gui_manager.hpp"
6 #include "lxgui/gui_out.hpp"
7 #include "lxgui/gui_region.hpp"
8 #include "lxgui/gui_registry.hpp"
9 #include "lxgui/utils_string.hpp"
16 if (!
object.is_virtual()) {
20 update_parent_(
object);
24 void anchor::update_parent_(
region&
object) {
30 utils::observer_ptr<frame> obj_parent =
object.get_parent();
34 utils::replace(parent_full_name,
"$parent", obj_parent->get_name());
35 }
else if (parent_full_name.find(
"$parent") != parent_full_name.npos) {
37 <<
"region \"" <<
object.get_name() <<
"\" tries to anchor to \""
38 << parent_full_name <<
"\", but '$parent' does not exist." << std::endl;
42 utils::observer_ptr<region> new_parent =
43 object.get_registry().get_region_by_name(parent_full_name);
47 <<
"region \"" <<
object.get_name() <<
"\" tries to anchor to \""
48 << parent_full_name <<
"\" but this region does not (yet?) exist." << std::endl;
58 if (
const region* raw_parent = parent_.get()) {
59 parent_pos = raw_parent->get_borders().top_left();
60 parent_size = raw_parent->get_apparent_dimensions();
62 parent_size =
object.get_effective_frame_renderer()->get_target_dimensions();
69 offset_abs =
offset * parent_size;
76 parent_offset.
x = 0.0f;
77 parent_offset.
y = 0.0f;
80 parent_offset.
x = 0.0f;
81 parent_offset.
y = parent_size.
y / 2.0f;
84 parent_offset.
x = 0.0f;
85 parent_offset.
y = parent_size.
y;
88 parent_offset.
x = parent_size.
x / 2.0f;
89 parent_offset.
y = 0.0f;
91 case point::center: parent_offset = parent_size / 2.0f;
break;
93 parent_offset.
x = parent_size.
x / 2.0f;
94 parent_offset.
y = parent_size.
y;
97 parent_offset.
x = parent_size.
x;
98 parent_offset.
y = 0.0f;
101 parent_offset.
x = parent_size.
x;
102 parent_offset.
y = parent_size.
y / 2.0f;
105 parent_offset.
x = parent_size.
x;
106 parent_offset.
y = parent_size.
y;
110 return offset_abs + parent_offset + parent_pos;
114 std::stringstream str;
116 str << tab <<
" | # Point : " << utils::to_string(
object_point) <<
"\n";
118 str << tab <<
" | # Parent : " << parent_->get_name();
120 str << tab <<
" | # Parent : none";
125 str << tab <<
" | # Rel. point: " << utils::to_string(
parent_point) <<
"\n";
127 str << tab <<
" | # Offset X : " <<
offset.
x <<
"\n";
128 str << tab <<
" | # Offset Y : " <<
offset.
y <<
"\n";
130 str << tab <<
" | # Offset X : " <<
offset.
x <<
" (rel)\n";
131 str << tab <<
" | # Offset Y : " <<
offset.
y <<
" (rel)\n";
vector2f get_point(const region &object) const
Returns this anchor's absolute coordinates (in pixels).
anchor(region &object, const anchor_data &data)
Constructor.
std::string serialize(const std::string &tab) const
Prints all relevant information about this anchor in a string.
The base class of all elements in the GUI.
@ nearest_not_zero
Equivalent to round() but only returns 0 if input is exactly 0.
Raw data of an anchor (value type)