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();
if (_overlay.enabled && !_manuallyPositioned) _positionOverlay();
_revision++;
return true;
}
if (_overlay.enabled &&
!_overlay.dragging &&
!_overlay.pointerCaptured &&
_overlay.mode != DebugOverlayMode.metrics &&
msg is MouseMsg &&
msg.action == MouseAction.press) {
final delta = switch (msg.button) {
MouseButton.wheelUp => -3,
MouseButton.wheelDown => 3,
_ => 0,
};
if (delta != 0 && _overlay.containsPoint(msg.x, msg.y)) {
_scroll(delta);
_revision++;
return true;
}
}
if (_overlay.enabled && _options.keyboardNavigation && 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.selectMode(modes[index]);
if (!_manuallyPositioned) _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 previousMode = _overlay.mode;
final update = _overlay.update(msg);
_overlay = update.model;
if (_overlay.dragging) _manuallyPositioned = true;
_syncSession();
if (!_manuallyPositioned &&
(msg is WindowSizeMsg || _overlay.mode != previousMode)) {
_positionOverlay();
}
if (_overlay.enabled) _revision++;
return update.consumed;
}