From a93b12cb0a37dd17ef5358d5fed4b361091b8e84 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 3 Jul 2021 23:52:55 +0100 Subject: [PATCH] Fix ImageKnob for types that need full repaints Signed-off-by: falkTX --- dgl/EventHandlers.hpp | 2 +- dgl/ImageBaseWidgets.hpp | 1 + dgl/src/EventHandlers.cpp | 10 ++++++---- dgl/src/ImageBaseWidgets.cpp | 14 ++++++++++++++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/dgl/EventHandlers.hpp b/dgl/EventHandlers.hpp index 643d875a..ecfda08f 100644 --- 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 index 72271d8c..44011a92 100644 --- 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 index 1009e509..64f81ca3 100644 --- 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 index 83eae356..53053c6d 100644 --- a/dgl/src/ImageBaseWidgets.cpp +++ b/dgl/src/ImageBaseWidgets.cpp @@ -361,6 +361,20 @@ void ImageBaseKnob::setRotationAngle(int angle) pData->isReady = false; } +template +bool ImageBaseKnob::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 bool ImageBaseKnob::onMouse(const MouseEvent& ev) {