working preview bar of all slides

This commit is contained in:
Chris Cochrun 2024-12-06 21:49:19 -06:00
parent f1c80215ae
commit 6ec2e1b97b
2 changed files with 34 additions and 17 deletions

View file

@ -550,6 +550,7 @@ impl cosmic::Application for App {
.slide_preview() .slide_preview()
.map(|m| Message::Present(m)) .map(|m| Message::Present(m))
) )
.clip(true)
.width(Length::Fill) .width(Length::Fill)
.center_y(100) .center_y(100)
]; ];

View file

@ -7,11 +7,15 @@ use cosmic::{
widget::text, widget::text,
Background, Color, ContentFit, Font, Length, Background, Color, ContentFit, Font, Length,
}, },
iced_widget::stack, iced_widget::{
scrollable::{Direction, Scrollbar},
stack,
},
prelude::*, prelude::*,
widget::{ widget::{
canvas::path::lyon_path::geom::euclid::num::Floor, container, canvas::path::lyon_path::geom::euclid::num::Floor, container,
image, Container, Responsive, Row, Space, image, mouse_area, scrollable, Container, Responsive, Row,
Space,
}, },
Task, Task,
}; };
@ -92,9 +96,8 @@ impl Presenter {
debug!("no more slides"); debug!("no more slides");
return Task::none(); return Task::none();
} }
self.current_slide_index += 1;
self.update(Message::SlideChange( self.update(Message::SlideChange(
self.current_slide_index, self.current_slide_index + 1,
)) ))
} }
Message::PrevSlide => { Message::PrevSlide => {
@ -103,13 +106,13 @@ impl Presenter {
debug!("beginning slides"); debug!("beginning slides");
return Task::none(); return Task::none();
} }
self.current_slide_index -= 1;
self.update(Message::SlideChange( self.update(Message::SlideChange(
self.current_slide_index, self.current_slide_index - 1,
)) ))
} }
Message::SlideChange(id) => { Message::SlideChange(id) => {
debug!(id, "slide changed"); debug!(id, "slide changed");
self.current_slide_index = id;
if let Some(slide) = self.slides.get(id as usize) { if let Some(slide) = self.slides.get(id as usize) {
self.current_slide = slide.clone(); self.current_slide = slide.clone();
} }
@ -185,8 +188,6 @@ impl Presenter {
} else { } else {
50.0 50.0
}; };
debug!(size.width);
debug!(font_size);
let text = text(self.current_slide.text()) let text = text(self.current_slide.text())
.size(font_size) .size(font_size)
.font(font); .font(font);
@ -234,12 +235,17 @@ impl Presenter {
pub fn slide_preview(&self) -> Element<Message> { pub fn slide_preview(&self) -> Element<Message> {
let mut items = vec![]; let mut items = vec![];
for slide in self.slides.iter() { for slide in self.slides.iter() {
items.push(Self::slide_delegate(slide)); items.push(self.slide_delegate(slide));
} }
Row::from_vec(items).spacing(10).padding(10).into() let row =
scrollable(Row::from_vec(items).spacing(10).padding(10))
.direction(Direction::Horizontal(Scrollbar::new()))
.height(Length::Fill)
.width(Length::Fill);
row.into()
} }
fn slide_delegate(slide: &Slide) -> Element<Message> { fn slide_delegate(&self, slide: &Slide) -> Element<Message> {
let font_size = if slide.font_size() > 0 { let font_size = if slide.font_size() > 0 {
slide.font_size() as u16 slide.font_size() as u16
} else { } else {
@ -262,13 +268,23 @@ impl Presenter {
Container::new(Space::new(Length::Fill, Length::Fill)) Container::new(Space::new(Length::Fill, Length::Fill))
} }
}; };
let delegate = mouse_area(
Container::new( Container::new(
stack!(container.center(Length::Fill), text) stack!(container.center(Length::Fill), text)
.width(Length::Fill) .width(Length::Fill)
.height(Length::Fill), .height(Length::Fill),
) )
.padding(10) .center(Length::Fill)
.into() .height(100)
.width(100)
.padding(10),
)
.on_press({
let id =
self.slides.iter().position(|s| s == slide).unwrap();
Message::SlideChange(id as u16)
});
delegate.into()
} }
fn reset_video(&mut self) { fn reset_video(&mut self) {