GHOST/Wayland: support mouse buttons 4-7

This commit is contained in:
Campbell Barton 2022-05-27 15:55:16 +10:00
parent 7aad4d459e
commit 46456a59c4
4 changed files with 49 additions and 1 deletions

View File

@ -21,6 +21,14 @@ bool GHOST_Buttons::get(GHOST_TButtonMask mask) const
return m_ButtonMiddle;
case GHOST_kButtonMaskRight:
return m_ButtonRight;
case GHOST_kButtonMaskButton4:
return m_Button4;
case GHOST_kButtonMaskButton5:
return m_Button5;
case GHOST_kButtonMaskButton6:
return m_Button6;
case GHOST_kButtonMaskButton7:
return m_Button7;
default:
return false;
}
@ -38,6 +46,18 @@ void GHOST_Buttons::set(GHOST_TButtonMask mask, bool down)
case GHOST_kButtonMaskRight:
m_ButtonRight = down;
break;
case GHOST_kButtonMaskButton4:
m_Button4 = down;
break;
case GHOST_kButtonMaskButton5:
m_Button5 = down;
break;
case GHOST_kButtonMaskButton6:
m_Button6 = down;
break;
case GHOST_kButtonMaskButton7:
m_Button7 = down;
break;
default:
break;
}
@ -48,6 +68,10 @@ void GHOST_Buttons::clear()
m_ButtonLeft = false;
m_ButtonMiddle = false;
m_ButtonRight = false;
m_Button4 = false;
m_Button5 = false;
m_Button6 = false;
m_Button7 = false;
}
GHOST_Buttons::~GHOST_Buttons()

View File

@ -44,4 +44,8 @@ struct GHOST_Buttons {
uint8_t m_ButtonLeft : 1;
uint8_t m_ButtonMiddle : 1;
uint8_t m_ButtonRight : 1;
uint8_t m_Button4 : 1;
uint8_t m_Button5 : 1;
uint8_t m_Button6 : 1;
uint8_t m_Button7 : 1;
};

View File

@ -38,7 +38,8 @@
#include <cstring>
/* selected input event code defines from 'linux/input-event-codes.h'
/**
* Selected input event code defines from `linux/input-event-codes.h`
* We include some of the button input event codes here, since the header is
* only available in more recent kernel versions. The event codes are used to
* to differentiate from which mouse button an event comes from.
@ -46,6 +47,11 @@
#define BTN_LEFT 0x110
#define BTN_RIGHT 0x111
#define BTN_MIDDLE 0x112
#define BTN_SIDE 0x113
#define BTN_EXTRA 0x114
#define BTN_FORWARD 0x115
#define BTN_BACK 0x116
// #define BTN_TASK 0x117 /* UNUSED. */
struct buffer_t {
void *data;
@ -974,6 +980,18 @@ static void pointer_button(void *data,
case BTN_RIGHT:
ebutton = GHOST_kButtonMaskRight;
break;
case BTN_SIDE:
ebutton = GHOST_kButtonMaskButton4;
break;
case BTN_EXTRA:
ebutton = GHOST_kButtonMaskButton5;
break;
case BTN_FORWARD:
ebutton = GHOST_kButtonMaskButton6;
break;
case BTN_BACK:
ebutton = GHOST_kButtonMaskButton7;
break;
}
input->data_source->source_serial = serial;

View File

@ -1612,6 +1612,8 @@ GHOST_TSuccess GHOST_SystemX11::getButtons(GHOST_Buttons &buttons) const
buttons.set(GHOST_kButtonMaskLeft, (mask_return & Button1Mask) != 0);
buttons.set(GHOST_kButtonMaskMiddle, (mask_return & Button2Mask) != 0);
buttons.set(GHOST_kButtonMaskRight, (mask_return & Button3Mask) != 0);
buttons.set(GHOST_kButtonMaskButton4, (mask_return & Button4Mask) != 0);
buttons.set(GHOST_kButtonMaskButton5, (mask_return & Button5Mask) != 0);
}
else {
return GHOST_kFailure;