mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Only request synchronous repaint when a resize will actually occur.
This commit is contained in:
parent
10231573be
commit
49ddc5ea3d
3 changed files with 12 additions and 14 deletions
|
@ -835,7 +835,7 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn on_resize_window_event(&mut self) {
|
||||
pub fn on_resize_window_event(&mut self) -> bool {
|
||||
debug!("compositor resize requested");
|
||||
|
||||
let old_coords = self.embedder_coordinates;
|
||||
|
@ -847,11 +847,12 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
|
|||
}
|
||||
|
||||
if self.embedder_coordinates.viewport == old_coords.viewport {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
self.send_window_size(WindowSizeType::Resize);
|
||||
self.composite_if_necessary(CompositingReason::Resize);
|
||||
return true;
|
||||
}
|
||||
|
||||
pub fn on_mouse_window_event_class(&mut self, mouse_window_event: MouseWindowEvent) {
|
||||
|
|
|
@ -549,7 +549,7 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
fn handle_window_event(&mut self, event: WindowEvent) {
|
||||
fn handle_window_event(&mut self, event: WindowEvent) -> bool {
|
||||
match event {
|
||||
WindowEvent::Idle => {},
|
||||
|
||||
|
@ -558,7 +558,7 @@ where
|
|||
},
|
||||
|
||||
WindowEvent::Resize => {
|
||||
self.compositor.on_resize_window_event();
|
||||
return self.compositor.on_resize_window_event();
|
||||
},
|
||||
|
||||
WindowEvent::AllowNavigationResponse(pipeline_id, allowed) => {
|
||||
|
@ -745,6 +745,7 @@ where
|
|||
}
|
||||
},
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
fn receive_messages(&mut self) {
|
||||
|
@ -776,18 +777,20 @@ where
|
|||
::std::mem::replace(&mut self.embedder_events, Vec::new())
|
||||
}
|
||||
|
||||
pub fn handle_events(&mut self, events: Vec<WindowEvent>) {
|
||||
pub fn handle_events(&mut self, events: Vec<WindowEvent>) -> bool {
|
||||
if self.compositor.receive_messages() {
|
||||
self.receive_messages();
|
||||
}
|
||||
let mut need_resize = false;
|
||||
for event in events {
|
||||
self.handle_window_event(event);
|
||||
need_resize |= self.handle_window_event(event);
|
||||
}
|
||||
if self.compositor.shutdown_state != ShutdownState::FinishedShuttingDown {
|
||||
self.compositor.perform_updates();
|
||||
} else {
|
||||
self.embedder_events.push((None, EmbedderMsg::Shutdown));
|
||||
}
|
||||
need_resize
|
||||
}
|
||||
|
||||
pub fn repaint_synchronously(&mut self) {
|
||||
|
|
|
@ -204,19 +204,13 @@ impl App {
|
|||
}
|
||||
});
|
||||
|
||||
// FIXME: this could be handled by Servo. We don't need
|
||||
// a repaint_synchronously function exposed.
|
||||
let need_resize = app_events.iter().any(|e| match *e {
|
||||
WindowEvent::Resize => true,
|
||||
_ => false,
|
||||
});
|
||||
|
||||
browser.handle_window_events(app_events);
|
||||
|
||||
let mut servo_events = self.servo.as_mut().unwrap().get_events();
|
||||
let mut need_resize = false;
|
||||
loop {
|
||||
browser.handle_servo_events(servo_events);
|
||||
self.servo.as_mut().unwrap().handle_events(browser.get_events());
|
||||
need_resize |= self.servo.as_mut().unwrap().handle_events(browser.get_events());
|
||||
if browser.shutdown_requested() {
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue