DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

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:
Mdgl/EventHandlers.hpp | 2+-
Mdgl/ImageBaseWidgets.hpp | 1+
Mdgl/src/EventHandlers.cpp | 10++++++----
Mdgl/src/ImageBaseWidgets.cpp | 14++++++++++++++
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))