iced_renderer/
lib.rs
1#![cfg_attr(docsrs, feature(doc_auto_cfg))]
3#[cfg(feature = "wgpu")]
4pub use iced_wgpu as wgpu;
5
6pub mod fallback;
7
8pub use iced_graphics as graphics;
9pub use iced_graphics::core;
10
11#[cfg(feature = "geometry")]
12pub use iced_graphics::geometry;
13
14pub type Renderer = renderer::Renderer;
18
19pub type Compositor = renderer::Compositor;
23
24#[cfg(all(feature = "wgpu", feature = "tiny-skia"))]
25mod renderer {
26 use crate::core::renderer;
27 use crate::core::{Color, Font, Pixels, Size};
28
29 pub type Renderer = crate::fallback::Renderer<
30 iced_wgpu::Renderer,
31 iced_tiny_skia::Renderer,
32 >;
33
34 pub type Compositor = crate::fallback::Compositor<
35 iced_wgpu::window::Compositor,
36 iced_tiny_skia::window::Compositor,
37 >;
38
39 impl renderer::Headless for Renderer {
40 fn new(default_font: Font, default_text_size: Pixels) -> Self {
41 Self::Secondary(iced_tiny_skia::Renderer::new(
42 default_font,
43 default_text_size,
44 ))
45 }
46
47 fn screenshot(
48 &mut self,
49 size: Size<u32>,
50 scale_factor: f32,
51 background_color: Color,
52 ) -> Vec<u8> {
53 match self {
54 crate::fallback::Renderer::Primary(_) => unreachable!(
55 "iced_wgpu does not support headless mode yet!"
56 ),
57 crate::fallback::Renderer::Secondary(renderer) => {
58 renderer.screenshot(size, scale_factor, background_color)
59 }
60 }
61 }
62 }
63}
64
65#[cfg(all(feature = "wgpu", not(feature = "tiny-skia")))]
66mod renderer {
67 pub type Renderer = iced_wgpu::Renderer;
68 pub type Compositor = iced_wgpu::window::Compositor;
69}
70
71#[cfg(all(not(feature = "wgpu"), feature = "tiny-skia"))]
72mod renderer {
73 pub type Renderer = iced_tiny_skia::Renderer;
74 pub type Compositor = iced_tiny_skia::window::Compositor;
75}
76
77#[cfg(not(any(feature = "wgpu", feature = "tiny-skia")))]
78mod renderer {
79 #[cfg(not(debug_assertions))]
80 compile_error!(
81 "Cannot compile `iced_renderer` in release mode \
82 without a renderer feature enabled. \
83 Enable either the `wgpu` or `tiny-skia` feature, or both."
84 );
85
86 pub type Renderer = ();
87 pub type Compositor = ();
88}