handle method
Handles overlay input and runtime data. Returns whether msg was consumed.
Implementation
bool handle(Msg msg) {
if (msg case KeyMsg() when _options.toggleBinding.matches(msg)) {
_overlay = _overlay.toggle();
_revision++;
return true;
}
if (_overlay.enabled && msg is KeyMsg) {
final key = msg.key;
if (key.type == KeyType.tab) {
final modes = DebugOverlayMode.values;
final delta = key.shift ? -1 : 1;
final index = (_overlay.mode.index + delta) % modes.length;
_overlay = _overlay.copyWith(
mode: modes[index],
panelX: null,
panelY: null,
);
_positionOverlay();
_revision++;
return true;
}
final delta = switch (key.type) {
KeyType.up => -1,
KeyType.down => 1,
KeyType.pageUp => -_options.maxMessages,
KeyType.pageDown => _options.maxMessages,
KeyType.home => -0x7fffffff,
KeyType.end => 0x7fffffff,
_ => 0,
};
if (delta != 0) {
_scroll(delta);
_revision++;
return true;
}
}
final update = _overlay.update(msg);
_overlay = update.model;
if (msg is WindowSizeMsg) _positionOverlay();
_syncSession();
if (_overlay.enabled) _revision++;
return update.consumed;
}