summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/layout/src/main.rs7
-rw-r--r--examples/screenshot/src/main.rs48
-rw-r--r--examples/solar_system/Cargo.toml2
-rw-r--r--examples/solar_system/assets/earth.pngbin0 -> 91888 bytes
-rw-r--r--examples/solar_system/assets/moon.pngbin0 -> 105100 bytes
-rw-r--r--examples/solar_system/assets/sun.pngbin0 -> 114689 bytes
-rw-r--r--examples/solar_system/src/main.rs63
-rw-r--r--examples/toast/src/main.rs4
8 files changed, 70 insertions, 54 deletions
diff --git a/examples/layout/src/main.rs b/examples/layout/src/main.rs
index f39e24f9..cb33369b 100644
--- a/examples/layout/src/main.rs
+++ b/examples/layout/src/main.rs
@@ -258,9 +258,10 @@ fn application<'a>() -> Element<'a, Message> {
scrollable(
column![
"Content!",
- square(400),
- square(200),
- square(400),
+ row((1..10).map(|i| square(if i % 2 == 0 { 80 } else { 160 })))
+ .spacing(20)
+ .align_y(Center)
+ .wrap(),
"The end"
]
.spacing(40)
diff --git a/examples/screenshot/src/main.rs b/examples/screenshot/src/main.rs
index 2d980dd9..5c105f6c 100644
--- a/examples/screenshot/src/main.rs
+++ b/examples/screenshot/src/main.rs
@@ -20,7 +20,7 @@ fn main() -> iced::Result {
#[derive(Default)]
struct Example {
- screenshot: Option<Screenshot>,
+ screenshot: Option<(Screenshot, image::Handle)>,
saved_png_path: Option<Result<String, PngError>>,
png_saving: bool,
crop_error: Option<screenshot::CropError>,
@@ -52,10 +52,17 @@ impl Example {
.map(Message::Screenshotted);
}
Message::Screenshotted(screenshot) => {
- self.screenshot = Some(screenshot);
+ self.screenshot = Some((
+ screenshot.clone(),
+ image::Handle::from_rgba(
+ screenshot.size.width,
+ screenshot.size.height,
+ screenshot.bytes,
+ ),
+ ));
}
Message::Png => {
- if let Some(screenshot) = &self.screenshot {
+ if let Some((screenshot, _handle)) = &self.screenshot {
self.png_saving = true;
return Task::perform(
@@ -81,7 +88,7 @@ impl Example {
self.height_input_value = new_value;
}
Message::Crop => {
- if let Some(screenshot) = &self.screenshot {
+ if let Some((screenshot, _handle)) = &self.screenshot {
let cropped = screenshot.crop(Rectangle::<u32> {
x: self.x_input_value.unwrap_or(0),
y: self.y_input_value.unwrap_or(0),
@@ -91,7 +98,14 @@ impl Example {
match cropped {
Ok(screenshot) => {
- self.screenshot = Some(screenshot);
+ self.screenshot = Some((
+ screenshot.clone(),
+ image::Handle::from_rgba(
+ screenshot.size.width,
+ screenshot.size.height,
+ screenshot.bytes,
+ ),
+ ));
self.crop_error = None;
}
Err(crop_error) => {
@@ -106,20 +120,16 @@ impl Example {
}
fn view(&self) -> Element<'_, Message> {
- let image: Element<Message> = if let Some(screenshot) = &self.screenshot
- {
- image(image::Handle::from_rgba(
- screenshot.size.width,
- screenshot.size.height,
- screenshot.clone(),
- ))
- .content_fit(ContentFit::Contain)
- .width(Fill)
- .height(Fill)
- .into()
- } else {
- text("Press the button to take a screenshot!").into()
- };
+ let image: Element<Message> =
+ if let Some((_screenshot, handle)) = &self.screenshot {
+ image(handle)
+ .content_fit(ContentFit::Contain)
+ .width(Fill)
+ .height(Fill)
+ .into()
+ } else {
+ text("Press the button to take a screenshot!").into()
+ };
let image = container(image)
.center_y(FillPortion(2))
diff --git a/examples/solar_system/Cargo.toml b/examples/solar_system/Cargo.toml
index ca64da14..e2c18c50 100644
--- a/examples/solar_system/Cargo.toml
+++ b/examples/solar_system/Cargo.toml
@@ -7,7 +7,7 @@ publish = false
[dependencies]
iced.workspace = true
-iced.features = ["debug", "canvas", "tokio"]
+iced.features = ["debug", "canvas", "image", "tokio"]
rand = "0.8.3"
tracing-subscriber = "0.3"
diff --git a/examples/solar_system/assets/earth.png b/examples/solar_system/assets/earth.png
new file mode 100644
index 00000000..e81321d9
--- /dev/null
+++ b/examples/solar_system/assets/earth.png
Binary files differ
diff --git a/examples/solar_system/assets/moon.png b/examples/solar_system/assets/moon.png
new file mode 100644
index 00000000..03f10cb7
--- /dev/null
+++ b/examples/solar_system/assets/moon.png
Binary files differ
diff --git a/examples/solar_system/assets/sun.png b/examples/solar_system/assets/sun.png
new file mode 100644
index 00000000..29a928a7
--- /dev/null
+++ b/examples/solar_system/assets/sun.png
Binary files differ
diff --git a/examples/solar_system/src/main.rs b/examples/solar_system/src/main.rs
index a6f1ba6f..1e74f2bd 100644
--- a/examples/solar_system/src/main.rs
+++ b/examples/solar_system/src/main.rs
@@ -7,10 +7,9 @@
//!
//! [1]: https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Basic_animations#An_animated_solar_system
use iced::mouse;
-use iced::widget::canvas;
-use iced::widget::canvas::gradient;
use iced::widget::canvas::stroke::{self, Stroke};
use iced::widget::canvas::{Geometry, Path};
+use iced::widget::{canvas, image};
use iced::window;
use iced::{
Color, Element, Fill, Point, Rectangle, Renderer, Size, Subscription,
@@ -66,6 +65,9 @@ impl SolarSystem {
#[derive(Debug)]
struct State {
+ sun: image::Handle,
+ earth: image::Handle,
+ moon: image::Handle,
space_cache: canvas::Cache,
system_cache: canvas::Cache,
start: Instant,
@@ -85,6 +87,15 @@ impl State {
let size = window::Settings::default().size;
State {
+ sun: image::Handle::from_bytes(
+ include_bytes!("../assets/sun.png").as_slice(),
+ ),
+ earth: image::Handle::from_bytes(
+ include_bytes!("../assets/earth.png").as_slice(),
+ ),
+ moon: image::Handle::from_bytes(
+ include_bytes!("../assets/moon.png").as_slice(),
+ ),
space_cache: canvas::Cache::default(),
system_cache: canvas::Cache::default(),
start: now,
@@ -132,6 +143,8 @@ impl<Message> canvas::Program<Message> for State {
let background =
self.space_cache.draw(renderer, bounds.size(), |frame| {
+ frame.fill_rectangle(Point::ORIGIN, frame.size(), Color::BLACK);
+
let stars = Path::new(|path| {
for (p, size) in &self.stars {
path.rectangle(*p, Size::new(*size, *size));
@@ -144,17 +157,18 @@ impl<Message> canvas::Program<Message> for State {
let system = self.system_cache.draw(renderer, bounds.size(), |frame| {
let center = frame.center();
+ frame.translate(Vector::new(center.x, center.y));
- let sun = Path::circle(center, Self::SUN_RADIUS);
- let orbit = Path::circle(center, Self::ORBIT_RADIUS);
+ frame.draw_image(
+ Rectangle::with_radius(Self::SUN_RADIUS),
+ &self.sun,
+ );
- frame.fill(&sun, Color::from_rgb8(0xF9, 0xD7, 0x1C));
+ let orbit = Path::circle(Point::ORIGIN, Self::ORBIT_RADIUS);
frame.stroke(
&orbit,
Stroke {
- style: stroke::Style::Solid(Color::from_rgba8(
- 0, 153, 255, 0.1,
- )),
+ style: stroke::Style::Solid(Color::WHITE.scale_alpha(0.1)),
width: 1.0,
line_dash: canvas::LineDash {
offset: 0,
@@ -168,30 +182,21 @@ impl<Message> canvas::Program<Message> for State {
let rotation = (2.0 * PI / 60.0) * elapsed.as_secs() as f32
+ (2.0 * PI / 60_000.0) * elapsed.subsec_millis() as f32;
- frame.with_save(|frame| {
- frame.translate(Vector::new(center.x, center.y));
- frame.rotate(rotation);
- frame.translate(Vector::new(Self::ORBIT_RADIUS, 0.0));
-
- let earth = Path::circle(Point::ORIGIN, Self::EARTH_RADIUS);
-
- let earth_fill = gradient::Linear::new(
- Point::new(-Self::EARTH_RADIUS, 0.0),
- Point::new(Self::EARTH_RADIUS, 0.0),
- )
- .add_stop(0.2, Color::from_rgb(0.15, 0.50, 1.0))
- .add_stop(0.8, Color::from_rgb(0.0, 0.20, 0.47));
+ frame.rotate(rotation);
+ frame.translate(Vector::new(Self::ORBIT_RADIUS, 0.0));
- frame.fill(&earth, earth_fill);
+ frame.draw_image(
+ Rectangle::with_radius(Self::EARTH_RADIUS),
+ canvas::Image::new(&self.earth).rotation(-rotation * 20.0),
+ );
- frame.with_save(|frame| {
- frame.rotate(rotation * 10.0);
- frame.translate(Vector::new(0.0, Self::MOON_DISTANCE));
+ frame.rotate(rotation * 10.0);
+ frame.translate(Vector::new(0.0, Self::MOON_DISTANCE));
- let moon = Path::circle(Point::ORIGIN, Self::MOON_RADIUS);
- frame.fill(&moon, Color::WHITE);
- });
- });
+ frame.draw_image(
+ Rectangle::with_radius(Self::MOON_RADIUS),
+ &self.moon,
+ );
});
vec![background, system]
diff --git a/examples/toast/src/main.rs b/examples/toast/src/main.rs
index 040c19bd..8f6a836e 100644
--- a/examples/toast/src/main.rs
+++ b/examples/toast/src/main.rs
@@ -347,7 +347,7 @@ mod toast {
state: &mut Tree,
layout: Layout<'_>,
renderer: &Renderer,
- operation: &mut dyn Operation<()>,
+ operation: &mut dyn Operation,
) {
operation.container(None, layout.bounds(), &mut |operation| {
self.content.as_widget().operate(
@@ -589,7 +589,7 @@ mod toast {
&mut self,
layout: Layout<'_>,
renderer: &Renderer,
- operation: &mut dyn widget::Operation<()>,
+ operation: &mut dyn widget::Operation,
) {
operation.container(None, layout.bounds(), &mut |operation| {
self.toasts