ControlsRework.wiki
author Wuzzy
Mon, 25 May 2020 19:03:50 +0200
changeset 2139 b1aadfd754ab
parent 1860 6339b2b138de
permissions -rw-r--r--
Hats: Whitespace
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1852
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
     1
#summary Solutions for fixing bug 240 (frontend displays wrong key name)
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
     2
1859
695f35df799e ControlsRework: Obsolete wiki page
Wuzzy
parents: 1856
diff changeset
     3
*This wiki page is OBSOLETE now. Bug 240 is now fixed.*
695f35df799e ControlsRework: Obsolete wiki page
Wuzzy
parents: 1856
diff changeset
     4
695f35df799e ControlsRework: Obsolete wiki page
Wuzzy
parents: 1856
diff changeset
     5
Everything below the line is only of historic interest.
695f35df799e ControlsRework: Obsolete wiki page
Wuzzy
parents: 1856
diff changeset
     6
1860
6339b2b138de ControlsRework: Add line?
Wuzzy
parents: 1859
diff changeset
     7
----
1859
695f35df799e ControlsRework: Obsolete wiki page
Wuzzy
parents: 1856
diff changeset
     8
1852
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
     9
This wiki page is for documenting and analyzing possible solutions for [https://issues.hedgewars.org/show_bug.cgi?id=240 bug 240] that have been discussed before.
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
    10
1854
0da81c188327 ControlsRework: More formatting
Wuzzy
parents: 1853
diff changeset
    11
== Criteria ==
1852
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
    12
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
    13
First, for a working solution, it should match these criteria:
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
    14
1853
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    15
 # They key you selected in frontend is the key that you actually need to push (so if it says ā€œZā€, you must press the ā€œZā€ key in game; it must respect keyboard layout). This is the bug that was reported
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    16
 # The key that is displayed in frontend must match the key that is saved in config file
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    17
 # (optional) Engine is able to convert the code to human-readable text. It's not a bug if it's not possible, however
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    18
 # Default key config works with MOST normal keyboards (100% perfect coverage not required as its unrealistic; owners of exotic keyboards are expected to reconfig)
1852
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
    19
1854
0da81c188327 ControlsRework: More formatting
Wuzzy
parents: 1853
diff changeset
    20
== Possible solutions ==
1852
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
    21
1853
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    22
=== A) Use keycode in frontend and config file, use scancode in engine (current broken approach) ===
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    23
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    24
Criteria:
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    25
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    26
 # No.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    27
 # Yes.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    28
 # No.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    29
 # Yes.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    30
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    31
Summary: The problem with our current approach is point 1. The frontend displays the wrong key. The fact that the game inconsistently uses keycodes AND scancodes is also a little insane. Any solution definitely must fix point 1, otherwise it gains us nothing
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    32
1855
699f4981643d ControlsRework: fix typo
Wuzzy
parents: 1854
diff changeset
    33
=== B) Use scancodes in frontend, engine und config. Create a small helper program that queries scancode in frontend to replace the drop-down menu ===
1856
2d2693ace6fe ControlsRework: Possible todo list
Wuzzy
parents: 1855
diff changeset
    34
2d2693ace6fe ControlsRework: Possible todo list
Wuzzy
parents: 1855
diff changeset
    35
How it's supposed to work:
2d2693ace6fe ControlsRework: Possible todo list
Wuzzy
parents: 1855
diff changeset
    36
 # Write SDL window for getting the key. It must give scancode as return/exit code
2d2693ace6fe ControlsRework: Possible todo list
Wuzzy
parents: 1855
diff changeset
    37
 # Frontend: Replace drop-down with widget that opens the SDL window and detect the exit code
2d2693ace6fe ControlsRework: Possible todo list
Wuzzy
parents: 1855
diff changeset
    38
 # Save scancode in config file
2d2693ace6fe ControlsRework: Possible todo list
Wuzzy
parents: 1855
diff changeset
    39
 # Frontend: Figure out how to turn the scancode into human-readable text
2d2693ace6fe ControlsRework: Possible todo list
Wuzzy
parents: 1855
diff changeset
    40
2d2693ace6fe ControlsRework: Possible todo list
Wuzzy
parents: 1855
diff changeset
    41
Criteria:
2d2693ace6fe ControlsRework: Possible todo list
Wuzzy
parents: 1855
diff changeset
    42
1853
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    43
 # Yes.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    44
 # No obvious solution in sight. Maybe there is one?
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    45
   * Possible, hacky solution: Convert scancode to keycode using a hardcoded lookup table or something like that
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    46
   * https://github.com/hluk/qxtglobalshortcut/blob/16446200b699e0610b8a5fb20b74938225d81d87/src/xcbkeyboard.h#L249
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    47
 # Yes. Convert scancode to keycode with SDL_GetKeyFromScancode
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    48
 # No idea.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    49
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    50
 * Note: Adding a new program only to grab the key seems a little insane, but it seems to work
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    51
 * Note: We have a mock-up of the keygrab program, but no code for the rest exists yet
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    52
 
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    53
Summary: This solution depends on whether 2) is solvable. We need to be able to render the correct key name in frontend, otherwise, this solution would be a regression. Another open question is how to store the keys in the config. Just the raw scancodes? Anyway, if we can figure all that out, then this approach is a valid solution.
1852
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
    54
1853
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    55
=== C) Use keycodes in frontend, config und engine ===
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    56
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    57
Criteria:
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    58
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    59
 # Yes.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    60
 # Yes.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    61
 # Yes.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    62
 # Meh. What will semi-break is the default config for e.g. French keyboards because of the number keys (for timer) which are secondary inputs, so owners of French keyboards need to reconfig.
1852
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
    63
1853
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    64
Possible solutions for 4)
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    65
 * Allow numpad numbers as alternative input for timer keys
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    66
 * Implement user-selectable alternative keys for everything and add numpad keys as alternative input for timer by default
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    67
 * When detecting French keyboard on first launch, use different default keys (does not sound very stable ... Also, how to detect keyboard layout in Qt?)
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    68
 * Non-solution: Ignore it. Expect French users to re-config. This would be a regression.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    69
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    70
Real, tested code does exist for this appraoch in the hedgewars-draft repo, but nemo has hidden the commits. Code is now very old and probably would needs a rewrite anyway.
1852
32c29d1293ea Add ControlsRework.wiki
Wuzzy <almikes@aol.com>
parents:
diff changeset
    71
1853
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    72
Summary: This solution works (I have tested it). The only problem is with default config which would be less universal than our current approach, but this might be solvable.
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    73
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    74
=== D) Marry frontend with engine and only use SDL calls for all things keyboard ===
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    75
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    76
Criteria:
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    77
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    78
 * Would likely solve all problems
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    79
f8b313ab3417 ControlsRework: Reformat page
Wuzzy
parents: 1852
diff changeset
    80
But this is a very very huge task, should not be done before 1.0 or otherwise we'd never get the 1.0 out