Compare commits
No commits in common. "93b33c433b84b215169a3fe9b700624f8d980032" and "2a5ae1f1005795eb1afab2540830e7c95faab1d9" have entirely different histories.
93b33c433b
...
2a5ae1f100
3 changed files with 26 additions and 37 deletions
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
namespace Raven {
|
namespace Raven {
|
||||||
|
|
||||||
Point Widget::compute_window_relative() {
|
Point Widget::window_relative() {
|
||||||
Point point = { 0, 0 };
|
Point point = { 0, 0 };
|
||||||
for (Widget* parent = m_parent; parent; parent = parent->parent()) {
|
for (Widget* parent = m_parent; parent; parent = parent->parent()) {
|
||||||
point.add(parent->rect().x(), parent->rect().y());
|
point.add(parent->rect().x(), parent->rect().y());
|
||||||
|
@ -51,13 +51,10 @@ void Widget::move_to(double x, double y) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Widget::do_layout() {
|
void Widget::do_layout() {
|
||||||
if (m_layout) {
|
if (m_layout)
|
||||||
m_layout->run();
|
m_layout->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_window_relative = compute_window_relative();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Widget::set_layout(std::shared_ptr<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);
|
||||||
|
|
|
@ -58,7 +58,7 @@ public:
|
||||||
void set_rect(Box rect) { m_rect = rect; reflow(); }
|
void set_rect(Box rect) { m_rect = rect; reflow(); }
|
||||||
void set_rect(Box rect, bool is_pure) { m_rect = rect; if (!is_pure) { reflow(); } }
|
void set_rect(Box rect, bool is_pure) { m_rect = rect; if (!is_pure) { reflow(); } }
|
||||||
|
|
||||||
Point &window_relative() { return m_window_relative; };
|
Point window_relative();
|
||||||
|
|
||||||
WidgetType type() { return m_type; }
|
WidgetType type() { return m_type; }
|
||||||
ControlWidgetType control_type() { return m_control_type; }
|
ControlWidgetType control_type() { return m_control_type; }
|
||||||
|
@ -114,19 +114,16 @@ protected:
|
||||||
virtual void on_paint() {}
|
virtual void on_paint() {}
|
||||||
|
|
||||||
void set_did_init(bool did_init) { m_did_init = did_init; }
|
void set_did_init(bool did_init) { m_did_init = did_init; }
|
||||||
Point compute_window_relative();
|
|
||||||
|
|
||||||
void do_layout();
|
|
||||||
|
|
||||||
void repaint();
|
void repaint();
|
||||||
void reflow();
|
void reflow();
|
||||||
private:
|
private:
|
||||||
|
void do_layout();
|
||||||
void handle_repaint_rect(RepaintRectEvent &event);
|
void handle_repaint_rect(RepaintRectEvent &event);
|
||||||
void handle_relayout_subtree(RelayoutSubtreeEvent &event);
|
void handle_relayout_subtree(RelayoutSubtreeEvent &event);
|
||||||
void handle_mouse_move_event(MouseMoveEvent &event);
|
void handle_mouse_move_event(MouseMoveEvent &event);
|
||||||
void handle_mouse_button_event(MouseButtonEvent &event);
|
void handle_mouse_button_event(MouseButtonEvent &event);
|
||||||
|
|
||||||
Point m_window_relative { 0, 0 };
|
|
||||||
Box m_rect { 0, 0, 0, 0 };
|
Box m_rect { 0, 0, 0, 0 };
|
||||||
std::vector<std::shared_ptr<Widget>> m_children;
|
std::vector<std::shared_ptr<Widget>> m_children;
|
||||||
Widget *m_parent { nullptr };
|
Widget *m_parent { nullptr };
|
||||||
|
|
49
src/main.cpp
49
src/main.cpp
|
@ -11,45 +11,40 @@
|
||||||
#include "src/Styles.hpp"
|
#include "src/Styles.hpp"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
void update_count_label_text(std::shared_ptr<Raven::Label> label, int number) {
|
||||||
|
std::stringstream text;
|
||||||
|
text << "you have clicked the button " << std::to_string(number) << " times";
|
||||||
|
label->set_text(text.str());
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
Raven::Window window {};
|
Raven::Window window {};
|
||||||
|
int number = 0;
|
||||||
|
|
||||||
window.spawn_window();
|
window.spawn_window();
|
||||||
|
|
||||||
auto main_widget = window.set_main_widget<Raven::Widget>();
|
auto main_widget = window.set_main_widget<Raven::Widget>();
|
||||||
main_widget->set_layout<Raven::DocumentLayout>(10.0);
|
main_widget->set_layout<Raven::DocumentLayout>(10.0);
|
||||||
|
|
||||||
auto second_widget = main_widget->add<Raven::Widget>();
|
auto count_label = main_widget->add<Raven::Label>("you have clicked the button 0 times");
|
||||||
second_widget->set_layout<Raven::DocumentLayout>(20.0);
|
|
||||||
second_widget->resize(800, 800);
|
|
||||||
|
|
||||||
auto inner_widget = second_widget->add<Raven::Widget>();
|
main_widget->add<Raven::Widget>(Raven::ControlWidgetType::NewRow);
|
||||||
inner_widget->set_layout<Raven::DocumentLayout>(8.0);
|
|
||||||
inner_widget->resize(600, 600);
|
|
||||||
|
|
||||||
int number = 0;
|
auto increment_button = main_widget->add<Raven::Button>("click me");
|
||||||
|
increment_button->set_style(&Raven::accent_button_style);
|
||||||
for (int i = 0; i < 250; i++) {
|
increment_button->on_click = [&]() {
|
||||||
auto button = inner_widget->add<Raven::Button>("click me");
|
number++;
|
||||||
button->set_style(&Raven::accent_button_style);
|
update_count_label_text(count_label, number);
|
||||||
auto label = inner_widget->add<Raven::Label>("click one of the buttons!");
|
};
|
||||||
button->on_click = [&]() {
|
|
||||||
number += 10;
|
auto reset_button = main_widget->add<Raven::Button>("reset");
|
||||||
|
reset_button->on_click = [&]() {
|
||||||
window.start_batch();
|
number = 0;
|
||||||
auto& children = inner_widget->children();
|
update_count_label_text(count_label, number);
|
||||||
for (auto& child : children) {
|
|
||||||
if (child->type() == Raven::WidgetType::Button) {
|
|
||||||
std::static_pointer_cast<Raven::Button>(child)->set_text(std::to_string(number));
|
|
||||||
}
|
|
||||||
if (child->type() == Raven::WidgetType::Label) {
|
|
||||||
std::static_pointer_cast<Raven::Label>(child)->set_text(std::to_string(number));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
window.end_batch();
|
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
window.run(true);
|
window.run(true);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue