Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose shortcut actions #134

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Conversation

jpnurmi
Copy link
Contributor

@jpnurmi jpnurmi commented Sep 27, 2022

Allow passing in custom actions for e.g. scrolling shortcuts.

Allow passing in custom actions for e.g. scrolling shortcuts.
@xtyxtyx xtyxtyx self-assigned this Sep 27, 2022
@jpnurmi
Copy link
Contributor Author

jpnurmi commented Sep 27, 2022

For example:

TerminalView(
  ...
  shortcuts: const {
    ...
    SingleActivator(LogicalKeyboardKey.arrowUp, control: true, shift: true): ScrollUpIntent(),
    SingleActivator(LogicalKeyboardKey.arrowDown, control: true, shift: true): ScrollDownIntent(),
    SingleActivator(LogicalKeyboardKey.pageUp, shift: true): ScrollPageUpIntent(),
    SingleActivator(LogicalKeyboardKey.pageDown, shift: true): ScrollPageDownIntent(),
    SingleActivator(LogicalKeyboardKey.home, shift: true): ScrollToTopIntent(),
    SingleActivator(LogicalKeyboardKey.end, shift: true): ScrollToBottomIntent(),
  },
  actions: {
    ScrollUpIntent: ScrollUpAction(_scrollController),
    ScrollDownIntent: ScrollDownAction(_scrollController),
    ScrollPageUpIntent: ScrollPageUpAction(_scrollController),
    ScrollPageDownIntent: ScrollPageDownAction(_scrollController),
    ScrollToTopIntent: ScrollToTopAction(_scrollController),
    ScrollToBottomIntent: ScrollToBottomAction(_scrollController),
  },
)
class ScrollUpIntent extends Intent {
  const ScrollUpIntent();
}

class ScrollDownIntent extends Intent {
  const ScrollDownIntent();
}

class ScrollPageUpIntent extends Intent {
  const ScrollPageUpIntent();
}

class ScrollPageDownIntent extends Intent {
  const ScrollPageDownIntent();
}

class ScrollToTopIntent extends Intent {
  const ScrollToTopIntent();
}

class ScrollToBottomIntent extends Intent {
  const ScrollToBottomIntent();
}
class ScrollUpAction extends Action<ScrollUpIntent> {
  ScrollUpAction(this.controller);

  final ScrollController controller;

  @override
  Object? invoke(covariant ScrollUpIntent intent) {
    controller.jumpTo(controller.position.pixels - 10); // TODO: line height?
    return null;
  }
}

class ScrollDownAction extends Action<ScrollDownIntent> {
  ScrollDownAction(this.controller);

  final ScrollController controller;

  @override
  Object? invoke(covariant ScrollDownIntent intent) {
    controller.jumpTo(controller.position.pixels + 10); // TODO: line height?
    return null;
  }
}

class ScrollPageUpAction extends Action<ScrollPageUpIntent> {
  ScrollPageUpAction(this.controller);

  final ScrollController controller;

  @override
  Object? invoke(covariant ScrollPageUpIntent intent) {
    controller.jumpTo(
        controller.position.pixels - controller.position.viewportDimension);
    return null;
  }
}

class ScrollPageDownAction extends Action<ScrollPageDownIntent> {
  ScrollPageDownAction(this.controller);

  final ScrollController controller;

  @override
  Object? invoke(covariant ScrollPageDownIntent intent) {
    controller.jumpTo(
        controller.position.pixels + controller.position.viewportDimension);
    return null;
  }
}

class ScrollToTopAction extends Action<ScrollToTopIntent> {
  ScrollToTopAction(this.controller);

  final ScrollController controller;

  @override
  Object? invoke(covariant ScrollToTopIntent intent) {
    controller.jumpTo(controller.position.minScrollExtent);
    return null;
  }
}

class ScrollToBottomAction extends Action<ScrollToBottomIntent> {
  ScrollToBottomAction(this.controller);

  final ScrollController controller;

  @override
  Object? invoke(covariant ScrollToBottomIntent intent) {
    controller.jumpTo(controller.position.maxScrollExtent);
    return null;
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants