From e4c45796cf94e8df70d6859d5f891acf8ee38fca Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 25 Apr 2020 12:22:20 +0200 Subject: WIP: Drag 'em balls --- plugingui/powerwidget.cc | 69 +++++++++++++++++++++++++++++++++++++++++++++--- plugingui/powerwidget.h | 6 +++++ 2 files changed, 72 insertions(+), 3 deletions(-) diff --git a/plugingui/powerwidget.cc b/plugingui/powerwidget.cc index a1af333..83ce2b9 100644 --- a/plugingui/powerwidget.cc +++ b/plugingui/powerwidget.cc @@ -35,6 +35,7 @@ #include #include +#include PowerWidget::PowerWidget(GUI::Widget* parent, Settings& settings, @@ -179,13 +180,14 @@ void PowerWidget::Canvas::repaintEvent(GUI::RepaintEvent *repaintEvent) p.clear(); // draw the fixed nodes of the spline + float rad = radius * width(); p.setColour(GUI::Colour{0.f, 0.7f, .5f, 1.f}); p.drawFilledCircle(power_map.getFixed0().in*width(), - height() - power_map.getFixed0().out*height(), 3); + height() - power_map.getFixed0().out*height(), rad); p.drawFilledCircle(power_map.getFixed1().in*width(), - height() - power_map.getFixed1().out*height(), 3); + height() - power_map.getFixed1().out*height(), rad); p.drawFilledCircle(power_map.getFixed2().in*width(), - height() - power_map.getFixed2().out*height(), 3); + height() - power_map.getFixed2().out*height(), rad); if(enabled) { @@ -216,6 +218,67 @@ void PowerWidget::Canvas::repaintEvent(GUI::RepaintEvent *repaintEvent) old = { x, height() - y }; } +void PowerWidget::Canvas::buttonEvent(GUI::ButtonEvent* buttonEvent) +{ + float x0 = (float)buttonEvent->x / width(); + float y0 = (float)(height() - buttonEvent->y) / height(); + + switch(buttonEvent->direction) + { + case GUI::Direction::up: + in_point = -1; + break; + case GUI::Direction::down: + if(std::abs(x0 - settings.fixed0_x.load()) < radius && + std::abs(y0 - settings.fixed0_y.load()) < radius) + { + in_point = 0; + } + + if(std::abs(x0 - settings.fixed1_x.load()) < radius && + std::abs(y0 - settings.fixed1_y.load()) < radius) + { + in_point = 1; + } + + if(std::abs(x0 - settings.fixed2_x.load()) < radius && + std::abs(y0 - settings.fixed2_y.load()) < radius) + { + in_point = 2; + } + break; + } +} + +void PowerWidget::Canvas::mouseMoveEvent(GUI::MouseMoveEvent* mouseMoveEvent) +{ + switch(in_point) + { + case 0: + settings.fixed0_x.store((float)mouseMoveEvent->x / width()); + settings.fixed0_y.store((float)(height() - mouseMoveEvent->y) / height()); + redraw(); + break; + case 1: + settings.fixed1_x.store((float)mouseMoveEvent->x / width()); + settings.fixed1_y.store((float)(height() - mouseMoveEvent->y) / height()); + redraw(); + break; + case 2: + settings.fixed2_x.store((float)mouseMoveEvent->x / width()); + settings.fixed2_y.store((float)(height() - mouseMoveEvent->y) / height()); + redraw(); + break; + default: + break; + } +} + +void PowerWidget::Canvas::mouseLeaveEvent() +{ + //in_point = -1; +} + void PowerWidget::Canvas::parameterChangedFloat(float) { power_map.setFixed0({settings.fixed0_x.load(), settings.fixed0_y.load()}); diff --git a/plugingui/powerwidget.h b/plugingui/powerwidget.h index 3645dc7..54f5564 100644 --- a/plugingui/powerwidget.h +++ b/plugingui/powerwidget.h @@ -63,6 +63,9 @@ private: // From Widget: virtual void repaintEvent(GUI::RepaintEvent *repaintEvent) override; + virtual void buttonEvent(GUI::ButtonEvent* buttonEvent) override; + virtual void mouseMoveEvent(GUI::MouseMoveEvent* mouseMoveEvent) override; + virtual void mouseLeaveEvent() override; private: Powermap power_map; @@ -74,6 +77,9 @@ private: Settings& settings; bool enabled{true}; + + int in_point{-1}; + const float radius = 0.015; }; void chk_enable(bool v); -- cgit v1.2.3