summaryrefslogtreecommitdiffstats
path: root/graphics/src/geometry.rs
diff options
context:
space:
mode:
authorLibravatar Gigas002 <24297712+Gigas002@users.noreply.github.com>2024-03-27 19:47:48 +0900
committerLibravatar GitHub <noreply@github.com>2024-03-27 19:47:48 +0900
commit19afc66cadfc7ea230d4d749b0d7b0197e29cf93 (patch)
treed012dff84003f2d7d18a1e6bc4bdac62df73b322 /graphics/src/geometry.rs
parent4334e63ba1dd88b367f3b7f2790b7869d11d12c0 (diff)
parent1df1cf82f4c9485533f2566c8490cfe188b4ae6a (diff)
downloadiced-19afc66cadfc7ea230d4d749b0d7b0197e29cf93.tar.gz
iced-19afc66cadfc7ea230d4d749b0d7b0197e29cf93.tar.bz2
iced-19afc66cadfc7ea230d4d749b0d7b0197e29cf93.zip
Merge branch 'master' into viewer_content_fit
Diffstat (limited to 'graphics/src/geometry.rs')
-rw-r--r--graphics/src/geometry.rs40
1 files changed, 36 insertions, 4 deletions
diff --git a/graphics/src/geometry.rs b/graphics/src/geometry.rs
index d7d6a0aa..d251efb8 100644
--- a/graphics/src/geometry.rs
+++ b/graphics/src/geometry.rs
@@ -1,12 +1,16 @@
//! Build and draw geometry.
pub mod fill;
+pub mod frame;
pub mod path;
pub mod stroke;
+mod cache;
mod style;
mod text;
+pub use cache::Cache;
pub use fill::Fill;
+pub use frame::Frame;
pub use path::Path;
pub use stroke::{LineCap, LineDash, LineJoin, Stroke};
pub use style::Style;
@@ -14,11 +18,39 @@ pub use text::Text;
pub use crate::gradient::{self, Gradient};
+use crate::core::{self, Size};
+use crate::Cached;
+
/// A renderer capable of drawing some [`Self::Geometry`].
-pub trait Renderer: crate::core::Renderer {
+pub trait Renderer: core::Renderer {
/// The kind of geometry this renderer can draw.
- type Geometry;
+ type Geometry: Cached;
+
+ /// The kind of [`Frame`] this renderer supports.
+ type Frame: frame::Backend<Geometry = Self::Geometry>;
+
+ /// Creates a new [`Self::Frame`].
+ fn new_frame(&self, size: Size) -> Self::Frame;
+
+ /// Draws the given [`Self::Geometry`].
+ fn draw_geometry(&mut self, geometry: Self::Geometry);
+}
+
+/// The graphics backend of a geometry renderer.
+pub trait Backend {
+ /// The kind of [`Frame`] this backend supports.
+ type Frame: frame::Backend;
+
+ /// Creates a new [`Self::Frame`].
+ fn new_frame(&self, size: Size) -> Self::Frame;
+}
+
+#[cfg(debug_assertions)]
+impl Renderer for () {
+ type Geometry = ();
+ type Frame = ();
+
+ fn new_frame(&self, _size: Size) -> Self::Frame {}
- /// Draws the given layers of [`Self::Geometry`].
- fn draw(&mut self, layers: Vec<Self::Geometry>);
+ fn draw_geometry(&mut self, _geometry: Self::Geometry) {}
}