Support draggable windows

This commit is contained in:
Nikita Lisitsa 2021-07-17 12:31:13 +03:00
parent 3752ad7da0
commit 8c21543ecb

View file

@ -224,6 +224,33 @@ namespace psemek::ui
return children_range{children_};
}
bool on_event(mouse_move const & e)
{
mouse_ = e.position;
if (drag_ && *drag_ != e.position)
{
shape_.box += geom::cast<float>(e.position - *drag_);
drag_ = e.position;
post_reshape();
return true;
}
return false;
}
bool on_event(mouse_click const & e)
{
if (e.button == mouse_button::left)
{
if (mouse_ && e.down)
drag_ = *mouse_;
else
drag_ = std::nullopt;
return true;
}
return false;
}
struct shape const & shape() const override
{
return shape_;
@ -310,6 +337,9 @@ namespace psemek::ui
std::shared_ptr<rich_button> close_button_;
std::shared_ptr<element> child_;
std::optional<geom::point<int, 2>> mouse_;
std::optional<geom::point<int, 2>> drag_;
box_shape shape_;
element * children_[3];