Make compatible_window mandatory in Compositor
This commit is contained in:
parent
1701ec815d
commit
5fc49edc55
6 changed files with 18 additions and 25 deletions
|
|
@ -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`].
|
||||||
|
|
|
||||||
|
|
@ -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 => {
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue