convenience function for adding layouts to a widget
This commit is contained in:
parent
60a4dc51a7
commit
0aebfd6465
4 changed files with 19 additions and 9 deletions
|
@ -11,6 +11,10 @@ public:
|
||||||
DocumentLayout()
|
DocumentLayout()
|
||||||
: Layout() {}
|
: Layout() {}
|
||||||
|
|
||||||
|
DocumentLayout(double margin)
|
||||||
|
: Layout()
|
||||||
|
, m_margin(margin) {}
|
||||||
|
|
||||||
void run();
|
void run();
|
||||||
|
|
||||||
double get_margin() { return m_margin; }
|
double get_margin() { return m_margin; }
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
#include "Widget.hpp"
|
#include "Widget.hpp"
|
||||||
#include "Events.hpp"
|
#include "Events.hpp"
|
||||||
#include "Window.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> layout) {
|
||||||
m_layout = layout;
|
m_layout = layout;
|
||||||
m_layout->bind_to(this);
|
m_layout->bind_to(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "Box.hpp"
|
#include "Box.hpp"
|
||||||
|
@ -36,8 +37,8 @@ private:
|
||||||
std::vector<Widget*> m_children;
|
std::vector<Widget*> m_children;
|
||||||
Widget *m_parent { nullptr };
|
Widget *m_parent { nullptr };
|
||||||
Window *m_window { nullptr };
|
Window *m_window { nullptr };
|
||||||
std::shared_ptr<TopLevelStyles> m_styles = nullptr;
|
std::shared_ptr<TopLevelStyles> m_styles { nullptr };
|
||||||
Layout *m_layout { nullptr };
|
std::shared_ptr<Layout> m_layout { nullptr };
|
||||||
bool m_did_init { false };
|
bool m_did_init { false };
|
||||||
bool m_is_focused { false };
|
bool m_is_focused { false };
|
||||||
bool m_is_active { false };
|
bool m_is_active { false };
|
||||||
|
@ -84,8 +85,8 @@ 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);
|
void set_layout(std::shared_ptr<Layout> layout);
|
||||||
Layout *get_layout() { return m_layout; }
|
std::shared_ptr<Layout> get_layout() { return m_layout; }
|
||||||
|
|
||||||
WidgetType get_type() { return m_type; }
|
WidgetType get_type() { return m_type; }
|
||||||
ControlWidgetType get_control_type() { return m_control_type; }
|
ControlWidgetType get_control_type() { return m_control_type; }
|
||||||
|
@ -94,6 +95,13 @@ public:
|
||||||
void wants_repaint();
|
void wants_repaint();
|
||||||
void wants_relayout();
|
void wants_relayout();
|
||||||
|
|
||||||
|
template<typename T, class... Args>
|
||||||
|
std::shared_ptr<T> set_layout(Args&&... args) {
|
||||||
|
std::shared_ptr<T> layout = std::make_shared<T>(std::forward<T>(args)...);
|
||||||
|
set_layout(layout);
|
||||||
|
return layout;
|
||||||
|
}
|
||||||
|
|
||||||
virtual ~Widget() {};
|
virtual ~Widget() {};
|
||||||
protected:
|
protected:
|
||||||
WidgetType m_type { WidgetType::Widget };
|
WidgetType m_type { WidgetType::Widget };
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include "src/DocumentLayout.hpp"
|
#include "src/DocumentLayout.hpp"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
Raven::DocumentLayout main_layout {};
|
|
||||||
Raven::Widget new_row { Raven::ControlWidgetType::NewRow };
|
Raven::Widget new_row { Raven::ControlWidgetType::NewRow };
|
||||||
Raven::Window window {};
|
Raven::Window window {};
|
||||||
|
|
||||||
|
@ -19,16 +18,14 @@ int main() {
|
||||||
|
|
||||||
int number = 0;
|
int number = 0;
|
||||||
|
|
||||||
|
|
||||||
window.spawn_window();
|
window.spawn_window();
|
||||||
|
|
||||||
add_button.set_current_geometry(Raven::Box(0, 0, 100, 30));
|
add_button.set_current_geometry(Raven::Box(0, 0, 100, 30));
|
||||||
subtract_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));
|
label.set_current_geometry(Raven::Box(0, 0, 100, 20));
|
||||||
|
|
||||||
main_layout.set_margin(6.0);
|
main_widget.set_layout<Raven::DocumentLayout>(6.0);
|
||||||
|
|
||||||
main_widget.set_layout(&main_layout);
|
|
||||||
window.set_main_widget(&main_widget);
|
window.set_main_widget(&main_widget);
|
||||||
|
|
||||||
add_button.on_click = [&]() {
|
add_button.on_click = [&]() {
|
||||||
|
|
Loading…
Reference in a new issue