diff options
author | Campbell Barton <campbell@blender.org> | 2022-05-27 08:55:16 +0300 |
---|---|---|
committer | Campbell Barton <campbell@blender.org> | 2022-05-27 08:55:56 +0300 |
commit | 46456a59c44f228f763bee1bee9357648a208359 (patch) | |
tree | c1d29adddd23c17788f68d54969c9036f1cb6d7c | |
parent | 7aad4d459e0811550ff239cec4f6a71a310e0286 (diff) |
GHOST/Wayland: support mouse buttons 4-7
-rw-r--r-- | intern/ghost/intern/GHOST_Buttons.cpp | 24 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_Buttons.h | 4 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_SystemWayland.cpp | 20 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_SystemX11.cpp | 2 |
4 files changed, 49 insertions, 1 deletions
diff --git a/intern/ghost/intern/GHOST_Buttons.cpp b/intern/ghost/intern/GHOST_Buttons.cpp index c948c7beadb..3367d256325 100644 --- a/intern/ghost/intern/GHOST_Buttons.cpp +++ b/intern/ghost/intern/GHOST_Buttons.cpp @@ -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() diff --git a/intern/ghost/intern/GHOST_Buttons.h b/intern/ghost/intern/GHOST_Buttons.h index 17f25f1e082..72cb17a3322 100644 --- a/intern/ghost/intern/GHOST_Buttons.h +++ b/intern/ghost/intern/GHOST_Buttons.h @@ -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; }; diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp b/intern/ghost/intern/GHOST_SystemWayland.cpp index dae3d578fa0..4a25b8bb9bb 100644 --- a/intern/ghost/intern/GHOST_SystemWayland.cpp +++ b/intern/ghost/intern/GHOST_SystemWayland.cpp @@ -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; diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp index 703fd1c44d9..54d38e1c0f3 100644 --- a/intern/ghost/intern/GHOST_SystemX11.cpp +++ b/intern/ghost/intern/GHOST_SystemX11.cpp @@ -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; |