diff --git a/Cargo.lock b/Cargo.lock index 9030c5e0..36146511 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -330,9 +330,9 @@ dependencies = [ [[package]] name = "auto_enums" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c170965892137a3a9aeb000b4524aa3cc022a310e709d848b6e1cdce4ab4781" +checksum = "65398a2893f41bce5c9259f6e1a4f03fbae40637c1bdc755b4f387f48c613b03" dependencies = [ "derive_utils", "proc-macro2", @@ -785,19 +785,6 @@ dependencies = [ "libm", ] -[[package]] -name = "cosmic-client-toolkit" -version = "0.2.0" -source = "git+https://github.com/pop-os//cosmic-protocols?branch=main#0d0b0b573fe4836ede4c237dadd365033cd28296" -dependencies = [ - "bitflags 2.11.0", - "cosmic-protocols", - "libc", - "smithay-client-toolkit", - "wayland-client", - "wayland-protocols", -] - [[package]] name = "cosmic-comp" version = "1.0.0" @@ -875,7 +862,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "atomicwrites", "calloop", @@ -896,7 +883,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "quote", "syn", @@ -905,7 +892,7 @@ dependencies = [ [[package]] name = "cosmic-freedesktop-icons" version = "0.4.0" -source = "git+https://github.com/pop-os/freedesktop-icons#7a61a704f6d1ec41f71cbe766e3cc484858523fa" +source = "git+https://github.com/pop-os/freedesktop-icons#ab4c57b8e416c6af9297cb04d101889896fd9a92" dependencies = [ "bstr", "btoi", @@ -923,7 +910,6 @@ source = "git+https://github.com/pop-os//cosmic-protocols?branch=main#0d0b0b573f dependencies = [ "bitflags 2.11.0", "wayland-backend", - "wayland-client", "wayland-protocols", "wayland-protocols-wlr", "wayland-scanner", @@ -956,7 +942,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -973,8 +959,9 @@ dependencies = [ [[package]] name = "cosmic-text" -version = "0.18.2" -source = "git+https://github.com/pop-os/cosmic-text.git#d5a972a2b63649fad11ea3a7e80f7dc4c592f01a" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73" dependencies = [ "bitflags 2.11.0", "fontdb", @@ -997,13 +984,14 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "almost", "configparser", "cosmic-config", "csscolorparser", "dirs", + "hex_color", "palette", "ron 0.12.0", "serde", @@ -1053,7 +1041,7 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "cryoglyph" version = "0.1.0" -source = "git+https://github.com/pop-os/glyphon.git?tag=cosmic-0.14#c49de15bce4d8254ac136d1be9911960cc85ce12" +source = "git+https://github.com/iced-rs/cryoglyph.git?rev=e429a025df36ab8145708acb309080ae3deec17a#e429a025df36ab8145708acb309080ae3deec17a" dependencies = [ "cosmic-text", "etagere", @@ -1080,9 +1068,9 @@ checksum = "42aaeae719fd78ce501d77c6cdf01f7e96f26bcd5617a4903a1c2b97e388543a" [[package]] name = "csscolorparser" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a878cfd6075649977f548ed439564cfdbe1f190a6656a00b48af7740f2f148" +checksum = "199f851bd3cb5004c09474252c7f74e7c047441ed0979bf3688a7106a13da952" dependencies = [ "num-traits", "phf 0.13.1", @@ -2119,6 +2107,17 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex_color" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d37f101bf4c633f7ca2e4b5e136050314503dd198e78e325ea602c327c484ef0" +dependencies = [ + "arrayvec", + "rand 0.8.5", + "serde", +] + [[package]] name = "hexf-parse" version = "0.2.1" @@ -2237,7 +2236,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "dnd", "iced_core", @@ -2256,7 +2255,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "bitflags 2.11.0", "bytes", @@ -2272,6 +2271,7 @@ dependencies = [ "serde", "smol_str", "thiserror 2.0.18", + "unicode-segmentation", "web-time", "window_clipboard", ] @@ -2279,7 +2279,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "iced_core", "iced_futures", @@ -2289,7 +2289,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "futures", "iced_core", @@ -2302,7 +2302,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "bitflags 2.11.0", "bytemuck", @@ -2323,7 +2323,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "iced_graphics", "iced_runtime", @@ -2332,7 +2332,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2344,7 +2344,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "bytes", "dnd", @@ -2358,7 +2358,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "bytemuck", "cosmic-text", @@ -2375,12 +2375,11 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.0", "bytemuck", - "cosmic-client-toolkit", "cryoglyph", "futures", "glam", @@ -2406,7 +2405,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "dnd", "iced_renderer", @@ -2544,9 +2543,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.9" +version = "0.25.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" dependencies = [ "bytemuck", "byteorder-lite", @@ -2808,9 +2807,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "known-folders" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770919970f7d2f74fea948900d35e2ef64f44129e8ae4015f59de1f0aca7c2a5" +checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ "windows-sys 0.59.0", ] @@ -2886,7 +2885,7 @@ checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#0bb006c5bbf7eb89491891d45bfc8f21f8eb1305" +source = "git+https://github.com/pop-os/libcosmic#d922ac380134c00208d2acf93947d44fb217eec5" dependencies = [ "apply", "auto_enums", @@ -2896,6 +2895,7 @@ dependencies = [ "cosmic-theme", "css-color", "derive_setters", + "enumflags2", "float-cmp 0.10.0", "futures", "i18n-embed", @@ -2912,7 +2912,6 @@ dependencies = [ "log", "palette", "phf 0.13.1", - "raw-window-handle", "rust-embed", "serde", "slotmap", @@ -3292,9 +3291,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.11" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" dependencies = [ "num-traits", "pxfm", @@ -3308,9 +3307,9 @@ checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" [[package]] name = "naga" -version = "27.0.3" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" +checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" dependencies = [ "arrayvec", "bit-set", @@ -4159,6 +4158,8 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ + "libc", + "rand_chacha 0.3.1", "rand_core 0.6.4", ] @@ -4168,7 +4169,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "rand_chacha", + "rand_chacha 0.9.0", "rand_core 0.9.5", ] @@ -4183,6 +4184,16 @@ dependencies = [ "rand_core 0.10.0", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_chacha" version = "0.9.0" @@ -4198,6 +4209,9 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] [[package]] name = "rand_core" @@ -4856,14 +4870,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ "bitflags 2.11.0", - "bytemuck", "calloop", "calloop-wayland-source", "cursor-icon", "libc", "log", "memmap2", - "pkg-config", "rustix 1.1.4", "thiserror 2.0.18", "wayland-backend", @@ -4875,7 +4887,6 @@ dependencies = [ "wayland-protocols-misc", "wayland-protocols-wlr", "wayland-scanner", - "xkbcommon 0.8.0", "xkeysym", ] @@ -4926,7 +4937,7 @@ checksum = "27207bb65232eda1f588cf46db2fee75c0808d557f6b3cf19a75f5d6d7c94df1" [[package]] name = "softbuffer" version = "0.4.1" -source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#a3f77e251e7422803f693df6e3fc313c010c4dcb" +source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#c2b2c19ddb38ff17495643699f97cb1f2064a1be" dependencies = [ "as-raw-xcb-connection", "bytemuck", @@ -5528,9 +5539,9 @@ checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-vo" @@ -5998,12 +6009,13 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wgpu" -version = "27.0.1" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" +checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" dependencies = [ "arrayvec", "bitflags 2.11.0", + "bytemuck", "cfg-if", "cfg_aliases", "document-features", @@ -6021,9 +6033,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "27.0.3" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7" +checksum = "d23f4642f53f666adcfd2d3218ab174d1e6681101aef18696b90cbe64d1c10f9" dependencies = [ "arrayvec", "bit-set", @@ -6051,18 +6063,18 @@ dependencies = [ [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" +checksum = "68ca976e72b2c9964eb243e281f6ce7f14a514e409920920dcda12ae40febaae" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "27.0.4" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" +checksum = "44d6cb474beb218824dcc9e1ce679d973f719262789bfb27407da560cac20eeb" dependencies = [ "bitflags 2.11.0", "cfg-if", @@ -6080,15 +6092,14 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "27.0.1" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" +checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" dependencies = [ "bitflags 2.11.0", "bytemuck", "js-sys", "log", - "thiserror 2.0.18", "web-sys", ] @@ -6736,6 +6747,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +dependencies = [ + "memchr", +] + [[package]] name = "wit-bindgen" version = "0.51.0" @@ -6925,9 +6945,6 @@ name = "xkeysym" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" -dependencies = [ - "bytemuck", -] [[package]] name = "xml-rs" @@ -6978,9 +6995,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.14.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca82f95dbd3943a40a53cfded6c2d0a2ca26192011846a1810c4256ef92c60bc" +checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" dependencies = [ "async-broadcast", "async-executor", @@ -7005,7 +7022,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 0.7.14", + "winnow 1.0.3", "zbus_macros", "zbus_names", "zvariant", @@ -7013,9 +7030,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.14.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897e79616e84aac4b2c46e9132a4f63b93105d54fe8c0e8f6bffc21fa8d49222" +checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7028,12 +7045,12 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" +checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" dependencies = [ "serde", - "winnow 0.7.14", + "winnow 1.0.3", "zvariant", ] @@ -7156,23 +7173,23 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.10.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5708299b21903bbe348e94729f22c49c55d04720a004aa350f1f9c122fd2540b" +checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" dependencies = [ "endi", "enumflags2", "serde", - "winnow 0.7.14", + "winnow 1.0.3", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.10.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b59b012ebe9c46656f9cc08d8da8b4c726510aef12559da3e5f1bf72780752c" +checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7183,13 +7200,13 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" +checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" dependencies = [ "proc-macro2", "quote", "serde", "syn", - "winnow 0.7.14", + "winnow 1.0.3", ] diff --git a/Cargo.toml b/Cargo.toml index a8c2dc2f..7023d1d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ edition = "2024" license = "GPL-3.0-only" name = "cosmic-comp" version = "1.0.0" -rust-version = "1.90" +rust-version = "1.93" [workspace] members = ["cosmic-comp-config"] @@ -28,7 +28,7 @@ cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daem cosmic-settings-daemon-config = { git = "https://github.com/pop-os/cosmic-settings-daemon", features = [ "greeter", ] } -cosmic-text = { git = "https://github.com/pop-os/cosmic-text.git", features = [ +cosmic-text = { version = "0.19", features = [ "shape-run-cache", ] } libdisplay-info = "0.3.0" @@ -141,7 +141,6 @@ lto = "fat" [patch."https://github.com/pop-os/cosmic-protocols"] cosmic-protocols = { git = "https://github.com/pop-os//cosmic-protocols", branch = "main" } -cosmic-client-toolkit = { git = "https://github.com/pop-os//cosmic-protocols", branch = "main" } [patch.crates-io] smithay = { git = "https://github.com/smithay/smithay.git", rev = "8eb4076" } diff --git a/examples/customized-window-decorations.rs b/examples/customized-window-decorations.rs index ffe677f1..364221fe 100644 --- a/examples/customized-window-decorations.rs +++ b/examples/customized-window-decorations.rs @@ -23,7 +23,7 @@ struct Circle { color: Color, } -impl +impl canvas::Program for Circle { type State = (); @@ -50,17 +50,17 @@ impl cosmic::Element<'_, Message> { let orig = self.lower.view(window); - widget::row() - .push( - widget::column() - .push(canvas(Circle { - radius: (self.height as f32 / 2.) * 0.8, - color: Color::from_rgba(1.0, 0.0, 0.0, 1.0), - })) - .width(self.height as f32), - ) - .push(orig) - .into() + widget::row([ + widget::column([canvas(Circle { + radius: (self.height as f32 / 2.) * 0.8, + color: Color::from_rgba(1.0, 0.0, 0.0, 1.0), + }) + .into()]) + .width(self.height as f32) + .into(), + orig, + ]) + .into() } } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 9c8eecdc..ae16192b 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "1.90" +channel = "1.93" components = [ "rust-src" ] diff --git a/src/backend/render/mod.rs b/src/backend/render/mod.rs index 7c1c1404..60917112 100644 --- a/src/backend/render/mod.rs +++ b/src/backend/render/mod.rs @@ -726,7 +726,7 @@ where return Ok(Vec::new()); } let theme = shell_ref.theme().clone(); - let blur_strength = 9; // TODO + let blur_strength = (theme.cosmic().frosted as u8 + 1) as usize; let scale = output.current_scale().fractional_scale(); // we don't want to hold a shell lock across `cursor_elements`, // that is prone to deadlock with the main-thread on some grabs. diff --git a/src/backend/render/wayland/blur_effect.rs b/src/backend/render/wayland/blur_effect.rs index e7c52395..47f5be88 100644 --- a/src/backend/render/wayland/blur_effect.rs +++ b/src/backend/render/wayland/blur_effect.rs @@ -117,21 +117,22 @@ impl BlurShaders { type BlurTexture = Mutex>; -struct BlurState { - id: Id, - renderer_id: Option>, - src: Size, - offset: f64, - passes: usize, - region: Vec>, - commit: CommitCounter, +#[derive(Debug)] +pub struct BlurState { + pub id: Id, + pub renderer_id: Option>, + pub src: Size, + pub offset: f64, + pub passes: usize, + pub region: Vec>, + pub commit: CommitCounter, } unsafe impl Send for BlurState {} unsafe impl Sync for BlurState {} -impl BlurState { - fn new() -> Self { +impl Default for BlurState { + fn default() -> Self { BlurState { id: Id::new(), renderer_id: None, @@ -159,6 +160,27 @@ pub struct BlurElement { } impl BlurElement { + pub fn from_state( + renderer: &mut R, + state: &mut BlurState, + geometry: Rectangle, + output_scale: f64, + radii: [u8; 4], + strength: usize, + ) -> Result, R::Error> { + let region = vec![Rectangle::from_size(geometry.size.to_i32_round())]; + + Self::internal( + renderer, + state, + geometry, + ®ion, + output_scale, + radii, + strength, + ) + } + pub fn from_surface( renderer: &mut R, states: &SurfaceData, @@ -172,9 +194,37 @@ impl BlurElement { return Ok(None); }; + let state = states + .data_map + .get_or_insert_threadsafe::, _>(Default::default); + + Self::internal( + renderer, + &mut state.lock().unwrap(), + geometry, + region, + output_scale, + radii, + strength, + ) + } + + pub fn internal( + renderer: &mut R, + state: &mut BlurState, + geometry: Rectangle, + region: &Vec>, + output_scale: f64, + radii: [u8; 4], + strength: usize, + ) -> Result, R::Error> { + if strength == 0 { + return Ok(None); + } + let geo = geometry.to_physical_precise_round(output_scale); let mut extended_geo = geo; - let radius = BLUR_PARAMS[strength.min(MAX_STEPS - 1)].extended_radius as f64; + let radius = BLUR_PARAMS[(strength + 2).min(MAX_STEPS - 1)].extended_radius as f64; extended_geo.loc -= Point::::new(radius, radius); extended_geo.size += Size::::new(radius, radius).upscale(2.); @@ -217,32 +267,9 @@ impl BlurElement { Uniform::new("noise", UniformValue::_1f(NOISE)), ]; - let state = states - .data_map - .get_or_insert_threadsafe::, _>(|| Mutex::new(BlurState::new())); + let geometry = extended_geo.to_logical(output_scale); + let extended_offset = Point::::new(radius, radius).to_logical(output_scale); - Ok(Some(Self::from_state( - renderer, - extended_geo.to_logical(output_scale), - Point::::new(radius, radius).to_logical(output_scale), - region, - output_scale, - &mut state.lock().unwrap(), - uniforms, - strength, - )?)) - } - - fn from_state( - renderer: &mut R, - geometry: Rectangle, - extended_offset: Point, - region: &Vec>, - output_scale: f64, - state: &mut BlurState, - uniforms: Vec>, - strength: usize, - ) -> Result { let renderer_id = renderer.glow_renderer().context_id(); let src = geometry.size.to_buffer(output_scale, Transform::Normal); let params = &BLUR_PARAMS[strength.min(MAX_STEPS - 1)]; @@ -265,7 +292,7 @@ impl BlurElement { state.commit.increment(); } - Ok(BlurElement { + Ok(Some(BlurElement { id: state.id.clone(), commit: state.commit, src, @@ -284,7 +311,7 @@ impl BlurElement { }) .collect(), uniforms, - }) + })) } } @@ -468,7 +495,7 @@ fn blit_from_active_fb( let mut fb = renderer.as_mut().bind(to_texture)?; std::mem::drop(renderer); - frame.blit_to( + let sync = frame.blit_to( &mut fb_tmp, dst, Rectangle::from_size(dst.size), @@ -480,6 +507,7 @@ fn blit_from_active_fb( let mut frame = renderer .as_mut() .render(&mut fb, tex_size, Transform::Normal)?; + frame.wait(&sync)?; Frame::render_texture_from_to( &mut frame, &tmp_texture, @@ -502,16 +530,14 @@ fn blit_from_active_fb( } else { let mut fb = frame.renderer().as_mut().bind(to_texture)?; - frame - .blit_to( - &mut fb, - dst, - src.to_logical(1., Transform::Normal, &src.size) - .to_physical(1.) - .to_i32_round(), - TextureFilter::Linear, - ) - .map(|_| SyncPoint::signaled()) + frame.blit_to( + &mut fb, + dst, + src.to_logical(1., Transform::Normal, &src.size) + .to_physical(1.) + .to_i32_round(), + TextureFilter::Linear, + ) } } diff --git a/src/shell/element/resize_indicator.rs b/src/shell/element/resize_indicator.rs index 49dc4781..d1839e6e 100644 --- a/src/shell/element/resize_indicator.rs +++ b/src/shell/element/resize_indicator.rs @@ -1,4 +1,4 @@ -use std::sync::Mutex; +use std::sync::{Arc, Mutex}; use crate::{ config::Config, @@ -12,9 +12,9 @@ use cosmic::{ Apply, iced::{ Alignment, - widget::{column, container, row, space}, + core::{Background, Border, Color, Length}, + widget::{container, row, space}, }, - iced_core::{Background, Border, Color, Length}, theme, widget::{icon::from_name, text}, }; @@ -67,120 +67,90 @@ impl Program for ResizeIndicatorInternal { type Message = (); fn view(&self) -> cosmic::Element<'_, Self::Message> { - let edges = self.edges.lock().unwrap(); - let icon_container_style = || { - theme::Container::custom(|theme| container::Style { + row(vec![ + text::heading(&self.shortcut1).into(), + text::body(fl!("grow-window")).into(), + space::horizontal().width(40).into(), + text::heading(&self.shortcut2).into(), + text::body(fl!("shrink-window")).into(), + ]) + .apply(container) + .align_x(Alignment::Center) + .align_y(Alignment::Center) + .padding(16) + .apply(container) + .class(theme::Container::custom(|theme| { + let mut background = theme.cosmic().accent_color(); + if theme.transparent { + background.alpha = theme + .cosmic() + .alpha_map + .blurred_alpha(theme.cosmic().frosted); + } + + container::Style { snap: true, icon_color: Some(Color::from(theme.cosmic().accent.on)), text_color: Some(Color::from(theme.cosmic().accent.on)), - background: Some(Background::Color(theme.cosmic().accent_color().into())), + background: Some(Background::Color(background.into())), border: Border { radius: 18.0.into(), width: 0.0, color: Color::TRANSPARENT, }, shadow: Default::default(), - }) - }; - - column(vec![ - if edges.contains(ResizeEdge::TOP) { - from_name(if self.direction == ResizeDirection::Outwards { - "go-up-symbolic" - } else { - "go-down-symbolic" - }) - .size(20) - .prefer_svg(true) - .apply(container) - .padding(8) - .class(icon_container_style()) - .width(Length::Shrink) - .apply(container) - .center_x(Length::Fill) - .into() - } else { - space::vertical().height(36).into() - }, - row(vec![ - if edges.contains(ResizeEdge::LEFT) { - from_name(if self.direction == ResizeDirection::Outwards { - "go-previous-symbolic" - } else { - "go-next-symbolic" - }) - .size(20) - .prefer_svg(true) - .apply(container) - .padding(8) - .class(icon_container_style()) - .width(Length::Shrink) - .apply(container) - .center_y(Length::Fill) - .into() - } else { - space::horizontal().width(36).into() - }, - row(vec![ - text::heading(&self.shortcut1).into(), - text::body(fl!("grow-window")).into(), - space::horizontal().width(40).into(), - text::heading(&self.shortcut2).into(), - text::body(fl!("shrink-window")).into(), - ]) - .apply(container) - .align_x(Alignment::Center) - .align_y(Alignment::Center) - .padding(16) - .apply(container) - .class(icon_container_style()) - .width(Length::Shrink) - .height(Length::Shrink) - .apply(container) - .center_x(Length::Fill) - .center_y(Length::Fill) - .into(), - if edges.contains(ResizeEdge::RIGHT) { - from_name(if self.direction == ResizeDirection::Outwards { - "go-next-symbolic" - } else { - "go-previous-symbolic" - }) - .size(20) - .prefer_svg(true) - .apply(container) - .padding(8) - .class(icon_container_style()) - .height(Length::Shrink) - .apply(container) - .center_y(Length::Fill) - .into() - } else { - space::horizontal().width(36).into() - }, - ]) - .width(Length::Fill) - .height(Length::Fill) - .into(), - if edges.contains(ResizeEdge::BOTTOM) { - from_name(if self.direction == ResizeDirection::Outwards { - "go-down-symbolic" - } else { - "go-up-symbolic" - }) - .size(20) - .prefer_svg(true) - .apply(container) - .padding(8) - .class(icon_container_style()) - .width(Length::Shrink) - .apply(container) - .center_x(Length::Fill) - .into() - } else { - space::vertical().height(36).into() - }, - ]) + } + })) + .width(Length::Shrink) + .height(Length::Shrink) + .into() + } +} + +pub struct ResizeIndicatorArrow { + direction: Arc>, + icon_outwards: &'static str, + icon_inwards: &'static str, +} + +impl Program for ResizeIndicatorArrow { + type Message = (); + + fn view(&self) -> cosmic::Element<'_, Self::Message> { + from_name( + if *self.direction.lock().unwrap() == ResizeDirection::Outwards { + self.icon_outwards + } else { + self.icon_inwards + }, + ) + .size(20) + .prefer_svg(true) + .apply(container) + .padding(8) + .class(theme::Container::custom(|theme| { + let mut background = theme.cosmic().accent_color(); + if theme.transparent { + background.alpha = theme + .cosmic() + .alpha_map + .blurred_alpha(theme.cosmic().frosted); + } + + container::Style { + snap: true, + icon_color: Some(Color::from(theme.cosmic().accent.on)), + text_color: Some(Color::from(theme.cosmic().accent.on)), + background: Some(Background::Color(background.into())), + border: Border { + radius: theme.cosmic().radius_s().into(), + width: 0.0, + color: Color::TRANSPARENT, + }, + shadow: Default::default(), + } + })) + .width(Length::Shrink) .into() } } diff --git a/src/shell/element/stack.rs b/src/shell/element/stack.rs index 0980facb..3b1aab87 100644 --- a/src/shell/element/stack.rs +++ b/src/shell/element/stack.rs @@ -4,8 +4,14 @@ use super::{ }; use crate::{ backend::render::{ - IndicatorShader, Key, Usage, cursor::CursorState, element::AsGlowRenderer, - shadow::ShadowShader, wayland::SurfaceRenderElement, + IndicatorShader, Key, Usage, + cursor::CursorState, + element::AsGlowRenderer, + shadow::ShadowShader, + wayland::{ + SurfaceRenderElement, + blur_effect::{BlurElement, BlurState}, + }, }, hooks::{Decorations, HOOKS}, shell::{ @@ -23,10 +29,13 @@ use crate::{ use calloop::LoopHandle; use cosmic::{ Apply, Element as CosmicElement, Theme, - iced::{Alignment, id::Id, widget as iced_widget}, - iced_core::{Background, Border, Color, Length, border::Radius}, - iced_runtime::Task, - iced_widget::scrollable::AbsoluteOffset, + iced::{ + Alignment, + core::{Background, Border, Color, Length, border::Radius}, + id::Id, + runtime::Task, + widget::{self as iced_widget, scrollable::AbsoluteOffset}, + }, theme, widget as cosmic_widget, }; use cosmic_comp_config::AppearanceConfig; @@ -120,6 +129,7 @@ pub struct CosmicStackInternal { tiled: AtomicBool, theme: Mutex, appearance_conf: Mutex, + blur_state: Mutex, } impl CosmicStackInternal { @@ -178,6 +188,7 @@ impl CosmicStack { tiled: AtomicBool::new(false), theme: Mutex::new(theme.clone()), appearance_conf: Mutex::new(appearance), + blur_state: Default::default(), }, (width, TAB_HEIGHT), handle, @@ -661,6 +672,12 @@ impl CosmicStack { self.0.with_program(|p| { let windows = p.windows.lock().unwrap(); let active = p.active.load(Ordering::SeqCst); + let theme = p.theme.lock().unwrap(); + let frosted = if theme.cosmic().frosted_windows { + (theme.cosmic().frosted as u8 + 1) as usize + } else { + 0 + }; windows[active].push_popup_render_elements( renderer, @@ -668,7 +685,7 @@ impl CosmicStack { scale, alpha, scanout_node, - 9, // TODO + frosted, &mut |elem| push(elem.into()), ) }) @@ -769,6 +786,30 @@ impl CosmicStack { .to_physical_precise_round(scale); let stack_loc = location + geometry.loc; let window_loc = location + Point::from((0, (TAB_HEIGHT as f64 * scale.y) as i32)); + let frosted = self.0.with_program(|p| { + let theme = p.theme.lock().unwrap(); + if theme.cosmic().frosted_windows { + (theme.cosmic().frosted as u8 + 1) as usize + } else { + 0 + } + }); + let radii = self.0.with_program(|p| { + let windows = p.windows.lock().unwrap(); + let active = p.active.load(Ordering::SeqCst); + let appearance = p.appearance_conf.lock().unwrap(); + let theme = p.theme.lock().unwrap(); + let tiled = p.tiled.load(Ordering::Acquire); + let maximized = windows[active].is_maximized(false); + let round = (appearance.clip_tiled_windows || !tiled) && !maximized; + round.then(|| { + theme + .cosmic() + .radius_s() + .map(|x| if x < 4.0 { x } else { x + 4.0 }) + .map(|x| x.round() as u8) + }) + }); self.0 .push_render_elements(renderer, stack_loc, scale, alpha, &mut |elem| { @@ -779,19 +820,8 @@ impl CosmicStack { let windows = p.windows.lock().unwrap(); let active = p.active.load(Ordering::SeqCst); let theme = p.theme.lock().unwrap(); - let appearance = p.appearance_conf.lock().unwrap(); - let tiled = p.tiled.load(Ordering::Acquire); let maximized = windows[active].is_maximized(false); - let round = (appearance.clip_tiled_windows || !tiled) && !maximized; - let radii = round.then(|| { - theme - .cosmic() - .radius_s() - .map(|x| if x < 4.0 { x } else { x + 4.0 }) - .map(|x| x.round() as u8) - }); - let mut geo = SpaceElement::geometry(&windows[active]).to_f64(); geo.loc += location.to_f64().to_logical(scale); geo.size.h += TAB_HEIGHT as f64; @@ -809,7 +839,7 @@ impl CosmicStack { Key::Window(Usage::Border, window_key.clone()), geo.to_i32_round().as_local(), 1, - radii.unwrap_or([0, 0, 0, 0]), + radii.unwrap_or([0; 4]), a * alpha, scale.x, [r, g, b], @@ -826,11 +856,34 @@ impl CosmicStack { scanout_node, radii.is_some(), radii.unwrap_or([0; 4]), - 9, // as TODO + frosted, &mut |elem| push_above(elem.into()), Some(&mut |elem| push_below(elem.into())), ); }); + + if frosted > 0 { + let geometry = Rectangle::new( + stack_loc.to_f64().to_logical(scale), + Size::new( + geometry.size.to_f64().to_logical(scale).w, + TAB_HEIGHT as f64, + ), + ); + if let Ok(Some(elem)) = self.0.with_program(|p| { + let mut state = p.blur_state.lock().unwrap(); + BlurElement::from_state( + renderer, + &mut state, + geometry, + scale.x, + radii.map(|[_, b, _, d]| [0, b, 0, d]).unwrap_or([0; 4]), + frosted, + ) + }) { + push_below(elem.into()); + } + } } pub(crate) fn set_theme(&self, theme: cosmic::Theme) { @@ -1342,16 +1395,29 @@ impl Decorations for DefaultDecorations { .class(theme::Container::custom(move |theme| { let cosmic_theme = theme.cosmic(); - let background = if group_focused { + let mut background = if group_focused { cosmic_theme.accent_color() } else { cosmic_theme.primary_container_color() }; + if cosmic_theme.frosted_windows { + background.alpha = cosmic_theme.alpha_map.blurred_alpha(cosmic_theme.frosted); + } iced_widget::container::Style { snap: true, - icon_color: Some(cosmic_theme.background.on.into()), - text_color: Some(cosmic_theme.background.on.into()), + icon_color: Some( + cosmic_theme + .background(cosmic_theme.frosted_windows) + .on + .into(), + ), + text_color: Some( + cosmic_theme + .background(cosmic_theme.frosted_windows) + .on + .into(), + ), background: Some(Background::Color(background.into())), border: Border { radius, @@ -1864,6 +1930,7 @@ impl TouchTarget for CosmicStack { pub enum CosmicStackRenderElement { Header(MemoryRenderBufferRenderElement), + HeaderBlur(BlurElement), Shadow(PixelShaderElement), Border(PixelShaderElement), Window(SurfaceRenderElement), @@ -1877,6 +1944,12 @@ impl From From for CosmicStackRenderElement { + fn from(value: BlurElement) -> Self { + Self::HeaderBlur(value) + } +} + impl From> for CosmicStackRenderElement { @@ -1893,6 +1966,7 @@ where fn id(&self) -> &RendererId { match self { CosmicStackRenderElement::Header(elem) => elem.id(), + CosmicStackRenderElement::HeaderBlur(elem) => elem.id(), CosmicStackRenderElement::Shadow(elem) => elem.id(), CosmicStackRenderElement::Border(elem) => elem.id(), CosmicStackRenderElement::Window(elem) => elem.id(), @@ -1902,6 +1976,7 @@ where fn current_commit(&self) -> CommitCounter { match self { CosmicStackRenderElement::Header(elem) => elem.current_commit(), + CosmicStackRenderElement::HeaderBlur(elem) => elem.current_commit(), CosmicStackRenderElement::Shadow(elem) => elem.current_commit(), CosmicStackRenderElement::Border(elem) => elem.current_commit(), CosmicStackRenderElement::Window(elem) => elem.current_commit(), @@ -1911,6 +1986,7 @@ where fn src(&self) -> Rectangle { match self { CosmicStackRenderElement::Header(elem) => elem.src(), + CosmicStackRenderElement::HeaderBlur(elem) => elem.src(), CosmicStackRenderElement::Shadow(elem) => elem.src(), CosmicStackRenderElement::Border(elem) => elem.src(), CosmicStackRenderElement::Window(elem) => elem.src(), @@ -1920,6 +1996,7 @@ where fn geometry(&self, scale: Scale) -> Rectangle { match self { CosmicStackRenderElement::Header(elem) => elem.geometry(scale), + CosmicStackRenderElement::HeaderBlur(elem) => elem.geometry(scale), CosmicStackRenderElement::Shadow(elem) => elem.geometry(scale), CosmicStackRenderElement::Border(elem) => elem.geometry(scale), CosmicStackRenderElement::Window(elem) => elem.geometry(scale), @@ -1929,6 +2006,7 @@ where fn location(&self, scale: Scale) -> Point { match self { CosmicStackRenderElement::Header(elem) => elem.location(scale), + CosmicStackRenderElement::HeaderBlur(elem) => elem.location(scale), CosmicStackRenderElement::Shadow(elem) => elem.location(scale), CosmicStackRenderElement::Border(elem) => elem.location(scale), CosmicStackRenderElement::Window(elem) => elem.location(scale), @@ -1938,6 +2016,7 @@ where fn transform(&self) -> Transform { match self { CosmicStackRenderElement::Header(elem) => elem.transform(), + CosmicStackRenderElement::HeaderBlur(elem) => elem.transform(), CosmicStackRenderElement::Shadow(elem) => elem.transform(), CosmicStackRenderElement::Border(elem) => elem.transform(), CosmicStackRenderElement::Window(elem) => elem.transform(), @@ -1951,6 +2030,7 @@ where ) -> DamageSet { match self { CosmicStackRenderElement::Header(elem) => elem.damage_since(scale, commit), + CosmicStackRenderElement::HeaderBlur(elem) => elem.damage_since(scale, commit), CosmicStackRenderElement::Shadow(elem) => elem.damage_since(scale, commit), CosmicStackRenderElement::Border(elem) => elem.damage_since(scale, commit), CosmicStackRenderElement::Window(elem) => elem.damage_since(scale, commit), @@ -1960,6 +2040,7 @@ where fn opaque_regions(&self, scale: Scale) -> OpaqueRegions { match self { CosmicStackRenderElement::Header(elem) => elem.opaque_regions(scale), + CosmicStackRenderElement::HeaderBlur(elem) => elem.opaque_regions(scale), CosmicStackRenderElement::Shadow(elem) => elem.opaque_regions(scale), CosmicStackRenderElement::Border(elem) => elem.opaque_regions(scale), CosmicStackRenderElement::Window(elem) => elem.opaque_regions(scale), @@ -1969,6 +2050,7 @@ where fn alpha(&self) -> f32 { match self { CosmicStackRenderElement::Header(elem) => elem.alpha(), + CosmicStackRenderElement::HeaderBlur(elem) => elem.alpha(), CosmicStackRenderElement::Shadow(elem) => elem.alpha(), CosmicStackRenderElement::Border(elem) => elem.alpha(), CosmicStackRenderElement::Window(elem) => elem.alpha(), @@ -1978,6 +2060,7 @@ where fn kind(&self) -> Kind { match self { CosmicStackRenderElement::Header(elem) => elem.kind(), + CosmicStackRenderElement::HeaderBlur(elem) => elem.kind(), CosmicStackRenderElement::Shadow(elem) => elem.kind(), CosmicStackRenderElement::Border(elem) => elem.kind(), CosmicStackRenderElement::Window(elem) => elem.kind(), @@ -1987,6 +2070,7 @@ where fn is_framebuffer_effect(&self) -> bool { match self { CosmicStackRenderElement::Header(elem) => elem.is_framebuffer_effect(), + CosmicStackRenderElement::HeaderBlur(elem) => elem.is_framebuffer_effect(), CosmicStackRenderElement::Shadow(elem) => elem.is_framebuffer_effect(), CosmicStackRenderElement::Border(elem) => elem.is_framebuffer_effect(), CosmicStackRenderElement::Window(elem) => elem.is_framebuffer_effect(), @@ -2012,6 +2096,9 @@ where CosmicStackRenderElement::Header(elem) => { elem.draw(frame, src, dst, damage, opaque_regions, cache) } + CosmicStackRenderElement::HeaderBlur(elem) => { + RenderElement::::draw(elem, frame, src, dst, damage, opaque_regions, cache) + } CosmicStackRenderElement::Shadow(elem) | CosmicStackRenderElement::Border(elem) => { RenderElement::::draw( elem, @@ -2033,6 +2120,7 @@ where fn underlying_storage(&self, renderer: &mut R) -> Option> { match self { CosmicStackRenderElement::Header(elem) => elem.underlying_storage(renderer), + CosmicStackRenderElement::HeaderBlur(elem) => elem.underlying_storage(renderer), CosmicStackRenderElement::Shadow(elem) | CosmicStackRenderElement::Border(elem) => { elem.underlying_storage(renderer.glow_renderer_mut()) } @@ -2051,6 +2139,9 @@ where CosmicStackRenderElement::Header(elem) => { elem.capture_framebuffer(frame, src, dst, cache) } + CosmicStackRenderElement::HeaderBlur(elem) => { + RenderElement::::capture_framebuffer(elem, frame, src, dst, cache) + } CosmicStackRenderElement::Shadow(elem) | CosmicStackRenderElement::Border(elem) => { RenderElement::::capture_framebuffer( elem, diff --git a/src/shell/element/stack/tab.rs b/src/shell/element/stack/tab.rs index 99b0c247..f8fda525 100644 --- a/src/shell/element/stack/tab.rs +++ b/src/shell/element/stack/tab.rs @@ -3,16 +3,15 @@ use cosmic::{ font::Font, iced::{ Background, - widget::{self, container::draw_background, rule::FillMode}, + core::{ + Border, Clipboard, Color, Length, Rectangle, Shell, Size, alignment, event, + layout::{Layout, Limits, Node}, + mouse, overlay, renderer, + text::{Ellipsize, EllipsizeHeightLimit, Shaping, Wrapping}, + widget::{Id, Widget, operation::Operation, tree::Tree}, + }, + widget::{self, container::draw_background, rule::FillMode, scrollable::AbsoluteOffset}, }, - iced_core::{ - Border, Clipboard, Color, Length, Rectangle, Shell, Size, alignment, event, - layout::{Layout, Limits, Node}, - mouse, overlay, renderer, - text::{Ellipsize, EllipsizeHeightLimit, Shaping, Wrapping}, - widget::{Id, Widget, operation::Operation, tree::Tree}, - }, - iced_widget::scrollable::AbsoluteOffset, theme, widget::{Icon, icon::from_name, text}, }; @@ -64,9 +63,20 @@ impl From for theme::Container<'_> { snap: true, icon_color: Some(Color::from(theme.cosmic().accent_text_color())), text_color: Some(Color::from(theme.cosmic().accent_text_color())), - background: Some(Background::Color( - theme.cosmic().primary.component.selected.into(), - )), + background: Some(Background::Color({ + let mut color = theme + .cosmic() + .primary(theme.cosmic().frosted_windows) + .component + .selected; + if theme.cosmic().frosted_windows { + color.alpha = theme + .cosmic() + .alpha_map + .blurred_alpha(theme.cosmic().frosted); + } + color.into() + })), border: Border { radius: 0.0.into(), width: 0.0, @@ -80,9 +90,20 @@ impl From for theme::Container<'_> { snap: true, icon_color: None, text_color: None, - background: Some(Background::Color( - theme.cosmic().primary.component.base.into(), - )), + background: Some(Background::Color({ + let mut color = theme + .cosmic() + .primary(theme.cosmic().frosted_windows) + .component + .base; + if theme.cosmic().frosted_windows { + color.alpha = theme + .cosmic() + .alpha_map + .blurred_alpha(theme.cosmic().frosted); + } + color.into() + })), border: Border { radius: 0.0.into(), width: 0.0, @@ -289,8 +310,8 @@ where .min_height(size.height) .width(size.width) .height(size.height); - cosmic::iced_core::layout::flex::resolve( - cosmic::iced_core::layout::flex::Axis::Horizontal, + cosmic::iced::core::layout::flex::resolve( + cosmic::iced::core::layout::flex::Axis::Horizontal, renderer, &limits, Length::Fill, diff --git a/src/shell/element/stack/tabs.rs b/src/shell/element/stack/tabs.rs index f411fe26..86218db6 100644 --- a/src/shell/element/stack/tabs.rs +++ b/src/shell/element/stack/tabs.rs @@ -1,24 +1,30 @@ use super::tab::{MIN_ACTIVE_TAB_WIDTH, Tab, TabBackgroundTheme, TabMessage, TabRuleTheme}; use cosmic::{ Apply, - iced::{Element, id::Id, widget}, - iced_core::{ - Background, Border, Clipboard, Color, Length, Point, Rectangle, Renderer, Shell, Size, - Vector, event, - layout::{Layout, Limits, Node}, - mouse, overlay, renderer, - widget::{ - Widget, - operation::{ - Operation, Scrollable, - scrollable::{AbsoluteOffset, RelativeOffset}, + iced::{ + Element, + core::{ + Background, Border, Clipboard, Color, Length, Point, Rectangle, Renderer, Shell, Size, + Vector, event, + layout::{Layout, Limits, Node}, + mouse, overlay, renderer, + widget::{ + Widget, + operation::{ + Operation, Scrollable, + scrollable::{AbsoluteOffset, RelativeOffset}, + }, + tree::{self, Tree}, }, - tree::{self, Tree}, + }, + id::Id, + widget::{ + self, + container::{Catalog, draw_background}, }, }, - iced_widget::container::draw_background, theme, - widget::{container::Catalog, icon::from_name}, + widget::icon::from_name, }; use keyframe::{ ease, @@ -379,8 +385,8 @@ where >= MIN_ACTIVE_TAB_WIDTH { // just use a flex layout - cosmic::iced_core::layout::flex::resolve( - cosmic::iced_core::layout::flex::Axis::Horizontal, + cosmic::iced::core::layout::flex::resolve( + cosmic::iced::core::layout::flex::Axis::Horizontal, renderer, &limits, self.width, @@ -513,13 +519,11 @@ where let background_style = Catalog::style( theme, - &theme::Container::custom(|theme| widget::container::Style { + &theme::Container::custom(|_theme| widget::container::Style { snap: true, icon_color: None, text_color: None, - background: Some(Background::Color( - theme.cosmic().primary_container_color().into(), - )), + background: Some(Background::Color(Color::TRANSPARENT)), border: Border { radius: 0.0.into(), width: 0.0, diff --git a/src/shell/element/stack_hover.rs b/src/shell/element/stack_hover.rs index 9a86709c..d6a057c4 100644 --- a/src/shell/element/stack_hover.rs +++ b/src/shell/element/stack_hover.rs @@ -8,9 +8,9 @@ use cosmic::{ Apply, iced::{ Alignment, + core::{Background, Border, Color, Length}, widget::{container, row}, }, - iced_core::{Background, Border, Color, Length}, theme, widget::{icon::from_name, space, text}, }; @@ -47,17 +47,27 @@ impl Program for StackHoverInternal { .align_y(Alignment::Center) .padding(16) .apply(container) - .class(theme::Container::custom(|theme| container::Style { - snap: true, - icon_color: Some(Color::from(theme.cosmic().accent.on)), - text_color: Some(Color::from(theme.cosmic().accent.on)), - background: Some(Background::Color(theme.cosmic().accent_color().into())), - border: Border { - radius: 18.0.into(), - width: 0.0, - color: Color::TRANSPARENT, - }, - shadow: Default::default(), + .class(theme::Container::custom(|theme| { + let mut background = theme.cosmic().accent_color(); + if theme.transparent { + background.alpha = theme + .cosmic() + .alpha_map + .blurred_alpha(theme.cosmic().frosted); + } + + container::Style { + snap: true, + icon_color: Some(Color::from(theme.cosmic().accent.on)), + text_color: Some(Color::from(theme.cosmic().accent.on)), + background: Some(Background::Color(background.into())), + border: Border { + radius: theme.cosmic().radius_s().into(), + width: 0.0, + color: Color::TRANSPARENT, + }, + shadow: Default::default(), + } })) .width(Length::Shrink) .height(Length::Shrink) diff --git a/src/shell/element/swap_indicator.rs b/src/shell/element/swap_indicator.rs index 0db66cda..e6fb0197 100644 --- a/src/shell/element/swap_indicator.rs +++ b/src/shell/element/swap_indicator.rs @@ -6,8 +6,10 @@ use crate::{ use calloop::LoopHandle; use cosmic::{ Apply, - iced::widget::{container, row, space}, - iced_core::{Alignment, Background, Border, Color, Length}, + iced::{ + core::{Alignment, Background, Border, Color, Length}, + widget::{container, row, space}, + }, theme, widget::{icon::from_name, text}, }; @@ -43,17 +45,27 @@ impl Program for SwapIndicatorInternal { .align_y(Alignment::Center) .padding(16) .apply(container) - .class(theme::Container::custom(|theme| container::Style { - snap: true, - icon_color: Some(Color::from(theme.cosmic().accent.on)), - text_color: Some(Color::from(theme.cosmic().accent.on)), - background: Some(Background::Color(theme.cosmic().accent_color().into())), - border: Border { - radius: 18.0.into(), - width: 0.0, - color: Color::TRANSPARENT, - }, - shadow: Default::default(), + .class(theme::Container::custom(|theme| { + let mut background = theme.cosmic().accent_color(); + if theme.transparent { + background.alpha = theme + .cosmic() + .alpha_map + .blurred_alpha(theme.cosmic().frosted); + } + + container::Style { + snap: true, + icon_color: Some(Color::from(theme.cosmic().accent.on)), + text_color: Some(Color::from(theme.cosmic().accent.on)), + background: Some(Background::Color(background.into())), + border: Border { + radius: theme.cosmic().radius_s().into(), + width: 0.0, + color: Color::TRANSPARENT, + }, + shadow: Default::default(), + } })) .width(Length::Shrink) .height(Length::Shrink) diff --git a/src/shell/element/window.rs b/src/shell/element/window.rs index de949b8e..b978cfd3 100644 --- a/src/shell/element/window.rs +++ b/src/shell/element/window.rs @@ -1,7 +1,13 @@ use crate::{ backend::render::{ - IndicatorShader, Key, Usage, cursor::CursorState, element::AsGlowRenderer, - shadow::ShadowShader, wayland::SurfaceRenderElement, + IndicatorShader, Key, Usage, + cursor::CursorState, + element::AsGlowRenderer, + shadow::ShadowShader, + wayland::{ + SurfaceRenderElement, + blur_effect::{BlurElement, BlurState}, + }, }, hooks::{Decorations, HOOKS}, shell::{ @@ -93,6 +99,7 @@ pub struct CosmicWindowInternal { tiled: AtomicBool, theme: Mutex, appearance_conf: Mutex, + blur_state: Mutex, } #[repr(u8)] @@ -213,6 +220,7 @@ impl CosmicWindow { tiled: AtomicBool::new(false), theme: Mutex::new(theme.clone()), appearance_conf: Mutex::new(appearance), + blur_state: Mutex::default(), }, (width, SSD_HEIGHT), handle, @@ -369,13 +377,20 @@ impl CosmicWindow { }; self.0.with_program(|p| { + let theme = p.theme.lock().unwrap(); + let frosted = if theme.cosmic().frosted_windows { + (theme.cosmic().frosted as u8 + 1) as usize + } else { + 0 + }; + p.window.push_popup_render_elements( renderer, window_loc, scale, alpha, scanout_node, - 9, // TODO + frosted, &mut |elem| push(elem.into()), ) }) @@ -543,11 +558,17 @@ impl CosmicWindow { push_above(elem); } - self.0.with_program(|p| { + let frosted = self.0.with_program(|p| { if has_ssd { radii[1] = 0; radii[3] = 0; } + let theme = p.theme.lock().unwrap(); + let frosted = if theme.cosmic().frosted_windows { + (theme.cosmic().frosted as u8 + 1) as usize + } else { + 0 + }; p.window.push_render_elements( renderer, window_loc, @@ -557,18 +578,31 @@ impl CosmicWindow { scanout_node, clip, radii, - 9, // TODO + frosted, &mut |elem| push_above(elem.into()), Some(&mut |elem| push_below(elem.into())), - ) + ); + + frosted }); if has_ssd { let ssd_loc = location + self .0 - .with_program(|p| p.window.geometry().loc) - .to_physical_precise_round(scale); + .with_program(|p| p.window.geometry().loc.to_physical_precise_round(scale)); + if frosted > 0 { + let geometry = Rectangle::new( + ssd_loc.to_f64().to_logical(scale), + Size::new(geo.size.w, SSD_HEIGHT as f64), + ); + if let Ok(Some(elem)) = self.0.with_program(|p| { + let mut state = p.blur_state.lock().unwrap(); + BlurElement::from_state(renderer, &mut state, geometry, scale.x, radii, frosted) + }) { + push_below(elem.into()); + } + } self.0 .push_render_elements(renderer, ssd_loc, scale, alpha, &mut |elem| { push_above(elem.into()) @@ -812,7 +846,11 @@ impl Program for CosmicWindowInternal { fn background_color(&self, theme: &cosmic::Theme) -> Color { if self.window.is_maximized(false) { - theme.cosmic().background.base.into() + theme + .cosmic() + .background(theme.cosmic().frosted_windows) + .base + .into() } else { Color::TRANSPARENT } @@ -1231,6 +1269,7 @@ impl WaylandFocus for CosmicWindow { pub enum CosmicWindowRenderElement { Header(MemoryRenderBufferRenderElement), + HeaderBlur(BlurElement), Shadow(PixelShaderElement), Border(PixelShaderElement), Window(SurfaceRenderElement), @@ -1244,6 +1283,12 @@ impl From From for CosmicWindowRenderElement { + fn from(value: BlurElement) -> Self { + Self::HeaderBlur(value) + } +} + impl From> for CosmicWindowRenderElement { @@ -1260,6 +1305,7 @@ where fn id(&self) -> &RendererId { match self { CosmicWindowRenderElement::Header(elem) => elem.id(), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.id(), CosmicWindowRenderElement::Shadow(elem) => elem.id(), CosmicWindowRenderElement::Border(elem) => elem.id(), CosmicWindowRenderElement::Window(elem) => elem.id(), @@ -1269,6 +1315,7 @@ where fn current_commit(&self) -> CommitCounter { match self { CosmicWindowRenderElement::Header(elem) => elem.current_commit(), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.current_commit(), CosmicWindowRenderElement::Shadow(elem) => elem.current_commit(), CosmicWindowRenderElement::Border(elem) => elem.current_commit(), CosmicWindowRenderElement::Window(elem) => elem.current_commit(), @@ -1278,6 +1325,7 @@ where fn src(&self) -> Rectangle { match self { CosmicWindowRenderElement::Header(elem) => elem.src(), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.src(), CosmicWindowRenderElement::Shadow(elem) => elem.src(), CosmicWindowRenderElement::Border(elem) => elem.src(), CosmicWindowRenderElement::Window(elem) => elem.src(), @@ -1287,6 +1335,7 @@ where fn geometry(&self, scale: Scale) -> Rectangle { match self { CosmicWindowRenderElement::Header(elem) => elem.geometry(scale), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.geometry(scale), CosmicWindowRenderElement::Shadow(elem) => elem.geometry(scale), CosmicWindowRenderElement::Border(elem) => elem.geometry(scale), CosmicWindowRenderElement::Window(elem) => elem.geometry(scale), @@ -1296,6 +1345,7 @@ where fn location(&self, scale: Scale) -> Point { match self { CosmicWindowRenderElement::Header(elem) => elem.location(scale), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.location(scale), CosmicWindowRenderElement::Shadow(elem) => elem.location(scale), CosmicWindowRenderElement::Border(elem) => elem.location(scale), CosmicWindowRenderElement::Window(elem) => elem.location(scale), @@ -1305,6 +1355,7 @@ where fn transform(&self) -> Transform { match self { CosmicWindowRenderElement::Header(elem) => elem.transform(), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.transform(), CosmicWindowRenderElement::Shadow(elem) => elem.transform(), CosmicWindowRenderElement::Border(elem) => elem.transform(), CosmicWindowRenderElement::Window(elem) => elem.transform(), @@ -1318,6 +1369,7 @@ where ) -> DamageSet { match self { CosmicWindowRenderElement::Header(elem) => elem.damage_since(scale, commit), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.damage_since(scale, commit), CosmicWindowRenderElement::Shadow(elem) => elem.damage_since(scale, commit), CosmicWindowRenderElement::Border(elem) => elem.damage_since(scale, commit), CosmicWindowRenderElement::Window(elem) => elem.damage_since(scale, commit), @@ -1327,6 +1379,7 @@ where fn opaque_regions(&self, scale: Scale) -> OpaqueRegions { match self { CosmicWindowRenderElement::Header(elem) => elem.opaque_regions(scale), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.opaque_regions(scale), CosmicWindowRenderElement::Shadow(elem) => elem.opaque_regions(scale), CosmicWindowRenderElement::Border(elem) => elem.opaque_regions(scale), CosmicWindowRenderElement::Window(elem) => elem.opaque_regions(scale), @@ -1336,6 +1389,7 @@ where fn alpha(&self) -> f32 { match self { CosmicWindowRenderElement::Header(elem) => elem.alpha(), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.alpha(), CosmicWindowRenderElement::Shadow(elem) => elem.alpha(), CosmicWindowRenderElement::Border(elem) => elem.alpha(), CosmicWindowRenderElement::Window(elem) => elem.alpha(), @@ -1345,6 +1399,7 @@ where fn kind(&self) -> Kind { match self { CosmicWindowRenderElement::Header(elem) => elem.kind(), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.kind(), CosmicWindowRenderElement::Shadow(elem) => elem.kind(), CosmicWindowRenderElement::Border(elem) => elem.kind(), CosmicWindowRenderElement::Window(elem) => elem.kind(), @@ -1354,6 +1409,7 @@ where fn is_framebuffer_effect(&self) -> bool { match self { CosmicWindowRenderElement::Header(elem) => elem.is_framebuffer_effect(), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.is_framebuffer_effect(), CosmicWindowRenderElement::Shadow(elem) => elem.is_framebuffer_effect(), CosmicWindowRenderElement::Border(elem) => elem.is_framebuffer_effect(), CosmicWindowRenderElement::Window(elem) => elem.is_framebuffer_effect(), @@ -1379,6 +1435,9 @@ where CosmicWindowRenderElement::Header(elem) => { elem.draw(frame, src, dst, damage, opaque_regions, cache) } + CosmicWindowRenderElement::HeaderBlur(elem) => { + RenderElement::::draw(elem, frame, src, dst, damage, opaque_regions, cache) + } CosmicWindowRenderElement::Shadow(elem) | CosmicWindowRenderElement::Border(elem) => { RenderElement::::draw( elem, @@ -1400,6 +1459,7 @@ where fn underlying_storage(&self, renderer: &mut R) -> Option> { match self { CosmicWindowRenderElement::Header(elem) => elem.underlying_storage(renderer), + CosmicWindowRenderElement::HeaderBlur(elem) => elem.underlying_storage(renderer), CosmicWindowRenderElement::Shadow(elem) | CosmicWindowRenderElement::Border(elem) => { elem.underlying_storage(renderer.glow_renderer_mut()) } @@ -1418,6 +1478,9 @@ where CosmicWindowRenderElement::Header(elem) => { elem.capture_framebuffer(frame, src, dst, cache) } + CosmicWindowRenderElement::HeaderBlur(elem) => { + RenderElement::::capture_framebuffer(elem, frame, src, dst, cache) + } CosmicWindowRenderElement::Shadow(elem) | CosmicWindowRenderElement::Border(elem) => { RenderElement::::capture_framebuffer( elem, diff --git a/src/shell/grabs/menu/item.rs b/src/shell/grabs/menu/item.rs index baa61fde..90614f6b 100644 --- a/src/shell/grabs/menu/item.rs +++ b/src/shell/grabs/menu/item.rs @@ -1,10 +1,12 @@ use cosmic::{ - iced::Element, - iced_core::{ - Background, Border, Clipboard, Color, Event, Layout, Length, Rectangle, - Renderer as IcedRenderer, Shell, Size, layout, mouse, overlay, - renderer::{Quad, Style}, - widget::{Id, Tree, Widget, tree}, + iced::{ + Element, + core::{ + Background, Border, Clipboard, Color, Event, Layout, Length, Rectangle, + Renderer as IcedRenderer, Shell, Size, layout, mouse, overlay, + renderer::{Quad, Style}, + widget::{Id, Tree, Widget, tree}, + }, }, widget::button::Catalog, }; diff --git a/src/shell/grabs/menu/mod.rs b/src/shell/grabs/menu/mod.rs index e79734e9..ec82bb07 100644 --- a/src/shell/grabs/menu/mod.rs +++ b/src/shell/grabs/menu/mod.rs @@ -9,9 +9,11 @@ use std::{ use calloop::LoopHandle; use cosmic::{ Apply as _, Task, - iced::{Alignment, Background}, - iced_core::{Border, Length, Rectangle as IcedRectangle, alignment::Horizontal}, - iced_widget::{self, Column, Row, text::Style as TextStyle}, + iced::{ + Alignment, Background, + core::{Border, Length, Rectangle as IcedRectangle, alignment::Horizontal}, + widget::{self as iced_widget, Column, Row, text::Style as TextStyle}, + }, theme, widget::{button, divider, icon::from_name, space, text}, }; @@ -424,10 +426,11 @@ impl Program for ContextMenu { .width(mode) .class(if *disabled { theme::Text::Custom(|theme| { - let mut color = theme.cosmic().background.component.on; + let mut color = theme.cosmic().background(false).component.on; color.alpha *= 0.5; TextStyle { color: Some(color.into()), + ..Default::default() } }) } else { @@ -442,10 +445,11 @@ impl Program for ContextMenu { .align_x(Horizontal::Right) .width(Length::Shrink) .class(theme::Text::Custom(|theme| { - let mut color = theme.cosmic().background.component.on; + let mut color = theme.cosmic().background(false).component.on; color.alpha *= 0.75; TextStyle { color: Some(color.into()), + ..Default::default() } })) .into(), @@ -470,7 +474,7 @@ impl Program for ContextMenu { .padding(1) .class(theme::Container::custom(|theme| { let cosmic = theme.cosmic(); - let component = &cosmic.background.component; + let component = &cosmic.background(false).component; iced_widget::container::Style { snap: true, icon_color: Some(cosmic.accent.base.into()), diff --git a/src/shell/workspace.rs b/src/shell/workspace.rs index dc5d9f63..ea5dbad7 100644 --- a/src/shell/workspace.rs +++ b/src/shell/workspace.rs @@ -1686,15 +1686,15 @@ impl Workspace { .as_logical() .to_physical_precise_round(output_scale); + let fullscreen_geo = fullscreen.surface.0.geometry(); + let scale = Scale { + x: target_geo.size.w as f64 / fullscreen_geo.size.w as f64, + y: target_geo.size.h as f64 / fullscreen_geo.size.h as f64, + }; + // Only rescale geometry when animating let animation_rescale = |elem| { if fullscreen.is_animating() { - let fullscreen_geo = fullscreen.surface.0.geometry(); - let scale = Scale { - x: target_geo.size.w as f64 / fullscreen_geo.size.w as f64, - y: target_geo.size.h as f64 / fullscreen_geo.size.h as f64, - }; - RescaleRenderElement::from_element(elem, render_loc, scale).into() } else { Into::>::into(elem) diff --git a/src/shell/zoom.rs b/src/shell/zoom.rs index 02d1be55..e0d3f1d1 100644 --- a/src/shell/zoom.rs +++ b/src/shell/zoom.rs @@ -3,8 +3,8 @@ use std::{sync::Mutex, time::Instant}; use calloop::LoopHandle; use cosmic::{ Apply, - iced::{Alignment, Background, Border, Length, alignment::Vertical}, - iced_widget, theme, + iced::{Alignment, Background, Border, Length, alignment::Vertical, widget as iced_widget}, + theme, widget::{self, icon::Named}, }; use cosmic_comp_config::ZoomMovement; @@ -515,7 +515,7 @@ impl Program for ZoomProgram { .padding(8) .class(theme::Container::custom(|theme| { let cosmic = theme.cosmic(); - let component = &cosmic.background.component; + let component = &cosmic.background(false).component; iced_widget::container::Style { snap: true, icon_color: Some(component.on.into()), diff --git a/src/utils/iced/mod.rs b/src/utils/iced/mod.rs index 2ee79733..9d57b46d 100644 --- a/src/utils/iced/mod.rs +++ b/src/utils/iced/mod.rs @@ -12,15 +12,15 @@ use cosmic::{ iced::{ Limits, Point as IcedPoint, Size as IcedSize, Task, advanced::{graphics::text::font_system, widget::Tree}, + core::{Color, Length, Pixels, clipboard::Null as NullClipboard, id::Id, renderer::Style}, event::Event, futures::{FutureExt, StreamExt}, keyboard::{Event as KeyboardEvent, Modifiers as IcedModifiers}, mouse::{Button as MouseButton, Cursor, Event as MouseEvent, ScrollDelta}, + runtime::{Action, task::into_stream}, touch::{Event as TouchEvent, Finger}, window::Event as WindowEvent, }, - iced_core::{Color, Length, Pixels, clipboard::Null as NullClipboard, id::Id, renderer::Style}, - iced_runtime::{Action, task::into_stream}, }; use iced_tiny_skia::{ Layer, diff --git a/src/utils/iced/state.rs b/src/utils/iced/state.rs index db67d8f3..2af3a993 100644 --- a/src/utils/iced/state.rs +++ b/src/utils/iced/state.rs @@ -1,12 +1,16 @@ use super::IcedProgram as Program; -use cosmic::iced::core::event::{self, Event}; -use cosmic::iced::core::mouse; -use cosmic::iced::core::renderer; -use cosmic::iced::core::widget::operation::{self, Operation}; -use cosmic::iced::core::{Clipboard, Size}; -use cosmic::iced_core; -use cosmic::iced_runtime::Task; -use cosmic::iced_runtime::user_interface::{self, UserInterface}; +use cosmic::iced::{ + core::{ + self as iced_core, Clipboard, Size, + event::{self, Event}, + mouse, renderer, + widget::operation::{self, Operation}, + }, + runtime::{ + Task, + user_interface::{self, UserInterface}, + }, +}; /// The execution state of a [`Program`]. It leverages caching, event /// processing, and rendering primitive storage. @@ -128,7 +132,7 @@ where messages.append(&mut self.queued_messages); let task = if messages.is_empty() { - if let cosmic::iced_runtime::user_interface::State::Updated { + if let cosmic::iced::runtime::user_interface::State::Updated { mouse_interaction, .. } = state { @@ -154,7 +158,7 @@ where let mut user_interface = build_user_interface(id, &mut self.program, temp_cache, renderer, bounds); - if let cosmic::iced_runtime::user_interface::State::Updated { + if let cosmic::iced::runtime::user_interface::State::Updated { mouse_interaction, .. } = state {