mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +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");
|
debug!("compositor resize requested");
|
||||||
|
|
||||||
let old_coords = self.embedder_coordinates;
|
let old_coords = self.embedder_coordinates;
|
||||||
|
@ -847,11 +847,12 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.embedder_coordinates.viewport == old_coords.viewport {
|
if self.embedder_coordinates.viewport == old_coords.viewport {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.send_window_size(WindowSizeType::Resize);
|
self.send_window_size(WindowSizeType::Resize);
|
||||||
self.composite_if_necessary(CompositingReason::Resize);
|
self.composite_if_necessary(CompositingReason::Resize);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn on_mouse_window_event_class(&mut self, mouse_window_event: MouseWindowEvent) {
|
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 {
|
match event {
|
||||||
WindowEvent::Idle => {},
|
WindowEvent::Idle => {},
|
||||||
|
|
||||||
|
@ -558,7 +558,7 @@ where
|
||||||
},
|
},
|
||||||
|
|
||||||
WindowEvent::Resize => {
|
WindowEvent::Resize => {
|
||||||
self.compositor.on_resize_window_event();
|
return self.compositor.on_resize_window_event();
|
||||||
},
|
},
|
||||||
|
|
||||||
WindowEvent::AllowNavigationResponse(pipeline_id, allowed) => {
|
WindowEvent::AllowNavigationResponse(pipeline_id, allowed) => {
|
||||||
|
@ -745,6 +745,7 @@ where
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn receive_messages(&mut self) {
|
fn receive_messages(&mut self) {
|
||||||
|
@ -776,18 +777,20 @@ where
|
||||||
::std::mem::replace(&mut self.embedder_events, Vec::new())
|
::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() {
|
if self.compositor.receive_messages() {
|
||||||
self.receive_messages();
|
self.receive_messages();
|
||||||
}
|
}
|
||||||
|
let mut need_resize = false;
|
||||||
for event in events {
|
for event in events {
|
||||||
self.handle_window_event(event);
|
need_resize |= self.handle_window_event(event);
|
||||||
}
|
}
|
||||||
if self.compositor.shutdown_state != ShutdownState::FinishedShuttingDown {
|
if self.compositor.shutdown_state != ShutdownState::FinishedShuttingDown {
|
||||||
self.compositor.perform_updates();
|
self.compositor.perform_updates();
|
||||||
} else {
|
} else {
|
||||||
self.embedder_events.push((None, EmbedderMsg::Shutdown));
|
self.embedder_events.push((None, EmbedderMsg::Shutdown));
|
||||||
}
|
}
|
||||||
|
need_resize
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn repaint_synchronously(&mut self) {
|
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);
|
browser.handle_window_events(app_events);
|
||||||
|
|
||||||
let mut servo_events = self.servo.as_mut().unwrap().get_events();
|
let mut servo_events = self.servo.as_mut().unwrap().get_events();
|
||||||
|
let mut need_resize = false;
|
||||||
loop {
|
loop {
|
||||||
browser.handle_servo_events(servo_events);
|
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() {
|
if browser.shutdown_requested() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue