mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Fix minibrowser scroll by keyboard (#33252)
* Fix minibrowser scroll by keyboard Signed-off-by: crbrz <cristianb@gmail.com> * Apply suggested change Co-authored-by: Josh Matthews <josh@joshmatthews.net> Signed-off-by: Cristian Brinza <cristianb@gmail.com> --------- Signed-off-by: crbrz <cristianb@gmail.com> Signed-off-by: Cristian Brinza <cristianb@gmail.com> Co-authored-by: Josh Matthews <josh@joshmatthews.net>
This commit is contained in:
parent
99bd6afa81
commit
9ea02fa4b4
1 changed files with 25 additions and 7 deletions
|
@ -526,7 +526,7 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handle key events after they have been handled by Servo.
|
/// Handle key events after they have been handled by Servo.
|
||||||
fn handle_key_from_servo(&mut self, _: Option<WebViewId>, event: KeyboardEvent) {
|
fn handle_key_from_servo(&mut self, webview_id: Option<WebViewId>, event: KeyboardEvent) {
|
||||||
ShortcutMatcher::from_event(event)
|
ShortcutMatcher::from_event(event)
|
||||||
.shortcut(CMD_OR_CONTROL, '=', || {
|
.shortcut(CMD_OR_CONTROL, '=', || {
|
||||||
self.event_queue.push(EmbedderEvent::Zoom(1.1))
|
self.event_queue.push(EmbedderEvent::Zoom(1.1))
|
||||||
|
@ -545,49 +545,67 @@ where
|
||||||
0.0,
|
0.0,
|
||||||
-self.window.page_height() + 2.0 * LINE_HEIGHT,
|
-self.window.page_height() + 2.0 * LINE_HEIGHT,
|
||||||
));
|
));
|
||||||
self.scroll_window_from_key(scroll_location, TouchEventType::Move);
|
self.scroll_window_from_key(scroll_location, TouchEventType::Move, webview_id);
|
||||||
})
|
})
|
||||||
.shortcut(Modifiers::empty(), Key::PageUp, || {
|
.shortcut(Modifiers::empty(), Key::PageUp, || {
|
||||||
let scroll_location = ScrollLocation::Delta(Vector2D::new(
|
let scroll_location = ScrollLocation::Delta(Vector2D::new(
|
||||||
0.0,
|
0.0,
|
||||||
self.window.page_height() - 2.0 * LINE_HEIGHT,
|
self.window.page_height() - 2.0 * LINE_HEIGHT,
|
||||||
));
|
));
|
||||||
self.scroll_window_from_key(scroll_location, TouchEventType::Move);
|
self.scroll_window_from_key(scroll_location, TouchEventType::Move, webview_id);
|
||||||
})
|
})
|
||||||
.shortcut(Modifiers::empty(), Key::Home, || {
|
.shortcut(Modifiers::empty(), Key::Home, || {
|
||||||
self.scroll_window_from_key(ScrollLocation::Start, TouchEventType::Move);
|
self.scroll_window_from_key(
|
||||||
|
ScrollLocation::Start,
|
||||||
|
TouchEventType::Move,
|
||||||
|
webview_id,
|
||||||
|
);
|
||||||
})
|
})
|
||||||
.shortcut(Modifiers::empty(), Key::End, || {
|
.shortcut(Modifiers::empty(), Key::End, || {
|
||||||
self.scroll_window_from_key(ScrollLocation::End, TouchEventType::Move);
|
self.scroll_window_from_key(ScrollLocation::End, TouchEventType::Move, webview_id);
|
||||||
})
|
})
|
||||||
.shortcut(Modifiers::empty(), Key::ArrowUp, || {
|
.shortcut(Modifiers::empty(), Key::ArrowUp, || {
|
||||||
self.scroll_window_from_key(
|
self.scroll_window_from_key(
|
||||||
ScrollLocation::Delta(Vector2D::new(0.0, 3.0 * LINE_HEIGHT)),
|
ScrollLocation::Delta(Vector2D::new(0.0, 3.0 * LINE_HEIGHT)),
|
||||||
TouchEventType::Move,
|
TouchEventType::Move,
|
||||||
|
webview_id,
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.shortcut(Modifiers::empty(), Key::ArrowDown, || {
|
.shortcut(Modifiers::empty(), Key::ArrowDown, || {
|
||||||
self.scroll_window_from_key(
|
self.scroll_window_from_key(
|
||||||
ScrollLocation::Delta(Vector2D::new(0.0, -3.0 * LINE_HEIGHT)),
|
ScrollLocation::Delta(Vector2D::new(0.0, -3.0 * LINE_HEIGHT)),
|
||||||
TouchEventType::Move,
|
TouchEventType::Move,
|
||||||
|
webview_id,
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.shortcut(Modifiers::empty(), Key::ArrowLeft, || {
|
.shortcut(Modifiers::empty(), Key::ArrowLeft, || {
|
||||||
self.scroll_window_from_key(
|
self.scroll_window_from_key(
|
||||||
ScrollLocation::Delta(Vector2D::new(LINE_HEIGHT, 0.0)),
|
ScrollLocation::Delta(Vector2D::new(LINE_HEIGHT, 0.0)),
|
||||||
TouchEventType::Move,
|
TouchEventType::Move,
|
||||||
|
webview_id,
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.shortcut(Modifiers::empty(), Key::ArrowRight, || {
|
.shortcut(Modifiers::empty(), Key::ArrowRight, || {
|
||||||
self.scroll_window_from_key(
|
self.scroll_window_from_key(
|
||||||
ScrollLocation::Delta(Vector2D::new(-LINE_HEIGHT, 0.0)),
|
ScrollLocation::Delta(Vector2D::new(-LINE_HEIGHT, 0.0)),
|
||||||
TouchEventType::Move,
|
TouchEventType::Move,
|
||||||
|
webview_id,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn scroll_window_from_key(&mut self, scroll_location: ScrollLocation, phase: TouchEventType) {
|
fn scroll_window_from_key(
|
||||||
let event = EmbedderEvent::Scroll(scroll_location, Point2D::zero(), phase);
|
&mut self,
|
||||||
|
scroll_location: ScrollLocation,
|
||||||
|
phase: TouchEventType,
|
||||||
|
webview_id: Option<WebViewId>,
|
||||||
|
) {
|
||||||
|
// In minibrowser mode the webview is offset by the toolbar
|
||||||
|
let origin = webview_id
|
||||||
|
.and_then(|id| self.webviews.get(&id))
|
||||||
|
.map(|webview| webview.rect.min.ceil().to_i32())
|
||||||
|
.unwrap_or(Point2D::zero());
|
||||||
|
let event = EmbedderEvent::Scroll(scroll_location, origin, phase);
|
||||||
self.event_queue.push(event);
|
self.event_queue.push(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue