diff --git a/src/Widget.cpp b/src/Widget.cpp index fada833..f8d2a78 100644 --- a/src/Widget.cpp +++ b/src/Widget.cpp @@ -9,7 +9,7 @@ namespace Raven { -Point Widget::window_relative() { +Point Widget::compute_window_relative() { Point point = { 0, 0 }; for (Widget* parent = m_parent; parent; parent = parent->parent()) { point.add(parent->rect().x(), parent->rect().y()); @@ -51,8 +51,11 @@ void Widget::move_to(double x, double y) { } void Widget::do_layout() { - if (m_layout) + if (m_layout) { m_layout->run(); + } + + m_window_relative = compute_window_relative(); } void Widget::set_layout(std::shared_ptr layout) { diff --git a/src/Widget.hpp b/src/Widget.hpp index 48faae2..95084ec 100644 --- a/src/Widget.hpp +++ b/src/Widget.hpp @@ -58,7 +58,7 @@ public: void set_rect(Box rect) { m_rect = rect; reflow(); } void set_rect(Box rect, bool is_pure) { m_rect = rect; if (!is_pure) { reflow(); } } - Point window_relative(); + Point &window_relative() { return m_window_relative; }; WidgetType type() { return m_type; } ControlWidgetType control_type() { return m_control_type; } @@ -114,16 +114,19 @@ protected: virtual void on_paint() {} void set_did_init(bool did_init) { m_did_init = did_init; } + Point compute_window_relative(); + + void do_layout(); void repaint(); void reflow(); private: - void do_layout(); void handle_repaint_rect(RepaintRectEvent &event); void handle_relayout_subtree(RelayoutSubtreeEvent &event); void handle_mouse_move_event(MouseMoveEvent &event); void handle_mouse_button_event(MouseButtonEvent &event); + Point m_window_relative { 0, 0 }; Box m_rect { 0, 0, 0, 0 }; std::vector> m_children; Widget *m_parent { nullptr };