Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

keycode rewrite #53

Merged
merged 16 commits into from
Dec 22, 2024
Merged

keycode rewrite #53

merged 16 commits into from
Dec 22, 2024

Conversation

ColleagueRiley
Copy link
Owner

@ColleagueRiley ColleagueRiley commented Dec 14, 2024

This PR exists in order organize my thoughts for the rewrite, allow for public comments and transparency, and to allow me to work on this change synchronously with other updates.

Brief explanation:

Scancodes are codes from key input which refer to the actual physical key that is pressed.
For example, Q may be referred to as 21 being the 1st key on the 2nd row. (Note: this number is not based on how scancodes work in real life, but only for an example) That key can then be mapped by software such as SDL or RGFW to a standard key format such as QWERTY. Allowing you to use KEY_Q to refer to the 1st key on the 2nd row no matter which keyboard you use. On a French Keyboard, that key would be KEY_A, however the scancode would still be KEY_Q

Keycodes are mapped codes from key input. They are mapped by the OS based on the keyboard's set format. For example, with the French keyboard, when the A key is pressed, the keycode would be KEY_A .

Scancodes are based on key placement, making them good for controls;
keycodes are based on key mapping, making them good for text input.

Currently, RGFW does not have any special sort of API for keycodes and scancodes. It was not designed with this difference in mind, which results in a few API flaws:

  • RGFW keymap code mixes keycodes and scancodes:

linux:
event.keycode -> scancode,
event.keyname -> keycode

windows:
event.keycode -> keycode,
event.keyname -> keycode

macOS:
event.keycode -> scancode
event.keyname -> keycode

web:
event.keycode -> keycode
event.keyname -> keycode

Features to implement:

  • Allow for the user to receive both they keycode and scancode in some way.
  • Standardize key conversion (use scancodes or keycodes for both)
  • Create a separate LUT for key and scancodes OR find a different way to convert the scancode to the keycode OR use only scancodes then send a char for the keycode (This is what GLFW does).

@ColleagueRiley ColleagueRiley marked this pull request as draft December 14, 2024 02:45
@ColleagueRiley ColleagueRiley marked this pull request as ready for review December 21, 2024 23:44
@ColleagueRiley ColleagueRiley merged commit 48872ca into main Dec 22, 2024
9 checks passed
@ColleagueRiley ColleagueRiley deleted the keycode-rewrite branch December 22, 2024 00:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant