use miette::{IntoDiagnostic, Result}; use std::{fs::File, io::BufReader, path::PathBuf, sync::Arc}; use cosmic::{ iced::{ alignment::Horizontal, border, font::{Family, Stretch, Style, Weight}, Background, Border, Color, ContentFit, Font, Length, Shadow, Vector, }, iced_core::text::Span, iced_widget::{ rich_text, scrollable::{ scroll_to, AbsoluteOffset, Direction, Scrollbar, }, span, stack, text::Rich, vertical_rule, }, prelude::*, widget::{ container, horizontal_space, image, mouse_area, responsive, scrollable, text, Column, Container, Id, Row, Space, }, Task, }; use iced_video_player::{gst_pbutils, Position, Video, VideoPlayer}; use rodio::{Decoder, OutputStream, Sink}; use tracing::{debug, error, info, warn}; use url::Url; use crate::{ core::{ service_items::{Service, ServiceItem}, slide::Slide, }, ui::text_svg::{self, Font as SvgFont}, // ui::widgets::slide_text, BackgroundKind, }; const REFERENCE_WIDTH: f32 = 1920.0; const REFERENCE_HEIGHT: f32 = 1080.0; // #[derive(Default, Clone, Debug)] pub(crate) struct Presenter { pub service: Vec, pub current_slide: Slide, pub current_item: usize, pub current_slide_index: usize, pub video: Option