Expose WebrenderSurfman interface to embedders.

This commit is contained in:
Josh Matthews 2020-11-15 11:14:26 -05:00
parent cb2b2abdee
commit d9484d5d06

View file

@ -161,6 +161,7 @@ pub trait HostTrait {
} }
pub struct ServoGlue { pub struct ServoGlue {
webrender_surfman: WebrenderSurfman,
servo: Servo<ServoWindowCallbacks>, servo: Servo<ServoWindowCallbacks>,
batch_mode: bool, batch_mode: bool,
callbacks: Rc<ServoWindowCallbacks>, callbacks: Rc<ServoWindowCallbacks>,
@ -285,7 +286,7 @@ pub fn init(
density: init_opts.density, density: init_opts.density,
gl_context_pointer: init_opts.gl_context_pointer, gl_context_pointer: init_opts.gl_context_pointer,
native_display_pointer: init_opts.native_display_pointer, native_display_pointer: init_opts.native_display_pointer,
webrender_surfman, webrender_surfman: webrender_surfman.clone(),
}); });
let embedder_callbacks = Box::new(ServoEmbedderCallbacks { let embedder_callbacks = Box::new(ServoEmbedderCallbacks {
@ -298,6 +299,7 @@ pub fn init(
SERVO.with(|s| { SERVO.with(|s| {
let mut servo_glue = ServoGlue { let mut servo_glue = ServoGlue {
webrender_surfman,
servo, servo,
batch_mode: false, batch_mode: false,
callbacks: window_callbacks, callbacks: window_callbacks,
@ -338,6 +340,12 @@ impl ServoGlue {
self.servo.deinit(); self.servo.deinit();
} }
/// Returns the webrender surface management integration interface.
/// This provides the embedder access to the current front buffer.
pub fn surfman(&self) -> WebrenderSurfman {
self.webrender_surfman.clone()
}
/// This is the Servo heartbeat. This needs to be called /// This is the Servo heartbeat. This needs to be called
/// everytime wakeup is called or when embedder wants Servo /// everytime wakeup is called or when embedder wants Servo
/// to act on its pending events. /// to act on its pending events.