summaryrefslogtreecommitdiffstats
path: root/examples/screenshot
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-08-03 16:20:12 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-08-03 16:20:12 +0200
commite84070acef84f883ca42d965c577e54ce60c3f2a (patch)
tree83b5f9ff06e59784ccd34a0ad6ffae871c0e4f62 /examples/screenshot
parent169667ef1b4fa754ed1edb5fa0e845aede2638fb (diff)
downloadiced-e84070acef84f883ca42d965c577e54ce60c3f2a.tar.gz
iced-e84070acef84f883ca42d965c577e54ce60c3f2a.tar.bz2
iced-e84070acef84f883ca42d965c577e54ce60c3f2a.zip
Implement `From<&Handle>` for `image::Handle`
Diffstat (limited to 'examples/screenshot')
-rw-r--r--examples/screenshot/src/main.rs48
1 files changed, 29 insertions, 19 deletions
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))