Browse Source

Fix ImageKnob for types that need full repaints

Signed-off-by: falkTX <falktx@falktx.com>
pull/297/head
falkTX 4 years ago
parent
commit
a93b12cb0a
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
4 changed files with 22 additions and 5 deletions
  1. +1
    -1
      dgl/EventHandlers.hpp
  2. +1
    -0
      dgl/ImageBaseWidgets.hpp
  3. +6
    -4
      dgl/src/EventHandlers.cpp
  4. +14
    -0
      dgl/src/ImageBaseWidgets.cpp

+ 1
- 1
dgl/EventHandlers.hpp View File

@@ -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;


+ 1
- 0
dgl/ImageBaseWidgets.hpp View File

@@ -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;


+ 6
- 4
dgl/src/EventHandlers.cpp View File

@@ -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


+ 14
- 0
dgl/src/ImageBaseWidgets.cpp View File

@@ -361,6 +361,20 @@ void ImageBaseKnob<ImageType>::setRotationAngle(int angle)
pData->isReady = false;
}

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


Loading…
Cancel
Save