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