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" #include "src/openwindow.h"
void handleInput(Window * window) { void handleInput(Window * window) {
if (windowKeyPressed(window, WINDOW_KEY_A)) if (windowKeyPressed(window, WINDOW_KEY_A) && !windowKeyShift(window))
printf("A is being pressed\n"); printf("a is being pressed\n");
if (windowKeyHeld(window, WINDOW_KEY_A)) if (windowKeyHeld(window, WINDOW_KEY_A) && !windowKeyShift(window))
printf("A is being held\n"); printf("a is being held\n");
if (windowKeyReleased(window, WINDOW_KEY_A)) if (windowKeyReleased(window, WINDOW_KEY_A) && !windowKeyShift(window))
printf("A is being released\n"); printf("a is being released\n");
} }
int main(void) int main(void)

View File

@ -236,7 +236,7 @@ bool windowKeyPressed(Window * window, char * key) {
KeyCode keycode = XKeysymToKeycode(window->x.display, keysym); 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) { bool windowKeyHeld(Window * window, char * key) {
@ -245,7 +245,7 @@ bool windowKeyHeld(Window * window, char * key) {
KeyCode keycode = XKeysymToKeycode(window->x.display, keysym); 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) { bool windowKeyReleased(Window * window, char * key) {
@ -254,7 +254,28 @@ bool windowKeyReleased(Window * window, char * key) {
KeyCode keycode = XKeysymToKeycode(window->x.display, keysym); 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 #else
@ -454,6 +475,18 @@ bool windowKeyReleased(Window * window, int key) {
return (window->io.last[key] & 0x80) && !(window->io.current[key] & 0x80); 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 #endif // _WIN32
int getOpenGLProcs(void) { int getOpenGLProcs(void) {

View File

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