summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-21 22:27:17 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-21 22:27:17 +0100
commit3645d34d6a1ba1247238e830e9eefd52d9e5b986 (patch)
tree2d38961161df0a85c1667474b2b696aab86b7160 /examples
parent7e4ae8450e1f28c15717ca5ca9748981af9c9541 (diff)
downloadiced-3645d34d6a1ba1247238e830e9eefd52d9e5b986.tar.gz
iced-3645d34d6a1ba1247238e830e9eefd52d9e5b986.tar.bz2
iced-3645d34d6a1ba1247238e830e9eefd52d9e5b986.zip
Implement composable, type-safe renderer fallback
Diffstat (limited to 'examples')
-rw-r--r--examples/arc/src/main.rs10
-rw-r--r--examples/bezier_tool/src/main.rs33
-rw-r--r--examples/clock/src/main.rs8
-rw-r--r--examples/color_palette/src/main.rs10
-rw-r--r--examples/game_of_life/src/main.rs18
-rw-r--r--examples/geometry/src/main.rs4
-rw-r--r--examples/layout/src/main.rs10
-rw-r--r--examples/loading_spinners/src/circular.rs6
-rw-r--r--examples/multitouch/src/main.rs10
-rw-r--r--examples/sierpinski_triangle/src/main.rs8
-rw-r--r--examples/solar_system/src/main.rs7
-rw-r--r--examples/vectorial_text/src/main.rs8
12 files changed, 67 insertions, 65 deletions
diff --git a/examples/arc/src/main.rs b/examples/arc/src/main.rs
index 4576404f..a7893efa 100644
--- a/examples/arc/src/main.rs
+++ b/examples/arc/src/main.rs
@@ -1,9 +1,7 @@
use std::{f32::consts::PI, time::Instant};
use iced::mouse;
-use iced::widget::canvas::{
- self, stroke, Cache, Canvas, Geometry, Path, Stroke,
-};
+use iced::widget::canvas::{self, stroke, Cache, Canvas, Frame, Path, Stroke};
use iced::{Element, Length, Point, Rectangle, Renderer, Subscription, Theme};
pub fn main() -> iced::Result {
@@ -57,11 +55,11 @@ impl<Message> canvas::Program<Message> for Arc {
fn draw(
&self,
_state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
theme: &Theme,
bounds: Rectangle,
_cursor: mouse::Cursor,
- ) -> Vec<Geometry> {
+ ) {
let geometry = self.cache.draw(renderer, bounds.size(), |frame| {
let palette = theme.palette();
@@ -104,6 +102,6 @@ impl<Message> canvas::Program<Message> for Arc {
);
});
- vec![geometry]
+ renderer.draw_geometry([geometry]);
}
}
diff --git a/examples/bezier_tool/src/main.rs b/examples/bezier_tool/src/main.rs
index cf70bd40..e51f2a31 100644
--- a/examples/bezier_tool/src/main.rs
+++ b/examples/bezier_tool/src/main.rs
@@ -52,7 +52,7 @@ impl Example {
mod bezier {
use iced::mouse;
use iced::widget::canvas::event::{self, Event};
- use iced::widget::canvas::{self, Canvas, Frame, Geometry, Path, Stroke};
+ use iced::widget::canvas::{self, frame, Canvas, Frame, Path, Stroke};
use iced::{Element, Length, Point, Rectangle, Renderer, Theme};
#[derive(Default)]
@@ -138,30 +138,25 @@ mod bezier {
fn draw(
&self,
state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
_theme: &Theme,
bounds: Rectangle,
cursor: mouse::Cursor,
- ) -> Vec<Geometry> {
- let content = self.state.cache.draw(
- renderer,
- bounds.size(),
- |frame: &mut Frame| {
+ ) {
+ let content =
+ self.state.cache.draw(renderer, bounds.size(), |frame| {
Curve::draw_all(self.curves, frame);
frame.stroke(
&Path::rectangle(Point::ORIGIN, frame.size()),
Stroke::default().with_width(2.0),
);
- },
- );
+ });
- if let Some(pending) = state {
- let pending_curve = pending.draw(renderer, bounds, cursor);
+ renderer.draw_geometry([content]);
- vec![content, pending_curve]
- } else {
- vec![content]
+ if let Some(pending) = state {
+ pending.draw(renderer, bounds, cursor);
}
}
@@ -187,7 +182,7 @@ mod bezier {
}
impl Curve {
- fn draw_all(curves: &[Curve], frame: &mut Frame) {
+ fn draw_all(curves: &[Curve], frame: &mut impl Frame) {
let curves = Path::new(|p| {
for curve in curves {
p.move_to(curve.from);
@@ -208,11 +203,11 @@ mod bezier {
impl Pending {
fn draw(
&self,
- renderer: &Renderer,
+ renderer: &mut Renderer,
bounds: Rectangle,
cursor: mouse::Cursor,
- ) -> Geometry {
- let mut frame = Frame::new(renderer, bounds.size());
+ ) {
+ let mut frame = frame(renderer, bounds.size());
if let Some(cursor_position) = cursor.position_in(bounds) {
match *self {
@@ -232,7 +227,7 @@ mod bezier {
};
}
- frame.into_geometry()
+ renderer.draw_geometry([frame]);
}
}
}
diff --git a/examples/clock/src/main.rs b/examples/clock/src/main.rs
index 897f8f1b..9f78903c 100644
--- a/examples/clock/src/main.rs
+++ b/examples/clock/src/main.rs
@@ -1,6 +1,6 @@
use iced::alignment;
use iced::mouse;
-use iced::widget::canvas::{stroke, Cache, Geometry, LineCap, Path, Stroke};
+use iced::widget::canvas::{stroke, Cache, Frame, LineCap, Path, Stroke};
use iced::widget::{canvas, container};
use iced::{
Degrees, Element, Font, Length, Point, Rectangle, Renderer, Subscription,
@@ -82,11 +82,11 @@ impl<Message> canvas::Program<Message> for Clock {
fn draw(
&self,
_state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
theme: &Theme,
bounds: Rectangle,
_cursor: mouse::Cursor,
- ) -> Vec<Geometry> {
+ ) {
let clock = self.clock.draw(renderer, bounds.size(), |frame| {
let palette = theme.extended_palette();
@@ -163,7 +163,7 @@ impl<Message> canvas::Program<Message> for Clock {
});
});
- vec![clock]
+ renderer.draw_geometry([clock]);
}
}
diff --git a/examples/color_palette/src/main.rs b/examples/color_palette/src/main.rs
index d9325edb..400766ff 100644
--- a/examples/color_palette/src/main.rs
+++ b/examples/color_palette/src/main.rs
@@ -1,6 +1,6 @@
use iced::alignment::{self, Alignment};
use iced::mouse;
-use iced::widget::canvas::{self, Canvas, Frame, Geometry, Path};
+use iced::widget::canvas::{self, Canvas, Frame, Path};
use iced::widget::{column, row, text, Slider};
use iced::{
Color, Element, Font, Length, Pixels, Point, Rectangle, Renderer, Size,
@@ -156,7 +156,7 @@ impl Theme {
.into()
}
- fn draw(&self, frame: &mut Frame, text_color: Color) {
+ fn draw(&self, frame: &mut impl Frame, text_color: Color) {
let pad = 20.0;
let box_size = Size {
@@ -252,18 +252,18 @@ impl<Message> canvas::Program<Message> for Theme {
fn draw(
&self,
_state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
theme: &iced::Theme,
bounds: Rectangle,
_cursor: mouse::Cursor,
- ) -> Vec<Geometry> {
+ ) {
let theme = self.canvas_cache.draw(renderer, bounds.size(), |frame| {
let palette = theme.extended_palette();
self.draw(frame, palette.background.base.text);
});
- vec![theme]
+ renderer.draw_geometry([theme]);
}
}
diff --git a/examples/game_of_life/src/main.rs b/examples/game_of_life/src/main.rs
index 2b0fae0b..f681b4cc 100644
--- a/examples/game_of_life/src/main.rs
+++ b/examples/game_of_life/src/main.rs
@@ -193,7 +193,7 @@ mod grid {
use iced::touch;
use iced::widget::canvas;
use iced::widget::canvas::event::{self, Event};
- use iced::widget::canvas::{Cache, Canvas, Frame, Geometry, Path, Text};
+ use iced::widget::canvas::{frame, Cache, Canvas, Frame, Path, Text};
use iced::{
Color, Element, Length, Point, Rectangle, Renderer, Size, Theme, Vector,
};
@@ -516,11 +516,11 @@ mod grid {
fn draw(
&self,
_interaction: &Interaction,
- renderer: &Renderer,
+ renderer: &mut Renderer,
_theme: &Theme,
bounds: Rectangle,
cursor: mouse::Cursor,
- ) -> Vec<Geometry> {
+ ) {
let center = Vector::new(bounds.width / 2.0, bounds.height / 2.0);
let life = self.life_cache.draw(renderer, bounds.size(), |frame| {
@@ -546,7 +546,7 @@ mod grid {
});
let overlay = {
- let mut frame = Frame::new(renderer, bounds.size());
+ let mut frame = frame(renderer, bounds.size());
let hovered_cell = cursor.position_in(bounds).map(|position| {
Cell::at(self.project(position, frame.size()))
@@ -599,12 +599,10 @@ mod grid {
..text
});
- frame.into_geometry()
+ frame.into()
};
- if self.scaling < 0.2 || !self.show_lines {
- vec![life, overlay]
- } else {
+ if self.scaling >= 0.2 && self.show_lines {
let grid =
self.grid_cache.draw(renderer, bounds.size(), |frame| {
frame.translate(center);
@@ -640,7 +638,9 @@ mod grid {
}
});
- vec![life, grid, overlay]
+ renderer.draw_geometry([life, grid, overlay]);
+ } else {
+ renderer.draw_geometry([life, overlay]);
}
}
diff --git a/examples/geometry/src/main.rs b/examples/geometry/src/main.rs
index 63efcbdd..16cdb86f 100644
--- a/examples/geometry/src/main.rs
+++ b/examples/geometry/src/main.rs
@@ -44,7 +44,9 @@ mod rainbow {
cursor: mouse::Cursor,
_viewport: &Rectangle,
) {
- use iced::advanced::graphics::mesh::{self, Mesh, SolidVertex2D};
+ use iced::advanced::graphics::mesh::{
+ self, Mesh, Renderer as _, SolidVertex2D,
+ };
use iced::advanced::Renderer as _;
let bounds = layout.bounds();
diff --git a/examples/layout/src/main.rs b/examples/layout/src/main.rs
index 713e2b70..198237f5 100644
--- a/examples/layout/src/main.rs
+++ b/examples/layout/src/main.rs
@@ -292,12 +292,14 @@ fn square<'a>(size: impl Into<Length> + Copy) -> Element<'a, Message> {
fn draw(
&self,
_state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
theme: &Theme,
bounds: Rectangle,
_cursor: mouse::Cursor,
- ) -> Vec<canvas::Geometry> {
- let mut frame = canvas::Frame::new(renderer, bounds.size());
+ ) {
+ use canvas::Frame;
+
+ let mut frame = canvas::frame(renderer, bounds.size());
let palette = theme.extended_palette();
@@ -307,7 +309,7 @@ fn square<'a>(size: impl Into<Length> + Copy) -> Element<'a, Message> {
palette.background.strong.color,
);
- vec![frame.into_geometry()]
+ renderer.draw_geometry([frame]);
}
}
diff --git a/examples/loading_spinners/src/circular.rs b/examples/loading_spinners/src/circular.rs
index 12670ed1..306988af 100644
--- a/examples/loading_spinners/src/circular.rs
+++ b/examples/loading_spinners/src/circular.rs
@@ -6,7 +6,7 @@ use iced::advanced::{self, Clipboard, Layout, Shell, Widget};
use iced::event;
use iced::mouse;
use iced::time::Instant;
-use iced::widget::canvas;
+use iced::widget::canvas::{self, Frame};
use iced::window::{self, RedrawRequest};
use iced::{
Background, Color, Element, Event, Length, Radians, Rectangle, Renderer,
@@ -356,9 +356,7 @@ where
renderer.with_translation(
Vector::new(bounds.x, bounds.y),
|renderer| {
- use iced::advanced::graphics::geometry::Renderer as _;
-
- renderer.draw(vec![geometry]);
+ renderer.draw_geometry([geometry]);
},
);
}
diff --git a/examples/multitouch/src/main.rs b/examples/multitouch/src/main.rs
index 2453c7f5..41bd0151 100644
--- a/examples/multitouch/src/main.rs
+++ b/examples/multitouch/src/main.rs
@@ -5,7 +5,7 @@ use iced::mouse;
use iced::touch;
use iced::widget::canvas::event;
use iced::widget::canvas::stroke::{self, Stroke};
-use iced::widget::canvas::{self, Canvas, Geometry};
+use iced::widget::canvas::{self, Canvas};
use iced::{Color, Element, Length, Point, Rectangle, Renderer, Theme};
use std::collections::HashMap;
@@ -83,11 +83,13 @@ impl canvas::Program<Message> for Multitouch {
fn draw(
&self,
_state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
_theme: &Theme,
bounds: Rectangle,
_cursor: mouse::Cursor,
- ) -> Vec<Geometry> {
+ ) {
+ use canvas::Frame;
+
let fingerweb = self.cache.draw(renderer, bounds.size(), |frame| {
if self.fingers.len() < 2 {
return;
@@ -154,6 +156,6 @@ impl canvas::Program<Message> for Multitouch {
}
});
- vec![fingerweb]
+ renderer.draw_geometry([fingerweb]);
}
}
diff --git a/examples/sierpinski_triangle/src/main.rs b/examples/sierpinski_triangle/src/main.rs
index 07ae05d6..b440b8b4 100644
--- a/examples/sierpinski_triangle/src/main.rs
+++ b/examples/sierpinski_triangle/src/main.rs
@@ -107,11 +107,13 @@ impl canvas::Program<Message> for SierpinskiGraph {
fn draw(
&self,
_state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
_theme: &Theme,
bounds: Rectangle,
_cursor: mouse::Cursor,
- ) -> Vec<canvas::Geometry> {
+ ) {
+ use canvas::Frame;
+
let geom = self.cache.draw(renderer, bounds.size(), |frame| {
frame.stroke(
&canvas::Path::rectangle(Point::ORIGIN, frame.size()),
@@ -139,7 +141,7 @@ impl canvas::Program<Message> for SierpinskiGraph {
});
});
- vec![geom]
+ renderer.draw_geometry([geom]);
}
}
diff --git a/examples/solar_system/src/main.rs b/examples/solar_system/src/main.rs
index b5228f09..dd36b711 100644
--- a/examples/solar_system/src/main.rs
+++ b/examples/solar_system/src/main.rs
@@ -126,11 +126,12 @@ impl<Message> canvas::Program<Message> for State {
fn draw(
&self,
_state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
_theme: &Theme,
bounds: Rectangle,
_cursor: mouse::Cursor,
- ) -> Vec<canvas::Geometry> {
+ ) {
+ use canvas::Frame;
use std::f32::consts::PI;
let background =
@@ -197,7 +198,7 @@ impl<Message> canvas::Program<Message> for State {
});
});
- vec![background, system]
+ renderer.draw_geometry([background, system]);
}
}
diff --git a/examples/vectorial_text/src/main.rs b/examples/vectorial_text/src/main.rs
index a7391e23..9f5baac8 100644
--- a/examples/vectorial_text/src/main.rs
+++ b/examples/vectorial_text/src/main.rs
@@ -124,11 +124,13 @@ impl<Message> canvas::Program<Message> for State {
fn draw(
&self,
_state: &Self::State,
- renderer: &Renderer,
+ renderer: &mut Renderer,
theme: &Theme,
bounds: Rectangle,
_cursor: mouse::Cursor,
- ) -> Vec<canvas::Geometry> {
+ ) {
+ use canvas::Frame;
+
let geometry = self.cache.draw(renderer, bounds.size(), |frame| {
let palette = theme.palette();
let center = bounds.center();
@@ -153,7 +155,7 @@ impl<Message> canvas::Program<Message> for State {
});
});
- vec![geometry]
+ renderer.draw_geometry([geometry]);
}
}