Event System: add ISKEYBOARD_OR_BUTTON macro
This simplifies checking for event types that support press & release.
This commit is contained in:
parent
08d8eee006
commit
f052fb5646
|
@ -635,7 +635,7 @@ typedef struct wmTabletData {
|
|||
* Notes:
|
||||
*
|
||||
* - The previous values are only set for mouse button and keyboard events.
|
||||
* See: #ISMOUSE_BUTTON & #ISKEYBOARD macros.
|
||||
* See: #ISKEYBOARD_OR_BUTTON macro.
|
||||
*
|
||||
* - Previous x/y are exceptions: #wmEvent.prev
|
||||
* these are set on mouse motion, see #MOUSEMOVE & track-pad events.
|
||||
|
|
|
@ -145,7 +145,7 @@ wmEvent *WM_event_add_simulate(wmWindow *win, const wmEvent *event_to_add)
|
|||
copy_v2_v2_int(win->eventstate->prev_xy, win->eventstate->xy);
|
||||
copy_v2_v2_int(event->prev_xy, win->eventstate->xy);
|
||||
}
|
||||
else if (ISMOUSE_BUTTON(event->type) || ISKEYBOARD(event->type)) {
|
||||
else if (ISKEYBOARD_OR_BUTTON(event->type)) {
|
||||
win->eventstate->prev_val = event->prev_val = win->eventstate->val;
|
||||
win->eventstate->prev_type = event->prev_type = win->eventstate->type;
|
||||
|
||||
|
@ -3205,7 +3205,7 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
|
|||
win->event_queue_check_drag = false;
|
||||
}
|
||||
}
|
||||
else if (ISMOUSE_BUTTON(event->type) || ISKEYBOARD(event->type)) {
|
||||
else if (ISKEYBOARD_OR_BUTTON(event->type)) {
|
||||
/* All events that don't set #wmEvent.prev_type must be ignored. */
|
||||
|
||||
/* Test for CLICK events. */
|
||||
|
@ -4770,7 +4770,7 @@ static wmEvent *wm_event_add_trackpad(wmWindow *win, const wmEvent *event, int d
|
|||
*/
|
||||
static void wm_event_state_update_and_click_set(wmEvent *event, wmEvent *event_state)
|
||||
{
|
||||
BLI_assert(ISMOUSE_BUTTON(event->type) || ISKEYBOARD(event->type));
|
||||
BLI_assert(ISKEYBOARD_OR_BUTTON(event->type));
|
||||
BLI_assert(ELEM(event->val, KM_PRESS, KM_RELEASE));
|
||||
|
||||
/* Only copy these flags into the `event_state`. */
|
||||
|
@ -4839,15 +4839,13 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, void
|
|||
* while not common, avoid a false alarm. */
|
||||
#ifndef NDEBUG
|
||||
if ((event_state->type || event_state->val) && /* Ignore cleared event state. */
|
||||
!(ISMOUSE_BUTTON(event_state->type) || ISKEYBOARD(event_state->type) ||
|
||||
(event_state->type == EVENT_NONE))) {
|
||||
!(ISKEYBOARD_OR_BUTTON(event_state->type) || (event_state->type == EVENT_NONE))) {
|
||||
CLOG_WARN(WM_LOG_HANDLERS,
|
||||
"Non-keyboard/mouse button found in 'win->eventstate->type = %d'",
|
||||
event_state->type);
|
||||
}
|
||||
if ((event_state->prev_type || event_state->prev_val) && /* Ignore cleared event state. */
|
||||
!(ISMOUSE_BUTTON(event_state->prev_type) || ISKEYBOARD(event_state->prev_type) ||
|
||||
(event_state->type == EVENT_NONE))) {
|
||||
!(ISKEYBOARD_OR_BUTTON(event_state->prev_type) || (event_state->type == EVENT_NONE))) {
|
||||
CLOG_WARN(WM_LOG_HANDLERS,
|
||||
"Non-keyboard/mouse button found in 'win->eventstate->prev_type = %d'",
|
||||
event_state->prev_type);
|
||||
|
|
|
@ -363,6 +363,16 @@ enum {
|
|||
(((event_type) >= _EVT_KEYBOARD_MIN && (event_type) <= _EVT_KEYBOARD_MAX) || \
|
||||
((event_type) >= EVT_F1KEY && (event_type) <= EVT_F24KEY))
|
||||
|
||||
/**
|
||||
* Test whether the event is a key on the keyboard
|
||||
* or any other kind of button that supports press & release
|
||||
* (use for click & click-drag detection).
|
||||
*
|
||||
* \note Mouse wheel events are excluded from this macro, while they do generate press events it
|
||||
* doesn't make sense to have click & click-drag events for a mouse-wheel as it can't be held down.
|
||||
*/
|
||||
#define ISKEYBOARD_OR_BUTTON(event_type) (ISMOUSE_BUTTON(event_type) || ISKEYBOARD(event_type))
|
||||
|
||||
/** Test whether the event is a modifier key. */
|
||||
#define ISKEYMODIFIER(event_type) \
|
||||
(((event_type) >= EVT_LEFTCTRLKEY && (event_type) <= EVT_LEFTSHIFTKEY) || \
|
||||
|
|
Loading…
Reference in New Issue