Browse Source

Introduce knobDoubleClicked for KnobEventHandler

Signed-off-by: falkTX <falktx@falktx.com>
pull/321/merge
falkTX 2 years ago
parent
commit
2ba1ac10dc
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
3 changed files with 21 additions and 4 deletions
  1. +1
    -0
      dgl/EventHandlers.hpp
  2. +1
    -1
      dgl/Widget.hpp
  3. +19
    -3
      dgl/src/EventHandlers.cpp

+ 1
- 0
dgl/EventHandlers.hpp View File

@@ -113,6 +113,7 @@ public:
virtual void knobDragStarted(SubWidget* widget) = 0;
virtual void knobDragFinished(SubWidget* widget) = 0;
virtual void knobValueChanged(SubWidget* widget, float value) = 0;
virtual void knobDoubleClicked(SubWidget*) {};
};

explicit KnobEventHandler(SubWidget* self);


+ 1
- 1
dgl/Widget.hpp View File

@@ -64,7 +64,7 @@ public:
uint mod;
/** Event flags. @see EventFlag */
uint flags;
/** Event timestamp (if any). */
/** Event timestamp in milliseconds (if any). */
uint time;

/** Constructor for default/null values */


+ 19
- 3
dgl/src/EventHandlers.cpp View File

@@ -288,6 +288,7 @@ struct KnobEventHandler::PrivateData {

double lastX;
double lastY;
uint lastClickTime;

PrivateData(KnobEventHandler* const s, SubWidget* const w)
: self(s),
@@ -305,7 +306,8 @@ struct KnobEventHandler::PrivateData {
orientation(Vertical),
state(kKnobStateDefault),
lastX(0.0),
lastY(0.0) {}
lastY(0.0),
lastClickTime(0) {}

PrivateData(KnobEventHandler* const s, SubWidget* const w, PrivateData* const other)
: self(s),
@@ -323,7 +325,8 @@ struct KnobEventHandler::PrivateData {
orientation(other->orientation),
state(kKnobStateDefault),
lastX(0.0),
lastY(0.0) {}
lastY(0.0),
lastClickTime(0) {}

void assignFrom(PrivateData* const other)
{
@@ -341,6 +344,7 @@ struct KnobEventHandler::PrivateData {
state = kKnobStateDefault;
lastX = 0.0;
lastY = 0.0;
lastClickTime = 0;
}

inline float logscale(const float v) const
@@ -374,9 +378,21 @@ struct KnobEventHandler::PrivateData {
return true;
}

state |= kKnobStateDragging;
lastX = ev.pos.getX();
lastY = ev.pos.getY();

if (lastClickTime > 0 && ev.time > lastClickTime && ev.time - lastClickTime <= 300)
{
lastClickTime = 0;

if (callback != nullptr)
callback->knobDoubleClicked(widget);

return true;
}

lastClickTime = ev.time;
state |= kKnobStateDragging;
widget->repaint();

if (callback != nullptr)


Loading…
Cancel
Save