Unverified Commit fe052394 authored by b-luk's avatar b-luk Committed by GitHub

Expose keyCode field in RawKeyEventDataWeb. (#96483)

parent 5ac97140
...@@ -300,6 +300,7 @@ abstract class RawKeyEvent with Diagnosticable { ...@@ -300,6 +300,7 @@ abstract class RawKeyEvent with Diagnosticable {
key: key ?? '', key: key ?? '',
location: message['location'] as int? ?? 0, location: message['location'] as int? ?? 0,
metaState: message['metaState'] as int? ?? 0, metaState: message['metaState'] as int? ?? 0,
keyCode: message['keyCode'] as int? ?? 0,
); );
} }
......
...@@ -32,6 +32,7 @@ class RawKeyEventDataWeb extends RawKeyEventData { ...@@ -32,6 +32,7 @@ class RawKeyEventDataWeb extends RawKeyEventData {
required this.key, required this.key,
this.location = 0, this.location = 0,
this.metaState = modifierNone, this.metaState = modifierNone,
this.keyCode = 0,
}) : assert(code != null), }) : assert(code != null),
assert(metaState != null); assert(metaState != null);
...@@ -80,6 +81,12 @@ class RawKeyEventDataWeb extends RawKeyEventData { ...@@ -80,6 +81,12 @@ class RawKeyEventDataWeb extends RawKeyEventData {
/// * [isMetaPressed], to see if a META key is pressed. /// * [isMetaPressed], to see if a META key is pressed.
final int metaState; final int metaState;
/// The `KeyboardEvent.keyCode` corresponding to this event.
///
/// See <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode>
/// for more information.
final int keyCode;
@override @override
String get keyLabel => key == 'Unidentified' ? '' : _unicodeChar(key) ?? ''; String get keyLabel => key == 'Unidentified' ? '' : _unicodeChar(key) ?? '';
...@@ -156,6 +163,7 @@ class RawKeyEventDataWeb extends RawKeyEventData { ...@@ -156,6 +163,7 @@ class RawKeyEventDataWeb extends RawKeyEventData {
properties.add(DiagnosticsProperty<String>('key', key)); properties.add(DiagnosticsProperty<String>('key', key));
properties.add(DiagnosticsProperty<int>('location', location)); properties.add(DiagnosticsProperty<int>('location', location));
properties.add(DiagnosticsProperty<int>('metaState', metaState)); properties.add(DiagnosticsProperty<int>('metaState', metaState));
properties.add(DiagnosticsProperty<int>('keyCode', keyCode));
} }
@override @override
...@@ -168,7 +176,8 @@ class RawKeyEventDataWeb extends RawKeyEventData { ...@@ -168,7 +176,8 @@ class RawKeyEventDataWeb extends RawKeyEventData {
&& other.code == code && other.code == code
&& other.key == key && other.key == key
&& other.location == location && other.location == location
&& other.metaState == metaState; && other.metaState == metaState
&& other.keyCode == keyCode;
} }
@override @override
...@@ -177,6 +186,7 @@ class RawKeyEventDataWeb extends RawKeyEventData { ...@@ -177,6 +186,7 @@ class RawKeyEventDataWeb extends RawKeyEventData {
key, key,
location, location,
metaState, metaState,
keyCode,
); );
// Modifier key masks. // Modifier key masks.
......
...@@ -2547,11 +2547,13 @@ void main() { ...@@ -2547,11 +2547,13 @@ void main() {
'key': 'a', 'key': 'a',
'location': 0, 'location': 0,
'metaState': 0x0, 'metaState': 0x0,
'keyCode': 0x41,
}); });
final RawKeyEventDataWeb data = keyAEvent.data as RawKeyEventDataWeb; final RawKeyEventDataWeb data = keyAEvent.data as RawKeyEventDataWeb;
expect(data.physicalKey, equals(PhysicalKeyboardKey.keyA)); expect(data.physicalKey, equals(PhysicalKeyboardKey.keyA));
expect(data.logicalKey, equals(LogicalKeyboardKey.keyA)); expect(data.logicalKey, equals(LogicalKeyboardKey.keyA));
expect(data.keyLabel, equals('a')); expect(data.keyLabel, equals('a'));
expect(data.keyCode, equals(0x41));
}); });
test('Upper letter keys are correctly translated', () { test('Upper letter keys are correctly translated', () {
...@@ -2562,11 +2564,13 @@ void main() { ...@@ -2562,11 +2564,13 @@ void main() {
'key': 'A', 'key': 'A',
'location': 0, 'location': 0,
'metaState': 0x1, // Shift 'metaState': 0x1, // Shift
'keyCode': 0x41,
}); });
final RawKeyEventDataWeb data = keyAEvent.data as RawKeyEventDataWeb; final RawKeyEventDataWeb data = keyAEvent.data as RawKeyEventDataWeb;
expect(data.physicalKey, equals(PhysicalKeyboardKey.keyA)); expect(data.physicalKey, equals(PhysicalKeyboardKey.keyA));
expect(data.logicalKey, equals(LogicalKeyboardKey.keyA)); expect(data.logicalKey, equals(LogicalKeyboardKey.keyA));
expect(data.keyLabel, equals('A')); expect(data.keyLabel, equals('A'));
expect(data.keyCode, equals(0x41));
}); });
test('Control keyboard keys are correctly translated', () { test('Control keyboard keys are correctly translated', () {
...@@ -2577,11 +2581,13 @@ void main() { ...@@ -2577,11 +2581,13 @@ void main() {
'key': 'Escape', 'key': 'Escape',
'location': 0, 'location': 0,
'metaState': 0x0, 'metaState': 0x0,
'keyCode': 0x1B,
}); });
final RawKeyEventDataWeb data = escapeKeyEvent.data as RawKeyEventDataWeb; final RawKeyEventDataWeb data = escapeKeyEvent.data as RawKeyEventDataWeb;
expect(data.physicalKey, equals(PhysicalKeyboardKey.escape)); expect(data.physicalKey, equals(PhysicalKeyboardKey.escape));
expect(data.logicalKey, equals(LogicalKeyboardKey.escape)); expect(data.logicalKey, equals(LogicalKeyboardKey.escape));
expect(data.keyLabel, isEmpty); expect(data.keyLabel, isEmpty);
expect(data.keyCode, equals(0x1B));
}); });
test('Modifier keyboard keys are correctly translated', () { test('Modifier keyboard keys are correctly translated', () {
...@@ -2592,11 +2598,13 @@ void main() { ...@@ -2592,11 +2598,13 @@ void main() {
'key': 'Shift', 'key': 'Shift',
'location': 1, 'location': 1,
'metaState': RawKeyEventDataWeb.modifierShift, 'metaState': RawKeyEventDataWeb.modifierShift,
'keyCode': 0x10,
}); });
final RawKeyEventDataWeb data = shiftKeyEvent.data as RawKeyEventDataWeb; final RawKeyEventDataWeb data = shiftKeyEvent.data as RawKeyEventDataWeb;
expect(data.physicalKey, equals(PhysicalKeyboardKey.shiftLeft)); expect(data.physicalKey, equals(PhysicalKeyboardKey.shiftLeft));
expect(data.logicalKey, equals(LogicalKeyboardKey.shiftLeft)); expect(data.logicalKey, equals(LogicalKeyboardKey.shiftLeft));
expect(data.keyLabel, isEmpty); expect(data.keyLabel, isEmpty);
expect(data.keyCode, equals(0x10));
}); });
test('Arrow keys from a keyboard give correct physical key mappings', () { test('Arrow keys from a keyboard give correct physical key mappings', () {
...@@ -2607,11 +2615,13 @@ void main() { ...@@ -2607,11 +2615,13 @@ void main() {
'key': 'ArrowDown', 'key': 'ArrowDown',
'location': 0, 'location': 0,
'metaState': 0x0, 'metaState': 0x0,
'keyCode': 0x28,
}); });
final RawKeyEventDataWeb data = arrowKeyDown.data as RawKeyEventDataWeb; final RawKeyEventDataWeb data = arrowKeyDown.data as RawKeyEventDataWeb;
expect(data.physicalKey, equals(PhysicalKeyboardKey.arrowDown)); expect(data.physicalKey, equals(PhysicalKeyboardKey.arrowDown));
expect(data.logicalKey, equals(LogicalKeyboardKey.arrowDown)); expect(data.logicalKey, equals(LogicalKeyboardKey.arrowDown));
expect(data.keyLabel, isEmpty); expect(data.keyLabel, isEmpty);
expect(data.keyCode, equals(0x28));
}); });
test('Unrecognized keys are mapped to Web plane', () { test('Unrecognized keys are mapped to Web plane', () {
...@@ -2631,6 +2641,7 @@ void main() { ...@@ -2631,6 +2641,7 @@ void main() {
expect(data.logicalKey.keyId, greaterThan(0x01700000000)); expect(data.logicalKey.keyId, greaterThan(0x01700000000));
expect(data.logicalKey.keyId, lessThan(0x01800000000)); expect(data.logicalKey.keyId, lessThan(0x01800000000));
expect(data.keyLabel, isEmpty); expect(data.keyLabel, isEmpty);
expect(data.keyCode, equals(0));
}); });
test('data.toString', () { test('data.toString', () {
...@@ -2641,8 +2652,9 @@ void main() { ...@@ -2641,8 +2652,9 @@ void main() {
'key': 'a', 'key': 'a',
'location': 2, 'location': 2,
'metaState': 0x10, 'metaState': 0x10,
'keyCode': 0x41,
}).data.toString(), equalsIgnoringHashCodes( }).data.toString(), equalsIgnoringHashCodes(
'RawKeyEventDataWeb#00000(code: KeyA, key: a, location: 2, metaState: 16)')); 'RawKeyEventDataWeb#00000(code: KeyA, key: a, location: 2, metaState: 16, keyCode: 65)'));
// Without location // Without location
expect(RawKeyEvent.fromMessage(const <String, Object?>{ expect(RawKeyEvent.fromMessage(const <String, Object?>{
...@@ -2651,8 +2663,9 @@ void main() { ...@@ -2651,8 +2663,9 @@ void main() {
'code': 'KeyA', 'code': 'KeyA',
'key': 'a', 'key': 'a',
'metaState': 0x10, 'metaState': 0x10,
'keyCode': 0x41,
}).data.toString(), equalsIgnoringHashCodes( }).data.toString(), equalsIgnoringHashCodes(
'RawKeyEventDataWeb#00000(code: KeyA, key: a, location: 0, metaState: 16)')); 'RawKeyEventDataWeb#00000(code: KeyA, key: a, location: 0, metaState: 16, keyCode: 65)'));
}); });
test('data.equality', () { test('data.equality', () {
...@@ -2663,11 +2676,13 @@ void main() { ...@@ -2663,11 +2676,13 @@ void main() {
'key': 'a', 'key': 'a',
'location': 2, 'location': 2,
'metaState': 0x10, 'metaState': 0x10,
'keyCode': 0x41,
}).data, const RawKeyEventDataWeb( }).data, const RawKeyEventDataWeb(
key: 'a', key: 'a',
code: 'KeyA', code: 'KeyA',
location: 2, location: 2,
metaState: 0x10, metaState: 0x10,
keyCode: 0x41
)); ));
expect(RawKeyEvent.fromMessage(const <String, Object?>{ expect(RawKeyEvent.fromMessage(const <String, Object?>{
...@@ -2677,6 +2692,7 @@ void main() { ...@@ -2677,6 +2692,7 @@ void main() {
'key': 'a', 'key': 'a',
'location': 2, 'location': 2,
'metaState': 0x10, 'metaState': 0x10,
'keyCode': 0x41,
}).data, isNot(equals(const RawKeyEventDataWeb(code: 'KeyA', key: 'a')))); }).data, isNot(equals(const RawKeyEventDataWeb(code: 'KeyA', key: 'a'))));
}); });
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment