#include #include #include #include #include namespace psemek::ui { void element::set_parent(element * parent) { assert(!parent_ || !parent); parent_ = parent; if (loop()) post_delayed_callbacks(); style_updated(); } element * element::root() { element * r = this; while (r->parent()) r = r->parent(); return r; } element const * element::root() const { element const * r = this; while (r->parent()) r = r->parent(); return r; } async::event_loop * element::loop() const { element const * e = this; while (!e->loop_ && e->parent()) e = e->parent(); return e->loop_; } void element::set_loop(async::event_loop * loop) { loop_ = loop; post_delayed_callbacks(); } math::box element::events_bbox() const { return math::box::full(); } void element::reshape() { reshape(shape().bbox()); } math::box element::size_constraints() const { static float const inf = std::numeric_limits::infinity(); return {{{0.f, inf}, {0.f, inf}}}; } math::interval element::width_constraints(float) const { return size_constraints()[0]; } math::interval element::height_constraints(float) const { return size_constraints()[1]; } std::shared_ptr