handle method

bool handle(
  1. Msg msg
)

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;
}