diff --git a/src/DocumentLayout.hpp b/src/DocumentLayout.hpp index 3c60f5c..046bf5a 100644 --- a/src/DocumentLayout.hpp +++ b/src/DocumentLayout.hpp @@ -11,6 +11,10 @@ public: DocumentLayout() : Layout() {} + DocumentLayout(double margin) + : Layout() + , m_margin(margin) {} + void run(); double get_margin() { return m_margin; } diff --git a/src/Widget.cpp b/src/Widget.cpp index de4b2aa..4929a08 100644 --- a/src/Widget.cpp +++ b/src/Widget.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "Widget.hpp" #include "Events.hpp" #include "Window.hpp" @@ -14,7 +15,7 @@ void Widget::do_layout() { } } -void Widget::set_layout(Layout *layout) { +void Widget::set_layout(std::shared_ptr layout) { m_layout = layout; m_layout->bind_to(this); } diff --git a/src/Widget.hpp b/src/Widget.hpp index c5a7f66..1098081 100644 --- a/src/Widget.hpp +++ b/src/Widget.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include "Box.hpp" @@ -36,8 +37,8 @@ private: std::vector m_children; Widget *m_parent { nullptr }; Window *m_window { nullptr }; - std::shared_ptr m_styles = nullptr; - Layout *m_layout { nullptr }; + std::shared_ptr m_styles { nullptr }; + std::shared_ptr m_layout { nullptr }; bool m_did_init { false }; bool m_is_focused { false }; bool m_is_active { false }; @@ -84,8 +85,8 @@ public: bool get_accepts_events() { return m_accepts_events; } void set_accepts_events(bool accepts_events) { m_accepts_events = accepts_events; } - void set_layout(Layout *layout); - Layout *get_layout() { return m_layout; } + void set_layout(std::shared_ptr layout); + std::shared_ptr get_layout() { return m_layout; } WidgetType get_type() { return m_type; } ControlWidgetType get_control_type() { return m_control_type; } @@ -94,6 +95,13 @@ public: void wants_repaint(); void wants_relayout(); + template + std::shared_ptr set_layout(Args&&... args) { + std::shared_ptr layout = std::make_shared(std::forward(args)...); + set_layout(layout); + return layout; + } + virtual ~Widget() {}; protected: WidgetType m_type { WidgetType::Widget }; diff --git a/src/main.cpp b/src/main.cpp index 206cac8..8883816 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,6 @@ #include "src/DocumentLayout.hpp" int main() { - Raven::DocumentLayout main_layout {}; Raven::Widget new_row { Raven::ControlWidgetType::NewRow }; Raven::Window window {}; @@ -19,16 +18,14 @@ int main() { int number = 0; - window.spawn_window(); add_button.set_current_geometry(Raven::Box(0, 0, 100, 30)); subtract_button.set_current_geometry(Raven::Box(0, 0, 100, 30)); label.set_current_geometry(Raven::Box(0, 0, 100, 20)); - main_layout.set_margin(6.0); + main_widget.set_layout(6.0); - main_widget.set_layout(&main_layout); window.set_main_widget(&main_widget); add_button.on_click = [&]() {