11/*
2- * Copyright 2019-2023 Diligent Graphics LLC
2+ * Copyright 2019-2025 Diligent Graphics LLC
33 * Copyright 2015-2019 Egor Yusov
44 *
55 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -58,30 +58,6 @@ ImGuiImplLinuxXCB::ImGuiImplLinuxXCB(const ImGuiDiligentCreateInfo& CI,
5858
5959 io.BackendPlatformName = " Diligent-ImGuiImplLinuxXCB" ;
6060
61- // Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array that we will update during the application lifetime.
62- io.KeyMap [ImGuiKey_Tab] = 0x17 ;
63- io.KeyMap [ImGuiKey_LeftArrow] = 0x71 ;
64- io.KeyMap [ImGuiKey_RightArrow] = 0x72 ;
65- io.KeyMap [ImGuiKey_UpArrow] = 0x6F ;
66- io.KeyMap [ImGuiKey_DownArrow] = 0x74 ;
67- io.KeyMap [ImGuiKey_PageUp] = 0x70 ;
68- io.KeyMap [ImGuiKey_PageDown] = 0x75 ;
69- io.KeyMap [ImGuiKey_Home] = 0x6E ;
70- io.KeyMap [ImGuiKey_End] = 0x73 ;
71- io.KeyMap [ImGuiKey_Insert] = 0x76 ;
72- io.KeyMap [ImGuiKey_Delete] = 0x77 ;
73- io.KeyMap [ImGuiKey_Backspace] = 0x16 ;
74- // io.KeyMap[ImGuiKey_Space] = 0;//VK_SPACE;
75- io.KeyMap [ImGuiKey_Enter] = 0x24 ;
76- io.KeyMap [ImGuiKey_Escape] = 0x09 ;
77- io.KeyMap [ImGuiKey_KeyPadEnter] = 0x68 ;
78- io.KeyMap [ImGuiKey_A] = ' A' ;
79- io.KeyMap [ImGuiKey_C] = ' C' ;
80- io.KeyMap [ImGuiKey_V] = ' V' ;
81- io.KeyMap [ImGuiKey_X] = ' X' ;
82- io.KeyMap [ImGuiKey_Y] = ' Y' ;
83- io.KeyMap [ImGuiKey_Z] = ' Z' ;
84-
8561 m_LastTimestamp = std::chrono::high_resolution_clock::now ();
8662}
8763
@@ -119,29 +95,29 @@ void ImGuiImplLinuxXCB::HandleKeyEvent(xcb_key_release_event_t* event)
11995
12096 auto & io = ImGui::GetIO ();
12197
122- io.KeyCtrl = event->state & XCB_KEY_BUT_MASK_CONTROL;
123- io.KeyShift = event->state & XCB_KEY_BUT_MASK_SHIFT;
124- io.KeyAlt = event->state & XCB_KEY_BUT_MASK_MOD_1;
98+ io.AddKeyEvent (ImGuiKey_ModCtrl, event->state & XCB_KEY_BUT_MASK_CONTROL) ;
99+ io.AddKeyEvent (ImGuiKey_ModShift, event->state & XCB_KEY_BUT_MASK_SHIFT) ;
100+ io.AddKeyEvent (ImGuiKey_ModAlt, event->state & XCB_KEY_BUT_MASK_MOD_1) ;
125101
126- int k = 0 ;
102+ ImGuiKey k = ImGuiKey_None ;
127103 switch (event->detail )
128104 {
129105 // clang-format off
130- case 0x09 : k = io. KeyMap [ ImGuiKey_Escape] ; break ;
131- case 0x6F : k = io. KeyMap [ ImGuiKey_UpArrow] ; break ;
132- case 0x74 : k = io. KeyMap [ ImGuiKey_DownArrow] ; break ;
133- case 0x72 : k = io. KeyMap [ ImGuiKey_RightArrow] ; break ;
134- case 0x71 : k = io. KeyMap [ ImGuiKey_LeftArrow] ; break ;
135- case 0x24 : k = io. KeyMap [ ImGuiKey_Enter] ; break ;
136- case 0x76 : k = io. KeyMap [ ImGuiKey_Insert] ; break ;
137- case 0x77 : k = io. KeyMap [ ImGuiKey_Delete] ; break ;
138- case 0x16 : k = io. KeyMap [ ImGuiKey_Backspace] ; break ;
139- case 0x6E : k = io. KeyMap [ ImGuiKey_Home] ; break ;
140- case 0x17 : k = io. KeyMap [ ImGuiKey_Tab] ; break ;
141- case 0x73 : k = io. KeyMap [ ImGuiKey_End] ; break ;
142- case 0x68 : k = io. KeyMap [ImGuiKey_KeyPadEnter]; break ;
143- case 0x70 : k = io. KeyMap [ ImGuiKey_PageUp] ; break ;
144- case 0x75 : k = io. KeyMap [ ImGuiKey_PageDown] ; break ;
106+ case 0x09 : k = ImGuiKey_Escape; break ;
107+ case 0x6F : k = ImGuiKey_UpArrow; break ;
108+ case 0x74 : k = ImGuiKey_DownArrow; break ;
109+ case 0x72 : k = ImGuiKey_RightArrow; break ;
110+ case 0x71 : k = ImGuiKey_LeftArrow; break ;
111+ case 0x24 : k = ImGuiKey_Enter; break ;
112+ case 0x76 : k = ImGuiKey_Insert; break ;
113+ case 0x77 : k = ImGuiKey_Delete; break ;
114+ case 0x16 : k = ImGuiKey_Backspace; break ;
115+ case 0x6E : k = ImGuiKey_Home; break ;
116+ case 0x17 : k = ImGuiKey_Tab; break ;
117+ case 0x73 : k = ImGuiKey_End; break ;
118+ case 0x68 : k = ImGuiKey_Enter; break ;
119+ case 0x70 : k = ImGuiKey_PageUp; break ;
120+ case 0x75 : k = ImGuiKey_PageDown; break ;
145121 // clang-format on
146122 }
147123
@@ -165,25 +141,25 @@ void ImGuiImplLinuxXCB::HandleKeyEvent(xcb_key_release_event_t* event)
165141# endif
166142
167143# ifdef XK_KP_Home
168- case XK_KP_Home: k = io.KeyMap[ ImGuiKey_Home] ; break;
169- case XK_KP_End: k = io.KeyMap[ ImGuiKey_End] ; break;
170- case XK_KP_Delete: k = io.KeyMap[ ImGuiKey_Delete] ; break;
144+ case XK_KP_Home: k = ImGuiKey_Home; break;
145+ case XK_KP_End: k = ImGuiKey_End; break;
146+ case XK_KP_Delete: k = ImGuiKey_Delete; break;
171147# endif
172148
173149# ifdef XK_KP_Up
174- case XK_KP_Up: k = io.KeyMap[ ImGuiKey_UpArrow] ; break;
175- case XK_KP_Down: k = io.KeyMap[ ImGuiKey_DownArrow] ; break;
176- case XK_KP_Right: k = io.KeyMap[ ImGuiKey_RightArrow] ; break;
177- case XK_KP_Left: k = io.KeyMap[ ImGuiKey_LeftArrow] ; break;
150+ case XK_KP_Up: k = ImGuiKey_UpArrow; break;
151+ case XK_KP_Down: k = ImGuiKey_DownArrow; break;
152+ case XK_KP_Right: k = ImGuiKey_RightArrow; break;
153+ case XK_KP_Left: k = ImGuiKey_LeftArrow; break;
178154# endif
179155
180156# ifdef XK_KP_Page_Up
181- case XK_KP_Page_Up: k = io.KeyMap[ ImGuiKey_PageUp] ; break;
182- case XK_KP_Page_Down: k = io.KeyMap[ ImGuiKey_PageDown] ; break;
157+ case XK_KP_Page_Up: k = ImGuiKey_PageUp; break;
158+ case XK_KP_Page_Down: k = ImGuiKey_PageDown; break;
183159# endif
184160
185161# ifdef XK_KP_Tab
186- case XK_KP_Tab: k = io.KeyMap[ ImGuiKey_Tab] ; break;
162+ case XK_KP_Tab: k = ImGuiKey_Tab; break;
187163# endif
188164#endif
189165 default :
@@ -227,9 +203,9 @@ void ImGuiImplLinuxXCB::HandleKeyEvent(xcb_key_release_event_t* event)
227203 }
228204 }
229205
230- if (k != 0 )
206+ if (k != ImGuiKey_None )
231207 {
232- io.KeysDown [k] = IsKeyPressed;
208+ io.AddKeyEvent (k, IsKeyPressed) ;
233209 }
234210}
235211
0 commit comments