layouts: margins!
This commit is contained in:
parent
f8a91f3a83
commit
eec776ba46
5 changed files with 28 additions and 10 deletions
|
@ -6,14 +6,17 @@
|
||||||
|
|
||||||
namespace Raven {
|
namespace Raven {
|
||||||
|
|
||||||
void Layout::run_on(Widget *target) {
|
void Layout::run() {
|
||||||
Point point { target->get_current_geometry().get_x(), target->get_current_geometry().get_y() };
|
if (!m_target)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Point point { m_target->get_current_geometry().get_x() + m_margin, m_target->get_current_geometry().get_y() + m_margin };
|
||||||
double row_largest_height = 0.0;
|
double row_largest_height = 0.0;
|
||||||
|
|
||||||
auto children = target->get_children();
|
auto children = m_target->get_children();
|
||||||
for (auto& c : children) {
|
for (auto& c : children) {
|
||||||
if (c->get_control_type() == ControlWidgetType::NewRow && row_largest_height) {
|
if (c->get_control_type() == ControlWidgetType::NewRow && row_largest_height) {
|
||||||
point.add(0, row_largest_height);
|
point.add(0, row_largest_height + m_margin);
|
||||||
row_largest_height = 0.0;
|
row_largest_height = 0.0;
|
||||||
point.set_x(0);
|
point.set_x(0);
|
||||||
}
|
}
|
||||||
|
@ -22,7 +25,7 @@ void Layout::run_on(Widget *target) {
|
||||||
}
|
}
|
||||||
auto new_geometry = Box{ point.get_x(), point.get_y(), c->get_current_geometry().get_width(), c->get_current_geometry().get_height() };
|
auto new_geometry = Box{ point.get_x(), point.get_y(), c->get_current_geometry().get_width(), c->get_current_geometry().get_height() };
|
||||||
c->set_current_geometry(std::move(new_geometry));
|
c->set_current_geometry(std::move(new_geometry));
|
||||||
point.add(c->get_current_geometry().get_width(), 0);
|
point.add(c->get_current_geometry().get_width() + m_margin, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,19 @@
|
||||||
namespace Raven {
|
namespace Raven {
|
||||||
|
|
||||||
class Layout {
|
class Layout {
|
||||||
|
private:
|
||||||
|
double m_margin { 0.0 };
|
||||||
|
Widget *m_target { nullptr };
|
||||||
public:
|
public:
|
||||||
Layout() {}
|
Layout() {}
|
||||||
|
|
||||||
void run_on(Widget *target);
|
void run();
|
||||||
|
|
||||||
|
double get_margin() { return m_margin; }
|
||||||
|
void set_margin(double margin) { m_margin = margin; run(); }
|
||||||
|
|
||||||
|
void bind_to(Widget *target) { m_target = target; }
|
||||||
|
Widget *get_target() { return m_target; }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -8,9 +8,13 @@
|
||||||
namespace Raven {
|
namespace Raven {
|
||||||
|
|
||||||
void Widget::do_layout() {
|
void Widget::do_layout() {
|
||||||
if (m_layout) {
|
if (m_layout)
|
||||||
m_layout->run_on(this);
|
m_layout->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Widget::set_layout(Layout *layout) {
|
||||||
|
m_layout = layout;
|
||||||
|
m_layout->bind_to(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Widget::set_window(Window *window) {
|
void Widget::set_window(Window *window) {
|
||||||
|
|
|
@ -83,7 +83,7 @@ public:
|
||||||
bool get_accepts_events() { return m_accepts_events; }
|
bool get_accepts_events() { return m_accepts_events; }
|
||||||
void set_accepts_events(bool accepts_events) { m_accepts_events = accepts_events; }
|
void set_accepts_events(bool accepts_events) { m_accepts_events = accepts_events; }
|
||||||
|
|
||||||
void set_layout(Layout *layout) { m_layout = layout; }
|
void set_layout(Layout *layout);
|
||||||
Layout *get_layout() { return m_layout; }
|
Layout *get_layout() { return m_layout; }
|
||||||
|
|
||||||
WidgetType get_type() { return m_type; }
|
WidgetType get_type() { return m_type; }
|
||||||
|
|
|
@ -23,6 +23,8 @@ int main() {
|
||||||
impostor_button.set_current_geometry(Raven::Box(0, 0, 100, 30));
|
impostor_button.set_current_geometry(Raven::Box(0, 0, 100, 30));
|
||||||
label.set_current_geometry(Raven::Box(0, 0, 100, 20));
|
label.set_current_geometry(Raven::Box(0, 0, 100, 20));
|
||||||
|
|
||||||
|
main_layout.set_margin(6.0);
|
||||||
|
|
||||||
main_widget.set_layout(&main_layout);
|
main_widget.set_layout(&main_layout);
|
||||||
window.set_main_widget(&main_widget);
|
window.set_main_widget(&main_widget);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue