#include #include namespace psemek::ui { std::shared_ptr key_interceptor::set_child(std::shared_ptr c) { auto old = std::move(child_); if (old) old->set_parent(nullptr); child_ = std::move(c); if (child_) child_->set_parent(this); children_[0] = child_.get(); return old; } geom::box key_interceptor::size_constraints() const { if (child_) return child_->size_constraints(); return element::size_constraints(); } shape const & key_interceptor::shape() const { static const null_shape fallback_shape; if (child_) return child_->shape(); return fallback_shape; } void key_interceptor::reshape(geom::box const & bbox) { if (child_) child_->reshape(bbox); } void key_interceptor::on_key_down(std::function callback) { callback_ = std::move(callback); } bool key_interceptor::on_event(key_press const & event) { if (callback_ && event.down) { return callback_(event.key); } return false; } }