Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
8cf086a
WIP
dkwingsmt Jun 27, 2022
21c50f0
WIP: Better debug log
dkwingsmt Jun 28, 2022
0883f87
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Jun 28, 2022
22d2ccf
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Jul 1, 2022
3c05c3d
WIP
dkwingsmt Jul 1, 2022
becbf08
Merge branch 'web-layout-detection' of https://github.com/dkwingsmt/e…
dkwingsmt Jul 1, 2022
e82bc25
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Jul 7, 2022
416f574
Finish logic (untested)
dkwingsmt Jul 7, 2022
5ed152d
Use third_party for layouts
dkwingsmt Jul 13, 2022
cb3b06d
Update gen
dkwingsmt Jul 13, 2022
e7a6473
Fix filtering bugs
dkwingsmt Jul 13, 2022
b88d06f
Format
dkwingsmt Jul 13, 2022
2175a4a
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Oct 10, 2022
4f1083f
Merge remote-tracking branch 'dkwingsmt/web-layout-detection' into we…
dkwingsmt Oct 10, 2022
0a85ed9
Fix build
dkwingsmt Oct 11, 2022
4b0d8e4
Add scripts
dkwingsmt Oct 11, 2022
d4920f4
Try license
dkwingsmt Oct 11, 2022
249542c
Copyright
dkwingsmt Oct 11, 2022
3c4cac8
Rename license
dkwingsmt Oct 11, 2022
84703c7
Use case insensitive
dkwingsmt Oct 11, 2022
1a7b3d9
more lower case
dkwingsmt Oct 11, 2022
8798bbc
Sort. Migrate to better types.
dkwingsmt Oct 12, 2022
f05dc33
Fix template
dkwingsmt Oct 12, 2022
f5704c5
Marshall and unmarshall
dkwingsmt Oct 12, 2022
c1a964b
Comments
dkwingsmt Oct 13, 2022
35d42b1
Gen types file
dkwingsmt Oct 17, 2022
162e790
gen json
dkwingsmt Oct 17, 2022
0227c4c
engine compilable
dkwingsmt Oct 18, 2022
66eb8a8
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Oct 24, 2022
9d8e1ce
benchmark_detector
dkwingsmt Oct 25, 2022
ca87473
Move github to separate file
dkwingsmt Oct 25, 2022
f1f5b80
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Oct 27, 2022
f329b68
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Oct 31, 2022
b894f71
Generate full mapping
dkwingsmt Oct 31, 2022
49198b0
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Oct 31, 2022
0a40d4d
test cases
dkwingsmt Nov 1, 2022
ae05f6b
Unified dead key
dkwingsmt Nov 1, 2022
a6eb42d
Correct key
dkwingsmt Nov 1, 2022
1a80988
remove duplicate file
dkwingsmt Nov 1, 2022
7f985ee
letter in test cases
dkwingsmt Nov 1, 2022
013ea9a
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Nov 8, 2022
9cec217
Compile
dkwingsmt Nov 9, 2022
0010a73
int keycode, and fix compile
dkwingsmt Nov 9, 2022
ca82c56
Correct gen directory
dkwingsmt Nov 10, 2022
d0a7c45
Heuristic
dkwingsmt Nov 10, 2022
5638316
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Nov 14, 2022
3a68127
Heuristic benchmark
dkwingsmt Nov 14, 2022
4953e1f
Reorganize logical key
dkwingsmt Nov 14, 2022
d2636a3
Move to common
dkwingsmt Nov 15, 2022
4d78abf
Docs
dkwingsmt Nov 15, 2022
d089597
Combine into bin
dkwingsmt Nov 15, 2022
1343f01
Remove layout_types
dkwingsmt Nov 15, 2022
d0cd62c
Rename to locale_keymap
dkwingsmt Nov 15, 2022
d4fbac1
Rename class
dkwingsmt Nov 15, 2022
cf2df77
Rename to heuristicMapper
dkwingsmt Nov 15, 2022
af178f6
Format
dkwingsmt Nov 15, 2022
b2a63bf
Fix license
dkwingsmt Nov 15, 2022
0c51f44
Fix test
dkwingsmt Nov 15, 2022
7675615
Test license
dkwingsmt Nov 15, 2022
f594a0d
Fix tests
dkwingsmt Nov 15, 2022
c4d0aab
Fix import as
dkwingsmt Nov 16, 2022
5dc792a
Fix analyze problem
dkwingsmt Nov 16, 2022
0c5dffe
Fix license
dkwingsmt Nov 16, 2022
6450c92
Update license pattern
dkwingsmt Nov 16, 2022
0ab2d9c
The MIT license
dkwingsmt Nov 16, 2022
ec0a719
License diff
dkwingsmt Nov 16, 2022
f1334ce
Fix license
dkwingsmt Nov 17, 2022
c0ba71e
Update signature
dkwingsmt Nov 17, 2022
2809d26
readme
dkwingsmt Nov 17, 2022
8b36170
fix signature?
dkwingsmt Nov 17, 2022
3754b08
fix signature?
dkwingsmt Nov 17, 2022
f7de833
Fix license count
dkwingsmt Nov 17, 2022
7857246
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Nov 17, 2022
3b938c3
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Nov 18, 2022
1582aa2
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Nov 27, 2022
b1bce40
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Nov 27, 2022
edfdd0f
Fix build
dkwingsmt Nov 28, 2022
13e6fb4
Compression
dkwingsmt Nov 28, 2022
f970ce1
Fix _eventKeyIsKeyname
dkwingsmt Nov 28, 2022
de98688
remove gitignore
dkwingsmt Nov 28, 2022
fdd3225
Fix nullable
dkwingsmt Nov 28, 2022
0e32e71
Fix doc
dkwingsmt Nov 28, 2022
0d570e2
Merge remote-tracking branch 'origin/main' into web-layout-detection
dkwingsmt Nov 28, 2022
a507c33
Add underscore lead. Make everything lower case. Print by line.
dkwingsmt Nov 28, 2022
3cfaf33
Better event code encoding
dkwingsmt Nov 28, 2022
c33c9f2
Signature
dkwingsmt Nov 28, 2022
cedb9bf
Comment. Change dead key mapping to the last.
dkwingsmt Nov 28, 2022
fe356c0
Better digit heuristic. Better _eventKeyIsKeyName
dkwingsmt Nov 29, 2022
884e783
en-in test
dkwingsmt Nov 29, 2022
3c48e3d
Remove unnecessary build change
dkwingsmt Nov 29, 2022
e27af08
Better order
dkwingsmt Nov 29, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Reorganize logical key
  • Loading branch information
dkwingsmt committed Nov 14, 2022
commit 4953e1feb93707b3da0d336485ae8cb7d17604ae
57 changes: 23 additions & 34 deletions lib/web_ui/lib/src/engine/keyboard_binding.dart
Original file line number Diff line number Diff line change
Expand Up @@ -302,31 +302,16 @@ class KeyboardConverter {
(metaDown ? _kDeadKeyMeta : 0);
}

// Whether `event.key` should be considered a key name.
// Whether `event.key` is a key name, such as "Shift", or otherwise a
// character, such as "S" or "ж".
//
// The `event.key` can either be a key name or the printable character. If the
// first character is an alphabet, it must be either 'A' to 'Z' ( and return
// true), or be a key name (and return false). Otherwise, return true.
// A key name always starts with a capitalized character, and has more than
// 1 letter.
static bool _eventKeyIsKeyname(String key) {
assert(key.isNotEmpty);
return isAlphabet(key.codeUnitAt(0)) && key.length > 1;
}

static int _characterToLogicalKey(String key) {
// Assume the length being <= 2 to be sufficient in all cases. If not,
// extend the algorithm.
assert(key.length <= 2);
int result = key.codeUnitAt(0) & 0xffff;
if (key.length == 2) {
result += key.codeUnitAt(1) << 16;
}
// Convert upper letters to lower letters
if (result >= _kCharUpperA && result <= _kCharUpperZ) {
result = result + _kCharLowerA - _kCharUpperA;
}
return result;
}

static int _deadKeyToLogicalKey(int physicalKey, FlutterHtmlKeyboardEvent event) {
// 'Dead' is used to represent dead keys, such as a diacritic to the
// following base letter (such as Option-e results in ´).
Expand All @@ -336,10 +321,6 @@ class KeyboardConverter {
return physicalKey + _getModifierMask(event) + _kWebKeyIdPlane;
}

static int _otherLogicalKey(String key) {
return kWebToLogicalKey[key] ?? (key.hashCode + _kWebKeyIdPlane);
}

// Map from pressed physical key to corresponding pressed logical key.
//
// Multiple physical keys can be mapped to the same logical key, usually due
Expand Down Expand Up @@ -399,24 +380,31 @@ class KeyboardConverter {

final int physicalKey = _getPhysicalCode(event.code!);
final bool logicalKeyIsCharacter = !_eventKeyIsKeyname(eventKey);
final String? character = logicalKeyIsCharacter ? eventKey : null;
final int logicalKey = () {
// Dead keys.
if (eventKey == _kLogicalDead) {
return _deadKeyToLogicalKey(physicalKey, event);
}
// Mapped logical keys, such as ArrowLeft, Escape, AudioVolumeDown.
final int? mappedLogicalKey = kWebToLogicalKey[eventKey];
if (mappedLogicalKey != null) {
return mappedLogicalKey;
}
// Keys with locations, such as modifier keys (Shift) or numpad keys.
if (kWebLogicalLocationMap.containsKey(event.key)) {
final int? result = kWebLogicalLocationMap[event.key!]?[event.location!];
assert(result != null, 'Invalid modifier location: ${event.key}, ${event.location}');
return result!;
}
final int? logicalKeyFromMap = _mapping.getLogicalKey(event.code, event.key, event.keyCode);
if (logicalKeyFromMap != null) {
return logicalKeyFromMap;
}
if (character != null) {
return _characterToLogicalKey(character);
}
if (eventKey == _kLogicalDead) {
return _deadKeyToLogicalKey(physicalKey, event);
// Locale-sensitive keys: letters, digits, and certain symbols.
if (logicalKeyIsCharacter) {
final int? localeLogicalKeys = _mapping.getLogicalKey(event.code, event.key, event.keyCode);
if (localeLogicalKeys != null) {
return localeLogicalKeys;
}
}
return _otherLogicalKey(eventKey);
// Minted logical keys.
return eventKey.hashCode + _kWebKeyIdPlane;
}();

assert(event.type == 'keydown' || event.type == 'keyup');
Expand Down Expand Up @@ -564,6 +552,7 @@ class KeyboardConverter {
}
}

final String? character = logicalKeyIsCharacter ? eventKey : null;
final ui.KeyData keyData = ui.KeyData(
timeStamp: timeStamp,
type: type,
Expand Down
Loading