mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-07 10:26:04 +08:00
72 lines
3.0 KiB
Plaintext
72 lines
3.0 KiB
Plaintext
Information on keyboard layouts for developers
|
|
==============================================
|
|
|
|
DOSBox-X is not compatible with keyboard layouts it's not prepared for.
|
|
|
|
DOSBox-X was developed around the US keyboard layout like DOSBox, mainly
|
|
due to limitations around the SDL1 library. SDL is responsible for input
|
|
handling, and SDL1 in particular only supports US keyboards.
|
|
|
|
The SDL1 library used in this source tree, unlike the official library,
|
|
does not attempt to hack around the issue by forcing Windows to load
|
|
the US keyboard layout for itself.
|
|
|
|
This document serves as a guide to begin modifying the source code in
|
|
this project to add support for your keyboard layout.
|
|
|
|
You can also find a list of supported keyboard layouts and further details
|
|
about keyboard layouts and other regional information in the DOSBox-X Wiki:
|
|
https://dosbox-x.com/wiki
|
|
|
|
Below is the source code that handles the keyboard layouts.
|
|
|
|
VK_* mapping in SDL1 (Windows):
|
|
- vs/sdl/src/video/windib/SDL_dibevents.c: DIB_InitOSKeymapPriv()
|
|
|
|
DOSBox-X keyboard layout enum:
|
|
- include/keymap.h (DKM_*) constants
|
|
- src/gui/sdlmain.cpp KeyboardLayoutDetect(), DKM_to_string(), DKM_to_descriptive_string()
|
|
- src/gui/sdlmain_linux.cpp (if working on Linux)
|
|
|
|
You may want to familiarize yourself with the Windows LCID for the locale
|
|
you'd like to add, as well as the VK_* scan codes generated by the keyboard
|
|
for that locale, so that SDL1 mapping can be updated properly.
|
|
|
|
In Linux, you may want to examine the X11 server keymap table and mod map
|
|
table and look at the X11 codes visible in the mapper to determine how
|
|
to add support.
|
|
|
|
The SDL1 library in Windows fills a fixed array used to map VK_* keyboard
|
|
codes to SDLK_* scan codes. Filling in the correct SDLK_* values given the
|
|
current keyboard locale is an important first step in getting your keyboard
|
|
layout to work.
|
|
|
|
The general rule is to try to pick the SDLK_* code according to the unshifted
|
|
unmodded character it would type. On US keyboards for example, the '1' key
|
|
enters '1' unshifted and '!' shifted.
|
|
|
|
If there is no SDLK_* code for the key, modify the SDL1 header where the
|
|
SDLK_* enumeration exists, locate the WORLD key enumerations and pick one
|
|
not yet already aliased, and define an alias for the new key, then return
|
|
that.
|
|
|
|
It is important for clean DOSBox-X development that DOSBox-X not have to
|
|
examine the keyboard locale within itself the meaning of the WORLD code,
|
|
and that it can go by the new aliases of the WORLD codes to know what
|
|
foreign key to match by.
|
|
|
|
Example: WORLD_11 and WORLD_21 redefined to represent the Yen and Ro keys
|
|
on Japanese keyboards (see SDL_keysym.h in this source tree).
|
|
Those WORLD code are to be used ONLY for those keys, and not
|
|
anything else!
|
|
|
|
NOTE:
|
|
- To assist with scan codes and keyboard input, the mapper interface will
|
|
show as much extra information as practical on keyboard input.
|
|
|
|
Windows builds will show the VK_* code.
|
|
|
|
Linux builds will show the X11 keyboard code.
|
|
|
|
This information should assist with adding additional keyboard layouts.
|