diff --git a/Cargo.lock b/Cargo.lock
index 4473520..2eb1fe9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -24,17 +24,6 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
-[[package]]
-name = "ahash"
-version = "0.7.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
-dependencies = [
- "getrandom 0.2.16",
- "once_cell",
- "version_check",
-]
-
[[package]]
name = "ahash"
version = "0.8.12"
@@ -42,7 +31,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
dependencies = [
"cfg-if",
- "getrandom 0.3.4",
+ "getrandom",
"once_cell",
"version_check",
"zerocopy",
@@ -64,10 +53,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
[[package]]
-name = "allocator-api2"
-version = "0.2.21"
+name = "aligned"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
+checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923"
+dependencies = [
+ "as-slice",
+]
+
+[[package]]
+name = "aligned-vec"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b"
+dependencies = [
+ "equator",
+]
[[package]]
name = "android-activity"
@@ -85,11 +86,20 @@ dependencies = [
"log",
"ndk",
"ndk-context",
- "ndk-sys 0.6.0+11769913",
+ "ndk-sys",
"num_enum",
"thiserror 1.0.69",
]
+[[package]]
+name = "android-build"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cac4c64175d504608cf239756339c07f6384a476f97f20a7043f92920b0b8fd"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
[[package]]
name = "android-properties"
version = "0.2.2"
@@ -106,12 +116,26 @@ dependencies = [
]
[[package]]
-name = "approx"
-version = "0.5.1"
+name = "anyhow"
+version = "1.0.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
+
+[[package]]
+name = "arbitrary"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
+
+[[package]]
+name = "arg_enum_proc_macro"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
dependencies = [
- "num-traits",
+ "proc-macro2",
+ "quote",
+ "syn",
]
[[package]]
@@ -133,12 +157,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
[[package]]
-name = "ash"
-version = "0.37.3+1.3.251"
+name = "as-slice"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a"
+checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516"
dependencies = [
- "libloading 0.7.4",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "ash"
+version = "0.38.0+1.3.281"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
+dependencies = [
+ "libloading",
]
[[package]]
@@ -179,17 +212,6 @@ dependencies = [
"slab",
]
-[[package]]
-name = "async-fs"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5"
-dependencies = [
- "async-lock",
- "blocking",
- "futures-lite",
-]
-
[[package]]
name = "async-io"
version = "2.6.0"
@@ -245,7 +267,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -280,7 +302,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -296,19 +318,77 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
-name = "bit-set"
-version = "0.5.3"
+name = "av-scenechange"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394"
+dependencies = [
+ "aligned",
+ "anyhow",
+ "arg_enum_proc_macro",
+ "arrayvec",
+ "log",
+ "num-rational",
+ "num-traits",
+ "pastey",
+ "rayon",
+ "thiserror 2.0.17",
+ "v_frame",
+ "y4m",
+]
+
+[[package]]
+name = "av1-grain"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8"
+dependencies = [
+ "anyhow",
+ "arrayvec",
+ "log",
+ "nom",
+ "num-rational",
+ "v_frame",
+]
+
+[[package]]
+name = "avif-serialize"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f"
+dependencies = [
+ "arrayvec",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
dependencies = [
"bit-vec",
]
[[package]]
name = "bit-vec"
-version = "0.6.3"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
+
+[[package]]
+name = "bit_field"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6"
[[package]]
name = "bitfield"
@@ -327,7 +407,7 @@ checksum = "6115af052c7914c0cbb97195e5c72cb61c511527250074f5c041d1048b0d8b16"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -342,28 +422,37 @@ version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
+[[package]]
+name = "bitstream-io"
+version = "4.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757"
+dependencies = [
+ "core2",
+]
+
[[package]]
name = "block"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
-[[package]]
-name = "block-buffer"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
-dependencies = [
- "generic-array",
-]
-
[[package]]
name = "block2"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
dependencies = [
- "objc2",
+ "objc2 0.5.2",
+]
+
+[[package]]
+name = "block2"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
+dependencies = [
+ "objc2 0.6.3",
]
[[package]]
@@ -379,18 +468,18 @@ dependencies = [
"piper",
]
+[[package]]
+name = "built"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64"
+
[[package]]
name = "bumpalo"
version = "3.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
-[[package]]
-name = "by_address"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06"
-
[[package]]
name = "bytemuck"
version = "1.24.0"
@@ -408,14 +497,14 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
-name = "byteorder"
-version = "1.5.0"
+name = "byteorder-lite"
+version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
[[package]]
name = "bytes"
@@ -498,12 +587,6 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
-[[package]]
-name = "cfg_aliases"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
-
[[package]]
name = "cfg_aliases"
version = "0.2.1"
@@ -536,9 +619,9 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b7f4aaa047ba3c3630b080bb9860894732ff23e2aee290a418909aa6d5df38f"
dependencies = [
- "objc2",
- "objc2-app-kit",
- "objc2-foundation",
+ "objc2 0.5.2",
+ "objc2-app-kit 0.2.2",
+ "objc2-foundation 0.2.2",
]
[[package]]
@@ -562,10 +645,11 @@ dependencies = [
[[package]]
name = "codespan-reporting"
-version = "0.11.1"
+version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
dependencies = [
+ "serde",
"termcolor",
"unicode-width",
]
@@ -576,37 +660,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
-[[package]]
-name = "com"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6"
-dependencies = [
- "com_macros",
-]
-
-[[package]]
-name = "com_macros"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5"
-dependencies = [
- "com_macros_support",
- "proc-macro2",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "com_macros_support"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
[[package]]
name = "combine"
version = "4.6.7"
@@ -701,37 +754,47 @@ dependencies = [
]
[[package]]
-name = "cosmic-text"
-version = "0.12.1"
+name = "core2"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59fd57d82eb4bfe7ffa9b1cec0c05e2fd378155b47f255a67983cb4afe0e80c2"
+checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "core_maths"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "cosmic-text"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "173852283a9a57a3cbe365d86e74dc428a09c50421477d5ad6fe9d9509e37737"
dependencies = [
"bitflags 2.10.0",
"fontdb",
+ "harfrust",
+ "linebender_resource_handle",
"log",
"rangemap",
- "rayon",
"rustc-hash 1.1.0",
- "rustybuzz",
"self_cell",
+ "skrifa",
+ "smol_str",
"swash",
"sys-locale",
- "ttf-parser 0.21.1",
"unicode-bidi",
"unicode-linebreak",
"unicode-script",
"unicode-segmentation",
]
-[[package]]
-name = "cpufeatures"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
-dependencies = [
- "libc",
-]
-
[[package]]
name = "crc32fast"
version = "1.5.0"
@@ -773,13 +836,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
[[package]]
-name = "crypto-common"
-version = "0.1.6"
+name = "cryoglyph"
+version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+checksum = "08bc795bdbccdbd461736fb163930a009da6597b226d6f6fce33e7a8eb6ec519"
dependencies = [
- "generic-array",
- "typenum",
+ "cosmic-text",
+ "etagere",
+ "lru",
+ "rustc-hash 2.1.1",
+ "wgpu",
]
[[package]]
@@ -794,95 +860,39 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
-[[package]]
-name = "d3d12"
-version = "0.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307"
-dependencies = [
- "bitflags 2.10.0",
- "libloading 0.8.9",
- "winapi",
-]
-
-[[package]]
-name = "dark-light"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a76fa97167fa740dcdbfe18e8895601e1bc36525f09b044e00916e717c03a3c"
-dependencies = [
- "dconf_rs",
- "detect-desktop-environment",
- "dirs",
- "objc",
- "rust-ini",
- "web-sys",
- "winreg",
- "zbus",
-]
-
-[[package]]
-name = "dconf_rs"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b"
-
-[[package]]
-name = "detect-desktop-environment"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810"
-
-[[package]]
-name = "digest"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
-dependencies = [
- "block-buffer",
- "crypto-common",
-]
-
-[[package]]
-name = "dirs"
-version = "4.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
-dependencies = [
- "dirs-sys",
-]
-
-[[package]]
-name = "dirs-sys"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
-dependencies = [
- "libc",
- "redox_users",
- "winapi",
-]
-
[[package]]
name = "dispatch"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+[[package]]
+name = "dispatch2"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
+dependencies = [
+ "bitflags 2.10.0",
+ "objc2 0.6.3",
+]
+
[[package]]
name = "dlib"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
dependencies = [
- "libloading 0.8.9",
+ "libloading",
]
[[package]]
-name = "dlv-list"
-version = "0.3.0"
+name = "document-features"
+version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
+checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
+dependencies = [
+ "litrs",
+]
[[package]]
name = "downcast-rs"
@@ -896,45 +906,6 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
-[[package]]
-name = "drm"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98888c4bbd601524c11a7ed63f814b8825f420514f78e96f752c437ae9cbb5d1"
-dependencies = [
- "bitflags 2.10.0",
- "bytemuck",
- "drm-ffi",
- "drm-fourcc",
- "rustix 0.38.44",
-]
-
-[[package]]
-name = "drm-ffi"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97c98727e48b7ccb4f4aea8cfe881e5b07f702d17b7875991881b41af7278d53"
-dependencies = [
- "drm-sys",
- "rustix 0.38.44",
-]
-
-[[package]]
-name = "drm-fourcc"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4"
-
-[[package]]
-name = "drm-sys"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986"
-dependencies = [
- "libc",
- "linux-raw-sys 0.6.5",
-]
-
[[package]]
name = "either"
version = "1.15.0"
@@ -965,7 +936,27 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
+]
+
+[[package]]
+name = "equator"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc"
+dependencies = [
+ "equator-macro",
+]
+
+[[package]]
+name = "equator-macro"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
]
[[package]]
@@ -1031,10 +1022,19 @@ dependencies = [
]
[[package]]
-name = "fast-srgb8"
-version = "1.0.0"
+name = "exr"
+version = "1.74.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1"
+checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be"
+dependencies = [
+ "bit_field",
+ "half",
+ "lebe",
+ "miniz_oxide",
+ "rayon-core",
+ "smallvec",
+ "zune-inflate",
+]
[[package]]
name = "fastrand"
@@ -1042,6 +1042,26 @@ version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
+[[package]]
+name = "fax"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab"
+dependencies = [
+ "fax_derive",
+]
+
+[[package]]
+name = "fax_derive"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
[[package]]
name = "fdeflate"
version = "0.3.7"
@@ -1074,10 +1094,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8"
[[package]]
-name = "font-types"
-version = "0.7.3"
+name = "foldhash"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3971f9a5ca983419cdc386941ba3b9e1feba01a0ab888adf78739feb2798492"
+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+
+[[package]]
+name = "foldhash"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
+
+[[package]]
+name = "font-types"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5"
dependencies = [
"bytemuck",
]
@@ -1093,16 +1125,16 @@ dependencies = [
[[package]]
name = "fontdb"
-version = "0.16.2"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3"
+checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905"
dependencies = [
"fontconfig-parser",
"log",
"memmap2",
"slotmap",
"tinyvec",
- "ttf-parser 0.20.0",
+ "ttf-parser",
]
[[package]]
@@ -1123,7 +1155,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -1202,7 +1234,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -1235,16 +1267,6 @@ dependencies = [
"slab",
]
-[[package]]
-name = "generic-array"
-version = "0.14.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
-dependencies = [
- "typenum",
- "version_check",
-]
-
[[package]]
name = "gethostname"
version = "1.1.0"
@@ -1255,17 +1277,6 @@ dependencies = [
"windows-link",
]
-[[package]]
-name = "getrandom"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
-
[[package]]
name = "getrandom"
version = "0.3.4"
@@ -1278,6 +1289,16 @@ dependencies = [
"wasip2",
]
+[[package]]
+name = "gif"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
[[package]]
name = "gl_generator"
version = "0.14.0"
@@ -1297,9 +1318,9 @@ checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3"
[[package]]
name = "glow"
-version = "0.13.1"
+version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1"
+checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08"
dependencies = [
"js-sys",
"slotmap",
@@ -1309,9 +1330,9 @@ dependencies = [
[[package]]
name = "glutin_wgl_sys"
-version = "0.5.0"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead"
+checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e"
dependencies = [
"gl_generator",
]
@@ -1337,33 +1358,32 @@ dependencies = [
[[package]]
name = "gpu-allocator"
-version = "0.25.0"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884"
+checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd"
dependencies = [
"log",
"presser",
"thiserror 1.0.69",
- "winapi",
- "windows",
+ "windows 0.58.0",
]
[[package]]
name = "gpu-descriptor"
-version = "0.2.4"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c"
+checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
dependencies = [
"bitflags 2.10.0",
"gpu-descriptor-types",
- "hashbrown 0.14.5",
+ "hashbrown 0.15.5",
]
[[package]]
name = "gpu-descriptor-types"
-version = "0.1.2"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c"
+checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
dependencies = [
"bitflags 2.10.0",
]
@@ -1386,26 +1406,30 @@ checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
dependencies = [
"cfg-if",
"crunchy",
+ "num-traits",
"zerocopy",
]
[[package]]
-name = "hashbrown"
-version = "0.12.3"
+name = "harfrust"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+checksum = "92c020db12c71d8a12a3fe7607873cade3a01a6287e29d540c8723276221b9d8"
dependencies = [
- "ahash 0.7.8",
+ "bitflags 2.10.0",
+ "bytemuck",
+ "core_maths",
+ "read-fonts",
+ "smallvec",
]
[[package]]
name = "hashbrown"
-version = "0.14.5"
+version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
- "ahash 0.8.12",
- "allocator-api2",
+ "foldhash 0.1.5",
]
[[package]]
@@ -1413,20 +1437,8 @@ name = "hashbrown"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
-
-[[package]]
-name = "hassle-rs"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890"
dependencies = [
- "bitflags 2.10.0",
- "com",
- "libc",
- "libloading 0.8.9",
- "thiserror 1.0.69",
- "widestring",
- "winapi",
+ "foldhash 0.2.0",
]
[[package]]
@@ -1479,43 +1491,74 @@ dependencies = [
[[package]]
name = "iced"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88acfabc84ec077eaf9ede3457ffa3a104626d79022a9bf7f296093b1d60c73f"
+version = "0.14.0"
dependencies = [
"iced_core",
+ "iced_debug",
+ "iced_devtools",
"iced_futures",
"iced_renderer",
+ "iced_runtime",
"iced_widget",
"iced_winit",
- "thiserror 1.0.69",
+ "image",
+ "thiserror 2.0.17",
+]
+
+[[package]]
+name = "iced_beacon"
+version = "0.14.0"
+dependencies = [
+ "bincode",
+ "futures",
+ "iced_core",
+ "log",
+ "semver",
+ "serde",
+ "thiserror 2.0.17",
+ "tokio",
]
[[package]]
name = "iced_core"
-version = "0.13.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0013a238275494641bf8f1732a23a808196540dc67b22ff97099c044ae4c8a1c"
+version = "0.14.0"
dependencies = [
"bitflags 2.10.0",
"bytes",
- "dark-light",
"glam",
+ "lilt",
"log",
"num-traits",
- "once_cell",
- "palette",
"rustc-hash 2.1.1",
+ "serde",
"smol_str",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
"web-time",
]
+[[package]]
+name = "iced_debug"
+version = "0.14.0"
+dependencies = [
+ "iced_beacon",
+ "iced_core",
+ "iced_futures",
+ "log",
+]
+
+[[package]]
+name = "iced_devtools"
+version = "0.14.0"
+dependencies = [
+ "iced_debug",
+ "iced_program",
+ "iced_widget",
+ "log",
+]
+
[[package]]
name = "iced_futures"
-version = "0.13.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c04a6745ba2e80f32cf01e034fd00d853aa4f4cd8b91888099cb7aaee0d5d7c"
+version = "0.14.0"
dependencies = [
"futures",
"iced_core",
@@ -1523,27 +1566,12 @@ dependencies = [
"rustc-hash 2.1.1",
"tokio",
"wasm-bindgen-futures",
- "wasm-timer",
-]
-
-[[package]]
-name = "iced_glyphon"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41c3bb56f1820ca252bc1d0994ece33d233a55657c0c263ea7cb16895adbde82"
-dependencies = [
- "cosmic-text",
- "etagere",
- "lru",
- "rustc-hash 2.1.1",
- "wgpu",
+ "wasmtimer",
]
[[package]]
name = "iced_graphics"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba25a18cfa6d5cc160aca7e1b34f73ccdff21680fa8702168c09739767b6c66f"
+version = "0.14.0"
dependencies = [
"bitflags 2.10.0",
"bytemuck",
@@ -1555,47 +1583,49 @@ dependencies = [
"kamadak-exif",
"log",
"lyon_path",
- "once_cell",
"raw-window-handle",
"rustc-hash 2.1.1",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
"unicode-segmentation",
]
+[[package]]
+name = "iced_program"
+version = "0.14.0"
+dependencies = [
+ "iced_graphics",
+ "iced_runtime",
+]
+
[[package]]
name = "iced_renderer"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73558208059f9e622df2bf434e044ee2f838ce75201a023cf0ca3e1244f46c2a"
+version = "0.14.0"
dependencies = [
"iced_graphics",
"iced_tiny_skia",
"iced_wgpu",
"log",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
]
[[package]]
name = "iced_runtime"
-version = "0.13.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "348b5b2c61c934d88ca3b0ed1ed913291e923d086a66fa288ce9669da9ef62b5"
+version = "0.14.0"
dependencies = [
"bytes",
"iced_core",
"iced_futures",
"raw-window-handle",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
]
[[package]]
name = "iced_tiny_skia"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c625d368284fcc43b0b36b176f76eff1abebe7959dd58bd8ce6897d641962a50"
+version = "0.14.0"
dependencies = [
"bytemuck",
"cosmic-text",
+ "iced_debug",
"iced_graphics",
"kurbo",
"log",
@@ -1606,73 +1636,93 @@ dependencies = [
[[package]]
name = "iced_wgpu"
-version = "0.13.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "15708887133671d2bcc6c1d01d1f176f43a64d6cdc3b2bf893396c3ee498295f"
+version = "0.14.0"
dependencies = [
"bitflags 2.10.0",
"bytemuck",
+ "cryoglyph",
"futures",
"glam",
"guillotiere",
- "iced_glyphon",
+ "iced_debug",
"iced_graphics",
"log",
"lyon",
- "once_cell",
"rustc-hash 2.1.1",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
"wgpu",
]
[[package]]
name = "iced_widget"
-version = "0.13.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81429e1b950b0e4bca65be4c4278fea6678ea782030a411778f26fa9f8983e1d"
+version = "0.14.2"
dependencies = [
"iced_renderer",
- "iced_runtime",
+ "log",
"num-traits",
- "once_cell",
"ouroboros",
"rustc-hash 2.1.1",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
"unicode-segmentation",
]
[[package]]
name = "iced_winit"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f44cd4e1c594b6334f409282937bf972ba14d31fedf03c23aa595d982a2fda28"
+version = "0.14.0"
dependencies = [
- "iced_futures",
- "iced_graphics",
- "iced_runtime",
+ "iced_debug",
+ "iced_program",
"log",
+ "mundy",
"rustc-hash 2.1.1",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
"tracing",
"wasm-bindgen-futures",
"web-sys",
- "winapi",
"window_clipboard",
"winit",
]
[[package]]
name = "image"
-version = "0.24.9"
+version = "0.25.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d"
+checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a"
dependencies = [
"bytemuck",
- "byteorder",
+ "byteorder-lite",
"color_quant",
+ "exr",
+ "gif",
+ "image-webp",
+ "moxcms",
"num-traits",
+ "png",
+ "qoi",
+ "ravif",
+ "rayon",
+ "rgb",
+ "tiff",
+ "zune-core 0.5.0",
+ "zune-jpeg 0.5.6",
]
+[[package]]
+name = "image-webp"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3"
+dependencies = [
+ "byteorder-lite",
+ "quick-error",
+]
+
+[[package]]
+name = "imgref"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8"
+
[[package]]
name = "indexmap"
version = "2.12.0"
@@ -1684,12 +1734,23 @@ dependencies = [
]
[[package]]
-name = "instant"
-version = "0.1.13"
+name = "interpolate_name"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
+checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
dependencies = [
- "cfg-if",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "itertools"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
+dependencies = [
+ "either",
]
[[package]]
@@ -1726,7 +1787,7 @@ version = "0.1.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
dependencies = [
- "getrandom 0.3.4",
+ "getrandom",
"libc",
]
@@ -1742,9 +1803,9 @@ dependencies = [
[[package]]
name = "kamadak-exif"
-version = "0.5.5"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef4fc70d0ab7e5b6bafa30216a6b48705ea964cdfc29c050f2412295eba58077"
+checksum = "1130d80c7374efad55a117d715a3af9368f0fa7a2c54573afc15a188cd984837"
dependencies = [
"mutate_once",
]
@@ -1756,7 +1817,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
dependencies = [
"libc",
- "libloading 0.8.9",
+ "libloading",
"pkg-config",
]
@@ -1782,6 +1843,12 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+[[package]]
+name = "lebe"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8"
+
[[package]]
name = "libc"
version = "0.2.177"
@@ -1789,13 +1856,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
[[package]]
-name = "libloading"
-version = "0.7.4"
+name = "libfuzzer-sys"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404"
dependencies = [
- "cfg-if",
- "winapi",
+ "arbitrary",
+ "cc",
]
[[package]]
@@ -1825,24 +1892,39 @@ dependencies = [
"redox_syscall 0.5.18",
]
+[[package]]
+name = "lilt"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f67562e5eff6b20553fa9be1c503356768420994e28f67e3eafe6f41910e57ad"
+dependencies = [
+ "web-time",
+]
+
+[[package]]
+name = "linebender_resource_handle"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4"
+
[[package]]
name = "linux-raw-sys"
version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
-[[package]]
-name = "linux-raw-sys"
-version = "0.6.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7"
-
[[package]]
name = "linux-raw-sys"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
+[[package]]
+name = "litrs"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
+
[[package]]
name = "lock_api"
version = "0.4.14"
@@ -1859,10 +1941,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
[[package]]
-name = "lru"
-version = "0.12.5"
+name = "loop9"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
+checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062"
+dependencies = [
+ "imgref",
+]
+
+[[package]]
+name = "lru"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f"
[[package]]
name = "lyon"
@@ -1934,6 +2025,16 @@ dependencies = [
"regex-automata",
]
+[[package]]
+name = "maybe-rayon"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519"
+dependencies = [
+ "cfg-if",
+ "rayon",
+]
+
[[package]]
name = "memchr"
version = "2.7.6"
@@ -1960,13 +2061,13 @@ dependencies = [
[[package]]
name = "metal"
-version = "0.27.0"
+version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25"
+checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605"
dependencies = [
"bitflags 2.10.0",
"block",
- "core-graphics-types 0.1.3",
+ "core-graphics-types 0.2.0",
"foreign-types",
"log",
"objc",
@@ -1983,6 +2084,52 @@ dependencies = [
"simd-adler32",
]
+[[package]]
+name = "mio"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "moxcms"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80986bbbcf925ebd3be54c26613d861255284584501595cf418320c078945608"
+dependencies = [
+ "num-traits",
+ "pxfm",
+]
+
+[[package]]
+name = "mundy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523813c9e194ec43693805214eb112551f99382115b67f38600d724a692e7e8b"
+dependencies = [
+ "android-build",
+ "async-io",
+ "cfg-if",
+ "dispatch",
+ "futures-channel",
+ "futures-lite",
+ "jni",
+ "ndk-context",
+ "objc2 0.6.3",
+ "objc2-app-kit 0.3.2",
+ "objc2-foundation 0.3.2",
+ "pin-project-lite",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "windows 0.62.2",
+ "zbus",
+]
+
[[package]]
name = "mutate_once"
version = "0.1.2"
@@ -1991,22 +2138,28 @@ checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af"
[[package]]
name = "naga"
-version = "0.19.2"
+version = "27.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843"
+checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8"
dependencies = [
+ "arrayvec",
"bit-set",
"bitflags 2.10.0",
+ "cfg-if",
+ "cfg_aliases",
"codespan-reporting",
+ "half",
+ "hashbrown 0.16.0",
"hexf-parse",
"indexmap",
+ "libm",
"log",
"num-traits",
+ "once_cell",
"rustc-hash 1.1.0",
"spirv",
- "termcolor",
- "thiserror 1.0.69",
- "unicode-xid",
+ "thiserror 2.0.17",
+ "unicode-ident",
]
[[package]]
@@ -2018,7 +2171,7 @@ dependencies = [
"bitflags 2.10.0",
"jni-sys",
"log",
- "ndk-sys 0.6.0+11769913",
+ "ndk-sys",
"num_enum",
"raw-window-handle",
"thiserror 1.0.69",
@@ -2030,15 +2183,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
-[[package]]
-name = "ndk-sys"
-version = "0.5.0+25.2.9519653"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"
-dependencies = [
- "jni-sys",
-]
-
[[package]]
name = "ndk-sys"
version = "0.6.0+11769913"
@@ -2054,26 +2198,45 @@ version = "0.1.0"
dependencies = [
"bitfield",
"iced",
- "iced_graphics",
- "iced_widget",
"thiserror 2.0.17",
"tracing",
"tracing-subscriber",
]
[[package]]
-name = "nix"
-version = "0.29.0"
+name = "new_debug_unreachable"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
+checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
+
+[[package]]
+name = "nix"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
dependencies = [
"bitflags 2.10.0",
"cfg-if",
- "cfg_aliases 0.2.1",
+ "cfg_aliases",
"libc",
"memoffset",
]
+[[package]]
+name = "nom"
+version = "8.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "noop_proc_macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
+
[[package]]
name = "nu-ansi-term"
version = "0.50.3"
@@ -2083,6 +2246,47 @@ dependencies = [
"windows-sys 0.61.2",
]
+[[package]]
+name = "num-bigint"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
+dependencies = [
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.46"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
[[package]]
name = "num-traits"
version = "0.2.19"
@@ -2122,7 +2326,7 @@ dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -2132,7 +2336,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
dependencies = [
"malloc_buf",
- "objc_exception",
]
[[package]]
@@ -2151,6 +2354,15 @@ dependencies = [
"objc2-encode",
]
+[[package]]
+name = "objc2"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05"
+dependencies = [
+ "objc2-encode",
+]
+
[[package]]
name = "objc2-app-kit"
version = "0.2.2"
@@ -2158,13 +2370,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
dependencies = [
"bitflags 2.10.0",
- "block2",
+ "block2 0.5.1",
"libc",
- "objc2",
- "objc2-core-data",
- "objc2-core-image",
- "objc2-foundation",
- "objc2-quartz-core",
+ "objc2 0.5.2",
+ "objc2-core-data 0.2.2",
+ "objc2-core-image 0.2.2",
+ "objc2-foundation 0.2.2",
+ "objc2-quartz-core 0.2.2",
+]
+
+[[package]]
+name = "objc2-app-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
+dependencies = [
+ "bitflags 2.10.0",
+ "block2 0.6.2",
+ "libc",
+ "objc2 0.6.3",
+ "objc2-cloud-kit 0.3.2",
+ "objc2-core-data 0.3.2",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-core-image 0.3.2",
+ "objc2-core-text",
+ "objc2-core-video",
+ "objc2-foundation 0.3.2",
+ "objc2-quartz-core 0.3.2",
]
[[package]]
@@ -2174,10 +2407,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
dependencies = [
"bitflags 2.10.0",
- "block2",
- "objc2",
+ "block2 0.5.1",
+ "objc2 0.5.2",
"objc2-core-location",
- "objc2-foundation",
+ "objc2-foundation 0.2.2",
+]
+
+[[package]]
+name = "objc2-cloud-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c"
+dependencies = [
+ "bitflags 2.10.0",
+ "objc2 0.6.3",
+ "objc2-foundation 0.3.2",
]
[[package]]
@@ -2186,9 +2430,9 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
dependencies = [
- "block2",
- "objc2",
- "objc2-foundation",
+ "block2 0.5.1",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
]
[[package]]
@@ -2198,9 +2442,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
dependencies = [
"bitflags 2.10.0",
- "block2",
- "objc2",
- "objc2-foundation",
+ "block2 0.5.1",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
+]
+
+[[package]]
+name = "objc2-core-data"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa"
+dependencies = [
+ "bitflags 2.10.0",
+ "objc2 0.6.3",
+ "objc2-foundation 0.3.2",
+]
+
+[[package]]
+name = "objc2-core-foundation"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
+dependencies = [
+ "bitflags 2.10.0",
+ "dispatch2",
+ "objc2 0.6.3",
+]
+
+[[package]]
+name = "objc2-core-graphics"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
+dependencies = [
+ "bitflags 2.10.0",
+ "dispatch2",
+ "objc2 0.6.3",
+ "objc2-core-foundation",
+ "objc2-io-surface",
]
[[package]]
@@ -2209,22 +2488,57 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
dependencies = [
- "block2",
- "objc2",
- "objc2-foundation",
+ "block2 0.5.1",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
"objc2-metal",
]
+[[package]]
+name = "objc2-core-image"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006"
+dependencies = [
+ "objc2 0.6.3",
+ "objc2-foundation 0.3.2",
+]
+
[[package]]
name = "objc2-core-location"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
dependencies = [
- "block2",
- "objc2",
+ "block2 0.5.1",
+ "objc2 0.5.2",
"objc2-contacts",
- "objc2-foundation",
+ "objc2-foundation 0.2.2",
+]
+
+[[package]]
+name = "objc2-core-text"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d"
+dependencies = [
+ "bitflags 2.10.0",
+ "objc2 0.6.3",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+]
+
+[[package]]
+name = "objc2-core-video"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6"
+dependencies = [
+ "bitflags 2.10.0",
+ "objc2 0.6.3",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-io-surface",
]
[[package]]
@@ -2240,10 +2554,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
dependencies = [
"bitflags 2.10.0",
- "block2",
+ "block2 0.5.1",
"dispatch",
"libc",
- "objc2",
+ "objc2 0.5.2",
+]
+
+[[package]]
+name = "objc2-foundation"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
+dependencies = [
+ "bitflags 2.10.0",
+ "block2 0.6.2",
+ "libc",
+ "objc2 0.6.3",
+ "objc2-core-foundation",
+]
+
+[[package]]
+name = "objc2-io-surface"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
+dependencies = [
+ "bitflags 2.10.0",
+ "objc2 0.6.3",
+ "objc2-core-foundation",
]
[[package]]
@@ -2252,10 +2590,10 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
dependencies = [
- "block2",
- "objc2",
- "objc2-app-kit",
- "objc2-foundation",
+ "block2 0.5.1",
+ "objc2 0.5.2",
+ "objc2-app-kit 0.2.2",
+ "objc2-foundation 0.2.2",
]
[[package]]
@@ -2265,9 +2603,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
dependencies = [
"bitflags 2.10.0",
- "block2",
- "objc2",
- "objc2-foundation",
+ "block2 0.5.1",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
]
[[package]]
@@ -2277,20 +2615,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
dependencies = [
"bitflags 2.10.0",
- "block2",
- "objc2",
- "objc2-foundation",
+ "block2 0.5.1",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
"objc2-metal",
]
+[[package]]
+name = "objc2-quartz-core"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
+dependencies = [
+ "bitflags 2.10.0",
+ "objc2 0.6.3",
+ "objc2-foundation 0.3.2",
+]
+
[[package]]
name = "objc2-symbols"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
dependencies = [
- "objc2",
- "objc2-foundation",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
]
[[package]]
@@ -2300,15 +2649,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
dependencies = [
"bitflags 2.10.0",
- "block2",
- "objc2",
- "objc2-cloud-kit",
- "objc2-core-data",
- "objc2-core-image",
+ "block2 0.5.1",
+ "objc2 0.5.2",
+ "objc2-cloud-kit 0.2.2",
+ "objc2-core-data 0.2.2",
+ "objc2-core-image 0.2.2",
"objc2-core-location",
- "objc2-foundation",
+ "objc2-foundation 0.2.2",
"objc2-link-presentation",
- "objc2-quartz-core",
+ "objc2-quartz-core 0.2.2",
"objc2-symbols",
"objc2-uniform-type-identifiers",
"objc2-user-notifications",
@@ -2320,9 +2669,9 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
dependencies = [
- "block2",
- "objc2",
- "objc2-foundation",
+ "block2 0.5.1",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
]
[[package]]
@@ -2332,19 +2681,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
dependencies = [
"bitflags 2.10.0",
- "block2",
- "objc2",
+ "block2 0.5.1",
+ "objc2 0.5.2",
"objc2-core-location",
- "objc2-foundation",
-]
-
-[[package]]
-name = "objc_exception"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
-dependencies = [
- "cc",
+ "objc2-foundation 0.2.2",
]
[[package]]
@@ -2363,13 +2703,12 @@ dependencies = [
]
[[package]]
-name = "ordered-multimap"
-version = "0.4.3"
+name = "ordered-float"
+version = "5.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
+checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d"
dependencies = [
- "dlv-list",
- "hashbrown 0.12.3",
+ "num-traits",
]
[[package]]
@@ -2403,7 +2742,7 @@ dependencies = [
"proc-macro2",
"proc-macro2-diagnostics",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -2412,31 +2751,7 @@ version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
dependencies = [
- "ttf-parser 0.25.1",
-]
-
-[[package]]
-name = "palette"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6"
-dependencies = [
- "approx",
- "fast-srgb8",
- "palette_derive",
- "phf",
-]
-
-[[package]]
-name = "palette_derive"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30"
-dependencies = [
- "by_address",
- "proc-macro2",
- "quote",
- "syn 2.0.108",
+ "ttf-parser",
]
[[package]]
@@ -2445,17 +2760,6 @@ version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
-[[package]]
-name = "parking_lot"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
-dependencies = [
- "instant",
- "lock_api",
- "parking_lot_core 0.8.6",
-]
-
[[package]]
name = "parking_lot"
version = "0.12.5"
@@ -2463,21 +2767,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
dependencies = [
"lock_api",
- "parking_lot_core 0.9.12",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
-dependencies = [
- "cfg-if",
- "instant",
- "libc",
- "redox_syscall 0.2.16",
- "smallvec",
- "winapi",
+ "parking_lot_core",
]
[[package]]
@@ -2499,54 +2789,18 @@ version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+[[package]]
+name = "pastey"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec"
+
[[package]]
name = "percent-encoding"
version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
-[[package]]
-name = "phf"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
-dependencies = [
- "phf_macros",
- "phf_shared",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
-dependencies = [
- "phf_shared",
- "rand",
-]
-
-[[package]]
-name = "phf_macros"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216"
-dependencies = [
- "phf_generator",
- "phf_shared",
- "proc-macro2",
- "quote",
- "syn 2.0.108",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
-dependencies = [
- "siphasher",
-]
-
[[package]]
name = "pin-project"
version = "1.1.10"
@@ -2564,7 +2818,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -2598,11 +2852,11 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]]
name = "png"
-version = "0.17.16"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
+checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.10.0",
"crc32fast",
"fdeflate",
"flate2",
@@ -2623,6 +2877,21 @@ dependencies = [
"windows-sys 0.61.2",
]
+[[package]]
+name = "portable-atomic"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
+
+[[package]]
+name = "portable-atomic-util"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
+dependencies = [
+ "portable-atomic",
+]
+
[[package]]
name = "ppv-lite86"
version = "0.2.21"
@@ -2664,7 +2933,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
"version_check",
"yansi",
]
@@ -2674,6 +2943,43 @@ name = "profiling"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773"
+dependencies = [
+ "profiling-procmacros",
+]
+
+[[package]]
+name = "profiling-procmacros"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pxfm"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "qoi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
[[package]]
name = "quick-xml"
@@ -2701,20 +3007,19 @@ checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "rand"
-version = "0.8.5"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
dependencies = [
- "libc",
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
-version = "0.3.1"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
dependencies = [
"ppv-lite86",
"rand_core",
@@ -2722,11 +3027,11 @@ dependencies = [
[[package]]
name = "rand_core"
-version = "0.6.4"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
- "getrandom 0.2.16",
+ "getrandom",
]
[[package]]
@@ -2741,6 +3046,56 @@ version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223"
+[[package]]
+name = "rav1e"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b"
+dependencies = [
+ "aligned-vec",
+ "arbitrary",
+ "arg_enum_proc_macro",
+ "arrayvec",
+ "av-scenechange",
+ "av1-grain",
+ "bitstream-io",
+ "built",
+ "cfg-if",
+ "interpolate_name",
+ "itertools",
+ "libc",
+ "libfuzzer-sys",
+ "log",
+ "maybe-rayon",
+ "new_debug_unreachable",
+ "noop_proc_macro",
+ "num-derive",
+ "num-traits",
+ "paste",
+ "profiling",
+ "rand",
+ "rand_chacha",
+ "simd_helpers",
+ "thiserror 2.0.17",
+ "v_frame",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "ravif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285"
+dependencies = [
+ "avif-serialize",
+ "imgref",
+ "loop9",
+ "quick-error",
+ "rav1e",
+ "rayon",
+ "rgb",
+]
+
[[package]]
name = "raw-window-handle"
version = "0.6.2"
@@ -2769,23 +3124,15 @@ dependencies = [
[[package]]
name = "read-fonts"
-version = "0.22.7"
+version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69aacb76b5c29acfb7f90155d39759a29496aebb49395830e928a9703d2eec2f"
+checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358"
dependencies = [
"bytemuck",
+ "core_maths",
"font-types",
]
-[[package]]
-name = "redox_syscall"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags 1.3.2",
-]
-
[[package]]
name = "redox_syscall"
version = "0.4.1"
@@ -2804,17 +3151,6 @@ dependencies = [
"bitflags 2.10.0",
]
-[[package]]
-name = "redox_users"
-version = "0.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
-dependencies = [
- "getrandom 0.2.16",
- "libredox",
- "thiserror 1.0.69",
-]
-
[[package]]
name = "regex-automata"
version = "0.4.13"
@@ -2838,22 +3174,18 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
+[[package]]
+name = "rgb"
+version = "0.8.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce"
+
[[package]]
name = "roxmltree"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
-[[package]]
-name = "rust-ini"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
-dependencies = [
- "cfg-if",
- "ordered-multimap",
-]
-
[[package]]
name = "rustc-hash"
version = "1.1.0"
@@ -2898,23 +3230,6 @@ version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
-[[package]]
-name = "rustybuzz"
-version = "0.14.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c"
-dependencies = [
- "bitflags 2.10.0",
- "bytemuck",
- "libm",
- "smallvec",
- "ttf-parser 0.21.1",
- "unicode-bidi-mirroring",
- "unicode-ccc",
- "unicode-properties",
- "unicode-script",
-]
-
[[package]]
name = "ryu"
version = "1.0.20"
@@ -2961,6 +3276,16 @@ version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33"
+[[package]]
+name = "semver"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
+dependencies = [
+ "serde",
+ "serde_core",
+]
+
[[package]]
name = "serde"
version = "1.0.228"
@@ -2988,7 +3313,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -3012,18 +3337,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
-]
-
-[[package]]
-name = "sha1"
-version = "0.10.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
+ "syn",
]
[[package]]
@@ -3057,16 +3371,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]]
-name = "siphasher"
-version = "1.0.1"
+name = "simd_helpers"
+version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
+checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6"
+dependencies = [
+ "quote",
+]
[[package]]
name = "skrifa"
-version = "0.22.3"
+version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e1c44ad1f6c5bdd4eefed8326711b7dbda9ea45dfd36068c427d332aa382cbe"
+checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841"
dependencies = [
"bytemuck",
"read-fonts",
@@ -3165,6 +3482,16 @@ dependencies = [
"serde",
]
+[[package]]
+name = "socket2"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
+dependencies = [
+ "libc",
+ "windows-sys 0.60.2",
+]
+
[[package]]
name = "softbuffer"
version = "0.4.6"
@@ -3173,17 +3500,16 @@ checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08"
dependencies = [
"as-raw-xcb-connection",
"bytemuck",
- "cfg_aliases 0.2.1",
+ "cfg_aliases",
"core-graphics 0.24.0",
- "drm",
"fastrand",
"foreign-types",
"js-sys",
"log",
"memmap2",
- "objc2",
- "objc2-foundation",
- "objc2-quartz-core",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
+ "objc2-quartz-core 0.2.2",
"raw-window-handle",
"redox_syscall 0.5.18",
"rustix 0.38.44",
@@ -3206,6 +3532,12 @@ dependencies = [
"bitflags 2.10.0",
]
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+
[[package]]
name = "static_assertions"
version = "1.1.0"
@@ -3226,26 +3558,15 @@ checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb"
[[package]]
name = "swash"
-version = "0.1.19"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbd59f3f359ddd2c95af4758c18270eddd9c730dde98598023cdabff472c2ca2"
+checksum = "47846491253e976bdd07d0f9cc24b7daf24720d11309302ccbbc6e6b6e53550a"
dependencies = [
"skrifa",
"yazi",
"zeno",
]
-[[package]]
-name = "syn"
-version = "1.0.109"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
[[package]]
name = "syn"
version = "2.0.108"
@@ -3273,7 +3594,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
dependencies = [
"fastrand",
- "getrandom 0.3.4",
+ "getrandom",
"once_cell",
"rustix 1.1.2",
"windows-sys 0.61.2",
@@ -3314,7 +3635,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -3325,7 +3646,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -3337,6 +3658,20 @@ dependencies = [
"cfg-if",
]
+[[package]]
+name = "tiff"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f"
+dependencies = [
+ "fax",
+ "flate2",
+ "half",
+ "quick-error",
+ "weezl",
+ "zune-jpeg 0.4.21",
+]
+
[[package]]
name = "tiny-skia"
version = "0.11.4"
@@ -3348,7 +3683,6 @@ dependencies = [
"bytemuck",
"cfg-if",
"log",
- "png",
"tiny-skia-path",
]
@@ -3371,7 +3705,7 @@ checksum = "0324504befd01cab6e0c994f34b2ffa257849ee019d3fb3b64fb2c858887d89e"
dependencies = [
"as-raw-xcb-connection",
"ctor-lite",
- "libloading 0.8.9",
+ "libloading",
"pkg-config",
"tracing",
]
@@ -3397,7 +3731,24 @@ version = "1.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
dependencies = [
+ "bytes",
+ "libc",
+ "mio",
"pin-project-lite",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
]
[[package]]
@@ -3450,7 +3801,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -3506,29 +3857,14 @@ dependencies = [
"tracing-serde",
]
-[[package]]
-name = "ttf-parser"
-version = "0.20.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4"
-
-[[package]]
-name = "ttf-parser"
-version = "0.21.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8"
-
[[package]]
name = "ttf-parser"
version = "0.25.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
-
-[[package]]
-name = "typenum"
-version = "1.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
+dependencies = [
+ "core_maths",
+]
[[package]]
name = "uds_windows"
@@ -3547,18 +3883,6 @@ version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
-[[package]]
-name = "unicode-bidi-mirroring"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86"
-
-[[package]]
-name = "unicode-ccc"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656"
-
[[package]]
name = "unicode-ident"
version = "1.0.20"
@@ -3571,12 +3895,6 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
-[[package]]
-name = "unicode-properties"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d"
-
[[package]]
name = "unicode-script"
version = "0.5.7"
@@ -3596,10 +3914,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]]
-name = "unicode-xid"
-version = "0.2.6"
+name = "uuid"
+version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a"
+dependencies = [
+ "js-sys",
+ "serde_core",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "v_frame"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2"
+dependencies = [
+ "aligned-vec",
+ "num-traits",
+ "wasm-bindgen",
+]
[[package]]
name = "valuable"
@@ -3661,7 +3995,7 @@ dependencies = [
"log",
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
"wasm-bindgen-shared",
]
@@ -3696,7 +4030,7 @@ checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -3711,18 +4045,17 @@ dependencies = [
]
[[package]]
-name = "wasm-timer"
-version = "0.2.5"
+name = "wasmtimer"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
+checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b"
dependencies = [
"futures",
"js-sys",
- "parking_lot 0.11.2",
+ "parking_lot",
"pin-utils",
+ "slab",
"wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
]
[[package]]
@@ -3881,18 +4214,28 @@ dependencies = [
]
[[package]]
-name = "wgpu"
-version = "0.19.4"
+name = "weezl"
+version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01"
+checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
+
+[[package]]
+name = "wgpu"
+version = "27.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77"
dependencies = [
"arrayvec",
+ "bitflags 2.10.0",
"cfg-if",
- "cfg_aliases 0.1.1",
+ "cfg_aliases",
+ "document-features",
+ "hashbrown 0.16.0",
"js-sys",
"log",
"naga",
- "parking_lot 0.12.5",
+ "parking_lot",
+ "portable-atomic",
"profiling",
"raw-window-handle",
"smallvec",
@@ -3907,35 +4250,68 @@ dependencies = [
[[package]]
name = "wgpu-core"
-version = "0.19.4"
+version = "27.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a"
+checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7"
dependencies = [
"arrayvec",
+ "bit-set",
"bit-vec",
"bitflags 2.10.0",
- "cfg_aliases 0.1.1",
- "codespan-reporting",
+ "bytemuck",
+ "cfg_aliases",
+ "document-features",
+ "hashbrown 0.16.0",
"indexmap",
"log",
"naga",
"once_cell",
- "parking_lot 0.12.5",
+ "parking_lot",
+ "portable-atomic",
"profiling",
"raw-window-handle",
"rustc-hash 1.1.0",
"smallvec",
- "thiserror 1.0.69",
- "web-sys",
+ "thiserror 2.0.17",
+ "wgpu-core-deps-apple",
+ "wgpu-core-deps-emscripten",
+ "wgpu-core-deps-windows-linux-android",
"wgpu-hal",
"wgpu-types",
]
[[package]]
-name = "wgpu-hal"
-version = "0.19.5"
+name = "wgpu-core-deps-apple"
+version = "27.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfabcfc55fd86611a855816326b2d54c3b2fd7972c27ce414291562650552703"
+checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233"
+dependencies = [
+ "wgpu-hal",
+]
+
+[[package]]
+name = "wgpu-core-deps-emscripten"
+version = "27.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5"
+dependencies = [
+ "wgpu-hal",
+]
+
+[[package]]
+name = "wgpu-core-deps-windows-linux-android"
+version = "27.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3"
+dependencies = [
+ "wgpu-hal",
+]
+
+[[package]]
+name = "wgpu-hal"
+version = "27.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce"
dependencies = [
"android_system_properties",
"arrayvec",
@@ -3943,56 +4319,57 @@ dependencies = [
"bit-set",
"bitflags 2.10.0",
"block",
- "cfg_aliases 0.1.1",
- "core-graphics-types 0.1.3",
- "d3d12",
+ "bytemuck",
+ "cfg-if",
+ "cfg_aliases",
+ "core-graphics-types 0.2.0",
"glow",
"glutin_wgl_sys",
"gpu-alloc",
"gpu-allocator",
"gpu-descriptor",
- "hassle-rs",
+ "hashbrown 0.16.0",
"js-sys",
"khronos-egl",
"libc",
- "libloading 0.8.9",
+ "libloading",
"log",
"metal",
"naga",
- "ndk-sys 0.5.0+25.2.9519653",
+ "ndk-sys",
"objc",
"once_cell",
- "parking_lot 0.12.5",
+ "ordered-float",
+ "parking_lot",
+ "portable-atomic",
+ "portable-atomic-util",
"profiling",
"range-alloc",
"raw-window-handle",
"renderdoc-sys",
- "rustc-hash 1.1.0",
"smallvec",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
"wasm-bindgen",
"web-sys",
"wgpu-types",
- "winapi",
+ "windows 0.58.0",
+ "windows-core 0.58.0",
]
[[package]]
name = "wgpu-types"
-version = "0.19.2"
+version = "27.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805"
+checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb"
dependencies = [
"bitflags 2.10.0",
+ "bytemuck",
"js-sys",
+ "log",
+ "thiserror 2.0.17",
"web-sys",
]
-[[package]]
-name = "widestring"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
-
[[package]]
name = "winapi"
version = "0.3.9"
@@ -4026,34 +4403,59 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "window_clipboard"
-version = "0.4.1"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6d692d46038c433f9daee7ad8757e002a4248c20b0a3fbc991d99521d3bcb6d"
+checksum = "d5654226305eaf2dde8853fb482861d28e5dcecbbd40cb88e8393d94bb80d733"
dependencies = [
"clipboard-win",
"clipboard_macos",
"clipboard_wayland",
"clipboard_x11",
"raw-window-handle",
- "thiserror 1.0.69",
+ "thiserror 2.0.17",
]
[[package]]
name = "windows"
-version = "0.52.0"
+version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
+checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
dependencies = [
- "windows-core 0.52.0",
+ "windows-core 0.58.0",
"windows-targets 0.52.6",
]
[[package]]
-name = "windows-core"
-version = "0.52.0"
+name = "windows"
+version = "0.62.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
dependencies = [
+ "windows-collections",
+ "windows-core 0.62.2",
+ "windows-future",
+ "windows-numerics",
+]
+
+[[package]]
+name = "windows-collections"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
+dependencies = [
+ "windows-core 0.62.2",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.58.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
+dependencies = [
+ "windows-implement 0.58.0",
+ "windows-interface 0.58.0",
+ "windows-result 0.2.0",
+ "windows-strings 0.1.0",
"windows-targets 0.52.6",
]
@@ -4063,11 +4465,33 @@ version = "0.62.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
dependencies = [
- "windows-implement",
- "windows-interface",
+ "windows-implement 0.60.2",
+ "windows-interface 0.59.3",
"windows-link",
- "windows-result",
- "windows-strings",
+ "windows-result 0.4.1",
+ "windows-strings 0.5.1",
+]
+
+[[package]]
+name = "windows-future"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
+dependencies = [
+ "windows-core 0.62.2",
+ "windows-link",
+ "windows-threading",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.58.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
]
[[package]]
@@ -4078,7 +4502,18 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.58.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
]
[[package]]
@@ -4089,7 +4524,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
]
[[package]]
@@ -4098,6 +4533,25 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+[[package]]
+name = "windows-numerics"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
+dependencies = [
+ "windows-core 0.62.2",
+ "windows-link",
+]
+
+[[package]]
+name = "windows-result"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
[[package]]
name = "windows-result"
version = "0.4.1"
@@ -4107,6 +4561,16 @@ dependencies = [
"windows-link",
]
+[[package]]
+name = "windows-strings"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
+dependencies = [
+ "windows-result 0.2.0",
+ "windows-targets 0.52.6",
+]
+
[[package]]
name = "windows-strings"
version = "0.5.1"
@@ -4143,6 +4607,15 @@ dependencies = [
"windows-targets 0.52.6",
]
+[[package]]
+name = "windows-sys"
+version = "0.60.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
+dependencies = [
+ "windows-targets 0.53.5",
+]
+
[[package]]
name = "windows-sys"
version = "0.61.2"
@@ -4176,13 +4649,39 @@ dependencies = [
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
- "windows_i686_gnullvm",
+ "windows_i686_gnullvm 0.52.6",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
+[[package]]
+name = "windows-targets"
+version = "0.53.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
+dependencies = [
+ "windows-link",
+ "windows_aarch64_gnullvm 0.53.1",
+ "windows_aarch64_msvc 0.53.1",
+ "windows_i686_gnu 0.53.1",
+ "windows_i686_gnullvm 0.53.1",
+ "windows_i686_msvc 0.53.1",
+ "windows_x86_64_gnu 0.53.1",
+ "windows_x86_64_gnullvm 0.53.1",
+ "windows_x86_64_msvc 0.53.1",
+]
+
+[[package]]
+name = "windows-threading"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
+dependencies = [
+ "windows-link",
+]
+
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
@@ -4195,6 +4694,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
+
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
@@ -4207,6 +4712,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
+
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
@@ -4219,12 +4730,24 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+[[package]]
+name = "windows_i686_gnu"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
+
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
+
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
@@ -4237,6 +4760,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+[[package]]
+name = "windows_i686_msvc"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
@@ -4249,6 +4778,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
+
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
@@ -4261,6 +4796,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
+
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
@@ -4273,20 +4814,26 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.53.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
+
[[package]]
name = "winit"
version = "0.30.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732"
dependencies = [
- "ahash 0.8.12",
+ "ahash",
"android-activity",
"atomic-waker",
"bitflags 2.10.0",
- "block2",
+ "block2 0.5.1",
"bytemuck",
"calloop 0.13.0",
- "cfg_aliases 0.2.1",
+ "cfg_aliases",
"concurrent-queue",
"core-foundation 0.9.4",
"core-graphics 0.23.2",
@@ -4296,9 +4843,9 @@ dependencies = [
"libc",
"memmap2",
"ndk",
- "objc2",
- "objc2-app-kit",
- "objc2-foundation",
+ "objc2 0.5.2",
+ "objc2-app-kit 0.2.2",
+ "objc2-foundation 0.2.2",
"objc2-ui-kit",
"orbclient",
"percent-encoding",
@@ -4334,15 +4881,6 @@ dependencies = [
"memchr",
]
-[[package]]
-name = "winreg"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
-dependencies = [
- "winapi",
-]
-
[[package]]
name = "wit-bindgen"
version = "0.46.0"
@@ -4369,7 +4907,7 @@ dependencies = [
"as-raw-xcb-connection",
"gethostname",
"libc",
- "libloading 0.8.9",
+ "libloading",
"once_cell",
"rustix 1.1.2",
"x11rb-protocol",
@@ -4387,16 +4925,6 @@ version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b"
-[[package]]
-name = "xdg-home"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6"
-dependencies = [
- "libc",
- "windows-sys 0.59.0",
-]
-
[[package]]
name = "xkbcommon-dl"
version = "0.4.2"
@@ -4422,6 +4950,12 @@ version = "0.8.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f"
+[[package]]
+name = "y4m"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448"
+
[[package]]
name = "yansi"
version = "1.0.1"
@@ -4430,19 +4964,18 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
[[package]]
name = "yazi"
-version = "0.1.6"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1"
+checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5"
[[package]]
name = "zbus"
-version = "4.4.0"
+version = "5.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725"
+checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91"
dependencies = [
"async-broadcast",
"async-executor",
- "async-fs",
"async-io",
"async-lock",
"async-process",
@@ -4453,20 +4986,17 @@ dependencies = [
"enumflags2",
"event-listener",
"futures-core",
- "futures-sink",
- "futures-util",
+ "futures-lite",
"hex",
"nix",
"ordered-stream",
- "rand",
"serde",
"serde_repr",
- "sha1",
- "static_assertions",
"tracing",
"uds_windows",
- "windows-sys 0.52.0",
- "xdg-home",
+ "uuid",
+ "windows-sys 0.61.2",
+ "winnow",
"zbus_macros",
"zbus_names",
"zvariant",
@@ -4474,33 +5004,36 @@ dependencies = [
[[package]]
name = "zbus_macros"
-version = "4.4.0"
+version = "5.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e"
+checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
+ "zbus_names",
+ "zvariant",
"zvariant_utils",
]
[[package]]
name = "zbus_names"
-version = "3.0.0"
+version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c"
+checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97"
dependencies = [
"serde",
"static_assertions",
+ "winnow",
"zvariant",
]
[[package]]
name = "zeno"
-version = "0.2.3"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697"
+checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524"
[[package]]
name = "zerocopy"
@@ -4519,42 +5052,84 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
+]
+
+[[package]]
+name = "zune-core"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
+
+[[package]]
+name = "zune-core"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "111f7d9820f05fd715df3144e254d6fc02ee4088b0644c0ffd0efc9e6d9d2773"
+
+[[package]]
+name = "zune-inflate"
+version = "0.2.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "zune-jpeg"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713"
+dependencies = [
+ "zune-core 0.4.12",
+]
+
+[[package]]
+name = "zune-jpeg"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f520eebad972262a1dde0ec455bce4f8b298b1e5154513de58c114c4c54303e8"
+dependencies = [
+ "zune-core 0.5.0",
]
[[package]]
name = "zvariant"
-version = "4.2.0"
+version = "5.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe"
+checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c"
dependencies = [
"endi",
"enumflags2",
"serde",
- "static_assertions",
+ "winnow",
"zvariant_derive",
+ "zvariant_utils",
]
[[package]]
name = "zvariant_derive"
-version = "4.2.0"
+version = "5.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449"
+checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "syn",
"zvariant_utils",
]
[[package]]
name = "zvariant_utils"
-version = "2.1.0"
+version = "3.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340"
+checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.108",
+ "serde",
+ "syn",
+ "winnow",
]
diff --git a/Cargo.toml b/Cargo.toml
index dfca184..dd16a74 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -5,9 +5,10 @@ edition = "2024"
[dependencies]
bitfield = "0.19.3"
-iced = { version = "0.13.1", features = ["debug", "canvas", "tokio", "lazy"] }
-iced_graphics = { version = "0.13.0", features = ["geometry", "image"] }
-iced_widget = { version = "0.13.4", features = ["canvas", "image"] }
+# iced = { version = "0.14.0", features = ["debug", "canvas", "tokio", "lazy", "image", "advanced"] }
+iced = { path = "../iced", features = ["debug", "canvas", "tokio", "lazy", "image", "advanced"] }
+# iced_graphics = { version = "0.14.0", features = ["geometry", "image"] }
+# iced_widget = { version = "0.13.4", features = ["canvas", "image"] }
thiserror = "2.0.17"
tracing = "0.1.41"
tracing-subscriber = { version = "0.3.20", features = ["ansi", "chrono", "env-filter", "json", "serde"] }
diff --git a/images/ic_fluent_pause_24_filled.png b/images/ic_fluent_pause_24_filled.png
new file mode 100644
index 0000000..35d40cc
Binary files /dev/null and b/images/ic_fluent_pause_24_filled.png differ
diff --git a/images/ic_fluent_pause_24_filled.svg b/images/ic_fluent_pause_24_filled.svg
new file mode 100644
index 0000000..92aa8cc
--- /dev/null
+++ b/images/ic_fluent_pause_24_filled.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/images/ic_fluent_play_24_filled.png b/images/ic_fluent_play_24_filled.png
new file mode 100644
index 0000000..a6fe7cd
Binary files /dev/null and b/images/ic_fluent_play_24_filled.png differ
diff --git a/images/ic_fluent_play_24_filled.svg b/images/ic_fluent_play_24_filled.svg
new file mode 100644
index 0000000..59ccec0
--- /dev/null
+++ b/images/ic_fluent_play_24_filled.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/src/apu.rs b/src/apu.rs
index 734d48e..d208f93 100644
--- a/src/apu.rs
+++ b/src/apu.rs
@@ -105,9 +105,15 @@ impl APU {
pub fn run_one_clock_cycle(&mut self) -> bool {
false
}
+ pub fn peek_nmi(&self) -> bool {
+ false
+ }
pub fn nmi_waiting(&mut self) -> bool {
false
}
+ pub fn peek_irq(&self) -> bool {
+ false
+ }
pub fn irq_waiting(&mut self) -> bool {
// TODO: implement logic
false
diff --git a/src/debug.rs b/src/debug.rs
index 18ad9b4..0968144 100644
--- a/src/debug.rs
+++ b/src/debug.rs
@@ -18,31 +18,49 @@ impl DebugLog {
}
pub fn rotate(&mut self) {
- let rot = std::mem::take(&mut self.current);
- if let Some(max) = self.max_history {
- if self.history.len() < max.into() {
- self.history.push(rot);
- } else {
- self.history[self.pos] = rot;
- self.pos = (self.pos + 1) % max.get();
- }
- } else {
- self.history.push(rot);
- }
+ // if self.current.len() > 500 {
+ let mut rot = std::mem::take(&mut self.current);
+ self.current = rot.split_off(rot.rfind('\n').unwrap_or(rot.len()));
+ // if let Some(max) = self.max_history {
+ // if self.history.len() < max.into() {
+ // self.history.extend(rot.lines().map(|s| s.to_owned()));
+ // } else {
+ // self.history[self.pos] = rot;
+ // self.pos = (self.pos + 1) % max.get();
+ // }
+ // } else {
+ // self.history.push(rot);
+ self.history.extend(rot.lines().map(|s| s.to_owned()));
+ // }
+ // }
+ }
+
+ // pub fn current(&self) -> &str {
+ // &self.current
+ // }
+
+ pub fn history(&self) -> &[String] {
+ &self.history[self.history.len().saturating_sub(100)..]
}
}
impl std::fmt::Write for DebugLog {
fn write_str(&mut self, s: &str) -> std::fmt::Result {
- self.current.write_str(s)
+ let tmp = self.current.write_str(s);
+ self.rotate();
+ tmp
}
fn write_char(&mut self, c: char) -> std::fmt::Result {
- self.current.write_char(c)
+ let tmp = self.current.write_char(c);
+ self.rotate();
+ tmp
}
fn write_fmt(&mut self, args: std::fmt::Arguments<'_>) -> std::fmt::Result {
- self.current.write_fmt(args)
+ let tmp = self.current.write_fmt(args);
+ self.rotate();
+ tmp
}
}
diff --git a/src/debugger.rs b/src/debugger.rs
new file mode 100644
index 0000000..41e4782
--- /dev/null
+++ b/src/debugger.rs
@@ -0,0 +1,232 @@
+use iced::{
+ Element,
+ Length::Fill,
+ widget::{
+ self, button, checkbox, column, container::bordered_box, image, number_input, row,
+ scrollable, text,
+ },
+};
+
+use crate::{CycleResult, NES};
+
+#[derive(Debug, Clone)]
+pub struct DebuggerState {
+ ppu_cycles: usize,
+ cpu_cycles: usize,
+ instructions: usize,
+ scan_lines: usize,
+ to_scan_line: usize,
+ frames: usize,
+}
+
+#[derive(Debug, Clone)]
+pub enum DebuggerMessage {
+ Run,
+ Pause,
+ SetPPUCycles(usize),
+ RunPPUCycles,
+ SetCPUCycles(usize),
+ RunCPUCycles,
+ SetInstructions(usize),
+ RunInstructions,
+ SetScanLines(usize),
+ RunScanLines,
+ SetToScanLine(usize),
+ RunToScanLine,
+ SetFrames(usize),
+ RunFrames,
+}
+
+impl DebuggerState {
+ pub fn new() -> Self {
+ Self {
+ ppu_cycles: 1,
+ cpu_cycles: 1,
+ instructions: 1,
+ scan_lines: 1,
+ to_scan_line: 1,
+ frames: 1,
+ // cpu_cycles: 1,
+ }
+ }
+
+ pub fn view<'s>(&'s self, nes: &'s NES) -> Element<'s, DebuggerMessage> {
+ column![
+ row![
+ button(image("./images/ic_fluent_play_24_filled.png"))
+ .on_press(DebuggerMessage::Run),
+ button(image("./images/ic_fluent_pause_24_filled.png"))
+ .on_press(DebuggerMessage::Pause),
+ ],
+ iced::widget::rule::horizontal(2.),
+ row![column![
+ text("Status"),
+ row![
+ labelled("A:", text(format!("{:02X}", nes.cpu.a))),
+ labelled("X:", text(format!("{:02X}", nes.cpu.x))),
+ labelled("Y:", text(format!("{:02X}", nes.cpu.y))),
+ labelled("PC:", text(format!("{:04X}", nes.cpu.pc))),
+ labelled("Cycle:", text(format!("{}", nes.cycle))),
+ labelled("SP:", text(format!("{:02X}", nes.cpu.sp))),
+ ]
+ .spacing(5.),
+ row![
+ labelled("P:", text(format!("{:02X}", nes.cpu.status.0))),
+ labelled_box("Carry", nes.cpu.status.carry()),
+ labelled_box("Zero", nes.cpu.status.zero()),
+ labelled_box("Interrupt", nes.cpu.status.interrupt_disable()),
+ labelled_box("--", false),
+ labelled_box("--", false),
+ labelled_box("Overflow", nes.cpu.status.overflow()),
+ labelled_box("Negative", nes.cpu.status.negative()),
+ ]
+ .spacing(5.),
+ row![
+ text("IRQs:"),
+ labelled_box("NMI", nes.peek_nmi()),
+ labelled_box("Cart", false),
+ labelled_box("Frame Counter", false),
+ labelled_box("DMC", false),
+ ]
+ .spacing(5.),
+ row![
+ column![
+ labelled("Cycle", text(nes.ppu.pixel)),
+ labelled("Scanline", text(nes.ppu.scanline)),
+ labelled("PPU Cycle", text(nes.ppu.cycle)),
+ ],
+ column![
+ labelled_box("Sprite 0 Hit", false),
+ labelled_box("Sprite 0 Overflow", false),
+ labelled_box("Vertical Blank", nes.ppu.vblank),
+ labelled_box("Write Toggle", false),
+ labelled_box("", false),
+ labelled_box("Large Sprites", false),
+ labelled_box("Vertical Write", false),
+ labelled_box("NMI on VBlank", false),
+ labelled_box("BG at $1000", false),
+ labelled_box("Sprites at $1000", false),
+ ],
+ column![
+ run_type(
+ "PPU Cycles:",
+ self.ppu_cycles,
+ DebuggerMessage::SetPPUCycles,
+ DebuggerMessage::RunPPUCycles
+ ),
+ run_type(
+ "CPU Cycles:",
+ self.cpu_cycles,
+ DebuggerMessage::SetCPUCycles,
+ DebuggerMessage::RunCPUCycles
+ ),
+ run_type(
+ "Instructions:",
+ self.instructions,
+ DebuggerMessage::SetInstructions,
+ DebuggerMessage::RunInstructions
+ ),
+ run_type(
+ "Scanlines:",
+ self.scan_lines,
+ DebuggerMessage::SetScanLines,
+ DebuggerMessage::RunScanLines
+ ),
+ run_type(
+ "To Scanline:",
+ self.to_scan_line,
+ DebuggerMessage::SetToScanLine,
+ DebuggerMessage::RunToScanLine
+ ),
+ run_type(
+ "Frames:",
+ self.frames,
+ DebuggerMessage::SetFrames,
+ DebuggerMessage::RunFrames
+ ),
+ ],
+ ]
+ .spacing(5.),
+ scrollable(column(
+ nes.debug_log()
+ .history()
+ .into_iter()
+ .rev()
+ .map(|s| text(s).line_height(0.9).into())
+ ).spacing(0))
+ .width(Fill),
+ ],],
+ ]
+ .width(Fill)
+ .height(Fill)
+ .into()
+ }
+
+ fn run_n_clock_cycles(nes: &mut NES, n: usize) {
+ for _ in 0..n {
+ nes.run_one_clock_cycle();
+ }
+ }
+ fn run_until(nes: &mut NES, mut f: impl FnMut(CycleResult, &NES) -> bool) {
+ loop {
+ if f(nes.run_one_clock_cycle(), nes) {
+ break;
+ }
+ }
+ }
+
+ pub fn update(&mut self, message: DebuggerMessage, nes: &mut NES) {
+ match message {
+ DebuggerMessage::SetPPUCycles(n) => self.ppu_cycles = n,
+ DebuggerMessage::SetCPUCycles(n) => self.cpu_cycles = n,
+ DebuggerMessage::SetInstructions(n) => self.instructions = n,
+ DebuggerMessage::SetScanLines(n) => self.scan_lines = n,
+ DebuggerMessage::SetToScanLine(n) => self.to_scan_line = n,
+ DebuggerMessage::SetFrames(n) => self.frames = n,
+ DebuggerMessage::RunPPUCycles => Self::run_n_clock_cycles(nes, self.ppu_cycles),
+ DebuggerMessage::RunCPUCycles => Self::run_n_clock_cycles(nes, self.cpu_cycles * 3),
+ DebuggerMessage::RunInstructions => Self::run_until(nes, |c, _| c.cpu_exec),
+ DebuggerMessage::RunScanLines => Self::run_n_clock_cycles(nes, self.scan_lines * 341),
+ DebuggerMessage::RunToScanLine => {
+ Self::run_until(nes, |_, n| n.ppu.scanline == self.to_scan_line)
+ }
+ DebuggerMessage::RunFrames => Self::run_n_clock_cycles(nes, self.frames * 341 * 261),
+ DebuggerMessage::Run => todo!(),
+ DebuggerMessage::Pause => todo!(),
+ }
+ }
+}
+
+fn run_type<'a, Message: Clone + 'a>(
+ label: &'a str,
+ val: usize,
+ update: impl Fn(usize) -> Message + 'a,
+ run: Message,
+) -> Element<'a, Message> {
+ row![
+ widget::container(text(label)).padding(2.),
+ widget::container(number_input(val).on_input(update)).padding(2.),
+ widget::container(button(image("./images/ic_fluent_play_24_filled.png")).on_press(run))
+ .padding(2.),
+ ]
+ .spacing(1.)
+ .into()
+}
+
+pub fn labelled<'a, Message: 'a>(
+ label: &'a str,
+ content: impl Into>,
+) -> Element<'a, Message> {
+ row![
+ widget::container(text(label)).padding(2.),
+ widget::container(content).style(bordered_box).padding(2.),
+ ]
+ .spacing(1.)
+ .into()
+}
+
+pub fn labelled_box<'a, Message: 'a>(label: &'a str, value: bool) -> Element<'a, Message> {
+ row![checkbox(value), widget::container(text(label)),]
+ .spacing(1.)
+ .into()
+}
diff --git a/src/header_menu.rs b/src/header_menu.rs
index 8fcf958..d408108 100644
--- a/src/header_menu.rs
+++ b/src/header_menu.rs
@@ -1,163 +1,36 @@
-//! Pick lists display a dropdown list of selectable options.
-//!
-//! # Example
-//! ```no_run
-//! # mod iced { pub mod widget { pub use iced_widget::*; } pub use iced_widget::Renderer; pub use iced_widget::core::*; }
-//! # pub type Element<'a, Message> = iced_widget::core::Element<'a, Message, iced_widget::Theme, iced_widget::Renderer>;
-//! #
-//! use iced::widget::pick_list;
-//!
-//! struct State {
-//! favorite: Option,
-//! }
-//!
-//! #[derive(Debug, Clone, Copy, PartialEq, Eq)]
-//! enum Fruit {
-//! Apple,
-//! Orange,
-//! Strawberry,
-//! Tomato,
-//! }
-//!
-//! #[derive(Debug, Clone)]
-//! enum Message {
-//! FruitSelected(Fruit),
-//! }
-//!
-//! fn view(state: &State) -> Element<'_, Message> {
-//! let fruits = [
-//! Fruit::Apple,
-//! Fruit::Orange,
-//! Fruit::Strawberry,
-//! Fruit::Tomato,
-//! ];
-//!
-//! pick_list(
-//! fruits,
-//! state.favorite,
-//! Message::FruitSelected,
-//! )
-//! .placeholder("Select your favorite fruit...")
-//! .into()
-//! }
-//!
-//! fn update(state: &mut State, message: Message) {
-//! match message {
-//! Message::FruitSelected(fruit) => {
-//! state.favorite = Some(fruit);
-//! }
-//! }
-//! }
-//!
-//! impl std::fmt::Display for Fruit {
-//! fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-//! f.write_str(match self {
-//! Self::Apple => "Apple",
-//! Self::Orange => "Orange",
-//! Self::Strawberry => "Strawberry",
-//! Self::Tomato => "Tomato",
-//! })
-//! }
-//! }
-//! ```
-use iced::alignment;
-use iced::event::{self, Event};
-use iced::keyboard;
-// use iced::layout;
-use iced::mouse;
-use iced::overlay;
-// use iced::renderer;
-// use iced::text::paragraph;
-// use iced::text::{self, Text};
-use iced::touch;
-// use iced::widget::tree::{self, Tree};
-use iced::overlay::menu::{self, Menu};
-use iced::{
- Background, Border, Color, Element, Length, Padding, Pixels, Point, Rectangle, Size, Theme,
- Vector,
+use iced::advanced::graphics::core::{keyboard, touch, window};
+use iced::advanced::text::paragraph;
+use iced::advanced::widget::{Tree, tree};
+use iced::advanced::{
+ Clipboard, Layout, Shell, Text, Widget, layout, mouse, overlay, renderer, text,
+};
+use iced::overlay::menu::Menu;
+use iced::{
+ Background, Border, Color, Element, Event, Point, Rectangle, Size, Theme, Vector, alignment,
+};
+use iced::{
+ Length, Padding, Pixels,
+ widget::{button, overlay::menu},
};
-use iced_graphics::core::text::paragraph;
-use iced_graphics::core::widget::{Tree, tree};
-use iced_graphics::core::{Clipboard, Layout, Shell, Text, Widget, layout, renderer, text};
-
use std::borrow::Borrow;
use std::f32;
-/// A widget for selecting a single value from a list of options.
-///
-/// # Example
-/// ```no_run
-/// # mod iced { pub mod widget { pub use iced_widget::*; } pub use iced_widget::Renderer; pub use iced_widget::core::*; }
-/// # pub type Element<'a, Message> = iced_widget::core::Element<'a, Message, iced_widget::Theme, iced_widget::Renderer>;
-/// #
-/// use iced::widget::pick_list;
-///
-/// struct State {
-/// favorite: Option,
-/// }
-///
-/// #[derive(Debug, Clone, Copy, PartialEq, Eq)]
-/// enum Fruit {
-/// Apple,
-/// Orange,
-/// Strawberry,
-/// Tomato,
-/// }
-///
-/// #[derive(Debug, Clone)]
-/// enum Message {
-/// FruitSelected(Fruit),
-/// }
-///
-/// fn view(state: &State) -> Element<'_, Message> {
-/// let fruits = [
-/// Fruit::Apple,
-/// Fruit::Orange,
-/// Fruit::Strawberry,
-/// Fruit::Tomato,
-/// ];
-///
-/// pick_list(
-/// fruits,
-/// state.favorite,
-/// Message::FruitSelected,
-/// )
-/// .placeholder("Select your favorite fruit...")
-/// .into()
-/// }
-///
-/// fn update(state: &mut State, message: Message) {
-/// match message {
-/// Message::FruitSelected(fruit) => {
-/// state.favorite = Some(fruit);
-/// }
-/// }
-/// }
-///
-/// impl std::fmt::Display for Fruit {
-/// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-/// f.write_str(match self {
-/// Self::Apple => "Apple",
-/// Self::Orange => "Orange",
-/// Self::Strawberry => "Strawberry",
-/// Self::Tomato => "Tomato",
-/// })
-/// }
-/// }
-/// ```
-#[allow(missing_debug_implementations)]
-pub struct HeaderMenu<
- 'a,
- T,
- L,
- // V,
- Message,
- Theme = iced::Theme,
- Renderer = iced::Renderer,
-> where
- T: ToString + PartialEq + Clone,
+pub fn header_menu<'a, T, L, Message: Clone>(
+ title: impl ToString,
+ options: L,
+ f: impl Fn(T) -> Message + 'a,
+) -> HeaderMenu<'a, T, L, Message>
+where
+ T: ToString + Clone,
+ L: Borrow<[T]> + 'a,
+{
+ HeaderMenu::new(title, options, f)
+}
+
+pub struct HeaderMenu<'a, T, L, Message, Theme = iced::Theme, Renderer = iced::Renderer>
+where
+ T: ToString + Clone,
L: Borrow<[T]> + 'a,
- // V: Borrow + 'a,
Theme: Catalog,
Renderer: text::Renderer,
{
@@ -176,35 +49,30 @@ pub struct HeaderMenu<
handle: Handle,
class: ::Class<'a>,
menu_class: ::Class<'a>,
+ last_status: Option,
+ menu_height: Length,
}
impl<'a, T, L, Message, Theme, Renderer> HeaderMenu<'a, T, L, Message, Theme, Renderer>
where
- T: ToString + PartialEq + Clone,
+ T: ToString + Clone,
L: Borrow<[T]> + 'a,
- // V: Borrow + 'a,
Message: Clone,
Theme: Catalog,
Renderer: text::Renderer,
{
/// Creates a new [`PickList`] with the given list of options, the current
/// selected value, and the message to produce when an option is selected.
- pub fn new(
- title: impl Into,
- options: L,
- // selected: Option,
- on_click: impl Fn(T) -> Message + 'a,
- ) -> Self {
+ pub fn new(title: impl ToString, options: L, on_select: impl Fn(T) -> Message + 'a) -> Self {
Self {
- title: title.into(),
- on_select: Box::new(on_click),
+ title: title.to_string(),
+ on_select: Box::new(on_select),
on_open: None,
on_close: None,
options,
placeholder: None,
- // selected,
width: Length::Shrink,
- padding: Padding::new(0.1),
+ padding: button::DEFAULT_PADDING,
text_size: None,
text_line_height: text::LineHeight::default(),
text_shaping: text::Shaping::default(),
@@ -212,6 +80,8 @@ where
handle: Handle::default(),
class: ::default(),
menu_class: ::default_menu(),
+ last_status: None,
+ menu_height: Length::Shrink,
}
}
@@ -227,6 +97,12 @@ where
self
}
+ /// Sets the height of the [`Menu`].
+ pub fn menu_height(mut self, menu_height: impl Into) -> Self {
+ self.menu_height = menu_height.into();
+ self
+ }
+
/// Sets the [`Padding`] of the [`PickList`].
pub fn padding>(mut self, padding: P) -> Self {
self.padding = padding.into();
@@ -294,14 +170,27 @@ where
self.menu_class = (Box::new(style) as menu::StyleFn<'a, Theme>).into();
self
}
+
+ /// Sets the style class of the [`PickList`].
+ #[must_use]
+ pub fn class(mut self, class: impl Into<::Class<'a>>) -> Self {
+ self.class = class.into();
+ self
+ }
+
+ /// Sets the style class of the [`Menu`].
+ #[must_use]
+ pub fn menu_class(mut self, class: impl Into<::Class<'a>>) -> Self {
+ self.menu_class = class.into();
+ self
+ }
}
impl<'a, T, L, Message, Theme, Renderer> Widget
for HeaderMenu<'a, T, L, Message, Theme, Renderer>
where
- T: Clone + ToString + PartialEq + 'a,
+ T: Clone + ToString + 'a,
L: Borrow<[T]>,
- // V: Borrow,
Message: Clone + 'a,
Theme: Catalog + 'a,
Renderer: text::Renderer + 'a,
@@ -322,7 +211,7 @@ where
}
fn layout(
- &self,
+ &mut self,
tree: &mut Tree,
renderer: &Renderer,
limits: &layout::Limits,
@@ -344,8 +233,8 @@ where
size: text_size,
line_height: self.text_line_height,
font,
- horizontal_alignment: alignment::Horizontal::Left,
- vertical_alignment: alignment::Vertical::Center,
+ align_x: text::Alignment::Default,
+ align_y: alignment::Vertical::Center,
shaping: self.text_shaping,
wrapping: text::Wrapping::default(),
};
@@ -353,14 +242,14 @@ where
for (option, paragraph) in options.iter().zip(state.options.iter_mut()) {
let label = option.to_string();
- paragraph.update(Text {
+ let _ = paragraph.update(Text {
content: &label,
..option_text
});
}
if let Some(placeholder) = &self.placeholder {
- state.placeholder.update(Text {
+ let _ = state.placeholder.update(Text {
content: placeholder,
..option_text
});
@@ -398,22 +287,22 @@ where
layout::Node::new(size)
}
- fn on_event(
+ fn update(
&mut self,
tree: &mut Tree,
- event: Event,
+ event: &Event,
layout: Layout<'_>,
cursor: mouse::Cursor,
_renderer: &Renderer,
_clipboard: &mut dyn Clipboard,
shell: &mut Shell<'_, Message>,
_viewport: &Rectangle,
- ) -> event::Status {
+ ) {
+ let state = tree.state.downcast_mut::>();
+
match event {
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
| Event::Touch(touch::Event::FingerPressed { .. }) => {
- let state = tree.state.downcast_mut::>();
-
if state.is_open {
// Event wasn't processed by overlay, so cursor was clicked either outside its
// bounds or on the drop-down, either way we close the overlay.
@@ -423,58 +312,30 @@ where
shell.publish(on_close.clone());
}
- event::Status::Captured
+ shell.capture_event();
} else if cursor.is_over(layout.bounds()) {
- // let selected = self.selected.as_ref().map(Borrow::borrow);
-
state.is_open = true;
- // state.hovered_option = self
- // .options
- // .borrow()
- // .iter()
- // .position(|option| Some(option) == selected);
if let Some(on_open) = &self.on_open {
shell.publish(on_open.clone());
}
- event::Status::Captured
- } else {
- event::Status::Ignored
+
+ shell.capture_event();
}
}
Event::Mouse(mouse::Event::WheelScrolled {
delta: mouse::ScrollDelta::Lines { y, .. },
}) => {
- let state = tree.state.downcast_mut::>();
-
if state.keyboard_modifiers.command()
&& cursor.is_over(layout.bounds())
&& !state.is_open
{
- fn find_next<'a, T: PartialEq>(
- selected: &'a T,
- mut options: impl Iterator- ,
- ) -> Option<&'a T> {
- let _ = options.find(|&option| option == selected);
-
- options.next()
- }
-
let options = self.options.borrow();
- let selected = None; // self.selected.as_ref().map(Borrow::borrow);
- let next_option = if y < 0.0 {
- if let Some(selected) = selected {
- find_next(selected, options.iter())
- } else {
- options.first()
- }
- } else if y > 0.0 {
- if let Some(selected) = selected {
- find_next(selected, options.iter().rev())
- } else {
- options.last()
- }
+ let next_option = if *y < 0.0 {
+ options.first()
+ } else if *y > 0.0 {
+ options.last()
} else {
None
};
@@ -483,19 +344,34 @@ where
shell.publish((self.on_select)(next_option.clone()));
}
- event::Status::Captured
- } else {
- event::Status::Ignored
+ shell.capture_event();
}
}
Event::Keyboard(keyboard::Event::ModifiersChanged(modifiers)) => {
- let state = tree.state.downcast_mut::>();
-
- state.keyboard_modifiers = modifiers;
-
- event::Status::Ignored
+ state.keyboard_modifiers = *modifiers;
}
- _ => event::Status::Ignored,
+ _ => {}
+ };
+
+ let status = {
+ let is_hovered = cursor.is_over(layout.bounds());
+
+ if state.is_open {
+ Status::Opened { is_hovered }
+ } else if is_hovered {
+ Status::Hovered
+ } else {
+ Status::Active
+ }
+ };
+
+ if let Event::Window(window::Event::RedrawRequested(_now)) = event {
+ self.last_status = Some(status);
+ } else if self
+ .last_status
+ .is_some_and(|last_status| last_status != status)
+ {
+ shell.request_redraw();
}
}
@@ -524,26 +400,19 @@ where
theme: &Theme,
_style: &renderer::Style,
layout: Layout<'_>,
- cursor: mouse::Cursor,
+ _cursor: mouse::Cursor,
viewport: &Rectangle,
) {
let font = self.font.unwrap_or_else(|| renderer.default_font());
- // let selected = None; // self.selected.as_ref().map(Borrow::borrow);
let state = tree.state.downcast_ref::>();
let bounds = layout.bounds();
- let is_mouse_over = cursor.is_over(bounds);
- // let is_selected = selected.is_some();
- let status = if state.is_open {
- Status::Opened
- } else if is_mouse_over {
- Status::Hovered
- } else {
- Status::Active
- };
-
- let style = Catalog::style(theme, &self.class, status);
+ let style = Catalog::style(
+ theme,
+ &self.class,
+ self.last_status.unwrap_or(Status::Active),
+ );
renderer.fill_quad(
renderer::Quad {
@@ -601,8 +470,8 @@ where
line_height,
font,
bounds: Size::new(bounds.width, f32::from(line_height.to_absolute(size))),
- horizontal_alignment: alignment::Horizontal::Right,
- vertical_alignment: alignment::Vertical::Center,
+ align_x: text::Alignment::Right,
+ align_y: alignment::Vertical::Center,
shaping,
wrapping: text::Wrapping::default(),
},
@@ -610,13 +479,11 @@ where
bounds.x + bounds.width - self.padding.right,
bounds.center_y(),
),
- style.text_color,
+ style.handle_color,
*viewport,
);
}
- // let label = None; // selected.map(ToString::to_string);
-
let text_size = self.text_size.unwrap_or_else(|| renderer.default_size());
renderer.fill_text(
@@ -626,20 +493,16 @@ where
line_height: self.text_line_height,
font,
bounds: Size::new(
- bounds.width - self.padding.horizontal(),
+ bounds.width - self.padding.x(),
f32::from(self.text_line_height.to_absolute(text_size)),
),
- horizontal_alignment: alignment::Horizontal::Left,
- vertical_alignment: alignment::Vertical::Center,
+ align_x: text::Alignment::Default,
+ align_y: alignment::Vertical::Center,
shaping: self.text_shaping,
wrapping: text::Wrapping::default(),
},
Point::new(bounds.x + self.padding.left, bounds.center_y()),
- // if is_selected {
- // style.text_color
- // } else {
- style.placeholder_color,
- // },
+ style.text_color,
*viewport,
);
}
@@ -649,6 +512,7 @@ where
tree: &'b mut Tree,
layout: Layout<'_>,
renderer: &Renderer,
+ viewport: &Rectangle,
translation: Vector,
) -> Option> {
let state = tree.state.downcast_mut::>();
@@ -680,7 +544,12 @@ where
menu = menu.text_size(text_size);
}
- Some(menu.overlay(layout.position() + translation, bounds.height))
+ Some(menu.overlay(
+ layout.position() + translation,
+ *viewport,
+ bounds.height,
+ self.menu_height,
+ ))
} else {
None
}
@@ -690,9 +559,8 @@ where
impl<'a, T, L, Message, Theme, Renderer> From>
for Element<'a, Message, Theme, Renderer>
where
- T: Clone + ToString + PartialEq + 'a,
+ T: Clone + ToString + 'a,
L: Borrow<[T]> + 'a,
- // V: Borrow + 'a,
Message: Clone + 'a,
Theme: Catalog + 'a,
Renderer: text::Renderer + 'a,
@@ -784,11 +652,14 @@ pub enum Status {
/// The [`PickList`] is being hovered.
Hovered,
/// The [`PickList`] is open.
- Opened,
+ Opened {
+ /// Whether the [`PickList`] is hovered, while open.
+ is_hovered: bool,
+ },
}
/// The appearance of a pick list.
-#[derive(Debug, Clone, Copy)]
+#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Style {
/// The text [`Color`] of the pick list.
pub text_color: Color,
@@ -843,7 +714,7 @@ pub fn default(theme: &Theme, status: Status) -> Style {
let active = Style {
text_color: palette.background.weak.text,
background: palette.background.weak.color.into(),
- placeholder_color: palette.background.strong.color,
+ placeholder_color: palette.secondary.base.color,
handle_color: palette.background.weak.text,
border: Border {
radius: 2.0.into(),
@@ -854,7 +725,7 @@ pub fn default(theme: &Theme, status: Status) -> Style {
match status {
Status::Active => active,
- Status::Hovered | Status::Opened => Style {
+ Status::Hovered | Status::Opened { .. } => Style {
border: Border {
color: palette.primary.strong.color,
..active.border
@@ -863,82 +734,3 @@ pub fn default(theme: &Theme, status: Status) -> Style {
},
}
}
-
-/// Creates a new [`PickList`].
-///
-/// Pick lists display a dropdown list of selectable options.
-///
-/// # Example
-/// ```no_run
-/// # mod iced { pub mod widget { pub use iced_widget::*; } pub use iced_widget::Renderer; pub use iced_widget::core::*; }
-/// # pub type Element<'a, Message> = iced_widget::core::Element<'a, Message, iced_widget::Theme, iced_widget::Renderer>;
-/// #
-/// use iced::widget::pick_list;
-///
-/// struct State {
-/// favorite: Option,
-/// }
-///
-/// #[derive(Debug, Clone, Copy, PartialEq, Eq)]
-/// enum Fruit {
-/// Apple,
-/// Orange,
-/// Strawberry,
-/// Tomato,
-/// }
-///
-/// #[derive(Debug, Clone)]
-/// enum Message {
-/// FruitSelected(Fruit),
-/// }
-///
-/// fn view(state: &State) -> Element<'_, Message> {
-/// let fruits = [
-/// Fruit::Apple,
-/// Fruit::Orange,
-/// Fruit::Strawberry,
-/// Fruit::Tomato,
-/// ];
-///
-/// pick_list(
-/// fruits,
-/// state.favorite,
-/// Message::FruitSelected,
-/// )
-/// .placeholder("Select your favorite fruit...")
-/// .into()
-/// }
-///
-/// fn update(state: &mut State, message: Message) {
-/// match message {
-/// Message::FruitSelected(fruit) => {
-/// state.favorite = Some(fruit);
-/// }
-/// }
-/// }
-///
-/// impl std::fmt::Display for Fruit {
-/// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-/// f.write_str(match self {
-/// Self::Apple => "Apple",
-/// Self::Orange => "Orange",
-/// Self::Strawberry => "Strawberry",
-/// Self::Tomato => "Tomato",
-/// })
-/// }
-/// }
-/// ```
-pub fn header_menu<'a, T, L, Message, Theme, Renderer>(
- title: impl Into,
- options: L,
- on_selected: impl Fn(T) -> Message + 'a,
-) -> HeaderMenu<'a, T, L, Message, Theme, Renderer>
-where
- T: ToString + PartialEq + Clone + 'a,
- L: Borrow<[T]> + 'a,
- Message: Clone,
- Theme: Catalog + overlay::menu::Catalog,
- Renderer: text::Renderer,
-{
- HeaderMenu::new(title, options, on_selected)
-}
diff --git a/src/lib.rs b/src/lib.rs
index 21088c8..c2d9696 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,17 +1,17 @@
mod apu;
mod controllers;
pub mod debug;
+pub mod debugger;
pub mod header_menu;
pub mod hex_view;
mod mem;
mod ppu;
-
#[cfg(test)]
mod test_roms;
pub use ppu::{Color, PPU, RenderBuffer};
-use std::{fmt::{Arguments, Write as _}, fs::File, io::Read, path::Path};
+use std::{fmt::Write as _, fs::File, io::Read, path::Path};
use thiserror::Error;
use tracing::{debug, info};
@@ -115,14 +115,14 @@ impl std::fmt::Debug for NES {
bitfield::bitfield! {
pub struct CpuStatus(u8);
- carry, set_carry: 0;
- zero, set_zero: 1;
- interrupt_disable, set_interrupt_disable: 2;
- decimal, set_decimal: 3;
- brk, set_brk: 4;
- php, set_php: 5;
- overflow, set_overflow: 6;
- negative, set_negative: 7;
+ pub carry, set_carry: 0;
+ pub zero, set_zero: 1;
+ pub interrupt_disable, set_interrupt_disable: 2;
+ pub decimal, set_decimal: 3;
+ pub brk, set_brk: 4;
+ pub php, set_php: 5;
+ pub overflow, set_overflow: 6;
+ pub negative, set_negative: 7;
}
impl std::fmt::Debug for CpuStatus {
@@ -151,16 +151,16 @@ impl std::fmt::Debug for CpuStatus {
#[derive(Debug)]
pub struct Cpu {
- a: u8,
- x: u8,
- y: u8,
- pc: u16,
- sp: u8,
- status: CpuStatus,
- clock_state: ClockState,
+ pub a: u8,
+ pub x: u8,
+ pub y: u8,
+ pub pc: u16,
+ pub sp: u8,
+ pub status: CpuStatus,
+ pub clock_state: ClockState,
}
-enum ClockState {
+pub enum ClockState {
ReadInstruction,
ReadOperands {
instruction: u8,
@@ -499,22 +499,38 @@ impl NES {
}),
0x48 => inst!("PHA", 2, || {
- log!("{addr:04X}: PHA | {:02X} -> 01{:02X}", self.cpu.a, self.cpu.sp);
+ log!(
+ "{addr:04X}: PHA | {:02X} -> 01{:02X}",
+ self.cpu.a,
+ self.cpu.sp
+ );
self.push(self.cpu.a);
}),
0x08 => inst!("PHP", 2, || {
- log!("{addr:04X}: PHP | {:02X} -> 01{:02X}", self.cpu.status.0, self.cpu.sp);
+ log!(
+ "{addr:04X}: PHP | {:02X} -> 01{:02X}",
+ self.cpu.status.0,
+ self.cpu.sp
+ );
self.push(self.cpu.status.0 | 0b0011_0000);
}),
0x68 => inst!("PLA", 3, || {
self.cpu.a = self.pop();
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: PLA | {:02X} <- 01{:02X}", self.cpu.a, self.cpu.sp);
+ log!(
+ "{addr:04X}: PLA | {:02X} <- 01{:02X}",
+ self.cpu.a,
+ self.cpu.sp
+ );
}),
0x28 => inst!("PLP", 3, || {
self.cpu.status.0 = self.pop() & 0b1100_1111;
- log!("{addr:04X}: PLP | {:02X} <- 01{:02X}", self.cpu.status.0, self.cpu.sp);
+ log!(
+ "{addr:04X}: PLP | {:02X} <- 01{:02X}",
+ self.cpu.status.0,
+ self.cpu.sp
+ );
}),
// Loads
@@ -540,19 +556,34 @@ impl NES {
self.cpu.a = self.read_abs(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: LDA ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: LDA ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xBD => inst!("LDA abs,x", 1, |low, high| {
self.cpu.a = self.read_abs_x(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: LDA ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: LDA ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xB9 => inst!("LDA abs,y", 1, |low, high| {
self.cpu.a = self.read_abs_y(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: LDA ${:02X}{:02X},y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: LDA ${:02X}{:02X},y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xA1 => inst!("LDA (ind,x)", 4, |off| {
let low = self.read_zp_x(off);
@@ -592,13 +623,23 @@ impl NES {
self.cpu.x = self.read_abs(low, high);
self.cpu.status.set_zero(self.cpu.x == 0);
self.cpu.status.set_negative(self.cpu.x & 0x80 == 0x80);
- log!("{addr:04X}: LDX ${:02X}{:02X} | {:02X}", high, low, self.cpu.x);
+ log!(
+ "{addr:04X}: LDX ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.x
+ );
}),
0xBE => inst!("LDX abs,y", 1, |low, high| {
self.cpu.x = self.read_abs_y(low, high);
self.cpu.status.set_zero(self.cpu.x == 0);
self.cpu.status.set_negative(self.cpu.x & 0x80 == 0x80);
- log!("{addr:04X}: LDX ${:02X}{:02X},y | {:02X}", high, low, self.cpu.x);
+ log!(
+ "{addr:04X}: LDX ${:02X}{:02X},y | {:02X}",
+ high,
+ low,
+ self.cpu.x
+ );
}),
0xA0 => inst!("LDY imm", 0, |y| {
self.cpu.y = y;
@@ -622,13 +663,23 @@ impl NES {
self.cpu.y = self.read_abs(low, high);
self.cpu.status.set_zero(self.cpu.y == 0);
self.cpu.status.set_negative(self.cpu.y & 0x80 == 0x80);
- log!("{addr:04X}: LDY ${:02X}{:02X} | {:02X}", high, low, self.cpu.y);
+ log!(
+ "{addr:04X}: LDY ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.y
+ );
}),
0xBC => inst!("LDX abs,x", 1, |low, high| {
self.cpu.y = self.read_abs_x(low, high);
self.cpu.status.set_zero(self.cpu.y == 0);
self.cpu.status.set_negative(self.cpu.y & 0x80 == 0x80);
- log!("{addr:04X}: LDY ${:02X}{:02X},x | {:02X}", high, low, self.cpu.y);
+ log!(
+ "{addr:04X}: LDY ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.y
+ );
}),
// Stores
@@ -642,15 +693,30 @@ impl NES {
}),
0x8D => inst!("STA abs", 1, |low, high| {
self.write_abs(low, high, self.cpu.a);
- log!("{addr:04X}: STA ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: STA ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x9D => inst!("STA abs,x", 1, |low, high| {
self.write_abs_x(low, high, self.cpu.a);
- log!("{addr:04X}: STA ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: STA ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x99 => inst!("STA abs,y", 1, |low, high| {
self.write_abs_y(low, high, self.cpu.a);
- log!("{addr:04X}: STA ${:02X}{:02X},y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: STA ${:02X}{:02X},y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x81 => inst!("STA (ind,x)", 4, |off| {
let low = self.read_zp_x(off);
@@ -677,7 +743,12 @@ impl NES {
}),
0x8E => inst!("STX abs", 1, |low, high| {
self.write_abs(low, high, self.cpu.x);
- log!("{addr:04X}: STX ${:02X}{:02X} | {:02X}", high, low, self.cpu.x);
+ log!(
+ "{addr:04X}: STX ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.x
+ );
}),
0x84 => inst!("STY zp", 1, |off| {
self.write(off as u16, self.cpu.y);
@@ -689,7 +760,12 @@ impl NES {
}),
0x8C => inst!("STY abs", 1, |low, high| {
self.write_abs(low, high, self.cpu.y);
- log!("{addr:04X}: STY ${:02X}{:02X} | {:02X}", high, low, self.cpu.y);
+ log!(
+ "{addr:04X}: STY ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.y
+ );
}),
// Transfers
@@ -804,7 +880,13 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.a >= val);
- log!("{addr:04X}: CMP #${:02X} | {:02X} - {:02X} -> {:?}", val, self.cpu.a, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CMP #${:02X} | {:02X} - {:02X} -> {:?}",
+ val,
+ self.cpu.a,
+ val,
+ self.cpu.status
+ );
}),
0xC5 => inst!("CMP zp", 1, |off| {
let val = self.read_abs(off, 0);
@@ -812,7 +894,13 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.a >= val);
- log!("{addr:04X}: CMP ${:02X} | {:02X} - {:02X} -> {:?}", off, self.cpu.a, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CMP ${:02X} | {:02X} - {:02X} -> {:?}",
+ off,
+ self.cpu.a,
+ val,
+ self.cpu.status
+ );
}),
0xD5 => inst!("CMP zp,x", 2, |off| {
let val = self.read_zp_x(off);
@@ -820,7 +908,13 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.a >= val);
- log!("{addr:04X}: CMP ${:02X},x | {:02X} - {:02X} -> {:?}", off, self.cpu.a, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CMP ${:02X},x | {:02X} - {:02X} -> {:?}",
+ off,
+ self.cpu.a,
+ val,
+ self.cpu.status
+ );
}),
0xCD => inst!("CMP abs", 1, |low, high| {
let val = self.read_abs(low, high);
@@ -828,7 +922,14 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.a >= val);
- log!("{addr:04X}: CMP ${:02X}{:02X} | {:02X} - {:02X} -> {:?}", high, low, self.cpu.a, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CMP ${:02X}{:02X} | {:02X} - {:02X} -> {:?}",
+ high,
+ low,
+ self.cpu.a,
+ val,
+ self.cpu.status
+ );
}),
0xDD => inst!("CMP abs,x", 1, |low, high| {
let val = self.read_abs_x(low, high);
@@ -836,7 +937,14 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.a >= val);
- log!("{addr:04X}: CMP ${:02X}{:02X},x | {:02X} - {:02X} -> {:?}", high, low, self.cpu.a, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CMP ${:02X}{:02X},x | {:02X} - {:02X} -> {:?}",
+ high,
+ low,
+ self.cpu.a,
+ val,
+ self.cpu.status
+ );
}),
0xD9 => inst!("CMP abs,y", 1, |low, high| {
let val = self.read_abs_y(low, high);
@@ -844,14 +952,27 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.a >= val);
- log!("{addr:04X}: CMP ${:02X}{:02X},y | {:02X} - {:02X} -> {:?}", high, low, self.cpu.a, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CMP ${:02X}{:02X},y | {:02X} - {:02X} -> {:?}",
+ high,
+ low,
+ self.cpu.a,
+ val,
+ self.cpu.status
+ );
}),
0xE0 => inst!("CPX imm", 0, |val| {
let v = self.cpu.x.wrapping_sub(val);
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.x >= val);
- log!("{addr:04X}: CPX #${:02X} | {:02X} - {:02X} -> {:?}", val, self.cpu.x, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CPX #${:02X} | {:02X} - {:02X} -> {:?}",
+ val,
+ self.cpu.x,
+ val,
+ self.cpu.status
+ );
}),
0xE4 => inst!("CPX zp", 1, |off| {
let val = self.read_abs(off, 0);
@@ -859,7 +980,13 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.x >= val);
- log!("{addr:04X}: CPX ${:02X} | {:02X} - {:02X} -> {:?}", off, self.cpu.x, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CPX ${:02X} | {:02X} - {:02X} -> {:?}",
+ off,
+ self.cpu.x,
+ val,
+ self.cpu.status
+ );
}),
0xEC => inst!("CPX abs", 1, |low, high| {
let val = self.read_abs(low, high);
@@ -867,14 +994,27 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.x >= val);
- log!("{addr:04X}: CPX ${:02X}{:02X} | {:02X} - {:02X} -> {:?}", high, low, self.cpu.x, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CPX ${:02X}{:02X} | {:02X} - {:02X} -> {:?}",
+ high,
+ low,
+ self.cpu.x,
+ val,
+ self.cpu.status
+ );
}),
0xC0 => inst!("CPY imm", 0, |val| {
let v = self.cpu.y.wrapping_sub(val);
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.y >= val);
- log!("{addr:04X}: CPY #${:02X} | {:02X} - {:02X} -> {:?}", val, self.cpu.y, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CPY #${:02X} | {:02X} - {:02X} -> {:?}",
+ val,
+ self.cpu.y,
+ val,
+ self.cpu.status
+ );
}),
0xC4 => inst!("CPY zp", 1, |off| {
let val = self.read_abs(off, 0);
@@ -882,7 +1022,13 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.y >= val);
- log!("{addr:04X}: CPY ${:02X} | {:02X} - {:02X} -> {:?}", off, self.cpu.y, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CPY ${:02X} | {:02X} - {:02X} -> {:?}",
+ off,
+ self.cpu.y,
+ val,
+ self.cpu.status
+ );
}),
0xCC => inst!("CPY zp", 1, |low, high| {
let val = self.read_abs(low, high);
@@ -890,7 +1036,14 @@ impl NES {
self.cpu.status.set_zero(v == 0);
self.cpu.status.set_negative(v & 0x80 == 0x80);
self.cpu.status.set_carry(self.cpu.y >= val);
- log!("{addr:04X}: CPY ${:02X}{:02X} | {:02X} - {:02X} -> {:?}", high, low, self.cpu.y, val, self.cpu.status);
+ log!(
+ "{addr:04X}: CPY ${:02X}{:02X} | {:02X} - {:02X} -> {:?}",
+ high,
+ low,
+ self.cpu.y,
+ val,
+ self.cpu.status
+ );
}),
// Arithmetic
@@ -943,7 +1096,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ADC ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ADC ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x7D => inst!("ADC abs,x", 0, |low, high| {
let val = self.read_abs_x(low, high);
@@ -956,7 +1114,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ADC ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ADC ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x79 => inst!("ADC abs,y", 0, |low, high| {
let val = self.read_abs_y(low, high);
@@ -969,7 +1132,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ADC ${:02X}{:02X},y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ADC ${:02X}{:02X},y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x61 => inst!("ADC (ind,x)", 0, |off| {
let low = self.read_abs(off, 0);
@@ -984,7 +1152,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ADC (${:02X}{:02X},x) | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ADC (${:02X}{:02X},x) | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x71 => inst!("ADC (ind),y", 0, |off| {
let low = self.read_abs(off, 0);
@@ -999,7 +1172,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ADC (${:02X}{:02X}),y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ADC (${:02X}{:02X}),y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xE9 => inst!("SBC imm", 0, |val| {
let (a, carry_1) = self.cpu.a.overflowing_add(!val);
@@ -1050,7 +1228,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: SBC ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: SBC ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xFD => inst!("SBC abs,x", 0, |low, high| {
let val = self.read_abs_x(low, high);
@@ -1063,7 +1246,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: SBC ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: SBC ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xF9 => inst!("SBC abs,y", 0, |low, high| {
let val = self.read_abs_y(low, high);
@@ -1076,7 +1264,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: SBC ${:02X}{:02X},y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: SBC ${:02X}{:02X},y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xE1 => inst!("SBC (ind,x)", 0, |off| {
let low = self.read_abs(off, 0);
@@ -1091,7 +1284,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: SBC (${:02X}{:02X},x) | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: SBC (${:02X}{:02X},x) | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xF1 => inst!("SBC (ind),y", 0, |off| {
let low = self.read_abs(off, 0);
@@ -1106,7 +1304,12 @@ impl NES {
self.cpu.status.set_carry(carry_1 | carry_2);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: SBC (${:02X}{:02X}),y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: SBC (${:02X}{:02X}),y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xC6 => inst!("DEC zp", 3, |off| {
let val = self.read_abs(off, 0).wrapping_sub(1);
@@ -1127,14 +1330,24 @@ impl NES {
self.write_abs(low, high, val);
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(val & 0x80 == 0x80);
- log!("{addr:04X}: DEC ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: DEC ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xDE => inst!("DEC abs,x", 3, |low, high| {
let val = self.read_abs_x(low, high).wrapping_sub(1);
self.write_abs_x(low, high, val);
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(val & 0x80 == 0x80);
- log!("{addr:04X}: DEC ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: DEC ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xCA => inst!("DEX", 1, || {
self.cpu.x = self.cpu.x.wrapping_sub(1);
@@ -1167,14 +1380,24 @@ impl NES {
self.write_abs(low, high, val);
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(val & 0x80 == 0x80);
- log!("{addr:04X}: INC ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: INC ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xFE => inst!("INC abs,x", 3, |low, high| {
let val = self.read_abs_x(low, high).wrapping_add(1);
self.write_abs_x(low, high, val);
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(val & 0x80 == 0x80);
- log!("{addr:04X}: INC ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: INC ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xE8 => inst!("INX", 1, || {
self.cpu.x = self.cpu.x.wrapping_add(1);
@@ -1212,19 +1435,34 @@ impl NES {
self.cpu.a |= self.read_abs(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ORA ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ORA ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x1D => inst!("ORA abs,x", 2, |low, high| {
self.cpu.a |= self.read_abs_x(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ORA ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ORA ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x19 => inst!("ORA abs,y", 1, |low, high| {
self.cpu.a |= self.read_abs_y(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ORA ${:02X}{:02X},y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ORA ${:02X}{:02X},y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x01 => inst!("ORA (ind,x)", 4, |off| {
let low = self.read_zp_x(off);
@@ -1232,7 +1470,12 @@ impl NES {
self.cpu.a |= self.read_abs(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ORA (${:02X}{:02X},x) | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ORA (${:02X}{:02X},x) | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x11 => inst!("ORA (ind),y", 4, |off| {
let low = self.read_abs(off, 0);
@@ -1240,7 +1483,12 @@ impl NES {
self.cpu.a |= self.read(u16::from_le_bytes([low, high]) + self.cpu.y as u16);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: ORA (${:02X}{:02X}),y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ORA (${:02X}{:02X}),y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x29 => inst!("AND imm", 0, |val| {
self.cpu.a &= val;
@@ -1264,19 +1512,34 @@ impl NES {
self.cpu.a &= self.read_abs(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: AND ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: AND ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x3D => inst!("AND abs,x", 2, |low, high| {
self.cpu.a &= self.read_abs_x(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: AND ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: AND ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x39 => inst!("AND abs,y", 1, |low, high| {
self.cpu.a &= self.read_abs_y(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: AND ${:02X}{:02X},y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: AND ${:02X}{:02X},y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x21 => inst!("AND (ind,x)", 4, |off| {
let low = self.read_zp_x(off);
@@ -1284,7 +1547,12 @@ impl NES {
self.cpu.a &= self.read_abs(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: AND (${:02X}{:02X},x) | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: AND (${:02X}{:02X},x) | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x31 => inst!("AND (ind),y", 4, |off| {
let low = self.read_abs(off, 0);
@@ -1292,7 +1560,12 @@ impl NES {
self.cpu.a &= self.read(u16::from_le_bytes([low, high]) + self.cpu.y as u16);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: AND (${:02X}{:02X}),y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: AND (${:02X}{:02X}),y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x49 => inst!("EOR imm", 0, |val| {
self.cpu.a ^= val;
@@ -1316,19 +1589,34 @@ impl NES {
self.cpu.a ^= self.read_abs(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: EOR ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: EOR ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x5D => inst!("EOR abs,x", 1, |low, high| {
self.cpu.a ^= self.read_abs_x(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: EOR ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: EOR ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x59 => inst!("EOR abs,y", 1, |low, high| {
self.cpu.a ^= self.read_abs_y(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: EOR ${:02X}{:02X},y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: EOR ${:02X}{:02X},y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x41 => inst!("EOR (ind,x)", 4, |off| {
let low = self.read_zp_x(off);
@@ -1336,7 +1624,12 @@ impl NES {
self.cpu.a ^= self.read_abs(low, high);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: EOR (${:02X}{:02X},x) | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: EOR (${:02X}{:02X},x) | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x51 => inst!("EOR (ind),y", 3, |off| {
let low = self.read_abs(off, 0);
@@ -1344,21 +1637,31 @@ impl NES {
self.cpu.a ^= self.read(u16::from_le_bytes([low, high]) + self.cpu.y as u16);
self.cpu.status.set_zero(self.cpu.a == 0);
self.cpu.status.set_negative(self.cpu.a & 0x80 == 0x80);
- log!("{addr:04X}: EOR (${:02X}{:02X}),y | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: EOR (${:02X}{:02X}),y | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x24 => inst!("BIT zp", 1, |off| {
- let val = self.cpu.a & self.read_abs(off, 0);
+ let val = self.read_abs(off, 0);
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_overflow(val & 0x40 == 0x40);
self.cpu.status.set_negative(val & 0x80 == 0x80);
- log!("{addr:04X}: BIT ${:02X} | {:02X}", off, self.cpu.a);
+ log!("{addr:04X}: BIT ${:02X} | {:02X}", off, val);
}),
0x2C => inst!("BIT abs", 1, |low, high| {
- let val = self.cpu.a & self.read_abs(low, high);
+ let val = self.read_abs(low, high);
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_overflow(val & 0x40 == 0x40);
self.cpu.status.set_negative(val & 0x80 == 0x80);
- log!("{addr:04X}: BIT ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: BIT ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ val
+ );
}),
// Shifts
@@ -1394,7 +1697,12 @@ impl NES {
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(false);
self.write_abs(low, high, val);
- log!("{addr:04X}: LSR ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: LSR ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x5E => inst!("LSR abs,x", 4, |low, high| {
let val = self.read_abs_x(low, high);
@@ -1403,7 +1711,12 @@ impl NES {
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(false);
self.write_abs_x(low, high, val);
- log!("{addr:04X}: LSR ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: LSR ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x0A => inst!("ASL A", 1, || {
self.cpu.status.set_carry(self.cpu.a & 0x80 == 0x80);
@@ -1437,7 +1750,12 @@ impl NES {
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(false);
self.write_abs(low, high, val);
- log!("{addr:04X}: ASL ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ASL ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x1E => inst!("ASL abs,x", 4, |low, high| {
let val = self.read_abs_x(low, high);
@@ -1446,7 +1764,12 @@ impl NES {
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(false);
self.write_abs_x(low, high, val);
- log!("{addr:04X}: ASL ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ASL ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x6A => inst!("ROR A", 1, || {
let old_carry = if self.cpu.status.carry() { 0x80 } else { 0x00 };
@@ -1484,7 +1807,12 @@ impl NES {
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(false);
self.write_abs(low, high, val);
- log!("{addr:04X}: ROR ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ROR ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x7E => inst!("ROR abs,x", 4, |low, high| {
let old_carry = if self.cpu.status.carry() { 0x80 } else { 0x00 };
@@ -1494,7 +1822,12 @@ impl NES {
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(false);
self.write_abs_x(low, high, val);
- log!("{addr:04X}: ROR ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ROR ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x2A => inst!("ROL A", 1, || {
let old_carry = if self.cpu.status.carry() { 0x01 } else { 0x00 };
@@ -1532,7 +1865,12 @@ impl NES {
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(false);
self.write_abs(low, high, val);
- log!("{addr:04X}: ROL ${:02X}{:02X} | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ROL ${:02X}{:02X} | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0x3E => inst!("ROL abs,x", 4, |low, high| {
let old_carry = if self.cpu.status.carry() { 0x01 } else { 0x00 };
@@ -1542,7 +1880,12 @@ impl NES {
self.cpu.status.set_zero(val == 0);
self.cpu.status.set_negative(false);
self.write_abs_x(low, high, val);
- log!("{addr:04X}: ROL ${:02X}{:02X},x | {:02X}", high, low, self.cpu.a);
+ log!(
+ "{addr:04X}: ROL ${:02X}{:02X},x | {:02X}",
+ high,
+ low,
+ self.cpu.a
+ );
}),
0xEA => inst!("NOP", 1, || {
@@ -1556,6 +1899,13 @@ impl NES {
self.peek(self.cpu.pc)
}
+ pub fn peek_nmi(&self) -> bool {
+ self.ppu.peek_nmi() || self.apu.peek_nmi()
+ }
+ pub fn peek_irq(&self) -> bool {
+ self.ppu.peek_irq() || self.apu.peek_irq()
+ }
+
fn clock_cpu(&mut self) {
self.cpu.clock_state = match self.cpu.clock_state {
ClockState::HoldNmi { cycles } => {
diff --git a/src/main.rs b/src/main.rs
index d3f5ac8..570f73c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,15 +1,12 @@
use std::{
collections::HashMap,
fmt,
- io::{Read, stdin},
};
use iced::{
Color, Element, Font,
Length::Fill,
- Point, Renderer, Size, Subscription, Task, Theme, Vector,
- futures::io::Window,
- mouse,
+ Point, Renderer, Size, Subscription, Task, Theme, mouse,
widget::{
Canvas, button,
canvas::{Frame, Program},
@@ -18,13 +15,13 @@ use iced::{
window::{self, Id, Settings},
};
use nes_emu::{
- NES, PPU, RenderBuffer,
- header_menu::header_menu,
- hex_view::{self, HexEvent, HexView},
+ debugger::{DebuggerMessage, DebuggerState}, header_menu::header_menu, hex_view::{HexEvent, HexView}, NES, PPU
};
-use tracing::{debug, info};
use tracing_subscriber::EnvFilter;
+const ROM_FILE: &str = concat!(env!("ROM_DIR"), "/", "basic_init_1.nes");
+// const ROM_FILE: &str = "./Super Mario Bros. (World).nes";
+
extern crate nes_emu;
fn main() -> Result<(), iced::Error> {
@@ -32,16 +29,11 @@ fn main() -> Result<(), iced::Error> {
.with_env_filter(EnvFilter::from_default_env())
.init();
- iced::daemon(Emulator::title, Emulator::update, Emulator::view)
+ iced::daemon(Emulator::new, Emulator::update, Emulator::view)
.subscription(Emulator::subscriptions)
- .theme(|_, _| Theme::Dark)
- .run_with(Emulator::new)
-
- // iced::application(title, Emulator::update, Emulator::view)
- // .subscription(Emulator::subscriptions)
- // .theme(|_| Theme::Dark)
- // .centered()
- // .run()
+ .theme(Theme::Dark)
+ .title(Emulator::title)
+ .run()
}
enum MemoryTy {
@@ -53,6 +45,7 @@ enum WindowType {
Memory(MemoryTy, HexView),
TileMap,
TileViewer,
+ Debugger,
}
#[derive(Debug, Clone, PartialEq, Eq)]
@@ -60,6 +53,7 @@ enum HeaderButton {
OpenMemory,
OpenTileMap,
OpenTileViewer,
+ OpenDebugger,
Reset,
PowerCycle,
}
@@ -70,6 +64,7 @@ impl fmt::Display for HeaderButton {
Self::OpenMemory => write!(f, "Open Memory Viewer"),
Self::OpenTileMap => write!(f, "Open TileMap Viewer"),
Self::OpenTileViewer => write!(f, "Open Tile Viewer"),
+ Self::OpenDebugger => write!(f, "Open Debugger"),
Self::Reset => write!(f, "Reset"),
Self::PowerCycle => write!(f, "Power Cycle"),
}
@@ -79,6 +74,7 @@ impl fmt::Display for HeaderButton {
struct Emulator {
nes: NES,
windows: HashMap,
+ debugger: DebuggerState,
}
#[derive(Debug, Clone)]
@@ -92,13 +88,12 @@ enum Message {
WindowClosed(Id),
Header(HeaderButton),
Hex(Id, HexEvent),
+ Debugger(DebuggerMessage),
}
impl Emulator {
fn new() -> (Self, Task) {
- let rom_file = concat!(env!("ROM_DIR"), "/", "basic_init_1.nes");
- // let rom_file = "./Super Mario Bros. (World).nes";
- let mut nes = nes_emu::NES::load_nes_file(rom_file)
+ let mut nes = nes_emu::NES::load_nes_file(ROM_FILE)
.expect("Failed to load nes file");
nes.reset();
let (win, task) = iced::window::open(Settings::default());
@@ -106,6 +101,7 @@ impl Emulator {
Self {
nes,
windows: HashMap::from_iter([(win, WindowType::Main)]),
+ debugger: DebuggerState::new(),
},
task.map(Message::WindowOpened),
)
@@ -116,6 +112,7 @@ impl Emulator {
Some(WindowType::Memory(_, _)) => "NES MemoryView".into(),
Some(WindowType::TileMap) => "NES TileMap".into(),
Some(WindowType::TileViewer) => "NES Tile Viewer".into(),
+ Some(WindowType::Debugger) => "NES Debugger".into(),
None => todo!(),
}
}
@@ -129,38 +126,42 @@ impl Emulator {
fn update(&mut self, message: Message) -> Task {
match message {
Message::Tick(count) => {
- for _ in 0..count {
- self.nes.run_one_clock_cycle();
- }
- }
+ for _ in 0..count {
+ self.nes.run_one_clock_cycle();
+ }
+ }
Message::Frame => while !self.nes.run_one_clock_cycle().ppu_frame {},
Message::DMA => while !self.nes.run_one_clock_cycle().dma {},
Message::CPU => while !self.nes.run_one_clock_cycle().cpu_exec {},
Message::DebugInt => while !self.nes.run_one_clock_cycle().dbg_int {},
- Message::WindowOpened(id) => {
- // Window
- }
+ Message::WindowOpened(_id) => {
+ // Window
+ }
Message::WindowClosed(id) => {
- if let Some(WindowType::Main) = self.windows.remove(&id) {
- return iced::exit();
- }
- }
+ if let Some(WindowType::Main) = self.windows.remove(&id) {
+ return iced::exit();
+ }
+ }
Message::Header(HeaderButton::OpenMemory) => {
- return self.open(WindowType::Memory(MemoryTy::Cpu, HexView::new()));
- }
+ return self.open(WindowType::Memory(MemoryTy::Cpu, HexView::new()));
+ }
Message::Header(HeaderButton::OpenTileMap) => {
- return self.open(WindowType::TileMap);
- }
+ return self.open(WindowType::TileMap);
+ }
Message::Header(HeaderButton::OpenTileViewer) => {
- return self.open(WindowType::TileViewer);
- }
+ return self.open(WindowType::TileViewer);
+ }
+ Message::Header(HeaderButton::OpenDebugger) => {
+ return self.open(WindowType::Debugger);
+ }
Message::Hex(id, val) => {
- if let Some(WindowType::Memory(_, view)) = self.windows.get_mut(&id) {
- return view.update(val).map(move |e| Message::Hex(id, e));
- }
- }
+ if let Some(WindowType::Memory(_, view)) = self.windows.get_mut(&id) {
+ return view.update(val).map(move |e| Message::Hex(id, e));
+ }
+ }
Message::Header(HeaderButton::Reset) => { self.nes.reset(); }
Message::Header(HeaderButton::PowerCycle) => { self.nes.power_cycle(); }
+ Message::Debugger(debugger_message) => self.debugger.update(debugger_message, &mut self.nes),
}
// self.image.0.clone_from(self.nes.image());
Task::none()
@@ -197,7 +198,11 @@ impl Emulator {
Some(WindowType::TileViewer) => {
container(Canvas::new(DbgImage::NameTable(self.nes.ppu()))).width(Fill).height(Fill).into()
}
- _ => todo!(),
+ Some(WindowType::Debugger) => {
+ container(self.debugger.view(&self.nes).map(Message::Debugger)).width(Fill).height(Fill).into()
+ }
+ None => panic!("Window not found"),
+ // _ => todo!(),
}
}
@@ -235,6 +240,7 @@ impl Emulator {
header_menu(
"Debugging",
[
+ HeaderButton::OpenDebugger,
HeaderButton::OpenMemory,
HeaderButton::OpenTileMap,
HeaderButton::OpenTileViewer,
@@ -252,13 +258,13 @@ impl Program for Emulator {
fn draw(
&self,
- state: &Self::State,
+ _state: &Self::State,
renderer: &Renderer,
- theme: &Theme,
- bounds: iced::Rectangle,
+ _theme: &Theme,
+ _bounds: iced::Rectangle,
_cursor: mouse::Cursor,
) -> Vec> {
- const SIZE: f32 = 2.;
+ // const SIZE: f32 = 2.;
let mut frame = Frame::new(
renderer,
iced::Size {
@@ -291,13 +297,13 @@ impl Program for DbgImage<'_> {
fn draw(
&self,
- state: &Self::State,
+ _state: &Self::State,
renderer: &Renderer,
- theme: &Theme,
- bounds: iced::Rectangle,
+ _theme: &Theme,
+ _bounds: iced::Rectangle,
_cursor: mouse::Cursor,
) -> Vec> {
- const SIZE: f32 = 2.;
+ // const SIZE: f32 = 2.;
let mut name_table_frame =
Frame::new(renderer, Size::new(256. * 4. + 260. * 2., 256. * 4.));
name_table_frame.scale(2.);
diff --git a/src/ppu.rs b/src/ppu.rs
index de6b093..8eb0c24 100644
--- a/src/ppu.rs
+++ b/src/ppu.rs
@@ -1,5 +1,4 @@
-use iced::{Point, Size, widget::canvas::Frame};
-use iced_graphics::geometry::{Fill, Renderer};
+use iced::{advanced::graphics::geometry::Renderer, widget::canvas::{Fill, Frame}, Point, Size};
use crate::{hex_view::Memory, mem::{MemoryMap, Segment}};
@@ -81,7 +80,7 @@ pub struct Background {
cur_shift_low: u8,
}
-struct Mask {
+pub struct Mask {
grayscale: bool,
background_on_left_edge: bool,
sprites_on_left_edge: bool,
@@ -97,12 +96,12 @@ pub struct PPU {
frame_count: usize,
nmi_enabled: bool,
nmi_waiting: bool,
- even: bool,
- scanline: usize,
- pixel: usize,
+ pub even: bool,
+ pub scanline: usize,
+ pub pixel: usize,
- mask: Mask,
- vblank: bool,
+ pub mask: Mask,
+ pub vblank: bool,
pub(crate) memory: MemoryMap,
background: Background,
@@ -191,6 +190,7 @@ impl PPU {
let tmp = if self.vblank { 0b1000_0000 } else { 0 };
self.vblank = false;
self.background.w = false;
+ println!("Reading status: {:02X}", tmp);
tmp
}
3 => panic!("oamaddr is write-only"),
@@ -357,6 +357,9 @@ impl PPU {
return false;
}
+ pub fn peek_nmi(&self) -> bool {
+ self.nmi_waiting
+ }
pub fn nmi_waiting(&mut self) -> bool {
if self.nmi_waiting {
self.nmi_waiting = false;
@@ -365,6 +368,9 @@ impl PPU {
return false;
}
}
+ pub fn peek_irq(&self) -> bool {
+ self.nmi_waiting
+ }
pub fn irq_waiting(&mut self) -> bool {
false
}
diff --git a/src/test_roms/mod.rs b/src/test_roms/mod.rs
index 51a44f4..1f302e3 100644
--- a/src/test_roms/mod.rs
+++ b/src/test_roms/mod.rs
@@ -54,9 +54,10 @@ rom_test!(basic_init_0, "basic_init_0.nes", |nes| {
});
rom_test!(basic_init_1, "basic_init_1.nes", |nes| {
- assert_eq!(nes.last_instruction, "0x8017 HLT :2 []");
- assert_eq!(nes.cycle, 41);
- assert_eq!(nes.cpu.pc, 0x8018);
+ assert_eq!(nes.last_instruction, "0x801C HLT :2 []");
+ assert_eq!(nes.cycle, 27403);
+ assert_eq!(nes.ppu.pixel, 30);
+ assert_eq!(nes.cpu.pc, 0x801D);
assert_eq!(nes.cpu.sp, 0xFF);
assert_eq!(nes.cpu.a, 0x00);
assert_eq!(nes.cpu.x, 0x00);