summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2016-06-05 11:56:59 +1000
committerDamien Zammit <damien@zamaudio.com>2016-06-05 11:56:59 +1000
commite371bc62203710a168b3a088777f8a0dfcaab36e (patch)
tree5cf2c945645abe6a39785095d3e14a089f9bd84c
parentc463b9d3aa246699204fc4b9df5723d74a5e3d08 (diff)
Add numeric labels to plugins with break-out widgetlabelknobs
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r--plugins/ZaMaximX2/ZaMaximX2UI.cpp12
-rw-r--r--plugins/ZaMaximX2/ZaMaximX2UI.hpp15
-rw-r--r--plugins/ZaMultiComp/ZaMultiCompUI.cpp48
-rw-r--r--plugins/ZaMultiComp/ZaMultiCompUI.hpp35
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp48
-rw-r--r--plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp35
-rw-r--r--plugins/ZamComp/ZamCompUI.cpp20
-rw-r--r--plugins/ZamComp/ZamCompUI.hpp15
-rw-r--r--plugins/ZamCompX2/ZamCompX2UI.cpp20
-rw-r--r--plugins/ZamCompX2/ZamCompX2UI.hpp15
-rw-r--r--plugins/ZamDelay/ZamDelayUI.cpp16
-rw-r--r--plugins/ZamDelay/ZamDelayUI.hpp13
-rw-r--r--plugins/ZamEQ2/ZamEQ2UI.cpp26
-rw-r--r--plugins/ZamEQ2/ZamEQ2UI.hpp21
-rw-r--r--plugins/ZamGEQ31/ZamGEQ31UI.cpp8
-rw-r--r--plugins/ZamGEQ31/ZamGEQ31UI.hpp15
-rw-r--r--plugins/ZamGate/ZamGateUI.cpp16
-rw-r--r--plugins/ZamGate/ZamGateUI.hpp16
-rw-r--r--plugins/ZamGateX2/ZamGateX2UI.cpp16
-rw-r--r--plugins/ZamGateX2/ZamGateX2UI.hpp15
-rw-r--r--plugins/ZamHeadX2/ZamHeadX2UI.cpp12
-rw-r--r--plugins/ZamHeadX2/ZamHeadX2UI.hpp13
-rw-r--r--plugins/ZamTube/ZamTubeUI.cpp16
-rw-r--r--plugins/ZamTube/ZamTubeUI.hpp13
-rw-r--r--widgets/ZamWidgets.hpp631
25 files changed, 877 insertions, 233 deletions
diff --git a/plugins/ZaMaximX2/ZaMaximX2UI.cpp b/plugins/ZaMaximX2/ZaMaximX2UI.cpp
index 15d89bb..65ebed7 100644
--- a/plugins/ZaMaximX2/ZaMaximX2UI.cpp
+++ b/plugins/ZaMaximX2/ZaMaximX2UI.cpp
@@ -44,7 +44,7 @@ ZaMaximX2UI::ZaMaximX2UI()
Image knobImage(ZaMaximX2Artwork::knobData, ZaMaximX2Artwork::knobWidth, ZaMaximX2Artwork::knobHeight);
// knob
- fKnobRelease = new ImageKnob(this, knobImage);
+ fKnobRelease = new ZamKnob(this, knobImage);
fKnobRelease->setAbsolutePos(27, 46);
fKnobRelease->setId(ZaMaximX2Plugin::paramRelease);
fKnobRelease->setRange(1.0f, 100.0f);
@@ -55,7 +55,7 @@ ZaMaximX2UI::ZaMaximX2UI()
fKnobRelease->setRotationAngle(240);
fKnobRelease->setCallback(this);
- fKnobThresh = new ImageKnob(this, knobImage);
+ fKnobThresh = new ZamKnob(this, knobImage);
fKnobThresh->setAbsolutePos(110, 46);
fKnobThresh->setId(ZaMaximX2Plugin::paramThresh);
fKnobThresh->setRange(-30.0f, 0.0f);
@@ -65,7 +65,7 @@ ZaMaximX2UI::ZaMaximX2UI()
fKnobThresh->setRotationAngle(240);
fKnobThresh->setCallback(this);
- fKnobCeiling = new ImageKnob(this, knobImage);
+ fKnobCeiling = new ZamKnob(this, knobImage);
fKnobCeiling->setAbsolutePos(192, 46);
fKnobCeiling->setId(ZaMaximX2Plugin::paramCeiling);
fKnobCeiling->setRange(-30.0f, 0.0f);
@@ -126,17 +126,17 @@ void ZaMaximX2UI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZaMaximX2UI::imageKnobDragStarted(ImageKnob* knob)
+void ZaMaximX2UI::imageKnobDragStarted(ZamKnob* knob)
{
editParameter(knob->getId(), true);
}
-void ZaMaximX2UI::imageKnobDragFinished(ImageKnob* knob)
+void ZaMaximX2UI::imageKnobDragFinished(ZamKnob* knob)
{
editParameter(knob->getId(), false);
}
-void ZaMaximX2UI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZaMaximX2UI::imageKnobValueChanged(ZamKnob* knob, float value)
{
setParameterValue(knob->getId(), value);
}
diff --git a/plugins/ZaMaximX2/ZaMaximX2UI.hpp b/plugins/ZaMaximX2/ZaMaximX2UI.hpp
index 68c1ab2..759134e 100644
--- a/plugins/ZaMaximX2/ZaMaximX2UI.hpp
+++ b/plugins/ZaMaximX2/ZaMaximX2UI.hpp
@@ -20,18 +20,19 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZaMaximX2Artwork.hpp"
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZaMaximX2UI : public UI,
- public ImageKnob::Callback
+ public ZamKnob::Callback
{
public:
ZaMaximX2UI();
@@ -46,16 +47,16 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void onDisplay() override;
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobRelease, fKnobThresh;
- ScopedPointer<ImageKnob> fKnobCeiling;
+ ScopedPointer<ZamKnob> fKnobRelease, fKnobThresh;
+ ScopedPointer<ZamKnob> fKnobCeiling;
Image fLedRedImg;
float fLedRedValue;
diff --git a/plugins/ZaMultiComp/ZaMultiCompUI.cpp b/plugins/ZaMultiComp/ZaMultiCompUI.cpp
index 0e3f54c..6d54ae6 100644
--- a/plugins/ZaMultiComp/ZaMultiCompUI.cpp
+++ b/plugins/ZaMultiComp/ZaMultiCompUI.cpp
@@ -46,7 +46,7 @@ ZaMultiCompUI::ZaMultiCompUI()
int x = 250;
int y = 291;
// knob
- fKnobAttack1 = new ImageKnob(this, knobImage);
+ fKnobAttack1 = new ZamKnob(this, knobImage);
fKnobAttack1->setAbsolutePos(26+x, 43+y);
fKnobAttack1->setRange(0.1f, 200.0f);
fKnobAttack1->setLabel(true);
@@ -56,7 +56,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobAttack1->setRotationAngle(240);
fKnobAttack1->setCallback(this);
- fKnobAttack2 = new ImageKnob(this, knobImage);
+ fKnobAttack2 = new ZamKnob(this, knobImage);
fKnobAttack2->setAbsolutePos(26+x, 43+y-50);
fKnobAttack2->setRange(0.1f, 200.0f);
fKnobAttack2->setLabel(true);
@@ -66,7 +66,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobAttack2->setRotationAngle(240);
fKnobAttack2->setCallback(this);
- fKnobAttack3 = new ImageKnob(this, knobImage);
+ fKnobAttack3 = new ZamKnob(this, knobImage);
fKnobAttack3->setAbsolutePos(26+x, 43+y-100);
fKnobAttack3->setRange(0.1f, 200.0f);
fKnobAttack3->setLabel(true);
@@ -76,7 +76,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobAttack3->setRotationAngle(240);
fKnobAttack3->setCallback(this);
- fKnobRelease1 = new ImageKnob(this, knobImage);
+ fKnobRelease1 = new ZamKnob(this, knobImage);
fKnobRelease1->setAbsolutePos(108+x, 43+y);
fKnobRelease1->setRange(1.0f, 500.0f);
fKnobRelease1->setLabel(true);
@@ -85,7 +85,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobRelease1->setRotationAngle(240);
fKnobRelease1->setCallback(this);
- fKnobRelease2 = new ImageKnob(this, knobImage);
+ fKnobRelease2 = new ZamKnob(this, knobImage);
fKnobRelease2->setAbsolutePos(108+x, 43+y-50);
fKnobRelease2->setRange(1.0f, 500.0f);
fKnobRelease2->setLabel(true);
@@ -94,7 +94,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobRelease2->setRotationAngle(240);
fKnobRelease2->setCallback(this);
- fKnobRelease3 = new ImageKnob(this, knobImage);
+ fKnobRelease3 = new ZamKnob(this, knobImage);
fKnobRelease3->setAbsolutePos(108+x, 43+y-100);
fKnobRelease3->setRange(1.0f, 500.0f);
fKnobRelease3->setLabel(true);
@@ -103,7 +103,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobRelease3->setRotationAngle(240);
fKnobRelease3->setCallback(this);
- fKnobThresh3 = new ImageKnob(this, knobImage);
+ fKnobThresh3 = new ZamKnob(this, knobImage);
fKnobThresh3->setAbsolutePos(94.5+31, 99+134);
fKnobThresh3->setRange(-60.0f, 0.0f);
fKnobThresh3->setLabel(true);
@@ -112,7 +112,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobThresh3->setRotationAngle(240);
fKnobThresh3->setCallback(this);
- fKnobThresh2 = new ImageKnob(this, knobImage);
+ fKnobThresh2 = new ZamKnob(this, knobImage);
fKnobThresh2->setAbsolutePos(94.5+31, 150+134);
fKnobThresh2->setRange(-60.0f, 0.0f);
fKnobThresh2->setLabel(true);
@@ -121,7 +121,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobThresh2->setRotationAngle(240);
fKnobThresh2->setCallback(this);
- fKnobThresh1 = new ImageKnob(this, knobImage);
+ fKnobThresh1 = new ZamKnob(this, knobImage);
fKnobThresh1->setAbsolutePos(94.5+31, 201+134);
fKnobThresh1->setRange(-60.0f, 0.0f);
fKnobThresh1->setLabel(true);
@@ -130,7 +130,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobThresh1->setRotationAngle(240);
fKnobThresh1->setCallback(this);
- fKnobRatio1 = new ImageKnob(this, knobImage);
+ fKnobRatio1 = new ZamKnob(this, knobImage);
fKnobRatio1->setAbsolutePos(191.5+x, 43+y);
fKnobRatio1->setRange(1.0f, 20.0f);
fKnobRatio1->setLabel(true);
@@ -140,7 +140,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobRatio1->setRotationAngle(240);
fKnobRatio1->setCallback(this);
- fKnobRatio2 = new ImageKnob(this, knobImage);
+ fKnobRatio2 = new ZamKnob(this, knobImage);
fKnobRatio2->setAbsolutePos(191.5+x, 43+y-50);
fKnobRatio2->setRange(1.0f, 20.0f);
fKnobRatio2->setLabel(true);
@@ -150,7 +150,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobRatio2->setRotationAngle(240);
fKnobRatio2->setCallback(this);
- fKnobRatio3 = new ImageKnob(this, knobImage);
+ fKnobRatio3 = new ZamKnob(this, knobImage);
fKnobRatio3->setAbsolutePos(191.5+x, 43+y-100);
fKnobRatio3->setRange(1.0f, 20.0f);
fKnobRatio3->setLabel(true);
@@ -160,7 +160,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobRatio3->setRotationAngle(240);
fKnobRatio3->setCallback(this);
- fKnobKnee1 = new ImageKnob(this, knobImage);
+ fKnobKnee1 = new ZamKnob(this, knobImage);
fKnobKnee1->setAbsolutePos(273+x, 43+y);
fKnobKnee1->setRange(0.0f, 8.0f);
fKnobKnee1->setLabel(true);
@@ -169,7 +169,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobKnee1->setRotationAngle(240);
fKnobKnee1->setCallback(this);
- fKnobKnee2 = new ImageKnob(this, knobImage);
+ fKnobKnee2 = new ZamKnob(this, knobImage);
fKnobKnee2->setAbsolutePos(273+x, 43+y-50);
fKnobKnee2->setRange(0.0f, 8.0f);
fKnobKnee2->setLabel(true);
@@ -178,7 +178,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobKnee2->setRotationAngle(240);
fKnobKnee2->setCallback(this);
- fKnobKnee3 = new ImageKnob(this, knobImage);
+ fKnobKnee3 = new ZamKnob(this, knobImage);
fKnobKnee3->setAbsolutePos(273+x, 43+y-100);
fKnobKnee3->setRange(0.0f, 8.0f);
fKnobKnee3->setLabel(true);
@@ -187,7 +187,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobKnee3->setRotationAngle(240);
fKnobKnee3->setCallback(this);
- fKnobGlobalGain = new ImageKnob(this, knobImage);
+ fKnobGlobalGain = new ZamKnob(this, knobImage);
fKnobGlobalGain->setAbsolutePos(427-170, 41);
fKnobGlobalGain->setRange(-30.0f, 30.0f);
fKnobGlobalGain->setLabel(true);
@@ -196,7 +196,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobGlobalGain->setRotationAngle(240);
fKnobGlobalGain->setCallback(this);
- fKnobXover2 = new ImageKnob(this, knobImage);
+ fKnobXover2 = new ZamKnob(this, knobImage);
fKnobXover2->setAbsolutePos(22+333, 121-80);
fKnobXover2->setRange(1400.f, 14000.f);
fKnobXover2->setLabel(true);
@@ -206,7 +206,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobXover2->setRotationAngle(240);
fKnobXover2->setCallback(this);
- fKnobXover1 = new ImageKnob(this, knobImage);
+ fKnobXover1 = new ZamKnob(this, knobImage);
fKnobXover1->setAbsolutePos(22+333, 175.5-80);
fKnobXover1->setRange(20.0f, 1400.0f);
fKnobXover1->setLabel(true);
@@ -216,7 +216,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobXover1->setRotationAngle(240);
fKnobXover1->setCallback(this);
- fKnobMakeup3 = new ImageKnob(this, knobImage);
+ fKnobMakeup3 = new ZamKnob(this, knobImage);
fKnobMakeup3->setAbsolutePos(167.75+30, 99.5+134);
fKnobMakeup3->setRange(0.0f, 30.0f);
fKnobMakeup3->setLabel(true);
@@ -225,7 +225,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobMakeup3->setRotationAngle(240);
fKnobMakeup3->setCallback(this);
- fKnobMakeup2 = new ImageKnob(this, knobImage);
+ fKnobMakeup2 = new ZamKnob(this, knobImage);
fKnobMakeup2->setAbsolutePos(167.75+30, 150.25+134);
fKnobMakeup2->setRange(0.0f, 30.0f);
fKnobMakeup2->setLabel(true);
@@ -234,7 +234,7 @@ ZaMultiCompUI::ZaMultiCompUI()
fKnobMakeup2->setRotationAngle(240);
fKnobMakeup2->setCallback(this);
- fKnobMakeup1 = new ImageKnob(this, knobImage);
+ fKnobMakeup1 = new ZamKnob(this, knobImage);
fKnobMakeup1->setAbsolutePos(167.75+30, 201.4+134);
fKnobMakeup1->setRange(0.0f, 30.0f);
fKnobMakeup1->setLabel(true);
@@ -627,7 +627,7 @@ void ZaMultiCompUI::stateChanged(const char*, const char*)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZaMultiCompUI::imageKnobDragStarted(ImageKnob* knob)
+void ZaMultiCompUI::imageKnobDragStarted(ZamKnob* knob)
{
if (knob == fKnobAttack1)
editParameter(ZaMultiCompPlugin::paramAttack1, true);
@@ -673,7 +673,7 @@ void ZaMultiCompUI::imageKnobDragStarted(ImageKnob* knob)
editParameter(ZaMultiCompPlugin::paramXover2, true);
}
-void ZaMultiCompUI::imageKnobDragFinished(ImageKnob* knob)
+void ZaMultiCompUI::imageKnobDragFinished(ZamKnob* knob)
{
if (knob == fKnobAttack1)
editParameter(ZaMultiCompPlugin::paramAttack1, false);
@@ -719,7 +719,7 @@ void ZaMultiCompUI::imageKnobDragFinished(ImageKnob* knob)
editParameter(ZaMultiCompPlugin::paramXover2, false);
}
-void ZaMultiCompUI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZaMultiCompUI::imageKnobValueChanged(ZamKnob* knob, float value)
{
if (knob == fKnobAttack1)
setParameterValue(ZaMultiCompPlugin::paramAttack1, value);
diff --git a/plugins/ZaMultiComp/ZaMultiCompUI.hpp b/plugins/ZaMultiComp/ZaMultiCompUI.hpp
index f48d3d3..db1ff98 100644
--- a/plugins/ZaMultiComp/ZaMultiCompUI.hpp
+++ b/plugins/ZaMultiComp/ZaMultiCompUI.hpp
@@ -20,6 +20,7 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZaMultiCompArtwork.hpp"
@@ -27,7 +28,7 @@
#define MAX_COMP 3
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
using DGL::ImageSwitch;
START_NAMESPACE_DISTRHO
@@ -35,7 +36,7 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZaMultiCompUI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSwitch::Callback
{
public:
@@ -58,9 +59,9 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSwitchClicked(ImageSwitch* toggle, bool down) override;
@@ -86,18 +87,18 @@ sanitize_denormal(double value) {
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobAttack1, fKnobAttack2, fKnobAttack3;
- ScopedPointer<ImageKnob> fKnobRelease1, fKnobRelease2, fKnobRelease3;
- ScopedPointer<ImageKnob> fKnobThresh1, fKnobThresh2, fKnobThresh3;
- ScopedPointer<ImageKnob> fKnobRatio1;
- ScopedPointer<ImageKnob> fKnobRatio2;
- ScopedPointer<ImageKnob> fKnobRatio3;
- ScopedPointer<ImageKnob> fKnobKnee1;
- ScopedPointer<ImageKnob> fKnobKnee2;
- ScopedPointer<ImageKnob> fKnobKnee3;
- ScopedPointer<ImageKnob> fKnobGlobalGain;
- ScopedPointer<ImageKnob> fKnobMakeup1, fKnobMakeup2, fKnobMakeup3;
- ScopedPointer<ImageKnob> fKnobXover1, fKnobXover2;
+ ScopedPointer<ZamKnob> fKnobAttack1, fKnobAttack2, fKnobAttack3;
+ ScopedPointer<ZamKnob> fKnobRelease1, fKnobRelease2, fKnobRelease3;
+ ScopedPointer<ZamKnob> fKnobThresh1, fKnobThresh2, fKnobThresh3;
+ ScopedPointer<ZamKnob> fKnobRatio1;
+ ScopedPointer<ZamKnob> fKnobRatio2;
+ ScopedPointer<ZamKnob> fKnobRatio3;
+ ScopedPointer<ZamKnob> fKnobKnee1;
+ ScopedPointer<ZamKnob> fKnobKnee2;
+ ScopedPointer<ZamKnob> fKnobKnee3;
+ ScopedPointer<ZamKnob> fKnobGlobalGain;
+ ScopedPointer<ZamKnob> fKnobMakeup1, fKnobMakeup2, fKnobMakeup3;
+ ScopedPointer<ZamKnob> fKnobXover1, fKnobXover2;
ScopedPointer<ImageSwitch> fToggleBypass1, fToggleBypass2, fToggleBypass3;
ScopedPointer<ImageSwitch> fToggleListen1, fToggleListen2, fToggleListen3;
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp
index 4431098..52bde2e 100644
--- a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp
+++ b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.cpp
@@ -47,7 +47,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
int x = 250;
int y = 291;
// knob
- fKnobAttack1 = new ImageKnob(this, knobImage);
+ fKnobAttack1 = new ZamKnob(this, knobImage);
fKnobAttack1->setAbsolutePos(26+x, 43+y);
fKnobAttack1->setRange(0.1f, 200.0f);
fKnobAttack1->setLabel(true);
@@ -57,7 +57,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobAttack1->setRotationAngle(240);
fKnobAttack1->setCallback(this);
- fKnobAttack2 = new ImageKnob(this, knobImage);
+ fKnobAttack2 = new ZamKnob(this, knobImage);
fKnobAttack2->setAbsolutePos(26+x, 43+y-50);
fKnobAttack2->setRange(0.1f, 200.0f);
fKnobAttack2->setLabel(true);
@@ -67,7 +67,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobAttack2->setRotationAngle(240);
fKnobAttack2->setCallback(this);
- fKnobAttack3 = new ImageKnob(this, knobImage);
+ fKnobAttack3 = new ZamKnob(this, knobImage);
fKnobAttack3->setAbsolutePos(26+x, 43+y-100);
fKnobAttack3->setRange(0.1f, 200.0f);
fKnobAttack3->setLabel(true);
@@ -77,7 +77,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobAttack3->setRotationAngle(240);
fKnobAttack3->setCallback(this);
- fKnobRelease1 = new ImageKnob(this, knobImage);
+ fKnobRelease1 = new ZamKnob(this, knobImage);
fKnobRelease1->setAbsolutePos(108+x, 43+y);
fKnobRelease1->setRange(1.0f, 500.0f);
fKnobRelease1->setLabel(true);
@@ -86,7 +86,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobRelease1->setRotationAngle(240);
fKnobRelease1->setCallback(this);
- fKnobRelease2 = new ImageKnob(this, knobImage);
+ fKnobRelease2 = new ZamKnob(this, knobImage);
fKnobRelease2->setAbsolutePos(108+x, 43+y-50);
fKnobRelease2->setRange(1.0f, 500.0f);
fKnobRelease2->setLabel(true);
@@ -95,7 +95,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobRelease2->setRotationAngle(240);
fKnobRelease2->setCallback(this);
- fKnobRelease3 = new ImageKnob(this, knobImage);
+ fKnobRelease3 = new ZamKnob(this, knobImage);
fKnobRelease3->setAbsolutePos(108+x, 43+y-100);
fKnobRelease3->setRange(1.0f, 500.0f);
fKnobRelease3->setLabel(true);
@@ -104,7 +104,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobRelease3->setRotationAngle(240);
fKnobRelease3->setCallback(this);
- fKnobThresh3 = new ImageKnob(this, knobImage);
+ fKnobThresh3 = new ZamKnob(this, knobImage);
fKnobThresh3->setAbsolutePos(94.5+31, 99+134);
fKnobThresh3->setRange(-60.0f, 0.0f);
fKnobThresh3->setLabel(true);
@@ -113,7 +113,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobThresh3->setRotationAngle(240);
fKnobThresh3->setCallback(this);
- fKnobThresh2 = new ImageKnob(this, knobImage);
+ fKnobThresh2 = new ZamKnob(this, knobImage);
fKnobThresh2->setAbsolutePos(94.5+31, 150+134);
fKnobThresh2->setRange(-60.0f, 0.0f);
fKnobThresh2->setLabel(true);
@@ -122,7 +122,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobThresh2->setRotationAngle(240);
fKnobThresh2->setCallback(this);
- fKnobThresh1 = new ImageKnob(this, knobImage);
+ fKnobThresh1 = new ZamKnob(this, knobImage);
fKnobThresh1->setAbsolutePos(94.5+31, 201+134);
fKnobThresh1->setRange(-60.0f, 0.0f);
fKnobThresh1->setLabel(true);
@@ -131,7 +131,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobThresh1->setRotationAngle(240);
fKnobThresh1->setCallback(this);
- fKnobRatio1 = new ImageKnob(this, knobImage);
+ fKnobRatio1 = new ZamKnob(this, knobImage);
fKnobRatio1->setAbsolutePos(191.5+x, 43+y);
fKnobRatio1->setRange(1.0f, 20.0f);
fKnobRatio1->setLabel(true);
@@ -141,7 +141,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobRatio1->setRotationAngle(240);
fKnobRatio1->setCallback(this);
- fKnobRatio2 = new ImageKnob(this, knobImage);
+ fKnobRatio2 = new ZamKnob(this, knobImage);
fKnobRatio2->setAbsolutePos(191.5+x, 43+y-50);
fKnobRatio2->setRange(1.0f, 20.0f);
fKnobRatio2->setLabel(true);
@@ -151,7 +151,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobRatio2->setRotationAngle(240);
fKnobRatio2->setCallback(this);
- fKnobRatio3 = new ImageKnob(this, knobImage);
+ fKnobRatio3 = new ZamKnob(this, knobImage);
fKnobRatio3->setAbsolutePos(191.5+x, 43+y-100);
fKnobRatio3->setRange(1.0f, 20.0f);
fKnobRatio3->setLabel(true);
@@ -161,7 +161,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobRatio3->setRotationAngle(240);
fKnobRatio3->setCallback(this);
- fKnobKnee1 = new ImageKnob(this, knobImage);
+ fKnobKnee1 = new ZamKnob(this, knobImage);
fKnobKnee1->setAbsolutePos(273+x, 43+y);
fKnobKnee1->setRange(0.0f, 8.0f);
fKnobKnee1->setLabel(true);
@@ -170,7 +170,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobKnee1->setRotationAngle(240);
fKnobKnee1->setCallback(this);
- fKnobKnee2 = new ImageKnob(this, knobImage);
+ fKnobKnee2 = new ZamKnob(this, knobImage);
fKnobKnee2->setAbsolutePos(273+x, 43+y-50);
fKnobKnee2->setRange(0.0f, 8.0f);
fKnobKnee2->setLabel(true);
@@ -179,7 +179,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobKnee2->setRotationAngle(240);
fKnobKnee2->setCallback(this);
- fKnobKnee3 = new ImageKnob(this, knobImage);
+ fKnobKnee3 = new ZamKnob(this, knobImage);
fKnobKnee3->setAbsolutePos(273+x, 43+y-100);
fKnobKnee3->setRange(0.0f, 8.0f);
fKnobKnee3->setLabel(true);
@@ -188,7 +188,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobKnee3->setRotationAngle(240);
fKnobKnee3->setCallback(this);
- fKnobGlobalGain = new ImageKnob(this, knobImage);
+ fKnobGlobalGain = new ZamKnob(this, knobImage);
fKnobGlobalGain->setAbsolutePos(427-170, 41);
fKnobGlobalGain->setRange(-30.0f, 30.0f);
fKnobGlobalGain->setLabel(true);
@@ -197,7 +197,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobGlobalGain->setRotationAngle(240);
fKnobGlobalGain->setCallback(this);
- fKnobXover2 = new ImageKnob(this, knobImage);
+ fKnobXover2 = new ZamKnob(this, knobImage);
fKnobXover2->setAbsolutePos(22+333, 121-80);
fKnobXover2->setRange(1400.f, 14000.f);
fKnobXover2->setLabel(true);
@@ -207,7 +207,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobXover2->setRotationAngle(240);
fKnobXover2->setCallback(this);
- fKnobXover1 = new ImageKnob(this, knobImage);
+ fKnobXover1 = new ZamKnob(this, knobImage);
fKnobXover1->setAbsolutePos(22+333, 175.5-80);
fKnobXover1->setRange(20.0f, 1400.0f);
fKnobXover1->setLabel(true);
@@ -217,7 +217,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobXover1->setRotationAngle(240);
fKnobXover1->setCallback(this);
- fKnobMakeup3 = new ImageKnob(this, knobImage);
+ fKnobMakeup3 = new ZamKnob(this, knobImage);
fKnobMakeup3->setAbsolutePos(167.75+30, 99.5+134);
fKnobMakeup3->setRange(0.0f, 30.0f);
fKnobMakeup3->setLabel(true);
@@ -226,7 +226,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobMakeup3->setRotationAngle(240);
fKnobMakeup3->setCallback(this);
- fKnobMakeup2 = new ImageKnob(this, knobImage);
+ fKnobMakeup2 = new ZamKnob(this, knobImage);
fKnobMakeup2->setAbsolutePos(167.75+30, 150.25+134);
fKnobMakeup2->setRange(0.0f, 30.0f);
fKnobMakeup2->setLabel(true);
@@ -235,7 +235,7 @@ ZaMultiCompX2UI::ZaMultiCompX2UI()
fKnobMakeup2->setRotationAngle(240);
fKnobMakeup2->setCallback(this);
- fKnobMakeup1 = new ImageKnob(this, knobImage);
+ fKnobMakeup1 = new ZamKnob(this, knobImage);
fKnobMakeup1->setAbsolutePos(167.75+30, 201.4+134);
fKnobMakeup1->setRange(0.0f, 30.0f);
fKnobMakeup1->setLabel(true);
@@ -640,7 +640,7 @@ void ZaMultiCompX2UI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZaMultiCompX2UI::imageKnobDragStarted(ImageKnob* knob)
+void ZaMultiCompX2UI::imageKnobDragStarted(ZamKnob* knob)
{
if (knob == fKnobAttack1)
editParameter(ZaMultiCompX2Plugin::paramAttack1, true);
@@ -686,7 +686,7 @@ void ZaMultiCompX2UI::imageKnobDragStarted(ImageKnob* knob)
editParameter(ZaMultiCompX2Plugin::paramXover2, true);
}
-void ZaMultiCompX2UI::imageKnobDragFinished(ImageKnob* knob)
+void ZaMultiCompX2UI::imageKnobDragFinished(ZamKnob* knob)
{
if (knob == fKnobAttack1)
editParameter(ZaMultiCompX2Plugin::paramAttack1, false);
@@ -732,7 +732,7 @@ void ZaMultiCompX2UI::imageKnobDragFinished(ImageKnob* knob)
editParameter(ZaMultiCompX2Plugin::paramXover2, false);
}
-void ZaMultiCompX2UI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZaMultiCompX2UI::imageKnobValueChanged(ZamKnob* knob, float value)
{
if (knob == fKnobAttack1)
setParameterValue(ZaMultiCompX2Plugin::paramAttack1, value);
diff --git a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp
index 98c8eb3..d8919e0 100644
--- a/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp
+++ b/plugins/ZaMultiCompX2/ZaMultiCompX2UI.hpp
@@ -20,6 +20,7 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZaMultiCompX2Artwork.hpp"
@@ -27,7 +28,7 @@
#define MAX_COMP 3
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
using DGL::ImageSwitch;
START_NAMESPACE_DISTRHO
@@ -35,7 +36,7 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZaMultiCompX2UI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSwitch::Callback
{
public:
@@ -57,9 +58,9 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSwitchClicked(ImageSwitch* toggle, bool down) override;
@@ -85,18 +86,18 @@ sanitize_denormal(double value) {
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobAttack1, fKnobAttack2, fKnobAttack3;
- ScopedPointer<ImageKnob> fKnobRelease1, fKnobRelease2, fKnobRelease3;
- ScopedPointer<ImageKnob> fKnobThresh1, fKnobThresh2, fKnobThresh3;
- ScopedPointer<ImageKnob> fKnobRatio1;
- ScopedPointer<ImageKnob> fKnobRatio2;
- ScopedPointer<ImageKnob> fKnobRatio3;
- ScopedPointer<ImageKnob> fKnobKnee1;
- ScopedPointer<ImageKnob> fKnobKnee2;
- ScopedPointer<ImageKnob> fKnobKnee3;
- ScopedPointer<ImageKnob> fKnobGlobalGain;
- ScopedPointer<ImageKnob> fKnobMakeup1, fKnobMakeup2, fKnobMakeup3;
- ScopedPointer<ImageKnob> fKnobXover1, fKnobXover2;
+ ScopedPointer<ZamKnob> fKnobAttack1, fKnobAttack2, fKnobAttack3;
+ ScopedPointer<ZamKnob> fKnobRelease1, fKnobRelease2, fKnobRelease3;
+ ScopedPointer<ZamKnob> fKnobThresh1, fKnobThresh2, fKnobThresh3;
+ ScopedPointer<ZamKnob> fKnobRatio1;
+ ScopedPointer<ZamKnob> fKnobRatio2;
+ ScopedPointer<ZamKnob> fKnobRatio3;
+ ScopedPointer<ZamKnob> fKnobKnee1;
+ ScopedPointer<ZamKnob> fKnobKnee2;
+ ScopedPointer<ZamKnob> fKnobKnee3;
+ ScopedPointer<ZamKnob> fKnobGlobalGain;
+ ScopedPointer<ZamKnob> fKnobMakeup1, fKnobMakeup2, fKnobMakeup3;
+ ScopedPointer<ZamKnob> fKnobXover1, fKnobXover2;
ScopedPointer<ImageSwitch> fToggleBypass1, fToggleBypass2, fToggleBypass3;
ScopedPointer<ImageSwitch> fToggleListen1, fToggleListen2, fToggleListen3;
ScopedPointer<ImageSwitch> fToggleStereo;
diff --git a/plugins/ZamComp/ZamCompUI.cpp b/plugins/ZamComp/ZamCompUI.cpp
index 11c58b9..739978a 100644
--- a/plugins/ZamComp/ZamCompUI.cpp
+++ b/plugins/ZamComp/ZamCompUI.cpp
@@ -47,7 +47,7 @@ ZamCompUI::ZamCompUI()
Image knobImage(ZamCompArtwork::knobData, ZamCompArtwork::knobWidth, ZamCompArtwork::knobHeight);
// knob
- fKnobAttack = new ImageKnob(this, knobImage);
+ fKnobAttack = new ZamKnob(this, knobImage);
fKnobAttack->setAbsolutePos(24, 45);
fKnobAttack->setId(ZamCompPlugin::paramAttack);
fKnobAttack->setRange(0.1f, 200.0f);
@@ -58,7 +58,7 @@ ZamCompUI::ZamCompUI()
fKnobAttack->setRotationAngle(240);
fKnobAttack->setCallback(this);
- fKnobRelease = new ImageKnob(this, knobImage);
+ fKnobRelease = new ZamKnob(this, knobImage);
fKnobRelease->setAbsolutePos(108, 45);
fKnobRelease->setId(ZamCompPlugin::paramRelease);
fKnobRelease->setRange(1.0f, 500.0f);
@@ -68,7 +68,7 @@ ZamCompUI::ZamCompUI()
fKnobRelease->setRotationAngle(240);
fKnobRelease->setCallback(this);
- fKnobThresh = new ImageKnob(this, knobImage);
+ fKnobThresh = new ZamKnob(this, knobImage);
fKnobThresh->setAbsolutePos(191.5, 45);
fKnobThresh->setId(ZamCompPlugin::paramThresh);
fKnobThresh->setRange(-60.0f, 0.0f);
@@ -78,7 +78,7 @@ ZamCompUI::ZamCompUI()
fKnobThresh->setRotationAngle(240);
fKnobThresh->setCallback(this);
- fKnobRatio = new ImageKnob(this, knobImage);
+ fKnobRatio = new ZamKnob(this, knobImage);
fKnobRatio->setAbsolutePos(270, 45);
fKnobRatio->setId(ZamCompPlugin::paramRatio);
fKnobRatio->setRange(1.0f, 20.0f);
@@ -89,7 +89,7 @@ ZamCompUI::ZamCompUI()
fKnobRatio->setRotationAngle(240);
fKnobRatio->setCallback(this);
- fKnobKnee = new ImageKnob(this, knobImage);
+ fKnobKnee = new ZamKnob(this, knobImage);
fKnobKnee->setAbsolutePos(348.5, 45);
fKnobKnee->setId(ZamCompPlugin::paramKnee);
fKnobKnee->setRange(0.0f, 8.0f);
@@ -99,7 +99,7 @@ ZamCompUI::ZamCompUI()
fKnobKnee->setRotationAngle(240);
fKnobKnee->setCallback(this);
- fKnobMakeup = new ImageKnob(this, knobImage);
+ fKnobMakeup = new ZamKnob(this, knobImage);
fKnobMakeup->setAbsolutePos(638, 62);
fKnobMakeup->setId(ZamCompPlugin::paramMakeup);
fKnobMakeup->setRange(-30.0f, 30.0f);
@@ -109,7 +109,7 @@ ZamCompUI::ZamCompUI()
fKnobMakeup->setRotationAngle(240);
fKnobMakeup->setCallback(this);
- fKnobSlew = new ImageKnob(this, knobImage);
+ fKnobSlew = new ZamKnob(this, knobImage);
fKnobSlew->setAbsolutePos(427.3, 45);
fKnobSlew->setId(ZamCompPlugin::paramSlew);
fKnobSlew->setRange(1.0f, 150.0f);
@@ -215,17 +215,17 @@ void ZamCompUI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZamCompUI::imageKnobDragStarted(ImageKnob* knob)
+void ZamCompUI::imageKnobDragStarted(ZamKnob* knob)
{
editParameter(knob->getId(), true);
}
-void ZamCompUI::imageKnobDragFinished(ImageKnob* knob)
+void ZamCompUI::imageKnobDragFinished(ZamKnob* knob)
{
editParameter(knob->getId(), false);
}
-void ZamCompUI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZamCompUI::imageKnobValueChanged(ZamKnob* knob, float value)
{
setParameterValue(knob->getId(), value);
}
diff --git a/plugins/ZamComp/ZamCompUI.hpp b/plugins/ZamComp/ZamCompUI.hpp
index cb7f524..b04f32d 100644
--- a/plugins/ZamComp/ZamCompUI.hpp
+++ b/plugins/ZamComp/ZamCompUI.hpp
@@ -20,18 +20,19 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZamCompArtwork.hpp"
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZamCompUI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSwitch::Callback
{
public:
@@ -47,17 +48,17 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSwitchClicked(ImageSwitch* tog, bool down) override;
void onDisplay() override;
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobAttack, fKnobRelease, fKnobThresh;
- ScopedPointer<ImageKnob> fKnobRatio, fKnobKnee, fKnobMakeup, fKnobSlew;
+ ScopedPointer<ZamKnob> fKnobAttack, fKnobRelease, fKnobThresh;
+ ScopedPointer<ZamKnob> fKnobRatio, fKnobKnee, fKnobMakeup, fKnobSlew;
ScopedPointer<ImageSwitch> fToggleSidechain;
Image fLedRedImg;
diff --git a/plugins/ZamCompX2/ZamCompX2UI.cpp b/plugins/ZamCompX2/ZamCompX2UI.cpp
index 63982d0..a932983 100644
--- a/plugins/ZamCompX2/ZamCompX2UI.cpp
+++ b/plugins/ZamCompX2/ZamCompX2UI.cpp
@@ -48,7 +48,7 @@ ZamCompX2UI::ZamCompX2UI()
Image knobImage(ZamCompX2Artwork::knobData, ZamCompX2Artwork::knobWidth, ZamCompX2Artwork::knobHeight);
// knob
- fKnobAttack = new ImageKnob(this, knobImage);
+ fKnobAttack = new ZamKnob(this, knobImage);
fKnobAttack->setAbsolutePos(24, 45);
fKnobAttack->setId(ZamCompX2Plugin::paramAttack);
fKnobAttack->setRange(0.1f, 200.0f);
@@ -59,7 +59,7 @@ ZamCompX2UI::ZamCompX2UI()
fKnobAttack->setRotationAngle(240);
fKnobAttack->setCallback(this);
- fKnobRelease = new ImageKnob(this, knobImage);
+ fKnobRelease = new ZamKnob(this, knobImage);
fKnobRelease->setAbsolutePos(108, 45);
fKnobRelease->setId(ZamCompX2Plugin::paramRelease);
fKnobRelease->setRange(1.0f, 500.0f);
@@ -69,7 +69,7 @@ ZamCompX2UI::ZamCompX2UI()
fKnobRelease->setRotationAngle(240);
fKnobRelease->setCallback(this);
- fKnobThresh = new ImageKnob(this, knobImage);
+ fKnobThresh = new ZamKnob(this, knobImage);
fKnobThresh->setAbsolutePos(191.5, 45);
fKnobThresh->setId(ZamCompX2Plugin::paramThresh);
fKnobThresh->setRange(-60.0f, 0.0f);
@@ -79,7 +79,7 @@ ZamCompX2UI::ZamCompX2UI()
fKnobThresh->setRotationAngle(240);
fKnobThresh->setCallback(this);
- fKnobRatio = new ImageKnob(this, knobImage);
+ fKnobRatio = new ZamKnob(this, knobImage);
fKnobRatio->setAbsolutePos(270, 45);
fKnobRatio->setId(ZamCompX2Plugin::paramRatio);
fKnobRatio->setRange(1.0f, 20.0f);
@@ -90,7 +90,7 @@ ZamCompX2UI::ZamCompX2UI()
fKnobRatio->setRotationAngle(240);
fKnobRatio->setCallback(this);
- fKnobKnee = new ImageKnob(this, knobImage);
+ fKnobKnee = new ZamKnob(this, knobImage);
fKnobKnee->setAbsolutePos(348.5, 45);
fKnobKnee->setId(ZamCompX2Plugin::paramKnee);
fKnobKnee->setRange(0.0f, 8.0f);
@@ -100,7 +100,7 @@ ZamCompX2UI::ZamCompX2UI()
fKnobKnee->setRotationAngle(240);
fKnobKnee->setCallback(this);
- fKnobMakeup = new ImageKnob(this, knobImage);
+ fKnobMakeup = new ZamKnob(this, knobImage);
fKnobMakeup->setAbsolutePos(638, 62);
fKnobMakeup->setId(ZamCompX2Plugin::paramMakeup);
fKnobMakeup->setRange(-30.0f, 30.0f);
@@ -110,7 +110,7 @@ ZamCompX2UI::ZamCompX2UI()
fKnobMakeup->setRotationAngle(240);
fKnobMakeup->setCallback(this);
- fKnobSlew = new ImageKnob(this, knobImage);
+ fKnobSlew = new ZamKnob(this, knobImage);
fKnobSlew->setAbsolutePos(427.3, 45);
fKnobSlew->setId(ZamCompX2Plugin::paramSlew);
fKnobSlew->setRange(1.0f, 150.0f);
@@ -227,17 +227,17 @@ void ZamCompX2UI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZamCompX2UI::imageKnobDragStarted(ImageKnob* knob)
+void ZamCompX2UI::imageKnobDragStarted(ZamKnob* knob)
{
editParameter(knob->getId(), true);
}
-void ZamCompX2UI::imageKnobDragFinished(ImageKnob* knob)
+void ZamCompX2UI::imageKnobDragFinished(ZamKnob* knob)
{
editParameter(knob->getId(), false);
}
-void ZamCompX2UI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZamCompX2UI::imageKnobValueChanged(ZamKnob* knob, float value)
{
setParameterValue(knob->getId(), value);
}
diff --git a/plugins/ZamCompX2/ZamCompX2UI.hpp b/plugins/ZamCompX2/ZamCompX2UI.hpp
index 97e9d4f..5f02400 100644
--- a/plugins/ZamCompX2/ZamCompX2UI.hpp
+++ b/plugins/ZamCompX2/ZamCompX2UI.hpp
@@ -20,11 +20,12 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZamCompX2Artwork.hpp"
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
using DGL::ImageSwitch;
START_NAMESPACE_DISTRHO
@@ -32,7 +33,7 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZamCompX2UI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSwitch::Callback
{
public:
@@ -48,17 +49,17 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSwitchClicked(ImageSwitch* toggle, bool down) override;
void onDisplay() override;
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobAttack, fKnobRelease, fKnobThresh;
- ScopedPointer<ImageKnob> fKnobRatio, fKnobKnee, fKnobMakeup, fKnobSlew;
+ ScopedPointer<ZamKnob> fKnobAttack, fKnobRelease, fKnobThresh;
+ ScopedPointer<ZamKnob> fKnobRatio, fKnobKnee, fKnobMakeup, fKnobSlew;
ScopedPointer<ImageSwitch> fToggleStereo, fToggleSidechain;
Image fLedRedImg;
diff --git a/plugins/ZamDelay/ZamDelayUI.cpp b/plugins/ZamDelay/ZamDelayUI.cpp
index 2228fa6..e4d8475 100644
--- a/plugins/ZamDelay/ZamDelayUI.cpp
+++ b/plugins/ZamDelay/ZamDelayUI.cpp
@@ -47,7 +47,7 @@ ZamDelayUI::ZamDelayUI()
Image triangleImage(ZamDelayArtwork::triangleData, ZamDelayArtwork::triangleWidth, ZamDelayArtwork::triangleHeight);
// knob
- fKnobDelaytime = new ImageKnob(this, knobImage);
+ fKnobDelaytime = new ZamKnob(this, knobImage);
fKnobDelaytime->setAbsolutePos(190, 79);
fKnobDelaytime->setId(ZamDelayPlugin::paramDelaytime);
fKnobDelaytime->setRange(1.0f, 8000.0f);
@@ -68,7 +68,7 @@ ZamDelayUI::ZamDelayUI()
fToggleBPM->setId(ZamDelayPlugin::paramSync);
fToggleBPM->setCallback(this);
- fKnobLPF = new ImageKnob(this, knobImage);
+ fKnobLPF = new ZamKnob(this, knobImage);
fKnobLPF->setAbsolutePos(67.5, 79);
fKnobLPF->setId(ZamDelayPlugin::paramLPF);
fKnobLPF->setRange(20.0f, 20000.0f);
@@ -79,7 +79,7 @@ ZamDelayUI::ZamDelayUI()
fKnobLPF->setRotationAngle(240);
fKnobLPF->setCallback(this);
- fKnobGain = new ImageKnob(this, knobImage);
+ fKnobGain = new ZamKnob(this, knobImage);
fKnobGain->setAbsolutePos(66, 201);
fKnobGain->setId(ZamDelayPlugin::paramGain);
fKnobGain->setRange(-60.0f, 0.0f);
@@ -88,7 +88,7 @@ ZamDelayUI::ZamDelayUI()
fKnobGain->setRotationAngle(240);
fKnobGain->setCallback(this);
- fKnobDrywet = new ImageKnob(this, knobImage);
+ fKnobDrywet = new ZamKnob(this, knobImage);
fKnobDrywet->setAbsolutePos(332, 231);
fKnobDrywet->setId(ZamDelayPlugin::paramDrywet);
fKnobDrywet->setRange(0.0f, 1.0f);
@@ -98,7 +98,7 @@ ZamDelayUI::ZamDelayUI()
fKnobDrywet->setRotationAngle(240);
fKnobDrywet->setCallback(this);
- fKnobFeedback = new ImageKnob(this, knobImage);
+ fKnobFeedback = new ZamKnob(this, knobImage);
fKnobFeedback->setAbsolutePos(332, 138);
fKnobFeedback->setId(ZamDelayPlugin::paramFeedback);
fKnobFeedback->setRange(0.0f, 1.0f);
@@ -196,17 +196,17 @@ void ZamDelayUI::imageSliderValueChanged(ImageSlider* s, float value)
setParameterValue(s->getId(), value);
}
-void ZamDelayUI::imageKnobDragStarted(ImageKnob* knob)
+void ZamDelayUI::imageKnobDragStarted(ZamKnob* knob)
{
editParameter(knob->getId(), true);
}
-void ZamDelayUI::imageKnobDragFinished(ImageKnob* knob)
+void ZamDelayUI::imageKnobDragFinished(ZamKnob* knob)
{
editParameter(knob->getId(), false);
}
-void ZamDelayUI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZamDelayUI::imageKnobValueChanged(ZamKnob* knob, float value)
{
setParameterValue(knob->getId(), value);
}
diff --git a/plugins/ZamDelay/ZamDelayUI.hpp b/plugins/ZamDelay/ZamDelayUI.hpp
index 6110eab..b0307e4 100644
--- a/plugins/ZamDelay/ZamDelayUI.hpp
+++ b/plugins/ZamDelay/ZamDelayUI.hpp
@@ -20,11 +20,12 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZamDelayArtwork.hpp"
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
using DGL::ImageSwitch;
using DGL::ImageSlider;
@@ -33,7 +34,7 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZamDelayUI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSwitch::Callback,
public ImageSlider::Callback
{
@@ -50,9 +51,9 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSwitchClicked(ImageSwitch* tog, bool down) override;
@@ -64,7 +65,7 @@ protected:
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobDelaytime, fKnobLPF, fKnobGain, fKnobDrywet, fKnobFeedback;
+ ScopedPointer<ZamKnob> fKnobDelaytime, fKnobLPF, fKnobGain, fKnobDrywet, fKnobFeedback;
ScopedPointer<ImageSwitch> fToggleInvert, fToggleBPM;
ScopedPointer<ImageSlider> fSliderDiv;
};
diff --git a/plugins/ZamEQ2/ZamEQ2UI.cpp b/plugins/ZamEQ2/ZamEQ2UI.cpp
index d7c067c..a909c53 100644
--- a/plugins/ZamEQ2/ZamEQ2UI.cpp
+++ b/plugins/ZamEQ2/ZamEQ2UI.cpp
@@ -38,7 +38,7 @@ ZamEQ2UI::ZamEQ2UI()
Image knobImage(ZamEQ2Artwork::knobData, ZamEQ2Artwork::knobWidth, ZamEQ2Artwork::knobHeight);
// knob
- fKnobGain1 = new ImageKnob(this, knobImage);
+ fKnobGain1 = new ZamKnob(this, knobImage);
fKnobGain1->setAbsolutePos(91, 172);
fKnobGain1->setRange(-50.f, 20.0f);
fKnobGain1->setLabel(true);
@@ -47,7 +47,7 @@ ZamEQ2UI::ZamEQ2UI()
fKnobGain1->setDefault(0.0f);
fKnobGain1->setCallback(this);
- fKnobQ1 = new ImageKnob(this, knobImage);
+ fKnobQ1 = new ZamKnob(this, knobImage);
fKnobQ1->setAbsolutePos(91, 122);
fKnobQ1->setRange(0.1f, 6.0f);
fKnobQ1->setLabel(true);
@@ -56,7 +56,7 @@ ZamEQ2UI::ZamEQ2UI()
fKnobQ1->setDefault(1.0f);
fKnobQ1->setCallback(this);
- fKnobFreq1 = new ImageKnob(this, knobImage);
+ fKnobFreq1 = new ZamKnob(this, knobImage);
fKnobFreq1->setAbsolutePos(23, 144);
fKnobFreq1->setUsingLogScale(true);
fKnobFreq1->setRange(20.f, 14000.0f);
@@ -66,7 +66,7 @@ ZamEQ2UI::ZamEQ2UI()
fKnobFreq1->setDefault(500.0f);
fKnobFreq1->setCallback(this);
- fKnobGain2 = new ImageKnob(this, knobImage);
+ fKnobGain2 = new ZamKnob(this, knobImage);
fKnobGain2->setAbsolutePos(567, 172);
fKnobGain2->setRange(-50.f, 20.0f);
fKnobGain2->setLabel(true);
@@ -75,7 +75,7 @@ ZamEQ2UI::ZamEQ2UI()
fKnobGain2->setDefault(0.0f);
fKnobGain2->setCallback(this);
- fKnobQ2 = new ImageKnob(this, knobImage);
+ fKnobQ2 = new ZamKnob(this, knobImage);
fKnobQ2->setAbsolutePos(567, 122);
fKnobQ2->setRange(0.1f, 6.0f);
fKnobQ2->setLabel(true);
@@ -84,7 +84,7 @@ ZamEQ2UI::ZamEQ2UI()
fKnobQ2->setDefault(1.0f);
fKnobQ2->setCallback(this);
- fKnobFreq2 = new ImageKnob(this, knobImage);
+ fKnobFreq2 = new ZamKnob(this, knobImage);
fKnobFreq2->setAbsolutePos(499, 144);
fKnobFreq2->setUsingLogScale(true);
fKnobFreq2->setRange(20.f, 14000.0f);
@@ -94,7 +94,7 @@ ZamEQ2UI::ZamEQ2UI()
fKnobFreq2->setDefault(3000.0f);
fKnobFreq2->setCallback(this);
- fKnobGainL = new ImageKnob(this, knobImage);
+ fKnobGainL = new ZamKnob(this, knobImage);
fKnobGainL->setAbsolutePos(91, 52);
fKnobGainL->setRange(-50.f, 20.0f);
fKnobGainL->setLabel(true);
@@ -103,7 +103,7 @@ ZamEQ2UI::ZamEQ2UI()
fKnobGainL->setDefault(0.0f);
fKnobGainL->setCallback(this);
- fKnobFreqL = new ImageKnob(this, knobImage);
+ fKnobFreqL = new ZamKnob(this, knobImage);
fKnobFreqL->setAbsolutePos(23, 23);
fKnobFreqL->setUsingLogScale(true);
fKnobFreqL->setRange(20.f, 14000.0f);
@@ -113,7 +113,7 @@ ZamEQ2UI::ZamEQ2UI()
fKnobFreqL->setDefault(250.0f);
fKnobFreqL->setCallback(this);
- fKnobGainH = new ImageKnob(this, knobImage);
+ fKnobGainH = new ZamKnob(this, knobImage);
fKnobGainH->setAbsolutePos(567, 53);
fKnobGainH->setRange(-50.f, 20.0f);
fKnobGainH->setLabel(true);
@@ -122,7 +122,7 @@ ZamEQ2UI::ZamEQ2UI()
fKnobGainH->setDefault(0.0f);
fKnobGainH->setCallback(this);
- fKnobFreqH = new ImageKnob(this, knobImage);
+ fKnobFreqH = new ZamKnob(this, knobImage);
fKnobFreqH->setAbsolutePos(499, 24);
fKnobFreqH->setUsingLogScale(true);
fKnobFreqH->setRange(20.f, 14000.0f);
@@ -254,7 +254,7 @@ void ZamEQ2UI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZamEQ2UI::imageKnobDragStarted(ImageKnob* knob)
+void ZamEQ2UI::imageKnobDragStarted(ZamKnob* knob)
{
if (knob == fKnobGain1)
editParameter(ZamEQ2Plugin::paramGain1, true);
@@ -278,7 +278,7 @@ void ZamEQ2UI::imageKnobDragStarted(ImageKnob* knob)
editParameter(ZamEQ2Plugin::paramFreqH, true);
}
-void ZamEQ2UI::imageKnobDragFinished(ImageKnob* knob)
+void ZamEQ2UI::imageKnobDragFinished(ZamKnob* knob)
{
if (knob == fKnobGain1)
editParameter(ZamEQ2Plugin::paramGain1, false);
@@ -302,7 +302,7 @@ void ZamEQ2UI::imageKnobDragFinished(ImageKnob* knob)
editParameter(ZamEQ2Plugin::paramFreqH, false);
}
-void ZamEQ2UI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZamEQ2UI::imageKnobValueChanged(ZamKnob* knob, float value)
{
if (knob == fKnobGain1)
setParameterValue(ZamEQ2Plugin::paramGain1, value);
diff --git a/plugins/ZamEQ2/ZamEQ2UI.hpp b/plugins/ZamEQ2/ZamEQ2UI.hpp
index 7ce00e1..d714834 100644
--- a/plugins/ZamEQ2/ZamEQ2UI.hpp
+++ b/plugins/ZamEQ2/ZamEQ2UI.hpp
@@ -20,6 +20,7 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZamEQ2Artwork.hpp"
#include "ZamEQ2Plugin.hpp"
@@ -28,7 +29,7 @@
#include <complex>
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
using DGL::ImageSlider;
START_NAMESPACE_DISTRHO
@@ -36,7 +37,7 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZamEQ2UI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSlider::Callback
{
public:
@@ -105,9 +106,9 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSliderDragStarted(ImageSlider* slider) override;
void imageSliderDragFinished(ImageSlider* slider) override;
@@ -117,11 +118,11 @@ protected:
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobGain1;
- ScopedPointer<ImageKnob> fKnobQ1, fKnobFreq1, fKnobGain2;
- ScopedPointer<ImageKnob> fKnobQ2, fKnobFreq2;
- ScopedPointer<ImageKnob> fKnobGainL, fKnobFreqL;
- ScopedPointer<ImageKnob> fKnobGainH, fKnobFreqH;
+ ScopedPointer<ZamKnob> fKnobGain1;
+ ScopedPointer<ZamKnob> fKnobQ1, fKnobFreq1, fKnobGain2;
+ ScopedPointer<ZamKnob> fKnobQ2, fKnobFreq2;
+ ScopedPointer<ZamKnob> fKnobGainL, fKnobFreqL;
+ ScopedPointer<ZamKnob> fKnobGainH, fKnobFreqH;
ScopedPointer<ImageSlider> fSliderMaster;
float eqx[EQPOINTS];
float eqy[EQPOINTS];
diff --git a/plugins/ZamGEQ31/ZamGEQ31UI.cpp b/plugins/ZamGEQ31/ZamGEQ31UI.cpp
index 440bc35..3c5583a 100644
--- a/plugins/ZamGEQ31/ZamGEQ31UI.cpp
+++ b/plugins/ZamGEQ31/ZamGEQ31UI.cpp
@@ -36,7 +36,7 @@ ZamGEQ31UI::ZamGEQ31UI()
Image knobImage(ZamGEQ31Artwork::knobData, ZamGEQ31Artwork::knobWidth, ZamGEQ31Artwork::knobHeight);
// master knob
- fKnobMaster = new ImageKnob(this, knobImage);
+ fKnobMaster = new ZamKnob(this, knobImage);
fKnobMaster->setAbsolutePos(103, 122);
fKnobMaster->setRange(-20.f, 20.f);
fKnobMaster->setLabel(true);
@@ -513,19 +513,19 @@ void ZamGEQ31UI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZamGEQ31UI::imageKnobDragStarted(ImageKnob* knob)
+void ZamGEQ31UI::imageKnobDragStarted(ZamKnob* knob)
{
if (knob == fKnobMaster)
editParameter(ZamGEQ31Plugin::paramMaster, true);
}
-void ZamGEQ31UI::imageKnobDragFinished(ImageKnob* knob)
+void ZamGEQ31UI::imageKnobDragFinished(ZamKnob* knob)
{
if (knob == fKnobMaster)
editParameter(ZamGEQ31Plugin::paramMaster, false);
}
-void ZamGEQ31UI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZamGEQ31UI::imageKnobValueChanged(ZamKnob* knob, float value)
{
if (knob == fKnobMaster)
setParameterValue(ZamGEQ31Plugin::paramMaster, value);
diff --git a/plugins/ZamGEQ31/ZamGEQ31UI.hpp b/plugins/ZamGEQ31/ZamGEQ31UI.hpp
index 4ccbde4..95fcfbd 100644
--- a/plugins/ZamGEQ31/ZamGEQ31UI.hpp
+++ b/plugins/ZamGEQ31/ZamGEQ31UI.hpp
@@ -20,12 +20,13 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZamGEQ31Artwork.hpp"
#include "ZamGEQ31Plugin.hpp"
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
using DGL::ImageSlider;
START_NAMESPACE_DISTRHO
@@ -33,7 +34,7 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZamGEQ31UI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSlider::Callback
{
public:
@@ -61,9 +62,9 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSliderDragStarted(ImageSlider* slider) override;
void imageSliderDragFinished(ImageSlider* slider) override;
@@ -73,8 +74,8 @@ protected:
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobMaster;
- ScopedPointer<ImageKnob> fKnobQ;
+ ScopedPointer<ZamKnob> fKnobMaster;
+ ScopedPointer<ZamKnob> fKnobQ;
ScopedPointer<ImageSlider> fSliderGain1;
ScopedPointer<ImageSlider> fSliderGain2;
ScopedPointer<ImageSlider> fSliderGain3;
diff --git a/plugins/ZamGate/ZamGateUI.cpp b/plugins/ZamGate/ZamGateUI.cpp
index 355c7ac..325651d 100644
--- a/plugins/ZamGate/ZamGateUI.cpp
+++ b/plugins/ZamGate/ZamGateUI.cpp
@@ -44,7 +44,7 @@ ZamGateUI::ZamGateUI()
Image knobImage(ZamGateArtwork::knobData, ZamGateArtwork::knobWidth, ZamGateArtwork::knobHeight);
// knob
- fKnobAttack = new ImageKnob(this, knobImage);
+ fKnobAttack = new ZamKnob(this, knobImage);
fKnobAttack->setAbsolutePos(24, 45);
fKnobAttack->setId(ZamGatePlugin::paramAttack);
fKnobAttack->setRange(0.1f, 500.0f);
@@ -54,7 +54,7 @@ ZamGateUI::ZamGateUI()
fKnobAttack->setRotationAngle(240);
fKnobAttack->setCallback(this);
- fKnobRelease = new ImageKnob(this, knobImage);
+ fKnobRelease = new ZamKnob(this, knobImage);
fKnobRelease->setAbsolutePos(108, 45);
fKnobRelease->setId(ZamGatePlugin::paramRelease);
fKnobRelease->setRange(0.1f, 500.0f);
@@ -64,7 +64,7 @@ ZamGateUI::ZamGateUI()
fKnobRelease->setRotationAngle(240);
fKnobRelease->setCallback(this);
- fKnobThresh = new ImageKnob(this, knobImage);
+ fKnobThresh = new ZamKnob(this, knobImage);
fKnobThresh->setAbsolutePos(191.7, 45);
fKnobThresh->setId(ZamGatePlugin::paramThresh);
fKnobThresh->setRange(-60.0f, 0.0f);
@@ -74,7 +74,7 @@ ZamGateUI::ZamGateUI()
fKnobThresh->setRotationAngle(240);
fKnobThresh->setCallback(this);
- fKnobMakeup = new ImageKnob(this, knobImage);
+ fKnobMakeup = new ZamKnob(this, knobImage);
fKnobMakeup->setAbsolutePos(273, 45);
fKnobMakeup->setId(ZamGatePlugin::paramMakeup);
fKnobMakeup->setRange(-30.0f, 30.0f);
@@ -84,7 +84,7 @@ ZamGateUI::ZamGateUI()
fKnobMakeup->setRotationAngle(240);
fKnobMakeup->setCallback(this);
- fKnobGateclose = new ImageKnob(this, knobImage);
+ fKnobGateclose = new ZamKnob(this, knobImage);
fKnobGateclose->setAbsolutePos(480, 62);
fKnobGateclose->setId(ZamGatePlugin::paramGateclose);
fKnobGateclose->setRange(-50.0f, 0.0f);
@@ -159,17 +159,17 @@ void ZamGateUI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZamGateUI::imageKnobDragStarted(ImageKnob* knob)
+void ZamGateUI::imageKnobDragStarted(ZamKnob* knob)
{
editParameter(knob->getId(), true);
}
-void ZamGateUI::imageKnobDragFinished(ImageKnob* knob)
+void ZamGateUI::imageKnobDragFinished(ZamKnob* knob)
{
editParameter(knob->getId(), false);
}
-void ZamGateUI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZamGateUI::imageKnobValueChanged(ZamKnob* knob, float value)
{
setParameterValue(knob->getId(), value);
}
diff --git a/plugins/ZamGate/ZamGateUI.hpp b/plugins/ZamGate/ZamGateUI.hpp
index 1a0e35f..42d59c4 100644
--- a/plugins/ZamGate/ZamGateUI.hpp
+++ b/plugins/ZamGate/ZamGateUI.hpp
@@ -20,10 +20,12 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
+
#include "ZamGateArtwork.hpp"
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
using DGL::ImageSwitch;
START_NAMESPACE_DISTRHO
@@ -31,7 +33,7 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZamGateUI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSwitch::Callback
{
public:
@@ -46,17 +48,17 @@ protected:
// -------------------------------------------------------------------
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSwitchClicked(ImageSwitch* tog, bool down) override;
void onDisplay() override;
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobAttack, fKnobRelease, fKnobThresh;
- ScopedPointer<ImageKnob> fKnobMakeup, fKnobGateclose;
+ ScopedPointer<ZamKnob> fKnobAttack, fKnobRelease, fKnobThresh;
+ ScopedPointer<ZamKnob> fKnobMakeup, fKnobGateclose;
ScopedPointer<ImageSwitch> fToggleSidechain;
Image fLedRedImg;
diff --git a/plugins/ZamGateX2/ZamGateX2UI.cpp b/plugins/ZamGateX2/ZamGateX2UI.cpp
index 1449c8d..4120959 100644
--- a/plugins/ZamGateX2/ZamGateX2UI.cpp
+++ b/plugins/ZamGateX2/ZamGateX2UI.cpp
@@ -44,7 +44,7 @@ ZamGateX2UI::ZamGateX2UI()
Image knobImage(ZamGateX2Artwork::knobData, ZamGateX2Artwork::knobWidth, ZamGateX2Artwork::knobHeight);
// knob
- fKnobAttack = new ImageKnob(this, knobImage);
+ fKnobAttack = new ZamKnob(this, knobImage);
fKnobAttack->setAbsolutePos(24, 45);
fKnobAttack->setId(ZamGateX2Plugin::paramAttack);
fKnobAttack->setRange(0.1f, 500.0f);
@@ -54,7 +54,7 @@ ZamGateX2UI::ZamGateX2UI()
fKnobAttack->setRotationAngle(240);
fKnobAttack->setCallback(this);
- fKnobRelease = new ImageKnob(this, knobImage);
+ fKnobRelease = new ZamKnob(this, knobImage);
fKnobRelease->setAbsolutePos(108, 45);
fKnobRelease->setId(ZamGateX2Plugin::paramRelease);
fKnobRelease->setRange(0.1f, 500.0f);
@@ -64,7 +64,7 @@ ZamGateX2UI::ZamGateX2UI()
fKnobRelease->setRotationAngle(240);
fKnobRelease->setCallback(this);
- fKnobThresh = new ImageKnob(this, knobImage);
+ fKnobThresh = new ZamKnob(this, knobImage);
fKnobThresh->setAbsolutePos(191.7, 45);
fKnobThresh->setId(ZamGateX2Plugin::paramThresh);
fKnobThresh->setRange(-60.0f, 0.0f);
@@ -74,7 +74,7 @@ ZamGateX2UI::ZamGateX2UI()
fKnobThresh->setRotationAngle(240);
fKnobThresh->setCallback(this);
- fKnobMakeup = new ImageKnob(this, knobImage);
+ fKnobMakeup = new ZamKnob(this, knobImage);
fKnobMakeup->setAbsolutePos(273, 45);
fKnobMakeup->setId(ZamGateX2Plugin::paramMakeup);
fKnobMakeup->setRange(-30.0f, 30.0f);
@@ -84,7 +84,7 @@ ZamGateX2UI::ZamGateX2UI()
fKnobMakeup->setRotationAngle(240);
fKnobMakeup->setCallback(this);
- fKnobGateclose = new ImageKnob(this, knobImage);
+ fKnobGateclose = new ZamKnob(this, knobImage);
fKnobGateclose->setAbsolutePos(480, 61);
fKnobGateclose->setId(ZamGateX2Plugin::paramGateclose);
fKnobGateclose->setRange(-50.0f, 0.0f);
@@ -159,17 +159,17 @@ void ZamGateX2UI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZamGateX2UI::imageKnobDragStarted(ImageKnob* knob)
+void ZamGateX2UI::imageKnobDragStarted(ZamKnob* knob)
{
editParameter(knob->getId(), true);
}
-void ZamGateX2UI::imageKnobDragFinished(ImageKnob* knob)
+void ZamGateX2UI::imageKnobDragFinished(ZamKnob* knob)
{
editParameter(knob->getId(), false);
}
-void ZamGateX2UI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZamGateX2UI::imageKnobValueChanged(ZamKnob* knob, float value)
{
setParameterValue(knob->getId(), value);
}
diff --git a/plugins/ZamGateX2/ZamGateX2UI.hpp b/plugins/ZamGateX2/ZamGateX2UI.hpp
index 32117d6..c1ee025 100644
--- a/plugins/ZamGateX2/ZamGateX2UI.hpp
+++ b/plugins/ZamGateX2/ZamGateX2UI.hpp
@@ -20,10 +20,11 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZamGateX2Artwork.hpp"
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
using DGL::ImageSwitch;
START_NAMESPACE_DISTRHO
@@ -31,7 +32,7 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZamGateX2UI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSwitch::Callback
{
public:
@@ -46,17 +47,17 @@ protected:
// -------------------------------------------------------------------
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSwitchClicked(ImageSwitch* tog, bool down) override;
void onDisplay() override;
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobAttack, fKnobRelease, fKnobThresh;
- ScopedPointer<ImageKnob> fKnobMakeup, fKnobGateclose;
+ ScopedPointer<ZamKnob> fKnobAttack, fKnobRelease, fKnobThresh;
+ ScopedPointer<ZamKnob> fKnobMakeup, fKnobGateclose;
ScopedPointer<ImageSwitch> fToggleSidechain;
Image fLedRedImg;
diff --git a/plugins/ZamHeadX2/ZamHeadX2UI.cpp b/plugins/ZamHeadX2/ZamHeadX2UI.cpp
index f9841ca..162c674 100644
--- a/plugins/ZamHeadX2/ZamHeadX2UI.cpp
+++ b/plugins/ZamHeadX2/ZamHeadX2UI.cpp
@@ -34,7 +34,7 @@ ZamHeadX2UI::ZamHeadX2UI()
Image knobImage(ZamHeadX2Artwork::knobData, ZamHeadX2Artwork::knobWidth, ZamHeadX2Artwork::knobHeight);
// knob
- fKnobAzimuth = new ImageKnob(this, knobImage);
+ fKnobAzimuth = new ZamKnob(this, knobImage);
fKnobAzimuth->setAbsolutePos(229, 33);
fKnobAzimuth->setId(ZamHeadX2Plugin::paramAzimuth);
fKnobAzimuth->setRange(-120.f, 120.0f);
@@ -44,7 +44,7 @@ ZamHeadX2UI::ZamHeadX2UI()
fKnobAzimuth->setRotationAngle(240);
fKnobAzimuth->setCallback(this);
- fKnobElevation = new ImageKnob(this, knobImage);
+ fKnobElevation = new ZamKnob(this, knobImage);
fKnobElevation->setAbsolutePos(62, 78);
fKnobElevation->setId(ZamHeadX2Plugin::paramElevation);
fKnobElevation->setRange(-30.0f, 90.0f);
@@ -54,7 +54,7 @@ ZamHeadX2UI::ZamHeadX2UI()
fKnobElevation->setRotationAngle(120);
fKnobElevation->setCallback(this);
- fKnobWidth = new ImageKnob(this, knobImage);
+ fKnobWidth = new ZamKnob(this, knobImage);
fKnobWidth->setAbsolutePos(45, 170);
fKnobWidth->setId(ZamHeadX2Plugin::paramWidth);
fKnobWidth->setRange(0.0f, 2.5f);
@@ -101,17 +101,17 @@ void ZamHeadX2UI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZamHeadX2UI::imageKnobDragStarted(ImageKnob* knob)
+void ZamHeadX2UI::imageKnobDragStarted(ZamKnob* knob)
{
editParameter(knob->getId(), true);
}
-void ZamHeadX2UI::imageKnobDragFinished(ImageKnob* knob)
+void ZamHeadX2UI::imageKnobDragFinished(ZamKnob* knob)
{
editParameter(knob->getId(), false);
}
-void ZamHeadX2UI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZamHeadX2UI::imageKnobValueChanged(ZamKnob* knob, float value)
{
setParameterValue(knob->getId(), value);
}
diff --git a/plugins/ZamHeadX2/ZamHeadX2UI.hpp b/plugins/ZamHeadX2/ZamHeadX2UI.hpp
index 9ba87d0..b390b1f 100644
--- a/plugins/ZamHeadX2/ZamHeadX2UI.hpp
+++ b/plugins/ZamHeadX2/ZamHeadX2UI.hpp
@@ -20,18 +20,19 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZamHeadX2Artwork.hpp"
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZamHeadX2UI : public UI,
- public ImageKnob::Callback
+ public ZamKnob::Callback
{
public:
ZamHeadX2UI();
@@ -46,15 +47,15 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void onDisplay() override;
private:
Image fImgBackground;
- ScopedPointer<ImageKnob> fKnobAzimuth, fKnobElevation, fKnobWidth;
+ ScopedPointer<ZamKnob> fKnobAzimuth, fKnobElevation, fKnobWidth;
};
// -----------------------------------------------------------------------
diff --git a/plugins/ZamTube/ZamTubeUI.cpp b/plugins/ZamTube/ZamTubeUI.cpp
index 29c8ac4..efc7fe1 100644
--- a/plugins/ZamTube/ZamTubeUI.cpp
+++ b/plugins/ZamTube/ZamTubeUI.cpp
@@ -47,7 +47,7 @@ ZamTubeUI::ZamTubeUI()
// knobs
- fKnobTube = new ImageKnob(this, knobImage);
+ fKnobTube = new ZamKnob(this, knobImage);
fKnobTube->setAbsolutePos(177, 76);
fKnobTube->setRange(0.f, 30.0f);
fKnobTube->setLabel(true);
@@ -56,7 +56,7 @@ ZamTubeUI::ZamTubeUI()
fKnobTube->setRotationAngle(240);
fKnobTube->setCallback(this);
- fKnobBass = new ImageKnob(this, knobImage);
+ fKnobBass = new ZamKnob(this, knobImage);
fKnobBass->setAbsolutePos(63, 140.5);
fKnobBass->setRange(0.f, 1.0f);
fKnobBass->setLabel(true);
@@ -65,7 +65,7 @@ ZamTubeUI::ZamTubeUI()
fKnobBass->setRotationAngle(240);
fKnobBass->setCallback(this);
- fKnobMids = new ImageKnob(this, knobImage);
+ fKnobMids = new ZamKnob(this, knobImage);
fKnobMids->setAbsolutePos(63, 87);
fKnobMids->setRange(0.f, 1.0f);
fKnobMids->setLabel(true);
@@ -74,7 +74,7 @@ ZamTubeUI::ZamTubeUI()
fKnobMids->setRotationAngle(240);
fKnobMids->setCallback(this);
- fKnobTreb = new ImageKnob(this, knobImage);
+ fKnobTreb = new ZamKnob(this, knobImage);
fKnobTreb->setAbsolutePos(63, 33);
fKnobTreb->setRange(0.f, 1.0f);
fKnobTreb->setLabel(true);
@@ -83,7 +83,7 @@ ZamTubeUI::ZamTubeUI()
fKnobTreb->setRotationAngle(240);
fKnobTreb->setCallback(this);
- fKnobGain = new ImageKnob(this, knobImage);
+ fKnobGain = new ZamKnob(this, knobImage);
fKnobGain->setAbsolutePos(63, 231);
fKnobGain->setRange(-30.f, 30.0f);
fKnobGain->setLabel(true);
@@ -162,7 +162,7 @@ void ZamTubeUI::programLoaded(uint32_t index)
// -----------------------------------------------------------------------
// Widget Callbacks
-void ZamTubeUI::imageKnobDragStarted(ImageKnob* knob)
+void ZamTubeUI::imageKnobDragStarted(ZamKnob* knob)
{
if (knob == fKnobTube)
editParameter(ZamTubePlugin::paramTubedrive, true);
@@ -176,7 +176,7 @@ void ZamTubeUI::imageKnobDragStarted(ImageKnob* knob)
editParameter(ZamTubePlugin::paramGain, true);
}
-void ZamTubeUI::imageKnobDragFinished(ImageKnob* knob)
+void ZamTubeUI::imageKnobDragFinished(ZamKnob* knob)
{
if (knob == fKnobTube)
editParameter(ZamTubePlugin::paramTubedrive, false);
@@ -190,7 +190,7 @@ void ZamTubeUI::imageKnobDragFinished(ImageKnob* knob)
editParameter(ZamTubePlugin::paramGain, false);
}
-void ZamTubeUI::imageKnobValueChanged(ImageKnob* knob, float value)
+void ZamTubeUI::imageKnobValueChanged(ZamKnob* knob, float value)
{
if (knob == fKnobTube)
setParameterValue(ZamTubePlugin::paramTubedrive, value);
diff --git a/plugins/ZamTube/ZamTubeUI.hpp b/plugins/ZamTube/ZamTubeUI.hpp
index f7b0768..3c6f367 100644
--- a/plugins/ZamTube/ZamTubeUI.hpp
+++ b/plugins/ZamTube/ZamTubeUI.hpp
@@ -20,11 +20,12 @@
#include "DistrhoUI.hpp"
#include "ImageWidgets.hpp"
+#include "../../widgets/ZamWidgets.hpp"
#include "ZamTubeArtwork.hpp"
using DGL::Image;
-using DGL::ImageKnob;
+using DGL::ZamKnob;
using DGL::ImageSlider;
using DGL::ImageSwitch;
@@ -33,7 +34,7 @@ START_NAMESPACE_DISTRHO
// -----------------------------------------------------------------------
class ZamTubeUI : public UI,
- public ImageKnob::Callback,
+ public ZamKnob::Callback,
public ImageSlider::Callback,
public ImageSwitch::Callback
{
@@ -50,9 +51,9 @@ protected:
// -------------------------------------------------------------------
// Widget Callbacks
- void imageKnobDragStarted(ImageKnob* knob) override;
- void imageKnobDragFinished(ImageKnob* knob) override;
- void imageKnobValueChanged(ImageKnob* knob, float value) override;
+ void imageKnobDragStarted(ZamKnob* knob) override;
+ void imageKnobDragFinished(ZamKnob* knob) override;
+ void imageKnobValueChanged(ZamKnob* knob, float value) override;
void imageSliderDragStarted(ImageSlider* slider) override;
void imageSliderDragFinished(ImageSlider* slider) override;
@@ -66,7 +67,7 @@ private:
Image fImgBackground;
ScopedPointer<ImageSlider> fSliderNotch;
ScopedPointer<ImageSwitch> fToggleInsane;
- ScopedPointer<ImageKnob> fKnobTube, fKnobBass, fKnobMids, fKnobTreb, fKnobGain;
+ ScopedPointer<ZamKnob> fKnobTube, fKnobBass, fKnobMids, fKnobTreb, fKnobGain;
};
// -----------------------------------------------------------------------
diff --git a/widgets/ZamWidgets.hpp b/widgets/ZamWidgets.hpp
new file mode 100644
index 0000000..bf09a93
--- /dev/null
+++ b/widgets/ZamWidgets.hpp
@@ -0,0 +1,631 @@
+/*
+ * DISTRHO Plugin Framework (DPF)
+ * Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any purpose with
+ * or without fee is hereby granted, provided that the above copyright notice and this
+ * permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
+ * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+// This is a custom knob widget for DPF with numeric label for zam-plugins
+
+#ifndef DGL_ZAM_WIDGETS_HPP_INCLUDED
+#define DGL_ZAM_WIDGETS_HPP_INCLUDED
+
+#include "../dpf/dgl/Image.hpp"
+#include "../dpf/dgl/Widget.hpp"
+#include "../dpf/dgl/Window.hpp"
+#include "../dpf/dgl/NanoVG.hpp"
+#include "../dpf/dgl/src/Common.hpp"
+#include "../dpf/dgl/src/WidgetPrivateData.hpp"
+
+START_NAMESPACE_DGL
+
+// -----------------------------------------------------------------------
+
+class ZamKnob : public Widget,
+ public NanoVG
+{
+public:
+ enum Orientation {
+ Horizontal,
+ Vertical
+ };
+
+ class Callback
+ {
+ public:
+ virtual ~Callback() {}
+ virtual void imageKnobDragStarted(ZamKnob* imageKnob) = 0;
+ virtual void imageKnobDragFinished(ZamKnob* imageKnob) = 0;
+ virtual void imageKnobValueChanged(ZamKnob* imageKnob, float value) = 0;
+ };
+
+ explicit ZamKnob(Window& parent, const Image& image, Orientation orientation = Vertical) noexcept;
+ explicit ZamKnob(Widget* widget, const Image& image, Orientation orientation = Vertical) noexcept;
+ explicit ZamKnob(const ZamKnob& imageKnob);
+ ZamKnob& operator=(const ZamKnob& imageKnob);
+ ~ZamKnob() override;
+
+ float getValue() const noexcept;
+
+ void setDefault(float def) noexcept;
+ void setRange(float min, float max) noexcept;
+ void setStep(float step) noexcept;
+ void setScrollStep(float step) noexcept;
+ void setLabel(bool label) noexcept;
+ void setValue(float value, bool sendCallback = false) noexcept;
+ void setUsingLogScale(bool yesNo) noexcept;
+
+ void setCallback(Callback* callback) noexcept;
+ void setOrientation(Orientation orientation) noexcept;
+ void setRotationAngle(int angle);
+
+ void setImageLayerCount(uint count) noexcept;
+
+protected:
+ void onDisplay() override;
+ bool onMouse(const MouseEvent&) override;
+ bool onMotion(const MotionEvent&) override;
+ bool onScroll(const ScrollEvent&) override;
+
+private:
+ Image fImage;
+ bool fLabel;
+ float fMinimum;
+ float fMaximum;
+ float fScrollStep;
+ float fStep;
+ float fValue;
+ float fValueDef;
+ float fValueTmp;
+ bool fUsingDefault;
+ bool fUsingLog;
+ Orientation fOrientation;
+
+ int fRotationAngle;
+ bool fDragging;
+ int fLastX;
+ int fLastY;
+
+ Callback* fCallback;
+
+ bool fIsImgVertical;
+ uint fImgLayerWidth;
+ uint fImgLayerHeight;
+ uint fImgLayerCount;
+ bool fIsReady;
+ GLuint fTextureId;
+
+ float _logscale(float value) const;
+ float _invlogscale(float value) const;
+ void labelDisplay(void);
+
+ DISTRHO_LEAK_DETECTOR(ZamKnob)
+};
+
+// -----------------------------------------------------------------------
+
+ZamKnob::ZamKnob(Window& parent, const Image& image, Orientation orientation) noexcept
+ : Widget(parent),
+ NanoVG(CREATE_ANTIALIAS),
+ fLabel(false),
+ fImage(image),
+ fMinimum(0.0f),
+ fMaximum(1.0f),
+ fScrollStep(0.0f),
+ fStep(0.0f),
+ fValue(0.5f),
+ fValueDef(fValue),
+ fValueTmp(fValue),
+ fUsingDefault(false),
+ fUsingLog(false),
+ fOrientation(orientation),
+ fRotationAngle(0),
+ fDragging(false),
+ fLastX(0),
+ fLastY(0),
+ fCallback(nullptr),
+ fIsImgVertical(image.getHeight() > image.getWidth()),
+ fImgLayerWidth(fIsImgVertical ? image.getWidth() : image.getHeight()),
+ fImgLayerHeight(fImgLayerWidth),
+ fImgLayerCount(fIsImgVertical ? image.getHeight()/fImgLayerHeight : image.getWidth()/fImgLayerWidth),
+ fIsReady(false),
+ fTextureId(0)
+{
+ glGenTextures(1, &fTextureId);
+ setSize(fImgLayerWidth, fImgLayerHeight);
+ NanoVG::loadSharedResources();
+}
+
+ZamKnob::ZamKnob(Widget* widget, const Image& image, Orientation orientation) noexcept
+ : Widget(widget->getParentWindow()),
+ NanoVG(CREATE_ANTIALIAS),
+ fImage(image),
+ fLabel(false),
+ fMinimum(0.0f),
+ fMaximum(1.0f),
+ fScrollStep(0.0f),
+ fStep(0.0f),
+ fValue(0.5f),
+ fValueDef(fValue),
+ fValueTmp(fValue),
+ fUsingDefault(false),
+ fUsingLog(false),
+ fOrientation(orientation),
+ fRotationAngle(0),
+ fDragging(false),
+ fLastX(0),
+ fLastY(0),
+ fCallback(nullptr),
+ fIsImgVertical(image.getHeight() > image.getWidth()),
+ fImgLayerWidth(fIsImgVertical ? image.getWidth() : image.getHeight()),
+ fImgLayerHeight(fImgLayerWidth),
+ fImgLayerCount(fIsImgVertical ? image.getHeight()/fImgLayerHeight : image.getWidth()/fImgLayerWidth),
+ fIsReady(false),
+ fTextureId(0)
+{
+ glGenTextures(1, &fTextureId);
+ setSize(fImgLayerWidth, fImgLayerHeight);
+ NanoVG::loadSharedResources();
+}
+
+ZamKnob::ZamKnob(const ZamKnob& imageKnob)
+ : Widget(imageKnob.getParentWindow()),
+ NanoVG(CREATE_ANTIALIAS),
+ fImage(imageKnob.fImage),
+ fLabel(false),
+ fMinimum(imageKnob.fMinimum),
+ fMaximum(imageKnob.fMaximum),
+ fScrollStep(imageKnob.fScrollStep),
+ fStep(imageKnob.fStep),
+ fValue(imageKnob.fValue),
+ fValueDef(imageKnob.fValueDef),
+ fValueTmp(fValue),
+ fUsingDefault(imageKnob.fUsingDefault),
+ fUsingLog(imageKnob.fUsingLog),
+ fOrientation(imageKnob.fOrientation),
+ fRotationAngle(imageKnob.fRotationAngle),
+ fDragging(false),
+ fLastX(0),
+ fLastY(0),
+ fCallback(imageKnob.fCallback),
+ fIsImgVertical(imageKnob.fIsImgVertical),
+ fImgLayerWidth(imageKnob.fImgLayerWidth),
+ fImgLayerHeight(imageKnob.fImgLayerHeight),
+ fImgLayerCount(imageKnob.fImgLayerCount),
+ fIsReady(false),
+ fTextureId(0)
+{
+ glGenTextures(1, &fTextureId);
+ setSize(fImgLayerWidth, fImgLayerHeight);
+ NanoVG::loadSharedResources();
+}
+
+ZamKnob& ZamKnob::operator=(const ZamKnob& imageKnob)
+{
+ fImage = imageKnob.fImage;
+ fMinimum = imageKnob.fMinimum;
+ fMaximum = imageKnob.fMaximum;
+ fScrollStep = imageKnob.fScrollStep;
+ fStep = imageKnob.fStep;
+ fValue = imageKnob.fValue;
+ fValueDef = imageKnob.fValueDef;
+ fValueTmp = fValue;
+ fUsingDefault = imageKnob.fUsingDefault;
+ fUsingLog = imageKnob.fUsingLog;
+ fOrientation = imageKnob.fOrientation;
+ fRotationAngle = imageKnob.fRotationAngle;
+ fDragging = false;
+ fLastX = 0;
+ fLastY = 0;
+ fCallback = imageKnob.fCallback;
+ fIsImgVertical = imageKnob.fIsImgVertical;
+ fImgLayerWidth = imageKnob.fImgLayerWidth;
+ fImgLayerHeight = imageKnob.fImgLayerHeight;
+ fImgLayerCount = imageKnob.fImgLayerCount;
+ fIsReady = false;
+
+ if (fTextureId != 0)
+ {
+ glDeleteTextures(1, &fTextureId);
+ fTextureId = 0;
+ }
+
+ glGenTextures(1, &fTextureId);
+ setSize(fImgLayerWidth, fImgLayerHeight);
+
+ return *this;
+}
+
+ZamKnob::~ZamKnob()
+{
+ if (fTextureId != 0)
+ {
+ glDeleteTextures(1, &fTextureId);
+ fTextureId = 0;
+ }
+}
+
+float ZamKnob::getValue() const noexcept
+{
+ return fValue;
+}
+
+// NOTE: value is assumed to be scaled if using log
+void ZamKnob::setDefault(float value) noexcept
+{
+ fValueDef = value;
+ fUsingDefault = true;
+}
+
+void ZamKnob::setRange(float min, float max) noexcept
+{
+ DISTRHO_SAFE_ASSERT_RETURN(max > min,);
+
+ if (fValue < min)
+ {
+ fValue = min;
+ repaint();
+
+ if (fCallback != nullptr)
+ {
+ try {
+ fCallback->imageKnobValueChanged(this, fValue);
+ } DISTRHO_SAFE_EXCEPTION("ZamKnob::setRange < min");
+ }
+ }
+ else if (fValue > max)
+ {
+ fValue = max;
+ repaint();
+
+ if (fCallback != nullptr)
+ {
+ try {
+ fCallback->imageKnobValueChanged(this, fValue);
+ } DISTRHO_SAFE_EXCEPTION("ZamKnob::setRange > max");
+ }
+ }
+
+ fMinimum = min;
+ fMaximum = max;
+}
+
+void ZamKnob::setScrollStep(float step) noexcept
+{
+ fScrollStep = step;
+}
+
+void ZamKnob::setLabel(bool label) noexcept
+{
+ fLabel = label;
+}
+
+void ZamKnob::setStep(float step) noexcept
+{
+ fStep = step;
+}
+
+// NOTE: value is assumed to be scaled if using log
+void ZamKnob::setValue(float value, bool sendCallback) noexcept
+{
+ if (d_isEqual(fValue, value))
+ return;
+
+ fValue = value;
+
+ if (d_isZero(fStep))
+ fValueTmp = value;
+
+ if (fRotationAngle == 0)
+ fIsReady = false;
+
+ repaint();
+
+ if (sendCallback && fCallback != nullptr)
+ {
+ try {
+ fCallback->imageKnobValueChanged(this, fValue);
+ } DISTRHO_SAFE_EXCEPTION("ZamKnob::setValue");
+ }
+}
+
+void ZamKnob::setUsingLogScale(bool yesNo) noexcept
+{
+ fUsingLog = yesNo;
+}
+
+void ZamKnob::setCallback(Callback* callback) noexcept
+{
+ fCallback = callback;
+}
+
+void ZamKnob::setOrientation(Orientation orientation) noexcept
+{
+ if (fOrientation == orientation)
+ return;
+
+ fOrientation = orientation;
+}
+
+void ZamKnob::setRotationAngle(int angle)
+{
+ if (fRotationAngle == angle)
+ return;
+
+ fRotationAngle = angle;
+ fIsReady = false;
+}
+
+void ZamKnob::setImageLayerCount(uint count) noexcept
+{
+ DISTRHO_SAFE_ASSERT_RETURN(count > 1,);
+
+ fImgLayerCount = count;
+
+ if (fIsImgVertical)
+ fImgLayerHeight = fImage.getHeight()/count;
+ else
+ fImgLayerWidth = fImage.getWidth()/count;
+
+ setSize(fImgLayerWidth, fImgLayerHeight);
+}
+
+void ZamKnob::labelDisplay()
+{
+ char txt[16];
+ float ww = (float)getParentWindow().getWidth();
+ float wh = (float)getParentWindow().getHeight();
+ float w = (float)fImage.getWidth();
+ float h = (float)fImage.getHeight();
+
+ NanoVG::beginFrame(ww, wh);
+ if (fValue > 1000.f) {
+ snprintf(txt, sizeof(txt), "%.0f", fValue);
+ } else {
+ snprintf(txt, sizeof(txt), "%.1f", fValue);
+ }
+ FontId fid = findFont(NANOVG_DEJAVU_SANS_TTF);
+ fontFaceId(fid);
+ fontSize(14.f);
+ fillColor(255, 255, 255, 255);
+ strokeColor(255, 255, 255, 255);
+ textAlign(ALIGN_CENTER | ALIGN_MIDDLE);
+ textLineHeight(14.f);
+ text(w/2., h/2., txt, NULL);
+ NanoVG::endFrame();
+}
+
+void ZamKnob::onDisplay()
+{
+ const float normValue = ((fUsingLog ? _invlogscale(fValue) : fValue) - fMinimum) / (fMaximum - fMinimum);
+
+ glEnable(GL_TEXTURE_2D);
+ glBindTexture(GL_TEXTURE_2D, fTextureId);
+
+ if (! fIsReady)
+ {
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
+
+ static const float trans[] = { 0.0f, 0.0f, 0.0f, 0.0f };
+ glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, trans);
+
+ glPixelStorei(GL_PACK_ALIGNMENT, 1);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+
+ uint imageDataOffset = 0;
+
+ if (fRotationAngle == 0)
+ {
+ DISTRHO_SAFE_ASSERT_RETURN(fImgLayerCount > 0,);
+ DISTRHO_SAFE_ASSERT_RETURN(normValue >= 0.0f,);
+
+ const uint& v1(fIsImgVertical ? fImgLayerWidth : fImgLayerHeight);
+ const uint& v2(fIsImgVertical ? fImgLayerHeight : fImgLayerWidth);
+
+ const uint layerDataSize = v1 * v2 * ((fImage.getFormat() == GL_BGRA || fImage.getFormat() == GL_RGBA) ? 4 : 3);
+ imageDataOffset = layerDataSize * uint(normValue * float(fImgLayerCount-1));
+ }
+
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
+ static_cast<GLsizei>(getWidth()), static_cast<GLsizei>(getHeight()), 0,
+ fImage.getFormat(), fImage.getType(), fImage.getRawData() + imageDataOffset);
+
+ fIsReady = true;
+ }
+
+ const int w = static_cast<int>(getWidth());
+ const int h = static_cast<int>(getHeight());
+
+ if (fRotationAngle != 0)
+ {
+ glPushMatrix();
+
+ const int w2 = w/2;
+ const int h2 = h/2;
+
+ glTranslatef(static_cast<float>(w2), static_cast<float>(h2), 0.0f);
+ glRotatef(normValue*static_cast<float>(fRotationAngle), 0.0f, 0.0f, 1.0f);
+
+ Rectangle<int>(-w2, -h2, w, h).draw();
+
+ glPopMatrix();
+ }
+ else
+ {
+ Rectangle<int>(0, 0, w, h).draw();
+ }
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
+
+ if (fLabel)
+ labelDisplay();
+}
+
+bool ZamKnob::onMouse(const MouseEvent& ev)
+{
+ if (ev.button != 1)
+ return false;
+
+ if (ev.press)
+ {
+ if (! contains(ev.pos))
+ return false;
+
+ if ((ev.mod & kModifierShift) != 0 && fUsingDefault)
+ {
+ setValue(fValueDef, true);
+ fValueTmp = fValue;
+ return true;
+ }
+
+ fDragging = true;
+ fLastX = ev.pos.getX();
+ fLastY = ev.pos.getY();
+
+ if (fCallback != nullptr)
+ fCallback->imageKnobDragStarted(this);
+
+ return true;
+ }
+ else if (fDragging)
+ {
+ if (fCallback != nullptr)
+ fCallback->imageKnobDragFinished(this);
+
+ fDragging = false;
+ return true;
+ }
+
+ return false;
+}
+
+bool ZamKnob::onMotion(const MotionEvent& ev)
+{
+ if (! fDragging)
+ return false;
+
+ bool doVal = false;
+ float d, value = 0.0f;
+
+ if (fOrientation == ZamKnob::Horizontal)
+ {
+ if (const int movX = ev.pos.getX() - fLastX)
+ {
+ d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f;
+ value = (fUsingLog ? _invlogscale(fValueTmp) : fValueTmp) + (float(fMaximum - fMinimum) / d * float(movX));
+ doVal = true;
+ }
+ }
+ else if (fOrientation == ZamKnob::Vertical)
+ {
+ if (const int movY = fLastY - ev.pos.getY())
+ {
+ d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f;
+ value = (fUsingLog ? _invlogscale(fValueTmp) : fValueTmp) + (float(fMaximum - fMinimum) / d * float(movY));
+ doVal = true;
+ }
+ }
+
+ if (! doVal)
+ return false;
+
+ if (fUsingLog)
+ value = _logscale(value);
+
+ if (value < fMinimum)
+ {
+ fValueTmp = value = fMinimum;
+ }
+ else if (value > fMaximum)
+ {
+ fValueTmp = value = fMaximum;
+ }
+ else if (d_isNotZero(fStep))
+ {
+ fValueTmp = value;
+ const float rest = std::fmod(value, fStep);
+ value = value - rest + (rest > fStep/2.0f ? fStep : 0.0f);
+ }
+
+ setValue(value, true);
+
+ fLastX = ev.pos.getX();
+ fLastY = ev.pos.getY();
+
+ return true;
+}
+
+bool ZamKnob::onScroll(const ScrollEvent& ev)
+{
+ if (! contains(ev.pos))
+ return false;
+
+ float value, d;
+
+ if (d_isZero(fScrollStep)) {
+ d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f;
+ value = (fUsingLog ? _invlogscale(fValueTmp) : fValueTmp) + (float(fMaximum - fMinimum) / d * 10.f * ev.delta.getY());
+ } else {
+ d = (ev.mod & kModifierControl) ? fScrollStep * 0.1f : fScrollStep;
+ value = (fUsingLog ? _invlogscale(fValueTmp + d * ev.delta.getY())
+ : fValueTmp + d * ev.delta.getY());
+ }
+
+ if (fUsingLog)
+ value = _logscale(value);
+
+ if (value < fMinimum)
+ {
+ fValueTmp = value = fMinimum;
+ }
+ else if (value > fMaximum)
+ {
+ fValueTmp = value = fMaximum;
+ }
+ else if (d_isNotZero(fStep))
+ {
+ fValueTmp = value;
+ const float rest = std::fmod(value, fStep);
+ value = value - rest + (rest > fStep/2.0f ? fStep : 0.0f);
+ }
+
+ setValue(value, true);
+ return true;
+}
+
+// -----------------------------------------------------------------------
+
+float ZamKnob::_logscale(float value) const
+{
+ const float b = std::log(fMaximum/fMinimum)/(fMaximum-fMinimum);
+ const float a = fMaximum/std::exp(fMaximum*b);
+ if (value < fMinimum) value = fMinimum;
+ if (value > fMaximum) value = fMaximum;
+ return a * std::exp(b*value);
+}
+
+float ZamKnob::_invlogscale(float value) const
+{
+ const float b = std::log(fMaximum/fMinimum)/(fMaximum-fMinimum);
+ const float a = fMaximum/std::exp(fMaximum*b);
+ if (value < fMinimum) value = fMinimum;
+ if (value > fMaximum) value = fMaximum;
+ return std::log(value/a)/b;
+}
+
+END_NAMESPACE_DGL
+
+#endif