examples/sctk_subsurface_img: Toggle image/subsurface with key
This commit is contained in:
parent
58f6ea3f08
commit
7a1f8b3472
1 changed files with 37 additions and 10 deletions
|
|
@ -4,7 +4,7 @@ use iced::{
|
||||||
self, Shmbuf, SubsurfaceBuffer,
|
self, Shmbuf, SubsurfaceBuffer,
|
||||||
},
|
},
|
||||||
window::{self, Id, Settings},
|
window::{self, Id, Settings},
|
||||||
Element, Length, Subscription, Task,
|
Element, Subscription, Task,
|
||||||
};
|
};
|
||||||
use image::{ImageReader, Pixel};
|
use image::{ImageReader, Pixel};
|
||||||
use rustix::{io::Errno, shm::ShmOFlags};
|
use rustix::{io::Errno, shm::ShmOFlags};
|
||||||
|
|
@ -41,11 +41,13 @@ fn main() -> iced::Result {
|
||||||
struct SubsurfaceApp {
|
struct SubsurfaceApp {
|
||||||
path: String,
|
path: String,
|
||||||
buffer: SubsurfaceBuffer,
|
buffer: SubsurfaceBuffer,
|
||||||
|
use_subsurface: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum Message {
|
pub enum Message {
|
||||||
Id(Id),
|
Id(Id),
|
||||||
|
Toggle,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SubsurfaceApp {
|
impl SubsurfaceApp {
|
||||||
|
|
@ -71,7 +73,11 @@ impl SubsurfaceApp {
|
||||||
let buffer = SubsurfaceBuffer::new(Arc::new(shmbuf.into())).0;
|
let buffer = SubsurfaceBuffer::new(Arc::new(shmbuf.into())).0;
|
||||||
|
|
||||||
(
|
(
|
||||||
SubsurfaceApp { path, buffer },
|
SubsurfaceApp {
|
||||||
|
path,
|
||||||
|
buffer,
|
||||||
|
use_subsurface: true,
|
||||||
|
},
|
||||||
iced::window::open(Settings {
|
iced::window::open(Settings {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
|
|
@ -87,23 +93,44 @@ impl SubsurfaceApp {
|
||||||
fn update(&mut self, message: Message) -> Task<Message> {
|
fn update(&mut self, message: Message) -> Task<Message> {
|
||||||
match message {
|
match message {
|
||||||
Message::Id(_) => {}
|
Message::Id(_) => {}
|
||||||
|
Message::Toggle => {
|
||||||
|
self.use_subsurface = !self.use_subsurface;
|
||||||
|
if self.use_subsurface {
|
||||||
|
println!("Using subsurface");
|
||||||
|
} else {
|
||||||
|
println!("Using image widget");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Task::none()
|
Task::none()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn view(&self, _id: window::Id) -> Element<Message> {
|
fn view(&self, _id: window::Id) -> Element<Message> {
|
||||||
// TODO compare side-by-side with image widget; key bind to toggle?
|
let image: Element<_> = if self.use_subsurface {
|
||||||
let image = subsurface_widget::Subsurface::new(self.buffer.clone())
|
subsurface_widget::Subsurface::new(self.buffer.clone())
|
||||||
.content_fit(iced::ContentFit::None);
|
.content_fit(iced::ContentFit::None)
|
||||||
/*
|
.into()
|
||||||
let image = iced::widget::image::Image::new(&self.path)
|
} else {
|
||||||
.content_fit(iced::ContentFit::None);
|
iced::widget::image::Image::new(&self.path)
|
||||||
*/
|
.content_fit(iced::ContentFit::None)
|
||||||
|
.into()
|
||||||
|
};
|
||||||
iced::widget::scrollable(image).into()
|
iced::widget::scrollable(image).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn subscription(&self) -> Subscription<Message> {
|
fn subscription(&self) -> Subscription<Message> {
|
||||||
Subscription::none()
|
iced::event::listen_with(|evt, _status, _id| match evt {
|
||||||
|
iced::Event::Keyboard(iced::keyboard::Event::KeyReleased {
|
||||||
|
key,
|
||||||
|
..
|
||||||
|
}) => match key {
|
||||||
|
iced::keyboard::Key::Named(
|
||||||
|
iced::keyboard::key::Named::Space,
|
||||||
|
) => Some(Message::Toggle),
|
||||||
|
_ => None,
|
||||||
|
},
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue