Browse Source

Get mouse button event working at least

Signed-off-by: falkTX <falktx@falktx.com>
pull/272/head
falkTX 4 years ago
parent
commit
91d4212e93
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
4 changed files with 53 additions and 43 deletions
  1. +2
    -0
      dgl/NanoVG.hpp
  2. +8
    -7
      dgl/src/NanoVG.cpp
  3. +20
    -6
      dgl/src/WindowPrivateData.cpp
  4. +23
    -30
      dgl/src/WindowPrivateData.hpp

+ 2
- 0
dgl/NanoVG.hpp View File

@@ -305,7 +305,9 @@ public:
/**
Constructor reusing a NanoVG context, used for subwidgets.
*/
/*
NanoVG(NanoWidget* groupWidget);
*/

/**
Destructor.


+ 8
- 7
dgl/src/NanoVG.cpp View File

@@ -240,10 +240,10 @@ NanoVG::NanoVG(int flags)
fInFrame(false),
fIsSubWidget(false) {}

NanoVG::NanoVG(NanoWidget* groupWidget)
: fContext(groupWidget->fContext),
fInFrame(false),
fIsSubWidget(true) {}
// NanoVG::NanoVG(NanoWidget* groupWidget)
// : fContext(groupWidget->fContext),
// fInFrame(false),
// fIsSubWidget(true) {}

NanoVG::~NanoVG()
{
@@ -257,21 +257,20 @@ NanoVG::~NanoVG()

void NanoVG::beginFrame(const uint width, const uint height, const float scaleFactor)
{
fInFrame = true;
if (fContext == nullptr) return;
DISTRHO_SAFE_ASSERT_RETURN(scaleFactor > 0.0f,);
DISTRHO_SAFE_ASSERT_RETURN(! fInFrame,);

fInFrame = true;
nvgBeginFrame(fContext, static_cast<int>(width), static_cast<int>(height), scaleFactor);
}

void NanoVG::beginFrame(Widget* const widget)
{
fInFrame = true;
DISTRHO_SAFE_ASSERT_RETURN(widget != nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(! fInFrame,);

fInFrame = true;

if (fContext == nullptr)
return;

@@ -958,6 +957,7 @@ NanoWidget::NanoWidget(Widget* groupWidget, int flags)
pData->needsScaling = true;
}

/*
NanoWidget::NanoWidget(NanoWidget* groupWidget)
: Widget(groupWidget, false),
NanoVG(groupWidget),
@@ -967,6 +967,7 @@ NanoWidget::NanoWidget(NanoWidget* groupWidget)
pData->skipDisplay = true;
groupWidget->nData->subWidgets.push_back(this);
}
*/

NanoWidget::~NanoWidget()
{


+ 20
- 6
dgl/src/WindowPrivateData.cpp View File

@@ -129,7 +129,7 @@ void Window::PrivateData::setVisible(const bool visible)
#ifdef DISTRHO_OS_WINDOWS
puglShowWindowCentered(fView);
#else
puglShowWindow(fView);
puglShow(fView);
#endif
fAppData->oneWindowShown();
fFirstInit = false;
@@ -139,7 +139,7 @@ void Window::PrivateData::setVisible(const bool visible)
#ifdef DISTRHO_OS_WINDOWS
puglWin32RestoreWindow(fView);
#else
puglShowWindow(fView);
puglShow(fView);
#endif
}
}
@@ -153,7 +153,7 @@ void Window::PrivateData::setVisible(const bool visible)
}
#endif

puglHideWindow(fView);
puglHide(fView);

// if (fModal.enabled)
// exec_fini();
@@ -270,7 +270,7 @@ printEvent(const PuglEvent* event, const char* prefix, const bool verbose)
case PUGL_UNMAP:
return fprintf(stderr, "%sUnmap\n", prefix);
case PUGL_UPDATE:
return fprintf(stderr, "%sUpdate\n", prefix);
return 0; // fprintf(stderr, "%sUpdate\n", prefix);
case PUGL_CONFIGURE:
return PRINT("%sConfigure " PFMT " " PFMT "\n",
prefix,
@@ -350,6 +350,20 @@ PuglStatus Window::PrivateData::puglEventCallback(PuglView* const view, const Pu
pData->onPuglClose();
break;

case PUGL_BUTTON_PRESS: ///< Mouse button pressed, a #PuglEventButton
case PUGL_BUTTON_RELEASE: ///< Mouse button released, a #PuglEventButton
{
Widget::MouseEvent ev;
ev.mod = event->button.state;
ev.flags = event->button.flags;
ev.time = static_cast<uint>(event->button.time * 1000.0 + 0.5);
ev.button = event->button.button;
ev.press = event->type == PUGL_BUTTON_PRESS;
ev.pos = Point<double>(event->button.x, event->button.y);
pData->onPuglMouse(ev);
break;
}

case PUGL_FOCUS_IN: ///< Keyboard focus entered view, a #PuglEventFocus
case PUGL_FOCUS_OUT: ///< Keyboard focus left view, a #PuglEventFocus
case PUGL_KEY_PRESS: ///< Key pressed, a #PuglEventKey
@@ -357,12 +371,12 @@ PuglStatus Window::PrivateData::puglEventCallback(PuglView* const view, const Pu
case PUGL_TEXT: ///< Character entered, a #PuglEventText
case PUGL_POINTER_IN: ///< Pointer entered view, a #PuglEventCrossing
case PUGL_POINTER_OUT: ///< Pointer left view, a #PuglEventCrossing
case PUGL_BUTTON_PRESS: ///< Mouse button pressed, a #PuglEventButton
case PUGL_BUTTON_RELEASE: ///< Mouse button released, a #PuglEventButton
case PUGL_MOTION: ///< Pointer moved, a #PuglEventMotion
case PUGL_SCROLL: ///< Scrolled, a #PuglEventScroll
case PUGL_CLIENT: ///< Custom client message, a #PuglEventClient
case PUGL_TIMER: ///< Timer triggered, a #PuglEventTimer
case PUGL_LOOP_ENTER: ///< Recursive loop entered, a #PuglEventLoopEnter
case PUGL_LOOP_LEAVE: ///< Recursive loop left, a #PuglEventLoopLeave
break;
}



+ 23
- 30
dgl/src/WindowPrivateData.hpp View File

@@ -340,6 +340,29 @@ struct Window::PrivateData {
}
}

void onPuglMouse(const Widget::MouseEvent& ev)
{
DGL_DBGp("PUGL: onMouse : %i %i %i %i\n", ev.button, ev.press, ev.pos.getX(), ev.pos.getY());

// if (fModal.childFocus != nullptr)
// return fModal.childFocus->focus();

Widget::MouseEvent rev = ev;
double x = ev.pos.getX() / fAutoScaling;
double y = ev.pos.getY() / fAutoScaling;

FOR_EACH_WIDGET_INV(rit)
{
Widget* const widget(*rit);

rev.pos = Point<double>(x - widget->getAbsoluteX(),
y - widget->getAbsoluteY());

if (widget->isVisible() && widget->onMouse(rev))
break;
}
}

// -------------------------------------------------------------------

#ifdef DISTRHO_DEFINES_H_INCLUDED
@@ -484,36 +507,6 @@ struct Window::PrivateData {
return 1;
}

void onPuglMouse(const int button, const bool press, int x, int y)
{
DBGp("PUGL: onMouse : %i %i %i %i\n", button, press, x, y);

// FIXME - pugl sends 2 of these for each window on init, don't ask me why. we'll ignore it
if (press && button == 0 && x == 0 && y == 0) return;

if (fModal.childFocus != nullptr)
return fModal.childFocus->focus();

x /= fAutoScaling;
y /= fAutoScaling;

Widget::MouseEvent ev;
ev.button = button;
ev.press = press;
ev.mod = static_cast<Modifier>(puglGetModifiers(fView));
ev.time = puglGetEventTimestamp(fView);

FOR_EACH_WIDGET_INV(rit)
{
Widget* const widget(*rit);

ev.pos = Point<int>(x-widget->getAbsoluteX(), y-widget->getAbsoluteY());

if (widget->isVisible() && widget->onMouse(ev))
break;
}
}

void onPuglMotion(int x, int y)
{
// DBGp("PUGL: onMotion : %i %i\n", x, y);


Loading…
Cancel
Save