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 knobDragStarted(SubWidget* widget) = 0;
virtual void knobDragFinished(SubWidget* widget) = 0; virtual void knobDragFinished(SubWidget* widget) = 0;
virtual void knobValueChanged(SubWidget* widget, float value) = 0; virtual void knobValueChanged(SubWidget* widget, float value) = 0;
virtual void knobDoubleClicked(SubWidget*) {};
}; };


explicit KnobEventHandler(SubWidget* self); explicit KnobEventHandler(SubWidget* self);


+ 1
- 1
dgl/Widget.hpp View File

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


/** Constructor for default/null values */ /** Constructor for default/null values */


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

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


double lastX; double lastX;
double lastY; double lastY;
uint lastClickTime;


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


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


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


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


state |= kKnobStateDragging;
lastX = ev.pos.getX(); lastX = ev.pos.getX();
lastY = ev.pos.getY(); 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(); widget->repaint();


if (callback != nullptr) if (callback != nullptr)


Loading…
Cancel
Save