Move to tracking master branch of iced
Diff
Cargo.lock | 374 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
shalom/src/main.rs | 4 ++--
shalom/src/magic/header_search.rs | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
shalom/src/pages/room.rs | 2 +-
shalom/src/widgets/blackhole_event.rs | 5 +++--
shalom/src/widgets/context_menu.rs | 44 ++++++++++++++++++++++++--------------------
shalom/src/widgets/forced_rounded.rs | 27 +++++++++++++--------------
shalom/src/widgets/image_background.rs | 40 ++++++++++++++++++++++++----------------
shalom/src/widgets/image_card.rs | 46 +++++++++++++++++++++++++++-------------------
shalom/src/widgets/spinner.rs | 22 +++++++++-------------
shalom/src/pages/room/listen.rs | 32 +++++++++++++-------------------
shalom/src/widgets/cards/weather.rs | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
12 files changed, 481 insertions(+), 397 deletions(-)
@@ -384,7 +384,7 @@
"cocoa-foundation",
"core-foundation",
"core-graphics",
"foreign-types",
"foreign-types 0.3.2",
"libc",
"objc",
]
@@ -450,7 +450,7 @@
"bitflags 1.3.2",
"core-foundation",
"core-graphics-types",
"foreign-types",
"foreign-types 0.3.2",
"libc",
]
@@ -467,16 +467,17 @@
[[package]]
name = "cosmic-text"
version = "0.9.0"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0b68966c2543609f8d92f9d33ac3b719b2a67529b0c6c0b3e025637b477eef9"
checksum = "75acbfb314aeb4f5210d379af45ed1ec2c98c7f1790bf57b8a4c562ac0c51b71"
dependencies = [
"aliasable",
"fontdb 0.14.1",
"fontdb 0.15.0",
"libm",
"log",
"rangemap",
"rustybuzz 0.8.0",
"rustc-hash",
"rustybuzz 0.11.0",
"self_cell",
"swash",
"sys-locale",
"unicode-bidi",
@@ -554,12 +555,12 @@
[[package]]
name = "d3d12"
version = "0.6.0"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da"
checksum = "e16e44ab292b1dddfdaf7be62cfd8877df52f2f3fde5858d95bab606be259f20"
dependencies = [
"bitflags 1.3.2",
"libloading 0.7.4",
"bitflags 2.4.1",
"libloading 0.8.1",
"winapi",
]
@@ -603,12 +604,6 @@
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
[[package]]
name = "data-url"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5"
[[package]]
name = "data-url"
@@ -714,7 +709,7 @@
checksum = "279d3efcc55e19917fff7ab3ddd6c14afb6a90881a0078465196fe2f99d08c56"
dependencies = [
"bit_field",
"flume",
"flume 0.10.14",
"half",
"lebe",
"miniz_oxide",
@@ -782,6 +777,18 @@
"futures-sink",
"nanorand",
"pin-project",
"spin",
]
[[package]]
name = "flume"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
dependencies = [
"futures-core",
"futures-sink",
"nanorand",
"spin",
]
@@ -802,13 +809,13 @@
[[package]]
name = "fontdb"
version = "0.14.1"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e"
checksum = "020e203f177c0fb250fb19455a252e838d2bbbce1f80f25ecc42402aafa8cd38"
dependencies = [
"fontconfig-parser",
"log",
"memmap2 0.6.2",
"memmap2 0.8.0",
"slotmap",
"tinyvec",
"ttf-parser 0.19.2",
@@ -833,8 +840,29 @@
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
dependencies = [
"foreign-types-shared 0.1.1",
]
[[package]]
name = "foreign-types"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
dependencies = [
"foreign-types-macros",
"foreign-types-shared 0.3.1",
]
[[package]]
name = "foreign-types-macros"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"foreign-types-shared",
"proc-macro2",
"quote",
"syn 2.0.38",
]
[[package]]
@@ -844,6 +872,12 @@
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
name = "foreign-types-shared"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
[[package]]
name = "form_urlencoded"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -990,6 +1024,17 @@
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
name = "gl_generator"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
dependencies = [
"khronos_api",
"log",
"xml-rs",
]
[[package]]
name = "glam"
@@ -999,21 +1044,29 @@
[[package]]
name = "glow"
version = "0.12.3"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728"
checksum = "886c2a30b160c4c6fec8f987430c26b526b7988ca71f664e6a699ddf6f9601e4"
dependencies = [
"js-sys",
"slotmap",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "glutin_wgl_sys"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead"
dependencies = [
"gl_generator",
]
[[package]]
name = "glyphon"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e87caa7459145f5e5f167bf34db4532901404c679e62339fb712a0e3ccf722a"
source = "git+https://github.com/grovesNL/glyphon.git?rev=2caa9fc5e5923c1d827d177c3619cab7e9885b85#2caa9fc5e5923c1d827d177c3619cab7e9885b85"
dependencies = [
"cosmic-text",
"etagere",
@@ -1023,31 +1076,32 @@
[[package]]
name = "gpu-alloc"
version = "0.5.4"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22beaafc29b38204457ea030f6fb7a84c9e4dd1b86e311ba0542533453d87f62"
checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.1",
"gpu-alloc-types",
]
[[package]]
name = "gpu-alloc-types"
version = "0.2.0"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5"
checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.1",
]
[[package]]
name = "gpu-allocator"
version = "0.22.0"
version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8"
checksum = "40fe17c8a05d60c38c0a4e5a3c802f2f1ceb66b76c67d96ffb34bef0475a7fad"
dependencies = [
"backtrace",
"log",
"presser",
"thiserror",
"winapi",
"windows",
@@ -1267,7 +1321,7 @@
[[package]]
name = "iced"
version = "0.10.0"
version = "0.12.0"
dependencies = [
"iced_core",
"iced_futures",
@@ -1280,19 +1334,21 @@
[[package]]
name = "iced_core"
version = "0.10.0"
version = "0.12.0"
dependencies = [
"bitflags 1.3.2",
"instant",
"log",
"num-traits",
"palette",
"raw-window-handle",
"thiserror",
"twox-hash",
"xxhash-rust",
]
[[package]]
name = "iced_futures"
version = "0.7.0"
version = "0.12.0"
dependencies = [
"futures",
"iced_core",
@@ -1304,10 +1360,11 @@
[[package]]
name = "iced_graphics"
version = "0.9.0"
version = "0.12.0"
dependencies = [
"bitflags 1.3.2",
"bytemuck",
"cosmic-text",
"glam",
"half",
"iced_core",
@@ -1315,13 +1372,17 @@
"kamadak-exif",
"log",
"lyon_path",
"once_cell",
"raw-window-handle",
"rustc-hash",
"thiserror",
"unicode-segmentation",
"xxhash-rust",
]
[[package]]
name = "iced_renderer"
version = "0.1.0"
version = "0.12.0"
dependencies = [
"iced_graphics",
"iced_tiny_skia",
@@ -1333,7 +1394,7 @@
[[package]]
name = "iced_runtime"
version = "0.1.1"
version = "0.12.0"
dependencies = [
"iced_core",
"iced_futures",
@@ -1342,7 +1403,7 @@
[[package]]
name = "iced_style"
version = "0.9.0"
version = "0.12.0"
dependencies = [
"iced_core",
"once_cell",
@@ -1351,7 +1412,7 @@
[[package]]
name = "iced_tiny_skia"
version = "0.1.0"
version = "0.12.0"
dependencies = [
"bytemuck",
"cosmic-text",
@@ -1362,13 +1423,13 @@
"resvg",
"rustc-hash",
"softbuffer",
"tiny-skia 0.10.0",
"twox-hash",
"tiny-skia 0.11.3",
"xxhash-rust",
]
[[package]]
name = "iced_wgpu"
version = "0.11.1"
version = "0.12.0"
dependencies = [
"bitflags 1.3.2",
"bytemuck",
@@ -1382,14 +1443,12 @@
"once_cell",
"raw-window-handle",
"resvg",
"rustc-hash",
"twox-hash",
"wgpu",
]
[[package]]
name = "iced_widget"
version = "0.1.3"
version = "0.12.0"
dependencies = [
"iced_renderer",
"iced_runtime",
@@ -1403,14 +1462,14 @@
[[package]]
name = "iced_winit"
version = "0.10.1"
version = "0.12.0"
dependencies = [
"iced_graphics",
"iced_runtime",
"iced_style",
"log",
"raw-window-handle",
"thiserror",
"tracing",
"web-sys",
"winapi",
"window_clipboard",
@@ -1603,14 +1662,20 @@
[[package]]
name = "khronos-egl"
version = "4.1.0"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3"
checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
dependencies = [
"libc",
"libloading 0.7.4",
"libloading 0.8.1",
"pkg-config",
]
[[package]]
name = "khronos_api"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
[[package]]
name = "kurbo"
@@ -1777,9 +1842,9 @@
[[package]]
name = "memmap2"
version = "0.6.2"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872"
checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed"
dependencies = [
"libc",
]
@@ -1822,16 +1887,17 @@
[[package]]
name = "metal"
version = "0.24.0"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060"
checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.1",
"block",
"core-graphics-types",
"foreign-types",
"foreign-types 0.5.0",
"log",
"objc",
"paste",
]
[[package]]
@@ -1882,15 +1948,15 @@
[[package]]
name = "naga"
version = "0.12.3"
version = "0.14.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbcc2e0513220fd2b598e6068608d4462db20322c0e77e47f6f488dfcfc279cb"
checksum = "ae585df4b6514cf8842ac0f1ab4992edc975892704835b549cf818dc0191249e"
dependencies = [
"bit-set",
"bitflags 1.3.2",
"bitflags 2.4.1",
"codespan-reporting",
"hexf-parse",
"indexmap 1.9.3",
"indexmap 2.0.2",
"log",
"num-traits",
"rustc-hash",
@@ -2280,6 +2346,12 @@
"smallvec",
"windows-targets 0.48.5",
]
[[package]]
name = "paste"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
[[package]]
name = "percent-encoding"
@@ -2399,6 +2471,12 @@
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "presser"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
[[package]]
name = "proc-macro-crate"
version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2624,9 +2702,9 @@
[[package]]
name = "resvg"
version = "0.35.0"
version = "0.36.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6554f47c38eca56827eea7f285c2a3018b4e12e0e195cc105833c008be338f1"
checksum = "cc7980f653f9a7db31acff916a262c3b78c562919263edea29bf41a056e20497"
dependencies = [
"gif",
"jpeg-decoder",
@@ -2634,9 +2712,9 @@
"pico-args",
"png",
"rgb",
"svgtypes 0.11.0",
"tiny-skia 0.10.0",
"usvg 0.35.0",
"svgtypes 0.12.0",
"tiny-skia 0.11.3",
"usvg 0.36.0",
]
[[package]]
@@ -2740,34 +2818,34 @@
[[package]]
name = "rustybuzz"
version = "0.7.0"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "162bdf42e261bee271b3957691018634488084ef577dddeb6420a9684cab2a6a"
checksum = "71cd15fef9112a1f94ac64b58d1e4628192631ad6af4dc69997f995459c874e7"
dependencies = [
"bitflags 1.3.2",
"bytemuck",
"smallvec",
"ttf-parser 0.18.1",
"ttf-parser 0.19.2",
"unicode-bidi-mirroring",
"unicode-ccc",
"unicode-general-category",
"unicode-properties",
"unicode-script",
]
[[package]]
name = "rustybuzz"
version = "0.8.0"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82eea22c8f56965eeaf3a209b3d24508256c7b920fb3b6211b8ba0f7c0583250"
checksum = "2ee8fe2a8461a0854a37101fe7a1b13998d0cfa987e43248e81d2a5f4570f6fa"
dependencies = [
"bitflags 1.3.2",
"bytemuck",
"libm",
"smallvec",
"ttf-parser 0.19.2",
"ttf-parser 0.20.0",
"unicode-bidi-mirroring",
"unicode-ccc",
"unicode-general-category",
"unicode-properties",
"unicode-script",
]
@@ -2859,6 +2937,12 @@
"core-foundation-sys",
"libc",
]
[[package]]
name = "self_cell"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"
[[package]]
name = "serde"
@@ -3089,7 +3173,7 @@
"cocoa",
"core-graphics",
"fastrand",
"foreign-types",
"foreign-types 0.3.2",
"log",
"nix 0.26.4",
"objc",
@@ -3201,9 +3285,9 @@
[[package]]
name = "svgtypes"
version = "0.11.0"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed4b0611e7f3277f68c0fa18e385d9e2d26923691379690039548f867cef02a7"
checksum = "d71499ff2d42f59d26edb21369a308ede691421f79ebc0f001e2b1fd3a7c9e52"
dependencies = [
"kurbo",
"siphasher",
@@ -3378,9 +3462,9 @@
[[package]]
name = "tiny-skia"
version = "0.10.0"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7db11798945fa5c3e5490c794ccca7c6de86d3afdd54b4eb324109939c6f37bc"
checksum = "b6a067b809476893fce6a254cf285850ff69c847e6cfbade6a20b655b6c7e80d"
dependencies = [
"arrayref",
"arrayvec",
@@ -3388,7 +3472,7 @@
"cfg-if",
"log",
"png",
"tiny-skia-path 0.10.0",
"tiny-skia-path 0.11.3",
]
[[package]]
@@ -3396,17 +3480,6 @@
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c"
dependencies = [
"arrayref",
"bytemuck",
"strict-num",
]
[[package]]
name = "tiny-skia-path"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f60aa35c89ac2687ace1a2556eaaea68e8c0d47408a2e3e7f5c98a489e7281c"
dependencies = [
"arrayref",
"bytemuck",
@@ -3576,7 +3649,19 @@
checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [
"pin-project-lite",
"tracing-attributes",
"tracing-core",
]
[[package]]
name = "tracing-attributes"
version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
]
[[package]]
@@ -3593,12 +3678,6 @@
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
[[package]]
name = "ttf-parser"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633"
[[package]]
name = "ttf-parser"
@@ -3630,17 +3709,6 @@
"thiserror",
"url",
"utf-8",
]
[[package]]
name = "twox-hash"
version = "1.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
dependencies = [
"cfg-if",
"rand",
"static_assertions",
]
[[package]]
@@ -3668,12 +3736,6 @@
checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1"
[[package]]
name = "unicode-general-category"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7"
[[package]]
name = "unicode-ident"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3755,16 +3817,16 @@
[[package]]
name = "usvg"
version = "0.35.0"
version = "0.36.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14d09ddfb0d93bf84824c09336d32e42f80961a9d1680832eb24fdf249ce11e6"
checksum = "c51daa774fe9ee5efcf7b4fec13019b8119cda764d9a8b5b06df02bb1445c656"
dependencies = [
"base64",
"log",
"pico-args",
"usvg-parser 0.35.0",
"usvg-text-layout 0.35.0",
"usvg-tree 0.35.0",
"usvg-parser 0.36.0",
"usvg-text-layout 0.36.0",
"usvg-tree 0.36.0",
"xmlwriter",
]
@@ -3785,11 +3847,11 @@
[[package]]
name = "usvg-parser"
version = "0.35.0"
version = "0.36.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d19bf93d230813599927d88557014e0908ecc3531666d47c634c6838bc8db408"
checksum = "45c88a5ffaa338f0e978ecf3d4e00d8f9f493e29bed0752e1a808a1db16afc40"
dependencies = [
"data-url 0.2.0",
"data-url",
"flate2",
"imagesize",
"kurbo",
@@ -3797,8 +3859,8 @@
"roxmltree 0.18.1",
"simplecss",
"siphasher",
"svgtypes 0.11.0",
"usvg-tree 0.35.0",
"svgtypes 0.12.0",
"usvg-tree 0.36.0",
]
[[package]]
@@ -3807,7 +3869,7 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9bd4e3c291f45d152929a31f0f6c819245e2921bfd01e7bd91201a9af39a2bdc"
dependencies = [
"data-url 0.3.1",
"data-url",
"flate2",
"imagesize",
"kurbo",
@@ -3821,18 +3883,18 @@
[[package]]
name = "usvg-text-layout"
version = "0.35.0"
version = "0.36.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "035044604e89652c0a2959b8b356946997a52649ba6cade45928c2842376feb4"
checksum = "4d2374378cb7a3fb8f33894e0fdb8625e1bbc4f25312db8d91f862130b541593"
dependencies = [
"fontdb 0.14.1",
"fontdb 0.15.0",
"kurbo",
"log",
"rustybuzz 0.7.0",
"rustybuzz 0.10.0",
"unicode-bidi",
"unicode-script",
"unicode-vo",
"usvg-tree 0.35.0",
"usvg-tree 0.36.0",
]
[[package]]
@@ -3853,14 +3915,14 @@
[[package]]
name = "usvg-tree"
version = "0.35.0"
version = "0.36.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7939a7e4ed21cadb5d311d6339730681c3e24c3e81d60065be80e485d3fc8b92"
checksum = "6cacb0c5edeaf3e80e5afcf5b0d4004cc1d36318befc9a7c6606507e5d0f4062"
dependencies = [
"rctree",
"strict-num",
"svgtypes 0.11.0",
"tiny-skia-path 0.10.0",
"svgtypes 0.12.0",
"tiny-skia-path 0.11.3",
]
[[package]]
@@ -4136,12 +4198,13 @@
[[package]]
name = "wgpu"
version = "0.16.3"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "480c965c9306872eb6255fa55e4b4953be55a8b64d57e61d7ff840d3dcc051cd"
checksum = "30e7d227c9f961f2061c26f4cb0fbd4df0ef37e056edd0931783599d6c94ef24"
dependencies = [
"arrayvec",
"cfg-if",
"flume 0.11.0",
"js-sys",
"log",
"naga",
@@ -4160,9 +4223,9 @@
[[package]]
name = "wgpu-core"
version = "0.16.1"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f478237b4bf0d5b70a39898a66fa67ca3a007d79f2520485b8b0c3dfc46f8c2"
checksum = "ef91c1d62d1e9e81c79e600131a258edf75c9531cbdbde09c44a011a47312726"
dependencies = [
"arrayvec",
"bit-vec",
@@ -4183,9 +4246,9 @@
[[package]]
name = "wgpu-hal"
version = "0.16.2"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ecb3258078e936deee14fd4e0febe1cfe9bbb5ffef165cb60218d2ee5eb4448"
checksum = "b84ecc802da3eb67b4cf3dd9ea6fe45bbb47ef13e6c49c5c3240868a9cc6cdd9"
dependencies = [
"android_system_properties",
"arrayvec",
@@ -4195,8 +4258,8 @@
"block",
"core-graphics-types",
"d3d12",
"foreign-types",
"glow",
"glutin_wgl_sys",
"gpu-alloc",
"gpu-allocator",
"gpu-descriptor",
@@ -4209,6 +4272,7 @@
"metal",
"naga",
"objc",
"once_cell",
"parking_lot 0.12.1",
"profiling",
"range-alloc",
@@ -4225,9 +4289,9 @@
[[package]]
name = "wgpu-types"
version = "0.16.1"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0c153280bb108c2979eb5c7391cb18c56642dd3c072e55f52065e13e2a1252a"
checksum = "0d5ed5f0edf0de351fe311c53304986315ce866f394a2e6df0c4b3c70774bcdd"
dependencies = [
"bitflags 2.4.1",
"js-sys",
@@ -4296,11 +4360,12 @@
[[package]]
name = "windows"
version = "0.44.0"
version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
dependencies = [
"windows-targets 0.42.2",
"windows-core",
"windows-targets 0.48.5",
]
[[package]]
@@ -4446,9 +4511,8 @@
[[package]]
name = "winit"
version = "0.28.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94"
version = "0.28.6"
source = "git+https://github.com/iced-rs/winit.git?rev=c52db2045d0a2f1b8d9923870de1d4ab1994146e#c52db2045d0a2f1b8d9923870de1d4ab1994146e"
dependencies = [
"android-activity",
"bitflags 1.3.2",
@@ -4572,6 +4636,12 @@
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
[[package]]
name = "xxhash-rust"
version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53be06678ed9e83edb1745eb72efc0bbcd7b5c3c35711a860906aed827a13d61"
[[package]]
name = "yazi"
@@ -16,7 +16,7 @@
use iced::{
alignment::{Horizontal, Vertical},
widget::{container, Column},
window, Application, Command, Element, Length, Renderer, Settings, Subscription, Theme,
window, Application, Command, Element, Length, Renderer, Settings, Size, Subscription, Theme,
};
use crate::{
@@ -340,7 +340,7 @@
Shalom::run(Settings {
antialiasing: true,
window: window::Settings {
min_size: Some((600, 600)),
min_size: Some(Size::new(600.0, 600.0)),
..window::Settings::default()
},
..Settings::default()
@@ -43,12 +43,9 @@
}));
}
let current_search_box_size = if open { BoxSize::Fill } else { BoxSize::Min };
HeaderSearch {
original_header: header.clone(),
header,
current_search_box_size,
open,
open_state_toggle,
input: iced::widget::text_input("Search...", search_query)
@@ -60,19 +57,11 @@
close_icon: Element::from(Icon::Close.canvas(Color::BLACK)),
dy_mult,
}
}
#[derive(Debug)]
pub enum BoxSize {
Fill,
Min,
Fixed(Size),
}
pub struct HeaderSearch<'a, M> {
original_header: Text<'a, Renderer>,
header: Text<'a, Renderer>,
current_search_box_size: BoxSize,
input: Element<'a, M, Renderer>,
search_icon: Element<'a, M, Renderer>,
close_icon: Element<'a, M, Renderer>,
@@ -85,56 +74,70 @@
where
M: Clone + 'a,
{
fn width(&self) -> Length {
Length::Fill
fn size(&self) -> Size<Length> {
Size::new(Length::Shrink, Length::Shrink)
}
fn height(&self) -> Length {
Length::Shrink
}
fn layout(&self, renderer: &Renderer, limits: &Limits) -> Node {
fn layout(&self, tree: &mut Tree, renderer: &Renderer, limits: &Limits) -> Node {
let text_node = <iced::advanced::widget::Text<'_, Renderer> as Widget<M, Renderer>>::layout(
&self.original_header,
&mut tree.children[0],
renderer,
limits,
);
let size = limits.height(Length::Fixed(text_node.size().height)).max();
let state = tree.state.downcast_mut::<State>();
match (&state, self.open) {
(State::Open, false) => {
*state = State::close();
}
(State::Closed, true) => {
*state = State::open();
}
_ => {}
}
let current_search_box_size = match self.current_search_box_size {
BoxSize::Fixed(size) => size,
BoxSize::Min => INITIAL_SEARCH_BOX_SIZE,
BoxSize::Fill => Size {
let current_search_box_size = match &state {
State::Animate {
search_box_size, ..
} => Size {
width: INITIAL_SEARCH_BOX_SIZE.width
+ ((size.width - INITIAL_SEARCH_BOX_SIZE.width) * search_box_size.now()),
..INITIAL_SEARCH_BOX_SIZE
},
State::Closed => INITIAL_SEARCH_BOX_SIZE,
State::Open => Size {
width: limits.max().width,
..INITIAL_SEARCH_BOX_SIZE
},
};
let search_icon_size = Size::new(36., 36.);
let mut search_icon_node = Node::new(search_icon_size).translate(Vector {
x: -(INITIAL_SEARCH_BOX_SIZE.width - search_icon_size.width) / 2.0,
y: 0.0,
});
search_icon_node.align(Alignment::End, Alignment::Center, current_search_box_size);
let mut search_input = self
let search_icon_node = Node::new(search_icon_size)
.translate(Vector {
x: -(INITIAL_SEARCH_BOX_SIZE.width - search_icon_size.width) / 2.0,
y: 0.0,
})
.align(Alignment::End, Alignment::Center, current_search_box_size);
let search_input = self
.input
.as_widget()
.layout(
&mut tree.children[1],
renderer,
&limits
.width(current_search_box_size.width)
.pad([0, 20, 0, 60].into()),
&limits.width(current_search_box_size.width).shrink([80, 20]),
)
.translate(Vector { x: 20.0, y: 0.0 });
search_input.align(Alignment::Start, Alignment::Center, current_search_box_size);
.translate(Vector { x: 20.0, y: 0.0 })
.align(Alignment::Start, Alignment::Center, current_search_box_size);
let mut search_box = Node::with_children(
let search_box = Node::with_children(
current_search_box_size,
vec![search_icon_node, search_input],
);
search_box.align(Alignment::End, Alignment::Center, size);
)
.align(Alignment::End, Alignment::Center, size);
Node::with_children(size, vec![text_node, search_box])
}
@@ -157,7 +160,7 @@
<iced::advanced::widget::Text<'_, Renderer> as Widget<M, Renderer>>::draw(
&self.header,
state,
&state.children[0],
renderer,
theme,
style,
@@ -166,7 +169,7 @@
viewport,
);
let border_radius = if matches!(self.current_search_box_size, BoxSize::Fill) {
let border_radius = if matches!(local_state, State::Open) {
100.0 * (1.0 - self.dy_mult)
} else {
100.0
@@ -186,7 +189,7 @@
if !matches!(local_state, State::Open) {
self.search_icon.as_widget().draw(
&state.children[1],
&state.children[2],
renderer,
theme,
style,
@@ -198,7 +201,7 @@
if !matches!(local_state, State::Closed) {
self.close_icon.as_widget().draw(
&state.children[2],
&state.children[3],
renderer,
theme,
style,
@@ -210,7 +213,7 @@
if !matches!(local_state, State::Closed) {
self.input.as_widget().draw(
&state.children[0],
&state.children[1],
renderer,
theme,
style,
@@ -267,7 +270,7 @@
Status::Captured
}
iced::Event::Window(iced::window::Event::RedrawRequested(_)) => {
iced::Event::Window(_, iced::window::Event::RedrawRequested(_)) => {
let State::Animate {
last_draw,
next_state,
@@ -294,12 +297,6 @@
.size(60.0 - (2.0 * (1.0 - text_opacity.now())));
search_box_size.advance_by(elapsed);
self.current_search_box_size = BoxSize::Fixed(Size {
width: INITIAL_SEARCH_BOX_SIZE.width
+ ((layout.bounds().width - INITIAL_SEARCH_BOX_SIZE.width)
* search_box_size.now()),
..INITIAL_SEARCH_BOX_SIZE
});
search_icon.advance_by(elapsed);
self.search_icon = Element::from(Icon::Search.canvas(Color {
@@ -315,16 +312,6 @@
if text_opacity.finished() && search_box_size.finished() {
*state = std::mem::take(next_state);
match &state {
State::Open => {
self.current_search_box_size = BoxSize::Fill;
}
State::Closed => {
self.current_search_box_size = BoxSize::Min;
}
State::Animate { .. } => {}
}
}
shell.request_redraw(RedrawRequest::NextFrame);
@@ -336,7 +323,7 @@
if status == Status::Ignored {
self.input.as_widget_mut().on_event(
&mut tree_state.children[0],
&mut tree_state.children[1],
event,
layout.children().nth(1).unwrap().children().nth(1).unwrap(),
cursor,
@@ -359,7 +346,7 @@
renderer: &Renderer,
) -> Interaction {
self.input.as_widget().mouse_interaction(
&state.children[0],
&state.children[1],
layout.children().nth(1).unwrap().children().nth(1).unwrap(),
cursor,
viewport,
@@ -368,13 +355,11 @@
}
fn state(&self) -> iced::advanced::widget::tree::State {
iced::advanced::widget::tree::State::new(
if matches!(self.current_search_box_size, BoxSize::Fill) {
State::Open
} else {
State::Closed
},
)
iced::advanced::widget::tree::State::new(if self.open {
State::Open
} else {
State::Closed
})
}
fn tag(&self) -> Tag {
@@ -383,6 +368,7 @@
fn children(&self) -> Vec<Tree> {
vec![
Tree::new(&Element::<'_, M, _>::from(self.header.clone())),
Tree::new(&self.input),
Tree::new(&self.search_icon),
Tree::new(&self.close_icon),
@@ -390,7 +376,12 @@
}
fn diff(&self, tree: &mut Tree) {
tree.diff_children(&[&self.input, &self.search_icon, &self.close_icon]);
tree.diff_children(&[
&Element::from(self.header.clone()),
&self.input,
&self.search_icon,
&self.close_icon,
]);
}
}
@@ -129,7 +129,7 @@
(
self.listen
.header_magic(header.clone(), padding_mult)
.header_magic(header, padding_mult)
.map(Message::Listen),
padding_mult,
)
@@ -62,12 +62,13 @@
}
fn layout(
&self,
&mut self,
renderer: &Renderer,
bounds: iced::Size,
_position: iced::Point,
translation: Vector,
) -> iced::advanced::layout::Node {
self.overlay.layout(renderer, bounds, Vector::ZERO)
self.overlay.layout(renderer, bounds, translation)
}
fn draw(
@@ -17,7 +17,7 @@
window,
window::RedrawRequest,
Alignment, BorderRadius, Color, Element, Event, Length, Point, Rectangle, Renderer, Size,
Theme,
Theme, Vector,
};
use keyframe::{functions::EaseOutQuint, keyframes, AnimationSequence};
@@ -50,18 +50,14 @@
}
impl<'a, M: Clone> Widget<M, Renderer> for ContextMenu<'a, M> {
fn width(&self) -> Length {
self.base.as_widget().width()
fn size(&self) -> Size<Length> {
self.base.as_widget().size()
}
fn height(&self) -> Length {
self.base.as_widget().height()
fn layout(&self, tree: &mut Tree, renderer: &Renderer, limits: &Limits) -> Node {
self.base.as_widget().layout(tree, renderer, limits)
}
fn layout(&self, renderer: &Renderer, limits: &Limits) -> Node {
self.base.as_widget().layout(renderer, limits)
}
fn draw(
&self,
state: &Tree,
@@ -303,22 +299,28 @@
}
impl<'a, 'b, M: Clone> overlay::Overlay<M, Renderer> for Overlay<'a, 'b, M> {
fn layout(&self, renderer: &Renderer, bounds: Size, position: Point) -> Node {
fn layout(
&mut self,
renderer: &Renderer,
bounds: Size,
position: Point,
_translation: Vector,
) -> Node {
let limits = Limits::new(Size::ZERO, bounds)
.width(Length::Fill)
.height(Length::Fill);
let mut child = self.content.as_widget().layout(renderer, &limits);
child.align(Alignment::Start, Alignment::Start, limits.max());
child.move_to(Point {
x: 0.0,
y: bounds.height - self.state.height,
});
let mut node = Node::with_children(bounds, vec![child]);
node.move_to(position);
let child = self
.content
.as_widget()
.layout(self.tree, renderer, &limits)
.align(Alignment::Start, Alignment::Start, limits.max())
.move_to(Point {
x: 0.0,
y: bounds.height - self.state.height,
});
node
Node::with_children(bounds, vec![child]).move_to(position)
}
fn draw(
@@ -421,7 +423,7 @@
shell.request_redraw(RedrawRequest::NextFrame);
}
}
} else if let Event::Window(window::Event::RedrawRequested(_)) = &event {
} else if let Event::Window(_, window::Event::RedrawRequested(_)) = &event {
self.handle_redraw(shell, cursor);
}
@@ -12,7 +12,7 @@
},
event::Status,
mouse::{Cursor, Interaction},
Background, Color, Event, Length, Point, Rectangle, Size,
Background, Color, Event, Length, Point, Rectangle, Size, Vector,
};
pub fn forced_rounded<'a, M: 'a, R>(
@@ -28,18 +28,14 @@
}
impl<'a, M, R: Renderer> Widget<M, R> for ForcedRounded<'a, M, R> {
fn width(&self) -> Length {
self.element.as_widget().width()
fn size(&self) -> Size<Length> {
self.element.as_widget().size()
}
fn height(&self) -> Length {
self.element.as_widget().height()
fn layout(&self, tree: &mut Tree, renderer: &R, limits: &Limits) -> Node {
self.element.as_widget().layout(tree, renderer, limits)
}
fn layout(&self, renderer: &R, limits: &Limits) -> Node {
self.element.as_widget().layout(renderer, limits)
}
fn draw(
&self,
state: &Tree,
@@ -144,11 +140,14 @@
}
impl<M, R: Renderer> overlay::Overlay<M, R> for Overlay {
fn layout(&self, _renderer: &R, _bounds: Size, position: Point) -> Node {
let mut node = Node::new(self.size);
node.move_to(self.position.unwrap_or(position));
node
fn layout(
&mut self,
_renderer: &R,
_bounds: Size,
position: Point,
_translation: Vector,
) -> Node {
Node::new(self.size).move_to(self.position.unwrap_or(position))
}
fn draw(
@@ -9,7 +9,7 @@
},
event::Status,
mouse::{Cursor, Interaction},
widget::image,
widget::{image, image::FilterMethod},
Alignment, ContentFit, Element, Event, Length, Point, Rectangle, Size, Vector,
};
@@ -53,17 +53,13 @@
+ iced::advanced::image::Renderer<Handle = iced::advanced::image::Handle>,
> Widget<M, R> for ImageBackground<'a, M, R>
{
fn width(&self) -> Length {
self.width
fn size(&self) -> Size<Length> {
Size::new(self.width, self.height)
}
fn height(&self) -> Length {
self.height
}
fn layout(&self, _renderer: &R, limits: &Limits) -> Node {
fn layout(&self, _state: &mut Tree, _renderer: &R, limits: &Limits) -> Node {
let limits = limits.width(self.width).height(self.height);
let size = limits.resolve(Size::ZERO);
let size = limits.resolve(self.width, self.height, Size::ZERO);
Node::new(size)
}
@@ -102,7 +98,11 @@
..bounds
};
renderer.draw(self.image_handle.clone(), drawing_bounds + offset);
renderer.draw(
self.image_handle.clone(),
FilterMethod::Linear,
drawing_bounds + offset,
);
});
}
@@ -140,18 +140,24 @@
impl<'a, 'b, M: Clone, R: iced::advanced::Renderer> overlay::Overlay<M, R>
for Overlay<'a, 'b, M, R>
{
fn layout(&self, renderer: &R, _bounds: Size, position: Point) -> Node {
fn layout(
&mut self,
renderer: &R,
_bounds: Size,
position: Point,
_translation: Vector,
) -> Node {
let limits = Limits::new(Size::ZERO, self.size)
.width(Length::Fill)
.height(Length::Fill);
let mut child = self.el.as_widget().layout(renderer, &limits);
child.align(Alignment::Start, Alignment::Start, limits.max());
let mut node = Node::with_children(self.size, vec![child]);
node.move_to(position);
let child = self
.el
.as_widget()
.layout(self.tree, renderer, &limits)
.align(Alignment::Start, Alignment::Start, limits.max());
node
Node::with_children(self.size, vec![child]).move_to(position)
}
fn draw(
@@ -14,7 +14,7 @@
mouse::{Button, Cursor},
theme::Text,
touch,
widget::{image, text},
widget::{image, image::FilterMethod, text},
Alignment, Background, Color, ContentFit, Degrees, Element, Event, Font, Gradient, Length,
Point, Rectangle, Renderer, Size, Theme, Vector,
};
@@ -55,17 +55,13 @@
}
impl<'a, M: Clone> Widget<M, Renderer> for ImageCard<'a, M> {
fn width(&self) -> Length {
self.width
fn size(&self) -> Size<Length> {
Size::new(self.width, self.height)
}
fn height(&self) -> Length {
self.height
}
fn layout(&self, _renderer: &Renderer, limits: &Limits) -> Node {
fn layout(&self, _tree: &mut Tree, _renderer: &Renderer, limits: &Limits) -> Node {
let limits = limits.width(self.width).height(self.height);
let size = limits.resolve(Size::ZERO);
let size = limits.resolve(self.width, self.height, Size::ZERO);
Node::new(size)
}
@@ -104,7 +100,11 @@
..bounds
};
renderer.draw(self.image_handle.clone(), drawing_bounds + offset);
renderer.draw(
self.image_handle.clone(),
FilterMethod::Linear,
drawing_bounds + offset,
);
});
}
@@ -154,16 +154,22 @@
}
impl<'a, 'b, M: Clone> overlay::Overlay<M, Renderer> for Overlay<'a, 'b, M> {
fn layout(&self, renderer: &Renderer, _bounds: Size, position: Point) -> Node {
let limits = Limits::new(Size::ZERO, self.size).pad([0, 0, 10, 0].into());
let mut child = self.text.as_widget().layout(renderer, &limits);
child.align(Alignment::Center, Alignment::End, limits.max());
let mut node = Node::with_children(self.size, vec![child]);
node.move_to(position);
node
fn layout(
&mut self,
renderer: &Renderer,
_bounds: Size,
position: Point,
_translation: Vector,
) -> Node {
let limits = Limits::new(Size::ZERO, self.size).shrink([0, 10]);
let child = self
.text
.as_widget()
.layout(self.tree, renderer, &limits)
.align(Alignment::Center, Alignment::End, limits.max());
Node::with_children(self.size, vec![child]).move_to(position)
}
fn draw(
@@ -92,20 +92,16 @@
}
impl<Message, Theme> Widget<Message, Renderer<Theme>> for CupertinoSpinner {
fn width(&self) -> Length {
self.width
fn size(&self) -> Size<Length> {
Size::new(self.width, self.height)
}
fn height(&self) -> Length {
self.height
}
fn layout(&self, _renderer: &Renderer<Theme>, limits: &Limits) -> Node {
Node::new(
limits
.width(self.width)
.height(self.height)
.resolve(Size::new(f32::INFINITY, f32::INFINITY)),
)
fn layout(&self, _state: &mut Tree, _renderer: &Renderer<Theme>, limits: &Limits) -> Node {
Node::new(limits.resolve(
self.width,
self.height,
Size::new(f32::INFINITY, f32::INFINITY),
))
}
fn draw(
@@ -189,7 +185,7 @@
) -> event::Status {
let state: &mut SpinnerState = state.state.downcast_mut::<SpinnerState>();
if let Event::Window(window::Event::RedrawRequested(_now)) = &event {
if let Event::Window(_, window::Event::RedrawRequested(_now)) = &event {
state.spinner.clear();
shell.request_redraw(window::RedrawRequest::NextFrame);
return event::Status::Captured;
@@ -5,7 +5,7 @@
use iced::{
futures::{future, future::Either, stream, stream::FuturesUnordered, FutureExt, StreamExt},
subscription,
widget::{container, image::Handle, lazy, Column, Text},
widget::{container, image::Handle, Column, Text},
Element, Length, Renderer, Subscription, Theme,
};
use itertools::Itertools;
@@ -57,25 +57,19 @@
}
pub fn header_magic(&self, text: Text<'static>, dy_mult: f32) -> Element<'static, Message> {
lazy(
(self.search.clone(), dy_mult.to_be_bytes()),
move |(search, dy_mult)| {
let dy_mult = f32::from_be_bytes(*dy_mult);
let (open, query) = if let Some(v) = search.search() {
(true, v)
} else {
(false, "")
};
let (open, query) = if let Some(v) = self.search.search() {
(true, v)
} else {
(false, "")
};
header_search(
Message::OnSearchTerm,
Message::OnSearchVisibleToggle,
open,
query,
text.clone(),
dy_mult,
)
},
header_search(
Message::OnSearchTerm,
Message::OnSearchVisibleToggle,
open,
query,
text,
dy_mult,
)
.into()
}
@@ -1,16 +1,18 @@
use iced::{
advanced::{
graphics::text::Paragraph,
layout::{Limits, Node},
renderer::{Quad, Style},
svg::Renderer as SvgRenderer,
text::{LineHeight, Renderer as TextRenderer, Shaping},
widget::Tree,
Layout, Renderer as AdvancedRenderer, Text, Widget,
text::{LineHeight, Shaping},
widget::{tree::Tag, Tree},
Layout, Renderer as AdvancedRenderer, Widget,
},
alignment::{Horizontal, Vertical},
font::Weight,
gradient::Linear,
mouse::Cursor,
widget::{text, text::Appearance},
Alignment, Background, Color, Degrees, Element, Font, Gradient, Length, Rectangle, Renderer,
Size, Theme,
};
@@ -47,54 +49,62 @@
}
impl<M: Clone> Widget<M, Renderer> for WeatherCard<M> {
fn width(&self) -> Length {
Length::Fixed(192.)
fn size(&self) -> Size<Length> {
Size::new(Length::Fixed(192.0), Length::Fixed(192.0))
}
fn height(&self) -> Length {
Length::Fixed(192.)
}
fn layout(&self, renderer: &Renderer, limits: &Limits) -> Node {
let padding = 16.into();
fn layout(&self, tree: &mut Tree, renderer: &Renderer, limits: &Limits) -> Node {
let limits = limits
.height(self.height())
.width(self.width())
.pad(padding);
let container_size = limits.resolve(Size::ZERO);
let mut header_node = Node::new(renderer.measure(
.height(self.size().height)
.width(self.size().width)
.shrink([32, 32]);
let container_size = limits.resolve(self.size().width, self.size().height, Size::ZERO);
let local_state = tree.state.downcast_mut::<State>();
let header_node = text::layout(
&mut local_state.header,
renderer,
&limits,
Length::Shrink,
Length::Shrink,
&self.build_temperature(),
42.,
LineHeight::default(),
Font {
Some(42.0.into()),
Some(Font {
weight: Weight::Normal,
..Font::with_name("Helvetica Neue")
},
container_size,
}),
Horizontal::Left,
Vertical::Top,
Shaping::Basic,
));
header_node.move_to([padding.top, padding.left].into());
header_node.align(Alignment::Start, Alignment::Start, container_size);
let mut icon_node =
Node::new(Size::new(16., 16.)).translate([padding.left, -padding.bottom - 32.].into());
icon_node.align(Alignment::Start, Alignment::End, container_size);
let mut conditions_node = Node::new(renderer.measure(
)
.move_to([16., 16.])
.align(Alignment::Start, Alignment::Start, container_size);
let icon_node = Node::new(Size::new(16., 16.)).translate([16., -48.]).align(
Alignment::Start,
Alignment::End,
container_size,
);
let conditions_node = text::layout(
&mut local_state.conditions,
renderer,
&limits,
Length::Shrink,
Length::Shrink,
&self.build_conditions(),
12.,
LineHeight::default(),
Font {
Some(12.0.into()),
Some(Font {
weight: Weight::Bold,
..Font::with_name("Helvetica Neue")
},
container_size,
}),
Horizontal::Left,
Vertical::Bottom,
Shaping::Basic,
))
.translate([padding.left, -padding.bottom].into());
conditions_node.align(Alignment::Start, Alignment::End, container_size);
)
.move_to([16., -16.]);
Node::with_children(
container_size,
@@ -104,16 +114,17 @@
fn draw(
&self,
_state: &Tree,
state: &Tree,
renderer: &mut Renderer,
_theme: &Theme,
_style: &Style,
style: &Style,
layout: Layout<'_>,
_cursor: Cursor,
_viewport: &Rectangle,
viewport: &Rectangle,
) {
let day_time = matches!(OffsetDateTime::now_utc().hour(), 5..=19);
let local_state = state.state.downcast_ref::<State>();
let gradient = if day_time {
Linear::new(Degrees(90.))
@@ -137,41 +148,49 @@
let mut children = layout.children();
renderer.fill_text(Text {
content: &self.build_temperature(),
bounds: children.next().unwrap().bounds(),
size: 42.,
line_height: LineHeight::default(),
color: Color::WHITE,
font: Font {
weight: Weight::Normal,
..Font::with_name("Helvetica Neue")
let header_layout = children.next().unwrap();
text::draw(
renderer,
style,
header_layout,
&local_state.header,
Appearance {
color: Some(Color::WHITE),
},
horizontal_alignment: Horizontal::Left,
vertical_alignment: Vertical::Top,
shaping: Shaping::Basic,
});
viewport,
);
let icon_bounds = children.next().unwrap().bounds();
if let Some(icon) = self.current_weather.weather_condition().icon(day_time) {
renderer.draw(icon.handle(), None, icon_bounds);
}
renderer.fill_text(Text {
content: &self.build_conditions(),
bounds: children.next().unwrap().bounds(),
size: 12.,
line_height: LineHeight::default(),
color: Color::WHITE,
font: Font {
weight: Weight::Bold,
..Font::with_name("Helvetica Neue")
let conditions_layout = children.next().unwrap();
text::draw(
renderer,
style,
conditions_layout,
&local_state.conditions,
Appearance {
color: Some(Color::WHITE),
},
horizontal_alignment: Horizontal::Left,
vertical_alignment: Vertical::Top,
shaping: Shaping::Basic,
});
viewport,
);
}
fn state(&self) -> iced::advanced::widget::tree::State {
iced::advanced::widget::tree::State::new(State::default())
}
fn tag(&self) -> Tag {
Tag::of::<State>()
}
}
#[derive(Default)]
pub struct State {
header: text::State<Paragraph>,
conditions: text::State<Paragraph>,
}
impl<'a, M> From<WeatherCard<M>> for Element<'a, M>