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