diff --git a/Cargo.lock b/Cargo.lock index d41c4145..c96e9366 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1197,9 +1197,9 @@ dependencies = [ [[package]] name = "glam" -version = "0.24.2" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" +checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" [[package]] name = "glib-sys" @@ -1403,9 +1403,10 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "iced_core" version = "0.12.0" -source = "git+https://github.com/iced-rs/iced.git?rev=b4dcf4ecf702a493476791efd95e190e5c1db812#b4dcf4ecf702a493476791efd95e190e5c1db812" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55f9226618af7e8155fc8a233e4d84dc1ec44438705f972e35d5d50e62f937df" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.2", "glam", "log", "num-traits", @@ -1420,7 +1421,8 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.12.0" -source = "git+https://github.com/iced-rs/iced.git?rev=b4dcf4ecf702a493476791efd95e190e5c1db812#b4dcf4ecf702a493476791efd95e190e5c1db812" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "370bad88fb3832cbeeb3fa6c486b4701fb7e8da32a753b3101d4ce81fc1d9497" dependencies = [ "futures", "iced_core", @@ -1432,9 +1434,10 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.12.0" -source = "git+https://github.com/iced-rs/iced.git?rev=b4dcf4ecf702a493476791efd95e190e5c1db812#b4dcf4ecf702a493476791efd95e190e5c1db812" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0660df444c64a13f72999c55a324f6d3ea020167bb1af8ef43fe2bff168d8c27" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.2", "bytemuck", "cosmic-text", "half", @@ -1454,7 +1457,8 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.12.0" -source = "git+https://github.com/iced-rs/iced.git?rev=b4dcf4ecf702a493476791efd95e190e5c1db812#b4dcf4ecf702a493476791efd95e190e5c1db812" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59d931249515deb5fe116c7d199792cd9fd32d31bf18ffc08c6c2ad2dee5fd3e" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -1466,7 +1470,8 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.12.0" -source = "git+https://github.com/iced-rs/iced.git?rev=b4dcf4ecf702a493476791efd95e190e5c1db812#b4dcf4ecf702a493476791efd95e190e5c1db812" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "618a845cd752ca195f0805b7a4f0be42c071a4fdef0b88df047006572d219a5a" dependencies = [ "iced_core", "iced_futures", @@ -1477,7 +1482,8 @@ dependencies = [ [[package]] name = "iced_style" version = "0.12.0" -source = "git+https://github.com/iced-rs/iced.git?rev=b4dcf4ecf702a493476791efd95e190e5c1db812#b4dcf4ecf702a493476791efd95e190e5c1db812" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb6b3992bceeac1393ce0e83d06ab786be4c17c6a0004eefbdd4f6d89d5e8058" dependencies = [ "iced_core", "once_cell", @@ -1487,7 +1493,8 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.12.0" -source = "git+https://github.com/iced-rs/iced.git?rev=b4dcf4ecf702a493476791efd95e190e5c1db812#b4dcf4ecf702a493476791efd95e190e5c1db812" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e079a4ae34df06894500e486b20bae8d8f2806fd64efe4fa9abe329e7f585f21" dependencies = [ "bytemuck", "cosmic-text", @@ -1503,9 +1510,10 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.12.0" -source = "git+https://github.com/iced-rs/iced.git?rev=b4dcf4ecf702a493476791efd95e190e5c1db812#b4dcf4ecf702a493476791efd95e190e5c1db812" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa5d3ce370c7044ddc9535c8f87057f1008434a495be6b9f46b2666c3e9638f7" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.2", "bytemuck", "futures", "glam", @@ -1520,7 +1528,8 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.12.0" -source = "git+https://github.com/iced-rs/iced.git?rev=b4dcf4ecf702a493476791efd95e190e5c1db812#b4dcf4ecf702a493476791efd95e190e5c1db812" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99f30ebbcc0706c19a92f01669193271d82bb209fda83576392d04cef3214ca2" dependencies = [ "iced_renderer", "iced_runtime", @@ -1703,11 +1712,12 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kurbo" -version = "0.9.5" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b" +checksum = "1618d4ebd923e97d67e7cd363d80aef35fe961005cbbbb3d2dad8bdd1bc63440" dependencies = [ "arrayvec", + "smallvec", ] [[package]] diff --git a/neothesia/Cargo.toml b/neothesia/Cargo.toml index 500a735f..bb0a7073 100644 --- a/neothesia/Cargo.toml +++ b/neothesia/Cargo.toml @@ -38,12 +38,12 @@ oxisynth = { version = "0.0.5", optional = true } midi-file = { workspace = true } midi-io = { path = "../midi-io" } -iced_style = {git = "https://github.com/iced-rs/iced.git", rev="b4dcf4ecf702a493476791efd95e190e5c1db812"} -iced_graphics = {git = "https://github.com/iced-rs/iced.git", rev="b4dcf4ecf702a493476791efd95e190e5c1db812"} -iced_core = {git = "https://github.com/iced-rs/iced.git", rev="b4dcf4ecf702a493476791efd95e190e5c1db812"} -iced_runtime = {git = "https://github.com/iced-rs/iced.git", rev="b4dcf4ecf702a493476791efd95e190e5c1db812"} -iced_wgpu = { git = "https://github.com/iced-rs/iced.git", rev="b4dcf4ecf702a493476791efd95e190e5c1db812", features = ["image"] } -iced_widget = { git = "https://github.com/iced-rs/iced.git", rev="b4dcf4ecf702a493476791efd95e190e5c1db812", features = ["image"] } +iced_style = "0.12" +iced_graphics = "0.12" +iced_core = "0.12" +iced_runtime = "0.12" +iced_wgpu = { version = "0.12", features = ["image"] } +iced_widget = { version = "0.12", features = ["image"] } [[bin]] name = "neothesia" diff --git a/neothesia/src/iced_utils/iced_clipboard.rs b/neothesia/src/iced_utils/iced_clipboard.rs index b69507cf..e982072a 100644 --- a/neothesia/src/iced_utils/iced_clipboard.rs +++ b/neothesia/src/iced_utils/iced_clipboard.rs @@ -1,11 +1,11 @@ -use iced_core::Clipboard; +use iced_core::{clipboard::Kind, Clipboard}; pub struct DummyClipboard {} impl Clipboard for DummyClipboard { - fn read(&self) -> Option { + fn read(&self, _kind: Kind) -> Option { None } - fn write(&mut self, _contents: String) {} + fn write(&mut self, _kind: Kind, _contents: String) {} } diff --git a/neothesia/src/scene/menu_scene/iced_menu/mod.rs b/neothesia/src/scene/menu_scene/iced_menu/mod.rs index 0a7608ee..833bd246 100644 --- a/neothesia/src/scene/menu_scene/iced_menu/mod.rs +++ b/neothesia/src/scene/menu_scene/iced_menu/mod.rs @@ -340,7 +340,7 @@ fn centered_text<'a>(label: impl ToString) -> iced_widget::Text<'a, Theme, Rende fn top_padded<'a, MSG: 'a>( content: impl Into>, ) -> iced_widget::Column<'a, MSG, Theme, Renderer> { - let spacer = vertical_space(Length::FillPortion(1)); + let spacer = vertical_space().height(Length::FillPortion(1)); let content = container(content) .height(Length::FillPortion(4)) .center_x() diff --git a/neothesia/src/scene/menu_scene/iced_menu/settings.rs b/neothesia/src/scene/menu_scene/iced_menu/settings.rs index 7802fab9..e4882c9a 100644 --- a/neothesia/src/scene/menu_scene/iced_menu/settings.rs +++ b/neothesia/src/scene/menu_scene/iced_menu/settings.rs @@ -12,7 +12,7 @@ use crate::{ output_manager::OutputDescriptor, scene::menu_scene::{ icons, - layout::{BarLayout, Layout, PushIf}, + layout::{BarLayout, Layout}, neo_btn::NeoBtn, preferences_group, scroll_listener, }, @@ -115,7 +115,7 @@ pub(super) fn update( fn output_group<'a>(data: &'a Data, target: &Target) -> Element<'a, SettingsMessage> { let output_settings = { let output_list = pick_list( - &data.outputs, + data.outputs.as_ref(), data.selected_output.clone(), SettingsMessage::SelectOutput, ) @@ -153,16 +153,19 @@ fn output_group<'a>(data: &'a Data, target: &Target) -> Element<'a, SettingsMess preferences_group::PreferencesGroup::new() .title("Output") .push(output_settings) - .push_if(synth_settings) + .push_maybe(synth_settings) .build() } fn input_group<'a>(data: &'a Data, _target: &Target) -> Element<'a, SettingsMessage> { - let inputs = &data.inputs; let selected_input = data.selected_input.clone(); - let input_list = - pick_list(inputs, selected_input, SettingsMessage::SelectInput).style(theme::pick_list()); + let input_list = pick_list( + data.inputs.as_ref(), + selected_input, + SettingsMessage::SelectInput, + ) + .style(theme::pick_list()); preferences_group::PreferencesGroup::new() .title("Input") diff --git a/neothesia/src/scene/menu_scene/iced_menu/tracks.rs b/neothesia/src/scene/menu_scene/iced_menu/tracks.rs index 57aaca79..beb0de45 100644 --- a/neothesia/src/scene/menu_scene/iced_menu/tracks.rs +++ b/neothesia/src/scene/menu_scene/iced_menu/tracks.rs @@ -132,7 +132,7 @@ pub(super) fn view<'a>(_data: &'a Data, target: &Target) -> Element<'a, Message> .padding(30.0) .align_items(Alignment::Center); - let column = col![vertical_space(Length::Fixed(30.0)), column] + let column = col![vertical_space().height(Length::Fixed(30.0)), column] .align_items(Alignment::Center) .width(Length::Fill); diff --git a/neothesia/src/scene/menu_scene/layout.rs b/neothesia/src/scene/menu_scene/layout.rs index d75beafc..d2aaa667 100644 --- a/neothesia/src/scene/menu_scene/layout.rs +++ b/neothesia/src/scene/menu_scene/layout.rs @@ -1,6 +1,5 @@ use crate::iced_utils::iced_state::Element; -use iced_core::{Alignment, Length, Renderer}; -use iced_style::Theme; +use iced_core::{Alignment, Length}; use iced_widget::{column as col, row}; pub struct Layout<'a, Message> { @@ -41,7 +40,7 @@ impl<'a, M: 'static> Layout<'a, M> { } pub fn build(self) -> Element<'a, M> { - let body = col![].push_if(self.body); + let body = col![].push_maybe(self.body); let body = col![body] .width(Length::Fill) .height(Length::Fill) @@ -57,9 +56,9 @@ impl<'a, M: 'static> Layout<'a, M> { }); col![] - .push_if(top) + .push_maybe(top) .push(body) - .push_if(bottom) + .push_maybe(bottom) .width(Length::Fill) .height(Length::Fill) .into() @@ -110,9 +109,9 @@ impl<'a, M: 'static> BarLayout<'a, M> { } pub fn build(self) -> Element<'a, M> { - let left = row![].push_if(self.left).width(Length::Fill); - let center = row![].push_if(self.center).width(Length::Fill); - let right = row![].push_if(self.right).width(Length::Fill); + let left = row![].push_maybe(self.left).width(Length::Fill); + let center = row![].push_maybe(self.center).width(Length::Fill); + let right = row![].push_maybe(self.right).width(Length::Fill); row![left, center, right] .align_items(Alignment::Center) @@ -125,42 +124,3 @@ impl<'a, M: 'static> From> for Element<'a, M> { val.build() } } - -pub trait PushIf<'a, M, R> { - fn push_if(self, item: Option>>) -> Self; -} - -impl<'a, M, R: Renderer> PushIf<'a, M, R> for iced_widget::Row<'a, M, Theme, R> { - fn push_if(self, item: Option>>) -> Self { - if let Some(item) = item { - self.push(item) - } else { - self - } - } -} - -impl<'a, M, R: Renderer> PushIf<'a, M, R> for iced_widget::Column<'a, M, Theme, R> { - fn push_if(self, item: Option>>) -> Self { - if let Some(item) = item { - self.push(item) - } else { - self - } - } -} - -impl<'a, M: 'a> PushIf<'a, M, super::Renderer> - for super::preferences_group::PreferencesGroup<'a, M> -{ - fn push_if( - self, - item: Option>>, - ) -> Self { - if let Some(item) = item { - self.push(item) - } else { - self - } - } -} diff --git a/neothesia/src/scene/menu_scene/preferences_group/mod.rs b/neothesia/src/scene/menu_scene/preferences_group/mod.rs index 250fbeb9..ad7c9f90 100644 --- a/neothesia/src/scene/menu_scene/preferences_group/mod.rs +++ b/neothesia/src/scene/menu_scene/preferences_group/mod.rs @@ -4,7 +4,7 @@ use iced_widget::{column, container, row, text}; use crate::iced_utils::iced_state::Element; -use super::{layout::PushIf, Renderer}; +use super::Renderer; mod theme; @@ -43,11 +43,19 @@ impl<'a, MSG: 'a> PreferencesGroup<'a, MSG> { self } + pub fn push_maybe(self, child: Option>>) -> Self { + if let Some(child) = child { + self.push(child) + } else { + self + } + } + pub fn build(self) -> Element<'a, MSG> { let header = self.header.map(|header| group_header(header)); let body = group_body(self.items); - column![].push_if(header).push(body).spacing(14).into() + column![].push_maybe(header).push(body).spacing(14).into() } } @@ -86,9 +94,9 @@ fn tripple_split<'a, T: 'a>( ) -> iced_widget::Row<'a, T, Theme, Renderer> { let mut row = row![]; - row = row.push(row![].push_if(prefix).width(Length::Shrink)); - row = row.push(row![].push_if(center).width(Length::Fill)); - row = row.push(row![].push_if(suffix).width(Length::Shrink)); + row = row.push(row![].push_maybe(prefix).width(Length::Shrink)); + row = row.push(row![].push_maybe(center).width(Length::Fill)); + row = row.push(row![].push_maybe(suffix).width(Length::Shrink)); row.align_items(iced_core::Alignment::Center).spacing(6) } @@ -106,7 +114,7 @@ fn group_header<'a, T: 'a>(data: PreferencesGroupHeader) -> Element<'a, T> { .subtitle .map(|title| text(title).style(theme::subtitle()).size(12.2)); - let header = column![].push_if(title).push_if(subtitle); + let header = column![].push_maybe(title).push_maybe(subtitle); tripple_split(None, Some(header.into()), None).into() } @@ -116,8 +124,8 @@ fn title<'a, T: 'a>( subtitle: Option, ) -> iced_widget::Column<'a, T, Theme, Renderer> { column![] - .push_if(title.map(|title| text(title).size(14.6))) - .push_if(subtitle.map(|subtitle| text(subtitle).size(12.2).style(theme::subtitle()))) + .push_maybe(title.map(|title| text(title).size(14.6))) + .push_maybe(subtitle.map(|subtitle| text(subtitle).size(12.2).style(theme::subtitle()))) } pub struct ActionRow<'a, MSG> {