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:
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"))
{