#include #include namespace psemek::ui::impl { button_base::button_base() {} bool button_base::on_event(mouse_move_event const & event) { bool const mouseover = geom::contains(shape(), geom::cast(event.position)); if (*mouseover_ != mouseover) mouseover_.set(mouseover); return false; } bool button_base::on_event(mouse_button_event const & event) { bool const mousedown = event.button == app::mouse_button::left && event.down; if (*mouseover_ || !mousedown) { if (*mousedown_ != mousedown) mousedown_.set(mousedown); return *mouseover_ && mousedown; } return false; } void button_base::update(button const & value) { mouseover_ = value.mouseover; mousedown_ = value.mousedown; } }