-
Notifications
You must be signed in to change notification settings - Fork 28.6k
Mac Page Up / Page Down in text fields #105497
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
Conversation
@@ -3292,6 +3293,80 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien | |||
} | |||
} | |||
|
|||
/// Scrolls down by page if the `forward` parameter is true, or up by page | |||
/// otherwise. | |||
void _scrollByPage(ScrollByPageIntent intent) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the right behavior when the text field has maxLines
set to 1?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the case where PageUp PageDown shouldn't do anything, the Intent should propagate up in case the text field is inside of a scroll view I think? Do scroll views handle those 2 keys right now?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the scroll physics disallows implicit scrolling should the scroll view sill scroll?
/// Creates a [ScrollByPageIntent]. | ||
const ScrollByPageIntent({ | ||
required bool forward, | ||
}) : super(forward); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought we had the super parameter lint enabled?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This confused me for a second. It looks like the forward
param is positional in DirectionalTextEditingIntent (code). Is that intentional? I guess I will make this one positional too, but tell me if you think there is a better approach. Making this positional is a departure from the other Intens in DefaultTextEditingIntents that all have a forward
named parameter.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually this is obsolete if we replace this with ScrollIntent as in d4bbc34.
} | ||
final Offset nextExtentOffset = | ||
Offset(extentRect.left, extentRect.top + position.viewportDimension); | ||
final double height = _scrollController.position.maxScrollExtent + renderEditable.size.height; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This assumes the text field scrolls vertically?
What about |
I think @knopp is right about ScrollIncrementType.page, we use the same distance determination for page scrolling on scrollbar and keyboard scroll actions. It may be a good idea to centralize that logic so it is easier to re-use. |
323fb63
to
a47a9f3
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added review comments suggesting an alternative approach to keep vertical runs and not require ScrollAction changes.
Published #107602 with those changes.
|
||
/// Extend the selection down by page if the `forward` parameter is true, or | ||
/// up by page otherwise. | ||
void _extendSelectionByPage(ExtendSelectionByPageIntent intent) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If I get this right, it looks like in this proposal:
- without shift, we don't actually move the caret although it would probably be what most users would expect?
- we don't follow vertical runs here?
Just tried in the Visual Studo Code editor and on PageDown/PageUp it does behave the same way as with ArrowUp/ArrowDown in that the horizontal caret location will be kept in a run from the run start.
So perhaps to enable caret movement and keep the vertical run implementation we could:
- in editable.dart, add VerticalCaretMovementRun.moveByOffset() e.g.:
bool moveByOffset(double offset) {
final Offset initialOffset = _currentOffset;
if (offset >= 0.0) {
while (_currentOffset.dy < initialOffset.dy + offset) {
if (!moveNext()) {
break;
}
}
} else {
while (_currentOffset.dy > initialOffset.dy + offset) {
if (!movePrevious()) {
break;
}
}
}
return initialOffset != _currentOffset;
}
- in editable_text.dart, create a _UpdateTextSelectionToAdjacentPageAction class based on
_UpdateTextSelectionToAdjacentLineAction
with a change in invoke() to use the calculated viewport offset:
final bool shouldMove = currentRun.moveByOffset(
(intent.forward ? 1.0 : -1.0) * state.renderEditable.size.height);
- or perhaps both could be handled by a common class such as
_UpdateTextSelectionToVerticalPosition
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR now handles vertical runs. Let me know if I've missed anything though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually I was mistaken and it doesn't, but maybe it doesn't need to because it only moves the cursor during selection. Let me know what you think.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To explain this here for anyone that reads this thread: We decided to not handle shift + pageup/down in this PR, so it only does scrolling and does not need vertical runs. That is handled in another PR by @tgucio that has since been merged.
_value.selection.extent, | ||
); | ||
final ScrollableState? state = _scrollableKey.currentState as ScrollableState?; | ||
final double increment = ScrollAction.calculateScrollIncrement( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this is only used for vertically scrolled / multi-line fields, I wonder if using state.renderEditable.size.height instead of adding ScrollAction.calculateScrollIncrement() would be sufficient?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Piinks Do you think it's worth it to share calculateScrollIntent here? See also where I'm using ScrollAction.getIncrement above.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we could probably only expose one, probably getIncrement
since it calls calculateScrollIncrement
. Since these were previously private it is unlikely to break anything, so it can be re-worked to better serve as public API.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if using state.renderEditable.size.height instead of adding ScrollAction.calculateScrollIncrement() would be sufficient
It could be for this specific use case, but for consistency across the framework, we should probably establish a pattern. :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now only one method is exposed, getDirectionalIncrement
. It just uses a ScrollIntent like usual, which I create here.
52deec7
to
a51735d
Compare
@tgucio It looks like the scroll-only behavior that I implemented in this PR is specific to MacOS. I tried gedit on Linux and Notepad on Windows and both of them move the cursor, as you described. How about we keep both of our PRs? I'll do the Mac behavior in this one and leave Linux and Windows unimplemented, and you fill that in on your PR. |
@Piinks Let me know what you think of this approach of sharing some code with ScrollAction. I'm also interested in what you and @LongCatIsLooong think about my making ScrollIntent overridable to get this to work. |
@justinmc just tried a bunch of different apps on macOS (long form fields on Chrome, Notes, TextEdit) and I find it almost fascinating that indeed page up/down scrolls without moving the caret :). Let me continue the caret movement implementation in #107602 then and we can differentiate Cupertino vs. Rest-of-the-World in default_text_editing_shortcuts.dart. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think that making some of the ScrollAction public is a good idea. Scrollbar uses this too, but instead it just duplicates the logic. With more use cases now, I think making it accessible to other widgets makes sense. After this lands, I can go clean up the Scrollbar logic so we are consistent.
_value.selection.extent, | ||
); | ||
final ScrollableState? state = _scrollableKey.currentState as ScrollableState?; | ||
final double increment = ScrollAction.calculateScrollIncrement( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we could probably only expose one, probably getIncrement
since it calls calculateScrollIncrement
. Since these were previously private it is unlikely to break anything, so it can be re-worked to better serve as public API.
final double increment = _calculateScrollIncrement(state, type: intent.type); | ||
/// Find out how much of an increment to move by, taking the different | ||
/// directions into account. | ||
static double getIncrement(ScrollableState state, ScrollIntent intent) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe this could be getDirectionalIncrement
in the public space? It already call on calculateScrollIncrement. Could you incorporate the logic for a forward intent or translate forward into intent.direction
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Translated to intent.direction and renamed to getDirectionalIncrement 👍
_value.selection.extent, | ||
); | ||
final ScrollableState? state = _scrollableKey.currentState as ScrollableState?; | ||
final double increment = ScrollAction.calculateScrollIncrement( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if using state.renderEditable.size.height instead of adding ScrollAction.calculateScrollIncrement() would be sufficient
It could be for this specific use case, but for consistency across the framework, we should probably establish a pattern. :)
This pull request executed golden file tests, but it has not been updated in a while (20+ days). Test results from Gold expire after as many days, so this pull request will need to be updated with a fresh commit in order to get results from Gold. For more guidance, visit Writing a golden file test for Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. |
Planning to return to this once I finish ContextMenu. |
Ready for re-review. Sorry this has been paused for so long while I worked on context menus. The plan is for this PR to handle Mac and iOS only, and for #107602 to handle the rest. |
double _getIncrement(ScrollableState state, ScrollIntent intent) { | ||
/// Find out how much of an increment to move by, taking the different | ||
/// directions into account. | ||
static double getDirectionalIncrement(ScrollableState state, ScrollIntent intent) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No problem! This PR should wait for #107602 and then I'll address any conflicts before merging. |
This PR no longer deals with that case.
Google testing has been pending for days, I'm going to go ahead and merge as it should be very low risk for breakages. I'll monitor it after merge. |
* 5280135 ecd3c4857 Roll Fuchsia Mac SDK from sNXsQVxntMX8f42LE... to 9Jb1-3tRPQ2ZhpTQC... (flutter/engine#37363) (flutter/flutter#114772) * a6da104 Adds support for the Material Badge widget, BadgeTheme, BadgeThemeData (flutter/flutter#114560) * 19c5fc5 0cbdf464c Add Matrix::LookAt (flutter/engine#37361) (flutter/flutter#114786) * c551fe3 4e45cfb4a Roll Fuchsia Mac SDK from 9Jb1-3tRPQ2ZhpTQC... to 5XOj9l5e2wkSpMKT1... (flutter/engine#37369) (flutter/flutter#114789) * a54a46d 6b57fddd1 Bump github/codeql-action from 2.1.29 to 2.1.31 (flutter/engine#37374) (flutter/flutter#114798) * 3c9288c Increase minimum supported macOS version from 10.13 to 10.14 (flutter/flutter#114713) * a1289a4 891d4a357 Roll Skia from c3c31be8729b to 513f0fd34590 (2 revisions) (flutter/engine#37377) (flutter/flutter#114802) * 04d6fd2 Roll Plugins from a279b9d to 3ca3410 (4 revisions) (flutter/flutter#114813) * 151c831 92d9ad27f Roll Skia from 513f0fd34590 to da9fad017aee (2 revisions) (flutter/engine#37379) (flutter/flutter#114816) * d6a8e92 Revert "Adds support for the Material Badge widget, BadgeTheme, BadgeThemeData (#114560)" (flutter/flutter#114819) * 7de60bb 334549704 Roll buildroot to d13d64086f5e301bd0415eede895b34af220ef42 (flutter/engine#37380) (flutter/flutter#114821) * 496cf62 Delegate TestWindow.updateSemantics to the wrapped SingletonFlutterWindow (flutter/flutter#114733) * 497a528 Fix TextField/CupertinoTextField hint style overflow not work. (flutter/flutter#114335) * 7e36cf1 Mac Page Up / Page Down in text fields (flutter/flutter#105497) * 77c06c2 0075e10bc Move gclient var property to ci.yaml (flutter/engine#37351) (flutter/flutter#114828) * 378387b when getting xcworkspace, exclude hidden files (flutter/flutter#114099) * e901832 4e03d059d [Android] Speed up the method 'FlutterRenderer.getBitmap' (flutter/engine#37342) (flutter/flutter#114833) * 3cde69e Revert "Revert "Scribble mixin (#104128)" (#114647)" (flutter/flutter#114698) * e1adc96 feat: provide a way to set the initial child's alignment (flutter/flutter#114745) * fe5eb2d ee48c0392 Roll Fuchsia Mac SDK from 5XOj9l5e2wkSpMKT1... to sa5bVGimNo3JwLV27... (flutter/engine#37386) (flutter/flutter#114836) * 5628ebf [RawKeyboard] Allow inconsistent modifiers for Web (flutter/flutter#114499) * f1cdfa2 Use AppBar.systemOverlayStyle to style system navigation bar (flutter/flutter#104827) * e4e902d [flutter_tools] add compilation failure tests for new cases added in impellerc (flutter/flutter#114757) * 7640f31 a81a715ce Revert "Remove deprecated calls to updateSemantics in `PlatformDispatcher` (#36673)" (flutter/engine#37388) (flutter/flutter#114842) * 585d445 Roll Flutter Engine from a81a715ce6b2 to df602070ac4b (3 revisions) (flutter/flutter#114847) * 1ca2e0b Fix `CastError` in `StadiumBorder.lerpTo` and `StadiumBorder.lerpFrom` when using `BorderRadiusDirectional` (flutter/flutter#114826) * 2e85e74 004a30516 [fuchsia] embedding-flutter test (flutter/engine#37052) (flutter/flutter#114854) * 139b8f4 Roll Flutter Engine from 004a305166d5 to e7d7edab98ad (2 revisions) (flutter/flutter#114855) * 53e6876 Allow Flutter golden file tests to be flaky (flutter/flutter#114450) * a1432a9 Refactor fix_data.yaml (flutter/flutter#114192)
* 04d6fd2 Roll Plugins from a279b9d to 3ca3410 (4 revisions) (flutter/flutter#114813) * 151c831 92d9ad27f Roll Skia from 513f0fd34590 to da9fad017aee (2 revisions) (flutter/engine#37379) (flutter/flutter#114816) * d6a8e92 Revert "Adds support for the Material Badge widget, BadgeTheme, BadgeThemeData (#114560)" (flutter/flutter#114819) * 7de60bb 334549704 Roll buildroot to d13d64086f5e301bd0415eede895b34af220ef42 (flutter/engine#37380) (flutter/flutter#114821) * 496cf62 Delegate TestWindow.updateSemantics to the wrapped SingletonFlutterWindow (flutter/flutter#114733) * 497a528 Fix TextField/CupertinoTextField hint style overflow not work. (flutter/flutter#114335) * 7e36cf1 Mac Page Up / Page Down in text fields (flutter/flutter#105497) * 77c06c2 0075e10bc Move gclient var property to ci.yaml (flutter/engine#37351) (flutter/flutter#114828) * 378387b when getting xcworkspace, exclude hidden files (flutter/flutter#114099) * e901832 4e03d059d [Android] Speed up the method 'FlutterRenderer.getBitmap' (flutter/engine#37342) (flutter/flutter#114833) * 3cde69e Revert "Revert "Scribble mixin (#104128)" (#114647)" (flutter/flutter#114698) * e1adc96 feat: provide a way to set the initial child's alignment (flutter/flutter#114745) * fe5eb2d ee48c0392 Roll Fuchsia Mac SDK from 5XOj9l5e2wkSpMKT1... to sa5bVGimNo3JwLV27... (flutter/engine#37386) (flutter/flutter#114836) * 5628ebf [RawKeyboard] Allow inconsistent modifiers for Web (flutter/flutter#114499) * f1cdfa2 Use AppBar.systemOverlayStyle to style system navigation bar (flutter/flutter#104827) * e4e902d [flutter_tools] add compilation failure tests for new cases added in impellerc (flutter/flutter#114757) * 7640f31 a81a715ce Revert "Remove deprecated calls to updateSemantics in `PlatformDispatcher` (#36673)" (flutter/engine#37388) (flutter/flutter#114842) * 585d445 Roll Flutter Engine from a81a715ce6b2 to df602070ac4b (3 revisions) (flutter/flutter#114847) * 1ca2e0b Fix `CastError` in `StadiumBorder.lerpTo` and `StadiumBorder.lerpFrom` when using `BorderRadiusDirectional` (flutter/flutter#114826) * 2e85e74 004a30516 [fuchsia] embedding-flutter test (flutter/engine#37052) (flutter/flutter#114854) * 139b8f4 Roll Flutter Engine from 004a305166d5 to e7d7edab98ad (2 revisions) (flutter/flutter#114855) * 53e6876 Allow Flutter golden file tests to be flaky (flutter/flutter#114450) * a1432a9 Refactor fix_data.yaml (flutter/flutter#114192)
* 04d6fd2 Roll Plugins from a279b9d to 3ca3410 (4 revisions) (flutter/flutter#114813) * 151c831 92d9ad27f Roll Skia from 513f0fd34590 to da9fad017aee (2 revisions) (flutter/engine#37379) (flutter/flutter#114816) * d6a8e92 Revert "Adds support for the Material Badge widget, BadgeTheme, BadgeThemeData (#114560)" (flutter/flutter#114819) * 7de60bb 334549704 Roll buildroot to d13d64086f5e301bd0415eede895b34af220ef42 (flutter/engine#37380) (flutter/flutter#114821) * 496cf62 Delegate TestWindow.updateSemantics to the wrapped SingletonFlutterWindow (flutter/flutter#114733) * 497a528 Fix TextField/CupertinoTextField hint style overflow not work. (flutter/flutter#114335) * 7e36cf1 Mac Page Up / Page Down in text fields (flutter/flutter#105497) * 77c06c2 0075e10bc Move gclient var property to ci.yaml (flutter/engine#37351) (flutter/flutter#114828) * 378387b when getting xcworkspace, exclude hidden files (flutter/flutter#114099) * e901832 4e03d059d [Android] Speed up the method 'FlutterRenderer.getBitmap' (flutter/engine#37342) (flutter/flutter#114833) * 3cde69e Revert "Revert "Scribble mixin (#104128)" (#114647)" (flutter/flutter#114698) * e1adc96 feat: provide a way to set the initial child's alignment (flutter/flutter#114745) * fe5eb2d ee48c0392 Roll Fuchsia Mac SDK from 5XOj9l5e2wkSpMKT1... to sa5bVGimNo3JwLV27... (flutter/engine#37386) (flutter/flutter#114836) * 5628ebf [RawKeyboard] Allow inconsistent modifiers for Web (flutter/flutter#114499) * f1cdfa2 Use AppBar.systemOverlayStyle to style system navigation bar (flutter/flutter#104827) * e4e902d [flutter_tools] add compilation failure tests for new cases added in impellerc (flutter/flutter#114757) * 7640f31 a81a715ce Revert "Remove deprecated calls to updateSemantics in `PlatformDispatcher` (#36673)" (flutter/engine#37388) (flutter/flutter#114842) * 585d445 Roll Flutter Engine from a81a715ce6b2 to df602070ac4b (3 revisions) (flutter/flutter#114847) * 1ca2e0b Fix `CastError` in `StadiumBorder.lerpTo` and `StadiumBorder.lerpFrom` when using `BorderRadiusDirectional` (flutter/flutter#114826) * 2e85e74 004a30516 [fuchsia] embedding-flutter test (flutter/engine#37052) (flutter/flutter#114854) * 139b8f4 Roll Flutter Engine from 004a305166d5 to e7d7edab98ad (2 revisions) (flutter/flutter#114855) * 53e6876 Allow Flutter golden file tests to be flaky (flutter/flutter#114450) * a1432a9 Refactor fix_data.yaml (flutter/flutter#114192)
* 04d6fd2 Roll Plugins from a279b9d to 3ca3410 (4 revisions) (flutter/flutter#114813) * 151c831 92d9ad27f Roll Skia from 513f0fd34590 to da9fad017aee (2 revisions) (flutter/engine#37379) (flutter/flutter#114816) * d6a8e92 Revert "Adds support for the Material Badge widget, BadgeTheme, BadgeThemeData (#114560)" (flutter/flutter#114819) * 7de60bb 334549704 Roll buildroot to d13d64086f5e301bd0415eede895b34af220ef42 (flutter/engine#37380) (flutter/flutter#114821) * 496cf62 Delegate TestWindow.updateSemantics to the wrapped SingletonFlutterWindow (flutter/flutter#114733) * 497a528 Fix TextField/CupertinoTextField hint style overflow not work. (flutter/flutter#114335) * 7e36cf1 Mac Page Up / Page Down in text fields (flutter/flutter#105497) * 77c06c2 0075e10bc Move gclient var property to ci.yaml (flutter/engine#37351) (flutter/flutter#114828) * 378387b when getting xcworkspace, exclude hidden files (flutter/flutter#114099) * e901832 4e03d059d [Android] Speed up the method 'FlutterRenderer.getBitmap' (flutter/engine#37342) (flutter/flutter#114833) * 3cde69e Revert "Revert "Scribble mixin (#104128)" (#114647)" (flutter/flutter#114698) * e1adc96 feat: provide a way to set the initial child's alignment (flutter/flutter#114745) * fe5eb2d ee48c0392 Roll Fuchsia Mac SDK from 5XOj9l5e2wkSpMKT1... to sa5bVGimNo3JwLV27... (flutter/engine#37386) (flutter/flutter#114836) * 5628ebf [RawKeyboard] Allow inconsistent modifiers for Web (flutter/flutter#114499) * f1cdfa2 Use AppBar.systemOverlayStyle to style system navigation bar (flutter/flutter#104827) * e4e902d [flutter_tools] add compilation failure tests for new cases added in impellerc (flutter/flutter#114757) * 7640f31 a81a715ce Revert "Remove deprecated calls to updateSemantics in `PlatformDispatcher` (#36673)" (flutter/engine#37388) (flutter/flutter#114842) * 585d445 Roll Flutter Engine from a81a715ce6b2 to df602070ac4b (3 revisions) (flutter/flutter#114847) * 1ca2e0b Fix `CastError` in `StadiumBorder.lerpTo` and `StadiumBorder.lerpFrom` when using `BorderRadiusDirectional` (flutter/flutter#114826) * 2e85e74 004a30516 [fuchsia] embedding-flutter test (flutter/engine#37052) (flutter/flutter#114854) * 139b8f4 Roll Flutter Engine from 004a305166d5 to e7d7edab98ad (2 revisions) (flutter/flutter#114855) * 53e6876 Allow Flutter golden file tests to be flaky (flutter/flutter#114450) * a1432a9 Refactor fix_data.yaml (flutter/flutter#114192)
Adds support for Mac/iOS's behavior of scrolling (but not moving the cursor) when using page up/down in a text field.
Adds support for Mac/iOS's behavior of scrolling (but not moving the cursor) when using page up/down in a text field.
* 04d6fd2 Roll Plugins from a279b9d to 3ca3410 (4 revisions) (flutter/flutter#114813) * 151c831 92d9ad27f Roll Skia from 513f0fd34590 to da9fad017aee (2 revisions) (flutter/engine#37379) (flutter/flutter#114816) * d6a8e92 Revert "Adds support for the Material Badge widget, BadgeTheme, BadgeThemeData (#114560)" (flutter/flutter#114819) * 7de60bb 334549704 Roll buildroot to d13d64086f5e301bd0415eede895b34af220ef42 (flutter/engine#37380) (flutter/flutter#114821) * 496cf62 Delegate TestWindow.updateSemantics to the wrapped SingletonFlutterWindow (flutter/flutter#114733) * 497a528 Fix TextField/CupertinoTextField hint style overflow not work. (flutter/flutter#114335) * 7e36cf1 Mac Page Up / Page Down in text fields (flutter/flutter#105497) * 77c06c2 0075e10bc Move gclient var property to ci.yaml (flutter/engine#37351) (flutter/flutter#114828) * 378387b when getting xcworkspace, exclude hidden files (flutter/flutter#114099) * e901832 4e03d059d [Android] Speed up the method 'FlutterRenderer.getBitmap' (flutter/engine#37342) (flutter/flutter#114833) * 3cde69e Revert "Revert "Scribble mixin (#104128)" (#114647)" (flutter/flutter#114698) * e1adc96 feat: provide a way to set the initial child's alignment (flutter/flutter#114745) * fe5eb2d ee48c0392 Roll Fuchsia Mac SDK from 5XOj9l5e2wkSpMKT1... to sa5bVGimNo3JwLV27... (flutter/engine#37386) (flutter/flutter#114836) * 5628ebf [RawKeyboard] Allow inconsistent modifiers for Web (flutter/flutter#114499) * f1cdfa2 Use AppBar.systemOverlayStyle to style system navigation bar (flutter/flutter#104827) * e4e902d [flutter_tools] add compilation failure tests for new cases added in impellerc (flutter/flutter#114757) * 7640f31 a81a715ce Revert "Remove deprecated calls to updateSemantics in `PlatformDispatcher` (#36673)" (flutter/engine#37388) (flutter/flutter#114842) * 585d445 Roll Flutter Engine from a81a715ce6b2 to df602070ac4b (3 revisions) (flutter/flutter#114847) * 1ca2e0b Fix `CastError` in `StadiumBorder.lerpTo` and `StadiumBorder.lerpFrom` when using `BorderRadiusDirectional` (flutter/flutter#114826) * 2e85e74 004a30516 [fuchsia] embedding-flutter test (flutter/engine#37052) (flutter/flutter#114854) * 139b8f4 Roll Flutter Engine from 004a305166d5 to e7d7edab98ad (2 revisions) (flutter/flutter#114855) * 53e6876 Allow Flutter golden file tests to be flaky (flutter/flutter#114450) * a1432a9 Refactor fix_data.yaml (flutter/flutter#114192)
This PR implements the Mac page up/down keyboard shortcuts, which scroll by page. The selection changing behavior of pageup/down and shift + pageup/down were handled by @tgucio in #107602.
Closes #105448
Closes #77611