summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Nusser <andre.nusser@googlemail.com>2020-04-30 22:25:44 +0200
committerAndré Nusser <andre.nusser@googlemail.com>2020-04-30 22:25:44 +0200
commit43ab0002e3048684b5661a5c341fc5f0e0f49f13 (patch)
treec4e4746836eb7654928ab2e652408664660e5b88
parent224c50a694b831a6fe8f901d988f5156385716dc (diff)
Mark last input and output in powermap widget.
-rw-r--r--plugingui/powerwidget.cc14
-rw-r--r--src/powermapfilter.cc2
-rw-r--r--src/settings.h15
3 files changed, 31 insertions, 0 deletions
diff --git a/plugingui/powerwidget.cc b/plugingui/powerwidget.cc
index 2d24fa0..7e8a904 100644
--- a/plugingui/powerwidget.cc
+++ b/plugingui/powerwidget.cc
@@ -105,6 +105,10 @@ PowerWidget::Canvas::Canvas(GUI::Widget* parent,
this, &PowerWidget::Canvas::parameterChangedFloat);
CONNECT(this, settings_notifier.powermap_shelf,
this, &PowerWidget::Canvas::parameterChangedBool);
+ CONNECT(this, settings_notifier.powermap_input,
+ this, &PowerWidget::Canvas::parameterChangedFloat);
+ CONNECT(this, settings_notifier.powermap_output,
+ this, &PowerWidget::Canvas::parameterChangedFloat);
parameterChangedFloat(0);
}
@@ -170,6 +174,16 @@ void PowerWidget::Canvas::repaintEvent(GUI::RepaintEvent *repaintEvent)
p.drawLine(x0, y0 + height0, x0 + width0, y0);
}
+ // draw the input/output of the last hit
+ if(settings.powermap_input.load() != -1 && settings.powermap_output.load() != -1)
+ {
+ p.setColour(GUI::Colour(.8f, 0.0f, .2f, .5f));
+ p.drawLine(x0 + settings.powermap_input.load()*width0, y0 + height0,
+ x0 + settings.powermap_input.load()*width0, y0);
+ p.drawLine(x0, y0 + height0 - settings.powermap_output.load()*height0,
+ x0 + width0, y0 + height0 - settings.powermap_output.load()*height0);
+ }
+
// draw the fixed nodes of the spline
float rad = radius * width();
p.setColour(GUI::Colour{0.0f, 1.0f, 0.0f, 0.7f});
diff --git a/src/powermapfilter.cc b/src/powermapfilter.cc
index 702a837..45df51e 100644
--- a/src/powermapfilter.cc
+++ b/src/powermapfilter.cc
@@ -38,6 +38,7 @@ bool PowermapFilter::filter(event_t& event, size_t pos)
// the position is irrelevant for this filter
(void) pos;
+ settings.powermap_input.store(event.velocity);
if (settings.enable_powermap.load())
{
powermap.setFixed0({settings.powermap_fixed0_x.load(), settings.powermap_fixed0_y.load()});
@@ -47,6 +48,7 @@ bool PowermapFilter::filter(event_t& event, size_t pos)
event.velocity = powermap.map(event.velocity);
}
+ settings.powermap_output.store(event.velocity);
return true;
}
diff --git a/src/settings.h b/src/settings.h
index 471d730..a3d21d0 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -154,6 +154,10 @@ struct Settings
Atomic<float> powermap_fixed2_y{1.};
Atomic<bool> powermap_shelf{true};
+ // Powermap visualizer; -1 is "none"
+ Atomic<float> powermap_input{-1.};
+ Atomic<float> powermap_output{-1.};
+
Atomic<std::size_t> audition_counter{0};
Atomic<std::string> audition_instrument;
Atomic<float> audition_velocity;
@@ -228,6 +232,9 @@ struct SettingsGetter
SettingRef<float> powermap_fixed2_y;
SettingRef<bool> powermap_shelf;
+ SettingRef<float> powermap_input;
+ SettingRef<float> powermap_output;
+
SettingRef<std::size_t> audition_counter;
SettingRef<std::string> audition_instrument;
SettingRef<float> audition_velocity;
@@ -284,6 +291,8 @@ struct SettingsGetter
, powermap_fixed2_x{settings.powermap_fixed2_x}
, powermap_fixed2_y{settings.powermap_fixed2_y}
, powermap_shelf{settings.powermap_shelf}
+ , powermap_input{settings.powermap_input}
+ , powermap_output{settings.powermap_output}
, audition_counter{settings.audition_counter}
, audition_instrument{settings.audition_instrument}
, audition_velocity{settings.audition_velocity}
@@ -357,6 +366,9 @@ public:
Notifier<float> powermap_fixed2_y;
Notifier<bool> powermap_shelf;
+ Notifier<float> powermap_input;
+ Notifier<float> powermap_output;
+
Notifier<std::size_t> audition_counter;
Notifier<std::string> audition_instrument;
Notifier<int> audition_velocity;
@@ -428,6 +440,9 @@ public:
EVAL(powermap_fixed2_y);
EVAL(powermap_shelf);
+ EVAL(powermap_input);
+ EVAL(powermap_output);
+
EVAL(audition_counter);
EVAL(audition_instrument);
EVAL(audition_velocity);