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`].
fn new<W: Window + Clone>(
settings: Self::Settings,
compatible_window: Option<W>,
compatible_window: W,
) -> Result<Self, Error>;
/// 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>(
settings: Self::Settings,
compatible_window: Option<W>,
compatible_window: W,
) -> Result<Self, Error> {
let candidates =
Candidate::list_from_env().unwrap_or(Candidate::default_list());
@ -228,7 +228,7 @@ impl Candidate {
fn build<Theme, W: Window>(
self,
settings: Settings,
_compatible_window: Option<W>,
_compatible_window: W,
) -> Result<Compositor<Theme>, Error> {
match self {
Self::TinySkia => {

View file

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

View file

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

View file

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