diff --git a/Cargo.lock b/Cargo.lock index c7b7d5b..9479427 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,7 +32,7 @@ dependencies = [ "cfg-if", "getrandom", "once_cell", - "version_check 0.9.4", + "version_check 0.9.5", "zerocopy", ] @@ -126,9 +126,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "arrayvec" @@ -259,7 +259,7 @@ checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -294,7 +294,7 @@ dependencies = [ "base64ct", "clap", "cool_asserts", - "serde 1.0.209", + "serde 1.0.210", "sha2", "sqlx", "thiserror", @@ -392,7 +392,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" dependencies = [ "annotate-snippets", - "bitflags 2.4.1", + "bitflags 2.6.0", "cexpr", "clang-sys", "itertools 0.12.0", @@ -403,7 +403,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -441,11 +441,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" dependencies = [ - "serde 1.0.209", + "serde 1.0.210", ] [[package]] @@ -509,23 +509,46 @@ version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f33613627f0dea6a731b0605101fad59ba4f193a52c96c4687728d822605a8a1" dependencies = [ - "bitflags 2.4.1", - "cairo-sys-rs", - "glib", + "bitflags 2.6.0", + "cairo-sys-rs 0.18.2", + "glib 0.18.4", "libc", "once_cell", "thiserror", ] +[[package]] +name = "cairo-rs" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a0ea147c94108c9613235388f540e4d14c327f7081c9e471fc8ee8a2533e69" +dependencies = [ + "bitflags 2.6.0", + "cairo-sys-rs 0.20.0", + "glib 0.20.4", + "libc", +] + [[package]] name = "cairo-sys-rs" version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ - "glib-sys", + "glib-sys 0.18.1", "libc", - "system-deps", + "system-deps 6.2.0", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "428290f914b9b86089f60f5d8a9f6e440508e1bcff23b25afd51502b0a2da88f" +dependencies = [ + "glib-sys 0.20.4", + "libc", + "system-deps 7.0.3", ] [[package]] @@ -556,6 +579,16 @@ dependencies = [ "target-lexicon", ] +[[package]] +name = "cfg-expr" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0890061c4d3223e7267f3bad2ec40b997d64faac1c2815a4a9d95018e2b9e9c" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -579,7 +612,7 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", - "serde 1.0.209", + "serde 1.0.210", "wasm-bindgen", "windows-targets 0.48.5", ] @@ -593,7 +626,7 @@ dependencies = [ "chrono", "chrono-tz-build", "phf 0.11.2", - "serde 1.0.209", + "serde 1.0.210", ] [[package]] @@ -646,10 +679,10 @@ version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -694,7 +727,7 @@ version = "0.1.0" dependencies = [ "config-derive", "cool_asserts", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "thiserror", ] @@ -729,7 +762,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" dependencies = [ "time 0.3.31", - "version_check 0.9.4", + "version_check 0.9.5", ] [[package]] @@ -913,13 +946,37 @@ dependencies = [ "typenum", ] +[[package]] +name = "cyberpunk" +version = "0.1.0" +dependencies = [ + "cairo-rs 0.18.3", + "gio 0.18.4", + "glib 0.18.4", + "gtk4", +] + +[[package]] +name = "cyberpunk-slideshow" +version = "0.1.0" +dependencies = [ + "cairo-rs 0.20.1", + "cyberpunk", + "gio 0.20.4", + "glib 0.20.4", + "gtk4", + "serde 1.0.210", + "serde_yml", +] + [[package]] name = "cyberpunk-splash" version = "0.1.0" dependencies = [ - "cairo-rs", - "gio", - "glib", + "cairo-rs 0.18.3", + "cyberpunk", + "gio 0.18.4", + "glib 0.18.4", "gtk4", ] @@ -928,22 +985,22 @@ name = "dashboard" version = "0.1.3" dependencies = [ "async-std", - "cairo-rs", + "cairo-rs 0.18.3", "chrono", "fluent", "fluent-ergonomics", "futures", "gdk4", "geo-types", - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "glib-build-tools 0.18.0", "gtk4", "lazy_static", "libadwaita", "memorycache", "reqwest", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "tokio", "unic-langid", @@ -1011,7 +1068,7 @@ checksum = "2517b0555262aeeda0d107a40ecfbbcf185921180ffb4acf316ebe0887467e26" dependencies = [ "generic-array 0.11.2", "num-traits", - "serde 1.0.209", + "serde 1.0.210", "typenum", ] @@ -1023,7 +1080,7 @@ checksum = "a0b0a86c5d31c93238ff4b694fa31f3acdf67440770dc314c57d90e433914397" dependencies = [ "generic-array 0.14.7", "num-traits", - "serde 1.0.209", + "serde 1.0.210", "typenum", ] @@ -1035,7 +1092,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -1050,7 +1107,7 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" dependencies = [ - "serde 1.0.209", + "serde 1.0.210", ] [[package]] @@ -1089,7 +1146,7 @@ dependencies = [ "chrono", "chrono-tz", "dimensioned 0.7.0", - "serde 1.0.209", + "serde 1.0.210", "serde_derive", "serde_json", "tempfile", @@ -1235,7 +1292,7 @@ dependencies = [ "mime 0.3.17", "mime_guess 2.0.4", "pretty_env_logger", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "sha2", "tempdir", @@ -1263,8 +1320,8 @@ dependencies = [ "emseries", "ft-core", "gdk4", - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "glib-build-tools 0.18.0", "gtk4", "libadwaita", @@ -1413,7 +1470,7 @@ checksum = "b0fa992f1656e1707946bbba340ad244f0814009ef8c0118eb7b658395f19a2e" dependencies = [ "frunk_proc_macro_helpers", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -1425,7 +1482,7 @@ dependencies = [ "frunk_core", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -1436,7 +1493,7 @@ dependencies = [ "chrono-tz", "dimensioned 0.8.0", "emseries", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "tempfile", ] @@ -1536,7 +1593,7 @@ checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -1582,8 +1639,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "446f32b74d22c33b7b258d4af4ffde53c2bf96ca2e29abdf1a785fe59bd6c82c" dependencies = [ "gdk-pixbuf-sys", - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "libc", "once_cell", ] @@ -1594,11 +1651,11 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -1607,11 +1664,11 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edb019ad581f8ecf8ea8e4baa6df7c483a95b5a59be3140be6a9c3b0c632af6" dependencies = [ - "cairo-rs", + "cairo-rs 0.18.3", "gdk-pixbuf", "gdk4-sys", - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "libc", "pango", ] @@ -1622,15 +1679,15 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0" dependencies = [ - "cairo-sys-rs", + "cairo-sys-rs 0.18.2", "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", "pango-sys", "pkg-config", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -1649,7 +1706,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", - "version_check 0.9.4", + "version_check 0.9.5", ] [[package]] @@ -1703,8 +1760,8 @@ dependencies = [ "futures-core", "futures-io", "futures-util", - "gio-sys", - "glib", + "gio-sys 0.18.1", + "glib 0.18.4", "libc", "once_cell", "pin-project-lite", @@ -1712,35 +1769,65 @@ dependencies = [ "thiserror", ] +[[package]] +name = "gio" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8d999e8fb09583e96080867e364bc1e701284ad206c76a5af480d63833ad43c" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys 0.20.4", + "glib 0.20.4", + "libc", + "pin-project-lite", + "smallvec", +] + [[package]] name = "gio-sys" version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps", + "system-deps 6.2.0", "winapi", ] +[[package]] +name = "gio-sys" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f7efc368de04755344f0084104835b6bb71df2c1d41e37d863947392a894779" +dependencies = [ + "glib-sys 0.20.4", + "gobject-sys 0.20.4", + "libc", + "system-deps 7.0.3", + "windows-sys 0.52.0", +] + [[package]] name = "glib" version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "951bbd7fdc5c044ede9f05170f05a3ae9479239c3afdfe2d22d537a3add15c4e" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "futures-channel", "futures-core", "futures-executor", "futures-task", "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-macros 0.18.3", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", "memchr", "once_cell", @@ -1748,6 +1835,27 @@ dependencies = [ "thiserror", ] +[[package]] +name = "glib" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adcf1ec6d3650bf9fdbc6cee242d4fcebc6f6bfd9bea5b929b6a8b7344eb85ff" +dependencies = [ + "bitflags 2.6.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys 0.20.4", + "glib-macros 0.20.4", + "glib-sys 0.20.4", + "gobject-sys 0.20.4", + "libc", + "memchr", + "smallvec", +] + [[package]] name = "glib-build-tools" version = "0.16.3" @@ -1772,12 +1880,25 @@ version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72793962ceece3863c2965d7f10c8786323b17c7adea75a515809fa20ab799a5" dependencies = [ - "heck", - "proc-macro-crate 2.0.1", + "heck 0.4.1", + "proc-macro-crate 2.0.0", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", +] + +[[package]] +name = "glib-macros" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6bf88f70cd5720a6197639dcabcb378dd528d0cb68cb1f45e3b358bcb841cd7" +dependencies = [ + "heck 0.5.0", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] @@ -1787,7 +1908,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", - "system-deps", + "system-deps 6.2.0", +] + +[[package]] +name = "glib-sys" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9eca5d88cfa6a453b00d203287c34a2b7cac3a7831779aa2bb0b3c7233752b" +dependencies = [ + "libc", + "system-deps 7.0.3", ] [[package]] @@ -1816,12 +1947,12 @@ dependencies = [ "config-derive", "futures", "gdk4", - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "glib-build-tools 0.16.3", "gtk4", "libadwaita", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "tokio", ] @@ -1831,7 +1962,7 @@ name = "gm-dash" version = "0.1.0" dependencies = [ "pipewire", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "tokio", "warp", @@ -1843,9 +1974,20 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ - "glib-sys", + "glib-sys 0.18.1", "libc", - "system-deps", + "system-deps 6.2.0", +] + +[[package]] +name = "gobject-sys" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c674d2ff8478cf0ec29d2be730ed779fef54415a2fb4b565c52def62696462" +dependencies = [ + "glib-sys 0.20.4", + "libc", + "system-deps 7.0.3", ] [[package]] @@ -1854,7 +1996,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401" dependencies = [ - "glib", + "glib 0.18.4", "graphene-sys", "libc", ] @@ -1865,10 +2007,10 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59" dependencies = [ - "glib-sys", + "glib-sys 0.18.1", "libc", "pkg-config", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -1886,9 +2028,9 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d958e351d2f210309b32d081c832d7de0aca0b077aa10d88336c6379bd01f7e" dependencies = [ - "cairo-rs", + "cairo-rs 0.18.3", "gdk4", - "glib", + "glib 0.18.4", "graphene-rs", "gsk4-sys", "libc", @@ -1901,14 +2043,14 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12bd9e3effea989f020e8f1ff3fa3b8c63ba93d43b899c11a118868853a56d55" dependencies = [ - "cairo-sys-rs", + "cairo-sys-rs 0.18.2", "gdk4-sys", - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "graphene-sys", "libc", "pango-sys", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -1917,13 +2059,13 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aeb51aa3e9728575a053e1f43543cd9992ac2477e1b186ad824fd4adfb70842" dependencies = [ - "cairo-rs", + "cairo-rs 0.18.3", "field-offset", "futures-channel", "gdk-pixbuf", "gdk4", - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "graphene-rs", "gsk4", "gtk4-macros", @@ -1952,17 +2094,17 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54d8c4aa23638ce9faa2caf7e2a27d4a1295af2155c8e8d28c4d4eeca7a65eb8" dependencies = [ - "cairo-sys-rs", + "cairo-sys-rs 0.18.2", "gdk-pixbuf-sys", "gdk4-sys", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "graphene-sys", "gsk4-sys", "libc", "pango-sys", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -2003,13 +2145,19 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" + [[package]] name = "hashlink" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown", + "hashbrown 0.14.3", ] [[package]] @@ -2045,6 +2193,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.3.9" @@ -2061,10 +2215,10 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" name = "hex-grid" version = "0.1.0" dependencies = [ - "cairo-rs", + "cairo-rs 0.18.3", "coordinates", - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "glib-build-tools 0.18.0", "gtk4", "image 0.24.7", @@ -2237,8 +2391,8 @@ dependencies = [ name = "icon-test" version = "0.1.0" dependencies = [ - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "gtk4", "libadwaita", ] @@ -2269,7 +2423,7 @@ name = "ifc" version = "0.1.0" dependencies = [ "chrono", - "serde 1.0.209", + "serde 1.0.210", "thiserror", ] @@ -2319,12 +2473,12 @@ checksum = "0cfe9645a18782869361d9c8732246be7b410ad4e919d3609ebabdac00ba12c3" [[package]] name = "indexmap" -version = "2.1.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.0", ] [[package]] @@ -2474,8 +2628,8 @@ checksum = "2fe7e70c06507ed10a16cda707f358fbe60fe0dc237498f78c686ade92fd979c" dependencies = [ "gdk-pixbuf", "gdk4", - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "gtk4", "libadwaita-sys", "libc", @@ -2489,13 +2643,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e10aaa38de1d53374f90deeb4535209adc40cc5dba37f9704724169bceec69a" dependencies = [ "gdk4-sys", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "gtk4-sys", "libc", "pango-sys", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -2526,7 +2680,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65f3a4b81b2a2d8c7f300643676202debd1b7c929dbf5c9bb89402ea11d19810" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cc", "convert_case", "cookie-factory", @@ -2534,7 +2688,7 @@ dependencies = [ "libspa-sys", "nix", "nom", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -2545,7 +2699,7 @@ checksum = "bf0d9716420364790e85cbb9d3ac2c950bde16a7dd36f3209b7dfdfc4a24d01f" dependencies = [ "bindgen", "cc", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -2559,6 +2713,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "libyml" +version = "0.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3302702afa434ffa30847a83305f0a69d6abd74293b6554c18ec85c7ef30c980" +dependencies = [ + "anyhow", + "version_check 0.9.5", +] + [[package]] name = "lights-core" version = "0.1.0" @@ -2636,9 +2800,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memoffset" @@ -2655,7 +2819,7 @@ version = "0.1.0" dependencies = [ "chrono", "futures", - "serde 1.0.209", + "serde 1.0.210", "serde_derive", "tokio", ] @@ -2765,7 +2929,7 @@ dependencies = [ "memchr", "mime 0.3.17", "spin 0.9.8", - "version_check 0.9.4", + "version_check 0.9.5", ] [[package]] @@ -2817,7 +2981,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cfg-if", "libc", ] @@ -2967,7 +3131,7 @@ version = "0.10.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -2984,7 +3148,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -3016,7 +3180,7 @@ dependencies = [ "cool_asserts", "grid", "nary_tree", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "sgf", "thiserror", @@ -3029,9 +3193,9 @@ version = "0.1.0" dependencies = [ "async-channel 2.1.1", "async-std", - "cairo-rs", - "gio", - "glib", + "cairo-rs 0.18.3", + "gio 0.18.4", + "glib 0.18.4", "glib-build-tools 0.17.10", "gtk4", "image 0.24.7", @@ -3049,8 +3213,8 @@ version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "libc", "once_cell", "pango-sys", @@ -3062,10 +3226,10 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -3233,7 +3397,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -3277,7 +3441,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08e645ba5c45109106d56610b3ee60eb13a6f2beb8b74f8dc8186cf261788dda" dependencies = [ "anyhow", - "bitflags 2.4.1", + "bitflags 2.6.0", "libc", "libspa", "libspa-sys", @@ -3295,7 +3459,7 @@ checksum = "849e188f90b1dda88fe2bfe1ad31fe5f158af2c98f80fb5d13726c44f3f01112" dependencies = [ "bindgen", "libspa-sys", - "system-deps", + "system-deps 6.2.0", ] [[package]] @@ -3407,14 +3571,22 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" dependencies = [ - "toml_datetime", "toml_edit 0.20.2", ] +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.22", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -3425,7 +3597,7 @@ dependencies = [ "proc-macro2", "quote", "syn 1.0.109", - "version_check 0.9.4", + "version_check 0.9.5", ] [[package]] @@ -3436,14 +3608,14 @@ checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote", - "version_check 0.9.4", + "version_check 0.9.5", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -3456,7 +3628,7 @@ checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.4.1", + "bitflags 2.6.0", "lazy_static", "num-traits", "rand 0.8.5", @@ -3760,7 +3932,7 @@ dependencies = [ "once_cell", "percent-encoding 2.3.1", "pin-project-lite", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "serde_urlencoded", "system-configuration", @@ -3907,7 +4079,7 @@ version = "0.38.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", @@ -3969,7 +4141,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" name = "screenplay" version = "0.1.0" dependencies = [ - "glib", + "glib 0.18.4", "gtk4", ] @@ -4040,22 +4212,22 @@ checksum = "34b623917345a631dc9608d5194cc206b3fe6c3554cd1c75b937e55e285254af" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -4067,7 +4239,7 @@ dependencies = [ "itoa", "memchr", "ryu", - "serde 1.0.209", + "serde 1.0.210", ] [[package]] @@ -4076,7 +4248,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ - "serde 1.0.209", + "serde 1.0.210", ] [[package]] @@ -4088,7 +4260,22 @@ dependencies = [ "form_urlencoded", "itoa", "ryu", - "serde 1.0.209", + "serde 1.0.210", +] + +[[package]] +name = "serde_yml" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59e2dd588bf1597a252c3b920e0143eb99b0f76e4e082f4c92ce34fbc9e71ddd" +dependencies = [ + "indexmap", + "itoa", + "libyml", + "memchr", + "ryu", + "serde 1.0.210", + "version_check 0.9.5", ] [[package]] @@ -4099,7 +4286,7 @@ dependencies = [ "cool_asserts", "nary_tree", "nom", - "serde 1.0.209", + "serde 1.0.210", "thiserror", "typeshare", "uuid 0.8.2", @@ -4162,10 +4349,10 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" name = "simulator" version = "0.1.0" dependencies = [ - "cairo-rs", + "cairo-rs 0.18.3", "fixed", - "gio", - "glib", + "gio 0.18.4", + "glib 0.18.4", "gtk4", "libadwaita", "lights-core", @@ -4195,9 +4382,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "snowflake" @@ -4292,7 +4479,7 @@ dependencies = [ "once_cell", "paste", "percent-encoding 2.3.1", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "sha2", "smallvec", @@ -4326,12 +4513,12 @@ dependencies = [ "atomic-write-file", "dotenvy", "either", - "heck", + "heck 0.4.1", "hex", "once_cell", "proc-macro2", "quote", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "sha2", "sqlx-core", @@ -4351,7 +4538,7 @@ checksum = "e37195395df71fd068f6e2082247891bc11e3289624bbc776a0cdfa1ca7f1ea4" dependencies = [ "atoi", "base64 0.21.5", - "bitflags 2.4.1", + "bitflags 2.6.0", "byteorder", "bytes", "crc", @@ -4374,7 +4561,7 @@ dependencies = [ "percent-encoding 2.3.1", "rand 0.8.5", "rsa", - "serde 1.0.209", + "serde 1.0.210", "sha1", "sha2", "smallvec", @@ -4393,7 +4580,7 @@ checksum = "d6ac0ac3b7ccd10cc96c7ab29791a7dd236bd94021f31eec7ba3d46a74aa1c24" dependencies = [ "atoi", "base64 0.21.5", - "bitflags 2.4.1", + "bitflags 2.6.0", "byteorder", "crc", "dotenvy", @@ -4412,7 +4599,7 @@ dependencies = [ "memchr", "once_cell", "rand 0.8.5", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "sha1", "sha2", @@ -4440,7 +4627,7 @@ dependencies = [ "libsqlite3-sys", "log 0.4.20", "percent-encoding 2.3.1", - "serde 1.0.209", + "serde 1.0.210", "sqlx-core", "tracing", "url 2.5.0", @@ -4489,9 +4676,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -4525,18 +4712,31 @@ version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" dependencies = [ - "cfg-expr", - "heck", + "cfg-expr 0.15.5", + "heck 0.4.1", "pkg-config", "toml", - "version-compare", + "version-compare 0.1.1", +] + +[[package]] +name = "system-deps" +version = "7.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d23aaf9f331227789a99e8de4c91bf46703add012bdfd45fdecdfb2975a005" +dependencies = [ + "cfg-expr 0.17.0", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare 0.2.0", ] [[package]] name = "target-lexicon" -version = "0.12.12" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempdir" @@ -4587,7 +4787,7 @@ checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -4632,7 +4832,7 @@ dependencies = [ "deranged", "itoa", "powerfmt", - "serde 1.0.209", + "serde 1.0.210", "time-core", "time-macros", ] @@ -4686,9 +4886,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.3" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", @@ -4710,7 +4910,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -4766,7 +4966,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ - "serde 1.0.209", + "serde 1.0.210", "serde_spanned", "toml_datetime", "toml_edit 0.20.2", @@ -4774,11 +4974,11 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ - "serde 1.0.209", + "serde 1.0.210", ] [[package]] @@ -4789,7 +4989,7 @@ checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ "indexmap", "toml_datetime", - "winnow", + "winnow 0.5.30", ] [[package]] @@ -4799,10 +4999,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ "indexmap", - "serde 1.0.209", + "serde 1.0.210", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.5.30", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.6.20", ] [[package]] @@ -4831,7 +5042,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] @@ -4915,7 +5126,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f44d1a2f454cb35fbe05b218c410792697e76bd868f48d3a418f2cd1a7d527d6" dependencies = [ "chrono", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "typeshare-annotation", ] @@ -4969,7 +5180,7 @@ version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ - "version_check 0.9.4", + "version_check 0.9.5", ] [[package]] @@ -5083,7 +5294,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ "getrandom", - "serde 1.0.209", + "serde 1.0.210", ] [[package]] @@ -5119,6 +5330,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + [[package]] name = "version_check" version = "0.1.5" @@ -5127,9 +5344,9 @@ checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "visions" @@ -5137,7 +5354,7 @@ version = "0.1.0" dependencies = [ "authdb", "http 1.0.0", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "tokio", "warp", @@ -5195,7 +5412,7 @@ dependencies = [ "percent-encoding 2.3.1", "pin-project", "scoped-tls", - "serde 1.0.209", + "serde 1.0.210", "serde_json", "serde_urlencoded", "tokio", @@ -5238,7 +5455,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", "wasm-bindgen-shared", ] @@ -5272,7 +5489,7 @@ checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5486,6 +5703,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -5522,7 +5748,7 @@ checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.79", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 96c65e1..5c0809c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,8 @@ members = [ "config", "config-derive", "coordinates", + "cyberpunk", + "cyberpunk-slideshow", "cyberpunk-splash", "dashboard", "emseries", diff --git a/cyberpunk-slideshow/Cargo.toml b/cyberpunk-slideshow/Cargo.toml new file mode 100644 index 0000000..24796a7 --- /dev/null +++ b/cyberpunk-slideshow/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "cyberpunk-slideshow" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +cairo-rs = "0.20.1" +cyberpunk = { path = "../cyberpunk" } +gio = "0.20.4" +glib = "0.20.4" +gtk = { version = "0.7", package = "gtk4" } +serde = { version = "1.0.210", features = ["derive"] } +serde_yml = "0.0.12" diff --git a/cyberpunk-slideshow/script.yml b/cyberpunk-slideshow/script.yml new file mode 100644 index 0000000..4cd8498 --- /dev/null +++ b/cyberpunk-slideshow/script.yml @@ -0,0 +1,20 @@ +- text: The distinguishing thing about magic is that it includes some kind of personal element. The person who is performing the magic is relevant to the magic. -- Ted Chang, Marie Brennan + position: top + transition_in: !Fade + duration: + secs: 5 + nanos: 0 +- text: Any sufficiently advanced technology is indistinguishable from magic. -- Arthur C. Clark. + position: middle + transition_in: !Fade + duration: + secs: 5 + nanos: 0 + +- text: Electricity is the closest we get to Magic in this world. + position: middle + transition_in: !Fade + duration: + secs: 5 + nanos: 0 + diff --git a/cyberpunk-slideshow/src/main.rs b/cyberpunk-slideshow/src/main.rs new file mode 100644 index 0000000..43dbf02 --- /dev/null +++ b/cyberpunk-slideshow/src/main.rs @@ -0,0 +1,143 @@ +use std::{fs::File, io::Read, path::Path, rc::Rc, time::Duration}; + +use cyberpunk::{AsymLine, GlowPen, Pen, Text}; +use glib::Object; +use gtk::{glib, prelude::*, subclass::prelude::*}; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug)] +#[serde(rename_all = "lowercase")] +enum TextArea { + Top, + Middle, + Bottom, +} + +#[derive(Serialize, Deserialize, Debug)] +struct Fade { + duration: Duration, +} + +#[derive(Serialize, Deserialize, Debug)] +enum AnimationIn { + Fade(Fade), +} + +#[derive(Serialize, Deserialize, Debug)] +enum AnimationOut { + Fade(Fade), +} + +#[derive(Serialize, Deserialize, Debug)] +struct ScriptElement { + text: String, + position: TextArea, + transition_in: AnimationIn, +} + +#[derive(Serialize, Deserialize, Debug)] +struct Script(Vec); + +impl Script { + fn from_file(path: &Path) -> Result { + let mut buf: Vec = Vec::new(); + let mut f = File::open(path).unwrap(); + f.read_to_end(&mut buf).unwrap(); + let script = serde_yml::from_slice(&buf)?; + Ok(Self(script)) + } + + fn iter<'a>(&'a self) -> impl Iterator { + self.0.iter() + } +} + +#[derive(Default)] +pub struct CyberScreenPrivate {} + +#[glib::object_subclass] +impl ObjectSubclass for CyberScreenPrivate { + const NAME: &'static str = "CyberScreen"; + type Type = CyberScreen; + type ParentType = gtk::DrawingArea; +} + +impl ObjectImpl for CyberScreenPrivate {} +impl WidgetImpl for CyberScreenPrivate {} +impl DrawingAreaImpl for CyberScreenPrivate {} + +glib::wrapper! { + pub struct CyberScreen(ObjectSubclass) @extends gtk::DrawingArea, gtk::Widget; +} + +impl CyberScreen { + pub fn new() -> Self { + let s: Self = Object::builder().build(); + + s.set_draw_func({ + move |_, context, width, height| { + let _ = context.set_source_rgb(0., 0., 0.); + let _ = context.paint(); + + let pen = GlowPen::new(width, height, 2., 8., (0.7, 0., 1.)); + + AsymLine { + orientation: gtk::Orientation::Horizontal, + start_x: 50., + start_y: height as f64 / 2., + start_length: 75., + height: 50., + total_length: 200., + invert: false, + } + .draw(&pen); + pen.stroke(); + + let tracery = pen.finish(); + let _ = context.set_source(tracery); + let _ = context.paint(); + + Text::new("Test text".to_owned(), (0.7, 0., 1.)).draw(&context); + } + }); + + s + } +} + +fn main() { + /* + let script: Script = Script(vec![ScriptElement { + text: "abcdefg".to_owned(), + position: TextArea::Top, + transition_in: AnimationIn::Fade(Fade { + duration: Duration::from_secs(10), + }), + }]); + + println!("{}", serde_yml::to_string(&script).unwrap()); + */ + + let script = Script::from_file(Path::new("./script.yml")).unwrap(); + for element in script.iter() { + println!("{:?}", element); + } + + let app = gtk::Application::builder() + .application_id("com.luminescent-dreams.cyberpunk-slideshow") + .build(); + + app.connect_activate(|app| { + let window = gtk::ApplicationWindow::new(app); + window.present(); + + let screen = CyberScreen::new(); + + window.set_child(Some(&screen)); + window.set_width_request(800); + window.set_height_request(600); + window.present(); + }); + + app.run(); +} diff --git a/cyberpunk-splash/Cargo.toml b/cyberpunk-splash/Cargo.toml index 8bb7aaf..ffe5852 100644 --- a/cyberpunk-splash/Cargo.toml +++ b/cyberpunk-splash/Cargo.toml @@ -8,6 +8,7 @@ license = "GPL-3.0-only" [dependencies] cairo-rs = { version = "0.18" } +cyberpunk = { path = "../cyberpunk" } gio = { version = "0.18" } glib = { version = "0.18" } gtk = { version = "0.7", package = "gtk4" } diff --git a/cyberpunk-splash/src/main.rs b/cyberpunk-splash/src/main.rs index 849bbd3..6fd42d9 100644 --- a/cyberpunk-splash/src/main.rs +++ b/cyberpunk-splash/src/main.rs @@ -419,212 +419,6 @@ impl Splash { } } -struct AsymLineCutout { - orientation: gtk::Orientation, - start_x: f64, - start_y: f64, - start_length: f64, - total_length: f64, - cutout_length: f64, - height: f64, - invert: bool, -} - -impl AsymLineCutout { - fn draw(&self, pen: &impl Pen) { - let dodge = if self.invert { - self.height - } else { - -self.height - }; - match self.orientation { - gtk::Orientation::Horizontal => { - pen.move_to(self.start_x, self.start_y); - pen.line_to(self.start_x + self.start_length, self.start_y); - pen.line_to( - self.start_x + self.start_length + self.height, - self.start_y + dodge, - ); - pen.line_to( - self.start_x + self.start_length + self.height + self.cutout_length, - self.start_y + dodge, - ); - pen.line_to( - self.start_x - + self.start_length - + self.height - + self.cutout_length - + (self.height / 2.), - self.start_y + dodge / 2., - ); - pen.line_to(self.total_length, self.start_y + dodge / 2.); - } - gtk::Orientation::Vertical => { - pen.move_to(self.start_x, self.start_y); - pen.line_to(self.start_x, self.start_y + self.start_length); - pen.line_to( - self.start_x + dodge, - self.start_y + self.start_length + self.height, - ); - pen.line_to( - self.start_x + dodge, - self.start_y + self.start_length + self.height + self.cutout_length, - ); - pen.line_to( - self.start_x + dodge / 2., - self.start_y - + self.start_length - + self.height - + self.cutout_length - + (self.height / 2.), - ); - pen.line_to(self.start_x + dodge / 2., self.total_length); - } - _ => panic!("unknown orientation"), - } - } -} - -struct AsymLine { - orientation: gtk::Orientation, - start_x: f64, - start_y: f64, - start_length: f64, - height: f64, - total_length: f64, - invert: bool, -} - -impl AsymLine { - fn draw(&self, pen: &impl Pen) { - let dodge = if self.invert { - self.height - } else { - -self.height - }; - match self.orientation { - gtk::Orientation::Horizontal => { - pen.move_to(self.start_x, self.start_y); - pen.line_to(self.start_x + self.start_length, self.start_y); - pen.line_to( - self.start_x + self.start_length + self.height, - self.start_y + dodge, - ); - pen.line_to(self.start_x + self.total_length, self.start_y + dodge); - } - gtk::Orientation::Vertical => {} - _ => panic!("unknown orientation"), - } - } -} - -struct SlashMeter { - orientation: gtk::Orientation, - start_x: f64, - start_y: f64, - count: u8, - fill_count: u8, - height: f64, - length: f64, -} - -impl SlashMeter { - fn draw(&self, context: &Context) { - match self.orientation { - gtk::Orientation::Horizontal => { - let angle: f64 = 0.8; - let run = self.height / angle.tan(); - let width = self.length / (self.count as f64 * 2.); - - for c in 0..self.count { - context.set_line_width(1.); - - let start_x = self.start_x + c as f64 * width * 2.; - context.move_to(start_x, self.start_y); - context.line_to(start_x + run, self.start_y - self.height); - context.line_to(start_x + run + width, self.start_y - self.height); - context.line_to(start_x + width, self.start_y); - context.line_to(start_x, self.start_y); - if c < self.fill_count { - let _ = context.fill(); - } else { - let _ = context.stroke(); - } - } - } - gtk::Orientation::Vertical => {} - _ => panic!("unknown orientation"), - } - } -} - -trait Pen { - fn move_to(&self, x: f64, y: f64); - fn line_to(&self, x: f64, y: f64); - fn stroke(&self); - - fn finish(self) -> Pattern; -} - -struct GlowPen { - blur_context: Context, - draw_context: Context, -} - -impl GlowPen { - fn new( - width: i32, - height: i32, - line_width: f64, - blur_line_width: f64, - color: (f64, f64, f64), - ) -> Self { - let blur_context = - Context::new(ImageSurface::create(Format::Rgb24, width, height).unwrap()).unwrap(); - blur_context.set_line_width(blur_line_width); - blur_context.set_source_rgba(color.0, color.1, color.2, 0.5); - blur_context.push_group(); - blur_context.set_line_cap(LineCap::Round); - - let draw_context = - Context::new(ImageSurface::create(Format::Rgb24, width, height).unwrap()).unwrap(); - draw_context.set_line_width(line_width); - draw_context.set_source_rgb(color.0, color.1, color.2); - draw_context.push_group(); - draw_context.set_line_cap(LineCap::Round); - - Self { - blur_context, - draw_context, - } - } -} - -impl Pen for GlowPen { - fn move_to(&self, x: f64, y: f64) { - self.blur_context.move_to(x, y); - self.draw_context.move_to(x, y); - } - - fn line_to(&self, x: f64, y: f64) { - self.blur_context.line_to(x, y); - self.draw_context.line_to(x, y); - } - - fn stroke(&self) { - self.blur_context.stroke().expect("to draw the blur line"); - self.draw_context - .stroke() - .expect("to draw the regular line"); - } - - fn finish(self) -> Pattern { - let foreground = self.draw_context.pop_group().unwrap(); - self.blur_context.set_source(foreground).unwrap(); - self.blur_context.paint().unwrap(); - self.blur_context.pop_group().unwrap() - } -} fn main() { let app = gtk::Application::builder() diff --git a/cyberpunk/Cargo.toml b/cyberpunk/Cargo.toml new file mode 100644 index 0000000..9dc1cd5 --- /dev/null +++ b/cyberpunk/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "cyberpunk" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +cairo-rs = { version = "0.18" } +gio = { version = "0.18" } +glib = { version = "0.18" } +gtk = { version = "0.7", package = "gtk4" } diff --git a/cyberpunk/src/lib.rs b/cyberpunk/src/lib.rs new file mode 100644 index 0000000..3d83443 --- /dev/null +++ b/cyberpunk/src/lib.rs @@ -0,0 +1,262 @@ +use cairo::{ + Context, FontSlant, FontWeight, Format, ImageSurface, LineCap, LinearGradient, Pattern, + TextExtents, +}; +use gtk::{prelude::*, subclass::prelude::*, EventControllerKey}; +use std::{ + cell::RefCell, + rc::Rc, + sync::{Arc, RwLock}, + time::{Duration, Instant}, +}; + +struct AsymLineCutout { + orientation: gtk::Orientation, + start_x: f64, + start_y: f64, + start_length: f64, + total_length: f64, + cutout_length: f64, + height: f64, + invert: bool, +} + +impl AsymLineCutout { + fn draw(&self, pen: &impl Pen) { + let dodge = if self.invert { + self.height + } else { + -self.height + }; + match self.orientation { + gtk::Orientation::Horizontal => { + pen.move_to(self.start_x, self.start_y); + pen.line_to(self.start_x + self.start_length, self.start_y); + pen.line_to( + self.start_x + self.start_length + self.height, + self.start_y + dodge, + ); + pen.line_to( + self.start_x + self.start_length + self.height + self.cutout_length, + self.start_y + dodge, + ); + pen.line_to( + self.start_x + + self.start_length + + self.height + + self.cutout_length + + (self.height / 2.), + self.start_y + dodge / 2., + ); + pen.line_to(self.total_length, self.start_y + dodge / 2.); + } + gtk::Orientation::Vertical => { + pen.move_to(self.start_x, self.start_y); + pen.line_to(self.start_x, self.start_y + self.start_length); + pen.line_to( + self.start_x + dodge, + self.start_y + self.start_length + self.height, + ); + pen.line_to( + self.start_x + dodge, + self.start_y + self.start_length + self.height + self.cutout_length, + ); + pen.line_to( + self.start_x + dodge / 2., + self.start_y + + self.start_length + + self.height + + self.cutout_length + + (self.height / 2.), + ); + pen.line_to(self.start_x + dodge / 2., self.total_length); + } + _ => panic!("unknown orientation"), + } + } +} + +// Represents an asymetrical line that starts at one location, then a 45-degree angle and then +// another line afterwards. +pub struct AsymLine { + // Will this be drawn left-to-right or up-to-down? + pub orientation: gtk::Orientation, + + // Starting address + pub start_x: f64, + pub start_y: f64, + + // Length of the first segment + pub start_length: f64, + + // Height to dodge over to the next section + pub height: f64, + + // Total length of the entire line. + pub total_length: f64, + + // When normal, the angle dodge is upwards. When inverted, the angle dodge is downwards. + pub invert: bool, +} + +impl AsymLine { + pub fn draw(&self, pen: &impl Pen) { + let dodge = if self.invert { + self.height + } else { + -self.height + }; + match self.orientation { + gtk::Orientation::Horizontal => { + pen.move_to(self.start_x, self.start_y); + pen.line_to(self.start_x + self.start_length, self.start_y); + pen.line_to( + self.start_x + self.start_length + self.height, + self.start_y + dodge, + ); + pen.line_to(self.start_x + self.total_length, self.start_y + dodge); + } + gtk::Orientation::Vertical => {} + _ => panic!("unknown orientation"), + } + } +} + +struct SlashMeter { + orientation: gtk::Orientation, + start_x: f64, + start_y: f64, + count: u8, + fill_count: u8, + height: f64, + length: f64, +} + +impl SlashMeter { + fn draw(&self, context: &Context) { + match self.orientation { + gtk::Orientation::Horizontal => { + let angle: f64 = 0.8; + let run = self.height / angle.tan(); + let width = self.length / (self.count as f64 * 2.); + + for c in 0..self.count { + context.set_line_width(1.); + + let start_x = self.start_x + c as f64 * width * 2.; + context.move_to(start_x, self.start_y); + context.line_to(start_x + run, self.start_y - self.height); + context.line_to(start_x + run + width, self.start_y - self.height); + context.line_to(start_x + width, self.start_y); + context.line_to(start_x, self.start_y); + if c < self.fill_count { + let _ = context.fill(); + } else { + let _ = context.stroke(); + } + } + } + gtk::Orientation::Vertical => {} + _ => panic!("unknown orientation"), + } + } +} + +/// Represents a pen for drawing a pattern. This is good for complex patterns that may require +/// multiple identical steps. +pub trait Pen { + /// Move the pen to a location. + fn move_to(&self, x: f64, y: f64); + + /// Draw a line from the current location to the specified destination. + fn line_to(&self, x: f64, y: f64); + + /// Instantiate the line. + fn stroke(&self); + + /// Convert all of the drawing into a pattern that can be painted to a drawing context. + fn finish(self) -> Pattern; +} + +pub struct GlowPen { + blur_context: Context, + draw_context: Context, +} + +impl GlowPen { + pub fn new( + width: i32, + height: i32, + line_width: f64, + blur_line_width: f64, + color: (f64, f64, f64), + ) -> Self { + let blur_context = + Context::new(ImageSurface::create(Format::Rgb24, width, height).unwrap()).unwrap(); + blur_context.set_line_width(blur_line_width); + blur_context.set_source_rgba(color.0, color.1, color.2, 0.5); + blur_context.push_group(); + blur_context.set_line_cap(LineCap::Round); + + let draw_context = + Context::new(ImageSurface::create(Format::Rgb24, width, height).unwrap()).unwrap(); + draw_context.set_line_width(line_width); + draw_context.set_source_rgb(color.0, color.1, color.2); + draw_context.push_group(); + draw_context.set_line_cap(LineCap::Round); + + Self { + blur_context, + draw_context, + } + } +} + +impl Pen for GlowPen { + fn move_to(&self, x: f64, y: f64) { + self.blur_context.move_to(x, y); + self.draw_context.move_to(x, y); + } + + fn line_to(&self, x: f64, y: f64) { + self.blur_context.line_to(x, y); + self.draw_context.line_to(x, y); + } + + fn stroke(&self) { + self.blur_context.stroke().expect("to draw the blur line"); + self.draw_context + .stroke() + .expect("to draw the regular line"); + } + + fn finish(self) -> Pattern { + let foreground = self.draw_context.pop_group().unwrap(); + self.blur_context.set_source(foreground).unwrap(); + self.blur_context.paint().unwrap(); + self.blur_context.pop_group().unwrap() + } +} + +pub struct Text { + content: String, + color: (f64, f64, f64), +} + +impl Text { + pub fn new(content: String, color: (f64, f64, f64)) -> Self { + + Self{ content, color } + } + + pub fn draw(&self, context: &Context) { + context.select_font_face("Alegreya Sans SC", FontSlant::Normal, FontWeight::Bold); + context.set_font_size(64.); + + let extents = context.text_extents(&self.content).unwrap(); + context.move_to(20., extents.height() + 20.); + + context.set_source_rgb(self.color.0, self.color.1, self.color.2); + let _ = context.show_text(&self.content); + } +}