GHOST: handle all event types in GHOST_EventPrinter::processEvent

- Adjust switch statement to warn when members aren't accounted for.
- Print NDOF button/motion data.
This commit is contained in:
Campbell Barton
2023-08-23 15:11:38 +10:00
parent 3aa0715d65
commit 3405e14446
2 changed files with 131 additions and 62 deletions

View File

@@ -302,7 +302,7 @@ typedef enum {
GHOST_kEventImeComposition,
GHOST_kEventImeCompositionEnd,
GHOST_kNumEventTypes
#define GHOST_kNumEventTypes (GHOST_kEventImeCompositionEnd + 1)
} GHOST_TEventType;
typedef enum {

View File

@@ -11,13 +11,26 @@
#include "GHOST_Debug.hh"
#include "GHOST_EventDragnDrop.hh"
#include "GHOST_EventKey.hh"
#include <iomanip>
#include <iostream>
#include <cstdio>
static const char *getButtonActionString(const GHOST_TButtonAction action)
{
switch (action) {
case GHOST_kPress:
return "Press";
case GHOST_kRelease:
return "Release";
}
return "Unknown";
}
bool GHOST_EventPrinter::processEvent(GHOST_IEvent *event)
{
bool handled = true;
bool handled = false;
GHOST_ASSERT(event, "event==0");
@@ -26,44 +39,101 @@ bool GHOST_EventPrinter::processEvent(GHOST_IEvent *event)
}
std::cout << "GHOST_EventPrinter::processEvent, time: " << int32_t(event->getTime())
<< ", type: ";
switch (event->getType()) {
case GHOST_kEventUnknown:
#define CASE_TYPE(ty) \
case ty: { \
std::cout << #ty; \
handled = true; \
break; \
} \
((void)0)
const GHOST_TEventType event_type = event->getType();
switch (event_type) {
case GHOST_kEventUnknown: {
std::cout << "GHOST_kEventUnknown";
handled = false;
break;
case GHOST_kEventButtonUp: {
GHOST_TEventButtonData *buttonData =
(GHOST_TEventButtonData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventCursorButtonUp, button: " << buttonData->button;
} break;
case GHOST_kEventButtonDown: {
GHOST_TEventButtonData *buttonData =
(GHOST_TEventButtonData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventButtonDown, button: " << buttonData->button;
} break;
case GHOST_kEventWheel: {
GHOST_TEventWheelData *wheelData =
(GHOST_TEventWheelData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventWheel, z: " << wheelData->z;
} break;
}
case GHOST_kEventCursorMove: {
GHOST_TEventCursorData *cursorData =
(GHOST_TEventCursorData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventCursorMove, (x,y): (" << cursorData->x << "," << cursorData->y
<< ")";
} break;
handled = true;
break;
}
case GHOST_kEventButtonDown: {
GHOST_TEventButtonData *buttonData =
(GHOST_TEventButtonData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventButtonDown, button: " << buttonData->button;
handled = true;
break;
}
case GHOST_kEventButtonUp: {
GHOST_TEventButtonData *buttonData =
(GHOST_TEventButtonData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventCursorButtonUp, button: " << buttonData->button;
handled = true;
break;
}
case GHOST_kEventWheel: {
GHOST_TEventWheelData *wheelData =
(GHOST_TEventWheelData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventWheel, z: " << wheelData->z;
handled = true;
break;
}
CASE_TYPE(GHOST_kEventTrackpad);
#ifdef WITH_INPUT_NDOF
case GHOST_kEventNDOFMotion: {
const GHOST_TEventNDOFMotionData *ndof_motion =
(GHOST_TEventNDOFMotionData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventNDOFMotion: ";
std::cout << std::fixed << std::setprecision(2) <<
/* Translation. */
"tx=" << ndof_motion->tx << " ty=" << ndof_motion->tx << " tz=" << ndof_motion->tz <<
/* Rotation. */
"rx=" << ndof_motion->tx << " ry=" << ndof_motion->rx << " rz=" << ndof_motion->rz;
std::cout << std::fixed << std::setprecision(4) << " dt=" << ndof_motion->dt;
handled = true;
break;
}
case GHOST_kEventNDOFButton: {
const GHOST_TEventNDOFButtonData *ndof_button =
(GHOST_TEventNDOFButtonData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventNDOFButton: " << getButtonActionString(ndof_button->action)
<< " button=" << ndof_button->button;
handled = true;
break;
}
#endif
case GHOST_kEventKeyUp: {
GHOST_TEventKeyData *keyData = (GHOST_TEventKeyData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventKeyUp, key: " << getKeyString(keyData->key);
} break;
case GHOST_kEventKeyDown: {
GHOST_TEventKeyData *keyData = (GHOST_TEventKeyData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventKeyDown, key: " << getKeyString(keyData->key);
} break;
handled = true;
break;
}
case GHOST_kEventKeyUp: {
GHOST_TEventKeyData *keyData = (GHOST_TEventKeyData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventKeyUp, key: " << getKeyString(keyData->key);
handled = true;
break;
}
CASE_TYPE(GHOST_kEventQuitRequest);
CASE_TYPE(GHOST_kEventWindowClose);
CASE_TYPE(GHOST_kEventWindowActivate);
CASE_TYPE(GHOST_kEventWindowDeactivate);
CASE_TYPE(GHOST_kEventWindowUpdate);
CASE_TYPE(GHOST_kEventWindowUpdateDecor);
CASE_TYPE(GHOST_kEventWindowSize);
CASE_TYPE(GHOST_kEventWindowMove);
CASE_TYPE(GHOST_kEventWindowDPIHintChanged);
case GHOST_kEventDraggingEntered: {
GHOST_TEventDragnDropData *dragnDropData =
@@ -71,32 +141,36 @@ bool GHOST_EventPrinter::processEvent(GHOST_IEvent *event)
std::cout << "GHOST_kEventDraggingEntered, dragged object type : "
<< dragnDropData->dataType;
std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
} break;
handled = true;
break;
}
case GHOST_kEventDraggingUpdated: {
GHOST_TEventDragnDropData *dragnDropData =
(GHOST_TEventDragnDropData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventDraggingUpdated, dragged object type : "
<< dragnDropData->dataType;
std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
} break;
handled = true;
break;
}
case GHOST_kEventDraggingExited: {
GHOST_TEventDragnDropData *dragnDropData =
(GHOST_TEventDragnDropData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventDraggingExited, dragged object type : " << dragnDropData->dataType;
} break;
handled = true;
break;
}
case GHOST_kEventDraggingDropDone: {
GHOST_TEventDragnDropData *dragnDropData =
(GHOST_TEventDragnDropData *)((GHOST_IEvent *)event)->getData();
std::cout << "GHOST_kEventDraggingDropDone,";
std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
switch (dragnDropData->dataType) {
case GHOST_kDragnDropTypeString:
case GHOST_kDragnDropTypeString: {
std::cout << " type : GHOST_kDragnDropTypeString,";
std::cout << "\n String received = " << (char *)dragnDropData->data;
break;
}
case GHOST_kDragnDropTypeFilenames: {
GHOST_TStringArray *strArray = (GHOST_TStringArray *)dragnDropData->data;
int i;
@@ -106,12 +180,15 @@ bool GHOST_EventPrinter::processEvent(GHOST_IEvent *event)
for (i = 0; i < strArray->count; i++) {
std::cout << "\n File[" << i << "] : " << strArray->strings[i];
}
} break;
default:
break;
}
default: {
break;
}
}
} break;
handled = true;
break;
}
case GHOST_kEventOpenMainFile: {
GHOST_TEventDataPtr eventData = ((GHOST_IEvent *)event)->getData();
@@ -121,31 +198,23 @@ bool GHOST_EventPrinter::processEvent(GHOST_IEvent *event)
else {
std::cout << "GHOST_kEventOpenMainFile with no path specified!!";
}
} break;
handled = true;
break;
}
case GHOST_kEventQuitRequest:
std::cout << "GHOST_kEventQuitRequest";
break;
case GHOST_kEventWindowClose:
std::cout << "GHOST_kEventWindowClose";
break;
case GHOST_kEventWindowActivate:
std::cout << "GHOST_kEventWindowActivate";
break;
case GHOST_kEventWindowDeactivate:
std::cout << "GHOST_kEventWindowDeactivate";
break;
case GHOST_kEventWindowUpdate:
std::cout << "GHOST_kEventWindowUpdate";
break;
case GHOST_kEventWindowSize:
std::cout << "GHOST_kEventWindowSize";
break;
CASE_TYPE(GHOST_kEventNativeResolutionChange);
default:
std::cout << "not found";
handled = false;
break;
CASE_TYPE(GHOST_kEventTimer);
CASE_TYPE(GHOST_kEventImeCompositionStart);
CASE_TYPE(GHOST_kEventImeComposition);
CASE_TYPE(GHOST_kEventImeCompositionEnd);
}
#undef CASE_TYPE
if ((handled == false) && event_type != GHOST_kEventUnknown) {
std::cout << "not found";
}
std::cout << std::endl;