summaryrefslogtreecommitdiffstats
path: root/core/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-12-14 03:49:24 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-12-14 03:49:24 +0100
commit2cf4abf25bb5702635c19a22353399db8cef7be3 (patch)
tree3859d0fede59e92864c66c2ace89bc1d401769d6 /core/src
parent6572909ab5b004176f6d261b67b4caa99f1f54bb (diff)
downloadiced-2cf4abf25bb5702635c19a22353399db8cef7be3.tar.gz
iced-2cf4abf25bb5702635c19a22353399db8cef7be3.tar.bz2
iced-2cf4abf25bb5702635c19a22353399db8cef7be3.zip
Support custom renderers in `iced_test` through `renderer::Headless` trait
Diffstat (limited to 'core/src')
-rw-r--r--core/src/lib.rs2
-rw-r--r--core/src/renderer.rs19
-rw-r--r--core/src/settings.rs50
3 files changed, 70 insertions, 1 deletions
diff --git a/core/src/lib.rs b/core/src/lib.rs
index df599f45..645f7a90 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -40,6 +40,7 @@ mod pixels;
mod point;
mod rectangle;
mod rotation;
+mod settings;
mod shadow;
mod shell;
mod size;
@@ -67,6 +68,7 @@ pub use point::Point;
pub use rectangle::Rectangle;
pub use renderer::Renderer;
pub use rotation::Rotation;
+pub use settings::Settings;
pub use shadow::Shadow;
pub use shell::Shell;
pub use size::Size;
diff --git a/core/src/renderer.rs b/core/src/renderer.rs
index 6684517f..68e070e8 100644
--- a/core/src/renderer.rs
+++ b/core/src/renderer.rs
@@ -3,7 +3,8 @@
mod null;
use crate::{
- Background, Border, Color, Rectangle, Shadow, Size, Transformation, Vector,
+ Background, Border, Color, Font, Pixels, Rectangle, Shadow, Size,
+ Transformation, Vector,
};
/// A component that can be used by widgets to draw themselves on a screen.
@@ -100,3 +101,19 @@ impl Default for Style {
}
}
}
+
+/// A headless renderer is a renderer that can render offscreen without
+/// a window nor a compositor.
+pub trait Headless {
+ /// Creates a new [`Headless`] renderer;
+ fn new(default_font: Font, default_text_size: Pixels) -> Self;
+
+ /// Draws offscreen into a screenshot, returning a collection of
+ /// bytes representing the rendered pixels in RGBA order.
+ fn screenshot(
+ &mut self,
+ size: Size<u32>,
+ scale_factor: f32,
+ background_color: Color,
+ ) -> Vec<u8>;
+}
diff --git a/core/src/settings.rs b/core/src/settings.rs
new file mode 100644
index 00000000..36bbb699
--- /dev/null
+++ b/core/src/settings.rs
@@ -0,0 +1,50 @@
+//! Configure your application.
+use crate::{Font, Pixels};
+
+use std::borrow::Cow;
+
+/// The settings of an iced program.
+#[derive(Debug, Clone)]
+pub struct Settings {
+ /// The identifier of the application.
+ ///
+ /// If provided, this identifier may be used to identify the application or
+ /// communicate with it through the windowing system.
+ pub id: Option<String>,
+
+ /// The fonts to load on boot.
+ pub fonts: Vec<Cow<'static, [u8]>>,
+
+ /// The default [`Font`] to be used.
+ ///
+ /// By default, it uses [`Family::SansSerif`](crate::font::Family::SansSerif).
+ pub default_font: Font,
+
+ /// The text size that will be used by default.
+ ///
+ /// The default value is `16.0`.
+ pub default_text_size: Pixels,
+
+ /// If set to true, the renderer will try to perform antialiasing for some
+ /// primitives.
+ ///
+ /// Enabling it can produce a smoother result in some widgets, like the
+ /// [`Canvas`], at a performance cost.
+ ///
+ /// By default, it is disabled.
+ ///
+ /// [`Canvas`]: crate::widget::Canvas
+ pub antialiasing: bool,
+}
+
+impl Default for Settings {
+ fn default() -> Self {
+ Self {
+ id: None,
+ fonts: Vec::new(),
+ default_font: Font::default(),
+ default_text_size: Pixels(16.0),
+ antialiasing: false,
+ }
+ }
+}