From 951e426a1350b43e416866ad24b43b2dbb08899b Mon Sep 17 00:00:00 2001 From: PolyMeilex Date: Sun, 21 Jul 2024 02:17:44 +0200 Subject: [PATCH] Yet another iced update --- Cargo.lock | 141 ++++++++---------- Cargo.toml | 15 +- neothesia-cli/src/main.rs | 2 +- neothesia-core/src/render/keyboard/mod.rs | 4 +- neothesia-core/src/render/text/mod.rs | 48 +++--- neothesia-iced-widgets/src/layout.rs | 16 +- neothesia-iced-widgets/src/neo_btn.rs | 8 +- neothesia-iced-widgets/src/piano_range.rs | 18 ++- .../src/preferences_group/mod.rs | 2 +- .../src/segment_button/mod.rs | 8 +- .../src/segment_button/theme.rs | 14 +- neothesia-iced-widgets/src/track_card/mod.rs | 2 +- neothesia/src/iced_utils/bootstrap-icons.ttf | Bin 449648 -> 478236 bytes neothesia/src/iced_utils/iced_conversion.rs | 8 +- neothesia/src/main.rs | 2 +- .../src/scene/menu_scene/iced_menu/exit.rs | 2 +- .../src/scene/menu_scene/iced_menu/main.rs | 44 ++---- .../src/scene/menu_scene/iced_menu/mod.rs | 14 +- .../scene/menu_scene/iced_menu/settings.rs | 25 +--- .../src/scene/menu_scene/iced_menu/theme.rs | 12 +- .../src/scene/menu_scene/iced_menu/tracks.rs | 36 ++--- neothesia/src/scene/menu_scene/mod.rs | 2 +- 22 files changed, 197 insertions(+), 226 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8df54497..892f6a9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -424,7 +424,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash", + "rustc-hash 1.1.0", "shlex", "syn 1.0.109", ] @@ -444,7 +444,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash", + "rustc-hash 1.1.0", "shlex", "syn 2.0.66", ] @@ -808,19 +808,21 @@ dependencies = [ [[package]] name = "cosmic-text" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75acbfb314aeb4f5210d379af45ed1ec2c98c7f1790bf57b8a4c562ac0c51b71" +checksum = "70b7eecd441fdfc092d6afcb4d00a521ee6d3dc3ad882575ce13bf38be53fb71" dependencies = [ + "bitflags 2.5.0", "fontdb", - "libm", "log", "rangemap", - "rustc-hash", + "rayon", + "rustc-hash 1.1.0", "rustybuzz", "self_cell", "swash", "sys-locale", + "ttf-parser 0.21.1", "unicode-bidi", "unicode-linebreak", "unicode-script", @@ -1265,16 +1267,16 @@ dependencies = [ [[package]] name = "fontdb" -version = "0.15.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020e203f177c0fb250fb19455a252e838d2bbbce1f80f25ecc42402aafa8cd38" +checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" dependencies = [ "fontconfig-parser", "log", - "memmap2 0.8.0", + "memmap2", "slotmap", "tinyvec", - "ttf-parser 0.19.2", + "ttf-parser 0.20.0", ] [[package]] @@ -1519,24 +1521,12 @@ dependencies = [ [[package]] name = "glyphon" version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a62d0338e4056db6a73221c2fb2e30619452f6ea9651bac4110f51b0f7a7581" -dependencies = [ - "cosmic-text", - "etagere", - "lru", - "wgpu", -] - -[[package]] -name = "glyphon" -version = "0.5.0" -source = "git+https://github.com/hecrj/glyphon.git?rev=f07e7bab705e69d39a5e6e52c73039a93c4552f8#f07e7bab705e69d39a5e6e52c73039a93c4552f8" +source = "git+https://github.com/hecrj/glyphon.git?rev=feef9f5630c2adb3528937e55f7bfad2da561a65#feef9f5630c2adb3528937e55f7bfad2da561a65" dependencies = [ "cosmic-text", "etagere", "lru", - "rustc-hash", + "rustc-hash 2.0.0", "wgpu", ] @@ -1664,7 +1654,7 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "iced_core" version = "0.13.0-dev" -source = "git+https://github.com/iced-rs/iced.git?rev=b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a#b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" +source = "git+https://github.com/iced-rs/iced.git?rev=4b44079f34aa9e01977a7974e5f49ae79ff6cd90#4b44079f34aa9e01977a7974e5f49ae79ff6cd90" dependencies = [ "bitflags 2.5.0", "bytes", @@ -1673,7 +1663,7 @@ dependencies = [ "num-traits", "once_cell", "palette", - "rustc-hash", + "rustc-hash 2.0.0", "smol_str", "thiserror", "web-time", @@ -1682,12 +1672,12 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.13.0-dev" -source = "git+https://github.com/iced-rs/iced.git?rev=b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a#b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" +source = "git+https://github.com/iced-rs/iced.git?rev=4b44079f34aa9e01977a7974e5f49ae79ff6cd90#4b44079f34aa9e01977a7974e5f49ae79ff6cd90" dependencies = [ "futures", "iced_core", "log", - "rustc-hash", + "rustc-hash 2.0.0", "wasm-bindgen-futures", "wasm-timer", ] @@ -1695,7 +1685,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.13.0-dev" -source = "git+https://github.com/iced-rs/iced.git?rev=b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a#b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" +source = "git+https://github.com/iced-rs/iced.git?rev=4b44079f34aa9e01977a7974e5f49ae79ff6cd90#4b44079f34aa9e01977a7974e5f49ae79ff6cd90" dependencies = [ "bitflags 2.5.0", "bytemuck", @@ -1708,7 +1698,7 @@ dependencies = [ "log", "once_cell", "raw-window-handle 0.6.2", - "rustc-hash", + "rustc-hash 2.0.0", "thiserror", "unicode-segmentation", ] @@ -1716,7 +1706,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.13.0-dev" -source = "git+https://github.com/iced-rs/iced.git?rev=b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a#b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" +source = "git+https://github.com/iced-rs/iced.git?rev=4b44079f34aa9e01977a7974e5f49ae79ff6cd90#4b44079f34aa9e01977a7974e5f49ae79ff6cd90" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -1728,7 +1718,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.13.0-dev" -source = "git+https://github.com/iced-rs/iced.git?rev=b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a#b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" +source = "git+https://github.com/iced-rs/iced.git?rev=4b44079f34aa9e01977a7974e5f49ae79ff6cd90#4b44079f34aa9e01977a7974e5f49ae79ff6cd90" dependencies = [ "bytes", "iced_core", @@ -1740,14 +1730,14 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.13.0-dev" -source = "git+https://github.com/iced-rs/iced.git?rev=b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a#b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" +source = "git+https://github.com/iced-rs/iced.git?rev=4b44079f34aa9e01977a7974e5f49ae79ff6cd90#4b44079f34aa9e01977a7974e5f49ae79ff6cd90" dependencies = [ "bytemuck", "cosmic-text", "iced_graphics", "kurbo", "log", - "rustc-hash", + "rustc-hash 2.0.0", "softbuffer", "tiny-skia", ] @@ -1755,18 +1745,18 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.13.0-dev" -source = "git+https://github.com/iced-rs/iced.git?rev=b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a#b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" +source = "git+https://github.com/iced-rs/iced.git?rev=4b44079f34aa9e01977a7974e5f49ae79ff6cd90#4b44079f34aa9e01977a7974e5f49ae79ff6cd90" dependencies = [ "bitflags 2.5.0", "bytemuck", "futures", "glam", - "glyphon 0.5.0 (git+https://github.com/hecrj/glyphon.git?rev=f07e7bab705e69d39a5e6e52c73039a93c4552f8)", + "glyphon", "guillotiere", "iced_graphics", "log", "once_cell", - "rustc-hash", + "rustc-hash 2.0.0", "thiserror", "wgpu", ] @@ -1774,12 +1764,13 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.13.0-dev" -source = "git+https://github.com/iced-rs/iced.git?rev=b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a#b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" +source = "git+https://github.com/iced-rs/iced.git?rev=4b44079f34aa9e01977a7974e5f49ae79ff6cd90#4b44079f34aa9e01977a7974e5f49ae79ff6cd90" dependencies = [ "iced_renderer", "iced_runtime", "num-traits", - "rustc-hash", + "once_cell", + "rustc-hash 2.0.0", "thiserror", "unicode-segmentation", ] @@ -2031,9 +2022,6 @@ name = "lru" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" -dependencies = [ - "hashbrown", -] [[package]] name = "lz4_flex" @@ -2065,15 +2053,6 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" -[[package]] -name = "memmap2" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" -dependencies = [ - "libc", -] - [[package]] name = "memmap2" version = "0.9.4" @@ -2191,7 +2170,7 @@ dependencies = [ "indexmap", "log", "num-traits", - "rustc-hash", + "rustc-hash 1.1.0", "spirv", "termcolor", "thiserror", @@ -2307,7 +2286,7 @@ version = "0.1.0" dependencies = [ "bytemuck", "euclid", - "glyphon 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "glyphon", "log", "midi-file", "objc", @@ -3157,6 +3136,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustc_version" version = "0.4.0" @@ -3181,15 +3166,15 @@ dependencies = [ [[package]] name = "rustybuzz" -version = "0.11.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee8fe2a8461a0854a37101fe7a1b13998d0cfa987e43248e81d2a5f4570f6fa" +checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "bytemuck", "libm", "smallvec", - "ttf-parser 0.20.0", + "ttf-parser 0.21.1", "unicode-bidi-mirroring", "unicode-ccc", "unicode-properties", @@ -3225,7 +3210,7 @@ checksum = "7de61fa7334ee8ee1f5c3c58dcc414fb9361e7e8f5bff9d45f4d69eeb89a7169" dependencies = [ "ab_glyph", "log", - "memmap2 0.9.4", + "memmap2", "smithay-client-toolkit", "tiny-skia", ] @@ -3320,6 +3305,16 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "skrifa" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab45fb68b53576a43d4fc0e9ec8ea64e29a4d2cc7f44506964cb75f288222e9" +dependencies = [ + "bytemuck", + "read-fonts", +] + [[package]] name = "slab" version = "0.4.9" @@ -3356,7 +3351,7 @@ dependencies = [ "cursor-icon", "libc", "log", - "memmap2 0.9.4", + "memmap2", "rustix", "thiserror", "wayland-backend", @@ -3393,7 +3388,7 @@ dependencies = [ "foreign-types", "js-sys", "log", - "memmap2 0.9.4", + "memmap2", "objc2", "objc2-app-kit", "objc2-foundation", @@ -3458,11 +3453,11 @@ checksum = "20e16a0f46cf5fd675563ef54f26e83e20f2366bcf027bcb3cc3ed2b98aaf2ca" [[package]] name = "swash" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "682a612b50baf09e8a039547ecf49e6c155690dcb751b1bcb19c93cdeb3d42d4" +checksum = "4d7773d67fe3373048cf840bfcc54ec3207cfc1e95c526b287ef2eb5eff9faf6" dependencies = [ - "read-fonts", + "skrifa", "yazi", "zeno", ] @@ -3686,12 +3681,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "ttf-parser" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1" - [[package]] name = "ttf-parser" version = "0.20.0" @@ -3729,15 +3718,15 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-bidi-mirroring" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" +checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" [[package]] name = "unicode-ccc" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" +checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" [[package]] name = "unicode-ident" @@ -4121,7 +4110,7 @@ dependencies = [ "parking_lot 0.12.3", "profiling", "raw-window-handle 0.6.2", - "rustc-hash", + "rustc-hash 1.1.0", "smallvec", "thiserror", "web-sys", @@ -4165,7 +4154,7 @@ dependencies = [ "range-alloc", "raw-window-handle 0.6.2", "renderdoc-sys", - "rustc-hash", + "rustc-hash 1.1.0", "smallvec", "thiserror", "wasm-bindgen", @@ -4549,7 +4538,7 @@ dependencies = [ "dpi", "js-sys", "libc", - "memmap2 0.9.4", + "memmap2", "ndk 0.9.0", "objc2", "objc2-app-kit", diff --git a/Cargo.toml b/Cargo.toml index e0af4b52..cafffe9b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,8 @@ resolver = "2" [workspace.dependencies] wgpu = "0.19" -glyphon = "0.5" +glyphon = { git = "https://github.com/hecrj/glyphon.git", rev = "feef9f5630c2adb3528937e55f7bfad2da561a65" } +# glyphon = "0.5" log = "0.4" bytemuck = { version = "1.5", features = ["derive"] } env_logger = "0.11" @@ -34,13 +35,13 @@ nuon = { path = "./nuon" } profiling = "1.0" -iced_graphics = { git = "https://github.com/iced-rs/iced.git", rev = "b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" } -iced_core = { git = "https://github.com/iced-rs/iced.git", rev = "b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" } -iced_runtime = { git = "https://github.com/iced-rs/iced.git", rev = "b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" } -iced_renderer = { git = "https://github.com/iced-rs/iced.git", rev = "b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a" } -iced_wgpu = { git = "https://github.com/iced-rs/iced.git", rev = "b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a", features = [ +iced_graphics = { git = "https://github.com/iced-rs/iced.git", rev = "4b44079f34aa9e01977a7974e5f49ae79ff6cd90" } +iced_core = { git = "https://github.com/iced-rs/iced.git", rev = "4b44079f34aa9e01977a7974e5f49ae79ff6cd90" } +iced_runtime = { git = "https://github.com/iced-rs/iced.git", rev = "4b44079f34aa9e01977a7974e5f49ae79ff6cd90" } +iced_renderer = { git = "https://github.com/iced-rs/iced.git", rev = "4b44079f34aa9e01977a7974e5f49ae79ff6cd90" } +iced_wgpu = { git = "https://github.com/iced-rs/iced.git", rev = "4b44079f34aa9e01977a7974e5f49ae79ff6cd90", features = [ "image", ] } -iced_widget = { git = "https://github.com/iced-rs/iced.git", rev = "b9eb86199afe0f2d936eb4ab90af5b2a2c32a87a", features = [ +iced_widget = { git = "https://github.com/iced-rs/iced.git", rev = "4b44079f34aa9e01977a7974e5f49ae79ff6cd90", features = [ "image", ] } diff --git a/neothesia-cli/src/main.rs b/neothesia-cli/src/main.rs index 34f0bf16..89a45433 100644 --- a/neothesia-cli/src/main.rs +++ b/neothesia-cli/src/main.rs @@ -151,7 +151,7 @@ impl Recorder { self.quad_pipeline .prepare(&self.gpu.device, &self.gpu.queue); - self.text.update((self.width, self.height), &self.gpu); + self.text.update((self.width, self.height), &mut self.gpu); } fn render( diff --git a/neothesia-core/src/render/keyboard/mod.rs b/neothesia-core/src/render/keyboard/mod.rs index 28bfbc29..939c9488 100644 --- a/neothesia-core/src/render/keyboard/mod.rs +++ b/neothesia-core/src/render/keyboard/mod.rs @@ -145,7 +145,7 @@ impl KeyboardRenderer { let mut buffer = glyphon::Buffer::new(text.font_system(), glyphon::Metrics::new(size, size)); - buffer.set_size(text.font_system(), w, h); + buffer.set_size(text.font_system(), Some(w), Some(h)); buffer.set_wrap(text.font_system(), glyphon::Wrap::None); buffer.set_text( text.font_system(), @@ -154,7 +154,7 @@ impl KeyboardRenderer { glyphon::Shaping::Basic, ); buffer.lines[0].set_align(Some(glyphon::cosmic_text::Align::Center)); - buffer.shape_until_scroll(text.font_system()); + buffer.shape_until_scroll(text.font_system(), false); text.queue(super::text::TextArea { buffer, diff --git a/neothesia-core/src/render/text/mod.rs b/neothesia-core/src/render/text/mod.rs index bb2a56be..a49c388b 100644 --- a/neothesia-core/src/render/text/mod.rs +++ b/neothesia-core/src/render/text/mod.rs @@ -20,8 +20,9 @@ pub struct TextArea { } pub struct TextRenderer { + viewport: glyphon::Viewport, font_system: glyphon::FontSystem, - cache: glyphon::SwashCache, + swash_cache: glyphon::SwashCache, atlas: glyphon::TextAtlas, text_renderer: glyphon::TextRenderer, @@ -37,8 +38,10 @@ impl TextRenderer { ))), ]); - let cache = glyphon::SwashCache::new(); - let mut atlas = glyphon::TextAtlas::new(&gpu.device, &gpu.queue, gpu.texture_format); + let swash_cache = glyphon::SwashCache::new(); + let cache = glyphon::Cache::new(&gpu.device); + let mut atlas = + glyphon::TextAtlas::new(&gpu.device, &gpu.queue, &cache, gpu.texture_format); let text_renderer = glyphon::TextRenderer::new( &mut atlas, &gpu.device, @@ -46,9 +49,12 @@ impl TextRenderer { None, ); + let viewport = glyphon::Viewport::new(&gpu.device, &cache); + Self { + viewport, font_system, - cache, + swash_cache, atlas, text_renderer, queue: Vec::new(), @@ -70,14 +76,14 @@ impl TextRenderer { pub fn queue_text(&mut self, text: &str) { let mut buffer = glyphon::Buffer::new(&mut self.font_system, glyphon::Metrics::new(15.0, 15.0)); - buffer.set_size(&mut self.font_system, f32::MAX, f32::MAX); + buffer.set_size(&mut self.font_system, Some(f32::MAX), Some(f32::MAX)); buffer.set_text( &mut self.font_system, text, glyphon::Attrs::new().family(glyphon::Family::SansSerif), glyphon::Shaping::Basic, ); - buffer.shape_until_scroll(&mut self.font_system); + buffer.shape_until_scroll(&mut self.font_system, false); #[cfg(debug_assertions)] let top = 20.0; @@ -97,14 +103,14 @@ impl TextRenderer { pub fn queue_icon(&mut self, x: f32, y: f32, size: f32, icon: &str) { let mut buffer = glyphon::Buffer::new(&mut self.font_system, glyphon::Metrics::new(size, size)); - buffer.set_size(&mut self.font_system, f32::MAX, f32::MAX); + buffer.set_size(&mut self.font_system, Some(f32::MAX), Some(f32::MAX)); buffer.set_text( &mut self.font_system, icon, glyphon::Attrs::new().family(glyphon::Family::Name("bootstrap-icons")), glyphon::Shaping::Basic, ); - buffer.shape_until_scroll(&mut self.font_system); + buffer.shape_until_scroll(&mut self.font_system, false); self.queue(TextArea { buffer, @@ -120,14 +126,14 @@ impl TextRenderer { let text = format!("FPS: {}", fps.round() as u32); let mut buffer = glyphon::Buffer::new(&mut self.font_system, glyphon::Metrics::new(15.0, 15.0)); - buffer.set_size(&mut self.font_system, f32::MAX, f32::MAX); + buffer.set_size(&mut self.font_system, Some(f32::MAX), Some(f32::MAX)); buffer.set_text( &mut self.font_system, &text, glyphon::Attrs::new().family(glyphon::Family::SansSerif), glyphon::Shaping::Basic, ); - buffer.shape_until_scroll(&mut self.font_system); + buffer.shape_until_scroll(&mut self.font_system, false); self.queue(TextArea { buffer, @@ -140,7 +146,7 @@ impl TextRenderer { } #[profiling::function] - pub fn update(&mut self, logical_size: (u32, u32), gpu: &Gpu) { + pub fn update(&mut self, logical_size: (u32, u32), gpu: &mut Gpu) { let elements = self.queue.iter().map(|area| glyphon::TextArea { buffer: &area.buffer, left: area.left, @@ -150,18 +156,24 @@ impl TextRenderer { default_color: area.default_color, }); + self.viewport.update( + &gpu.queue, + glyphon::Resolution { + width: logical_size.0, + height: logical_size.1, + }, + ); + self.text_renderer .prepare( &gpu.device, &gpu.queue, + &mut gpu.encoder, &mut self.font_system, &mut self.atlas, - glyphon::Resolution { - width: logical_size.0, - height: logical_size.1, - }, + &self.viewport, elements, - &mut self.cache, + &mut self.swash_cache, ) .unwrap(); @@ -169,6 +181,8 @@ impl TextRenderer { } pub fn render<'rpass>(&'rpass mut self, render_pass: &mut wgpu::RenderPass<'rpass>) { - self.text_renderer.render(&self.atlas, render_pass).unwrap(); + self.text_renderer + .render(&self.atlas, &self.viewport, render_pass) + .unwrap(); } } diff --git a/neothesia-iced-widgets/src/layout.rs b/neothesia-iced-widgets/src/layout.rs index 23538b2d..8b20531c 100644 --- a/neothesia-iced-widgets/src/layout.rs +++ b/neothesia-iced-widgets/src/layout.rs @@ -44,16 +44,14 @@ impl<'a, M: 'static> Layout<'a, M> { let body = col![body] .width(Length::Fill) .height(Length::Fill) - .align_items(Alignment::Center); + .align_x(Alignment::Center); let top = self .top - .map(|top| col![top].width(Length::Fill).align_items(Alignment::Center)); - let bottom = self.bottom.map(|bottom| { - col![bottom] - .width(Length::Fill) - .align_items(Alignment::Center) - }); + .map(|top| col![top].width(Length::Fill).align_x(Alignment::Center)); + let bottom = self + .bottom + .map(|bottom| col![bottom].width(Length::Fill).align_x(Alignment::Center)); col![] .push_maybe(top) @@ -113,9 +111,7 @@ impl<'a, M: 'static> BarLayout<'a, M> { 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) - .into() + row![left, center, right].align_y(Alignment::Center).into() } } diff --git a/neothesia-iced-widgets/src/neo_btn.rs b/neothesia-iced-widgets/src/neo_btn.rs index 3dcbd525..0a256d07 100644 --- a/neothesia-iced-widgets/src/neo_btn.rs +++ b/neothesia-iced-widgets/src/neo_btn.rs @@ -1,6 +1,5 @@ use super::Renderer; use iced_core::{ - alignment::{Horizontal, Vertical}, border::Radius, layout, mouse, renderer::Style, @@ -24,12 +23,7 @@ pub struct NeoBtn<'a, Message> { impl<'a, Message: Clone> NeoBtn<'a, Message> { pub fn new_with_label(label: &'a str) -> Self { - Self::new( - text(label) - .size(30) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center), - ) + Self::new(text(label).size(30).center()) } pub fn new(content: E) -> Self diff --git a/neothesia-iced-widgets/src/piano_range.rs b/neothesia-iced-widgets/src/piano_range.rs index 08af1cd5..e742a7e2 100644 --- a/neothesia-iced-widgets/src/piano_range.rs +++ b/neothesia-iced-widgets/src/piano_range.rs @@ -67,11 +67,23 @@ impl Widget for PianoRange { bounds, border: Border { radius: if n == 0 { - Radius::from([12.0, 0.0, 5.0, 12.0]) + Radius::new(0.0) + .top_left(12.0) + .top_right(0.0) + .bottom_right(5.0) + .bottom_left(12.0) } else if neutral.peek().is_none() { - Radius::from([0.0, 12.0, 12.0, 5.0]) + Radius::new(0.0) + .top_left(0.0) + .top_right(12.0) + .bottom_right(12.0) + .bottom_left(5.0) } else { - Radius::from([0.0, 0.0, 5.0, 5.0]) + Radius::new(0.0) + .top_left(0.0) + .top_right(0.0) + .bottom_right(5.0) + .bottom_left(5.0) }, width: 0.0, color: Color::TRANSPARENT, diff --git a/neothesia-iced-widgets/src/preferences_group/mod.rs b/neothesia-iced-widgets/src/preferences_group/mod.rs index e5e2ea3b..64cca3a3 100644 --- a/neothesia-iced-widgets/src/preferences_group/mod.rs +++ b/neothesia-iced-widgets/src/preferences_group/mod.rs @@ -101,7 +101,7 @@ fn triple_split<'a, T: 'a>( 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) + row.align_y(iced_core::Alignment::Center).spacing(6) } fn group_header<'a, T: 'a>(data: PreferencesGroupHeader) -> Element<'a, T> { diff --git a/neothesia-iced-widgets/src/segment_button/mod.rs b/neothesia-iced-widgets/src/segment_button/mod.rs index 14094075..835e49cb 100644 --- a/neothesia-iced-widgets/src/segment_button/mod.rs +++ b/neothesia-iced-widgets/src/segment_button/mod.rs @@ -1,8 +1,5 @@ use super::{Element, Renderer}; -use iced_core::{ - alignment::{Horizontal, Vertical}, - Color, Length, Theme, -}; +use iced_core::{Color, Length, Theme}; mod theme; @@ -46,8 +43,7 @@ impl SegmentButton { fn segment<'a, MSG: 'a>(label: &str) -> iced_widget::Button<'a, MSG, Theme, Renderer> { iced_widget::button( iced_widget::text(label.to_string()) - .horizontal_alignment(Horizontal::Center) - .vertical_alignment(Vertical::Center) + .center() .width(Length::Fill) .height(Length::Fill), ) diff --git a/neothesia-iced-widgets/src/segment_button/theme.rs b/neothesia-iced-widgets/src/segment_button/theme.rs index 7d6bf90c..0e96c9ca 100644 --- a/neothesia-iced-widgets/src/segment_button/theme.rs +++ b/neothesia-iced-widgets/src/segment_button/theme.rs @@ -20,9 +20,19 @@ pub fn segment_button( match status { button::Status::Active => { let border_radius = match kind { - ButtonSegmentKind::Start => Radius::from([255.0, 0.0, 0.0, 255.0]), + ButtonSegmentKind::Start => Radius { + top_left: 255.0, + top_right: 0.0, + bottom_right: 0.0, + bottom_left: 255.0, + }, ButtonSegmentKind::Center => Radius::from(0.0), - ButtonSegmentKind::End => Radius::from([0.0, 255.0, 255.0, 0.0]), + ButtonSegmentKind::End => Radius { + top_left: 0.0, + top_right: 255.0, + bottom_right: 255.0, + bottom_left: 0.0, + }, }; let background = if active { diff --git a/neothesia-iced-widgets/src/track_card/mod.rs b/neothesia-iced-widgets/src/track_card/mod.rs index 08f841e4..c300832e 100644 --- a/neothesia-iced-widgets/src/track_card/mod.rs +++ b/neothesia-iced-widgets/src/track_card/mod.rs @@ -71,7 +71,7 @@ impl<'a, M: Clone + 'a> From> for Element<'a, M> { iced_widget::text(card.subtitle).size(14).into(), ]) .spacing(4) - .align_items(Alignment::Start), + .align_x(Alignment::Start), ] .spacing(16) }; diff --git a/neothesia/src/iced_utils/bootstrap-icons.ttf b/neothesia/src/iced_utils/bootstrap-icons.ttf index 0439e715365cba5a9dea022d9fd611ec89ad39de..fc6a37caae53a6dc8fe5eeb9fed95f01d189d450 100644 GIT binary patch delta 82727 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 Gu>S{Gvmzt_ delta 51073 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 diff --git a/neothesia/src/iced_utils/iced_conversion.rs b/neothesia/src/iced_utils/iced_conversion.rs index e70c7f17..470c2be2 100644 --- a/neothesia/src/iced_utils/iced_conversion.rs +++ b/neothesia/src/iced_utils/iced_conversion.rs @@ -3,7 +3,7 @@ //! https://github.com/hecrj/iced/blob/master/winit/src/conversion.rs use iced_core::{ keyboard::{self}, - mouse, touch, window, Event, Point, + mouse, touch, window, Event, Point, Size, }; /// The position of a window in a given screen. @@ -54,10 +54,10 @@ pub fn window_event( WindowEvent::Resized(new_size) => { let logical_size = new_size.to_logical(scale_factor); - Some(Event::Window(window::Event::Resized { + Some(Event::Window(window::Event::Resized(Size { width: logical_size.width, height: logical_size.height, - })) + }))) } WindowEvent::CloseRequested => Some(Event::Window(window::Event::CloseRequested)), WindowEvent::CursorMoved { position, .. } => { @@ -149,7 +149,7 @@ pub fn window_event( WindowEvent::Moved(position) => { let winit::dpi::LogicalPosition { x, y } = position.to_logical(scale_factor); - Some(Event::Window(window::Event::Moved { x, y })) + Some(Event::Window(window::Event::Moved(Point { x, y }))) } WindowEvent::RedrawRequested => Some(Event::Window(window::Event::RedrawRequested( iced_core::time::Instant::now(), diff --git a/neothesia/src/main.rs b/neothesia/src/main.rs index 176be166..6e322eae 100644 --- a/neothesia/src/main.rs +++ b/neothesia/src/main.rs @@ -174,7 +174,7 @@ impl Neothesia { self.game_scene.update(&mut self.context, delta); self.context.text_renderer.update( self.context.window_state.logical_size.into(), - &self.context.gpu, + &mut self.context.gpu, ); } diff --git a/neothesia/src/scene/menu_scene/iced_menu/exit.rs b/neothesia/src/scene/menu_scene/iced_menu/exit.rs index 4f3b0ed1..2c1b2b04 100644 --- a/neothesia/src/scene/menu_scene/iced_menu/exit.rs +++ b/neothesia/src/scene/menu_scene/iced_menu/exit.rs @@ -45,7 +45,7 @@ impl Page for ExitPage { .height(Length::Fixed(50.0)); let controls = col![output, select_row] - .align_items(Alignment::Center) + .align_x(Alignment::Center) .width(Length::Fixed(650.0)) .spacing(30); diff --git a/neothesia/src/scene/menu_scene/iced_menu/main.rs b/neothesia/src/scene/menu_scene/iced_menu/main.rs index 8682693d..1e3a0a06 100644 --- a/neothesia/src/scene/menu_scene/iced_menu/main.rs +++ b/neothesia/src/scene/menu_scene/iced_menu/main.rs @@ -1,9 +1,6 @@ use std::path::PathBuf; -use iced_core::{ - alignment::{Horizontal, Vertical}, - Alignment, Length, Padding, -}; +use iced_core::{alignment::Horizontal, Alignment, Length, Padding}; use iced_runtime::Task; use iced_widget::{column, container, image, row, text}; use neothesia_iced_widgets::{BarLayout, Layout, NeoBtn}; @@ -67,34 +64,22 @@ impl Page for MainPage { let column = column![image(data.logo_handle.clone()), buttons] .spacing(40) - .align_items(Alignment::Center); + .align_x(Alignment::Center); let mut layout = Layout::new().body(top_padded(column)); if let Some(song) = ctx.song.as_ref() { - let tracks = NeoBtn::new( - icons::note_list_icon() - .size(30.0) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center), - ) - .height(Length::Fixed(60.0)) - .min_width(80.0) - .on_press(Event::GoToPage(Step::TrackSelection)); - - let play = NeoBtn::new( - icons::play_icon() - .size(30.0) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center), - ) - .height(Length::Fixed(60.0)) - .min_width(80.0) - .on_press(Event::Play); - - let row = row![tracks, play] - .spacing(10) - .align_items(Alignment::Center); + let tracks = NeoBtn::new(icons::note_list_icon().size(30.0).center()) + .height(Length::Fixed(60.0)) + .min_width(80.0) + .on_press(Event::GoToPage(Step::TrackSelection)); + + let play = NeoBtn::new(icons::play_icon().size(30.0).center()) + .height(Length::Fixed(60.0)) + .min_width(80.0) + .on_press(Event::Play); + + let row = row![tracks, play].spacing(10).align_y(Alignment::Center); let container = container(row) .width(Length::Fill) @@ -111,8 +96,7 @@ impl Page for MainPage { .center( text(song.file.name.to_string()) .width(Length::Fill) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center), + .center(), ) .right(container), ); diff --git a/neothesia/src/scene/menu_scene/iced_menu/mod.rs b/neothesia/src/scene/menu_scene/iced_menu/mod.rs index 4a0dd36a..c5f5a565 100644 --- a/neothesia/src/scene/menu_scene/iced_menu/mod.rs +++ b/neothesia/src/scene/menu_scene/iced_menu/mod.rs @@ -3,11 +3,7 @@ use std::collections::VecDeque; use self::page::PageMessage; use super::Renderer; -use iced_core::{ - alignment::{Horizontal, Vertical}, - image::Handle as ImageHandle, - Alignment, Length, Theme, -}; +use iced_core::{image::Handle as ImageHandle, Alignment, Length, Theme}; use iced_runtime::Task; use iced_widget::{column as col, container, image, text, vertical_space}; @@ -249,15 +245,13 @@ fn play(data: &Data, ctx: &mut Context) { fn loading(data: &Data) -> Element<'_, Message> { let column = col![image(data.logo_handle.clone()), text("Loading...").size(30)] .spacing(40) - .align_items(Alignment::Center); + .align_x(Alignment::Center); center_x(top_padded(column)).into() } fn centered_text<'a>(label: impl ToString) -> iced_widget::Text<'a, Theme, Renderer> { - text(label.to_string()) - .horizontal_alignment(Horizontal::Center) - .vertical_alignment(Vertical::Center) + text(label.to_string()).center() } fn top_padded<'a, MSG: 'a>( @@ -272,7 +266,7 @@ fn top_padded<'a, MSG: 'a>( col![spacer, content] .width(Length::Fill) .height(Length::Fill) - .align_items(Alignment::Center) + .align_x(Alignment::Center) } fn center_x<'a, MSG: 'a>( diff --git a/neothesia/src/scene/menu_scene/iced_menu/settings.rs b/neothesia/src/scene/menu_scene/iced_menu/settings.rs index eab2a7dd..3e389143 100644 --- a/neothesia/src/scene/menu_scene/iced_menu/settings.rs +++ b/neothesia/src/scene/menu_scene/iced_menu/settings.rs @@ -141,23 +141,18 @@ impl Page for SettingsPage { ] .spacing(10) .width(Length::Fill) - .align_items(Alignment::Center); + .align_x(Alignment::Center); let left = { - let back = NeoBtn::new( - icons::left_arrow_icon() - .size(30.0) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center), - ) - .height(Length::Fixed(60.0)) - .min_width(80.0) - .on_press(Event::GoBack); + let back = NeoBtn::new(icons::left_arrow_icon().size(30.0).center()) + .height(Length::Fixed(60.0)) + .min_width(80.0) + .on_press(Event::GoBack); row![back] .spacing(10) .width(Length::Shrink) - .align_items(Alignment::Center) + .align_y(Alignment::Center) }; let left = container(left) @@ -176,9 +171,7 @@ impl Page for SettingsPage { ..Padding::ZERO }); - let body = col![body] - .width(Length::Fill) - .align_items(Alignment::Center); + let body = col![body].width(Length::Fill).align_x(Alignment::Center); let column = iced_widget::scrollable(body).style(theme::scrollable); @@ -277,9 +270,7 @@ fn counter<'a>(value: impl ToString, msg: fn(RangeUpdateKind) -> Event) -> Eleme .style(theme::round_button) .on_press(msg(RangeUpdateKind::Add)); - let row = row![label, sub, add] - .spacing(10) - .align_items(Alignment::Center); + let row = row![label, sub, add].spacing(10).align_y(Alignment::Center); neothesia_iced_widgets::ScrollListener::new(row, move |delta| { if delta.is_sign_positive() { diff --git a/neothesia/src/scene/menu_scene/iced_menu/theme.rs b/neothesia/src/scene/menu_scene/iced_menu/theme.rs index 24098c3d..9c2ed4dd 100644 --- a/neothesia/src/scene/menu_scene/iced_menu/theme.rs +++ b/neothesia/src/scene/menu_scene/iced_menu/theme.rs @@ -161,32 +161,32 @@ pub fn scrollable( is_vertical_scrollbar_hovered, } => iced_widget::scrollable::Style { container: iced_widget::container::Style::default(), - vertical_scrollbar: iced_widget::scrollable::Scrollbar { + vertical_rail: iced_widget::scrollable::Rail { background: Some(iced_core::Background::Color(Color::from_rgba8( 37, 35, 42, 1.0, ))), - border: Border::rounded(10.0), + border: Border::default().rounded(10.0), scroller: iced_widget::scrollable::Scroller { color: if is_vertical_scrollbar_hovered { Color::from_rgba8(87, 81, 101, 1.0) } else { Color::from_rgba8(74, 68, 88, 1.0) }, - border: Border::rounded(10.0), + border: Border::default().rounded(10.0), }, }, - horizontal_scrollbar: iced_widget::scrollable::Scrollbar { + horizontal_rail: iced_widget::scrollable::Rail { background: Some(iced_core::Background::Color(Color::from_rgba8( 37, 35, 42, 1.0, ))), - border: Border::rounded(10.0), + border: Border::default().rounded(10.0), scroller: iced_widget::scrollable::Scroller { color: if is_horizontal_scrollbar_hovered { Color::from_rgba8(87, 81, 101, 1.0) } else { Color::from_rgba8(74, 68, 88, 1.0) }, - border: Border::rounded(10.0), + border: Border::default().rounded(10.0), }, }, gap: None, diff --git a/neothesia/src/scene/menu_scene/iced_menu/tracks.rs b/neothesia/src/scene/menu_scene/iced_menu/tracks.rs index b6c6932a..f8a4ab06 100644 --- a/neothesia/src/scene/menu_scene/iced_menu/tracks.rs +++ b/neothesia/src/scene/menu_scene/iced_menu/tracks.rs @@ -129,21 +129,16 @@ impl Page for TracksPage { .align_items(Alignment::Center); let column = col![vertical_space().height(Length::Fixed(30.0)), column] - .align_items(Alignment::Center) + .align_x(Alignment::Center) .width(Length::Fill); let column = iced_widget::scrollable(column); let right = { - let play = NeoBtn::new( - icons::play_icon() - .size(30.0) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center), - ) - .height(Length::Fixed(60.0)) - .min_width(80.0) - .on_press(Event::Play); + let play = NeoBtn::new(icons::play_icon().size(30.0).center()) + .height(Length::Fixed(60.0)) + .min_width(80.0) + .on_press(Event::Play); if ctx.song.is_some() { row![play] @@ -152,7 +147,7 @@ impl Page for TracksPage { } .spacing(10) .width(Length::Shrink) - .align_items(Alignment::Center) + .align_y(Alignment::Center) }; let right = container(right) @@ -167,17 +162,12 @@ impl Page for TracksPage { }); let left = { - let back = NeoBtn::new( - icons::left_arrow_icon() - .size(30.0) - .vertical_alignment(Vertical::Center) - .horizontal_alignment(Horizontal::Center), - ) - .height(Length::Fixed(60.0)) - .min_width(80.0) - .on_press(Event::GoBack); - - row![back].align_items(Alignment::Start) + let back = NeoBtn::new(icons::left_arrow_icon().size(30.0).center()) + .height(Length::Fixed(60.0)) + .min_width(80.0) + .on_press(Event::GoBack); + + row![back].align_y(Alignment::Start) }; let left = container(left) @@ -202,7 +192,7 @@ impl Page for TracksPage { row![listen, play_along] .width(Length::Shrink) - .align_items(Alignment::Center) + .align_y(Alignment::Center) .spacing(14) }; diff --git a/neothesia/src/scene/menu_scene/mod.rs b/neothesia/src/scene/menu_scene/mod.rs index 65ba9e72..662ef61a 100644 --- a/neothesia/src/scene/menu_scene/mod.rs +++ b/neothesia/src/scene/menu_scene/mod.rs @@ -71,7 +71,7 @@ impl Scene for MenuScene { // } if let Some(task) = self.iced_state.update(ctx) { - if let Some(fut) = task.into_stream() { + if let Some(fut) = iced_runtime::task::into_stream(task) { self.futures.push(fut); } }