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); on_close_ = std::move(callback);
} }
bool on_event(mouse_move const & e) bool on_event(mouse_move const & e) override
{ {
mouse_ = e.position; mouse_ = e.position;
@ -244,22 +244,29 @@ namespace psemek::ui
shape_.box += geom::cast<float>(e.position - *drag_); shape_.box += geom::cast<float>(e.position - *drag_);
drag_ = e.position; drag_ = e.position;
post_reshape(); 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_; drag_ = *mouse_;
else else
drag_ = std::nullopt; 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 struct shape const & shape() const override