Make compatible_window mandatory in Compositor

This commit is contained in:
Héctor Ramón Jiménez 2024-01-18 10:06:30 +01:00
parent 1701ec815d
commit 5fc49edc55
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
6 changed files with 18 additions and 25 deletions

View file

@ -22,7 +22,7 @@ pub trait Compositor: Sized {
/// Creates a new [`Compositor`]. /// Creates a new [`Compositor`].
fn new<W: Window + Clone>( fn new<W: Window + Clone>(
settings: Self::Settings, settings: Self::Settings,
compatible_window: Option<W>, compatible_window: W,
) -> Result<Self, Error>; ) -> Result<Self, Error>;
/// Creates a [`Self::Renderer`] for the [`Compositor`]. /// Creates a [`Self::Renderer`] for the [`Compositor`].

View file

@ -24,7 +24,7 @@ impl<Theme> crate::graphics::Compositor for Compositor<Theme> {
fn new<W: Window + Clone>( fn new<W: Window + Clone>(
settings: Self::Settings, settings: Self::Settings,
compatible_window: Option<W>, compatible_window: W,
) -> Result<Self, Error> { ) -> Result<Self, Error> {
let candidates = let candidates =
Candidate::list_from_env().unwrap_or(Candidate::default_list()); Candidate::list_from_env().unwrap_or(Candidate::default_list());
@ -228,7 +228,7 @@ impl Candidate {
fn build<Theme, W: Window>( fn build<Theme, W: Window>(
self, self,
settings: Settings, settings: Settings,
_compatible_window: Option<W>, _compatible_window: W,
) -> Result<Compositor<Theme>, Error> { ) -> Result<Compositor<Theme>, Error> {
match self { match self {
Self::TinySkia => { Self::TinySkia => {

View file

@ -9,7 +9,7 @@ use std::marker::PhantomData;
use std::num::NonZeroU32; use std::num::NonZeroU32;
pub struct Compositor<Theme> { pub struct Compositor<Theme> {
context: Option<softbuffer::Context<Box<dyn compositor::Window>>>, context: softbuffer::Context<Box<dyn compositor::Window>>,
settings: Settings, settings: Settings,
_theme: PhantomData<Theme>, _theme: PhantomData<Theme>,
} }
@ -32,7 +32,7 @@ impl<Theme> crate::graphics::Compositor for Compositor<Theme> {
fn new<W: compositor::Window>( fn new<W: compositor::Window>(
settings: Self::Settings, settings: Self::Settings,
compatible_window: Option<W>, compatible_window: W,
) -> Result<Self, Error> { ) -> Result<Self, Error> {
Ok(new(settings, compatible_window)) Ok(new(settings, compatible_window))
} }
@ -51,17 +51,11 @@ impl<Theme> crate::graphics::Compositor for Compositor<Theme> {
width: u32, width: u32,
height: u32, height: u32,
) -> Surface { ) -> Surface {
let window = if let Some(context) = self.context.as_ref() { let window = softbuffer::Surface::new(
softbuffer::Surface::new(context, Box::new(window.clone()) as _) &self.context,
.expect("Create softbuffer surface for window") Box::new(window.clone()) as _,
} else { )
let context = .expect("Create softbuffer surface for window");
softbuffer::Context::new(Box::new(window.clone()) as _)
.expect("Create softbuffer context for window");
softbuffer::Surface::new(&context, Box::new(window.clone()) as _)
.expect("Create softbuffer surface for window")
};
Surface { Surface {
window, window,
@ -133,11 +127,11 @@ impl<Theme> crate::graphics::Compositor for Compositor<Theme> {
pub fn new<W: compositor::Window, Theme>( pub fn new<W: compositor::Window, Theme>(
settings: Settings, settings: Settings,
compatible_window: Option<W>, compatible_window: W,
) -> Compositor<Theme> { ) -> Compositor<Theme> {
#[allow(unsafe_code)] #[allow(unsafe_code)]
let context = compatible_window let context = softbuffer::Context::new(Box::new(compatible_window) as _)
.and_then(|w| softbuffer::Context::new(Box::new(w) as _).ok()); .expect("Create softbuffer context");
Compositor { Compositor {
context, context,

View file

@ -137,11 +137,11 @@ impl<Theme> Compositor<Theme> {
/// window. /// window.
pub fn new<W: compositor::Window, Theme>( pub fn new<W: compositor::Window, Theme>(
settings: Settings, settings: Settings,
compatible_window: Option<W>, compatible_window: W,
) -> Result<Compositor<Theme>, Error> { ) -> Result<Compositor<Theme>, Error> {
let compositor = futures::executor::block_on(Compositor::request( let compositor = futures::executor::block_on(Compositor::request(
settings, settings,
compatible_window, Some(compatible_window),
)) ))
.ok_or(Error::GraphicsAdapterNotFound)?; .ok_or(Error::GraphicsAdapterNotFound)?;
@ -210,7 +210,7 @@ impl<Theme> graphics::Compositor for Compositor<Theme> {
fn new<W: compositor::Window>( fn new<W: compositor::Window>(
settings: Self::Settings, settings: Self::Settings,
compatible_window: Option<W>, compatible_window: W,
) -> Result<Self, Error> { ) -> Result<Self, Error> {
new(settings, compatible_window) new(settings, compatible_window)
} }

View file

@ -187,7 +187,7 @@ where
}; };
} }
let compositor = C::new(compositor_settings, Some(window.clone()))?; let compositor = C::new(compositor_settings, window.clone())?;
let mut renderer = compositor.create_renderer(); let mut renderer = compositor.create_renderer();
for font in settings.fonts { for font in settings.fonts {

View file

@ -187,8 +187,7 @@ where
}; };
} }
let mut compositor = let mut compositor = C::new(compositor_settings, main_window.clone())?;
C::new(compositor_settings, Some(main_window.clone()))?;
let mut window_manager = WindowManager::new(); let mut window_manager = WindowManager::new();
let _ = window_manager.insert( let _ = window_manager.insert(