commit a93b12cb0a37dd17ef5358d5fed4b361091b8e84
parent ad9af23e6de3de45f5efd36482e4aa6b1b45d637
Author: falkTX <falktx@falktx.com>
Date: Sat, 3 Jul 2021 23:52:28 +0100
Fix ImageKnob for types that need full repaints
Signed-off-by: falkTX <falktx@falktx.com>
Diffstat:
4 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/dgl/EventHandlers.hpp b/dgl/EventHandlers.hpp
@@ -112,7 +112,7 @@ public:
float getValue() const noexcept;
// NOTE: value is assumed to be scaled if using log
- void setValue(float value, bool sendCallback = false) noexcept;
+ virtual bool setValue(float value, bool sendCallback = false) noexcept;
// returns 0-1 ranged value, already with log scale as needed
float getNormalizedValue() const noexcept;
diff --git a/dgl/ImageBaseWidgets.hpp b/dgl/ImageBaseWidgets.hpp
@@ -103,6 +103,7 @@ public:
void setCallback(Callback* callback) noexcept;
void setImageLayerCount(uint count) noexcept;
void setRotationAngle(int angle);
+ bool setValue(float value, bool sendCallback = false) noexcept override;
protected:
void onDisplay() override;
diff --git a/dgl/src/EventHandlers.cpp b/dgl/src/EventHandlers.cpp
@@ -515,10 +515,10 @@ struct KnobEventHandler::PrivateData {
maximum = max;
}
- void setValue(const float value2, const bool sendCallback)
+ bool setValue(const float value2, const bool sendCallback)
{
if (d_isEqual(value, value2))
- return;
+ return false;
valueTmp = value = value2;
widget->repaint();
@@ -529,6 +529,8 @@ struct KnobEventHandler::PrivateData {
callback->knobValueChanged(widget, value);
} DISTRHO_SAFE_EXCEPTION("KnobEventHandler::setValue");
}
+
+ return true;
}
};
@@ -556,9 +558,9 @@ float KnobEventHandler::getValue() const noexcept
return pData->value;
}
-void KnobEventHandler::setValue(const float value, const bool sendCallback) noexcept
+bool KnobEventHandler::setValue(const float value, const bool sendCallback) noexcept
{
- pData->setValue(value, sendCallback);
+ return pData->setValue(value, sendCallback);
}
float KnobEventHandler::getNormalizedValue() const noexcept
diff --git a/dgl/src/ImageBaseWidgets.cpp b/dgl/src/ImageBaseWidgets.cpp
@@ -362,6 +362,20 @@ void ImageBaseKnob<ImageType>::setRotationAngle(int angle)
}
template <class ImageType>
+bool ImageBaseKnob<ImageType>::setValue(float value, bool sendCallback) noexcept
+{
+ if (KnobEventHandler::setValue(value, sendCallback))
+ {
+ if (pData->rotationAngle == 0 || pData->alwaysRepaint)
+ pData->isReady = false;
+
+ return true;
+ }
+
+ return false;
+}
+
+template <class ImageType>
bool ImageBaseKnob<ImageType>::onMouse(const MouseEvent& ev)
{
if (SubWidget::onMouse(ev))