Fix default window event handling: events are considered processed if mouse is over window

This commit is contained in:
Nikita Lisitsa 2021-07-21 22:04:59 +03:00
parent c5802b2bbe
commit 90d5917ef4

View file

@ -235,7 +235,7 @@ namespace psemek::ui
on_close_ = std::move(callback);
}
bool on_event(mouse_move const & e)
bool on_event(mouse_move const & e) override
{
mouse_ = e.position;
@ -244,22 +244,29 @@ namespace psemek::ui
shape_.box += geom::cast<float>(e.position - *drag_);
drag_ = e.position;
post_reshape();
return true;
}
return false;
return shape().contains(geom::cast<float>(*mouse_));
}
bool on_event(mouse_click const & e)
bool on_event(mouse_click const & e) override
{
if (e.button == mouse_button::left)
if (!mouse_ || !shape().contains(geom::cast<float>(*mouse_)))
return false;
if (e.button == mouse_button::left && mouse_)
{
if (mouse_ && e.down)
if (e.down)
drag_ = *mouse_;
else
drag_ = std::nullopt;
return true;
}
return false;
return true;
}
bool on_event(mouse_wheel const &) override
{
return mouse_ && shape().contains(geom::cast<float>(*mouse_));
}
struct shape const & shape() const override