beginning the switch... lots to go yet
Some checks are pending
/ test (push) Waiting to run

This commit is contained in:
Chris Cochrun 2025-08-26 09:44:06 -05:00
parent 15b5966108
commit c886d18134
15 changed files with 2123 additions and 1563 deletions

3226
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,7 @@ description = "A cli presentation system"
[dependencies]
clap = { version = "4.5.20", features = ["debug", "derive"] }
libcosmic = { git = "https://github.com/pop-os/libcosmic", default-features = false, features = ["debug", "winit", "desktop", "winit_wgpu", "winit_tokio", "tokio", "rfd", "dbus-config", "a11y", "wgpu", "multi-window"] }
# libcosmic = { git = "https://github.com/pop-os/libcosmic", default-features = false, features = ["debug", "winit", "desktop", "winit_wgpu", "winit_tokio", "tokio", "rfd", "dbus-config", "a11y", "wgpu", "multi-window"] }
lexpr = "0.2.7"
miette = { version = "7.2.0", features = ["fancy"] }
pretty_assertions = "1.4.1"
@ -37,12 +37,17 @@ rayon = "1.11.0"
# femtovg = { version = "0.16.0", features = ["wgpu"] }
# wgpu = "26.0.1"
# mupdf = "0.5.0"
# rfd = { version = "0.12.1", features = ["xdg-portal"], default-features = false }
rfd = { version = "0.12.1", features = ["xdg-portal"], default-features = false }
[dependencies.iced]
git = "https://github.com/iced-rs/iced"
branch = "master"
features = ["wgpu", "image", "advanced", "svg", "canvas", "hot", "debug", "lazy", "tokio"]
[dependencies.iced_video_player]
git = "https://github.com/jackpot51/iced_video_player.git"
branch = "cosmic"
features = ["wgpu"]
git = "https://github.com/jazzfool/iced_video_player.git"
branch = "master"
# branch = "cosmic"
# [profile.dev]
# opt-level = 3

View file

@ -1,6 +1,6 @@
use std::mem::replace;
use cosmic::iced::Executor;
use iced::iced::Executor;
use miette::{miette, Result};
use sqlx::{Connection, SqliteConnection};

View file

@ -3,8 +3,8 @@ use std::cmp::Ordering;
use std::ops::Deref;
use std::sync::Arc;
use cosmic::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes};
use crisp::types::{Keyword, Symbol, Value};
use iced::iced::clipboard::mime::{AllowedMimeTypes, AsMimeTypes};
use miette::Result;
use tracing::{debug, error};

View file

@ -1,4 +1,4 @@
// use cosmic::dialog::ashpd::url::Url;
// use iced::dialog::ashpd::url::Url;
use crisp::types::{Keyword, Symbol, Value};
use iced_video_player::Video;
use miette::{miette, Result};

View file

@ -1,7 +1,7 @@
use std::{collections::HashMap, option::Option, path::PathBuf};
use cosmic::iced::Executor;
use crisp::types::{Keyword, Symbol, Value};
use iced::iced::Executor;
use miette::{miette, IntoDiagnostic, Result};
use serde::{Deserialize, Serialize};
use sqlx::{

View file

@ -7,8 +7,8 @@ use super::{
service_items::ServiceTrait,
slide::Slide,
};
use cosmic::iced::Executor;
use crisp::types::{Keyword, Symbol, Value};
use iced::iced::Executor;
use miette::{IntoDiagnostic, Result};
use serde::{Deserialize, Serialize};
use sqlx::{

View file

@ -2,32 +2,25 @@ use clap::{command, Parser};
use core::service_items::ServiceItem;
use core::slide::*;
use core::songs::Song;
use cosmic::app::context_drawer::ContextDrawer;
use cosmic::app::{Core, Settings, Task};
use cosmic::iced::keyboard::{Key, Modifiers};
use cosmic::iced::window::{Mode, Position};
use cosmic::iced::{self, event, window, Length, Padding, Point};
use cosmic::iced_futures::Subscription;
use cosmic::iced_widget::{column, row};
use cosmic::widget::dnd_destination::{
dnd_destination, dnd_destination_for_data,
};
use cosmic::widget::nav_bar::nav_bar_style;
use cosmic::widget::segmented_button::Entity;
use cosmic::widget::text;
use cosmic::widget::tooltip::Position as TPosition;
use cosmic::widget::{
button, horizontal_space, nav_bar, search_input, tooltip,
vertical_space, Space,
};
use cosmic::widget::{icon, slider};
use cosmic::{executor, Application, ApplicationExt, Element};
use cosmic::{prelude::*, theme};
use cosmic::{widget::Container, Theme};
use crisp::types::Value;
use iced::keyboard::{Key, Modifiers};
use iced::theme::{self, Palette};
use iced::widget::tooltip::Position as TPosition;
use iced::widget::{
button, horizontal_space, slider, text, tooltip, vertical_space,
Space,
};
use iced::widget::{column, row};
use iced::window::{Mode, Position};
use iced::{self, event, window, Length, Padding, Point};
use iced::{color, Subscription};
use iced::{executor, Application, Element};
use iced::{widget::Container, Theme};
use iced::{Settings, Task};
use lisp::parse_lisp;
use miette::{miette, Result};
use rayon::prelude::*;
use std::collections::BTreeMap;
use std::fs::read_to_string;
use std::path::PathBuf;
use tracing::{debug, level_filters::LevelFilter};
@ -86,20 +79,19 @@ fn main() -> Result<()> {
.is_daemon(true);
}
cosmic::app::run::<App>(settings, args)
iced::daemon(move || App::init(args), App::update, App::view)
.settings(settings)
.subscription(App::subsrciption)
.theme(App::theme)
.title(App::title)
.run()
.map_err(|e| miette!("Invalid things... {}", e))
}
fn theme(_state: &App) -> Theme {
Theme::dark()
}
struct App {
core: Core,
nav_model: nav_bar::Model,
file: PathBuf,
presenter: Presenter,
windows: Vec<window::Id>,
windows: BTreeMap<window::Id, Window>,
service: Vec<ServiceItem>,
current_item: (usize, usize),
presentation_open: bool,
@ -119,7 +111,7 @@ enum Message {
Library(library::Message),
SongEditor(song_editor::Message),
File(PathBuf),
DndEnter(Entity, Vec<String>),
DndEnter(Vec<String>),
DndDrop,
OpenWindow,
CloseWindow(Option<window::Id>),
@ -130,7 +122,7 @@ enum Message {
Quit,
Key(Key, Modifiers),
None,
DndLeave(Entity),
DndLeave(),
EditorToggle(bool),
SearchFocus,
ChangeServiceItem(usize),
@ -139,30 +131,42 @@ enum Message {
AppendServiceItem(ServiceItem),
}
#[derive(Debug)]
struct Window {
title: String,
scale_input: String,
current_scale: f64,
theme: Theme,
}
impl Default for Window {
fn default() -> Self {
Self {
title: Default::default(),
scale_input: Default::default(),
current_scale: Default::default(),
theme: App::theme(),
}
}
}
const HEADER_SPACE: u16 = 6;
impl cosmic::Application for App {
type Executor = executor::Default;
type Flags = Cli;
type Message = Message;
impl App {
const APP_ID: &'static str = "lumina";
fn core(&self) -> &Core {
&self.core
}
fn core_mut(&mut self) -> &mut Core {
&mut self.core
}
fn init(
core: Core,
input: Self::Flags,
) -> (Self, Task<Self::Message>) {
fn init(input: Cli) -> (Self, Task<Self::Message>) {
debug!("init");
let nav_model = nav_bar::Model::default();
let mut windows = vec![];
let mut batch = vec![];
let mut windows = BTreeMap::new();
if input.ui {
windows.push(core.main_window_id().unwrap());
let settings = window::Settings {
..Default::default()
};
let (id, open) = window::open(settings);
batch.push(open);
windows.insert(id, Window::default());
}
let items = match read_to_string(input.file) {
@ -202,8 +206,6 @@ impl cosmic::Application for App {
let mut app = App {
presenter,
core,
nav_model,
service: items,
file: PathBuf::default(),
windows,
@ -219,8 +221,6 @@ impl cosmic::Application for App {
library_dragged_item: None,
};
let mut batch = vec![];
if input.ui {
debug!("main view");
batch.push(app.update_title())
@ -235,39 +235,34 @@ impl cosmic::Application for App {
(app, batch)
}
/// Allows COSMIC to integrate with your application's [`nav_bar::Model`].
fn nav_model(&self) -> Option<&nav_bar::Model> {
Some(&self.nav_model)
}
fn nav_bar(&self) -> Option<Element<cosmic::Action<Message>>> {
fn nav_bar(&self) -> Option<Element<Message>> {
if !self.core().nav_bar_active() {
return None;
}
// let nav_model = self.nav_model()?;
// let mut nav = cosmic::widget::nav_bar(nav_model, |id| {
// cosmic::Action::Cosmic(cosmic::app::Action::NavBar(id))
// let mut nav = iced::widget::nav_bar(nav_model, |id| {
// iced::Action::Iced(iced::app::Action::NavBar(id))
// })
// .on_dnd_drop::<ServiceItem>(|entity, data, action| {
// debug!(?entity);
// debug!(?data);
// debug!(?action);
// cosmic::Action::App(Message::DndDrop)
// iced::Action::App(Message::DndDrop)
// })
// .on_dnd_enter(|entity, data| {
// debug!("entered");
// cosmic::Action::App(Message::DndEnter(entity, data))
// iced::Action::App(Message::DndEnter(entity, data))
// })
// .on_dnd_leave(|entity| {
// debug!("left");
// cosmic::Action::App(Message::DndLeave(entity))
// iced::Action::App(Message::DndLeave(entity))
// })
// .drag_id(DragId::new())
// .on_context(|id| {
// cosmic::Action::Cosmic(
// cosmic::app::Action::NavBarContext(id),
// iced::Action::Iced(
// iced::app::Action::NavBarContext(id),
// )
// })
// .context_menu(None)
@ -301,30 +296,30 @@ impl cosmic::Application for App {
},
}
})
.class(cosmic::theme::style::Button::HeaderBar)
.class(iced::theme::style::Button::HeaderBar)
.padding(5)
.width(Length::Fill)
.on_press(cosmic::Action::App(Message::ChangeServiceItem(index)));
.on_press(iced::Action::App(Message::ChangeServiceItem(index)));
let tooltip = tooltip(button,
text::body(item.kind.to_string()),
TPosition::Right);
dnd_destination(tooltip, vec!["application/service-item".into()])
.data_received_for::<ServiceItem>( move |item| {
if let Some(item) = item {
cosmic::Action::App(Message::AddServiceItem(index, item))
iced::Action::App(Message::AddServiceItem(index, item))
} else {
cosmic::Action::None
iced::Action::None
}
}).on_drop(move |x, y| {
debug!(x, y);
cosmic::Action::App(Message::AddServiceItemDrop(index))
iced::Action::App(Message::AddServiceItemDrop(index))
}).on_finish(move |mime, data, action, x, y| {
debug!(mime, ?data, ?action, x, y);
let Ok(item) = ServiceItem::try_from((data, mime)) else {
return cosmic::Action::None;
return iced::Action::None;
};
debug!(?item);
cosmic::Action::App(Message::AddServiceItem(index, item))
iced::Action::App(Message::AddServiceItem(index, item))
})
.into()
});
@ -339,11 +334,11 @@ impl cosmic::Application for App {
)
.data_received_for::<ServiceItem>(|item| {
if let Some(item) = item {
cosmic::Action::App(Message::AppendServiceItem(
iced::Action::App(Message::AppendServiceItem(
item,
))
} else {
cosmic::Action::None
iced::Action::None
}
})
.on_finish(
@ -352,10 +347,10 @@ impl cosmic::Application for App {
let Ok(item) =
ServiceItem::try_from((data, mime))
else {
return cosmic::Action::None;
return iced::Action::None;
};
debug!(?item);
cosmic::Action::App(Message::AddServiceItem(
iced::Action::App(Message::AddServiceItem(
end_index, item,
))
}
@ -375,16 +370,6 @@ impl cosmic::Application for App {
Some(container.into())
}
/// Called when a navigation item is selected.
fn on_nav_select(
&mut self,
id: nav_bar::Id,
) -> Task<Self::Message> {
self.nav_model.activate(id);
// debug!(?id);
self.update_title()
}
fn header_start(&self) -> Vec<Element<Self::Message>> {
vec![]
}
@ -429,7 +414,7 @@ impl cosmic::Application for App {
)
.spacing(5),
)
.class(cosmic::theme::style::Button::HeaderBar)
.class(iced::theme::style::Button::HeaderBar)
.on_press(Message::EditorToggle(
self.editor_mode.is_none(),
)),
@ -454,7 +439,7 @@ impl cosmic::Application for App {
)
.spacing(5),
)
.class(cosmic::theme::style::Button::HeaderBar)
.class(iced::theme::style::Button::HeaderBar)
.on_press({
if self.presentation_open {
Message::CloseWindow(
@ -483,7 +468,7 @@ impl cosmic::Application for App {
)
.spacing(5),
)
.class(cosmic::theme::style::Button::HeaderBar)
.class(iced::theme::style::Button::HeaderBar)
.on_press(Message::LibraryToggle),
"Open Library",
TPosition::Bottom,
@ -556,9 +541,8 @@ impl cosmic::Application for App {
fn context_drawer(
&self,
) -> Option<
cosmic::app::context_drawer::ContextDrawer<Self::Message>,
> {
) -> Option<iced::app::context_drawer::ContextDrawer<Self::Message>>
{
ContextDrawer {
title: Some("Context".into()),
header_actions: vec![],
@ -588,9 +572,7 @@ impl cosmic::Application for App {
match self.song_editor.update(message) {
song_editor::Action::Task(task) => {
task.map(|m| {
cosmic::Action::App(Message::SongEditor(
m,
))
iced::Action::App(Message::SongEditor(m))
})
}
song_editor::Action::UpdateSong(song) => {
@ -615,7 +597,7 @@ impl cosmic::Application for App {
match self.presenter.update(message) {
presenter::Action::Task(task) => task.map(|m| {
// debug!("Should run future");
cosmic::Action::App(Message::Present(m))
iced::Action::App(Message::Present(m))
}),
presenter::Action::None => Task::none(),
presenter::Action::NextSlide => {
@ -644,7 +626,7 @@ impl cosmic::Application for App {
match action {
presenter::Action::Task(task) => {
tasks.push(task.map(|m| {
cosmic::Action::App(
iced::Action::App(
Message::Present(m),
)
}))
@ -665,16 +647,15 @@ impl cosmic::Application for App {
match action {
presenter::Action::Task(
task,
) => {
tasks
.push(task.map(|m| {
cosmic::Action::App(
) => tasks.push(task.map(
|m| {
iced::Action::App(
Message::Present(
m,
),
)
}))
}
},
)),
_ => todo!(),
}
}
@ -703,7 +684,7 @@ impl cosmic::Application for App {
match action {
presenter::Action::Task(task) => {
tasks.push(task.map(|m| {
cosmic::Action::App(
iced::Action::App(
Message::Present(m),
)
}))
@ -739,16 +720,15 @@ impl cosmic::Application for App {
match action {
presenter::Action::Task(
task,
) => {
tasks
.push(task.map(|m| {
cosmic::Action::App(
) => tasks.push(task.map(
|m| {
iced::Action::App(
Message::Present(
m,
),
)
}))
}
},
)),
_ => todo!(),
}
}
@ -769,7 +749,7 @@ impl cosmic::Application for App {
}
library::Action::Task(task) => {
return task.map(|message| {
cosmic::Action::App(Message::Library(
iced::Action::App(Message::Library(
message,
))
});
@ -834,9 +814,7 @@ impl cosmic::Application for App {
);
spawn_window.map(|id| {
cosmic::Action::App(Message::WindowOpened(
id, None,
))
iced::Action::App(Message::WindowOpened(id, None))
})
}
Message::CloseWindow(id) => {
@ -849,7 +827,7 @@ impl cosmic::Application for App {
Message::WindowOpened(id, _) => {
debug!(?id, "Window opened");
if self.cli_mode
|| id > self.core.main_window_id().expect("Cosmic core seems to be missing a main window, was this started in cli mode?")
|| id > self.core.main_window_id().expect("Iced core seems to be missing a main window, was this started in cli mode?")
{
self.presentation_open = true;
if let Some(video) = &mut self.presenter.video {
@ -884,7 +862,7 @@ impl cosmic::Application for App {
self.library_open = !self.library_open;
Task::none()
}
Message::Quit => cosmic::iced::exit(),
Message::Quit => iced::iced::exit(),
Message::DndEnter(entity, data) => {
debug!(?entity);
debug!(?data);
@ -1106,7 +1084,7 @@ impl cosmic::Application for App {
impl App
where
Self: cosmic::Application,
Self: iced::Application,
{
fn active_page_title(&self) -> &str {
let Some(label) =
@ -1135,13 +1113,13 @@ where
self.windows.push(id);
_ = self.set_window_title("Lumina Presenter".to_owned(), id);
spawn_window.map(|id| {
cosmic::Action::App(Message::WindowOpened(id, None))
iced::Action::App(Message::WindowOpened(id, None))
})
}
fn add_library(&mut self) -> Task<Message> {
Task::perform(async move { Library::new().await }, |x| {
cosmic::Action::App(Message::AddLibrary(x))
iced::Action::App(Message::AddLibrary(x))
})
}
@ -1163,7 +1141,7 @@ where
// |x| {
// let len = x.len();
// debug!(len, "to append: ");
// cosmic::Action::App(Message::AppendService(x))
// iced::Action::App(Message::AppendService(x))
// },
// )
// }
@ -1212,6 +1190,20 @@ where
_ => Task::none(),
}
}
fn theme() -> Theme {
Theme::custom(
"Snazzy",
Palette {
background: color!(0x282a36),
text: color!(0xe2e4e5),
primary: color!(0x57c7ff),
success: color!(0x5af78e),
warning: color!(0xff9f43),
danger: color!(0xff5c57),
},
)
}
}
#[cfg(test)]

View file

@ -1,6 +1,6 @@
use std::ops::RangeInclusive;
use cosmic::iced::Length;
use iced::Length;
struct DoubleSlider<'a, T, Message> {
range: RangeInclusive<T>,

View file

@ -1,17 +1,14 @@
use cosmic::{
iced::{
alignment::Vertical, clipboard::dnd::DndAction,
futures::FutureExt, Background, Border, Color, Length,
},
iced_core::widget::tree::State,
iced_widget::{column, row as rowm, text as textm},
use iced::{
advanced::widget::{tree::State, Widget},
alignment::Vertical,
futures::FutureExt,
theme,
widget::{
button, container, horizontal_space, icon, mouse_area,
responsive, row, scrollable, text, text_input, Container,
DndSource, Space, Widget,
button, container, horizontal_space, mouse_area, responsive,
row, scrollable, text, text_input, Container, Space,
},
Element, Task,
widget::{column, row as rowm, text as textm},
Background, Border, Color, Element, Length, Task,
};
use miette::{IntoDiagnostic, Result};
use sqlx::{pool::PoolConnection, Sqlite, SqlitePool};
@ -332,19 +329,21 @@ impl<'a> Library {
match self.library_hovered {
Some(lib) => Background::Color(
if lib == model.kind {
t.cosmic().button.hover.into()
t.iced().button.hover.into()
} else {
t.cosmic().button.base.into()
t.iced().button.base.into()
},
),
None => Background::Color(
t.cosmic().button.base.into(),
t.iced().button.base.into(),
),
}
})
.border(Border::default().rounded(
t.cosmic().corner_radii.radius_s,
))
.border(
Border::default().rounded(
t.iced().corner_radii.radius_s,
),
)
})
.center_x(Length::Fill)
.center_y(Length::Shrink);
@ -456,12 +455,9 @@ impl<'a> Library {
.center_x(Length::Fill);
let subtext = container(responsive(|size| {
let color: Color = if item.background().is_some() {
theme::active().cosmic().accent_text_color().into()
theme::active().iced().accent_text_color().into()
} else {
theme::active()
.cosmic()
.destructive_text_color()
.into()
theme::active().iced().destructive_text_color().into()
};
text::body(elide_text(item.subtext(), size.width))
.center()
@ -490,9 +486,9 @@ impl<'a> Library {
if model.kind == library
&& selected == index as i32
{
t.cosmic().accent.selected.into()
t.iced().accent.selected.into()
} else {
t.cosmic().button.base.into()
t.iced().button.base.into()
}
} else if let Some((library, hovered)) =
self.hovered_item
@ -500,17 +496,17 @@ impl<'a> Library {
if model.kind == library
&& hovered == index as i32
{
t.cosmic().button.hover.into()
t.iced().button.hover.into()
} else {
t.cosmic().button.base.into()
t.iced().button.base.into()
}
} else {
t.cosmic().button.base.into()
t.iced().button.base.into()
},
))
.border(
Border::default()
.rounded(t.cosmic().corner_radii.radius_m),
.rounded(t.iced().corner_radii.radius_m),
)
})
.into()

View file

@ -1,29 +1,25 @@
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,
use iced::{
alignment::Horizontal,
border,
font::{Family, Stretch, Style, Weight},
widget::{
container, image, mouse_area, responsive, scrollable, text,
Column, Container, Row, Space,
},
iced_widget::{
widget::{
rich_text,
scrollable::{
scroll_to, AbsoluteOffset, Direction, Scrollbar,
},
span, stack, vertical_rule,
},
prelude::*,
widget::{
container, image, mouse_area, responsive, scrollable, text,
Column, Container, Id, Row, Space,
},
Task,
Background, Border, Color, ContentFit, Font, Length, Shadow,
Task, Vector,
};
use iced_video_player::{gst_pbutils, Position, Video, VideoPlayer};
use iced_video_player::{Position, Video, VideoPlayer};
use rodio::{Decoder, OutputStream, Sink};
use tracing::{debug, error, info, warn};
use url::Url;
@ -168,7 +164,7 @@ impl Presenter {
)
},
scroll_id: Id::unique(),
current_font: cosmic::font::default(),
current_font: iced::font::default(),
}
}
@ -449,7 +445,7 @@ impl Presenter {
.style(move |t| {
let mut style =
container::Style::default();
let theme = t.cosmic();
let theme = t.iced();
let hovered = self.hovered_slide
== Some((
item_index,
@ -504,7 +500,7 @@ impl Presenter {
.padding(10),
)
.interaction(
cosmic::iced::mouse::Interaction::Pointer,
iced::iced::mouse::Interaction::Pointer,
)
.on_move(move |_| {
Message::HoveredSlide(Some((
@ -578,7 +574,7 @@ impl Presenter {
// Container::new(container)
// .style(move |t| {
// let mut style = container::Style::default();
// let theme = t.cosmic();
// let theme = t.iced();
// let hovered = self.hovered_slide == slide_id;
// style.background = Some(Background::Color(
// if is_current_slide {
@ -617,7 +613,7 @@ impl Presenter {
// .height(100)
// .padding(10),
// )
// .interaction(cosmic::iced::mouse::Interaction::Pointer)
// .interaction(iced::iced::mouse::Interaction::Pointer)
// .on_move(move |_| Message::HoveredSlide(slide_id))
// .on_exit(Message::HoveredSlide(-1))
// .on_press(Message::SlideChange(slide.clone()));

View file

@ -1,14 +1,12 @@
use std::{io, path::PathBuf};
use cosmic::{
iced::{Color, Font, Length, Size},
prelude::*,
use iced::{
widget::{
self,
canvas::{self, Program, Stroke},
container, Canvas,
},
Renderer,
Color, Font, Length, Renderer, Size,
};
use tracing::debug;
@ -51,14 +49,14 @@ pub enum SlideError {
#[derive(Debug, Default)]
struct EditorProgram {
mouse_button_pressed: Option<cosmic::iced::mouse::Button>,
mouse_button_pressed: Option<iced::iced::mouse::Button>,
}
impl SlideEditor {
pub fn view<'a>(
&'a self,
font: Font,
) -> cosmic::Element<'a, SlideWidget> {
) -> iced::Element<'a, SlideWidget> {
container(
widget::canvas(&self.program)
.height(Length::Fill)
@ -68,9 +66,9 @@ impl SlideEditor {
}
}
/// Ensure to use the `cosmic::Theme and cosmic::Renderer` here
/// Ensure to use the `iced::Theme and iced::Renderer` here
/// or else it will not compile
impl<'a> Program<SlideWidget, cosmic::Theme, cosmic::Renderer>
impl<'a> Program<SlideWidget, iced::Theme, iced::Renderer>
for EditorProgram
{
type State = ();
@ -79,9 +77,9 @@ impl<'a> Program<SlideWidget, cosmic::Theme, cosmic::Renderer>
&self,
state: &Self::State,
renderer: &Renderer,
theme: &cosmic::Theme,
bounds: cosmic::iced::Rectangle,
cursor: cosmic::iced_core::mouse::Cursor,
theme: &iced::Theme,
bounds: iced::iced::Rectangle,
cursor: iced::iced_core::mouse::Cursor,
) -> Vec<canvas::Geometry<Renderer>> {
// We prepare a new `Frame`
let mut frame = canvas::Frame::new(renderer, bounds.size());
@ -90,7 +88,7 @@ impl<'a> Program<SlideWidget, cosmic::Theme, cosmic::Renderer>
// We create a `Path` representing a simple circle
let circle = canvas::Path::circle(frame.center(), 50.0);
let border = canvas::Path::rectangle(
cosmic::iced::Point { x: 10.0, y: 10.0 },
iced::iced::Point { x: 10.0, y: 10.0 },
Size::new(frame_rect.width, frame_rect.height),
);
@ -117,18 +115,18 @@ impl<'a> Program<SlideWidget, cosmic::Theme, cosmic::Renderer>
&self,
_state: &mut Self::State,
event: canvas::Event,
bounds: cosmic::iced::Rectangle,
_cursor: cosmic::iced_core::mouse::Cursor,
bounds: iced::iced::Rectangle,
_cursor: iced::iced_core::mouse::Cursor,
) -> (canvas::event::Status, Option<SlideWidget>) {
match event {
canvas::Event::Mouse(event) => match event {
cosmic::iced::mouse::Event::CursorEntered => {
iced::iced::mouse::Event::CursorEntered => {
debug!("cursor entered")
}
cosmic::iced::mouse::Event::CursorLeft => {
iced::iced::mouse::Event::CursorLeft => {
debug!("cursor left")
}
cosmic::iced::mouse::Event::CursorMoved {
iced::iced::mouse::Event::CursorMoved {
position,
} => {
if bounds.x < position.x
@ -139,16 +137,16 @@ impl<'a> Program<SlideWidget, cosmic::Theme, cosmic::Renderer>
debug!(?position, "cursor moved");
}
}
cosmic::iced::mouse::Event::ButtonPressed(button) => {
iced::iced::mouse::Event::ButtonPressed(button) => {
// self.mouse_button_pressed = Some(button);
debug!(?button, "mouse button pressed")
}
cosmic::iced::mouse::Event::ButtonReleased(
button,
) => debug!(?button, "mouse button released"),
cosmic::iced::mouse::Event::WheelScrolled {
delta,
} => debug!(?delta, "scroll wheel"),
iced::iced::mouse::Event::ButtonReleased(button) => {
debug!(?button, "mouse button released")
}
iced::iced::mouse::Event::WheelScrolled { delta } => {
debug!(?delta, "scroll wheel")
}
},
canvas::Event::Touch(event) => debug!("test"),
canvas::Event::Keyboard(event) => debug!("test"),
@ -159,9 +157,9 @@ impl<'a> Program<SlideWidget, cosmic::Theme, cosmic::Renderer>
fn mouse_interaction(
&self,
_state: &Self::State,
_bounds: cosmic::iced::Rectangle,
_cursor: cosmic::iced_core::mouse::Cursor,
) -> cosmic::iced_core::mouse::Interaction {
cosmic::iced_core::mouse::Interaction::default()
_bounds: iced::iced::Rectangle,
_cursor: iced::iced_core::mouse::Cursor,
) -> iced::iced_core::mouse::Interaction {
iced::iced_core::mouse::Interaction::default()
}
}

View file

@ -1,21 +1,17 @@
use std::{io, path::PathBuf};
use cosmic::{
dialog::file_chooser::open::Dialog,
iced::{
font::{Family, Stretch, Style, Weight},
Font, Length,
},
iced_wgpu::graphics::text::cosmic_text::fontdb,
iced_widget::row,
use dirs::font_dir;
use iced::{
advanced::graphics::text::cosmic_text::fontdb,
font::{Family, Stretch, Style, Weight},
theme,
widget::row,
widget::{
button, column, combo_box, container, horizontal_space, icon,
button, column, combo_box, container, horizontal_space,
scrollable, text, text_editor, text_input,
},
Element, Task,
Element, Font, Length, Task,
};
use dirs::font_dir;
use iced_video_player::Video;
use tracing::{debug, error};
@ -133,7 +129,7 @@ impl SongEditor {
audio: PathBuf::new(),
background: None,
video: None,
current_font: cosmic::font::default(),
current_font: iced::font::default(),
ccli: "8".to_owned(),
slide_state: SlideEditor::default(),
}
@ -283,7 +279,7 @@ impl SongEditor {
]
.into(),
])
.spacing(theme::active().cosmic().space_l());
.spacing(theme::active().iced().space_l());
column.into()
}
@ -317,7 +313,7 @@ impl SongEditor {
// .collect();
// scrollable(
// column::with_children(slides)
// .spacing(theme::active().cosmic().space_l()),
// .spacing(theme::active().iced().space_l()),
// )
// .height(Length::Fill)
// .width(Length::Fill)
@ -401,7 +397,7 @@ order",
)
},
)
.width(theme::active().cosmic().space_xxl());
.width(theme::active().iced().space_xxl());
let background_selector = button::icon(
icon::from_name("folder-pictures-symbolic").scale(2),

View file

@ -4,13 +4,10 @@ use std::{
};
use colors_transform::Rgb;
use cosmic::{
iced::{
font::{Style, Weight},
Length, Size,
},
prelude::*,
use iced::{
font::{Style, Weight},
widget::{container, svg::Handle, Svg},
Length, Size,
};
use tracing::error;
@ -46,11 +43,11 @@ pub struct Font {
size: u8,
}
impl From<cosmic::font::Font> for Font {
fn from(value: cosmic::font::Font) -> Self {
impl From<iced::font::Font> for Font {
fn from(value: iced::font::Font) -> Self {
Self {
name: match value.family {
cosmic::iced::font::Family::Name(name) => {
iced::iced::font::Family::Name(name) => {
name.to_string()
}
_ => "Quicksand Bold".into(),

View file

@ -1,11 +1,11 @@
use cosmic::iced::advanced::layout::{self, Layout};
use cosmic::iced::advanced::renderer;
use cosmic::iced::advanced::widget::{self, Widget};
use cosmic::iced::border;
use cosmic::iced::mouse;
use cosmic::iced::{Color, Element, Length, Rectangle, Size};
use femtovg::renderer::WGPURenderer;
use femtovg::{Canvas, TextContext};
use iced::iced::advanced::layout::{self, Layout};
use iced::iced::advanced::renderer;
use iced::iced::advanced::widget::{self, Widget};
use iced::iced::border;
use iced::iced::mouse;
use iced::iced::{Color, Element, Length, Rectangle, Size};
pub struct SlideText {
text: String,
@ -23,7 +23,7 @@ impl SlideText {
});
let surface =
instance.create_surface(window.clone()).unwrap();
let adapter = cosmic::iced::wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface))
let adapter = iced::iced::wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface))
.await
.expect("Failed to find an appropriate adapter");
let (device, queue) = adapter