added windowKeyShift, windowKeyCtrl and windowKeyAlt

This commit is contained in:
Maciej Samborski 2025-07-27 13:14:17 +02:00
parent 6951a36932
commit 0c34121cc0
3 changed files with 49 additions and 9 deletions

12
main.c
View File

@ -5,14 +5,14 @@
#include "src/openwindow.h"
void handleInput(Window * window) {
if (windowKeyPressed(window, WINDOW_KEY_A))
printf("A is being pressed\n");
if (windowKeyPressed(window, WINDOW_KEY_A) && !windowKeyShift(window))
printf("a is being pressed\n");
if (windowKeyHeld(window, WINDOW_KEY_A))
printf("A is being held\n");
if (windowKeyHeld(window, WINDOW_KEY_A) && !windowKeyShift(window))
printf("a is being held\n");
if (windowKeyReleased(window, WINDOW_KEY_A))
printf("A is being released\n");
if (windowKeyReleased(window, WINDOW_KEY_A) && !windowKeyShift(window))
printf("a is being released\n");
}
int main(void)

View File

@ -236,7 +236,7 @@ bool windowKeyPressed(Window * window, char * key) {
KeyCode keycode = XKeysymToKeycode(window->x.display, keysym);
return !(window->io.last[keycode / 8] & (1 << (keycode % 8))) && (window->io.current[keycode / 8] & (1 << (keycode % 8)));
return !(window->io.last[keycode >> 3] & (1 << (keycode & 7))) && (window->io.current[keycode >> 3] & (1 << (keycode & 7)));
}
bool windowKeyHeld(Window * window, char * key) {
@ -245,7 +245,7 @@ bool windowKeyHeld(Window * window, char * key) {
KeyCode keycode = XKeysymToKeycode(window->x.display, keysym);
return (window->io.last[keycode / 8] & (1 << (keycode % 8))) && (window->io.current[keycode / 8] & (1 << (keycode % 8)));
return (window->io.last[keycode >> 3] & (1 << (keycode & 7))) && (window->io.current[keycode >> 3] & (1 << (keycode & 7)));
}
bool windowKeyReleased(Window * window, char * key) {
@ -254,7 +254,28 @@ bool windowKeyReleased(Window * window, char * key) {
KeyCode keycode = XKeysymToKeycode(window->x.display, keysym);
return (window->io.last[keycode / 8] & (1 << (keycode % 8))) && !(window->io.current[keycode / 8] & (1 << (keycode % 8)));
return (window->io.last[keycode >> 3] & (1 << (keycode & 7))) && !(window->io.current[keycode >> 3] & (1 << (keycode & 7)));
}
bool windowKeyShift(Window * window) {
KeyCode sl = XKeysymToKeycode(window->x.display, XK_Shift_L);
KeyCode sr = XKeysymToKeycode(window->x.display, XK_Shift_R);
return (window->io.last[sl >> 3] & (1 << (sl & 7))) || (window->io.current[sr >> 3] & (1 << (sr & 7)));
}
bool windowKeyCtrl(Window * window) {
KeyCode cl = XKeysymToKeycode(window->x.display, XK_Control_L);
KeyCode cr = XKeysymToKeycode(window->x.display, XK_Control_R);
return (window->io.last[cl >> 3] & (1 << (cl & 7))) || (window->io.current[cr >> 3] & (1 << (cr & 7)));
}
bool windowKeyAlt(Window * window) {
KeyCode al = XKeysymToKeycode(window->x.display, XK_Alt_L);
KeyCode ar = XKeysymToKeycode(window->x.display, XK_Alt_R);
return (window->io.last[al >> 3] & (1 << (al & 7))) || (window->io.current[ar >> 3] & (1 << (ar & 7)));
}
#else
@ -454,6 +475,18 @@ bool windowKeyReleased(Window * window, int key) {
return (window->io.last[key] & 0x80) && !(window->io.current[key] & 0x80);
}
bool windowKeyShift(Window * window) {
return window->io.current[VK_SHIFT] & 0x80;
}
bool windowKeyCtrl(Window * window) {
return window->io.current[VK_CONTROL] & 0x80;
}
bool windowKeyAlt(Window * window) {
return window->io.current[VK_MENU] & 0x80;
}
#endif // _WIN32
int getOpenGLProcs(void) {

View File

@ -94,6 +94,10 @@ bool windowKeyPressed(Window * window, char * key);
bool windowKeyReleased(Window * window, char * key);
bool windowKeyHeld(Window * window, char * key);
bool windowKeyShift(Window * window);
bool windowKeyCtrl(Window * window);
bool windowKeyAlt(Window * window);
#else
#include <windows.h>
@ -163,6 +167,9 @@ bool windowKeyPressed(Window * window, int key);
bool windowKeyReleased(Window * window, int key);
bool windowKeyHeld(Window * window, int key);
bool windowKeyShift(Window * window);
bool windowKeyCtrl(Window * window);
bool windowKeyAlt(Window * window);
#endif // _WIN32