gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit e8e0bd37ee3fd5ccb6f9c1ec0615ad87bf3988bd
parent c73dd2df8c5662f0b01b9731197dcc78744e5e41
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Fri, 31 May 2024 01:49:44 +0200

inc/dec rotaries in single steps if ctrl/cmd is pressed

Diffstat:
Msource/juceUiLib/CMakeLists.txt | 1+
Msource/juceUiLib/editor.h | 4+++-
Asource/juceUiLib/slider.cpp | 28++++++++++++++++++++++++++++
Asource/juceUiLib/slider.h | 11+++++++++++
Msource/juceUiLib/uiObject.cpp | 3++-
5 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/source/juceUiLib/CMakeLists.txt b/source/juceUiLib/CMakeLists.txt @@ -14,6 +14,7 @@ set(SOURCES buttonStyle.cpp buttonStyle.h labelStyle.cpp labelStyle.h scrollbarStyle.cpp scrollbarStyle.h + slider.cpp slider.h textbuttonStyle.cpp textbuttonStyle.h textEditorStyle.cpp textEditorStyle.h treeViewStyle.cpp treeViewStyle.h diff --git a/source/juceUiLib/editor.h b/source/juceUiLib/editor.h @@ -11,6 +11,8 @@ namespace genericUI { + class Slider; + class Editor : public juce::Component, public juce::DragAndDropContainer { public: @@ -89,7 +91,7 @@ namespace genericUI virtual void setPerInstanceConfig(const std::vector<uint8_t>& _data) {} virtual void getPerInstanceConfig(std::vector<uint8_t>& _data) {} - virtual juce::Slider* createJuceComponent(juce::Slider*, UiObject& _object) { return nullptr; } + virtual Slider* createJuceComponent(Slider*, UiObject& _object) { return nullptr; } virtual juce::Component* createJuceComponent(juce::Component*, UiObject& _object) { return nullptr; } virtual juce::ComboBox* createJuceComponent(juce::ComboBox*, UiObject& _object) { return nullptr; } virtual juce::Label* createJuceComponent(juce::Label*, UiObject& _object) { return nullptr; } diff --git a/source/juceUiLib/slider.cpp b/source/juceUiLib/slider.cpp @@ -0,0 +1,28 @@ +#include "slider.h" + +namespace genericUI +{ + void Slider::mouseWheelMove(const juce::MouseEvent& event, const juce::MouseWheelDetails& wheel) + { + // we use the default behaviour if ctrl/cmd is not pressed. If it is, we want to inc/dec single steps + if(!event.mods.isCommandDown()) + { + juce::Slider::mouseWheelMove(event, wheel); + return; + } + + const auto range = getNormalisableRange(); + + if(range.end <= range.start) + return; + + const auto mouseDelta = (std::abs (wheel.deltaX) > std::abs (wheel.deltaY) ? -wheel.deltaX : wheel.deltaY) * (wheel.isReversed ? -1.0f : 1.0f); + + const auto diff = range.interval > 1.0 ? range.interval : 1.0; + + if(mouseDelta > 0) + setValue(getValue() + diff); + else + setValue(getValue() - diff); + } +} diff --git a/source/juceUiLib/slider.h b/source/juceUiLib/slider.h @@ -0,0 +1,11 @@ +#pragma once + +#include "juce_gui_basics/juce_gui_basics.h" + +namespace genericUI +{ + class Slider : public juce::Slider + { + void mouseWheelMove(const juce::MouseEvent& event, const juce::MouseWheelDetails& wheel) override; + }; +} diff --git a/source/juceUiLib/uiObject.cpp b/source/juceUiLib/uiObject.cpp @@ -18,6 +18,7 @@ #include <cassert> #include "button.h" +#include "slider.h" namespace genericUI { @@ -232,7 +233,7 @@ namespace genericUI if(hasComponent("rotary")) { - createJuceObject<juce::Slider>(_editor); + createJuceObject<Slider>(_editor); } else if(hasComponent("image")) {