summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilipe Coelho <falktx@falktx.com>2016-06-01 07:57:48 +0100
committerFilipe Coelho <falktx@falktx.com>2016-06-01 07:57:48 +0100
commit7c701ac7d559dd3362c073b20bffa1bb14600f86 (patch)
tree6957a3557934e019f2c92a862c6f9511c5ecb100
parent95ca7b0f7d50d9ba87b06a3a890a259ae5dcd30a (diff)
parent2b27a7ab1e80e91a23d7ca981e23ffa3ecd17f30 (diff)
Merge pull request #6 from zamaudio/scrollstep
Add ability to set scrolling step on knobs, does not apply to drag
-rw-r--r--dgl/ImageWidgets.hpp2
-rw-r--r--dgl/src/ImageWidgets.cpp21
2 files changed, 21 insertions, 2 deletions
diff --git a/dgl/ImageWidgets.hpp b/dgl/ImageWidgets.hpp
index aafe1962..3bad8a84 100644
--- a/dgl/ImageWidgets.hpp
+++ b/dgl/ImageWidgets.hpp
@@ -112,6 +112,7 @@ public:
void setDefault(float def) noexcept;
void setRange(float min, float max) noexcept;
void setStep(float step) noexcept;
+ void setScrollStep(float step) noexcept;
void setValue(float value, bool sendCallback = false) noexcept;
void setUsingLogScale(bool yesNo) noexcept;
@@ -131,6 +132,7 @@ private:
Image fImage;
float fMinimum;
float fMaximum;
+ float fScrollStep;
float fStep;
float fValue;
float fValueDef;
diff --git a/dgl/src/ImageWidgets.cpp b/dgl/src/ImageWidgets.cpp
index 9b4625c1..c77bf65a 100644
--- a/dgl/src/ImageWidgets.cpp
+++ b/dgl/src/ImageWidgets.cpp
@@ -195,6 +195,7 @@ ImageKnob::ImageKnob(Window& parent, const Image& image, Orientation orientation
fImage(image),
fMinimum(0.0f),
fMaximum(1.0f),
+ fScrollStep(0.0f),
fStep(0.0f),
fValue(0.5f),
fValueDef(fValue),
@@ -223,6 +224,7 @@ ImageKnob::ImageKnob(Widget* widget, const Image& image, Orientation orientation
fImage(image),
fMinimum(0.0f),
fMaximum(1.0f),
+ fScrollStep(0.0f),
fStep(0.0f),
fValue(0.5f),
fValueDef(fValue),
@@ -251,6 +253,7 @@ ImageKnob::ImageKnob(const ImageKnob& imageKnob)
fImage(imageKnob.fImage),
fMinimum(imageKnob.fMinimum),
fMaximum(imageKnob.fMaximum),
+ fScrollStep(imageKnob.fScrollStep),
fStep(imageKnob.fStep),
fValue(imageKnob.fValue),
fValueDef(imageKnob.fValueDef),
@@ -279,6 +282,7 @@ ImageKnob& ImageKnob::operator=(const ImageKnob& imageKnob)
fImage = imageKnob.fImage;
fMinimum = imageKnob.fMinimum;
fMaximum = imageKnob.fMaximum;
+ fScrollStep = imageKnob.fScrollStep;
fStep = imageKnob.fStep;
fValue = imageKnob.fValue;
fValueDef = imageKnob.fValueDef;
@@ -363,6 +367,11 @@ void ImageKnob::setRange(float min, float max) noexcept
fMaximum = max;
}
+void ImageKnob::setScrollStep(float step) noexcept
+{
+ fScrollStep = step;
+}
+
void ImageKnob::setStep(float step) noexcept
{
fStep = step;
@@ -599,8 +608,16 @@ bool ImageKnob::onScroll(const ScrollEvent& ev)
if (! contains(ev.pos))
return false;
- const float d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f;
- float value = (fUsingLog ? _invlogscale(fValueTmp) : fValueTmp) + (float(fMaximum - fMinimum) / d * 10.f * ev.delta.getY());
+ 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);