switching to using cosmic's version of video_player

This commit is contained in:
Chris Cochrun 2024-11-02 04:47:07 -05:00
parent c87f4b2cdc
commit 06debe1cc8
4 changed files with 444 additions and 13 deletions

View file

@ -65,7 +65,6 @@ fn theme(_state: &App) -> Theme {
Theme::dark()
}
#[derive(Default)]
struct App {
core: Core,
nav_model: nav_bar::Model,
@ -74,6 +73,25 @@ struct App {
windows: Vec<window::Id>,
}
impl Default for App {
fn default() -> Self {
let initial_slide = SlideBuilder::new()
.background(PathBuf::from("/home/chris/vids/test/camprules2024.mp4"))
.expect("oops video")
.text("Hello")
.build()
.expect("oops slide");
let presenter = Presenter::with_initial_slide(initial_slide);
Self {
presenter,
core: Core::default(),
nav_model: nav_bar::Model::default(),
file: PathBuf::default(),
windows: vec![],
}
}
}
#[derive(Debug, Clone)]
enum Message {
Present(presenter::Message),
@ -107,12 +125,26 @@ impl cosmic::Application for App {
if input.ui {
windows.push(core.main_window_id().unwrap());
}
let initial_slide = SlideBuilder::new()
.background(PathBuf::from("/home/chris/vids/test/camprules2024.mp4"))
.expect("oops video")
.text("Hello")
.font("Quicksand")
.font_size(50)
.text_alignment(TextAlignment::MiddleCenter)
.video_loop(true)
.video_start_time(0.0)
.video_end_time(0.0)
.build()
.expect("oops slide");
let presenter = Presenter::with_initial_slide(initial_slide);
let mut app = App {
core,
nav_model,
file: input.file,
windows,
..Default::default()
presenter,
};
let command;

View file

@ -1,17 +1,22 @@
use cosmic::{
dialog::ashpd::url::Url,
iced::{widget::text, ContentFit, Length},
iced_widget::stack,
prelude::*,
widget::{image, Container},
Task,
};
use tracing::debug;
use iced_video_player::{Video, VideoPlayer};
use miette::{Context, IntoDiagnostic};
use tracing::{debug, error};
use crate::core::slide::Slide;
#[derive(Default, Clone, Debug)]
// #[derive(Default, Clone, Debug)]
pub(crate) struct Presenter {
slides: Vec<Slide>,
current_slide: i16,
video: Video,
}
#[derive(Debug, Clone, PartialEq, Eq)]
@ -22,6 +27,24 @@ pub(crate) enum Message {
}
impl Presenter {
pub fn with_initial_slide(slide: Slide) -> Self {
Self {
slides: vec![slide],
current_slide: 0,
video: {
let url = Url::from_file_path("/home/chris/vids/test/camprules2024.mp4").unwrap();
let result = Video::new(&url);
match result {
Ok(v) => v,
Err(e) => {
// let root = e.source();
panic!("Error here: {e}")
}
}
},
}
}
pub fn update(&mut self, message: Message) -> Task<cosmic::app::Message<Message>> {
match message {
Message::NextSlide => {
@ -42,7 +65,6 @@ impl Presenter {
pub fn view(&self) -> Element<Message> {
// let window = self.windows.iter().position(|w| *w == id).unwrap();
// if let Some(_window) = self.windows.get(window) {}
// let video = Video::new(&Url::parse("/home/chris/vids/test/camprules2024.mp4").unwrap())
let text = text!("This is frodo").size(50);
let text = Container::new(text).center(Length::Fill);
let image = Container::new(
@ -51,10 +73,14 @@ impl Presenter {
.width(Length::Fill)
.height(Length::Fill),
);
// let video = Container::new(VideoPlayer::new(&video))
// .width(Length::Fill)
// .height(Length::Fill);
let stack = stack!(image, text).width(Length::Fill).height(Length::Fill);
let video = Container::new(
VideoPlayer::new(&self.video)
.width(Length::Fill)
.height(Length::Fill),
);
let stack = stack!(image, video, text)
.width(Length::Fill)
.height(Length::Fill);
stack.into()
}
}