Split local state from Engine in iced_wgpu
This commit is contained in:
parent
4b075b9731
commit
576dd22733
22 changed files with 768 additions and 641 deletions
|
|
@ -1 +0,0 @@
|
|||
|
||||
|
|
@ -3,7 +3,8 @@ use crate::core::image;
|
|||
use crate::core::renderer;
|
||||
use crate::core::svg;
|
||||
use crate::core::{
|
||||
self, Background, Color, Image, Point, Rectangle, Size, Svg, Transformation,
|
||||
self, Background, Color, Font, Image, Pixels, Point, Rectangle, Size, Svg,
|
||||
Transformation,
|
||||
};
|
||||
use crate::graphics;
|
||||
use crate::graphics::compositor;
|
||||
|
|
@ -353,29 +354,18 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
fn screenshot<T: AsRef<str>>(
|
||||
fn screenshot(
|
||||
&mut self,
|
||||
renderer: &mut Self::Renderer,
|
||||
viewport: &graphics::Viewport,
|
||||
background_color: Color,
|
||||
overlay: &[T],
|
||||
) -> Vec<u8> {
|
||||
match (self, renderer) {
|
||||
(Self::Primary(compositor), Renderer::Primary(renderer)) => {
|
||||
compositor.screenshot(
|
||||
renderer,
|
||||
viewport,
|
||||
background_color,
|
||||
overlay,
|
||||
)
|
||||
compositor.screenshot(renderer, viewport, background_color)
|
||||
}
|
||||
(Self::Secondary(compositor), Renderer::Secondary(renderer)) => {
|
||||
compositor.screenshot(
|
||||
renderer,
|
||||
viewport,
|
||||
background_color,
|
||||
overlay,
|
||||
)
|
||||
compositor.screenshot(renderer, viewport, background_color)
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
|
|
@ -617,6 +607,41 @@ mod geometry {
|
|||
}
|
||||
}
|
||||
|
||||
impl<A, B> renderer::Headless for Renderer<A, B>
|
||||
where
|
||||
A: renderer::Headless,
|
||||
B: renderer::Headless,
|
||||
{
|
||||
async fn new(
|
||||
default_font: Font,
|
||||
default_text_size: Pixels,
|
||||
) -> Option<Self> {
|
||||
if let Some(renderer) = A::new(default_font, default_text_size).await {
|
||||
return Some(Self::Primary(renderer));
|
||||
}
|
||||
|
||||
B::new(default_font, default_text_size)
|
||||
.await
|
||||
.map(Self::Secondary)
|
||||
}
|
||||
|
||||
fn screenshot(
|
||||
&mut self,
|
||||
size: Size<u32>,
|
||||
scale_factor: f32,
|
||||
background_color: Color,
|
||||
) -> Vec<u8> {
|
||||
match self {
|
||||
crate::fallback::Renderer::Primary(renderer) => {
|
||||
renderer.screenshot(size, scale_factor, background_color)
|
||||
}
|
||||
crate::fallback::Renderer::Secondary(renderer) => {
|
||||
renderer.screenshot(size, scale_factor, background_color)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<A, B> compositor::Default for Renderer<A, B>
|
||||
where
|
||||
A: compositor::Default,
|
||||
|
|
|
|||
|
|
@ -23,9 +23,6 @@ pub type Compositor = renderer::Compositor;
|
|||
|
||||
#[cfg(all(feature = "wgpu", feature = "tiny-skia"))]
|
||||
mod renderer {
|
||||
use crate::core::renderer;
|
||||
use crate::core::{Color, Font, Pixels, Size};
|
||||
|
||||
pub type Renderer = crate::fallback::Renderer<
|
||||
iced_wgpu::Renderer,
|
||||
iced_tiny_skia::Renderer,
|
||||
|
|
@ -35,31 +32,6 @@ mod renderer {
|
|||
iced_wgpu::window::Compositor,
|
||||
iced_tiny_skia::window::Compositor,
|
||||
>;
|
||||
|
||||
impl renderer::Headless for Renderer {
|
||||
fn new(default_font: Font, default_text_size: Pixels) -> Self {
|
||||
Self::Secondary(iced_tiny_skia::Renderer::new(
|
||||
default_font,
|
||||
default_text_size,
|
||||
))
|
||||
}
|
||||
|
||||
fn screenshot(
|
||||
&mut self,
|
||||
size: Size<u32>,
|
||||
scale_factor: f32,
|
||||
background_color: Color,
|
||||
) -> Vec<u8> {
|
||||
match self {
|
||||
crate::fallback::Renderer::Primary(_) => unreachable!(
|
||||
"iced_wgpu does not support headless mode yet!"
|
||||
),
|
||||
crate::fallback::Renderer::Secondary(renderer) => {
|
||||
renderer.screenshot(size, scale_factor, background_color)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "wgpu", not(feature = "tiny-skia")))]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue