diff options
| author | Bent Bisballe Nyeng <deva@aasimon.org> | 2018-06-15 20:15:07 +0200 | 
|---|---|---|
| committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2018-07-15 18:56:00 +0200 | 
| commit | be9fe821ff1689ece9ee6433fcf42ec316e0aaad (patch) | |
| tree | 96ae9a9e52539c32b37d8f9805cf4a458125033a /plugingui | |
| parent | 3e003e674b31ca1308f5c32125f5a2152e773f17 (diff) | |
PoC for humanisation visualiser.
Diffstat (limited to 'plugingui')
| -rw-r--r-- | plugingui/Makefile.am | 2 | ||||
| -rw-r--r-- | plugingui/humaniservisualiser.cc | 124 | ||||
| -rw-r--r-- | plugingui/humaniservisualiser.h | 56 | ||||
| -rw-r--r-- | plugingui/timingframecontent.cc | 6 | ||||
| -rw-r--r-- | plugingui/timingframecontent.h | 5 | 
5 files changed, 192 insertions, 1 deletions
diff --git a/plugingui/Makefile.am b/plugingui/Makefile.am index 94e8a7c..fc31f35 100644 --- a/plugingui/Makefile.am +++ b/plugingui/Makefile.am @@ -68,6 +68,7 @@ nodist_libdggui_la_SOURCES = \  	font.cc \  	frame.cc \  	humanizerframecontent.cc \ +	humaniservisualiser.cc \  	image.cc \  	imagecache.cc \  	knob.cc \ @@ -191,6 +192,7 @@ EXTRA_DIST = \  	frame.h \  	guievent.h \  	humanizerframecontent.h \ +	humaniservisualiser.h \  	image.h \  	imagecache.h \  	knob.h \ 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 <notifier.h> +#include <settings.h> + +#include <iostream> + +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(); +} diff --git a/plugingui/humaniservisualiser.h b/plugingui/humaniservisualiser.h new file mode 100644 index 0000000..f7f4c15 --- /dev/null +++ b/plugingui/humaniservisualiser.h @@ -0,0 +1,56 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + *            humaniservisualiser.h + * + *  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. + */ +#pragma once + +#include "widget.h" + +class SettingsNotifier; + +class HumaniserVisualiser +	: public GUI::Widget +{ +public: +	HumaniserVisualiser(GUI::Widget* parent, +	                    SettingsNotifier& settings_notifier); + +	// From Widget: +	virtual void repaintEvent(GUI::RepaintEvent *repaintEvent) override; + +	void latencyOffsetChanged(int offset); +	void velocityOffsetChanged(float offset); +	void latencyStddevChanged(float stddev); +	void latencyLaidbackChanged(int laidback); +	void velocityStddevChanged(float stddev); + +private: +	int latency_offset; +	float velocity_offset; +	float latency_stddev; +	int laidback; +	float velocity_stddev; +	SettingsNotifier& settings_notifier; +}; diff --git a/plugingui/timingframecontent.cc b/plugingui/timingframecontent.cc index 5e48423..d6b4c29 100644 --- a/plugingui/timingframecontent.cc +++ b/plugingui/timingframecontent.cc @@ -27,6 +27,7 @@  #include "timingframecontent.h"  #include <cmath> +#include <iostream>  #include "painter.h" @@ -39,6 +40,7 @@ TimingframeContent::TimingframeContent(Widget* parent,  	: Widget(parent)  	, settings(settings)  	, settings_notifier(settings_notifier) +	, visualiser(this, settings_notifier)  {  	layout.setResizeChildren(false); @@ -70,6 +72,9 @@ TimingframeContent::TimingframeContent(Widget* parent,  	layout.setPosition(®ain, GridLayout::GridRange{1, 2, 0, 1});  	layout.setPosition(&laidback, GridLayout::GridRange{2, 3, 0, 1}); +	visualiser.move(80, 40); +	visualiser.resize(40, 40); +  	CONNECT(this, settings_notifier.latency_stddev,  	        this, &TimingframeContent::tightnessSettingsValueChanged);  	CONNECT(this, settings_notifier.latency_regain, @@ -83,7 +88,6 @@ TimingframeContent::TimingframeContent(Widget* parent,  	        this, &TimingframeContent::regainKnobValueChanged);  	CONNECT(&laidback_knob, valueChangedNotifier,  	        this, &TimingframeContent::laidbackKnobValueChanged); -  }  float TimingframeContent::thightnessKnobToSettings(float value) const diff --git a/plugingui/timingframecontent.h b/plugingui/timingframecontent.h index 011b288..e0131e3 100644 --- a/plugingui/timingframecontent.h +++ b/plugingui/timingframecontent.h @@ -31,6 +31,7 @@  #include "labeledcontrol.h"  #include "layout.h"  #include "widget.h" +#include "humaniservisualiser.h"  #include <settings.h> @@ -63,6 +64,9 @@ private:  	void laidbackKnobValueChanged(float value);  	void laidbackSettingsValueChanged(int value); +	void latencyOffsetChanged(int offset); +	void velocityOffsetChanged(float offset); +  	GridLayout layout{this, 3, 1};  	LabeledControl tightness{this, "Tightness"}; @@ -75,6 +79,7 @@ private:  	Settings& settings;  	SettingsNotifier& settings_notifier; +	HumaniserVisualiser visualiser;  };  } // GUI::  | 
