switching to using cosmic's version of video_player
This commit is contained in:
parent
c87f4b2cdc
commit
06debe1cc8
4 changed files with 444 additions and 13 deletions
36
src/main.rs
36
src/main.rs
|
@ -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;
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue