From be9fe821ff1689ece9ee6433fcf42ec316e0aaad Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 15 Jun 2018 20:15:07 +0200 Subject: PoC for humanisation visualiser. --- plugingui/humaniservisualiser.cc | 124 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 plugingui/humaniservisualiser.cc (limited to 'plugingui/humaniservisualiser.cc') diff --git a/plugingui/humaniservisualiser.cc b/plugingui/humaniservisualiser.cc new file mode 100644 index 0000000..6737e36 --- /dev/null +++ b/plugingui/humaniservisualiser.cc @@ -0,0 +1,124 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + * humaniservisualiser.cc + * + * Fri Jun 15 19:09:18 CEST 2018 + * Copyright 2018 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DrumGizmo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with DrumGizmo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "humaniservisualiser.h" + +#include "painter.h" + +#include +#include + +#include + +HumaniserVisualiser::HumaniserVisualiser(GUI::Widget* parent, + SettingsNotifier& settings_notifier) + : GUI::Widget(parent) + , settings_notifier(settings_notifier) +{ + CONNECT(this, settings_notifier.latency_current, + this, &HumaniserVisualiser::latencyOffsetChanged); + CONNECT(this, settings_notifier.velocity_modifier_current, + this, &HumaniserVisualiser::velocityOffsetChanged); + + CONNECT(this, settings_notifier.latency_stddev, + this, &HumaniserVisualiser::latencyStddevChanged); + CONNECT(this, settings_notifier.latency_laid_back, + this, &HumaniserVisualiser::latencyLaidbackChanged); + CONNECT(this, settings_notifier.velocity_stddev, + this, &HumaniserVisualiser::velocityStddevChanged); +} + +void HumaniserVisualiser::repaintEvent(GUI::RepaintEvent *repaintEvent) +{ + GUI::Painter p(*this); + + // Background + p.setColour(GUI::Colour(0, 0, 1)); + p.drawFilledRectangle(0, 0, width(), height()); + + int x = latency_offset / 2000.0 * width() / 2 + width() / 2; + int y = velocity_offset * height(); + int w = latency_stddev / 10; + int h = velocity_stddev * 10; + + // Stddev squares + float v = w; + while(v > 1) + { + float a = 1.0f - v / (float)w; + a = a * a * a; + p.setColour(GUI::Colour(1.0f, 0.0f, 1.0f, a)); + p.drawFilledRectangle(x - v / 2, 0, + x + v / 2, height()); + v -= 1.0f; + } + + v = h; + while(v > 1) + { + float a = 1.0f - v / (float)h; + a = a * a * a; + p.setColour(GUI::Colour(1.0f, 0.0f, 1.0f, a)); + p.drawFilledRectangle(0, y - v / 2, + width(), y + v / 2); + v -= 1.0f; + } + + // Lines + p.setColour(GUI::Colour(0, 1, 1)); + p.drawLine(0, y, width(), y); + p.drawLine(x, 0, x, height()); +} + +void HumaniserVisualiser::latencyOffsetChanged(int offset) +{ + latency_offset = offset; + redraw(); +} + +void HumaniserVisualiser::velocityOffsetChanged(float offset) +{ + velocity_offset = -1 * offset + 1; + redraw(); +} + +void HumaniserVisualiser::latencyStddevChanged(float stddev) +{ + latency_stddev = stddev; + redraw(); +} + +void HumaniserVisualiser::latencyLaidbackChanged(int laidback) +{ + this->laidback = laidback; + redraw(); +} + +void HumaniserVisualiser::velocityStddevChanged(float stddev) +{ + velocity_stddev = stddev; + redraw(); +} -- cgit v1.2.3