iced_renderer/
lib.rs

1//! The official renderer for iced.
2#![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
14/// The default graphics renderer for [`iced`].
15///
16/// [`iced`]: https://github.com/iced-rs/iced
17pub type Renderer = renderer::Renderer;
18
19/// The default graphics compositor for [`iced`].
20///
21/// [`iced`]: https://github.com/iced-rs/iced
22pub 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}