pass both logical key & physical key to input handler on keyboard keypress

This commit is contained in:
Nick Fisher
2025-05-21 12:01:47 +08:00
parent e432b0be1d
commit 9a6bacc73f
5 changed files with 70 additions and 39 deletions

View File

@@ -88,17 +88,19 @@ class WebInputHandler {
}
void _onKeyDown(web.KeyboardEvent event) {
PhysicalKey? key = _getPhysicalKeyFromEvent(event);
if (key != null) {
inputHandler.handle(KeyEvent(KeyEventType.down, key));
PhysicalKey? physicalKey = _getPhysicalKeyFromEvent(event);
LogicalKey? logicalKey = _getLogicalKeyFromEvent(event);
if (physicalKey != null && logicalKey != null) {
inputHandler.handle(KeyEvent(KeyEventType.down, logicalKey, physicalKey));
}
event.preventDefault();
}
void _onKeyUp(web.KeyboardEvent event) {
PhysicalKey? key = _getPhysicalKeyFromEvent(event);
if (key != null) {
inputHandler.handle(KeyEvent(KeyEventType.up, key));
LogicalKey? logicalKey = _getLogicalKeyFromEvent(event);
PhysicalKey? physicalKey = _getPhysicalKeyFromEvent(event);
if (physicalKey != null && logicalKey != null) {
inputHandler.handle(KeyEvent(KeyEventType.up, logicalKey, physicalKey));
}
event.preventDefault();
}
@@ -210,16 +212,31 @@ class WebInputHandler {
return null;
}
PhysicalKey? _getPhysicalKeyFromEvent(web.KeyboardEvent event) {
PhysicalKey? _getPhysicalKeyFromEvent(web.KeyboardEvent event) {
switch (event.code) {
case 'KeyW':
return PhysicalKey.W;
return PhysicalKey.w;
case 'KeyA':
return PhysicalKey.A;
return PhysicalKey.a;
case 'KeyS':
return PhysicalKey.S;
return PhysicalKey.s;
case 'KeyD':
return PhysicalKey.D;
return PhysicalKey.d;
default:
return null;
}
}
LogicalKey? _getLogicalKeyFromEvent(web.KeyboardEvent event) {
switch (event.key) {
case 'KeyW':
return LogicalKey.w;
case 'KeyA':
return LogicalKey.a;
case 'KeyS':
return LogicalKey.s;
case 'KeyD':
return LogicalKey.d;
default:
return null;
}