[widgets] start handling drag

This commit is contained in:
thibaud keller 2024-12-30 12:32:54 +00:00
parent b0081c70de
commit e52bd0b3c0
7 changed files with 37 additions and 1 deletions

@ -1 +1 @@
Subproject commit d1cdce9329c01e98343d798adbe76c7df0013aec Subproject commit 92dbd6d9d49bd13e573fa644e71561c696423140

View file

@ -40,6 +40,15 @@ bool Controller::on_double_press(int x, int y)
return false; return false;
} }
bool Controller::on_drag(int from_x, int from_y, int to_x, int to_y)
{
for (auto& w : widgets)
if (w->on_drag(from_x, from_y, to_x, to_y))
return true;
return false;
}
void Controller::on_play(bool pressed) void Controller::on_play(bool pressed)
{ {
if (m_shift) if (m_shift)

View file

@ -31,6 +31,7 @@ public:
bool on_press(int x, int y, bool pressed) override; bool on_press(int x, int y, bool pressed) override;
bool on_double_press(int x, int y) override; bool on_double_press(int x, int y) override;
bool on_drag(int from_x, int from_y, int to_x, int to_y) override;
private: private:
Scenario::IntervalModel* interval; Scenario::IntervalModel* interval;

View file

@ -62,6 +62,20 @@ bool IntervalWidget::on_double_press(int x, int y)
return true; return true;
} }
bool IntervalWidget::on_drag(int from_x, int from_y, int to_x, int to_y)
{
if (!is_inside(from_x, from_y)) return false;
if (from_y != to_y)
{
double new_percentage{(1 / static_cast<double>(parent->height())) * to_y};
model.requestHeightChange(new_percentage);
parent->update();
}
return true;
}
const Scenario::IntervalModel &IntervalWidget::get_model() const const Scenario::IntervalModel &IntervalWidget::get_model() const
{ {
return model; return model;

View file

@ -14,6 +14,7 @@ struct IntervalWidget final : bugui::base_widget
void paint(bugui::painter& painter) const override; void paint(bugui::painter& painter) const override;
bool on_press(int x, int y, bool pressed) override; bool on_press(int x, int y, bool pressed) override;
bool on_double_press(int x, int y) override; bool on_double_press(int x, int y) override;
bool on_drag(int from_x, int from_y, int to_x, int to_y) override;
int x() const override; int x() const override;
int y() const override; int y() const override;

View file

@ -44,6 +44,16 @@ bool ScenarioWidget::on_double_press(int x, int y)
return true; return true;
} }
bool ScenarioWidget::on_drag(int from_x, int from_y, int to_x, int to_y)
{
if (!is_inside(from_x, from_y)) return false;
for (auto& w : widgets)
if (w->on_drag(from_x, from_y, to_x, to_y)) return true;
return true;
}
int ScenarioWidget::x() const int ScenarioWidget::x() const
{ {
return bugui::base_widget::parent->x(); return bugui::base_widget::parent->x();

View file

@ -20,6 +20,7 @@ public:
void paint(bugui::painter& painter) const override; void paint(bugui::painter& painter) const override;
bool on_press(int x, int y, bool pressed) override; bool on_press(int x, int y, bool pressed) override;
bool on_double_press(int x, int y) override; bool on_double_press(int x, int y) override;
bool on_drag(int from_x, int from_y, int to_x, int to_y) override;
int x() const override; int x() const override;
int y() const override; int y() const override;