summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsalmonik <raisersoft@proton.me>2026-07-11 01:46:59 +0200
committersalmonik <raisersoft@proton.me>2026-07-11 01:46:59 +0200
commit247d2805db0c1b686ef4c6cc0f786ff416aeb7e3 (patch)
treeb6dae4a848df5ae75c4d1bc8e73bad7c63d17575
downloadxkbpreview-247d2805db0c1b686ef4c6cc0f786ff416aeb7e3.tar.gz
xkbpreview-247d2805db0c1b686ef4c6cc0f786ff416aeb7e3.zip
init
-rw-r--r--.gitignore2
-rw-r--r--Cargo.lock4463
-rw-r--r--Cargo.toml9
-rw-r--r--src/keymap.rs253
-rw-r--r--src/layout.rs171
-rw-r--r--src/main.rs136
-rw-r--r--src/ui.rs221
-rw-r--r--src/x11.rs92
8 files changed, 5347 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1998c4a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
1/target
2/.zed
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..65a0714
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,4463 @@
1# This file is automatically @generated by Cargo.
2# It is not intended for manual editing.
3version = 4
4
5[[package]]
6name = "ab_glyph"
7version = "0.2.32"
8source = "registry+https://github.com/rust-lang/crates.io-index"
9checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2"
10dependencies = [
11 "ab_glyph_rasterizer",
12 "owned_ttf_parser",
13]
14
15[[package]]
16name = "ab_glyph_rasterizer"
17version = "0.1.10"
18source = "registry+https://github.com/rust-lang/crates.io-index"
19checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"
20
21[[package]]
22name = "accesskit"
23version = "0.24.0"
24source = "registry+https://github.com/rust-lang/crates.io-index"
25checksum = "5351dcebb14b579ccab05f288596b2ae097005be7ee50a7c3d4ca9d0d5a66f6a"
26dependencies = [
27 "uuid",
28]
29
30[[package]]
31name = "accesskit_atspi_common"
32version = "0.18.1"
33source = "registry+https://github.com/rust-lang/crates.io-index"
34checksum = "1e8c61bee90b42a772d39d06a740207dc71a4e780004ace1db8d99fb1baaa954"
35dependencies = [
36 "accesskit",
37 "accesskit_consumer 0.36.0",
38 "atspi-common",
39 "phf",
40 "serde",
41 "zvariant",
42]
43
44[[package]]
45name = "accesskit_consumer"
46version = "0.35.0"
47source = "registry+https://github.com/rust-lang/crates.io-index"
48checksum = "53cf47daed85312e763fbf85ceca136e0d7abc68e0a7e12abe11f48172bc3b10"
49dependencies = [
50 "accesskit",
51 "hashbrown 0.16.1",
52]
53
54[[package]]
55name = "accesskit_consumer"
56version = "0.36.0"
57source = "registry+https://github.com/rust-lang/crates.io-index"
58checksum = "25e0d7e25d06f4dc21d1774d67146e9e80d6789216cbd4d1e88185b0095dba60"
59dependencies = [
60 "accesskit",
61 "hashbrown 0.16.1",
62]
63
64[[package]]
65name = "accesskit_macos"
66version = "0.26.1"
67source = "registry+https://github.com/rust-lang/crates.io-index"
68checksum = "4c5c87e8d94f2ec10cce590aadff24c76f576dab5502d45d0aed9fc3065d4451"
69dependencies = [
70 "accesskit",
71 "accesskit_consumer 0.36.0",
72 "hashbrown 0.16.1",
73 "objc2 0.5.2",
74 "objc2-app-kit 0.2.2",
75 "objc2-foundation 0.2.2",
76]
77
78[[package]]
79name = "accesskit_unix"
80version = "0.21.1"
81source = "registry+https://github.com/rust-lang/crates.io-index"
82checksum = "b016ca8db0ea0ea2ceff29a9d6240391492d960716aa471967c00e8cc8cb197c"
83dependencies = [
84 "accesskit",
85 "accesskit_atspi_common",
86 "async-channel",
87 "async-executor",
88 "async-task",
89 "atspi",
90 "futures-lite",
91 "futures-util",
92 "serde",
93 "zbus",
94]
95
96[[package]]
97name = "accesskit_windows"
98version = "0.32.1"
99source = "registry+https://github.com/rust-lang/crates.io-index"
100checksum = "eff7009f1a532e917d66970a1e80c965140c6cfbbabbdde3d64e5431e6c78e21"
101dependencies = [
102 "accesskit",
103 "accesskit_consumer 0.35.0",
104 "hashbrown 0.16.1",
105 "static_assertions",
106 "windows",
107 "windows-core",
108]
109
110[[package]]
111name = "accesskit_winit"
112version = "0.32.2"
113source = "registry+https://github.com/rust-lang/crates.io-index"
114checksum = "1fe9a94394896352cc4660ca2288bd4ef883d83238853c038b44070c8f134313"
115dependencies = [
116 "accesskit",
117 "accesskit_macos",
118 "accesskit_unix",
119 "accesskit_windows",
120 "raw-window-handle",
121 "winit",
122]
123
124[[package]]
125name = "adler2"
126version = "2.0.1"
127source = "registry+https://github.com/rust-lang/crates.io-index"
128checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
129
130[[package]]
131name = "ahash"
132version = "0.8.12"
133source = "registry+https://github.com/rust-lang/crates.io-index"
134checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
135dependencies = [
136 "cfg-if",
137 "getrandom 0.3.4",
138 "once_cell",
139 "version_check",
140 "zerocopy",
141]
142
143[[package]]
144name = "allocator-api2"
145version = "0.2.21"
146source = "registry+https://github.com/rust-lang/crates.io-index"
147checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
148
149[[package]]
150name = "android-activity"
151version = "0.6.1"
152source = "registry+https://github.com/rust-lang/crates.io-index"
153checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd"
154dependencies = [
155 "android-properties",
156 "bitflags 2.11.1",
157 "cc",
158 "jni",
159 "libc",
160 "log",
161 "ndk",
162 "ndk-context",
163 "ndk-sys",
164 "num_enum",
165 "thiserror 2.0.18",
166]
167
168[[package]]
169name = "android-properties"
170version = "0.2.2"
171source = "registry+https://github.com/rust-lang/crates.io-index"
172checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
173
174[[package]]
175name = "android_system_properties"
176version = "0.1.5"
177source = "registry+https://github.com/rust-lang/crates.io-index"
178checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
179dependencies = [
180 "libc",
181]
182
183[[package]]
184name = "anyhow"
185version = "1.0.102"
186source = "registry+https://github.com/rust-lang/crates.io-index"
187checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
188
189[[package]]
190name = "arboard"
191version = "3.6.1"
192source = "registry+https://github.com/rust-lang/crates.io-index"
193checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf"
194dependencies = [
195 "clipboard-win",
196 "image",
197 "log",
198 "objc2 0.6.4",
199 "objc2-app-kit 0.3.2",
200 "objc2-core-foundation",
201 "objc2-core-graphics",
202 "objc2-foundation 0.3.2",
203 "parking_lot",
204 "percent-encoding",
205 "windows-sys 0.60.2",
206 "x11rb",
207]
208
209[[package]]
210name = "arrayref"
211version = "0.3.9"
212source = "registry+https://github.com/rust-lang/crates.io-index"
213checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"
214
215[[package]]
216name = "arrayvec"
217version = "0.7.6"
218source = "registry+https://github.com/rust-lang/crates.io-index"
219checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
220
221[[package]]
222name = "as-raw-xcb-connection"
223version = "1.0.1"
224source = "registry+https://github.com/rust-lang/crates.io-index"
225checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
226
227[[package]]
228name = "ash"
229version = "0.38.0+1.3.281"
230source = "registry+https://github.com/rust-lang/crates.io-index"
231checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
232dependencies = [
233 "libloading",
234]
235
236[[package]]
237name = "async-broadcast"
238version = "0.7.2"
239source = "registry+https://github.com/rust-lang/crates.io-index"
240checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
241dependencies = [
242 "event-listener",
243 "event-listener-strategy",
244 "futures-core",
245 "pin-project-lite",
246]
247
248[[package]]
249name = "async-channel"
250version = "2.5.0"
251source = "registry+https://github.com/rust-lang/crates.io-index"
252checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
253dependencies = [
254 "concurrent-queue",
255 "event-listener-strategy",
256 "futures-core",
257 "pin-project-lite",
258]
259
260[[package]]
261name = "async-executor"
262version = "1.14.0"
263source = "registry+https://github.com/rust-lang/crates.io-index"
264checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a"
265dependencies = [
266 "async-task",
267 "concurrent-queue",
268 "fastrand",
269 "futures-lite",
270 "pin-project-lite",
271 "slab",
272]
273
274[[package]]
275name = "async-io"
276version = "2.6.0"
277source = "registry+https://github.com/rust-lang/crates.io-index"
278checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
279dependencies = [
280 "autocfg",
281 "cfg-if",
282 "concurrent-queue",
283 "futures-io",
284 "futures-lite",
285 "parking",
286 "polling",
287 "rustix 1.1.4",
288 "slab",
289 "windows-sys 0.61.2",
290]
291
292[[package]]
293name = "async-lock"
294version = "3.4.2"
295source = "registry+https://github.com/rust-lang/crates.io-index"
296checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311"
297dependencies = [
298 "event-listener",
299 "event-listener-strategy",
300 "pin-project-lite",
301]
302
303[[package]]
304name = "async-process"
305version = "2.5.0"
306source = "registry+https://github.com/rust-lang/crates.io-index"
307checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
308dependencies = [
309 "async-channel",
310 "async-io",
311 "async-lock",
312 "async-signal",
313 "async-task",
314 "blocking",
315 "cfg-if",
316 "event-listener",
317 "futures-lite",
318 "rustix 1.1.4",
319]
320
321[[package]]
322name = "async-recursion"
323version = "1.1.1"
324source = "registry+https://github.com/rust-lang/crates.io-index"
325checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
326dependencies = [
327 "proc-macro2",
328 "quote",
329 "syn",
330]
331
332[[package]]
333name = "async-signal"
334version = "0.2.14"
335source = "registry+https://github.com/rust-lang/crates.io-index"
336checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485"
337dependencies = [
338 "async-io",
339 "async-lock",
340 "atomic-waker",
341 "cfg-if",
342 "futures-core",
343 "futures-io",
344 "rustix 1.1.4",
345 "signal-hook-registry",
346 "slab",
347 "windows-sys 0.61.2",
348]
349
350[[package]]
351name = "async-task"
352version = "4.7.1"
353source = "registry+https://github.com/rust-lang/crates.io-index"
354checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
355
356[[package]]
357name = "async-trait"
358version = "0.1.89"
359source = "registry+https://github.com/rust-lang/crates.io-index"
360checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
361dependencies = [
362 "proc-macro2",
363 "quote",
364 "syn",
365]
366
367[[package]]
368name = "atomic-waker"
369version = "1.1.2"
370source = "registry+https://github.com/rust-lang/crates.io-index"
371checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
372
373[[package]]
374name = "atspi"
375version = "0.29.0"
376source = "registry+https://github.com/rust-lang/crates.io-index"
377checksum = "c77886257be21c9cd89a4ae7e64860c6f0eefca799bb79127913052bd0eefb3d"
378dependencies = [
379 "atspi-common",
380 "atspi-proxies",
381]
382
383[[package]]
384name = "atspi-common"
385version = "0.13.0"
386source = "registry+https://github.com/rust-lang/crates.io-index"
387checksum = "20c5617155740c98003016429ad13fe43ce7a77b007479350a9f8bf95a29f63d"
388dependencies = [
389 "enumflags2",
390 "serde",
391 "static_assertions",
392 "zbus",
393 "zbus-lockstep",
394 "zbus-lockstep-macros",
395 "zbus_names",
396 "zvariant",
397]
398
399[[package]]
400name = "atspi-proxies"
401version = "0.13.0"
402source = "registry+https://github.com/rust-lang/crates.io-index"
403checksum = "2230e48787ed3eb4088996eab66a32ca20c0b67bbd4fd6cdfe79f04f1f04c9fc"
404dependencies = [
405 "atspi-common",
406 "serde",
407 "zbus",
408]
409
410[[package]]
411name = "autocfg"
412version = "1.5.1"
413source = "registry+https://github.com/rust-lang/crates.io-index"
414checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
415
416[[package]]
417name = "bit-set"
418version = "0.9.1"
419source = "registry+https://github.com/rust-lang/crates.io-index"
420checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd"
421dependencies = [
422 "bit-vec",
423]
424
425[[package]]
426name = "bit-vec"
427version = "0.9.1"
428source = "registry+https://github.com/rust-lang/crates.io-index"
429checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51"
430
431[[package]]
432name = "bitflags"
433version = "1.3.2"
434source = "registry+https://github.com/rust-lang/crates.io-index"
435checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
436
437[[package]]
438name = "bitflags"
439version = "2.11.1"
440source = "registry+https://github.com/rust-lang/crates.io-index"
441checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
442
443[[package]]
444name = "block2"
445version = "0.5.1"
446source = "registry+https://github.com/rust-lang/crates.io-index"
447checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
448dependencies = [
449 "objc2 0.5.2",
450]
451
452[[package]]
453name = "block2"
454version = "0.6.2"
455source = "registry+https://github.com/rust-lang/crates.io-index"
456checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
457dependencies = [
458 "objc2 0.6.4",
459]
460
461[[package]]
462name = "blocking"
463version = "1.6.2"
464source = "registry+https://github.com/rust-lang/crates.io-index"
465checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21"
466dependencies = [
467 "async-channel",
468 "async-task",
469 "futures-io",
470 "futures-lite",
471 "piper",
472]
473
474[[package]]
475name = "bumpalo"
476version = "3.20.3"
477source = "registry+https://github.com/rust-lang/crates.io-index"
478checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
479
480[[package]]
481name = "bytemuck"
482version = "1.25.0"
483source = "registry+https://github.com/rust-lang/crates.io-index"
484checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
485dependencies = [
486 "bytemuck_derive",
487]
488
489[[package]]
490name = "bytemuck_derive"
491version = "1.10.2"
492source = "registry+https://github.com/rust-lang/crates.io-index"
493checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff"
494dependencies = [
495 "proc-macro2",
496 "quote",
497 "syn",
498]
499
500[[package]]
501name = "byteorder-lite"
502version = "0.1.0"
503source = "registry+https://github.com/rust-lang/crates.io-index"
504checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
505
506[[package]]
507name = "bytes"
508version = "1.11.1"
509source = "registry+https://github.com/rust-lang/crates.io-index"
510checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
511
512[[package]]
513name = "calloop"
514version = "0.13.0"
515source = "registry+https://github.com/rust-lang/crates.io-index"
516checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
517dependencies = [
518 "bitflags 2.11.1",
519 "log",
520 "polling",
521 "rustix 0.38.44",
522 "slab",
523 "thiserror 1.0.69",
524]
525
526[[package]]
527name = "calloop"
528version = "0.14.4"
529source = "registry+https://github.com/rust-lang/crates.io-index"
530checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7"
531dependencies = [
532 "bitflags 2.11.1",
533 "polling",
534 "rustix 1.1.4",
535 "slab",
536 "tracing",
537]
538
539[[package]]
540name = "calloop-wayland-source"
541version = "0.3.0"
542source = "registry+https://github.com/rust-lang/crates.io-index"
543checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
544dependencies = [
545 "calloop 0.13.0",
546 "rustix 0.38.44",
547 "wayland-backend",
548 "wayland-client",
549]
550
551[[package]]
552name = "calloop-wayland-source"
553version = "0.4.1"
554source = "registry+https://github.com/rust-lang/crates.io-index"
555checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa"
556dependencies = [
557 "calloop 0.14.4",
558 "rustix 1.1.4",
559 "wayland-backend",
560 "wayland-client",
561]
562
563[[package]]
564name = "cc"
565version = "1.2.62"
566source = "registry+https://github.com/rust-lang/crates.io-index"
567checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98"
568dependencies = [
569 "find-msvc-tools",
570 "jobserver",
571 "libc",
572 "shlex",
573]
574
575[[package]]
576name = "cfg-if"
577version = "1.0.4"
578source = "registry+https://github.com/rust-lang/crates.io-index"
579checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
580
581[[package]]
582name = "cfg_aliases"
583version = "0.2.1"
584source = "registry+https://github.com/rust-lang/crates.io-index"
585checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
586
587[[package]]
588name = "cgl"
589version = "0.3.2"
590source = "registry+https://github.com/rust-lang/crates.io-index"
591checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
592dependencies = [
593 "libc",
594]
595
596[[package]]
597name = "clipboard-win"
598version = "5.4.1"
599source = "registry+https://github.com/rust-lang/crates.io-index"
600checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4"
601dependencies = [
602 "error-code",
603]
604
605[[package]]
606name = "codespan-reporting"
607version = "0.13.1"
608source = "registry+https://github.com/rust-lang/crates.io-index"
609checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681"
610dependencies = [
611 "serde",
612 "termcolor",
613 "unicode-width",
614]
615
616[[package]]
617name = "color"
618version = "0.3.3"
619source = "registry+https://github.com/rust-lang/crates.io-index"
620checksum = "2ec7c5eb7a16992b1904d76c517d170ab353b0e0b3d5a0c81a8a0cd1037893cf"
621dependencies = [
622 "bytemuck",
623]
624
625[[package]]
626name = "combine"
627version = "4.6.7"
628source = "registry+https://github.com/rust-lang/crates.io-index"
629checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
630dependencies = [
631 "bytes",
632 "memchr",
633]
634
635[[package]]
636name = "concurrent-queue"
637version = "2.5.0"
638source = "registry+https://github.com/rust-lang/crates.io-index"
639checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
640dependencies = [
641 "crossbeam-utils",
642]
643
644[[package]]
645name = "core-foundation"
646version = "0.9.4"
647source = "registry+https://github.com/rust-lang/crates.io-index"
648checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
649dependencies = [
650 "core-foundation-sys",
651 "libc",
652]
653
654[[package]]
655name = "core-foundation"
656version = "0.10.1"
657source = "registry+https://github.com/rust-lang/crates.io-index"
658checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
659dependencies = [
660 "core-foundation-sys",
661 "libc",
662]
663
664[[package]]
665name = "core-foundation-sys"
666version = "0.8.7"
667source = "registry+https://github.com/rust-lang/crates.io-index"
668checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
669
670[[package]]
671name = "core-graphics"
672version = "0.23.2"
673source = "registry+https://github.com/rust-lang/crates.io-index"
674checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
675dependencies = [
676 "bitflags 1.3.2",
677 "core-foundation 0.9.4",
678 "core-graphics-types",
679 "foreign-types",
680 "libc",
681]
682
683[[package]]
684name = "core-graphics-types"
685version = "0.1.3"
686source = "registry+https://github.com/rust-lang/crates.io-index"
687checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
688dependencies = [
689 "bitflags 1.3.2",
690 "core-foundation 0.9.4",
691 "libc",
692]
693
694[[package]]
695name = "crc32fast"
696version = "1.5.0"
697source = "registry+https://github.com/rust-lang/crates.io-index"
698checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
699dependencies = [
700 "cfg-if",
701]
702
703[[package]]
704name = "crossbeam-utils"
705version = "0.8.21"
706source = "registry+https://github.com/rust-lang/crates.io-index"
707checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
708
709[[package]]
710name = "crunchy"
711version = "0.2.4"
712source = "registry+https://github.com/rust-lang/crates.io-index"
713checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
714
715[[package]]
716name = "cursor-icon"
717version = "1.2.0"
718source = "registry+https://github.com/rust-lang/crates.io-index"
719checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
720
721[[package]]
722name = "dispatch"
723version = "0.2.0"
724source = "registry+https://github.com/rust-lang/crates.io-index"
725checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
726
727[[package]]
728name = "dispatch2"
729version = "0.3.1"
730source = "registry+https://github.com/rust-lang/crates.io-index"
731checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
732dependencies = [
733 "bitflags 2.11.1",
734 "objc2 0.6.4",
735]
736
737[[package]]
738name = "displaydoc"
739version = "0.2.5"
740source = "registry+https://github.com/rust-lang/crates.io-index"
741checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
742dependencies = [
743 "proc-macro2",
744 "quote",
745 "syn",
746]
747
748[[package]]
749name = "dlib"
750version = "0.5.3"
751source = "registry+https://github.com/rust-lang/crates.io-index"
752checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a"
753dependencies = [
754 "libloading",
755]
756
757[[package]]
758name = "document-features"
759version = "0.2.12"
760source = "registry+https://github.com/rust-lang/crates.io-index"
761checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
762dependencies = [
763 "litrs",
764]
765
766[[package]]
767name = "downcast-rs"
768version = "1.2.1"
769source = "registry+https://github.com/rust-lang/crates.io-index"
770checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
771
772[[package]]
773name = "dpi"
774version = "0.1.2"
775source = "registry+https://github.com/rust-lang/crates.io-index"
776checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
777
778[[package]]
779name = "ecolor"
780version = "0.34.2"
781source = "registry+https://github.com/rust-lang/crates.io-index"
782checksum = "55f6cc0cb3b84a21232c468db972ebcddd34decbf1ff02cdebffd807c13bbd81"
783dependencies = [
784 "bytemuck",
785 "emath",
786]
787
788[[package]]
789name = "eframe"
790version = "0.34.2"
791source = "registry+https://github.com/rust-lang/crates.io-index"
792checksum = "fea3080bfd001aee2223dcb2228d9de7d31f41d7cfb99e8cd70df3ae8083a42f"
793dependencies = [
794 "ahash",
795 "bytemuck",
796 "document-features",
797 "egui",
798 "egui-wgpu",
799 "egui-winit",
800 "egui_glow",
801 "glutin",
802 "glutin-winit",
803 "image",
804 "js-sys",
805 "log",
806 "objc2 0.6.4",
807 "objc2-app-kit 0.3.2",
808 "objc2-foundation 0.3.2",
809 "parking_lot",
810 "percent-encoding",
811 "pollster",
812 "profiling",
813 "raw-window-handle",
814 "static_assertions",
815 "wasm-bindgen",
816 "wasm-bindgen-futures",
817 "web-sys",
818 "web-time",
819 "wgpu",
820 "windows-sys 0.61.2",
821 "winit",
822]
823
824[[package]]
825name = "egui"
826version = "0.34.2"
827source = "registry+https://github.com/rust-lang/crates.io-index"
828checksum = "3cbe28ac1a9c0761319aafb9ad37737720cc49d99c13a4a6b990768fa01ffe67"
829dependencies = [
830 "accesskit",
831 "ahash",
832 "bitflags 2.11.1",
833 "emath",
834 "epaint",
835 "log",
836 "nohash-hasher",
837 "profiling",
838 "smallvec",
839 "unicode-segmentation",
840]
841
842[[package]]
843name = "egui-wgpu"
844version = "0.34.2"
845source = "registry+https://github.com/rust-lang/crates.io-index"
846checksum = "2f311c0b9cdd8a38821ae6f245fbe6e1a3d7d157c77b7d22344f205b317232c8"
847dependencies = [
848 "ahash",
849 "bytemuck",
850 "document-features",
851 "egui",
852 "epaint",
853 "log",
854 "profiling",
855 "thiserror 2.0.18",
856 "type-map",
857 "web-time",
858 "wgpu",
859 "winit",
860]
861
862[[package]]
863name = "egui-winit"
864version = "0.34.2"
865source = "registry+https://github.com/rust-lang/crates.io-index"
866checksum = "e8e97625c2fe0fadc8b92ec690fbf515e15e2efd67ca50e063ad3302ec8ee626"
867dependencies = [
868 "accesskit_winit",
869 "arboard",
870 "bytemuck",
871 "egui",
872 "log",
873 "objc2 0.6.4",
874 "objc2-foundation 0.3.2",
875 "objc2-ui-kit 0.3.2",
876 "profiling",
877 "raw-window-handle",
878 "smithay-clipboard",
879 "web-time",
880 "webbrowser",
881 "winit",
882]
883
884[[package]]
885name = "egui_glow"
886version = "0.34.2"
887source = "registry+https://github.com/rust-lang/crates.io-index"
888checksum = "6caa4eca47cc2358e2c5ae60843a94118e338f87099c6af4170e6e968e8d77cb"
889dependencies = [
890 "bytemuck",
891 "egui",
892 "glow",
893 "log",
894 "memoffset",
895 "profiling",
896 "wasm-bindgen",
897 "web-sys",
898 "winit",
899]
900
901[[package]]
902name = "emath"
903version = "0.34.2"
904source = "registry+https://github.com/rust-lang/crates.io-index"
905checksum = "a74fbbf7501c430b89df62d102b6bfa02162faaf3e155512c677c9d20f5708d1"
906dependencies = [
907 "bytemuck",
908]
909
910[[package]]
911name = "endi"
912version = "1.1.1"
913source = "registry+https://github.com/rust-lang/crates.io-index"
914checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
915
916[[package]]
917name = "enumflags2"
918version = "0.7.12"
919source = "registry+https://github.com/rust-lang/crates.io-index"
920checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
921dependencies = [
922 "enumflags2_derive",
923 "serde",
924]
925
926[[package]]
927name = "enumflags2_derive"
928version = "0.7.12"
929source = "registry+https://github.com/rust-lang/crates.io-index"
930checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
931dependencies = [
932 "proc-macro2",
933 "quote",
934 "syn",
935]
936
937[[package]]
938name = "epaint"
939version = "0.34.2"
940source = "registry+https://github.com/rust-lang/crates.io-index"
941checksum = "92b452e348c2758115288802ca25f86ee286ce2cfae6643711ce116662311310"
942dependencies = [
943 "ahash",
944 "bytemuck",
945 "ecolor",
946 "emath",
947 "epaint_default_fonts",
948 "font-types",
949 "log",
950 "nohash-hasher",
951 "parking_lot",
952 "profiling",
953 "self_cell",
954 "skrifa",
955 "smallvec",
956 "vello_cpu",
957]
958
959[[package]]
960name = "epaint_default_fonts"
961version = "0.34.2"
962source = "registry+https://github.com/rust-lang/crates.io-index"
963checksum = "1644e25dbe3d663fd9c2a4181772c64b23361e377e550c10422ecc3a7de1c3c2"
964
965[[package]]
966name = "equivalent"
967version = "1.0.2"
968source = "registry+https://github.com/rust-lang/crates.io-index"
969checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
970
971[[package]]
972name = "errno"
973version = "0.3.14"
974source = "registry+https://github.com/rust-lang/crates.io-index"
975checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
976dependencies = [
977 "libc",
978 "windows-sys 0.61.2",
979]
980
981[[package]]
982name = "error-code"
983version = "3.3.2"
984source = "registry+https://github.com/rust-lang/crates.io-index"
985checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59"
986
987[[package]]
988name = "euclid"
989version = "0.22.14"
990source = "registry+https://github.com/rust-lang/crates.io-index"
991checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06"
992dependencies = [
993 "num-traits",
994]
995
996[[package]]
997name = "event-listener"
998version = "5.4.1"
999source = "registry+https://github.com/rust-lang/crates.io-index"
1000checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
1001dependencies = [
1002 "concurrent-queue",
1003 "parking",
1004 "pin-project-lite",
1005]
1006
1007[[package]]
1008name = "event-listener-strategy"
1009version = "0.5.4"
1010source = "registry+https://github.com/rust-lang/crates.io-index"
1011checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
1012dependencies = [
1013 "event-listener",
1014 "pin-project-lite",
1015]
1016
1017[[package]]
1018name = "fastrand"
1019version = "2.4.1"
1020source = "registry+https://github.com/rust-lang/crates.io-index"
1021checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
1022
1023[[package]]
1024name = "fax"
1025version = "0.2.7"
1026source = "registry+https://github.com/rust-lang/crates.io-index"
1027checksum = "caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a"
1028
1029[[package]]
1030name = "fdeflate"
1031version = "0.3.7"
1032source = "registry+https://github.com/rust-lang/crates.io-index"
1033checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
1034dependencies = [
1035 "simd-adler32",
1036]
1037
1038[[package]]
1039name = "fearless_simd"
1040version = "0.3.0"
1041source = "registry+https://github.com/rust-lang/crates.io-index"
1042checksum = "8fb2907d1f08b2b316b9223ced5b0e89d87028ba8deae9764741dba8ff7f3903"
1043dependencies = [
1044 "bytemuck",
1045]
1046
1047[[package]]
1048name = "find-msvc-tools"
1049version = "0.1.9"
1050source = "registry+https://github.com/rust-lang/crates.io-index"
1051checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
1052
1053[[package]]
1054name = "flate2"
1055version = "1.1.9"
1056source = "registry+https://github.com/rust-lang/crates.io-index"
1057checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c"
1058dependencies = [
1059 "crc32fast",
1060 "miniz_oxide",
1061]
1062
1063[[package]]
1064name = "foldhash"
1065version = "0.1.5"
1066source = "registry+https://github.com/rust-lang/crates.io-index"
1067checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1068
1069[[package]]
1070name = "foldhash"
1071version = "0.2.0"
1072source = "registry+https://github.com/rust-lang/crates.io-index"
1073checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1074
1075[[package]]
1076name = "font-types"
1077version = "0.11.3"
1078source = "registry+https://github.com/rust-lang/crates.io-index"
1079checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7"
1080dependencies = [
1081 "bytemuck",
1082]
1083
1084[[package]]
1085name = "foreign-types"
1086version = "0.5.0"
1087source = "registry+https://github.com/rust-lang/crates.io-index"
1088checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
1089dependencies = [
1090 "foreign-types-macros",
1091 "foreign-types-shared",
1092]
1093
1094[[package]]
1095name = "foreign-types-macros"
1096version = "0.2.3"
1097source = "registry+https://github.com/rust-lang/crates.io-index"
1098checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
1099dependencies = [
1100 "proc-macro2",
1101 "quote",
1102 "syn",
1103]
1104
1105[[package]]
1106name = "foreign-types-shared"
1107version = "0.3.1"
1108source = "registry+https://github.com/rust-lang/crates.io-index"
1109checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
1110
1111[[package]]
1112name = "form_urlencoded"
1113version = "1.2.2"
1114source = "registry+https://github.com/rust-lang/crates.io-index"
1115checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1116dependencies = [
1117 "percent-encoding",
1118]
1119
1120[[package]]
1121name = "futures-core"
1122version = "0.3.32"
1123source = "registry+https://github.com/rust-lang/crates.io-index"
1124checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
1125
1126[[package]]
1127name = "futures-io"
1128version = "0.3.32"
1129source = "registry+https://github.com/rust-lang/crates.io-index"
1130checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
1131
1132[[package]]
1133name = "futures-lite"
1134version = "2.6.1"
1135source = "registry+https://github.com/rust-lang/crates.io-index"
1136checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1137dependencies = [
1138 "fastrand",
1139 "futures-core",
1140 "futures-io",
1141 "parking",
1142 "pin-project-lite",
1143]
1144
1145[[package]]
1146name = "futures-macro"
1147version = "0.3.32"
1148source = "registry+https://github.com/rust-lang/crates.io-index"
1149checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
1150dependencies = [
1151 "proc-macro2",
1152 "quote",
1153 "syn",
1154]
1155
1156[[package]]
1157name = "futures-task"
1158version = "0.3.32"
1159source = "registry+https://github.com/rust-lang/crates.io-index"
1160checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
1161
1162[[package]]
1163name = "futures-util"
1164version = "0.3.32"
1165source = "registry+https://github.com/rust-lang/crates.io-index"
1166checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
1167dependencies = [
1168 "futures-core",
1169 "futures-macro",
1170 "futures-task",
1171 "pin-project-lite",
1172 "slab",
1173]
1174
1175[[package]]
1176name = "gethostname"
1177version = "1.1.0"
1178source = "registry+https://github.com/rust-lang/crates.io-index"
1179checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
1180dependencies = [
1181 "rustix 1.1.4",
1182 "windows-link",
1183]
1184
1185[[package]]
1186name = "getrandom"
1187version = "0.3.4"
1188source = "registry+https://github.com/rust-lang/crates.io-index"
1189checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
1190dependencies = [
1191 "cfg-if",
1192 "libc",
1193 "r-efi 5.3.0",
1194 "wasip2",
1195]
1196
1197[[package]]
1198name = "getrandom"
1199version = "0.4.2"
1200source = "registry+https://github.com/rust-lang/crates.io-index"
1201checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
1202dependencies = [
1203 "cfg-if",
1204 "libc",
1205 "r-efi 6.0.0",
1206 "wasip2",
1207 "wasip3",
1208]
1209
1210[[package]]
1211name = "gl_generator"
1212version = "0.14.0"
1213source = "registry+https://github.com/rust-lang/crates.io-index"
1214checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
1215dependencies = [
1216 "khronos_api",
1217 "log",
1218 "xml-rs",
1219]
1220
1221[[package]]
1222name = "glow"
1223version = "0.17.0"
1224source = "registry+https://github.com/rust-lang/crates.io-index"
1225checksum = "29038e1c483364cc6bb3cf78feee1816002e127c331a1eec55a4d202b9e1adb5"
1226dependencies = [
1227 "js-sys",
1228 "slotmap",
1229 "wasm-bindgen",
1230 "web-sys",
1231]
1232
1233[[package]]
1234name = "glutin"
1235version = "0.32.3"
1236source = "registry+https://github.com/rust-lang/crates.io-index"
1237checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325"
1238dependencies = [
1239 "bitflags 2.11.1",
1240 "cfg_aliases",
1241 "cgl",
1242 "dispatch2",
1243 "glutin_egl_sys",
1244 "glutin_glx_sys",
1245 "glutin_wgl_sys",
1246 "libloading",
1247 "objc2 0.6.4",
1248 "objc2-app-kit 0.3.2",
1249 "objc2-core-foundation",
1250 "objc2-foundation 0.3.2",
1251 "once_cell",
1252 "raw-window-handle",
1253 "wayland-sys",
1254 "windows-sys 0.52.0",
1255 "x11-dl",
1256]
1257
1258[[package]]
1259name = "glutin-winit"
1260version = "0.5.0"
1261source = "registry+https://github.com/rust-lang/crates.io-index"
1262checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f"
1263dependencies = [
1264 "cfg_aliases",
1265 "glutin",
1266 "raw-window-handle",
1267 "winit",
1268]
1269
1270[[package]]
1271name = "glutin_egl_sys"
1272version = "0.7.1"
1273source = "registry+https://github.com/rust-lang/crates.io-index"
1274checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2"
1275dependencies = [
1276 "gl_generator",
1277 "windows-sys 0.52.0",
1278]
1279
1280[[package]]
1281name = "glutin_glx_sys"
1282version = "0.6.1"
1283source = "registry+https://github.com/rust-lang/crates.io-index"
1284checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185"
1285dependencies = [
1286 "gl_generator",
1287 "x11-dl",
1288]
1289
1290[[package]]
1291name = "glutin_wgl_sys"
1292version = "0.6.1"
1293source = "registry+https://github.com/rust-lang/crates.io-index"
1294checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e"
1295dependencies = [
1296 "gl_generator",
1297]
1298
1299[[package]]
1300name = "gpu-allocator"
1301version = "0.28.0"
1302source = "registry+https://github.com/rust-lang/crates.io-index"
1303checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795"
1304dependencies = [
1305 "ash",
1306 "hashbrown 0.16.1",
1307 "log",
1308 "presser",
1309 "thiserror 2.0.18",
1310 "windows",
1311]
1312
1313[[package]]
1314name = "gpu-descriptor"
1315version = "0.3.2"
1316source = "registry+https://github.com/rust-lang/crates.io-index"
1317checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
1318dependencies = [
1319 "bitflags 2.11.1",
1320 "gpu-descriptor-types",
1321 "hashbrown 0.15.5",
1322]
1323
1324[[package]]
1325name = "gpu-descriptor-types"
1326version = "0.2.0"
1327source = "registry+https://github.com/rust-lang/crates.io-index"
1328checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
1329dependencies = [
1330 "bitflags 2.11.1",
1331]
1332
1333[[package]]
1334name = "half"
1335version = "2.7.1"
1336source = "registry+https://github.com/rust-lang/crates.io-index"
1337checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
1338dependencies = [
1339 "cfg-if",
1340 "crunchy",
1341 "num-traits",
1342 "zerocopy",
1343]
1344
1345[[package]]
1346name = "hashbrown"
1347version = "0.15.5"
1348source = "registry+https://github.com/rust-lang/crates.io-index"
1349checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
1350dependencies = [
1351 "foldhash 0.1.5",
1352]
1353
1354[[package]]
1355name = "hashbrown"
1356version = "0.16.1"
1357source = "registry+https://github.com/rust-lang/crates.io-index"
1358checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
1359dependencies = [
1360 "allocator-api2",
1361 "equivalent",
1362 "foldhash 0.2.0",
1363]
1364
1365[[package]]
1366name = "hashbrown"
1367version = "0.17.1"
1368source = "registry+https://github.com/rust-lang/crates.io-index"
1369checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
1370
1371[[package]]
1372name = "heck"
1373version = "0.5.0"
1374source = "registry+https://github.com/rust-lang/crates.io-index"
1375checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1376
1377[[package]]
1378name = "hermit-abi"
1379version = "0.5.2"
1380source = "registry+https://github.com/rust-lang/crates.io-index"
1381checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
1382
1383[[package]]
1384name = "hex"
1385version = "0.4.3"
1386source = "registry+https://github.com/rust-lang/crates.io-index"
1387checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1388
1389[[package]]
1390name = "hexf-parse"
1391version = "0.2.1"
1392source = "registry+https://github.com/rust-lang/crates.io-index"
1393checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
1394
1395[[package]]
1396name = "icu_collections"
1397version = "2.2.0"
1398source = "registry+https://github.com/rust-lang/crates.io-index"
1399checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c"
1400dependencies = [
1401 "displaydoc",
1402 "potential_utf",
1403 "utf8_iter",
1404 "yoke",
1405 "zerofrom",
1406 "zerovec",
1407]
1408
1409[[package]]
1410name = "icu_locale_core"
1411version = "2.2.0"
1412source = "registry+https://github.com/rust-lang/crates.io-index"
1413checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29"
1414dependencies = [
1415 "displaydoc",
1416 "litemap",
1417 "tinystr",
1418 "writeable",
1419 "zerovec",
1420]
1421
1422[[package]]
1423name = "icu_normalizer"
1424version = "2.2.0"
1425source = "registry+https://github.com/rust-lang/crates.io-index"
1426checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4"
1427dependencies = [
1428 "icu_collections",
1429 "icu_normalizer_data",
1430 "icu_properties",
1431 "icu_provider",
1432 "smallvec",
1433 "zerovec",
1434]
1435
1436[[package]]
1437name = "icu_normalizer_data"
1438version = "2.2.0"
1439source = "registry+https://github.com/rust-lang/crates.io-index"
1440checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38"
1441
1442[[package]]
1443name = "icu_properties"
1444version = "2.2.0"
1445source = "registry+https://github.com/rust-lang/crates.io-index"
1446checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de"
1447dependencies = [
1448 "icu_collections",
1449 "icu_locale_core",
1450 "icu_properties_data",
1451 "icu_provider",
1452 "zerotrie",
1453 "zerovec",
1454]
1455
1456[[package]]
1457name = "icu_properties_data"
1458version = "2.2.0"
1459source = "registry+https://github.com/rust-lang/crates.io-index"
1460checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14"
1461
1462[[package]]
1463name = "icu_provider"
1464version = "2.2.0"
1465source = "registry+https://github.com/rust-lang/crates.io-index"
1466checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421"
1467dependencies = [
1468 "displaydoc",
1469 "icu_locale_core",
1470 "writeable",
1471 "yoke",
1472 "zerofrom",
1473 "zerotrie",
1474 "zerovec",
1475]
1476
1477[[package]]
1478name = "id-arena"
1479version = "2.3.0"
1480source = "registry+https://github.com/rust-lang/crates.io-index"
1481checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
1482
1483[[package]]
1484name = "idna"
1485version = "1.1.0"
1486source = "registry+https://github.com/rust-lang/crates.io-index"
1487checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
1488dependencies = [
1489 "idna_adapter",
1490 "smallvec",
1491 "utf8_iter",
1492]
1493
1494[[package]]
1495name = "idna_adapter"
1496version = "1.2.2"
1497source = "registry+https://github.com/rust-lang/crates.io-index"
1498checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
1499dependencies = [
1500 "icu_normalizer",
1501 "icu_properties",
1502]
1503
1504[[package]]
1505name = "image"
1506version = "0.25.10"
1507source = "registry+https://github.com/rust-lang/crates.io-index"
1508checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104"
1509dependencies = [
1510 "bytemuck",
1511 "byteorder-lite",
1512 "moxcms",
1513 "num-traits",
1514 "png",
1515 "tiff",
1516]
1517
1518[[package]]
1519name = "indexmap"
1520version = "2.14.0"
1521source = "registry+https://github.com/rust-lang/crates.io-index"
1522checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
1523dependencies = [
1524 "equivalent",
1525 "hashbrown 0.17.1",
1526 "serde",
1527 "serde_core",
1528]
1529
1530[[package]]
1531name = "itoa"
1532version = "1.0.18"
1533source = "registry+https://github.com/rust-lang/crates.io-index"
1534checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
1535
1536[[package]]
1537name = "jni"
1538version = "0.22.4"
1539source = "registry+https://github.com/rust-lang/crates.io-index"
1540checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498"
1541dependencies = [
1542 "cfg-if",
1543 "combine",
1544 "jni-macros",
1545 "jni-sys 0.4.1",
1546 "log",
1547 "simd_cesu8",
1548 "thiserror 2.0.18",
1549 "walkdir",
1550 "windows-link",
1551]
1552
1553[[package]]
1554name = "jni-macros"
1555version = "0.22.4"
1556source = "registry+https://github.com/rust-lang/crates.io-index"
1557checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3"
1558dependencies = [
1559 "proc-macro2",
1560 "quote",
1561 "rustc_version",
1562 "simd_cesu8",
1563 "syn",
1564]
1565
1566[[package]]
1567name = "jni-sys"
1568version = "0.3.1"
1569source = "registry+https://github.com/rust-lang/crates.io-index"
1570checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
1571dependencies = [
1572 "jni-sys 0.4.1",
1573]
1574
1575[[package]]
1576name = "jni-sys"
1577version = "0.4.1"
1578source = "registry+https://github.com/rust-lang/crates.io-index"
1579checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
1580dependencies = [
1581 "jni-sys-macros",
1582]
1583
1584[[package]]
1585name = "jni-sys-macros"
1586version = "0.4.1"
1587source = "registry+https://github.com/rust-lang/crates.io-index"
1588checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
1589dependencies = [
1590 "quote",
1591 "syn",
1592]
1593
1594[[package]]
1595name = "jobserver"
1596version = "0.1.34"
1597source = "registry+https://github.com/rust-lang/crates.io-index"
1598checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
1599dependencies = [
1600 "getrandom 0.3.4",
1601 "libc",
1602]
1603
1604[[package]]
1605name = "js-sys"
1606version = "0.3.99"
1607source = "registry+https://github.com/rust-lang/crates.io-index"
1608checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
1609dependencies = [
1610 "cfg-if",
1611 "futures-util",
1612 "once_cell",
1613 "wasm-bindgen",
1614]
1615
1616[[package]]
1617name = "khronos-egl"
1618version = "6.0.0"
1619source = "registry+https://github.com/rust-lang/crates.io-index"
1620checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
1621dependencies = [
1622 "libc",
1623 "libloading",
1624 "pkg-config",
1625]
1626
1627[[package]]
1628name = "khronos_api"
1629version = "3.1.0"
1630source = "registry+https://github.com/rust-lang/crates.io-index"
1631checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
1632
1633[[package]]
1634name = "kurbo"
1635version = "0.13.1"
1636source = "registry+https://github.com/rust-lang/crates.io-index"
1637checksum = "4b60dfc32f652b926df6192e55525b16d186c69d47876c3ead4da5cc9f8450e2"
1638dependencies = [
1639 "arrayvec",
1640 "euclid",
1641 "polycool",
1642 "smallvec",
1643]
1644
1645[[package]]
1646name = "leb128fmt"
1647version = "0.1.0"
1648source = "registry+https://github.com/rust-lang/crates.io-index"
1649checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
1650
1651[[package]]
1652name = "libc"
1653version = "0.2.186"
1654source = "registry+https://github.com/rust-lang/crates.io-index"
1655checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
1656
1657[[package]]
1658name = "libloading"
1659version = "0.8.9"
1660source = "registry+https://github.com/rust-lang/crates.io-index"
1661checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
1662dependencies = [
1663 "cfg-if",
1664 "windows-link",
1665]
1666
1667[[package]]
1668name = "libm"
1669version = "0.2.16"
1670source = "registry+https://github.com/rust-lang/crates.io-index"
1671checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
1672
1673[[package]]
1674name = "libredox"
1675version = "0.1.16"
1676source = "registry+https://github.com/rust-lang/crates.io-index"
1677checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c"
1678dependencies = [
1679 "bitflags 2.11.1",
1680 "libc",
1681 "plain",
1682 "redox_syscall 0.7.5",
1683]
1684
1685[[package]]
1686name = "linebender_resource_handle"
1687version = "0.1.1"
1688source = "registry+https://github.com/rust-lang/crates.io-index"
1689checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4"
1690
1691[[package]]
1692name = "linux-raw-sys"
1693version = "0.4.15"
1694source = "registry+https://github.com/rust-lang/crates.io-index"
1695checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
1696
1697[[package]]
1698name = "linux-raw-sys"
1699version = "0.12.1"
1700source = "registry+https://github.com/rust-lang/crates.io-index"
1701checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
1702
1703[[package]]
1704name = "litemap"
1705version = "0.8.2"
1706source = "registry+https://github.com/rust-lang/crates.io-index"
1707checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
1708
1709[[package]]
1710name = "litrs"
1711version = "1.0.0"
1712source = "registry+https://github.com/rust-lang/crates.io-index"
1713checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
1714
1715[[package]]
1716name = "lock_api"
1717version = "0.4.14"
1718source = "registry+https://github.com/rust-lang/crates.io-index"
1719checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
1720dependencies = [
1721 "scopeguard",
1722]
1723
1724[[package]]
1725name = "log"
1726version = "0.4.29"
1727source = "registry+https://github.com/rust-lang/crates.io-index"
1728checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
1729
1730[[package]]
1731name = "memchr"
1732version = "2.8.0"
1733source = "registry+https://github.com/rust-lang/crates.io-index"
1734checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
1735
1736[[package]]
1737name = "memmap2"
1738version = "0.9.10"
1739source = "registry+https://github.com/rust-lang/crates.io-index"
1740checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3"
1741dependencies = [
1742 "libc",
1743]
1744
1745[[package]]
1746name = "memoffset"
1747version = "0.9.1"
1748source = "registry+https://github.com/rust-lang/crates.io-index"
1749checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1750dependencies = [
1751 "autocfg",
1752]
1753
1754[[package]]
1755name = "miniz_oxide"
1756version = "0.8.9"
1757source = "registry+https://github.com/rust-lang/crates.io-index"
1758checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
1759dependencies = [
1760 "adler2",
1761 "simd-adler32",
1762]
1763
1764[[package]]
1765name = "moxcms"
1766version = "0.8.1"
1767source = "registry+https://github.com/rust-lang/crates.io-index"
1768checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b"
1769dependencies = [
1770 "num-traits",
1771 "pxfm",
1772]
1773
1774[[package]]
1775name = "naga"
1776version = "29.0.3"
1777source = "registry+https://github.com/rust-lang/crates.io-index"
1778checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079"
1779dependencies = [
1780 "arrayvec",
1781 "bit-set",
1782 "bitflags 2.11.1",
1783 "cfg-if",
1784 "cfg_aliases",
1785 "codespan-reporting",
1786 "half",
1787 "hashbrown 0.16.1",
1788 "hexf-parse",
1789 "indexmap",
1790 "libm",
1791 "log",
1792 "num-traits",
1793 "once_cell",
1794 "rustc-hash 1.1.0",
1795 "spirv",
1796 "thiserror 2.0.18",
1797 "unicode-ident",
1798]
1799
1800[[package]]
1801name = "ndk"
1802version = "0.9.0"
1803source = "registry+https://github.com/rust-lang/crates.io-index"
1804checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
1805dependencies = [
1806 "bitflags 2.11.1",
1807 "jni-sys 0.3.1",
1808 "log",
1809 "ndk-sys",
1810 "num_enum",
1811 "raw-window-handle",
1812 "thiserror 1.0.69",
1813]
1814
1815[[package]]
1816name = "ndk-context"
1817version = "0.1.1"
1818source = "registry+https://github.com/rust-lang/crates.io-index"
1819checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
1820
1821[[package]]
1822name = "ndk-sys"
1823version = "0.6.0+11769913"
1824source = "registry+https://github.com/rust-lang/crates.io-index"
1825checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
1826dependencies = [
1827 "jni-sys 0.3.1",
1828]
1829
1830[[package]]
1831name = "nohash-hasher"
1832version = "0.2.0"
1833source = "registry+https://github.com/rust-lang/crates.io-index"
1834checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
1835
1836[[package]]
1837name = "num-traits"
1838version = "0.2.19"
1839source = "registry+https://github.com/rust-lang/crates.io-index"
1840checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
1841dependencies = [
1842 "autocfg",
1843 "libm",
1844]
1845
1846[[package]]
1847name = "num_enum"
1848version = "0.7.6"
1849source = "registry+https://github.com/rust-lang/crates.io-index"
1850checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26"
1851dependencies = [
1852 "num_enum_derive",
1853 "rustversion",
1854]
1855
1856[[package]]
1857name = "num_enum_derive"
1858version = "0.7.6"
1859source = "registry+https://github.com/rust-lang/crates.io-index"
1860checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8"
1861dependencies = [
1862 "proc-macro-crate",
1863 "proc-macro2",
1864 "quote",
1865 "syn",
1866]
1867
1868[[package]]
1869name = "objc-sys"
1870version = "0.3.5"
1871source = "registry+https://github.com/rust-lang/crates.io-index"
1872checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
1873
1874[[package]]
1875name = "objc2"
1876version = "0.5.2"
1877source = "registry+https://github.com/rust-lang/crates.io-index"
1878checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804"
1879dependencies = [
1880 "objc-sys",
1881 "objc2-encode",
1882]
1883
1884[[package]]
1885name = "objc2"
1886version = "0.6.4"
1887source = "registry+https://github.com/rust-lang/crates.io-index"
1888checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f"
1889dependencies = [
1890 "objc2-encode",
1891]
1892
1893[[package]]
1894name = "objc2-app-kit"
1895version = "0.2.2"
1896source = "registry+https://github.com/rust-lang/crates.io-index"
1897checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
1898dependencies = [
1899 "bitflags 2.11.1",
1900 "block2 0.5.1",
1901 "libc",
1902 "objc2 0.5.2",
1903 "objc2-core-data",
1904 "objc2-core-image",
1905 "objc2-foundation 0.2.2",
1906 "objc2-quartz-core 0.2.2",
1907]
1908
1909[[package]]
1910name = "objc2-app-kit"
1911version = "0.3.2"
1912source = "registry+https://github.com/rust-lang/crates.io-index"
1913checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
1914dependencies = [
1915 "bitflags 2.11.1",
1916 "objc2 0.6.4",
1917 "objc2-core-foundation",
1918 "objc2-core-graphics",
1919 "objc2-foundation 0.3.2",
1920]
1921
1922[[package]]
1923name = "objc2-cloud-kit"
1924version = "0.2.2"
1925source = "registry+https://github.com/rust-lang/crates.io-index"
1926checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
1927dependencies = [
1928 "bitflags 2.11.1",
1929 "block2 0.5.1",
1930 "objc2 0.5.2",
1931 "objc2-core-location",
1932 "objc2-foundation 0.2.2",
1933]
1934
1935[[package]]
1936name = "objc2-contacts"
1937version = "0.2.2"
1938source = "registry+https://github.com/rust-lang/crates.io-index"
1939checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
1940dependencies = [
1941 "block2 0.5.1",
1942 "objc2 0.5.2",
1943 "objc2-foundation 0.2.2",
1944]
1945
1946[[package]]
1947name = "objc2-core-data"
1948version = "0.2.2"
1949source = "registry+https://github.com/rust-lang/crates.io-index"
1950checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
1951dependencies = [
1952 "bitflags 2.11.1",
1953 "block2 0.5.1",
1954 "objc2 0.5.2",
1955 "objc2-foundation 0.2.2",
1956]
1957
1958[[package]]
1959name = "objc2-core-foundation"
1960version = "0.3.2"
1961source = "registry+https://github.com/rust-lang/crates.io-index"
1962checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
1963dependencies = [
1964 "bitflags 2.11.1",
1965 "dispatch2",
1966 "objc2 0.6.4",
1967]
1968
1969[[package]]
1970name = "objc2-core-graphics"
1971version = "0.3.2"
1972source = "registry+https://github.com/rust-lang/crates.io-index"
1973checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
1974dependencies = [
1975 "bitflags 2.11.1",
1976 "dispatch2",
1977 "objc2 0.6.4",
1978 "objc2-core-foundation",
1979 "objc2-io-surface",
1980]
1981
1982[[package]]
1983name = "objc2-core-image"
1984version = "0.2.2"
1985source = "registry+https://github.com/rust-lang/crates.io-index"
1986checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
1987dependencies = [
1988 "block2 0.5.1",
1989 "objc2 0.5.2",
1990 "objc2-foundation 0.2.2",
1991 "objc2-metal 0.2.2",
1992]
1993
1994[[package]]
1995name = "objc2-core-location"
1996version = "0.2.2"
1997source = "registry+https://github.com/rust-lang/crates.io-index"
1998checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
1999dependencies = [
2000 "block2 0.5.1",
2001 "objc2 0.5.2",
2002 "objc2-contacts",
2003 "objc2-foundation 0.2.2",
2004]
2005
2006[[package]]
2007name = "objc2-encode"
2008version = "4.1.0"
2009source = "registry+https://github.com/rust-lang/crates.io-index"
2010checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
2011
2012[[package]]
2013name = "objc2-foundation"
2014version = "0.2.2"
2015source = "registry+https://github.com/rust-lang/crates.io-index"
2016checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2017dependencies = [
2018 "bitflags 2.11.1",
2019 "block2 0.5.1",
2020 "dispatch",
2021 "libc",
2022 "objc2 0.5.2",
2023]
2024
2025[[package]]
2026name = "objc2-foundation"
2027version = "0.3.2"
2028source = "registry+https://github.com/rust-lang/crates.io-index"
2029checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
2030dependencies = [
2031 "bitflags 2.11.1",
2032 "block2 0.6.2",
2033 "objc2 0.6.4",
2034 "objc2-core-foundation",
2035]
2036
2037[[package]]
2038name = "objc2-io-surface"
2039version = "0.3.2"
2040source = "registry+https://github.com/rust-lang/crates.io-index"
2041checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
2042dependencies = [
2043 "bitflags 2.11.1",
2044 "objc2 0.6.4",
2045 "objc2-core-foundation",
2046]
2047
2048[[package]]
2049name = "objc2-link-presentation"
2050version = "0.2.2"
2051source = "registry+https://github.com/rust-lang/crates.io-index"
2052checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
2053dependencies = [
2054 "block2 0.5.1",
2055 "objc2 0.5.2",
2056 "objc2-app-kit 0.2.2",
2057 "objc2-foundation 0.2.2",
2058]
2059
2060[[package]]
2061name = "objc2-metal"
2062version = "0.2.2"
2063source = "registry+https://github.com/rust-lang/crates.io-index"
2064checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2065dependencies = [
2066 "bitflags 2.11.1",
2067 "block2 0.5.1",
2068 "objc2 0.5.2",
2069 "objc2-foundation 0.2.2",
2070]
2071
2072[[package]]
2073name = "objc2-metal"
2074version = "0.3.2"
2075source = "registry+https://github.com/rust-lang/crates.io-index"
2076checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794"
2077dependencies = [
2078 "bitflags 2.11.1",
2079 "block2 0.6.2",
2080 "objc2 0.6.4",
2081 "objc2-foundation 0.3.2",
2082]
2083
2084[[package]]
2085name = "objc2-quartz-core"
2086version = "0.2.2"
2087source = "registry+https://github.com/rust-lang/crates.io-index"
2088checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2089dependencies = [
2090 "bitflags 2.11.1",
2091 "block2 0.5.1",
2092 "objc2 0.5.2",
2093 "objc2-foundation 0.2.2",
2094 "objc2-metal 0.2.2",
2095]
2096
2097[[package]]
2098name = "objc2-quartz-core"
2099version = "0.3.2"
2100source = "registry+https://github.com/rust-lang/crates.io-index"
2101checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
2102dependencies = [
2103 "bitflags 2.11.1",
2104 "objc2 0.6.4",
2105 "objc2-core-foundation",
2106 "objc2-foundation 0.3.2",
2107 "objc2-metal 0.3.2",
2108]
2109
2110[[package]]
2111name = "objc2-symbols"
2112version = "0.2.2"
2113source = "registry+https://github.com/rust-lang/crates.io-index"
2114checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
2115dependencies = [
2116 "objc2 0.5.2",
2117 "objc2-foundation 0.2.2",
2118]
2119
2120[[package]]
2121name = "objc2-ui-kit"
2122version = "0.2.2"
2123source = "registry+https://github.com/rust-lang/crates.io-index"
2124checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
2125dependencies = [
2126 "bitflags 2.11.1",
2127 "block2 0.5.1",
2128 "objc2 0.5.2",
2129 "objc2-cloud-kit",
2130 "objc2-core-data",
2131 "objc2-core-image",
2132 "objc2-core-location",
2133 "objc2-foundation 0.2.2",
2134 "objc2-link-presentation",
2135 "objc2-quartz-core 0.2.2",
2136 "objc2-symbols",
2137 "objc2-uniform-type-identifiers",
2138 "objc2-user-notifications",
2139]
2140
2141[[package]]
2142name = "objc2-ui-kit"
2143version = "0.3.2"
2144source = "registry+https://github.com/rust-lang/crates.io-index"
2145checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
2146dependencies = [
2147 "bitflags 2.11.1",
2148 "objc2 0.6.4",
2149 "objc2-core-foundation",
2150 "objc2-foundation 0.3.2",
2151]
2152
2153[[package]]
2154name = "objc2-uniform-type-identifiers"
2155version = "0.2.2"
2156source = "registry+https://github.com/rust-lang/crates.io-index"
2157checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
2158dependencies = [
2159 "block2 0.5.1",
2160 "objc2 0.5.2",
2161 "objc2-foundation 0.2.2",
2162]
2163
2164[[package]]
2165name = "objc2-user-notifications"
2166version = "0.2.2"
2167source = "registry+https://github.com/rust-lang/crates.io-index"
2168checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
2169dependencies = [
2170 "bitflags 2.11.1",
2171 "block2 0.5.1",
2172 "objc2 0.5.2",
2173 "objc2-core-location",
2174 "objc2-foundation 0.2.2",
2175]
2176
2177[[package]]
2178name = "once_cell"
2179version = "1.21.4"
2180source = "registry+https://github.com/rust-lang/crates.io-index"
2181checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
2182
2183[[package]]
2184name = "orbclient"
2185version = "0.3.54"
2186source = "registry+https://github.com/rust-lang/crates.io-index"
2187checksum = "a570f6bca41d29acb2139229a7c873ec99bc9a313bd10804081d89bfac8ff329"
2188dependencies = [
2189 "libc",
2190 "libredox",
2191]
2192
2193[[package]]
2194name = "ordered-float"
2195version = "5.3.0"
2196source = "registry+https://github.com/rust-lang/crates.io-index"
2197checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e"
2198dependencies = [
2199 "num-traits",
2200]
2201
2202[[package]]
2203name = "ordered-stream"
2204version = "0.2.0"
2205source = "registry+https://github.com/rust-lang/crates.io-index"
2206checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
2207dependencies = [
2208 "futures-core",
2209 "pin-project-lite",
2210]
2211
2212[[package]]
2213name = "owned_ttf_parser"
2214version = "0.25.1"
2215source = "registry+https://github.com/rust-lang/crates.io-index"
2216checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
2217dependencies = [
2218 "ttf-parser",
2219]
2220
2221[[package]]
2222name = "parking"
2223version = "2.2.1"
2224source = "registry+https://github.com/rust-lang/crates.io-index"
2225checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
2226
2227[[package]]
2228name = "parking_lot"
2229version = "0.12.5"
2230source = "registry+https://github.com/rust-lang/crates.io-index"
2231checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
2232dependencies = [
2233 "lock_api",
2234 "parking_lot_core",
2235]
2236
2237[[package]]
2238name = "parking_lot_core"
2239version = "0.9.12"
2240source = "registry+https://github.com/rust-lang/crates.io-index"
2241checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
2242dependencies = [
2243 "cfg-if",
2244 "libc",
2245 "redox_syscall 0.5.18",
2246 "smallvec",
2247 "windows-link",
2248]
2249
2250[[package]]
2251name = "peniko"
2252version = "0.6.1"
2253source = "registry+https://github.com/rust-lang/crates.io-index"
2254checksum = "839c8299360d2e998bdb106dc0a6cd71dcc5f4df51df1b620361bf50e283cca6"
2255dependencies = [
2256 "bytemuck",
2257 "color",
2258 "kurbo",
2259 "linebender_resource_handle",
2260 "smallvec",
2261]
2262
2263[[package]]
2264name = "percent-encoding"
2265version = "2.3.2"
2266source = "registry+https://github.com/rust-lang/crates.io-index"
2267checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
2268
2269[[package]]
2270name = "phf"
2271version = "0.13.1"
2272source = "registry+https://github.com/rust-lang/crates.io-index"
2273checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
2274dependencies = [
2275 "phf_macros",
2276 "phf_shared",
2277 "serde",
2278]
2279
2280[[package]]
2281name = "phf_generator"
2282version = "0.13.1"
2283source = "registry+https://github.com/rust-lang/crates.io-index"
2284checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
2285dependencies = [
2286 "fastrand",
2287 "phf_shared",
2288]
2289
2290[[package]]
2291name = "phf_macros"
2292version = "0.13.1"
2293source = "registry+https://github.com/rust-lang/crates.io-index"
2294checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
2295dependencies = [
2296 "phf_generator",
2297 "phf_shared",
2298 "proc-macro2",
2299 "quote",
2300 "syn",
2301]
2302
2303[[package]]
2304name = "phf_shared"
2305version = "0.13.1"
2306source = "registry+https://github.com/rust-lang/crates.io-index"
2307checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
2308dependencies = [
2309 "siphasher",
2310]
2311
2312[[package]]
2313name = "pin-project"
2314version = "1.1.13"
2315source = "registry+https://github.com/rust-lang/crates.io-index"
2316checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"
2317dependencies = [
2318 "pin-project-internal",
2319]
2320
2321[[package]]
2322name = "pin-project-internal"
2323version = "1.1.13"
2324source = "registry+https://github.com/rust-lang/crates.io-index"
2325checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"
2326dependencies = [
2327 "proc-macro2",
2328 "quote",
2329 "syn",
2330]
2331
2332[[package]]
2333name = "pin-project-lite"
2334version = "0.2.17"
2335source = "registry+https://github.com/rust-lang/crates.io-index"
2336checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
2337
2338[[package]]
2339name = "piper"
2340version = "0.2.5"
2341source = "registry+https://github.com/rust-lang/crates.io-index"
2342checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1"
2343dependencies = [
2344 "atomic-waker",
2345 "fastrand",
2346 "futures-io",
2347]
2348
2349[[package]]
2350name = "pkg-config"
2351version = "0.3.33"
2352source = "registry+https://github.com/rust-lang/crates.io-index"
2353checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e"
2354
2355[[package]]
2356name = "plain"
2357version = "0.2.3"
2358source = "registry+https://github.com/rust-lang/crates.io-index"
2359checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
2360
2361[[package]]
2362name = "png"
2363version = "0.18.1"
2364source = "registry+https://github.com/rust-lang/crates.io-index"
2365checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61"
2366dependencies = [
2367 "bitflags 2.11.1",
2368 "crc32fast",
2369 "fdeflate",
2370 "flate2",
2371 "miniz_oxide",
2372]
2373
2374[[package]]
2375name = "polling"
2376version = "3.11.0"
2377source = "registry+https://github.com/rust-lang/crates.io-index"
2378checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
2379dependencies = [
2380 "cfg-if",
2381 "concurrent-queue",
2382 "hermit-abi",
2383 "pin-project-lite",
2384 "rustix 1.1.4",
2385 "windows-sys 0.61.2",
2386]
2387
2388[[package]]
2389name = "pollster"
2390version = "0.4.0"
2391source = "registry+https://github.com/rust-lang/crates.io-index"
2392checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
2393
2394[[package]]
2395name = "polycool"
2396version = "0.4.0"
2397source = "registry+https://github.com/rust-lang/crates.io-index"
2398checksum = "50596ddc09eb5ad5f75cacd40209568e66df71baf86e1499a0e99c4cff12a5a6"
2399dependencies = [
2400 "arrayvec",
2401]
2402
2403[[package]]
2404name = "portable-atomic"
2405version = "1.13.1"
2406source = "registry+https://github.com/rust-lang/crates.io-index"
2407checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
2408
2409[[package]]
2410name = "portable-atomic-util"
2411version = "0.2.7"
2412source = "registry+https://github.com/rust-lang/crates.io-index"
2413checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618"
2414dependencies = [
2415 "portable-atomic",
2416]
2417
2418[[package]]
2419name = "potential_utf"
2420version = "0.1.5"
2421source = "registry+https://github.com/rust-lang/crates.io-index"
2422checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564"
2423dependencies = [
2424 "zerovec",
2425]
2426
2427[[package]]
2428name = "presser"
2429version = "0.3.1"
2430source = "registry+https://github.com/rust-lang/crates.io-index"
2431checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
2432
2433[[package]]
2434name = "prettyplease"
2435version = "0.2.37"
2436source = "registry+https://github.com/rust-lang/crates.io-index"
2437checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
2438dependencies = [
2439 "proc-macro2",
2440 "syn",
2441]
2442
2443[[package]]
2444name = "proc-macro-crate"
2445version = "3.5.0"
2446source = "registry+https://github.com/rust-lang/crates.io-index"
2447checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f"
2448dependencies = [
2449 "toml_edit",
2450]
2451
2452[[package]]
2453name = "proc-macro2"
2454version = "1.0.106"
2455source = "registry+https://github.com/rust-lang/crates.io-index"
2456checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
2457dependencies = [
2458 "unicode-ident",
2459]
2460
2461[[package]]
2462name = "profiling"
2463version = "1.0.18"
2464source = "registry+https://github.com/rust-lang/crates.io-index"
2465checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5"
2466
2467[[package]]
2468name = "pxfm"
2469version = "0.1.29"
2470source = "registry+https://github.com/rust-lang/crates.io-index"
2471checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f"
2472
2473[[package]]
2474name = "quick-error"
2475version = "2.0.1"
2476source = "registry+https://github.com/rust-lang/crates.io-index"
2477checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
2478
2479[[package]]
2480name = "quick-xml"
2481version = "0.39.4"
2482source = "registry+https://github.com/rust-lang/crates.io-index"
2483checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e"
2484dependencies = [
2485 "memchr",
2486 "serde",
2487]
2488
2489[[package]]
2490name = "quote"
2491version = "1.0.45"
2492source = "registry+https://github.com/rust-lang/crates.io-index"
2493checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
2494dependencies = [
2495 "proc-macro2",
2496]
2497
2498[[package]]
2499name = "r-efi"
2500version = "5.3.0"
2501source = "registry+https://github.com/rust-lang/crates.io-index"
2502checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
2503
2504[[package]]
2505name = "r-efi"
2506version = "6.0.0"
2507source = "registry+https://github.com/rust-lang/crates.io-index"
2508checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
2509
2510[[package]]
2511name = "range-alloc"
2512version = "0.1.5"
2513source = "registry+https://github.com/rust-lang/crates.io-index"
2514checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08"
2515
2516[[package]]
2517name = "raw-window-handle"
2518version = "0.6.2"
2519source = "registry+https://github.com/rust-lang/crates.io-index"
2520checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
2521
2522[[package]]
2523name = "raw-window-metal"
2524version = "1.1.0"
2525source = "registry+https://github.com/rust-lang/crates.io-index"
2526checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135"
2527dependencies = [
2528 "objc2 0.6.4",
2529 "objc2-core-foundation",
2530 "objc2-foundation 0.3.2",
2531 "objc2-quartz-core 0.3.2",
2532]
2533
2534[[package]]
2535name = "read-fonts"
2536version = "0.37.0"
2537source = "registry+https://github.com/rust-lang/crates.io-index"
2538checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5"
2539dependencies = [
2540 "bytemuck",
2541 "font-types",
2542]
2543
2544[[package]]
2545name = "redox_syscall"
2546version = "0.4.1"
2547source = "registry+https://github.com/rust-lang/crates.io-index"
2548checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
2549dependencies = [
2550 "bitflags 1.3.2",
2551]
2552
2553[[package]]
2554name = "redox_syscall"
2555version = "0.5.18"
2556source = "registry+https://github.com/rust-lang/crates.io-index"
2557checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
2558dependencies = [
2559 "bitflags 2.11.1",
2560]
2561
2562[[package]]
2563name = "redox_syscall"
2564version = "0.7.5"
2565source = "registry+https://github.com/rust-lang/crates.io-index"
2566checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b"
2567dependencies = [
2568 "bitflags 2.11.1",
2569]
2570
2571[[package]]
2572name = "renderdoc-sys"
2573version = "1.1.0"
2574source = "registry+https://github.com/rust-lang/crates.io-index"
2575checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
2576
2577[[package]]
2578name = "rustc-hash"
2579version = "1.1.0"
2580source = "registry+https://github.com/rust-lang/crates.io-index"
2581checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
2582
2583[[package]]
2584name = "rustc-hash"
2585version = "2.1.2"
2586source = "registry+https://github.com/rust-lang/crates.io-index"
2587checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
2588
2589[[package]]
2590name = "rustc_version"
2591version = "0.4.1"
2592source = "registry+https://github.com/rust-lang/crates.io-index"
2593checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
2594dependencies = [
2595 "semver",
2596]
2597
2598[[package]]
2599name = "rustix"
2600version = "0.38.44"
2601source = "registry+https://github.com/rust-lang/crates.io-index"
2602checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
2603dependencies = [
2604 "bitflags 2.11.1",
2605 "errno",
2606 "libc",
2607 "linux-raw-sys 0.4.15",
2608 "windows-sys 0.59.0",
2609]
2610
2611[[package]]
2612name = "rustix"
2613version = "1.1.4"
2614source = "registry+https://github.com/rust-lang/crates.io-index"
2615checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
2616dependencies = [
2617 "bitflags 2.11.1",
2618 "errno",
2619 "libc",
2620 "linux-raw-sys 0.12.1",
2621 "windows-sys 0.61.2",
2622]
2623
2624[[package]]
2625name = "rustversion"
2626version = "1.0.22"
2627source = "registry+https://github.com/rust-lang/crates.io-index"
2628checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
2629
2630[[package]]
2631name = "same-file"
2632version = "1.0.6"
2633source = "registry+https://github.com/rust-lang/crates.io-index"
2634checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
2635dependencies = [
2636 "winapi-util",
2637]
2638
2639[[package]]
2640name = "scoped-tls"
2641version = "1.0.1"
2642source = "registry+https://github.com/rust-lang/crates.io-index"
2643checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
2644
2645[[package]]
2646name = "scopeguard"
2647version = "1.2.0"
2648source = "registry+https://github.com/rust-lang/crates.io-index"
2649checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
2650
2651[[package]]
2652name = "sctk-adwaita"
2653version = "0.10.1"
2654source = "registry+https://github.com/rust-lang/crates.io-index"
2655checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec"
2656dependencies = [
2657 "ab_glyph",
2658 "log",
2659 "memmap2",
2660 "smithay-client-toolkit 0.19.2",
2661 "tiny-skia",
2662]
2663
2664[[package]]
2665name = "self_cell"
2666version = "1.2.2"
2667source = "registry+https://github.com/rust-lang/crates.io-index"
2668checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89"
2669
2670[[package]]
2671name = "semver"
2672version = "1.0.28"
2673source = "registry+https://github.com/rust-lang/crates.io-index"
2674checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
2675
2676[[package]]
2677name = "serde"
2678version = "1.0.228"
2679source = "registry+https://github.com/rust-lang/crates.io-index"
2680checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
2681dependencies = [
2682 "serde_core",
2683 "serde_derive",
2684]
2685
2686[[package]]
2687name = "serde_core"
2688version = "1.0.228"
2689source = "registry+https://github.com/rust-lang/crates.io-index"
2690checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
2691dependencies = [
2692 "serde_derive",
2693]
2694
2695[[package]]
2696name = "serde_derive"
2697version = "1.0.228"
2698source = "registry+https://github.com/rust-lang/crates.io-index"
2699checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
2700dependencies = [
2701 "proc-macro2",
2702 "quote",
2703 "syn",
2704]
2705
2706[[package]]
2707name = "serde_json"
2708version = "1.0.150"
2709source = "registry+https://github.com/rust-lang/crates.io-index"
2710checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
2711dependencies = [
2712 "itoa",
2713 "memchr",
2714 "serde",
2715 "serde_core",
2716 "zmij",
2717]
2718
2719[[package]]
2720name = "serde_repr"
2721version = "0.1.20"
2722source = "registry+https://github.com/rust-lang/crates.io-index"
2723checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
2724dependencies = [
2725 "proc-macro2",
2726 "quote",
2727 "syn",
2728]
2729
2730[[package]]
2731name = "shlex"
2732version = "1.3.0"
2733source = "registry+https://github.com/rust-lang/crates.io-index"
2734checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
2735
2736[[package]]
2737name = "signal-hook-registry"
2738version = "1.4.8"
2739source = "registry+https://github.com/rust-lang/crates.io-index"
2740checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
2741dependencies = [
2742 "errno",
2743 "libc",
2744]
2745
2746[[package]]
2747name = "simd-adler32"
2748version = "0.3.9"
2749source = "registry+https://github.com/rust-lang/crates.io-index"
2750checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214"
2751
2752[[package]]
2753name = "simd_cesu8"
2754version = "1.1.1"
2755source = "registry+https://github.com/rust-lang/crates.io-index"
2756checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33"
2757dependencies = [
2758 "rustc_version",
2759 "simdutf8",
2760]
2761
2762[[package]]
2763name = "simdutf8"
2764version = "0.1.5"
2765source = "registry+https://github.com/rust-lang/crates.io-index"
2766checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
2767
2768[[package]]
2769name = "siphasher"
2770version = "1.0.3"
2771source = "registry+https://github.com/rust-lang/crates.io-index"
2772checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
2773
2774[[package]]
2775name = "skrifa"
2776version = "0.40.0"
2777source = "registry+https://github.com/rust-lang/crates.io-index"
2778checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac"
2779dependencies = [
2780 "bytemuck",
2781 "read-fonts",
2782]
2783
2784[[package]]
2785name = "slab"
2786version = "0.4.12"
2787source = "registry+https://github.com/rust-lang/crates.io-index"
2788checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
2789
2790[[package]]
2791name = "slotmap"
2792version = "1.1.1"
2793source = "registry+https://github.com/rust-lang/crates.io-index"
2794checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038"
2795dependencies = [
2796 "version_check",
2797]
2798
2799[[package]]
2800name = "smallvec"
2801version = "1.15.1"
2802source = "registry+https://github.com/rust-lang/crates.io-index"
2803checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
2804
2805[[package]]
2806name = "smithay-client-toolkit"
2807version = "0.19.2"
2808source = "registry+https://github.com/rust-lang/crates.io-index"
2809checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
2810dependencies = [
2811 "bitflags 2.11.1",
2812 "calloop 0.13.0",
2813 "calloop-wayland-source 0.3.0",
2814 "cursor-icon",
2815 "libc",
2816 "log",
2817 "memmap2",
2818 "rustix 0.38.44",
2819 "thiserror 1.0.69",
2820 "wayland-backend",
2821 "wayland-client",
2822 "wayland-csd-frame",
2823 "wayland-cursor",
2824 "wayland-protocols",
2825 "wayland-protocols-wlr",
2826 "wayland-scanner",
2827 "xkeysym",
2828]
2829
2830[[package]]
2831name = "smithay-client-toolkit"
2832version = "0.20.0"
2833source = "registry+https://github.com/rust-lang/crates.io-index"
2834checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0"
2835dependencies = [
2836 "bitflags 2.11.1",
2837 "calloop 0.14.4",
2838 "calloop-wayland-source 0.4.1",
2839 "cursor-icon",
2840 "libc",
2841 "log",
2842 "memmap2",
2843 "rustix 1.1.4",
2844 "thiserror 2.0.18",
2845 "wayland-backend",
2846 "wayland-client",
2847 "wayland-csd-frame",
2848 "wayland-cursor",
2849 "wayland-protocols",
2850 "wayland-protocols-experimental",
2851 "wayland-protocols-misc",
2852 "wayland-protocols-wlr",
2853 "wayland-scanner",
2854 "xkeysym",
2855]
2856
2857[[package]]
2858name = "smithay-clipboard"
2859version = "0.7.3"
2860source = "registry+https://github.com/rust-lang/crates.io-index"
2861checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226"
2862dependencies = [
2863 "libc",
2864 "smithay-client-toolkit 0.20.0",
2865 "wayland-backend",
2866]
2867
2868[[package]]
2869name = "smol_str"
2870version = "0.2.2"
2871source = "registry+https://github.com/rust-lang/crates.io-index"
2872checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead"
2873dependencies = [
2874 "serde",
2875]
2876
2877[[package]]
2878name = "spirv"
2879version = "0.4.0+sdk-1.4.341.0"
2880source = "registry+https://github.com/rust-lang/crates.io-index"
2881checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f"
2882dependencies = [
2883 "bitflags 2.11.1",
2884]
2885
2886[[package]]
2887name = "stable_deref_trait"
2888version = "1.2.1"
2889source = "registry+https://github.com/rust-lang/crates.io-index"
2890checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
2891
2892[[package]]
2893name = "static_assertions"
2894version = "1.1.0"
2895source = "registry+https://github.com/rust-lang/crates.io-index"
2896checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
2897
2898[[package]]
2899name = "strict-num"
2900version = "0.1.1"
2901source = "registry+https://github.com/rust-lang/crates.io-index"
2902checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
2903
2904[[package]]
2905name = "syn"
2906version = "2.0.117"
2907source = "registry+https://github.com/rust-lang/crates.io-index"
2908checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
2909dependencies = [
2910 "proc-macro2",
2911 "quote",
2912 "unicode-ident",
2913]
2914
2915[[package]]
2916name = "synstructure"
2917version = "0.13.2"
2918source = "registry+https://github.com/rust-lang/crates.io-index"
2919checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
2920dependencies = [
2921 "proc-macro2",
2922 "quote",
2923 "syn",
2924]
2925
2926[[package]]
2927name = "tempfile"
2928version = "3.27.0"
2929source = "registry+https://github.com/rust-lang/crates.io-index"
2930checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
2931dependencies = [
2932 "fastrand",
2933 "getrandom 0.4.2",
2934 "once_cell",
2935 "rustix 1.1.4",
2936 "windows-sys 0.61.2",
2937]
2938
2939[[package]]
2940name = "termcolor"
2941version = "1.4.1"
2942source = "registry+https://github.com/rust-lang/crates.io-index"
2943checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
2944dependencies = [
2945 "winapi-util",
2946]
2947
2948[[package]]
2949name = "thiserror"
2950version = "1.0.69"
2951source = "registry+https://github.com/rust-lang/crates.io-index"
2952checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
2953dependencies = [
2954 "thiserror-impl 1.0.69",
2955]
2956
2957[[package]]
2958name = "thiserror"
2959version = "2.0.18"
2960source = "registry+https://github.com/rust-lang/crates.io-index"
2961checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
2962dependencies = [
2963 "thiserror-impl 2.0.18",
2964]
2965
2966[[package]]
2967name = "thiserror-impl"
2968version = "1.0.69"
2969source = "registry+https://github.com/rust-lang/crates.io-index"
2970checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
2971dependencies = [
2972 "proc-macro2",
2973 "quote",
2974 "syn",
2975]
2976
2977[[package]]
2978name = "thiserror-impl"
2979version = "2.0.18"
2980source = "registry+https://github.com/rust-lang/crates.io-index"
2981checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
2982dependencies = [
2983 "proc-macro2",
2984 "quote",
2985 "syn",
2986]
2987
2988[[package]]
2989name = "tiff"
2990version = "0.11.3"
2991source = "registry+https://github.com/rust-lang/crates.io-index"
2992checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52"
2993dependencies = [
2994 "fax",
2995 "flate2",
2996 "half",
2997 "quick-error",
2998 "weezl",
2999 "zune-jpeg",
3000]
3001
3002[[package]]
3003name = "tiny-skia"
3004version = "0.11.4"
3005source = "registry+https://github.com/rust-lang/crates.io-index"
3006checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab"
3007dependencies = [
3008 "arrayref",
3009 "arrayvec",
3010 "bytemuck",
3011 "cfg-if",
3012 "log",
3013 "tiny-skia-path",
3014]
3015
3016[[package]]
3017name = "tiny-skia-path"
3018version = "0.11.4"
3019source = "registry+https://github.com/rust-lang/crates.io-index"
3020checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93"
3021dependencies = [
3022 "arrayref",
3023 "bytemuck",
3024 "strict-num",
3025]
3026
3027[[package]]
3028name = "tinystr"
3029version = "0.8.3"
3030source = "registry+https://github.com/rust-lang/crates.io-index"
3031checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
3032dependencies = [
3033 "displaydoc",
3034 "zerovec",
3035]
3036
3037[[package]]
3038name = "toml_datetime"
3039version = "1.1.1+spec-1.1.0"
3040source = "registry+https://github.com/rust-lang/crates.io-index"
3041checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
3042dependencies = [
3043 "serde_core",
3044]
3045
3046[[package]]
3047name = "toml_edit"
3048version = "0.25.11+spec-1.1.0"
3049source = "registry+https://github.com/rust-lang/crates.io-index"
3050checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b"
3051dependencies = [
3052 "indexmap",
3053 "toml_datetime",
3054 "toml_parser",
3055 "winnow",
3056]
3057
3058[[package]]
3059name = "toml_parser"
3060version = "1.1.2+spec-1.1.0"
3061source = "registry+https://github.com/rust-lang/crates.io-index"
3062checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
3063dependencies = [
3064 "winnow",
3065]
3066
3067[[package]]
3068name = "tracing"
3069version = "0.1.44"
3070source = "registry+https://github.com/rust-lang/crates.io-index"
3071checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
3072dependencies = [
3073 "log",
3074 "pin-project-lite",
3075 "tracing-attributes",
3076 "tracing-core",
3077]
3078
3079[[package]]
3080name = "tracing-attributes"
3081version = "0.1.31"
3082source = "registry+https://github.com/rust-lang/crates.io-index"
3083checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
3084dependencies = [
3085 "proc-macro2",
3086 "quote",
3087 "syn",
3088]
3089
3090[[package]]
3091name = "tracing-core"
3092version = "0.1.36"
3093source = "registry+https://github.com/rust-lang/crates.io-index"
3094checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
3095dependencies = [
3096 "once_cell",
3097]
3098
3099[[package]]
3100name = "ttf-parser"
3101version = "0.25.1"
3102source = "registry+https://github.com/rust-lang/crates.io-index"
3103checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
3104
3105[[package]]
3106name = "type-map"
3107version = "0.5.1"
3108source = "registry+https://github.com/rust-lang/crates.io-index"
3109checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"
3110dependencies = [
3111 "rustc-hash 2.1.2",
3112]
3113
3114[[package]]
3115name = "uds_windows"
3116version = "1.2.1"
3117source = "registry+https://github.com/rust-lang/crates.io-index"
3118checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e"
3119dependencies = [
3120 "memoffset",
3121 "tempfile",
3122 "windows-sys 0.61.2",
3123]
3124
3125[[package]]
3126name = "unicode-ident"
3127version = "1.0.24"
3128source = "registry+https://github.com/rust-lang/crates.io-index"
3129checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
3130
3131[[package]]
3132name = "unicode-segmentation"
3133version = "1.13.2"
3134source = "registry+https://github.com/rust-lang/crates.io-index"
3135checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
3136
3137[[package]]
3138name = "unicode-width"
3139version = "0.2.2"
3140source = "registry+https://github.com/rust-lang/crates.io-index"
3141checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
3142
3143[[package]]
3144name = "unicode-xid"
3145version = "0.2.6"
3146source = "registry+https://github.com/rust-lang/crates.io-index"
3147checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
3148
3149[[package]]
3150name = "url"
3151version = "2.5.8"
3152source = "registry+https://github.com/rust-lang/crates.io-index"
3153checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
3154dependencies = [
3155 "form_urlencoded",
3156 "idna",
3157 "percent-encoding",
3158 "serde",
3159]
3160
3161[[package]]
3162name = "utf8_iter"
3163version = "1.0.4"
3164source = "registry+https://github.com/rust-lang/crates.io-index"
3165checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
3166
3167[[package]]
3168name = "uuid"
3169version = "1.23.1"
3170source = "registry+https://github.com/rust-lang/crates.io-index"
3171checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76"
3172dependencies = [
3173 "js-sys",
3174 "serde_core",
3175 "wasm-bindgen",
3176]
3177
3178[[package]]
3179name = "vello_common"
3180version = "0.0.6"
3181source = "registry+https://github.com/rust-lang/crates.io-index"
3182checksum = "1bd1a4c633ce09e7d713df1a6e036644a125e15e0c169cfb5180ddf5836ca04b"
3183dependencies = [
3184 "bytemuck",
3185 "fearless_simd",
3186 "hashbrown 0.16.1",
3187 "log",
3188 "peniko",
3189 "skrifa",
3190 "smallvec",
3191]
3192
3193[[package]]
3194name = "vello_cpu"
3195version = "0.0.6"
3196source = "registry+https://github.com/rust-lang/crates.io-index"
3197checksum = "0162bfe48aabf6a9fdcd401b628c7d9f260c2cbabb343c70a65feba6f7849edc"
3198dependencies = [
3199 "bytemuck",
3200 "hashbrown 0.16.1",
3201 "vello_common",
3202]
3203
3204[[package]]
3205name = "version_check"
3206version = "0.9.5"
3207source = "registry+https://github.com/rust-lang/crates.io-index"
3208checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
3209
3210[[package]]
3211name = "walkdir"
3212version = "2.5.0"
3213source = "registry+https://github.com/rust-lang/crates.io-index"
3214checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
3215dependencies = [
3216 "same-file",
3217 "winapi-util",
3218]
3219
3220[[package]]
3221name = "wasip2"
3222version = "1.0.3+wasi-0.2.9"
3223source = "registry+https://github.com/rust-lang/crates.io-index"
3224checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
3225dependencies = [
3226 "wit-bindgen 0.57.1",
3227]
3228
3229[[package]]
3230name = "wasip3"
3231version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
3232source = "registry+https://github.com/rust-lang/crates.io-index"
3233checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
3234dependencies = [
3235 "wit-bindgen 0.51.0",
3236]
3237
3238[[package]]
3239name = "wasm-bindgen"
3240version = "0.2.122"
3241source = "registry+https://github.com/rust-lang/crates.io-index"
3242checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
3243dependencies = [
3244 "cfg-if",
3245 "once_cell",
3246 "rustversion",
3247 "wasm-bindgen-macro",
3248 "wasm-bindgen-shared",
3249]
3250
3251[[package]]
3252name = "wasm-bindgen-futures"
3253version = "0.4.72"
3254source = "registry+https://github.com/rust-lang/crates.io-index"
3255checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f"
3256dependencies = [
3257 "js-sys",
3258 "wasm-bindgen",
3259]
3260
3261[[package]]
3262name = "wasm-bindgen-macro"
3263version = "0.2.122"
3264source = "registry+https://github.com/rust-lang/crates.io-index"
3265checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
3266dependencies = [
3267 "quote",
3268 "wasm-bindgen-macro-support",
3269]
3270
3271[[package]]
3272name = "wasm-bindgen-macro-support"
3273version = "0.2.122"
3274source = "registry+https://github.com/rust-lang/crates.io-index"
3275checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
3276dependencies = [
3277 "bumpalo",
3278 "proc-macro2",
3279 "quote",
3280 "syn",
3281 "wasm-bindgen-shared",
3282]
3283
3284[[package]]
3285name = "wasm-bindgen-shared"
3286version = "0.2.122"
3287source = "registry+https://github.com/rust-lang/crates.io-index"
3288checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
3289dependencies = [
3290 "unicode-ident",
3291]
3292
3293[[package]]
3294name = "wasm-encoder"
3295version = "0.244.0"
3296source = "registry+https://github.com/rust-lang/crates.io-index"
3297checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
3298dependencies = [
3299 "leb128fmt",
3300 "wasmparser",
3301]
3302
3303[[package]]
3304name = "wasm-metadata"
3305version = "0.244.0"
3306source = "registry+https://github.com/rust-lang/crates.io-index"
3307checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
3308dependencies = [
3309 "anyhow",
3310 "indexmap",
3311 "wasm-encoder",
3312 "wasmparser",
3313]
3314
3315[[package]]
3316name = "wasmparser"
3317version = "0.244.0"
3318source = "registry+https://github.com/rust-lang/crates.io-index"
3319checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
3320dependencies = [
3321 "bitflags 2.11.1",
3322 "hashbrown 0.15.5",
3323 "indexmap",
3324 "semver",
3325]
3326
3327[[package]]
3328name = "wayland-backend"
3329version = "0.3.15"
3330source = "registry+https://github.com/rust-lang/crates.io-index"
3331checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d"
3332dependencies = [
3333 "cc",
3334 "downcast-rs",
3335 "rustix 1.1.4",
3336 "scoped-tls",
3337 "smallvec",
3338 "wayland-sys",
3339]
3340
3341[[package]]
3342name = "wayland-client"
3343version = "0.31.14"
3344source = "registry+https://github.com/rust-lang/crates.io-index"
3345checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144"
3346dependencies = [
3347 "bitflags 2.11.1",
3348 "rustix 1.1.4",
3349 "wayland-backend",
3350 "wayland-scanner",
3351]
3352
3353[[package]]
3354name = "wayland-csd-frame"
3355version = "0.3.0"
3356source = "registry+https://github.com/rust-lang/crates.io-index"
3357checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
3358dependencies = [
3359 "bitflags 2.11.1",
3360 "cursor-icon",
3361 "wayland-backend",
3362]
3363
3364[[package]]
3365name = "wayland-cursor"
3366version = "0.31.14"
3367source = "registry+https://github.com/rust-lang/crates.io-index"
3368checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d"
3369dependencies = [
3370 "rustix 1.1.4",
3371 "wayland-client",
3372 "xcursor",
3373]
3374
3375[[package]]
3376name = "wayland-protocols"
3377version = "0.32.12"
3378source = "registry+https://github.com/rust-lang/crates.io-index"
3379checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f"
3380dependencies = [
3381 "bitflags 2.11.1",
3382 "wayland-backend",
3383 "wayland-client",
3384 "wayland-scanner",
3385]
3386
3387[[package]]
3388name = "wayland-protocols-experimental"
3389version = "20250721.0.1"
3390source = "registry+https://github.com/rust-lang/crates.io-index"
3391checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1"
3392dependencies = [
3393 "bitflags 2.11.1",
3394 "wayland-backend",
3395 "wayland-client",
3396 "wayland-protocols",
3397 "wayland-scanner",
3398]
3399
3400[[package]]
3401name = "wayland-protocols-misc"
3402version = "0.3.12"
3403source = "registry+https://github.com/rust-lang/crates.io-index"
3404checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8"
3405dependencies = [
3406 "bitflags 2.11.1",
3407 "wayland-backend",
3408 "wayland-client",
3409 "wayland-protocols",
3410 "wayland-scanner",
3411]
3412
3413[[package]]
3414name = "wayland-protocols-plasma"
3415version = "0.3.12"
3416source = "registry+https://github.com/rust-lang/crates.io-index"
3417checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91"
3418dependencies = [
3419 "bitflags 2.11.1",
3420 "wayland-backend",
3421 "wayland-client",
3422 "wayland-protocols",
3423 "wayland-scanner",
3424]
3425
3426[[package]]
3427name = "wayland-protocols-wlr"
3428version = "0.3.12"
3429source = "registry+https://github.com/rust-lang/crates.io-index"
3430checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234"
3431dependencies = [
3432 "bitflags 2.11.1",
3433 "wayland-backend",
3434 "wayland-client",
3435 "wayland-protocols",
3436 "wayland-scanner",
3437]
3438
3439[[package]]
3440name = "wayland-scanner"
3441version = "0.31.10"
3442source = "registry+https://github.com/rust-lang/crates.io-index"
3443checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a"
3444dependencies = [
3445 "proc-macro2",
3446 "quick-xml",
3447 "quote",
3448]
3449
3450[[package]]
3451name = "wayland-sys"
3452version = "0.31.11"
3453source = "registry+https://github.com/rust-lang/crates.io-index"
3454checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be"
3455dependencies = [
3456 "dlib",
3457 "log",
3458 "once_cell",
3459 "pkg-config",
3460]
3461
3462[[package]]
3463name = "web-sys"
3464version = "0.3.99"
3465source = "registry+https://github.com/rust-lang/crates.io-index"
3466checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436"
3467dependencies = [
3468 "js-sys",
3469 "wasm-bindgen",
3470]
3471
3472[[package]]
3473name = "web-time"
3474version = "1.1.0"
3475source = "registry+https://github.com/rust-lang/crates.io-index"
3476checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
3477dependencies = [
3478 "js-sys",
3479 "wasm-bindgen",
3480]
3481
3482[[package]]
3483name = "webbrowser"
3484version = "1.2.1"
3485source = "registry+https://github.com/rust-lang/crates.io-index"
3486checksum = "0fc95580916af1e68ff6a7be07446fc5db73ebf71cf092de939bbf5f7e189f72"
3487dependencies = [
3488 "core-foundation 0.10.1",
3489 "jni",
3490 "log",
3491 "ndk-context",
3492 "objc2 0.6.4",
3493 "objc2-foundation 0.3.2",
3494 "url",
3495 "web-sys",
3496]
3497
3498[[package]]
3499name = "weezl"
3500version = "0.1.12"
3501source = "registry+https://github.com/rust-lang/crates.io-index"
3502checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
3503
3504[[package]]
3505name = "wgpu"
3506version = "29.0.3"
3507source = "registry+https://github.com/rust-lang/crates.io-index"
3508checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250"
3509dependencies = [
3510 "arrayvec",
3511 "bitflags 2.11.1",
3512 "bytemuck",
3513 "cfg-if",
3514 "cfg_aliases",
3515 "document-features",
3516 "hashbrown 0.16.1",
3517 "js-sys",
3518 "log",
3519 "naga",
3520 "parking_lot",
3521 "portable-atomic",
3522 "profiling",
3523 "raw-window-handle",
3524 "smallvec",
3525 "static_assertions",
3526 "wasm-bindgen",
3527 "wasm-bindgen-futures",
3528 "web-sys",
3529 "wgpu-core",
3530 "wgpu-hal",
3531 "wgpu-types",
3532]
3533
3534[[package]]
3535name = "wgpu-core"
3536version = "29.0.3"
3537source = "registry+https://github.com/rust-lang/crates.io-index"
3538checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7"
3539dependencies = [
3540 "arrayvec",
3541 "bit-set",
3542 "bit-vec",
3543 "bitflags 2.11.1",
3544 "bytemuck",
3545 "cfg_aliases",
3546 "document-features",
3547 "hashbrown 0.16.1",
3548 "indexmap",
3549 "log",
3550 "naga",
3551 "once_cell",
3552 "parking_lot",
3553 "portable-atomic",
3554 "profiling",
3555 "raw-window-handle",
3556 "rustc-hash 1.1.0",
3557 "smallvec",
3558 "thiserror 2.0.18",
3559 "wgpu-core-deps-apple",
3560 "wgpu-core-deps-emscripten",
3561 "wgpu-core-deps-wasm",
3562 "wgpu-core-deps-windows-linux-android",
3563 "wgpu-hal",
3564 "wgpu-naga-bridge",
3565 "wgpu-types",
3566]
3567
3568[[package]]
3569name = "wgpu-core-deps-apple"
3570version = "29.0.3"
3571source = "registry+https://github.com/rust-lang/crates.io-index"
3572checksum = "62e51b5447e144b3dbba4feb01f80f4fa21696fa0cd99afb2c3df1affd6fdb28"
3573dependencies = [
3574 "wgpu-hal",
3575]
3576
3577[[package]]
3578name = "wgpu-core-deps-emscripten"
3579version = "29.0.3"
3580source = "registry+https://github.com/rust-lang/crates.io-index"
3581checksum = "3487cd6293a963bc5c0c0396f6a2192043c50003c07f4efdccbad3d90ec9d819"
3582dependencies = [
3583 "wgpu-hal",
3584]
3585
3586[[package]]
3587name = "wgpu-core-deps-wasm"
3588version = "29.0.3"
3589source = "registry+https://github.com/rust-lang/crates.io-index"
3590checksum = "0c2f2fb042f36920771deb0b966543c5751b18f3d327760ffc90f74e20b2dcd4"
3591dependencies = [
3592 "wgpu-hal",
3593]
3594
3595[[package]]
3596name = "wgpu-core-deps-windows-linux-android"
3597version = "29.0.3"
3598source = "registry+https://github.com/rust-lang/crates.io-index"
3599checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916"
3600dependencies = [
3601 "wgpu-hal",
3602]
3603
3604[[package]]
3605name = "wgpu-hal"
3606version = "29.0.3"
3607source = "registry+https://github.com/rust-lang/crates.io-index"
3608checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f"
3609dependencies = [
3610 "android_system_properties",
3611 "arrayvec",
3612 "ash",
3613 "bit-set",
3614 "bitflags 2.11.1",
3615 "block2 0.6.2",
3616 "bytemuck",
3617 "cfg-if",
3618 "cfg_aliases",
3619 "glow",
3620 "glutin_wgl_sys",
3621 "gpu-allocator",
3622 "gpu-descriptor",
3623 "hashbrown 0.16.1",
3624 "js-sys",
3625 "khronos-egl",
3626 "libc",
3627 "libloading",
3628 "log",
3629 "naga",
3630 "ndk-sys",
3631 "objc2 0.6.4",
3632 "objc2-core-foundation",
3633 "objc2-foundation 0.3.2",
3634 "objc2-metal 0.3.2",
3635 "objc2-quartz-core 0.3.2",
3636 "once_cell",
3637 "ordered-float",
3638 "parking_lot",
3639 "portable-atomic",
3640 "portable-atomic-util",
3641 "profiling",
3642 "range-alloc",
3643 "raw-window-handle",
3644 "raw-window-metal",
3645 "renderdoc-sys",
3646 "smallvec",
3647 "thiserror 2.0.18",
3648 "wasm-bindgen",
3649 "wayland-sys",
3650 "web-sys",
3651 "wgpu-naga-bridge",
3652 "wgpu-types",
3653 "windows",
3654 "windows-core",
3655 "windows-result",
3656]
3657
3658[[package]]
3659name = "wgpu-naga-bridge"
3660version = "29.0.3"
3661source = "registry+https://github.com/rust-lang/crates.io-index"
3662checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02"
3663dependencies = [
3664 "naga",
3665 "wgpu-types",
3666]
3667
3668[[package]]
3669name = "wgpu-types"
3670version = "29.0.3"
3671source = "registry+https://github.com/rust-lang/crates.io-index"
3672checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639"
3673dependencies = [
3674 "bitflags 2.11.1",
3675 "bytemuck",
3676 "js-sys",
3677 "log",
3678 "raw-window-handle",
3679 "web-sys",
3680]
3681
3682[[package]]
3683name = "winapi-util"
3684version = "0.1.11"
3685source = "registry+https://github.com/rust-lang/crates.io-index"
3686checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
3687dependencies = [
3688 "windows-sys 0.61.2",
3689]
3690
3691[[package]]
3692name = "windows"
3693version = "0.62.2"
3694source = "registry+https://github.com/rust-lang/crates.io-index"
3695checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
3696dependencies = [
3697 "windows-collections",
3698 "windows-core",
3699 "windows-future",
3700 "windows-numerics",
3701]
3702
3703[[package]]
3704name = "windows-collections"
3705version = "0.3.2"
3706source = "registry+https://github.com/rust-lang/crates.io-index"
3707checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
3708dependencies = [
3709 "windows-core",
3710]
3711
3712[[package]]
3713name = "windows-core"
3714version = "0.62.2"
3715source = "registry+https://github.com/rust-lang/crates.io-index"
3716checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
3717dependencies = [
3718 "windows-implement",
3719 "windows-interface",
3720 "windows-link",
3721 "windows-result",
3722 "windows-strings",
3723]
3724
3725[[package]]
3726name = "windows-future"
3727version = "0.3.2"
3728source = "registry+https://github.com/rust-lang/crates.io-index"
3729checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
3730dependencies = [
3731 "windows-core",
3732 "windows-link",
3733 "windows-threading",
3734]
3735
3736[[package]]
3737name = "windows-implement"
3738version = "0.60.2"
3739source = "registry+https://github.com/rust-lang/crates.io-index"
3740checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
3741dependencies = [
3742 "proc-macro2",
3743 "quote",
3744 "syn",
3745]
3746
3747[[package]]
3748name = "windows-interface"
3749version = "0.59.3"
3750source = "registry+https://github.com/rust-lang/crates.io-index"
3751checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
3752dependencies = [
3753 "proc-macro2",
3754 "quote",
3755 "syn",
3756]
3757
3758[[package]]
3759name = "windows-link"
3760version = "0.2.1"
3761source = "registry+https://github.com/rust-lang/crates.io-index"
3762checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
3763
3764[[package]]
3765name = "windows-numerics"
3766version = "0.3.1"
3767source = "registry+https://github.com/rust-lang/crates.io-index"
3768checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
3769dependencies = [
3770 "windows-core",
3771 "windows-link",
3772]
3773
3774[[package]]
3775name = "windows-result"
3776version = "0.4.1"
3777source = "registry+https://github.com/rust-lang/crates.io-index"
3778checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
3779dependencies = [
3780 "windows-link",
3781]
3782
3783[[package]]
3784name = "windows-strings"
3785version = "0.5.1"
3786source = "registry+https://github.com/rust-lang/crates.io-index"
3787checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
3788dependencies = [
3789 "windows-link",
3790]
3791
3792[[package]]
3793name = "windows-sys"
3794version = "0.52.0"
3795source = "registry+https://github.com/rust-lang/crates.io-index"
3796checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
3797dependencies = [
3798 "windows-targets 0.52.6",
3799]
3800
3801[[package]]
3802name = "windows-sys"
3803version = "0.59.0"
3804source = "registry+https://github.com/rust-lang/crates.io-index"
3805checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
3806dependencies = [
3807 "windows-targets 0.52.6",
3808]
3809
3810[[package]]
3811name = "windows-sys"
3812version = "0.60.2"
3813source = "registry+https://github.com/rust-lang/crates.io-index"
3814checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
3815dependencies = [
3816 "windows-targets 0.53.5",
3817]
3818
3819[[package]]
3820name = "windows-sys"
3821version = "0.61.2"
3822source = "registry+https://github.com/rust-lang/crates.io-index"
3823checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
3824dependencies = [
3825 "windows-link",
3826]
3827
3828[[package]]
3829name = "windows-targets"
3830version = "0.52.6"
3831source = "registry+https://github.com/rust-lang/crates.io-index"
3832checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
3833dependencies = [
3834 "windows_aarch64_gnullvm 0.52.6",
3835 "windows_aarch64_msvc 0.52.6",
3836 "windows_i686_gnu 0.52.6",
3837 "windows_i686_gnullvm 0.52.6",
3838 "windows_i686_msvc 0.52.6",
3839 "windows_x86_64_gnu 0.52.6",
3840 "windows_x86_64_gnullvm 0.52.6",
3841 "windows_x86_64_msvc 0.52.6",
3842]
3843
3844[[package]]
3845name = "windows-targets"
3846version = "0.53.5"
3847source = "registry+https://github.com/rust-lang/crates.io-index"
3848checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
3849dependencies = [
3850 "windows-link",
3851 "windows_aarch64_gnullvm 0.53.1",
3852 "windows_aarch64_msvc 0.53.1",
3853 "windows_i686_gnu 0.53.1",
3854 "windows_i686_gnullvm 0.53.1",
3855 "windows_i686_msvc 0.53.1",
3856 "windows_x86_64_gnu 0.53.1",
3857 "windows_x86_64_gnullvm 0.53.1",
3858 "windows_x86_64_msvc 0.53.1",
3859]
3860
3861[[package]]
3862name = "windows-threading"
3863version = "0.2.1"
3864source = "registry+https://github.com/rust-lang/crates.io-index"
3865checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
3866dependencies = [
3867 "windows-link",
3868]
3869
3870[[package]]
3871name = "windows_aarch64_gnullvm"
3872version = "0.52.6"
3873source = "registry+https://github.com/rust-lang/crates.io-index"
3874checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
3875
3876[[package]]
3877name = "windows_aarch64_gnullvm"
3878version = "0.53.1"
3879source = "registry+https://github.com/rust-lang/crates.io-index"
3880checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
3881
3882[[package]]
3883name = "windows_aarch64_msvc"
3884version = "0.52.6"
3885source = "registry+https://github.com/rust-lang/crates.io-index"
3886checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
3887
3888[[package]]
3889name = "windows_aarch64_msvc"
3890version = "0.53.1"
3891source = "registry+https://github.com/rust-lang/crates.io-index"
3892checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
3893
3894[[package]]
3895name = "windows_i686_gnu"
3896version = "0.52.6"
3897source = "registry+https://github.com/rust-lang/crates.io-index"
3898checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
3899
3900[[package]]
3901name = "windows_i686_gnu"
3902version = "0.53.1"
3903source = "registry+https://github.com/rust-lang/crates.io-index"
3904checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
3905
3906[[package]]
3907name = "windows_i686_gnullvm"
3908version = "0.52.6"
3909source = "registry+https://github.com/rust-lang/crates.io-index"
3910checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
3911
3912[[package]]
3913name = "windows_i686_gnullvm"
3914version = "0.53.1"
3915source = "registry+https://github.com/rust-lang/crates.io-index"
3916checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
3917
3918[[package]]
3919name = "windows_i686_msvc"
3920version = "0.52.6"
3921source = "registry+https://github.com/rust-lang/crates.io-index"
3922checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
3923
3924[[package]]
3925name = "windows_i686_msvc"
3926version = "0.53.1"
3927source = "registry+https://github.com/rust-lang/crates.io-index"
3928checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
3929
3930[[package]]
3931name = "windows_x86_64_gnu"
3932version = "0.52.6"
3933source = "registry+https://github.com/rust-lang/crates.io-index"
3934checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
3935
3936[[package]]
3937name = "windows_x86_64_gnu"
3938version = "0.53.1"
3939source = "registry+https://github.com/rust-lang/crates.io-index"
3940checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
3941
3942[[package]]
3943name = "windows_x86_64_gnullvm"
3944version = "0.52.6"
3945source = "registry+https://github.com/rust-lang/crates.io-index"
3946checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
3947
3948[[package]]
3949name = "windows_x86_64_gnullvm"
3950version = "0.53.1"
3951source = "registry+https://github.com/rust-lang/crates.io-index"
3952checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
3953
3954[[package]]
3955name = "windows_x86_64_msvc"
3956version = "0.52.6"
3957source = "registry+https://github.com/rust-lang/crates.io-index"
3958checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
3959
3960[[package]]
3961name = "windows_x86_64_msvc"
3962version = "0.53.1"
3963source = "registry+https://github.com/rust-lang/crates.io-index"
3964checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
3965
3966[[package]]
3967name = "winit"
3968version = "0.30.13"
3969source = "registry+https://github.com/rust-lang/crates.io-index"
3970checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d"
3971dependencies = [
3972 "ahash",
3973 "android-activity",
3974 "atomic-waker",
3975 "bitflags 2.11.1",
3976 "block2 0.5.1",
3977 "bytemuck",
3978 "calloop 0.13.0",
3979 "cfg_aliases",
3980 "concurrent-queue",
3981 "core-foundation 0.9.4",
3982 "core-graphics",
3983 "cursor-icon",
3984 "dpi",
3985 "js-sys",
3986 "libc",
3987 "memmap2",
3988 "ndk",
3989 "objc2 0.5.2",
3990 "objc2-app-kit 0.2.2",
3991 "objc2-foundation 0.2.2",
3992 "objc2-ui-kit 0.2.2",
3993 "orbclient",
3994 "percent-encoding",
3995 "pin-project",
3996 "raw-window-handle",
3997 "redox_syscall 0.4.1",
3998 "rustix 0.38.44",
3999 "sctk-adwaita",
4000 "smithay-client-toolkit 0.19.2",
4001 "smol_str",
4002 "tracing",
4003 "unicode-segmentation",
4004 "wasm-bindgen",
4005 "wasm-bindgen-futures",
4006 "wayland-backend",
4007 "wayland-client",
4008 "wayland-protocols",
4009 "wayland-protocols-plasma",
4010 "web-sys",
4011 "web-time",
4012 "windows-sys 0.52.0",
4013 "x11-dl",
4014 "x11rb",
4015 "xkbcommon-dl",
4016]
4017
4018[[package]]
4019name = "winnow"
4020version = "1.0.3"
4021source = "registry+https://github.com/rust-lang/crates.io-index"
4022checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1"
4023dependencies = [
4024 "memchr",
4025]
4026
4027[[package]]
4028name = "wit-bindgen"
4029version = "0.51.0"
4030source = "registry+https://github.com/rust-lang/crates.io-index"
4031checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
4032dependencies = [
4033 "wit-bindgen-rust-macro",
4034]
4035
4036[[package]]
4037name = "wit-bindgen"
4038version = "0.57.1"
4039source = "registry+https://github.com/rust-lang/crates.io-index"
4040checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
4041
4042[[package]]
4043name = "wit-bindgen-core"
4044version = "0.51.0"
4045source = "registry+https://github.com/rust-lang/crates.io-index"
4046checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
4047dependencies = [
4048 "anyhow",
4049 "heck",
4050 "wit-parser",
4051]
4052
4053[[package]]
4054name = "wit-bindgen-rust"
4055version = "0.51.0"
4056source = "registry+https://github.com/rust-lang/crates.io-index"
4057checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
4058dependencies = [
4059 "anyhow",
4060 "heck",
4061 "indexmap",
4062 "prettyplease",
4063 "syn",
4064 "wasm-metadata",
4065 "wit-bindgen-core",
4066 "wit-component",
4067]
4068
4069[[package]]
4070name = "wit-bindgen-rust-macro"
4071version = "0.51.0"
4072source = "registry+https://github.com/rust-lang/crates.io-index"
4073checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
4074dependencies = [
4075 "anyhow",
4076 "prettyplease",
4077 "proc-macro2",
4078 "quote",
4079 "syn",
4080 "wit-bindgen-core",
4081 "wit-bindgen-rust",
4082]
4083
4084[[package]]
4085name = "wit-component"
4086version = "0.244.0"
4087source = "registry+https://github.com/rust-lang/crates.io-index"
4088checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
4089dependencies = [
4090 "anyhow",
4091 "bitflags 2.11.1",
4092 "indexmap",
4093 "log",
4094 "serde",
4095 "serde_derive",
4096 "serde_json",
4097 "wasm-encoder",
4098 "wasm-metadata",
4099 "wasmparser",
4100 "wit-parser",
4101]
4102
4103[[package]]
4104name = "wit-parser"
4105version = "0.244.0"
4106source = "registry+https://github.com/rust-lang/crates.io-index"
4107checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
4108dependencies = [
4109 "anyhow",
4110 "id-arena",
4111 "indexmap",
4112 "log",
4113 "semver",
4114 "serde",
4115 "serde_derive",
4116 "serde_json",
4117 "unicode-xid",
4118 "wasmparser",
4119]
4120
4121[[package]]
4122name = "writeable"
4123version = "0.6.3"
4124source = "registry+https://github.com/rust-lang/crates.io-index"
4125checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
4126
4127[[package]]
4128name = "x11-dl"
4129version = "2.21.0"
4130source = "registry+https://github.com/rust-lang/crates.io-index"
4131checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
4132dependencies = [
4133 "libc",
4134 "once_cell",
4135 "pkg-config",
4136]
4137
4138[[package]]
4139name = "x11rb"
4140version = "0.13.2"
4141source = "registry+https://github.com/rust-lang/crates.io-index"
4142checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414"
4143dependencies = [
4144 "as-raw-xcb-connection",
4145 "gethostname",
4146 "libc",
4147 "libloading",
4148 "once_cell",
4149 "rustix 1.1.4",
4150 "x11rb-protocol",
4151]
4152
4153[[package]]
4154name = "x11rb-protocol"
4155version = "0.13.2"
4156source = "registry+https://github.com/rust-lang/crates.io-index"
4157checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"
4158
4159[[package]]
4160name = "xcursor"
4161version = "0.3.10"
4162source = "registry+https://github.com/rust-lang/crates.io-index"
4163checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b"
4164
4165[[package]]
4166name = "xkbcommon"
4167version = "0.9.0"
4168source = "registry+https://github.com/rust-lang/crates.io-index"
4169checksum = "a7a974f48060a14e95705c01f24ad9c3345022f4d97441b8a36beb7ed5c4a02d"
4170dependencies = [
4171 "libc",
4172 "memmap2",
4173 "xkeysym",
4174]
4175
4176[[package]]
4177name = "xkbcommon-dl"
4178version = "0.4.2"
4179source = "registry+https://github.com/rust-lang/crates.io-index"
4180checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"
4181dependencies = [
4182 "bitflags 2.11.1",
4183 "dlib",
4184 "log",
4185 "once_cell",
4186 "xkeysym",
4187]
4188
4189[[package]]
4190name = "xkbpreview"
4191version = "0.1.0"
4192dependencies = [
4193 "eframe",
4194 "x11rb",
4195 "xkbcommon",
4196]
4197
4198[[package]]
4199name = "xkeysym"
4200version = "0.2.1"
4201source = "registry+https://github.com/rust-lang/crates.io-index"
4202checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
4203
4204[[package]]
4205name = "xml-rs"
4206version = "0.8.28"
4207source = "registry+https://github.com/rust-lang/crates.io-index"
4208checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f"
4209
4210[[package]]
4211name = "yoke"
4212version = "0.8.2"
4213source = "registry+https://github.com/rust-lang/crates.io-index"
4214checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
4215dependencies = [
4216 "stable_deref_trait",
4217 "yoke-derive",
4218 "zerofrom",
4219]
4220
4221[[package]]
4222name = "yoke-derive"
4223version = "0.8.2"
4224source = "registry+https://github.com/rust-lang/crates.io-index"
4225checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
4226dependencies = [
4227 "proc-macro2",
4228 "quote",
4229 "syn",
4230 "synstructure",
4231]
4232
4233[[package]]
4234name = "zbus"
4235version = "5.15.0"
4236source = "registry+https://github.com/rust-lang/crates.io-index"
4237checksum = "c3bcbf15c8708d7fc1be0c993622e0a5cbd5e8b52bfa40afa4c3e0cd8d724ac1"
4238dependencies = [
4239 "async-broadcast",
4240 "async-executor",
4241 "async-io",
4242 "async-lock",
4243 "async-process",
4244 "async-recursion",
4245 "async-task",
4246 "async-trait",
4247 "blocking",
4248 "enumflags2",
4249 "event-listener",
4250 "futures-core",
4251 "futures-lite",
4252 "hex",
4253 "libc",
4254 "ordered-stream",
4255 "rustix 1.1.4",
4256 "serde",
4257 "serde_repr",
4258 "tracing",
4259 "uds_windows",
4260 "uuid",
4261 "windows-sys 0.61.2",
4262 "winnow",
4263 "zbus_macros",
4264 "zbus_names",
4265 "zvariant",
4266]
4267
4268[[package]]
4269name = "zbus-lockstep"
4270version = "0.5.2"
4271source = "registry+https://github.com/rust-lang/crates.io-index"
4272checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863"
4273dependencies = [
4274 "zbus_xml",
4275 "zvariant",
4276]
4277
4278[[package]]
4279name = "zbus-lockstep-macros"
4280version = "0.5.2"
4281source = "registry+https://github.com/rust-lang/crates.io-index"
4282checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0"
4283dependencies = [
4284 "proc-macro2",
4285 "quote",
4286 "syn",
4287 "zbus-lockstep",
4288 "zbus_xml",
4289 "zvariant",
4290]
4291
4292[[package]]
4293name = "zbus_macros"
4294version = "5.15.0"
4295source = "registry+https://github.com/rust-lang/crates.io-index"
4296checksum = "51fa5406ad9175a8c825a931f8cf347116b531b3634fcb0b627c290f1f2516ff"
4297dependencies = [
4298 "proc-macro-crate",
4299 "proc-macro2",
4300 "quote",
4301 "syn",
4302 "zbus_names",
4303 "zvariant",
4304 "zvariant_utils",
4305]
4306
4307[[package]]
4308name = "zbus_names"
4309version = "4.3.2"
4310source = "registry+https://github.com/rust-lang/crates.io-index"
4311checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d"
4312dependencies = [
4313 "serde",
4314 "winnow",
4315 "zvariant",
4316]
4317
4318[[package]]
4319name = "zbus_xml"
4320version = "5.1.1"
4321source = "registry+https://github.com/rust-lang/crates.io-index"
4322checksum = "a8067892e940ed1727dea64690378601603b31d62dfde019a5335fbb7c0e0ed9"
4323dependencies = [
4324 "quick-xml",
4325 "serde",
4326 "zbus_names",
4327 "zvariant",
4328]
4329
4330[[package]]
4331name = "zerocopy"
4332version = "0.8.48"
4333source = "registry+https://github.com/rust-lang/crates.io-index"
4334checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
4335dependencies = [
4336 "zerocopy-derive",
4337]
4338
4339[[package]]
4340name = "zerocopy-derive"
4341version = "0.8.48"
4342source = "registry+https://github.com/rust-lang/crates.io-index"
4343checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
4344dependencies = [
4345 "proc-macro2",
4346 "quote",
4347 "syn",
4348]
4349
4350[[package]]
4351name = "zerofrom"
4352version = "0.1.8"
4353source = "registry+https://github.com/rust-lang/crates.io-index"
4354checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
4355dependencies = [
4356 "zerofrom-derive",
4357]
4358
4359[[package]]
4360name = "zerofrom-derive"
4361version = "0.1.7"
4362source = "registry+https://github.com/rust-lang/crates.io-index"
4363checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
4364dependencies = [
4365 "proc-macro2",
4366 "quote",
4367 "syn",
4368 "synstructure",
4369]
4370
4371[[package]]
4372name = "zerotrie"
4373version = "0.2.4"
4374source = "registry+https://github.com/rust-lang/crates.io-index"
4375checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf"
4376dependencies = [
4377 "displaydoc",
4378 "yoke",
4379 "zerofrom",
4380]
4381
4382[[package]]
4383name = "zerovec"
4384version = "0.11.6"
4385source = "registry+https://github.com/rust-lang/crates.io-index"
4386checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
4387dependencies = [
4388 "yoke",
4389 "zerofrom",
4390 "zerovec-derive",
4391]
4392
4393[[package]]
4394name = "zerovec-derive"
4395version = "0.11.3"
4396source = "registry+https://github.com/rust-lang/crates.io-index"
4397checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
4398dependencies = [
4399 "proc-macro2",
4400 "quote",
4401 "syn",
4402]
4403
4404[[package]]
4405name = "zmij"
4406version = "1.0.21"
4407source = "registry+https://github.com/rust-lang/crates.io-index"
4408checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
4409
4410[[package]]
4411name = "zune-core"
4412version = "0.5.1"
4413source = "registry+https://github.com/rust-lang/crates.io-index"
4414checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9"
4415
4416[[package]]
4417name = "zune-jpeg"
4418version = "0.5.15"
4419source = "registry+https://github.com/rust-lang/crates.io-index"
4420checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296"
4421dependencies = [
4422 "zune-core",
4423]
4424
4425[[package]]
4426name = "zvariant"
4427version = "5.11.0"
4428source = "registry+https://github.com/rust-lang/crates.io-index"
4429checksum = "1c1567a6ec68df868cbbfde844cfc6d81649fe5109a62b116b19fabd53e618ee"
4430dependencies = [
4431 "endi",
4432 "enumflags2",
4433 "serde",
4434 "winnow",
4435 "zvariant_derive",
4436 "zvariant_utils",
4437]
4438
4439[[package]]
4440name = "zvariant_derive"
4441version = "5.11.0"
4442source = "registry+https://github.com/rust-lang/crates.io-index"
4443checksum = "c7d5b780599bbde114e39d9a0799577fad1ced5105d38515745f7b3099d8ceda"
4444dependencies = [
4445 "proc-macro-crate",
4446 "proc-macro2",
4447 "quote",
4448 "syn",
4449 "zvariant_utils",
4450]
4451
4452[[package]]
4453name = "zvariant_utils"
4454version = "3.3.1"
4455source = "registry+https://github.com/rust-lang/crates.io-index"
4456checksum = "6d464f5733ffa07a3164d656f18533caace9d0638596721355d73256a410d691"
4457dependencies = [
4458 "proc-macro2",
4459 "quote",
4460 "serde",
4461 "syn",
4462 "winnow",
4463]
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..b91b603
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,9 @@
1[package]
2name = "xkbpreview"
3version = "0.1.0"
4edition = "2024"
5
6[dependencies]
7eframe = "0.34"
8xkbcommon = "0.9"
9x11rb = { version = "0.13", features = ["xkb"] }
diff --git a/src/keymap.rs b/src/keymap.rs
new file mode 100644
index 0000000..d14f9ab
--- /dev/null
+++ b/src/keymap.rs
@@ -0,0 +1,253 @@
1use crate::layout;
2use crate::x11;
3
4use xkbcommon::xkb;
5
6#[derive(Debug, Clone)]
7pub enum KeyKind {
8 Normal,
9 Shift,
10 Level3,
11 Lock,
12 Control,
13 Alt,
14 Super,
15}
16
17#[derive(Debug, Clone)]
18pub struct KeyEntry {
19 pub labels: [[String; 4]; 4],
20 pub kind: KeyKind,
21 pub dead: [[bool; 4]; 4],
22 pub pos: layout::KeyPos,
23}
24
25#[derive(Debug, Clone)]
26pub struct KeyData {
27 pub keys: Vec<KeyEntry>,
28 pub layouts: Vec<String>,
29 pub is_iso: bool,
30}
31
32fn dead_display(name: &str) -> &'static str {
33 match name.to_lowercase().as_str() {
34 "dead_grave" => "`",
35 "dead_acute" => "'",
36 "dead_circumflex" => "^",
37 "dead_tilde" => "~",
38 "dead_macron" => "-",
39 "dead_breve" => "u",
40 "dead_abovedot" => ".",
41 "dead_diaeresis" => "\"",
42 "dead_caron" => "v",
43 "dead_cedilla" => ",",
44 "dead_ogonek" => "~",
45 "dead_doubleacute" => "\"",
46 "dead_stroke" => "/",
47 "dead_hook" => "?",
48 "dead_horn" => "?",
49 "dead_psili" => "'",
50 "dead_dasia" => "'",
51 "dead_iota" => "i",
52 "dead_voiced_sound" => "\"",
53 "dead_semivoiced_sound" => "o",
54 _ => "?",
55 }
56}
57
58fn keysym_to_display(sym: xkb::Keysym) -> String {
59 let utf8 = xkb::keysym_to_utf8(sym);
60 let trimmed = utf8.trim().to_string();
61 if !trimmed.is_empty() {
62 let name = xkb::keysym_get_name(sym);
63 if name.to_lowercase().starts_with("dead_") {
64 return dead_display(&name).to_string();
65 }
66 return trimmed;
67 }
68 let name = xkb::keysym_get_name(sym);
69 if name.to_lowercase().starts_with("dead_") {
70 return dead_display(&name).to_string();
71 }
72 match sym {
73 xkb::Keysym::Shift_L | xkb::Keysym::Shift_R => "Shift".into(),
74 xkb::Keysym::ISO_Level3_Shift => "AltGr".into(),
75 xkb::Keysym::Control_L | xkb::Keysym::Control_R => "Ctrl".into(),
76 xkb::Keysym::Alt_L | xkb::Keysym::Alt_R => "Alt".into(),
77 xkb::Keysym::Super_L | xkb::Keysym::Super_R => "Super".into(),
78 xkb::Keysym::Menu => "Menu".into(),
79 xkb::Keysym::Caps_Lock => "Caps".into(),
80 xkb::Keysym::Tab => "Tab".into(),
81 xkb::Keysym::Return => "Enter".into(),
82 xkb::Keysym::Escape => "Esc".into(),
83 xkb::Keysym::BackSpace => "Bksp".into(),
84 xkb::Keysym::space => " ".into(),
85 xkb::Keysym::Delete => "Del".into(),
86 xkb::Keysym::Insert => "Ins".into(),
87 xkb::Keysym::Home => "Home".into(),
88 xkb::Keysym::End => "End".into(),
89 xkb::Keysym::Page_Up => "PgUp".into(),
90 xkb::Keysym::Page_Down => "PgDn".into(),
91 xkb::Keysym::Up => "^".into(),
92 xkb::Keysym::Down => "v".into(),
93 xkb::Keysym::Left => "<".into(),
94 xkb::Keysym::Right => ">".into(),
95 xkb::Keysym::KP_Enter => "Enter".into(),
96 xkb::Keysym::Num_Lock => "Num".into(),
97 xkb::Keysym::Scroll_Lock => "Scrl".into(),
98 xkb::Keysym::Pause => "Pause".into(),
99 xkb::Keysym::Print => "PrtSc".into(),
100 _ => name,
101 }
102}
103
104fn detect_key_kind(syms: &[xkb::Keysym]) -> KeyKind {
105 for &sym in syms {
106 match sym {
107 xkb::Keysym::Shift_L | xkb::Keysym::Shift_R => return KeyKind::Shift,
108 xkb::Keysym::ISO_Level3_Shift => return KeyKind::Level3,
109 xkb::Keysym::Caps_Lock => return KeyKind::Lock,
110 xkb::Keysym::Control_L | xkb::Keysym::Control_R => return KeyKind::Control,
111 xkb::Keysym::Alt_L | xkb::Keysym::Alt_R => return KeyKind::Alt,
112 xkb::Keysym::Super_L | xkb::Keysym::Super_R => return KeyKind::Super,
113 _ => {}
114 }
115 }
116 KeyKind::Normal
117}
118
119fn is_keysym_dead(sym: xkb::Keysym) -> bool {
120 xkb::keysym_get_name(sym).to_lowercase().starts_with("dead_")
121}
122
123pub fn level_from_x11_modmask(mask: u16) -> usize {
124 let shift = mask & 0x01 != 0;
125 let altgr = mask & 0x80 != 0;
126 match (shift, altgr) {
127 (false, false) => 0,
128 (true, false) => 1,
129 (false, true) => 2,
130 (true, true) => 3,
131 }
132}
133
134struct RawKey {
135 name: String,
136 labels: [[String; 4]; 4],
137 dead: [[bool; 4]; 4],
138 kind: KeyKind,
139}
140
141fn detect_is_iso(model: &str, keymap_has_lsgt: bool) -> bool {
142 if model.contains("105") || model.contains("102") || model.contains("98") {
143 return true;
144 }
145 if model.contains("101") || model.contains("104") || model.contains("106") {
146 return false;
147 }
148 keymap_has_lsgt
149}
150
151pub fn compile_keymap(names: &x11::RuleNames) -> Result<KeyData, String> {
152 let context = xkb::Context::new(xkb::CONTEXT_NO_FLAGS);
153
154 let options = Some(names.options.clone());
155
156 let keymap = xkb::Keymap::new_from_names(
157 &context,
158 &names.rules,
159 &names.model,
160 &names.layout,
161 &names.variant,
162 options,
163 xkb::KEYMAP_COMPILE_NO_FLAGS,
164 )
165 .ok_or_else(|| "failed to compile keymap".to_string())?;
166
167 let num_groups = keymap.num_layouts() as usize;
168
169 let layouts: Vec<String> = if names.layout.is_empty() || num_groups <= 1 {
170 vec![if names.layout.is_empty() {
171 "default".into()
172 } else {
173 names.layout.clone()
174 }]
175 } else {
176 let layout_parts: Vec<&str> = names.layout.split(',').collect();
177 let variant_parts: Vec<&str> = if names.variant.is_empty() {
178 vec![]
179 } else {
180 names.variant.split(',').collect()
181 };
182 layout_parts
183 .iter()
184 .enumerate()
185 .map(|(i, l)| {
186 let v = variant_parts.get(i).filter(|v| !v.is_empty());
187 match v {
188 Some(v) => format!("{}({})", l, v),
189 None => l.to_string(),
190 }
191 })
192 .collect()
193 };
194
195 layout::reset_default_pos();
196
197 let mut raw = Vec::new();
198 let mut has_lsgt = false;
199
200 keymap.key_for_each(|km, kc| {
201 let name = match km.key_get_name(kc) {
202 Some(n) => n.to_string(),
203 None => return,
204 };
205
206 if name == "LSGT" {
207 has_lsgt = true;
208 }
209
210 let mut labels: [[String; 4]; 4] = Default::default();
211 let mut dead = [[false; 4]; 4];
212 let mut all_syms = Vec::new();
213
214 for group in 0..num_groups.min(4) {
215 for level in 0..4_u32 {
216 let syms = km.key_get_syms_by_level(kc, group as u32, level);
217 let li = level as usize;
218 if syms.is_empty() {
219 labels[group][li] = String::new();
220 } else {
221 let display: Vec<String> =
222 syms.iter().map(|&s| keysym_to_display(s)).collect();
223 labels[group][li] = display.join(" ");
224 dead[group][li] = syms.iter().any(|&s| is_keysym_dead(s));
225 all_syms.extend_from_slice(syms);
226 }
227 }
228 }
229
230 let kind = detect_key_kind(&all_syms);
231
232 raw.push(RawKey { name, labels, dead, kind });
233 });
234
235 let is_iso = detect_is_iso(&names.model, has_lsgt);
236
237 let keys: Vec<KeyEntry> = raw
238 .into_iter()
239 .filter(|k| !(k.name == "LSGT" && !is_iso))
240 .map(|k| KeyEntry {
241 pos: layout::resolve_position(&k.name, is_iso),
242 labels: k.labels,
243 dead: k.dead,
244 kind: k.kind,
245 })
246 .collect();
247
248 Ok(KeyData {
249 keys,
250 layouts,
251 is_iso,
252 })
253}
diff --git a/src/layout.rs b/src/layout.rs
new file mode 100644
index 0000000..4dad3fb
--- /dev/null
+++ b/src/layout.rs
@@ -0,0 +1,171 @@
1#[derive(Debug, Clone, Copy)]
2pub struct KeyPos {
3 pub row: usize,
4 pub col: f32,
5 pub width: f32,
6}
7
8fn ansi_row0(name: &str) -> Option<KeyPos> {
9 let keys: &[(&str, f32, f32)] = &[
10 ("ESC", 0.0, 1.0),
11 ("TLDE", 1.0, 1.0),
12 ("AE01", 2.0, 1.0),
13 ("AE02", 3.0, 1.0),
14 ("AE03", 4.0, 1.0),
15 ("AE04", 5.0, 1.0),
16 ("AE05", 6.0, 1.0),
17 ("AE06", 7.0, 1.0),
18 ("AE07", 8.0, 1.0),
19 ("AE08", 9.0, 1.0),
20 ("AE09", 10.0, 1.0),
21 ("AE10", 11.0, 1.0),
22 ("AE11", 12.0, 1.0),
23 ("AE12", 13.0, 1.0),
24 ("BKSP", 14.0, 1.5),
25 ];
26 keys.iter().find(|(n, _, _)| *n == name).map(|(_, c, w)| KeyPos { row: 0, col: *c, width: *w })
27}
28
29fn ansi_row1(name: &str) -> Option<KeyPos> {
30 let keys: &[(&str, f32, f32)] = &[
31 ("TAB", 0.0, 1.5),
32 ("AD01", 1.5, 1.0),
33 ("AD02", 2.5, 1.0),
34 ("AD03", 3.5, 1.0),
35 ("AD04", 4.5, 1.0),
36 ("AD05", 5.5, 1.0),
37 ("AD06", 6.5, 1.0),
38 ("AD07", 7.5, 1.0),
39 ("AD08", 8.5, 1.0),
40 ("AD09", 9.5, 1.0),
41 ("AD10", 10.5, 1.0),
42 ("AD11", 11.5, 1.0),
43 ("AD12", 12.5, 1.0),
44 ("BKSL", 13.5, 1.5),
45 ];
46 keys.iter().find(|(n, _, _)| *n == name).map(|(_, c, w)| KeyPos { row: 1, col: *c, width: *w })
47}
48
49fn ansi_row2(name: &str) -> Option<KeyPos> {
50 let keys: &[(&str, f32, f32)] = &[
51 ("CAPS", 0.0, 1.75),
52 ("AC01", 1.75, 1.0),
53 ("AC02", 2.75, 1.0),
54 ("AC03", 3.75, 1.0),
55 ("AC04", 4.75, 1.0),
56 ("AC05", 5.75, 1.0),
57 ("AC06", 6.75, 1.0),
58 ("AC07", 7.75, 1.0),
59 ("AC08", 8.75, 1.0),
60 ("AC09", 9.75, 1.0),
61 ("AC10", 10.75, 1.0),
62 ("AC11", 11.75, 1.0),
63 ("RET", 12.75, 2.25),
64 ];
65 keys.iter().find(|(n, _, _)| *n == name).map(|(_, c, w)| KeyPos { row: 2, col: *c, width: *w })
66}
67
68fn ansi_row3(name: &str) -> Option<KeyPos> {
69 let keys: &[(&str, f32, f32)] = &[
70 ("LFSH", 0.0, 2.25),
71 ("AB01", 2.25, 1.0),
72 ("AB02", 3.25, 1.0),
73 ("AB03", 4.25, 1.0),
74 ("AB04", 5.25, 1.0),
75 ("AB05", 6.25, 1.0),
76 ("AB06", 7.25, 1.0),
77 ("AB07", 8.25, 1.0),
78 ("AB08", 9.25, 1.0),
79 ("AB09", 10.25, 1.0),
80 ("AB10", 11.25, 1.0),
81 ("RTSH", 12.25, 2.75),
82 ];
83 keys.iter().find(|(n, _, _)| *n == name).map(|(_, c, w)| KeyPos { row: 3, col: *c, width: *w })
84}
85
86fn ansi_row4(name: &str) -> Option<KeyPos> {
87 let keys: &[(&str, f32, f32)] = &[
88 ("LCTL", 0.0, 1.25),
89 ("LWIN", 1.25, 1.25),
90 ("LALT", 2.50, 1.25),
91 ("SPCE", 3.75, 6.25),
92 ("RALT", 10.0, 1.25),
93 ("RWIN", 11.25, 1.25),
94 ("MENU", 12.50, 1.25),
95 ("RCTL", 13.75, 1.25),
96 ];
97 keys.iter().find(|(n, _, _)| *n == name).map(|(_, c, w)| KeyPos { row: 4, col: *c, width: *w })
98}
99
100fn iso_row3(name: &str, _has_lsgt: bool) -> Option<KeyPos> {
101 let keys: &[(&str, f32, f32)] = &[
102 ("LFSH", 0.0, 1.25),
103 ("LSGT", 1.25, 1.0),
104 ("AB01", 2.25, 1.0),
105 ("AB02", 3.25, 1.0),
106 ("AB03", 4.25, 1.0),
107 ("AB04", 5.25, 1.0),
108 ("AB05", 6.25, 1.0),
109 ("AB06", 7.25, 1.0),
110 ("AB07", 8.25, 1.0),
111 ("AB08", 9.25, 1.0),
112 ("AB09", 10.25, 1.0),
113 ("AB10", 11.25, 1.0),
114 ("RTSH", 12.25, 2.75),
115 ];
116 keys.iter().find(|(n, _, _)| *n == name).map(|(_, c, w)| KeyPos { row: 3, col: *c, width: *w })
117}
118
119fn iso_row2(name: &str) -> Option<KeyPos> {
120 let keys: &[(&str, f32, f32)] = &[
121 ("CAPS", 0.0, 1.75),
122 ("AC01", 1.75, 1.0),
123 ("AC02", 2.75, 1.0),
124 ("AC03", 3.75, 1.0),
125 ("AC04", 4.75, 1.0),
126 ("AC05", 5.75, 1.0),
127 ("AC06", 6.75, 1.0),
128 ("AC07", 7.75, 1.0),
129 ("AC08", 8.75, 1.0),
130 ("AC09", 9.75, 1.0),
131 ("AC10", 10.75, 1.0),
132 ("AC11", 11.75, 1.0),
133 ("RET", 12.75, 2.25),
134 ];
135 keys.iter().find(|(n, _, _)| *n == name).map(|(_, c, w)| KeyPos { row: 2, col: *c, width: *w })
136}
137
138pub fn resolve_position(name: &str, is_iso: bool) -> KeyPos {
139 if is_iso {
140 if let Some(pos) = iso_row3(name, true).or_else(|| ansi_row0(name))
141 .or_else(|| ansi_row1(name))
142 .or_else(|| iso_row2(name))
143 .or_else(|| ansi_row4(name))
144 {
145 return pos;
146 }
147 } else {
148 if let Some(pos) = ansi_row0(name)
149 .or_else(|| ansi_row1(name))
150 .or_else(|| ansi_row2(name))
151 .or_else(|| ansi_row3(name))
152 .or_else(|| ansi_row4(name))
153 {
154 return pos;
155 }
156 }
157
158 let extra = DEFAULT_POS.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
159 KeyPos {
160 row: 5,
161 col: (extra % 16) as f32,
162 width: 1.0,
163 }
164}
165
166use std::sync::atomic::AtomicU32;
167static DEFAULT_POS: AtomicU32 = AtomicU32::new(0);
168
169pub fn reset_default_pos() {
170 DEFAULT_POS.store(0, std::sync::atomic::Ordering::Relaxed);
171}
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..7a814c1
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,136 @@
1mod x11;
2mod keymap;
3mod layout;
4mod ui;
5
6use eframe::egui;
7
8struct XkbPreviewApp {
9 key_data: Option<keymap::KeyData>,
10 x11_conn: Option<x11::X11Connection>,
11 selected_level: usize,
12 active_level: usize,
13 active_group: usize,
14 error: Option<String>,
15}
16
17impl Default for XkbPreviewApp {
18 fn default() -> Self {
19 Self {
20 key_data: None,
21 x11_conn: None,
22 selected_level: 0,
23 active_level: 0,
24 active_group: 0,
25 error: None,
26 }
27 }
28}
29
30impl eframe::App for XkbPreviewApp {
31 fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame) {
32 if self.key_data.is_none() && self.error.is_none() {
33 match load_keyboard() {
34 Ok(data) => self.key_data = Some(data),
35 Err(e) => self.error = Some(e),
36 }
37 }
38
39 if self.x11_conn.is_none() {
40 self.x11_conn = x11::X11Connection::open();
41 }
42
43 if let Some(ref conn) = self.x11_conn {
44 let mask = conn.modifier_mask();
45 self.active_level = keymap::level_from_x11_modmask(mask);
46 self.active_group = conn.active_group();
47 }
48
49 ui::render(
50 ui,
51 &self.key_data,
52 &mut self.selected_level,
53 self.active_level,
54 self.active_group,
55 &self.error,
56 );
57 }
58}
59
60fn load_keyboard() -> Result<keymap::KeyData, String> {
61 let names = x11::get_xkb_rule_names().unwrap_or_default();
62 keymap::compile_keymap(&names)
63}
64
65fn main() -> eframe::Result {
66 let options = eframe::NativeOptions {
67 viewport: egui::ViewportBuilder::default()
68 .with_inner_size([980.0, 560.0]),
69 ..Default::default()
70 };
71 eframe::run_native(
72 "xkbpreview",
73 options,
74 Box::new(|cc| {
75 setup_fonts(&cc.egui_ctx);
76 Ok(Box::new(XkbPreviewApp::default()))
77 }),
78 )
79}
80
81fn setup_fonts(ctx: &egui::Context) {
82 let mut fonts = egui::FontDefinitions::default();
83
84 let font_candidates = [
85 "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
86 "/usr/share/fonts/dejavu/DejaVuSans.ttf",
87 "/usr/share/fonts/truetype/dejavu/DejaVuSans-Regular.ttf",
88 "/usr/share/fonts/dejavu/DejaVuSans-Regular.ttf",
89 "/usr/share/fonts/TTF/DejaVuSans.ttf",
90 "/usr/share/fonts/truetype/noto/NotoSans-Regular.ttf",
91 "/usr/share/fonts/noto/NotoSans-Regular.ttf",
92 "/usr/share/fonts/opentype/noto/NotoSans-Regular.ttf",
93 ];
94
95 let mut loaded = false;
96 for path in &font_candidates {
97 if let Ok(data) = std::fs::read(path) {
98 fonts
99 .font_data
100 .insert("fallback_font".into(), egui::FontData::from_owned(data).into());
101 fonts
102 .families
103 .entry(egui::FontFamily::Proportional)
104 .or_default()
105 .push("fallback_font".into());
106 loaded = true;
107 break;
108 }
109 }
110
111 if !loaded {
112 if let Ok(home) = std::env::var("HOME") {
113 let user_candidates = [
114 format!("{}/.fonts/DejaVuSans.ttf", home),
115 format!("{}/.local/share/fonts/DejaVuSans.ttf", home),
116 format!("{}/.fonts/NotoSans-Regular.ttf", home),
117 format!("{}/.local/share/fonts/NotoSans-Regular.ttf", home),
118 ];
119 for path in &user_candidates {
120 if let Ok(data) = std::fs::read(path) {
121 fonts
122 .font_data
123 .insert("fallback_font".into(), egui::FontData::from_owned(data).into());
124 fonts
125 .families
126 .entry(egui::FontFamily::Proportional)
127 .or_default()
128 .push("fallback_font".into());
129 break;
130 }
131 }
132 }
133 }
134
135 ctx.set_fonts(fonts);
136}
diff --git a/src/ui.rs b/src/ui.rs
new file mode 100644
index 0000000..b9abeff
--- /dev/null
+++ b/src/ui.rs
@@ -0,0 +1,221 @@
1use crate::keymap;
2use eframe::egui::{self, Color32, CornerRadius, Stroke, Vec2};
3
4const LEVEL_NAMES: &[&str; 4] = &[
5 "Level 1 (base)",
6 "Level 2 (Shift)",
7 "Level 3 (AltGr)",
8 "Level 4 (Shift+AltGr)",
9];
10
11const KEY_BG: Color32 = Color32::from_rgb(0x33, 0x33, 0x33);
12const KEY_BG_MOD_SHIFT: Color32 = Color32::from_rgb(0x2a, 0x5a, 0x2a);
13const KEY_BG_MOD_L3: Color32 = Color32::from_rgb(0x4a, 0x2a, 0x5a);
14const KEY_BG_MOD_OTHER: Color32 = Color32::from_rgb(0x3a, 0x3a, 0x3a);
15const KEY_TEXT: Color32 = Color32::from_rgb(0xcc, 0xcc, 0xcc);
16const KEY_TEXT_DIM: Color32 = Color32::from_rgb(0x55, 0x55, 0x55);
17const KEY_TEXT_ACTIVE: Color32 = Color32::from_rgb(0xff, 0xff, 0xff);
18const KEY_TEXT_MOD: Color32 = Color32::from_rgb(0xff, 0xff, 0xcc);
19const KEY_TEXT_DEAD: Color32 = Color32::from_rgb(0xff, 0xaa, 0x44);
20
21const KEY_SPACING: f32 = 4.0;
22const KEY_UNIT: f32 = 52.0;
23const KEY_HEIGHT: f32 = 48.0;
24
25fn key_bg(kind: &keymap::KeyKind) -> Color32 {
26 match kind {
27 keymap::KeyKind::Shift => KEY_BG_MOD_SHIFT,
28 keymap::KeyKind::Level3 => KEY_BG_MOD_L3,
29 keymap::KeyKind::Lock | keymap::KeyKind::Control | keymap::KeyKind::Alt | keymap::KeyKind::Super => {
30 KEY_BG_MOD_OTHER
31 }
32 keymap::KeyKind::Normal => KEY_BG,
33 }
34}
35
36fn text_color_for_level(level: usize, active_level: usize, kind: &keymap::KeyKind) -> Color32 {
37 if level == active_level {
38 match kind {
39 keymap::KeyKind::Shift | keymap::KeyKind::Level3 => KEY_TEXT_MOD,
40 _ => KEY_TEXT_ACTIVE,
41 }
42 } else {
43 KEY_TEXT_DIM
44 }
45}
46
47pub fn render(
48 ui: &mut egui::Ui,
49 key_data: &Option<keymap::KeyData>,
50 selected_level: &mut usize,
51 active_level: usize,
52 active_group: usize,
53 error: &Option<String>,
54) {
55 egui::Panel::top("toolbar").show_inside(ui, |ui| {
56 ui.horizontal(|ui| {
57 ui.label(egui::RichText::new("xkbpreview").strong());
58
59 if let Some(data) = key_data {
60 let g = active_group.min(data.layouts.len().saturating_sub(1));
61 ui.label(format!(" layout: {}", data.layouts[g]));
62 if data.is_iso {
63 ui.label(" [ISO]");
64 } else {
65 ui.label(" [ANSI]");
66 }
67 }
68
69 ui.label(format!(" Lv:{}", active_level));
70
71 ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
72 ui.label("Highlight:");
73 for (i, name) in LEVEL_NAMES.iter().enumerate() {
74 let mark = if i == active_level { "[x]" } else { "[ ]" };
75 if ui.selectable_label(*selected_level == i, format!("{} {}", mark, name)).clicked() {
76 *selected_level = i;
77 }
78 }
79 });
80 });
81 });
82
83 if let Some(err) = error {
84 egui::CentralPanel::default().show_inside(ui, |ui| {
85 ui.colored_label(Color32::RED, format!("Error: {}", err));
86 ui.label("Make sure you're running under X11 and the XKB configuration is available.");
87 });
88 return;
89 }
90
91 let data = match key_data {
92 Some(d) => d,
93 None => {
94 egui::CentralPanel::default().show_inside(ui, |ui| {
95 ui.label("Loading keyboard layout...");
96 });
97 return;
98 }
99 };
100
101 egui::CentralPanel::default().show_inside(ui, |ui| {
102 ui.vertical_centered(|ui| {
103 let rows = group_by_row(&data.keys);
104 let max_row = rows.iter().map(|(r, _)| *r).max().unwrap_or(0);
105 let total_w = 15.5 * (KEY_UNIT + KEY_SPACING);
106
107 let (rect, _) = ui.allocate_exact_size(
108 Vec2::new(total_w, (max_row + 1) as f32 * (KEY_HEIGHT + KEY_SPACING)),
109 egui::Sense::hover(),
110 );
111
112 let painter = ui.painter_at(rect);
113 let origin = rect.min;
114
115 for (row_idx, entries) in &rows {
116 for entry in entries {
117 let p = &entry.pos;
118 let x = p.col * (KEY_UNIT + KEY_SPACING);
119 let y = *row_idx as f32 * (KEY_HEIGHT + KEY_SPACING);
120 let w = p.width * KEY_UNIT + (p.width - 1.0) * KEY_SPACING;
121
122 let key_rect = egui::Rect::from_min_size(
123 origin + Vec2::new(x, y),
124 Vec2::new(w, KEY_HEIGHT),
125 );
126
127 let bg = key_bg(&entry.kind);
128 painter.rect_filled(key_rect, CornerRadius::same(3), bg);
129 painter.rect_stroke(key_rect, CornerRadius::same(3), Stroke::new(1.0, Color32::from_rgb(0x55, 0x55, 0x55)), egui::StrokeKind::Middle);
130
131 let inset = 3.0;
132 let cw = key_rect.width() / 2.0;
133
134 let centers: [egui::Pos2; 4] = [
135 key_rect.center(),
136 egui::Pos2::new(key_rect.left() + cw / 2.0, key_rect.top() + inset + 4.0),
137 egui::Pos2::new(key_rect.right() - cw / 2.0, key_rect.top() + inset + 4.0),
138 egui::Pos2::new(key_rect.left() + cw / 2.0, key_rect.bottom() - inset - 4.0),
139 ];
140
141 let level_order = [0usize, 1, 2, 3];
142 let font_sizes = [15.0, 10.0, 10.0, 9.0];
143 let aligns = [
144 egui::Align2::CENTER_CENTER,
145 egui::Align2::LEFT_TOP,
146 egui::Align2::RIGHT_TOP,
147 egui::Align2::LEFT_BOTTOM,
148 ];
149
150 let g = active_group.min(3);
151 for &li in &level_order {
152 let label = &entry.labels[g][li];
153 if label.is_empty() {
154 continue;
155 }
156 let color = if entry.dead[g][li] {
157 KEY_TEXT_DEAD
158 } else if li == 0 {
159 if 0 == active_level {
160 text_color_for_level(li, active_level, &entry.kind)
161 } else {
162 KEY_TEXT
163 }
164 } else {
165 text_color_for_level(li, active_level, &entry.kind)
166 };
167 let font = if label.len() > 2 {
168 egui::FontId::proportional(font_sizes[li] - 1.0)
169 } else {
170 egui::FontId::proportional(font_sizes[li])
171 };
172 painter.text(centers[li], aligns[li], label, font, color);
173 }
174 }
175 }
176
177 let legend_y = (max_row + 1) as f32 * (KEY_HEIGHT + KEY_SPACING) + 16.0;
178 let legend_items = [
179 (KEY_BG_MOD_SHIFT, "Shift (triggers L2)"),
180 (KEY_BG_MOD_L3, "AltGr (triggers L3)"),
181 (KEY_BG_MOD_OTHER, "Other modifiers"),
182 (KEY_TEXT_DEAD, "Dead key accent"),
183 ];
184 for (i, (color, text)) in legend_items.iter().enumerate() {
185 let ly = legend_y + i as f32 * 20.0;
186 let r = egui::Rect::from_min_size(
187 origin + Vec2::new(0.0, ly),
188 Vec2::new(14.0, 14.0),
189 );
190 painter.rect_filled(r, CornerRadius::same(2), *color);
191 painter.text(
192 egui::Pos2::new(r.right() + 6.0, r.center().y),
193 egui::Align2::LEFT_CENTER,
194 *text,
195 egui::FontId::proportional(12.0),
196 KEY_TEXT,
197 );
198 }
199 });
200 });
201}
202
203fn group_by_row<'a>(keys: &'a [keymap::KeyEntry]) -> Vec<(usize, Vec<&'a keymap::KeyEntry>)> {
204 let mut rows: Vec<(usize, Vec<&'a keymap::KeyEntry>)> = Vec::new();
205 for key in keys {
206 let row = key.pos.row;
207 if row > 4 {
208 continue;
209 }
210 if let Some(entry) = rows.iter_mut().find(|(r, _)| *r == row) {
211 entry.1.push(key);
212 } else {
213 rows.push((row, vec![key]));
214 }
215 }
216 rows.sort_by_key(|(r, _)| *r);
217 for (_, entries) in &mut rows {
218 entries.sort_by(|a, b| a.pos.col.partial_cmp(&b.pos.col).unwrap());
219 }
220 rows
221}
diff --git a/src/x11.rs b/src/x11.rs
new file mode 100644
index 0000000..27052b9
--- /dev/null
+++ b/src/x11.rs
@@ -0,0 +1,92 @@
1use x11rb::connection::{Connection, RequestConnection};
2use x11rb::protocol::xkb::{self, ConnectionExt as XkbConnectionExt};
3use x11rb::protocol::xproto::{AtomEnum, ConnectionExt};
4use x11rb::rust_connection::RustConnection;
5
6#[derive(Debug, Default)]
7pub struct RuleNames {
8 pub rules: String,
9 pub model: String,
10 pub layout: String,
11 pub variant: String,
12 pub options: String,
13}
14
15pub struct X11Connection {
16 pub conn: RustConnection,
17 pub root: x11rb::protocol::xproto::Window,
18 xkb_ok: bool,
19}
20
21impl X11Connection {
22 pub fn open() -> Option<Self> {
23 let (conn, screen_num) = x11rb::connect(None).ok()?;
24 let root = conn.setup().roots[screen_num].root;
25 let xkb_ok = conn
26 .extension_information(xkb::X11_EXTENSION_NAME)
27 .ok()
28 .flatten()
29 .is_some();
30 if xkb_ok {
31 let _ = conn.xkb_use_extension(1, 0).ok();
32 }
33 Some(Self { conn, root, xkb_ok })
34 }
35
36 pub fn modifier_mask(&self) -> u16 {
37 self.conn
38 .query_pointer(self.root)
39 .ok()
40 .and_then(|c| c.reply().ok())
41 .map(|r| r.mask.into())
42 .unwrap_or(0)
43 }
44
45 pub fn active_group(&self) -> usize {
46 if !self.xkb_ok {
47 return 0;
48 }
49 self.conn
50 .xkb_get_state(0x0100)
51 .ok()
52 .and_then(|c| c.reply().ok())
53 .map(|r| u8::from(r.group) as usize)
54 .unwrap_or(0)
55 }
56}
57
58pub fn get_xkb_rule_names() -> Option<RuleNames> {
59 let (conn, screen_num) = x11rb::connect(None).ok()?;
60 let screen = &conn.setup().roots[screen_num];
61
62 let atom = conn
63 .intern_atom(false, b"_XKB_RULES_NAMES")
64 .ok()?
65 .reply()
66 .ok()?
67 .atom;
68
69 let prop = conn
70 .get_property(false, screen.root, atom, AtomEnum::ANY, 0, 1024)
71 .ok()?
72 .reply()
73 .ok()?;
74
75 if prop.value.is_empty() || prop.format == 0 {
76 return None;
77 }
78
79 let parts: Vec<&str> = prop
80 .value
81 .split(|&b| b == 0)
82 .filter_map(|s| std::str::from_utf8(s).ok())
83 .collect();
84
85 Some(RuleNames {
86 rules: parts.first().map(|s| s.to_string()).unwrap_or_default(),
87 model: parts.get(1).map(|s| s.to_string()).unwrap_or_default(),
88 layout: parts.get(2).map(|s| s.to_string()).unwrap_or_default(),
89 variant: parts.get(3).map(|s| s.to_string()).unwrap_or_default(),
90 options: parts.get(4).map(|s| s.to_string()).unwrap_or_default(),
91 })
92}