diff --git a/.cargo/config.toml b/.cargo/config.toml index 58fdfbb..92174d9 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,6 +3,8 @@ xtask = "run --package xtask --" [target.i686-pc-windows-msvc] rustflags = ["-C", "target-feature=+crt-static"] +linker = "rust-lld" [target.x86_64-pc-windows-msvc] rustflags = ["-C", "target-feature=+crt-static"] +linker = "rust-lld" diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d896ad..40e00e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 3.24.0) project(windows-chewing-tsf LANGUAGES CXX) add_subdirectory(libchewing) -add_subdirectory(ChewingPreferences) set(CPACK_PACKAGE_CHECKSUM SHA256) set(CPACK_PACKAGE_VERSION 24.10.1) diff --git a/Cargo.lock b/Cargo.lock index 6b8ef0a..65db9b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,120 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "ab_glyph" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" + +[[package]] +name = "accesskit_atspi_common" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" +dependencies = [ + "accesskit", + "accesskit_consumer", + "atspi-common", + "serde", + "thiserror", + "zvariant", +] + +[[package]] +name = "accesskit_consumer" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" +dependencies = [ + "accesskit", + "hashbrown 0.15.2", + "immutable-chunkmap", +] + +[[package]] +name = "accesskit_macos" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.15.2", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "accesskit_unix" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" +dependencies = [ + "accesskit", + "accesskit_atspi_common", + "async-channel", + "async-executor", + "async-task", + "atspi", + "futures-lite", + "futures-util", + "serde", + "zbus", +] + +[[package]] +name = "accesskit_windows" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" +dependencies = [ + "accesskit", + "accesskit_consumer", + "hashbrown 0.15.2", + "paste", + "static_assertions", + "windows", + "windows-core 0.58.0", +] + +[[package]] +name = "accesskit_winit" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_unix", + "accesskit_windows", + "raw-window-handle", + "winit", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "ahash" version = "0.8.11" @@ -9,11 +123,69 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "getrandom", "once_cell", "version_check", "zerocopy", ] +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android-activity" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +dependencies = [ + "android-properties", + "bitflags 2.6.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.95" @@ -21,496 +193,4539 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] -name = "bitflags" -version = "2.6.0" +name = "arrayref" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] -name = "cc" -version = "1.2.5" +name = "arrayvec" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "ashpd" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d43c03d9e36dd40cab48435be0b09646da362c278223ca535493877b2c1dee9" dependencies = [ - "shlex", + "async-fs", + "async-net", + "enumflags2", + "futures-channel", + "futures-util", + "rand", + "serde", + "serde_repr", + "url", + "zbus", ] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "async-broadcast" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] [[package]] -name = "chewing" -version = "0.9.1" +name = "async-channel" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990478084d4eb9ca92513d75e780be2062dbab9dc46a3a656f622639a697d31c" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ - "der", - "directories", - "log", - "rusqlite", + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", ] [[package]] -name = "chewing_capi" -version = "0.9.1" +name = "async-executor" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf423f10275a7ccb3f268a35c4e736fa37b71485b12dc65f870e0fb0bda389f" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ - "chewing", - "env_logger", - "log", + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", ] [[package]] -name = "chewing_tip" -version = "24.10.1" +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "anyhow", - "cc", - "chewing_capi", - "embed-resource", - "getrandom", - "log", - "nine_patch_drawable", - "win_dbg_logger", - "windows", - "windows-core", + "async-lock", + "blocking", + "futures-lite", ] [[package]] -name = "der" -version = "0.7.9" +name = "async-io" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "zeroize", + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", ] [[package]] -name = "directories" -version = "5.0.1" +name = "async-lock" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "dirs-sys", + "event-listener", + "event-listener-strategy", + "pin-project-lite", ] [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "async-net" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys", + "async-io", + "blocking", + "futures-lite", ] [[package]] -name = "embed-resource" -version = "3.0.1" +name = "async-process" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4762ce03154ba57ebaeee60cc631901ceae4f18219cbb874e464347471594742" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "cc", - "memchr", - "rustc_version", - "toml", - "vswhom", - "winreg", + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", + "tracing", ] [[package]] -name = "env_filter" -version = "0.1.3" +name = "async-recursion" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ - "log", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "env_logger" -version = "0.11.6" +name = "async-signal" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "env_filter", + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atspi" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" +dependencies = [ + "atspi-common", + "atspi-connection", + "atspi-proxies", +] + +[[package]] +name = "atspi-common" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7" +dependencies = [ + "enumflags2", + "serde", + "static_assertions", + "zbus", + "zbus-lockstep", + "zbus-lockstep-macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "atspi-connection" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" +dependencies = [ + "atspi-common", + "atspi-proxies", + "futures-lite", + "zbus", +] + +[[package]] +name = "atspi-proxies" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" +dependencies = [ + "atspi-common", + "serde", + "zbus", + "zvariant", +] + +[[package]] +name = "auto_enums" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "459b77b7e855f875fd15f101064825cd79eb83185a961d66e6298560126facfb" +dependencies = [ + "derive_utils", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", + "which", +] + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[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", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "borsh" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" +dependencies = [ + "cfg_aliases", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[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.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" + +[[package]] +name = "calloop" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" +dependencies = [ + "bitflags 2.6.0", + "log", + "polling", + "rustix", + "slab", + "thiserror", +] + +[[package]] +name = "calloop" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10929724661d1c43856fd87c7a127ae944ec55579134fb485e4136fb6a46fdcb" +dependencies = [ + "bitflags 2.6.0", + "polling", + "rustix", + "slab", + "tracing", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +dependencies = [ + "calloop 0.13.0", + "rustix", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "cc" +version = "1.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "chewing" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990478084d4eb9ca92513d75e780be2062dbab9dc46a3a656f622639a697d31c" +dependencies = [ + "der", + "directories", + "log", + "rusqlite", +] + +[[package]] +name = "chewing" +version = "0.9.1" +source = "git+https://github.com/chewing/libchewing?branch=feat-dictionary-mgmt-api#95f6eeb9e4133de6e4900f47174edfd04e564b45" +dependencies = [ + "der", + "directories", + "log", + "rusqlite", +] + +[[package]] +name = "chewing-preferences" +version = "24.10.1" +dependencies = [ + "anyhow", + "chewing 0.9.1 (git+https://github.com/chewing/libchewing?branch=feat-dictionary-mgmt-api)", + "embed-resource", + "slint", + "slint-build", + "windows", +] + +[[package]] +name = "chewing_capi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf423f10275a7ccb3f268a35c4e736fa37b71485b12dc65f870e0fb0bda389f" +dependencies = [ + "chewing 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger", + "log", +] + +[[package]] +name = "chewing_tip" +version = "24.10.1" +dependencies = [ + "anyhow", + "cc", + "chewing_capi", + "embed-resource", + "getrandom", + "log", + "nine_patch_drawable", + "win_dbg_logger", + "windows", + "windows-core 0.58.0", +] + +[[package]] +name = "chrono" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clipboard-win" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fdf5e01086b6be750428ba4a40619f847eb2e95756eee84b18e06e5f0b50342" +dependencies = [ + "lazy-bytes-cast", + "winapi", +] + +[[package]] +name = "clru" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" + +[[package]] +name = "codemap" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e769b5c8c8283982a987c6e948e540254f1058d5a74b8794914d4ef5fc2a24" + +[[package]] +name = "codemap-diagnostic" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc20770be05b566a963bf91505e60412c4a2d016d1ef95c5512823bb085a8122" +dependencies = [ + "codemap", + "termcolor", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-field-offset" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fcde4ca1211b5a94b573083c472ee19e86b19a441913f66e1cc5c41daf0255" +dependencies = [ + "const-field-offset-macro", + "field-offset", +] + +[[package]] +name = "const-field-offset-macro" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5387f5bbc9e9e6c96436ea125afa12614cebf8ac67f49abc08c1e7a891466c90" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "copypasta" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb85422867ca93da58b7f95fb5c0c10f6183ed6e1ef8841568968a896d3a858" +dependencies = [ + "clipboard-win", + "objc", + "objc-foundation", + "objc_id", + "smithay-clipboard", + "x11-clipboard", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", + "libc", +] + +[[package]] +name = "core-text" +version = "20.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" +dependencies = [ + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "foreign-types", + "libc", +] + +[[package]] +name = "core_maths" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b02505ccb8c50b0aa21ace0fc08c3e53adebd4e58caa18a36152803c7709a3" +dependencies = [ + "libm", +] + +[[package]] +name = "countme" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" + +[[package]] +name = "cpp" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bcac3d8234c1fb813358e83d1bb6b0290a3d2b3b5efc6b88bfeaf9d8eec17" +dependencies = [ + "cpp_macros", +] + +[[package]] +name = "cpp_build" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27f8638c97fbd79cc6fc80b616e0e74b49bac21014faed590bbc89b7e2676c90" +dependencies = [ + "cc", + "cpp_common", + "lazy_static", + "proc-macro2", + "regex", + "syn", + "unicode-xid", +] + +[[package]] +name = "cpp_common" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25fcfea2ee05889597d35e986c2ad0169694320ae5cc8f6d2640a4bb8a884560" +dependencies = [ + "lazy_static", + "proc-macro2", + "syn", +] + +[[package]] +name = "cpp_macros" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d156158fe86e274820f5a53bc9edb0885a6e7113909497aa8d883b69dd171871" +dependencies = [ + "aho-corasick", + "byteorder", + "cpp_common", + "lazy_static", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "cpufeatures" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ctor-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" + +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + +[[package]] +name = "data-url" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "zeroize", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "derive_utils" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65f152f4b8559c4da5d574bafc7af85454d706b4c5fe8b530d508cacbb6807ea" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[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 = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" + +[[package]] +name = "drm" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" +dependencies = [ + "bitflags 2.6.0", + "bytemuck", + "drm-ffi", + "drm-fourcc", + "libc", + "rustix", +] + +[[package]] +name = "drm-ffi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8e41459d99a9b529845f6d2c909eb9adf3b6d2f82635ae40be8de0601726e8b" +dependencies = [ + "drm-sys", + "rustix", +] + +[[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.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bafb66c8dbc944d69e15cfcc661df7e703beffbaec8bd63151368b06c5f9858c" +dependencies = [ + "libc", + "linux-raw-sys 0.6.5", +] + +[[package]] +name = "dwrote" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70182709525a3632b2ba96b6569225467b18ecb4a77f46d255f713a6bebf05fd" +dependencies = [ + "lazy_static", + "libc", + "serde", + "serde_derive", + "winapi", + "wio", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "embed-resource" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4762ce03154ba57ebaeee60cc631901ceae4f18219cbb874e464347471594742" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml", + "vswhom", + "winreg", +] + +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enumflags2" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", +] + +[[package]] +name = "env_logger" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +dependencies = [ + "env_filter", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "euclid" +version = "0.22.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "exr" +version = "1.73.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" +dependencies = [ + "bit_field", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "femtovg" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eafc3dd3c956423a6669e1f6f9ab23261dbe45cdb24ce23dba38b0389b8a8ff8" +dependencies = [ + "bitflags 2.6.0", + "bytemuck", + "fnv", + "glow 0.15.0", + "image 0.25.5", + "imgref", + "log", + "lru", + "rgb", + "rustybuzz 0.20.1", + "slotmap", + "unicode-bidi", + "unicode-segmentation", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "filetime" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", +] + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + +[[package]] +name = "fontconfig-parser" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7" +dependencies = [ + "roxmltree", +] + +[[package]] +name = "fontdb" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3a6f9af55fb97ad673fb7a69533eb2f967648a06fa21f8c9bb2cd6d33975716" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser 0.24.1", +] + +[[package]] +name = "fontdue" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efe23d02309319171d00d794c9ff48d4f903c0e481375b1b04b017470838af04" +dependencies = [ + "hashbrown 0.14.5", + "rayon", + "ttf-parser 0.21.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gbm" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa9a106f044fbd21edf2d8cc57300df1e60630e46ed4bebd59cdcbb23cfad1ce" +dependencies = [ + "bitflags 2.6.0", + "drm", + "drm-fourcc", + "gbm-sys", + "libc", +] + +[[package]] +name = "gbm-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9cc2f64de9fa707b5c6b2d2f10d7a7e49e845018a9f5685891eb40d3bab2538" +dependencies = [ + "libc", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "glow" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glow" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33cd8ff5e02c1a5463ec10a846c8f3166a3ae0382ec33de6a327ea6dd61c41d" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec69412a0bf07ea7607e638b415447857a808846c2b685a43c8aa18bc6d5e499" +dependencies = [ + "bitflags 2.6.0", + "cfg_aliases", + "cgl", + "core-foundation 0.9.4", + "dispatch", + "glutin_egl_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "libloading", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "raw-window-handle", + "wayland-sys", + "windows-sys 0.52.0", + "x11-dl", +] + +[[package]] +name = "glutin-winit" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" +dependencies = [ + "cfg_aliases", + "glutin", + "raw-window-handle", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae99fff4d2850dbe6fb8c1fa8e4fead5525bab715beaacfccf3fb994e01c827" +dependencies = [ + "gl_generator", + "windows-sys 0.52.0", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2b2d3918e76e18e08796b55eb64e8fe6ec67d5a6b2e2a7e2edce224ad24c63" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e1951bbd9434a81aa496fe59ccc2235af3820d27b85f9314e279609211e2c" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", + "rayon", +] + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "i-slint-backend-linuxkms" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2205814bb3595d50142989dc23d4c2fd679f77d2111d3ae77e72da0b320c6bb6" +dependencies = [ + "bytemuck", + "calloop 0.14.2", + "drm", + "gbm", + "glutin", + "i-slint-common", + "i-slint-core", + "i-slint-renderer-femtovg", + "input", + "memmap2", + "nix", + "raw-window-handle", + "xkbcommon", +] + +[[package]] +name = "i-slint-backend-qt" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c76a92e93fc70a88dac3bf29986dbb31d6de30834c3a8599fe4e3e4531442840" +dependencies = [ + "const-field-offset", + "cpp", + "cpp_build", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", + "lyon_path", + "once_cell", + "pin-project", + "pin-weak", + "qttypes", + "vtable", +] + +[[package]] +name = "i-slint-backend-selector" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13cddb850ff15d5878ffed582333b1052c2f34ef5fa8c96374556212d3dfb6f0" +dependencies = [ + "cfg-if", + "i-slint-backend-linuxkms", + "i-slint-backend-qt", + "i-slint-backend-winit", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", +] + +[[package]] +name = "i-slint-backend-winit" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43733630d6572f12212538d1e07457344f0649f64f0fd5d2508e1067fe907520" +dependencies = [ + "accesskit", + "accesskit_winit", + "ashpd", + "bytemuck", + "cfg-if", + "cfg_aliases", + "copypasta", + "derive_more", + "futures", + "glutin", + "glutin-winit", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", + "i-slint-renderer-femtovg", + "i-slint-renderer-skia", + "imgref", + "lyon_path", + "objc2-app-kit", + "once_cell", + "pin-weak", + "raw-window-handle", + "rgb", + "scoped-tls-hkt", + "scopeguard", + "softbuffer", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "i-slint-common" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c8f37e2d962b87cebc290f1d14ad86602a1feec10bea545353b817a832dc66" +dependencies = [ + "cfg-if", + "derive_more", + "fontdb", + "libloading", + "ttf-parser 0.25.1", +] + +[[package]] +name = "i-slint-compiler" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10773b4a1ef9cc0432274311f0788a4dbb0f45d5e0c726ca39755127e04a482" +dependencies = [ + "by_address", + "codemap", + "codemap-diagnostic", + "derive_more", + "fontdue", + "i-slint-common", + "image 0.24.9", + "itertools 0.13.0", + "linked_hash_set", + "lyon_extra", + "lyon_path", + "num_enum", + "once_cell", + "polib", + "proc-macro2", + "quote", + "rayon", + "resvg", + "rowan", + "smol_str 0.3.2", + "strum", + "thiserror", + "url", +] + +[[package]] +name = "i-slint-core" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7be38ffa35b2fad74712d563e7ffec655988ae215e3a6cfa35d603fb6115b79" +dependencies = [ + "auto_enums", + "bitflags 2.6.0", + "bytemuck", + "cfg-if", + "chrono", + "clru", + "const-field-offset", + "derive_more", + "euclid", + "fontdue", + "i-slint-common", + "i-slint-core-macros", + "image 0.24.9", + "integer-sqrt", + "lyon_algorithms", + "lyon_extra", + "lyon_geom", + "lyon_path", + "num-traits", + "once_cell", + "pin-project", + "pin-weak", + "portable-atomic", + "raw-window-handle", + "resvg", + "rgb", + "rustybuzz 0.20.1", + "scoped-tls-hkt", + "scopeguard", + "slab", + "static_assertions", + "strum", + "sys-locale", + "unicode-linebreak", + "unicode-script", + "unicode-segmentation", + "vtable", + "wasm-bindgen", + "web-sys", + "web-time", +] + +[[package]] +name = "i-slint-core-macros" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83e6bd30e51baa7adb1c1e04111ac71713ce032ce16c36e62a334f8c45b734e" +dependencies = [ + "quote", + "serde_json", + "syn", +] + +[[package]] +name = "i-slint-renderer-femtovg" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fae14836679021643350771c909af81f2d372e020478b22353a8480e2b96576a" +dependencies = [ + "cfg-if", + "const-field-offset", + "core-foundation 0.9.4", + "core-text", + "derive_more", + "dwrote", + "femtovg", + "glow 0.15.0", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", + "imgref", + "lyon_path", + "once_cell", + "pin-weak", + "rgb", + "scoped-tls-hkt", + "ttf-parser 0.25.1", + "unicode-script", + "unicode-segmentation", + "wasm-bindgen", + "web-sys", + "winapi", +] + +[[package]] +name = "i-slint-renderer-skia" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36dcdbc1ca419b670e94e957a23b137739db5c7b0508c39b740e199db0eea2bb" +dependencies = [ + "bytemuck", + "cfg-if", + "cfg_aliases", + "const-field-offset", + "derive_more", + "glow 0.13.1", + "glutin", + "i-slint-common", + "i-slint-core", + "i-slint-core-macros", + "lyon_path", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-metal", + "objc2-quartz-core", + "once_cell", + "pin-weak", + "raw-window-handle", + "raw-window-metal", + "scoped-tls-hkt", + "skia-safe", + "softbuffer", + "unicode-segmentation", + "vtable", + "windows", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "image" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-traits", + "png", + "qoi", + "tiff", +] + +[[package]] +name = "image" +version = "0.25.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +dependencies = [ + "bytemuck", + "byteorder-lite", + "num-traits", +] + +[[package]] +name = "imagesize" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" + +[[package]] +name = "imgref" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" + +[[package]] +name = "immutable-chunkmap" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + +[[package]] +name = "input" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" +dependencies = [ + "bitflags 2.6.0", + "input-sys", + "libc", + "log", + "udev", +] + +[[package]] +name = "input-sys" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jiff" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db69f08d4fb10524cacdb074c10b296299d71274ddbc830a8ee65666867002e9" + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kurbo" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89234b2cc610a7dd927ebde6b41dd1a5d4214cffaef4cf1fb2195d592f92518f" +dependencies = [ + "arrayvec", + "smallvec", +] + +[[package]] +name = "lazy-bytes-cast" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10257499f089cd156ad82d0a9cd57d9501fa2c989068992a97eb3c27836f206b" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "libc" +version = "0.2.169" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "libloading" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.5.8", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "linereader" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d921fea6860357575519aca014c6e22470585accdd543b370c404a8a72d0dd1d" +dependencies = [ + "memchr", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linked_hash_set" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "linux-raw-sys" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" + +[[package]] +name = "lyon_algorithms" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f13c9be19d257c7d37e70608ed858e8eab4b2afcea2e3c9a622e892acbf43c08" +dependencies = [ + "lyon_path", + "num-traits", +] + +[[package]] +name = "lyon_extra" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca94c7bf1e2557c2798989c43416822c12fc5dcc5e17cc3307ef0e71894a955" +dependencies = [ + "lyon_path", + "thiserror", +] + +[[package]] +name = "lyon_geom" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8af69edc087272df438b3ee436c4bb6d7c04aa8af665cfd398feae627dbd8570" +dependencies = [ + "arrayvec", + "euclid", + "num-traits", +] + +[[package]] +name = "lyon_path" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e0b8aec2f58586f6eef237985b9a9b7cb3a3aff4417c575075cf95bf925252e" +dependencies = [ + "lyon_geom", + "num-traits", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.6.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nine_patch_drawable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96e2f356f3fbb4179ee2a3d76ed2881553b93213a421a28975b2ea0c8d81d15" + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-core-location" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +dependencies = [ + "block2", + "objc2", + "objc2-contacts", + "objc2-foundation", +] + +[[package]] +name = "objc2-encode" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.6.0", + "block2", + "dispatch", + "libc", + "objc2", +] + +[[package]] +name = "objc2-link-presentation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +dependencies = [ + "block2", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-symbols" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation", + "objc2-link-presentation", + "objc2-quartz-core", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-core-location", + "objc2-foundation", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +dependencies = [ + "critical-section", + "portable-atomic", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "orbclient" +version = "0.3.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" +dependencies = [ + "libredox", +] + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" +dependencies = [ + "ttf-parser 0.25.1", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pin-weak" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b330c9d1b92dfe68442ca20b009c717d5f0b1e3cf4965e62f704c3c6e95a1305" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polib" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b393b155cf9be86249cba1b56cc81be0e6212c66d94ac0d76d37a1761f3bb1b" +dependencies = [ + "linereader", +] + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "portable-atomic" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +dependencies = [ + "critical-section", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "qttypes" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7edf5b38c97ad8900ad2a8418ee44b4adceaa866a4a3405e2f1c909871d7ebd" +dependencies = [ + "cpp", + "cpp_build", + "semver", +] + +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick-xml" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "raw-window-metal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2000e45d7daa9b6d946e88dfa1d7ae330424a81918a6545741821c989eb80a9" +dependencies = [ + "objc2", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "resvg" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a325d5e8d1cebddd070b13f44cec8071594ab67d1012797c121f27a669b7958" +dependencies = [ + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg", +] + +[[package]] +name = "rgb" +version = "0.8.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "rowan" +version = "0.15.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a542b0253fa46e632d27a1dc5cf7b930de4df8659dc6e720b647fc72147ae3d" +dependencies = [ + "countme", + "hashbrown 0.14.5", + "rustc-hash", + "text-size", +] + +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + +[[package]] +name = "rusqlite" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" +dependencies = [ + "bitflags 2.6.0", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys 0.4.14", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "rustybuzz" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85d1ccd519e61834798eb52c4e886e8c2d7d698dd3d6ce0b1b47eb8557f1181" +dependencies = [ + "bitflags 2.6.0", + "bytemuck", + "core_maths", + "log", + "smallvec", + "ttf-parser 0.24.1", + "unicode-bidi-mirroring 0.3.0", + "unicode-ccc 0.3.0", + "unicode-properties", + "unicode-script", +] + +[[package]] +name = "rustybuzz" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" +dependencies = [ + "bitflags 2.6.0", + "bytemuck", + "core_maths", + "log", + "smallvec", + "ttf-parser 0.25.1", + "unicode-bidi-mirroring 0.4.0", + "unicode-ccc 0.4.0", + "unicode-properties", + "unicode-script", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scoped-tls-hkt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9603871ffe5df3ac39cb624790c296dbd47a400d202f56bf3e414045099524d" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sctk-adwaita" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit", + "tiny-skia", +] + +[[package]] +name = "semver" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" + +[[package]] +name = "serde" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.134" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simplecss" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" +dependencies = [ + "log", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "skia-bindings" +version = "0.78.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29880a81b088de322e9c5306236c70761a61b5fa4df3c15c93bad3ce890ce34c" +dependencies = [ + "bindgen", + "cc", + "flate2", + "heck", + "lazy_static", + "regex", + "serde_json", + "tar", + "toml", +] + +[[package]] +name = "skia-safe" +version = "0.78.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f15700ac678c06649077495acbba07e7ae01e5ca46b7dc18213f2c3477ada71" +dependencies = [ + "bitflags 2.6.0", + "lazy_static", + "skia-bindings", + "windows", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slint" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fa686cfc5a16a737a6867fbff09d5d41133fc6502bf0f2be786684e9991e8b" +dependencies = [ + "const-field-offset", + "i-slint-backend-qt", + "i-slint-backend-selector", + "i-slint-core", + "i-slint-core-macros", + "i-slint-renderer-femtovg", + "num-traits", + "once_cell", + "pin-weak", + "slint-macros", + "vtable", +] + +[[package]] +name = "slint-build" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b27768c67dff5081261fba5b2a3fa0609912dfbf8a73020c60e2b6028445bc" +dependencies = [ + "i-slint-compiler", + "i-slint-core-macros", + "spin_on", + "thiserror", + "toml_edit", +] + +[[package]] +name = "slint-macros" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57966e7358ec95d69ce94ea9dab9231efcc4714fe725d3ed8c27cb8e98c792bc" +dependencies = [ + "i-slint-compiler", + "proc-macro2", + "quote", + "spin_on", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +dependencies = [ + "bitflags 2.6.0", + "calloop 0.13.0", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" +dependencies = [ + "libc", + "smithay-client-toolkit", + "wayland-backend", +] + +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + +[[package]] +name = "smol_str" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9676b89cd56310a87b93dec47b11af744f34d5fc9f367b829474eec0a891350d" +dependencies = [ + "borsh", + "serde", +] + +[[package]] +name = "softbuffer" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +dependencies = [ + "as-raw-xcb-connection", + "bytemuck", + "cfg_aliases", + "core-graphics 0.24.0", + "fastrand", + "foreign-types", + "js-sys", + "log", + "memmap2", + "objc2", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall 0.5.8", + "rustix", + "tiny-xlib", + "wasm-bindgen", + "wayland-backend", + "wayland-client", + "wayland-sys", + "web-sys", + "windows-sys 0.59.0", + "x11rb", +] + +[[package]] +name = "spin_on" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "076e103ed41b9864aa838287efe5f4e3a7a0362dd00671ae62a212e5e4612da2" +dependencies = [ + "pin-utils", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "svgtypes" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794de53cc48eaabeed0ab6a3404a65f40b3e38c067e4435883a65d2aa4ca000e" +dependencies = [ + "kurbo", + "siphasher", +] + +[[package]] +name = "syn" +version = "2.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + +[[package]] +name = "tar" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "text-size" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tiny-xlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0324504befd01cab6e0c994f34b2ffa257849ee019d3fb3b64fb2c858887d89e" +dependencies = [ + "as-raw-xcb-connection", + "ctor-lite", + "libloading", + "pkg-config", + "tracing", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tsfreg" +version = "24.10.1" +dependencies = [ + "windows", +] + +[[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.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be21190ff5d38e8b4a2d3b6a3ae57f612cc39c96e83cedeaf7abc338a8bac4a" +dependencies = [ + "core_maths", +] + +[[package]] +name = "ttf-parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" +dependencies = [ + "core_maths", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "udev" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d5c197b95f1769931c89f85c33c407801d1fb7a311113bc0b39ad036f1bd81" +dependencies = [ + "io-lifetimes", + "libc", + "libudev-sys", + "pkg-config", +] + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset", + "tempfile", + "winapi", ] [[package]] -name = "equivalent" -version = "1.0.1" +name = "unicode-bidi" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] -name = "fallible-iterator" +name = "unicode-bidi-mirroring" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" +checksum = "64af057ad7466495ca113126be61838d8af947f41d93a949980b2389a118082f" [[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" +name = "unicode-bidi-mirroring" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" +checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" [[package]] -name = "getrandom" -version = "0.2.15" +name = "unicode-ccc" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] +checksum = "260bc6647b3893a9a90668360803a15f96b85a5257b1c3a0c3daf6ae2496de42" [[package]] -name = "hashbrown" -version = "0.14.5" +name = "unicode-ccc" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", -] +checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" [[package]] -name = "hashbrown" -version = "0.15.2" +name = "unicode-ident" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] -name = "hashlink" -version = "0.9.1" +name = "unicode-linebreak" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" -dependencies = [ - "hashbrown 0.14.5", -] +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] -name = "indexmap" -version = "2.7.0" +name = "unicode-properties" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" -dependencies = [ - "equivalent", - "hashbrown 0.15.2", -] +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] -name = "indoc" -version = "2.0.5" +name = "unicode-script" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" [[package]] -name = "jiff" -version = "0.1.15" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db69f08d4fb10524cacdb074c10b296299d71274ddbc830a8ee65666867002e9" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] -name = "libc" -version = "0.2.169" +name = "unicode-vo" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" [[package]] -name = "libredox" -version = "0.1.3" +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ - "bitflags", - "libc", + "form_urlencoded", + "idna", + "percent-encoding", + "serde", ] [[package]] -name = "libsqlite3-sys" -version = "0.30.1" +name = "usvg" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +checksum = "7447e703d7223b067607655e625e0dbca80822880248937da65966194c4864e6" dependencies = [ - "pkg-config", - "vcpkg", + "base64", + "data-url", + "flate2", + "fontdb", + "imagesize", + "kurbo", + "log", + "pico-args", + "roxmltree", + "rustybuzz 0.18.0", + "simplecss", + "siphasher", + "strict-num", + "svgtypes", + "tiny-skia-path", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "xmlwriter", ] [[package]] -name = "log" -version = "0.4.22" +name = "utf16_iter" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" [[package]] -name = "memchr" -version = "2.7.4" +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "nine_patch_drawable" -version = "0.1.0" +name = "vcpkg" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96e2f356f3fbb4179ee2a3d76ed2881553b93213a421a28975b2ea0c8d81d15" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] -name = "once_cell" -version = "1.20.2" +name = "version_check" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "option-ext" -version = "0.2.0" +name = "vswhom" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] [[package]] -name = "pkg-config" -version = "0.3.31" +name = "vswhom-sys" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] [[package]] -name = "proc-macro2" -version = "1.0.92" +name = "vtable" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "20b14a049c8d5d1ff811a00f65ac1454335487ed769a943c7bad89ead3573335" dependencies = [ - "unicode-ident", + "const-field-offset", + "portable-atomic", + "stable_deref_trait", + "vtable-macro", ] [[package]] -name = "quote" -version = "1.0.37" +name = "vtable-macro" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "d8502f961cf2f1359fed21a70f67c831ccb3ab9e4c0b4dd3ad40387fbe8875db" dependencies = [ "proc-macro2", + "quote", + "syn", ] [[package]] -name = "redox_users" -version = "0.4.6" +name = "walkdir" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ - "getrandom", - "libredox", - "thiserror", + "same-file", + "winapi-util", ] [[package]] -name = "rusqlite" -version = "0.32.1" +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ - "bitflags", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink", - "libsqlite3-sys", - "smallvec", + "cfg-if", + "once_cell", + "wasm-bindgen-macro", ] [[package]] -name = "rustc_version" -version = "0.4.1" +name = "wasm-bindgen-backend" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ - "semver", + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", ] [[package]] -name = "semver" -version = "1.0.24" +name = "wasm-bindgen-futures" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] [[package]] -name = "serde" -version = "1.0.216" +name = "wasm-bindgen-macro" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ - "serde_derive", + "quote", + "wasm-bindgen-macro-support", ] [[package]] -name = "serde_derive" -version = "1.0.216" +name = "wasm-bindgen-macro-support" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", ] [[package]] -name = "serde_spanned" -version = "0.6.8" +name = "wasm-bindgen-shared" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" + +[[package]] +name = "wayland-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" dependencies = [ - "serde", + "cc", + "downcast-rs", + "rustix", + "scoped-tls", + "smallvec", + "wayland-sys", ] [[package]] -name = "shlex" -version = "1.3.0" +name = "wayland-client" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280" +dependencies = [ + "bitflags 2.6.0", + "rustix", + "wayland-backend", + "wayland-scanner", +] [[package]] -name = "smallvec" -version = "1.13.2" +name = "wayland-csd-frame" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.6.0", + "cursor-icon", + "wayland-backend", +] [[package]] -name = "syn" -version = "2.0.91" +name = "wayland-cursor" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" +checksum = "32b08bc3aafdb0035e7fe0fdf17ba0c09c268732707dca4ae098f60cb28c9e4c" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "rustix", + "wayland-client", + "xcursor", ] [[package]] -name = "thiserror" -version = "1.0.69" +name = "wayland-protocols" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "7cd0ade57c4e6e9a8952741325c30bf82f4246885dca8bf561898b86d0c1f58e" dependencies = [ - "thiserror-impl", + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", ] [[package]] -name = "thiserror-impl" -version = "1.0.69" +name = "wayland-protocols-plasma" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "9b31cab548ee68c7eb155517f2212049dc151f7cd7910c2b66abfd31c3ee12bd" dependencies = [ - "proc-macro2", - "quote", - "syn", + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", ] [[package]] -name = "toml" -version = "0.8.19" +name = "wayland-protocols-wlr" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "782e12f6cd923c3c316130d56205ebab53f55d6666b7faddfad36cecaeeb4022" dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", ] [[package]] -name = "toml_datetime" -version = "0.6.8" +name = "wayland-scanner" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" dependencies = [ - "serde", + "proc-macro2", + "quick-xml 0.36.2", + "quote", ] [[package]] -name = "toml_edit" -version = "0.22.22" +name = "wayland-sys" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09" dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", + "dlib", + "log", + "once_cell", + "pkg-config", ] [[package]] -name = "tsfreg" -version = "24.10.1" +name = "web-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ - "windows", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "unicode-ident" -version = "1.0.14" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] -name = "vcpkg" -version = "0.2.15" +name = "weezl" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] -name = "version_check" -version = "0.9.5" +name = "which" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] [[package]] -name = "vswhom" +name = "win_dbg_logger" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +checksum = "7d1b4c22244dc27534d81e2f6fc3efd6b20e50c010f177efc20b719ec759a779" dependencies = [ - "libc", - "vswhom-sys", + "log", ] [[package]] -name = "vswhom-sys" -version = "0.1.2" +name = "winapi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "cc", - "libc", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "win_dbg_logger" -version = "0.1.0" +name = "winapi-util" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d1b4c22244dc27534d81e2f6fc3efd6b20e50c010f177efc20b719ec759a779" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "log", + "windows-sys 0.48.0", ] +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows" version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core", + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ "windows-targets 0.52.6", ] @@ -568,6 +4783,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -577,6 +4801,39 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -608,6 +4865,12 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -620,6 +4883,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -632,6 +4901,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -650,6 +4925,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -662,6 +4943,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -674,6 +4961,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -686,6 +4979,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -698,6 +4997,58 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "winit" +version = "0.30.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba50bc8ef4b6f1a75c9274fb95aa9a8f63fbc66c56f391bd85cf68d51e7b1a3" +dependencies = [ + "ahash", + "android-activity", + "atomic-waker", + "bitflags 2.6.0", + "block2", + "bytemuck", + "calloop 0.13.0", + "cfg_aliases", + "concurrent-queue", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "cursor-icon", + "dpi", + "js-sys", + "libc", + "memmap2", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "orbclient", + "percent-encoding", + "pin-project", + "raw-window-handle", + "redox_syscall 0.4.1", + "rustix", + "sctk-adwaita", + "smithay-client-toolkit", + "smol_str 0.2.2", + "tracing", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "web-sys", + "web-time", + "windows-sys 0.52.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + [[package]] name = "winnow" version = "0.6.20" @@ -714,7 +5065,97 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" dependencies = [ "cfg-if", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "x11-clipboard" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "662d74b3d77e396b8e5beb00b9cad6a9eccf40b2ef68cc858784b14c41d535a3" +dependencies = [ + "libc", + "x11rb", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading", + "once_cell", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" + +[[package]] +name = "xattr" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +dependencies = [ + "libc", + "linux-raw-sys 0.4.14", + "rustix", +] + +[[package]] +name = "xcursor" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" + +[[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]] @@ -732,6 +5173,48 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "672423d4fea7ffa2f6c25ba60031ea13dc6258070556f125cc4d790007d4a155" +[[package]] +name = "xkbcommon" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" +dependencies = [ + "libc", + "memmap2", + "xkeysym", +] + +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.6.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + +[[package]] +name = "xml-rs" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea8b391c9a790b496184c29f7f93b9ed5b16abb306c05415b68bcc16e4d06432" + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + [[package]] name = "xtask" version = "0.1.0" @@ -742,12 +5225,136 @@ dependencies = [ "xflags", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zbus" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus-lockstep" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" +dependencies = [ + "zbus_xml", + "zvariant", +] + +[[package]] +name = "zbus-lockstep-macros" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "zbus-lockstep", + "zbus_xml", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zbus_xml" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233" +dependencies = [ + "quick-xml 0.30.0", + "serde", + "static_assertions", + "zbus_names", + "zvariant", +] + [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -762,8 +5369,98 @@ dependencies = [ "syn", ] +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[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 = "zvariant" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "url", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index eaa0581..7879080 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["chewing_tip", "tsfreg", "xtask"] +members = ["chewing_tip", "preferences", "tsfreg", "xtask"] resolver = "2" [profile.release] diff --git a/ChewingPreferences/AboutDialog.cpp b/ChewingPreferences/AboutDialog.cpp deleted file mode 100644 index 5fa0731..0000000 --- a/ChewingPreferences/AboutDialog.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#include "AboutDialog.h" -#include "Commctrl.h" -#include "resource.h" - -namespace Chewing { - -AboutDialog::AboutDialog(void): Ime::Dialog() { - static bool initSysLink = false; - if(!initSysLink) { - // we don't link to comctl32.dll directly since Win8 metro seems to block it. - INITCOMMONCONTROLSEX icc; - icc.dwSize = sizeof(icc); - icc.dwICC = ICC_LINK_CLASS; - // initialize syslink control - initSysLink = (bool)InitCommonControlsEx(&icc); - } -} - -AboutDialog::~AboutDialog(void) { -} - -bool AboutDialog::onInitDialog() { - return Ime::Dialog::onInitDialog(); -} - -LRESULT AboutDialog::wndProc(UINT msg, WPARAM wp, LPARAM lp) { - switch(msg) { - case WM_NOTIFY: { - NMHDR* nmhdr = (NMHDR*)lp; - switch(nmhdr->code) { - case NM_CLICK: - case NM_RETURN: { - if(nmhdr->idFrom == IDC_LGPL || nmhdr->idFrom == IDC_HOMEPAGE) { - NMLINK* link = (NMLINK*)nmhdr; - LITEM item = link->item; - ::ShellExecuteW(NULL, L"open", item.szUrl, NULL, NULL, SW_SHOWNORMAL); - } - break; - } - } - break; - } - } - return Ime::Dialog::wndProc(msg, wp, lp); -} - -} // namespace Chewing diff --git a/ChewingPreferences/AboutDialog.h b/ChewingPreferences/AboutDialog.h deleted file mode 100644 index 6381ffb..0000000 --- a/ChewingPreferences/AboutDialog.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#ifndef CHEWING_ABOUT_DIALOG_H -#define CHEWING_ABOUT_DIALOG_H -#pragma once - -#include "Dialog.h" - -namespace Chewing { - -class AboutDialog : public Ime::Dialog { -public: - AboutDialog(void); - virtual ~AboutDialog(void); - -protected: - bool onInitDialog(); - LRESULT wndProc(UINT msg, WPARAM wp, LPARAM lp); -}; - -} - -#endif diff --git a/ChewingPreferences/CMakeLists.txt b/ChewingPreferences/CMakeLists.txt deleted file mode 100644 index b90bae3..0000000 --- a/ChewingPreferences/CMakeLists.txt +++ /dev/null @@ -1,52 +0,0 @@ -cmake_minimum_required(VERSION 3.24.0) -project(ChewingPreferences LANGUAGES CXX) - -# http://www.utf8everywhere.org/ -add_definitions( - /D_UNICODE=1 /DUNICODE=1 # do Unicode build - /D_CRT_SECURE_NO_WARNINGS # disable warnings about old libc functions -) -if (MSVC) - add_compile_options(/utf-8) -endif() - -# Static link MSVC runtime -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") - -add_executable(ChewingPreferences WIN32 - # Entry point - ${PROJECT_SOURCE_DIR}/ChewingPreferences.cpp - # Configurations - ../chewing_tip/ChewingConfig.cpp - ../chewing_tip/ChewingConfig.h - # Configuration dialog - ${PROJECT_SOURCE_DIR}/Dialog.cpp - ${PROJECT_SOURCE_DIR}/Dialog.h - ${PROJECT_SOURCE_DIR}/PropertyDialog.cpp - ${PROJECT_SOURCE_DIR}/PropertyDialog.h - ${PROJECT_SOURCE_DIR}/PropertyPage.cpp - ${PROJECT_SOURCE_DIR}/PropertyPage.h - ${PROJECT_SOURCE_DIR}/TypingPropertyPage.cpp - ${PROJECT_SOURCE_DIR}/TypingPropertyPage.h - ${PROJECT_SOURCE_DIR}/UiPropertyPage.cpp - ${PROJECT_SOURCE_DIR}/UiPropertyPage.h - ${PROJECT_SOURCE_DIR}/KeyboardPropertyPage.cpp - ${PROJECT_SOURCE_DIR}/KeyboardPropertyPage.h - ${PROJECT_SOURCE_DIR}/SymbolsPropertyPage.cpp - ${PROJECT_SOURCE_DIR}/SymbolsPropertyPage.h - # About dialog - ${PROJECT_SOURCE_DIR}/AboutDialog.cpp - ${PROJECT_SOURCE_DIR}/AboutDialog.h - # resources - ${PROJECT_SOURCE_DIR}/ChewingPreferences.rc - ${PROJECT_SOURCE_DIR}/ChewingPreferences.exe.manifest - ../chewing_tip/mainicon.ico - ../chewing_tip/logo.bmp -) -target_include_directories(ChewingPreferences - PRIVATE ../chewing_tip -) -target_link_libraries(ChewingPreferences - comctl32.lib -) diff --git a/ChewingPreferences/ChewingPreferences.cpp b/ChewingPreferences/ChewingPreferences.cpp deleted file mode 100644 index 56d714c..0000000 --- a/ChewingPreferences/ChewingPreferences.cpp +++ /dev/null @@ -1,80 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#include "TypingPropertyPage.h" -#include "UiPropertyPage.h" -#include "KeyboardPropertyPage.h" -#include "SymbolsPropertyPage.h" -#include "PropertyDialog.h" -#include "AboutDialog.h" -#include "resource.h" -#include -#include - -#include -#include - -namespace Chewing { - -static void initControls() { - INITCOMMONCONTROLSEX ic; - ic.dwSize = sizeof(ic); - ic.dwICC = ICC_UPDOWN_CLASS; - ::InitCommonControlsEx(&ic); - - // Init RichEdit 2.0 - // HMODULE riched20; - // riched20 = LoadLibraryA("RICHED20.DLL"); -} - -static void configDialog(HINSTANCE hInstance) { - initControls(); - - Config config; - config.load(); - - Ime::PropertyDialog dlg; - TypingPropertyPage* typingPage = new TypingPropertyPage(&config); - UiPropertyPage* uiPage = new UiPropertyPage(&config); - KeyboardPropertyPage* keyboardPage = new KeyboardPropertyPage(&config); - SymbolsPropertyPage* symbolsPage = new SymbolsPropertyPage(&config); - dlg.addPage(typingPage); - dlg.addPage(uiPage); - dlg.addPage(keyboardPage); - dlg.addPage(symbolsPage); - INT_PTR ret = dlg.showModal(hInstance, (LPCTSTR)IDS_CONFIG_TITLE, 0, HWND_DESKTOP); - if(ret) { // the user clicks OK button - config.save(); - } -} - -static void aboutDialog(HINSTANCE hInstance) { - AboutDialog dlg; - dlg.showModal(hInstance, IDD_ABOUT); -} - -} - -int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR cmdLine, int nShow) { - if(cmdLine && wcscmp(cmdLine, L"/about") == 0) // show about - Chewing::aboutDialog(hInstance); - else // show configuration dialog - Chewing::configDialog(hInstance); - return 0; -} diff --git a/ChewingPreferences/ChewingPreferences.exe.manifest b/ChewingPreferences/ChewingPreferences.exe.manifest deleted file mode 100644 index 8ff6e2a..0000000 --- a/ChewingPreferences/ChewingPreferences.exe.manifest +++ /dev/null @@ -1,36 +0,0 @@ - - - - Chewing preference application - - - - - - - - - - - - - - - - - - - - diff --git a/ChewingPreferences/ChewingPreferences.rc b/ChewingPreferences/ChewingPreferences.rc deleted file mode 100644 index f0e0b38..0000000 --- a/ChewingPreferences/ChewingPreferences.rc +++ /dev/null @@ -1,402 +0,0 @@ -#pragma code_page(65001) // UTF-8 - -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Chinese (Traditional, Taiwan) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT) -LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include \0" -END - -3 TEXTINCLUDE -BEGIN - "#include ""ChewingPreferences.rc2""\0" -END - -#endif // APSTUDIO_INVOKED - -#include "../version.rc" - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON ICON "../chewing_tip/im.chewing.Chewing.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION VER_FILEVERSION - PRODUCTVERSION VER_PRODUCTVERSION - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x0L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040404b0" - BEGIN - VALUE "CompanyName", "Chewing" - VALUE "FileDescription", "新酷音輸入法設定" - VALUE "FileVersion", VER_FILEVERSION_STR - VALUE "InternalName", "ChewingPreferences.exe" - VALUE "LegalCopyright", "Copyright (C) 2024" - VALUE "OriginalFilename", "ChewingPreferences.exe" - VALUE "ProductName", "新酷音輸入法設定" - VALUE "ProductVersion", VER_PRODUCTVERSION_STR - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x404, 1200 - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -IDB_COOL BITMAP "../chewing_tip/logo.bmp" - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_UI DIALOGEX 0, 0, 183, 119 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "介面外觀" -FONT 9, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - LTEXT "每列顯示候選字個數",IDC_STATIC,6,8,73,9 - EDITTEXT IDC_CAND_PER_ROW,87,6,59,14,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_CAND_PER_ROW_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,115,8,10,14 - LTEXT "每頁顯示候選字個數",IDC_STATIC,6,24,73,9 - EDITTEXT IDC_CAND_PER_PAGE,87,22,59,14,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_CAND_PER_PAGE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,115,26,10,14 - LTEXT "選字及訊息視窗文字大小",IDC_STATIC,6,40,78,8 - EDITTEXT IDC_FONT_SIZE,87,38,59,14,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_FONT_SIZE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,118,45,10,14 - CONTROL "用不同顏色顯示選字鍵和候選字",IDC_COLOR_CANDIDATE,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,7,79,128,10 - CONTROL "塊狀游標",IDC_BLOCK_CURSOR,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,6,90,48,10 - CONTROL "使用底線標示詞",IDC_PHRASE_MARK,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,6,101,72,10 - PUSHBUTTON "選字鍵色彩",IDC_SELKEY_COLOR,116,79,61,14,NOT WS_VISIBLE | WS_DISABLED - PUSHBUTTON "候選字色彩",IDC_CAND_COLOR2,116,94,61,14,NOT WS_VISIBLE | WS_DISABLED -END - -IDD_SYMBOLS DIALOGEX 0, 0, 222, 140 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "特殊符號" -FONT 9, "MS Shell Dlg", 400, 0, 0x88 -BEGIN - LTEXT "以上是符號表的設定檔,語法相當簡單:\n每一行的內容都是: 「分類名稱」=「此分類下的所有符號」\n您也可以一行只放一個符號,則該符號會被放在最上層選單。",IDC_STATIC,6,105,210,29 - LTEXT "輸入中文時,按下 ` 鍵,會顯示下列的符號表:",IDC_STATIC,6,6,210,8 - EDITTEXT IDC_EDIT,6,19,210,82,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_VSCROLL | WS_HSCROLL -END - -IDD_KEYBOARD DIALOGEX 0, 0, 266, 90 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_BORDER -EXSTYLE WS_EX_TOPMOST | WS_EX_TOOLWINDOW -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - PUSHBUTTON "~",IDC_BUTTON1,7,7,18,16 - PUSHBUTTON "1",IDC_BUTTON2,30,7,18,16 - PUSHBUTTON "2",IDC_BUTTON3,52,7,18,16 - PUSHBUTTON "3",IDC_BUTTON4,75,7,18,16 - PUSHBUTTON "4",IDC_BUTTON5,98,7,18,16 - PUSHBUTTON "5",IDC_BUTTON6,120,7,18,16 - PUSHBUTTON "6",IDC_BUTTON7,143,7,18,16 - PUSHBUTTON "7",IDC_BUTTON8,165,7,18,16 - PUSHBUTTON "8",IDC_BUTTON9,187,7,18,16 - PUSHBUTTON "。",IDC_BUTTON10,231,67,18,16 - PUSHBUTTON "0",IDC_BUTTON11,233,7,18,16 - PUSHBUTTON "Tab",IDC_BUTTON12,7,27,26,16 - PUSHBUTTON "Caps",IDC_BUTTON13,7,47,31,16 - PUSHBUTTON "Shift",IDC_BUTTON14,7,67,36,16 - PUSHBUTTON "Q",IDC_BUTTON15,38,27,18,16 - PUSHBUTTON "W",IDC_BUTTON16,60,27,18,16 - PUSHBUTTON "E",IDC_BUTTON17,83,27,18,16 - PUSHBUTTON "R",IDC_BUTTON18,106,27,18,16 - PUSHBUTTON "T",IDC_BUTTON19,128,27,18,16 - PUSHBUTTON "Y",IDC_BUTTON20,151,27,18,16 - PUSHBUTTON "U",IDC_BUTTON21,173,27,18,16 - PUSHBUTTON "I",IDC_BUTTON22,195,27,18,16 - PUSHBUTTON "O",IDC_BUTTON23,218,27,18,16 - PUSHBUTTON "P",IDC_BUTTON24,241,27,18,16 - PUSHBUTTON "A",IDC_BUTTON25,43,47,18,16 - PUSHBUTTON "S",IDC_BUTTON26,65,47,18,16 - PUSHBUTTON "D",IDC_BUTTON27,89,47,18,16 - PUSHBUTTON "F",IDC_BUTTON28,111,47,18,16 - PUSHBUTTON "G",IDC_BUTTON29,133,47,18,16 - PUSHBUTTON "H",IDC_BUTTON30,157,47,18,16 - PUSHBUTTON "J",IDC_BUTTON31,179,47,18,16 - PUSHBUTTON "K",IDC_BUTTON32,201,47,18,16 - PUSHBUTTON "L",IDC_BUTTON33,223,47,18,16 - PUSHBUTTON "Z",IDC_BUTTON35,49,67,18,16 - PUSHBUTTON "X",IDC_BUTTON36,71,67,18,16 - PUSHBUTTON "C",IDC_BUTTON37,95,67,18,16 - PUSHBUTTON "V",IDC_BUTTON38,117,67,18,16 - PUSHBUTTON "B",IDC_BUTTON39,139,67,18,16 - PUSHBUTTON "N",IDC_BUTTON40,163,67,18,16 - PUSHBUTTON "M",IDC_BUTTON41,185,67,18,16 - PUSHBUTTON ",",IDC_BUTTON42,208,67,18,16 - PUSHBUTTON "9",IDC_BUTTON43,210,7,18,16 -END - -IDD_EZ_SYMBOLS DIALOGEX 0, 0, 237, 177 -STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "簡易符號輸入" -FONT 9, "新細明體", 0, 0, 0x0 -BEGIN - CONTROL "",IDC_EZEDIT,"RichEdit20A",ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | ES_NUMBER | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,4,3,229,118 - LTEXT "這是簡易符號輸入的設定介面。這個介面裡的一行表示一個鍵所對應的字串,例如「m 新酷音」或是「L orz」等。\n每一行的格式必須符合:「Ta Tb」。其中 Ta 與 Tb 間必須有一個半形空白字元;Ta 可以是 a-z 等字母;Tb 可以是長度 1 到 10 的任意中英文字串。",IDC_STATIC,8,127,222,49,SS_NOPREFIX -END - -IDD_ABOUT DIALOGEX 0, 0, 218, 200 -STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION ABOUT_CAPTION_WITH_VER -FONT 9, "MS Shell Dlg", 400, 0, 0x88 -BEGIN - CONTROL IDB_COOL,IDC_STATIC,"Static",SS_BITMAP,7,7,69,74 - LTEXT "題字:翁政銓",IDC_STATIC,7,85,49,8 - PUSHBUTTON "確定 (&O)",IDOK,83,178,50,14 - LTEXT "新酷音 - 智慧型注音輸入法",IDC_STATIC,84,7,92,8 - LTEXT ABOUT_VERSION_STR,IDC_VERSION,84,20,92,8 - LTEXT ABOUT_RELEASE_DATE_STR,IDC_RELEASE_DATE,84,33,100,8 - LTEXT "授權方式:",IDC_STATIC,84,59,35,8 - LTEXT "專案首頁:",IDC_STATIC,84,72,35,8 - LTEXT "軟體開發者:libchewing 開發團隊",IDC_STATIC,84,46,104,8 - LTEXT "新酷音原是 Linux 系統下知名的輸入法,由 gugod, jserv, kanru\n\n等前輩,改良原本由龔律全與陳康本開發的酷音輸入法而來,\n\n有多種分支,目前已經能夠支援包括 Mac 在內的多種平台。\n\n這個 Windows 版本是由 PCMan, czchen 等人,\n\n使用 libchewing 核心,移植出 Windows TSF 版本",IDC_STATIC,7,99,204,75 - CONTROL "GNU LGPL",IDC_LGPL, - "SysLink",WS_TABSTOP,121,58,45,12 - CONTROL "https://chewing.im/",IDC_HOMEPAGE, - "SysLink",WS_TABSTOP,121,72,81,12 -END - -IDD_KBLAYOUT DIALOGEX 0, 0, 256, 90 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "鍵盤設定" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - GROUPBOX "鍵盤對應",IDC_STATIC,7,7,242,104 - CONTROL "預設",IDC_KB1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,16,20,47,11 - CONTROL "許氏鍵盤",IDC_KB2,"Button",BS_AUTORADIOBUTTON,16,34,50,11 - CONTROL "IBM",IDC_KB3,"Button",BS_AUTORADIOBUTTON,16,48,35,11 - CONTROL "精業",IDC_KB4,"Button",BS_AUTORADIOBUTTON,16,62,35,11 - CONTROL "倚天",IDC_KB5,"Button",BS_AUTORADIOBUTTON,16,76,35,11 - CONTROL "倚天 26 鍵",IDC_KB6,"Button",BS_AUTORADIOBUTTON,16,90,56,11 - CONTROL "DVORAK",IDC_KB7,"Button",BS_AUTORADIOBUTTON,84,20,65,11 - CONTROL "DVORAK 許氏",IDC_KB8,"Button",BS_AUTORADIOBUTTON,84,34,66,9 - CONTROL "漢語拼音",IDC_KB9,"Button",BS_AUTORADIOBUTTON,84,48,65,11 - CONTROL "台灣華語羅馬拼音",IDC_KB10,"Button",BS_AUTORADIOBUTTON,84,62,80,10 - CONTROL "注音二式",IDC_KB11,"Button",BS_AUTORADIOBUTTON,84,76,48,10 - CONTROL "CARPLX",IDC_KB12,"Button",BS_AUTORADIOBUTTON,84,90,65,10 - CONTROL "Colemak-DH ANSI",IDC_KB13,"Button",BS_AUTORADIOBUTTON,160,20,67,10 - CONTROL "Colemak DH Orth",IDC_KB14,"Button",BS_AUTORADIOBUTTON,160,34,65,10 - CONTROL "Workman",IDC_KB15,"Button",BS_AUTORADIOBUTTON,160,48,65,10 -END - -IDD_TYPING DIALOGEX 0, 0, 222, 123 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "打字行為" -FONT 9, "MS Shell Dlg", 400, 0, 0x0 -BEGIN - CONTROL "使用 Shift 快速切換中英文",IDC_ENABLE_SHIFT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,6,97,10 - CONTROL "使用 CapsLock 切換中英文",IDC_ENABLE_CAPSLOCK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,20,97,10 - CONTROL "使用 Esc 清空編輯區字串",IDC_ESC_CLEAN_ALL_BUF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,34,93,10 - CONTROL "按住 Shift 輸入全形標點符號",IDC_SHIFT_FULLSHAPE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,48,103,10 - CONTROL "按住 Shift 輸入大寫英文字母",IDC_SHIFT_UPPERCASE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,62,103,10 - CONTROL "按住 Shift 輸入快速符號",IDC_SHIFT_SYMBOL,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,6,90,90,10 - CONTROL "Ctrl + 數字加入游標前方的詞",IDC_ADD_PHRASE_FORWARD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,76,104,10 - CONTROL "按住 Ctrl 輸入快速符號",IDC_CTRL_SYMBOL,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,6,104,86,10 - CONTROL "使用方向鍵移動游標選字",IDC_CURSOR_CANDLIST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,116,6,91,10 - CONTROL "按空白鍵叫出選字視窗",IDC_SPACESEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,116,20,85,10 - CONTROL "選字完畢自動跳到下一個字",IDC_ADV_AFTER_SEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,116,34,98,10 - CONTROL "預設以全形模式啟動",IDC_DEFAULT_FS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,116,48,78,10 - CONTROL "預設以英文模式啟動",IDC_DEFAULT_ENG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,116,62,78,10 - CONTROL "預設輸出簡體中文",IDC_DEFAULT_SIMP_CHINESE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,116,76,71,10 - LTEXT "選字鍵:",IDC_STATIC,116,90,28,8 - COMBOBOX IDC_SELKEYS,148,90,62,76,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "模式:",IDC_STATIC,116,104,28,8 - COMBOBOX IDC_CONV_ENGINES,148,104,62,76,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_UI, DIALOG - BEGIN - LEFTMARGIN, 6 - RIGHTMARGIN, 177 - TOPMARGIN, 6 - BOTTOMMARGIN, 111 - END - - IDD_SYMBOLS, DIALOG - BEGIN - LEFTMARGIN, 6 - RIGHTMARGIN, 216 - TOPMARGIN, 6 - BOTTOMMARGIN, 134 - END - - IDD_KEYBOARD, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 259 - TOPMARGIN, 7 - BOTTOMMARGIN, 83 - END - - IDD_EZ_SYMBOLS, DIALOG - BEGIN - RIGHTMARGIN, 236 - BOTTOMMARGIN, 176 - END - - IDD_ABOUT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 211 - TOPMARGIN, 7 - BOTTOMMARGIN, 192 - END - - IDD_KBLAYOUT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 249 - TOPMARGIN, 7 - BOTTOMMARGIN, 83 - END - - IDD_TYPING, DIALOG - BEGIN - LEFTMARGIN, 6 - RIGHTMARGIN, 216 - TOPMARGIN, 6 - BOTTOMMARGIN, 117 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Menu -// - -IDR_MENU MENU -BEGIN - POPUP "POPUP" - BEGIN - MENUITEM "關於新酷音輸入法(&A)", ID_ABOUT - MENUITEM "參觀新酷音官方網站(&W)", ID_WEBSITE - MENUITEM "新酷音線上討論區(&G)", ID_GROUP - MENUITEM SEPARATOR - MENUITEM "軟體本身的建議及錯誤回報(&B)", ID_BUGREPORT - MENUITEM "注音及選字選詞錯誤回報 (&P)", ID_DICT_BUGREPORT - MENUITEM SEPARATOR - POPUP "網路辭典 (&D)" - BEGIN - MENUITEM "萌典 (moedict)", ID_MOEDICT - MENUITEM SEPARATOR - MENUITEM "教育部國語辭典", ID_DICT - MENUITEM "教育部國語辭典簡編本", ID_SIMPDICT - MENUITEM "教育部國語小字典", ID_LITTLEDICT - MENUITEM "教育部成語典", ID_PROVERBDICT - END - MENUITEM SEPARATOR - MENUITEM "新酷音使用說明 (&H)", ID_CHEWING_HELP - MENUITEM "編輯使用者詞庫 (&E)", ID_HASHED, INACTIVE - MENUITEM "設定新酷音輸入法(&C)", ID_CONFIG - END - POPUP "EDIT" - BEGIN - MENUITEM "復原 (&U)", ID_EDIT_UNDO - MENUITEM SEPARATOR - MENUITEM "剪下 (&T)", ID_EDIT_CUT - MENUITEM "複製 (&C)", ID_EDIT_COPY - MENUITEM "貼上 (&P)", ID_EDIT_PASTE - MENUITEM "刪除 (&D)", ID_EDIT_DELETE - MENUITEM SEPARATOR - MENUITEM "全選 (&A)", ID_EDIT_SELALL - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_CHEWING "新酷音輸入法" - IDS_SWITCH_SHAPE "全形/半形切換" - IDS_SWITCH_LANG "中文/英文切換" - IDS_SETTINGS "設定/工具選單" - IDS_CONFIG_TITLE PREFS_TITLE_WITH_VER -END - -#endif // Chinese (Traditional, Taiwan) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// -#include "ChewingPreferences.rc2" -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/ChewingPreferences/ChewingPreferences.rc2 b/ChewingPreferences/ChewingPreferences.rc2 deleted file mode 100644 index 2a18f41..0000000 --- a/ChewingPreferences/ChewingPreferences.rc2 +++ /dev/null @@ -1 +0,0 @@ -CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "ChewingPreferences.exe.manifest" diff --git a/ChewingPreferences/Dialog.cpp b/ChewingPreferences/Dialog.cpp deleted file mode 100644 index c9b4856..0000000 --- a/ChewingPreferences/Dialog.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#include "Dialog.h" - -namespace Ime { - -std::map Dialog::hwndMap_; - -Dialog::Dialog(void): hwnd_(NULL) { -} - -Dialog::~Dialog(void) { - if(hwnd_) { - DestroyWindow(hwnd_); - } -} - -bool Dialog::Create(HINSTANCE hinstance, UINT dialogId, HWND parent) { // modaless - hwnd_ = ::CreateDialogParam(hinstance, LPCTSTR(dialogId), parent, _dlgProc, (LPARAM)this); - return hwnd_ != NULL; -} - -UINT Dialog::showModal(HINSTANCE hinstance, UINT dialogId, HWND parent) { // modal - return ::DialogBoxParam(hinstance, LPCTSTR(dialogId), parent, _dlgProc, (LPARAM)this); -} - -// static -INT_PTR CALLBACK Dialog::_dlgProc(HWND hwnd , UINT msg, WPARAM wp , LPARAM lp) { - Dialog* pThis = (Dialog*)hwndMap_[hwnd]; - if(pThis) { - INT_PTR result = pThis->wndProc(msg, wp, lp); - if(msg == WM_NCDESTROY) - hwndMap_.erase(hwnd); - return result; - } - else { - if(msg == WM_INITDIALOG) { - Dialog* pThis = (Dialog*)lp; - pThis->hwnd_ = hwnd; - hwndMap_[hwnd] = pThis; - return pThis->wndProc(msg, wp, lp); - } - } - return FALSE; -} - -// virtual -LRESULT Dialog::wndProc(UINT msg, WPARAM wp , LPARAM lp) { - switch(msg) { - case WM_COMMAND: - switch(wp) { - case IDOK: - onOK(); - return TRUE; - case IDCANCEL: - onCancel(); - return TRUE; - } - break; - case WM_INITDIALOG: - return onInitDialog(); - } - return FALSE; -} - -// virtual -bool Dialog::onInitDialog() { - return true; -} - -// virtual -void Dialog::onOK() { - endDialog(IDOK); -} - -// virtual -void Dialog::onCancel() { - endDialog(IDCANCEL); -} - -} // namespace Ime - diff --git a/ChewingPreferences/Dialog.h b/ChewingPreferences/Dialog.h deleted file mode 100644 index 7527536..0000000 --- a/ChewingPreferences/Dialog.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#ifndef IME_DIALOG_H -#define IME_DIALOG_H - -#include - -#include - -namespace Ime { - -class Dialog { -public: - Dialog(void); - virtual ~Dialog(void); - - bool Create(HINSTANCE hinstance, UINT dialogId, HWND parent = HWND_DESKTOP); // modaless - UINT showModal(HINSTANCE hinstance, UINT dialogId, HWND parent = HWND_DESKTOP); // modal - - void endDialog(UINT result) { - ::EndDialog(hwnd_, result); - } - -protected: - static INT_PTR CALLBACK _dlgProc(HWND hwnd , UINT msg, WPARAM wp , LPARAM lp); - virtual LRESULT wndProc(UINT msg, WPARAM wp , LPARAM lp); - - virtual bool onInitDialog(); - virtual void onOK(); - virtual void onCancel(); - - HWND hwnd_; - static std::map hwndMap_; -private: -}; - -} - -#endif diff --git a/ChewingPreferences/KeyboardPropertyPage.cpp b/ChewingPreferences/KeyboardPropertyPage.cpp deleted file mode 100644 index 8e7f3a0..0000000 --- a/ChewingPreferences/KeyboardPropertyPage.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#include "KeyboardPropertyPage.h" -#include "resource.h" -#include - -namespace Chewing { - -KeyboardPropertyPage::KeyboardPropertyPage(Config* config): - Ime::PropertyPage((LPCTSTR)IDD_KBLAYOUT), - config_(config) { -} - -KeyboardPropertyPage::~KeyboardPropertyPage(void) { -} - - -// virtual -bool KeyboardPropertyPage::onInitDialog() { - CheckRadioButton(hwnd_, IDC_KB1, IDC_KB15, IDC_KB1 + config_->keyboardLayout); - return PropertyPage::onInitDialog(); -} - -// virtual -void KeyboardPropertyPage::onOK() { - for(UINT id = IDC_KB1; id <= IDC_KB15; ++id) { - if(IsDlgButtonChecked(hwnd_, id)) { - config_->keyboardLayout = (id - IDC_KB1); - break; - } - } - PropertyPage::onOK(); -} - - -} // namespace Chewing diff --git a/ChewingPreferences/KeyboardPropertyPage.h b/ChewingPreferences/KeyboardPropertyPage.h deleted file mode 100644 index cae2c82..0000000 --- a/ChewingPreferences/KeyboardPropertyPage.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#ifndef CHEWING_KEYBOARD_PROPERTY_PAGE_H -#define CHEWING_KEYBOARD_PROPERTY_PAGE_H -#pragma once - -#include "PropertyPage.h" -#include "ChewingConfig.h" - -namespace Chewing { - -class KeyboardPropertyPage : public Ime::PropertyPage { -public: - KeyboardPropertyPage(Config* config); - virtual ~KeyboardPropertyPage(void); - -protected: - virtual bool onInitDialog(); - virtual void onOK(); - -private: - Config* config_; -}; - -} - -#endif diff --git a/ChewingPreferences/PropertyDialog.cpp b/ChewingPreferences/PropertyDialog.cpp deleted file mode 100644 index b31364d..0000000 --- a/ChewingPreferences/PropertyDialog.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#include "PropertyDialog.h" -#include "PropertyPage.h" -#include -#include - -using namespace std; - -namespace Ime { - -//typedef INT_PTR (WINAPI *PropertySheetFunc)(LPCPROPSHEETHEADER lppsph); -//static PropertySheetFunc g_PropertySheetW = NULL; - -PropertyDialog::PropertyDialog(void) { -} - -PropertyDialog::~PropertyDialog(void) { - if(!pages_.empty()) { - for(vector::iterator it = pages_.begin(); it != pages_.end(); ++it) { - PropertyPage* page = *it; - delete page; - } - } -} - -INT_PTR PropertyDialog::showModal(HINSTANCE hInstance, LPCTSTR captionId, LPCTSTR iconId, HWND parent, DWORD flags) { - assert(pages_.size() > 0); - - // Windows 8 does not allow linking to comctl32.dll - // when running in app containers. - // We use LoadLibrary here, but this should only be used in desktop app mode. - // if(!g_PropertySheetW) { - // HMODULE mod = ::LoadLibraryW(L"comctl32.dll"); - // g_PropertySheetW = (PropertySheetFunc)::GetProcAddress(mod, "PropertySheetW"); - // } - - PROPSHEETPAGE* pages = new PROPSHEETPAGE[pages_.size()]; - for(size_t i = 0; i < pages_.size(); ++i) { - pages_[i]->setup(pages[i]); - pages[i].hInstance = hInstance; - } - - PROPSHEETHEADER psh = {0}; - psh.dwFlags = flags; - psh.dwSize = sizeof(PROPSHEETHEADER); - psh.hInstance = hInstance; - psh.hwndParent = parent; - psh.pszIcon = (LPCTSTR)iconId; - psh.nPages = pages_.size(); - psh.ppsp = pages; - psh.pszCaption = (LPCTSTR)captionId; - - // INT_PTR result = g_PropertySheetW(&psh); - INT_PTR result =::PropertySheetW(&psh); - delete []pages; - - return result; -} - -void PropertyDialog::addPage(PropertyPage* page) { - pages_.push_back(page); -} - -void PropertyDialog::removePage(PropertyPage* page) { - vector::iterator it = std::find(pages_.begin(), pages_.end(), page); - if(it != pages_.end()) - pages_.erase(it); -} - -} // namespace Ime diff --git a/ChewingPreferences/PropertyDialog.h b/ChewingPreferences/PropertyDialog.h deleted file mode 100644 index 88c8fcb..0000000 --- a/ChewingPreferences/PropertyDialog.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#ifndef IME_PROPERTY_DIALOG_H -#define IME_PROPERTY_DIALOG_H - -#include -#include -#include -#include "PropertyPage.h" - -namespace Ime { - -class PropertyPage; - -// Create a property sheet which contains tabbed interface -// for a configuration dialog -// This class should only be used in desktop app mode. -// Otherwise, your IME might be blocked by Windows 8. (not sure?) - -class PropertyDialog { -public: - PropertyDialog(void); - virtual ~PropertyDialog(void); - - void addPage(PropertyPage* page); - void removePage(PropertyPage* page); - INT_PTR showModal(HINSTANCE hInstance, LPCTSTR captionId = 0, LPCTSTR iconId = 0, HWND parent = HWND_DESKTOP, DWORD flags = PSH_NOAPPLYNOW | PSH_USEICONID | PSH_PROPSHEETPAGE); - -private: - std::vector pages_; -}; - -} - -#endif diff --git a/ChewingPreferences/PropertyPage.cpp b/ChewingPreferences/PropertyPage.cpp deleted file mode 100644 index b15548f..0000000 --- a/ChewingPreferences/PropertyPage.cpp +++ /dev/null @@ -1,81 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#include "PropertyPage.h" - -namespace Ime { - -PropertyPage::PropertyPage(LPCTSTR dialogId): - Dialog(), - dialogId_(dialogId) { -} - -PropertyPage::~PropertyPage(void) { -} - -void PropertyPage::setup(PROPSHEETPAGE& page) { - memset(&page, 0, sizeof(PROPSHEETPAGE)); - page.dwSize = sizeof(PROPSHEETPAGE); - page.dwFlags = PSP_DEFAULT; - - page.pszTemplate = (LPCTSTR)dialogId_; - page.pfnDlgProc = (DLGPROC)_dlgProc; - page.lParam = (LPARAM)this; -} - -// static -INT_PTR CALLBACK PropertyPage::_dlgProc(HWND hwnd , UINT msg, WPARAM wp , LPARAM lp) { - if(msg == WM_INITDIALOG) { - PROPSHEETPAGE* page = (PROPSHEETPAGE*)lp; - PropertyPage* pThis = (PropertyPage*)page->lParam; - pThis->hwnd_ = hwnd; - hwndMap_[hwnd] = pThis; - pThis->wndProc(msg, wp, lp); - return TRUE; - } - return Dialog::_dlgProc(hwnd, msg, wp, lp); -} - -// virtual -LRESULT PropertyPage::wndProc(UINT msg, WPARAM wp, LPARAM lp) { - switch(msg) { - case WM_NOTIFY: - switch(LPNMHDR(lp)->code) { - case PSN_APPLY: - onOK(); - return TRUE; - case PSN_QUERYCANCEL: - onCancel(); - return TRUE; - } - } - return Dialog::wndProc(msg, wp, lp); -} - -// virtual -void PropertyPage::onOK() { - ::SetWindowLongPtr(hwnd_, DWLP_MSGRESULT, PSNRET_NOERROR); -} - -// virtual -void PropertyPage::onCancel() { - ::SetWindowLongPtr(hwnd_, DWLP_MSGRESULT, PSNRET_NOERROR); -} - -} // namespace Ime diff --git a/ChewingPreferences/PropertyPage.h b/ChewingPreferences/PropertyPage.h deleted file mode 100644 index 258d1d4..0000000 --- a/ChewingPreferences/PropertyPage.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#ifndef IME_PROPERTY_PAGE_H -#define IME_PROPERTY_PAGE_H - -#include "Dialog.h" -#include - -namespace Ime { - -class PropertyPage: public Dialog { -public: - friend class PropertyDialog; - - PropertyPage(LPCTSTR dialogId); - virtual ~PropertyPage(void); - -protected: - void setup(PROPSHEETPAGE& page); - static INT_PTR CALLBACK _dlgProc(HWND hwnd , UINT msg, WPARAM wp , LPARAM lp); - virtual LRESULT wndProc(UINT msg, WPARAM wp, LPARAM lp); - virtual void onOK(); - virtual void onCancel(); - -private: - LPCTSTR dialogId_; -}; - -} - -#endif diff --git a/ChewingPreferences/SymbolsPropertyPage.cpp b/ChewingPreferences/SymbolsPropertyPage.cpp deleted file mode 100644 index 8c4e76f..0000000 --- a/ChewingPreferences/SymbolsPropertyPage.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#include "SymbolsPropertyPage.h" -#include "resource.h" -#include - -namespace Chewing { - -SymbolsPropertyPage::SymbolsPropertyPage(Config* config): - Ime::PropertyPage((LPCTSTR)IDD_SYMBOLS), - config_(config) { - - wchar_t path[MAX_PATH]; - // get user profile directory - if(::GetEnvironmentVariableW(L"USERPROFILE", path, MAX_PATH)) { - userDir_ = path; - userDir_ += L"\\ChewingTextService"; - } -} - -SymbolsPropertyPage::~SymbolsPropertyPage(void) { -} - -// virtual -bool SymbolsPropertyPage::onInitDialog() { - wchar_t basename[] = L"\\symbols.dat"; - std::wstring filename = userDir_ + basename; - - HANDLE file = CreateFile(filename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - if(file == INVALID_HANDLE_VALUE) { - // user specific symbols file does not exists, try the built-in one in Program files - // try C:\program files (x86) first - wchar_t path[MAX_PATH]; - HRESULT result = ::SHGetFolderPathW(NULL, CSIDL_PROGRAM_FILESX86, NULL, 0, path); - if(result != S_OK) // failed, fall back to C:\program files - result = ::SHGetFolderPathW(NULL, CSIDL_PROGRAM_FILES, NULL, 0, path); - if(result == S_OK) { // program files folder is found - filename = path; - filename += L"\\ChewingTextService\\Dictionary"; - filename += basename; - } - file = CreateFile(filename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - } - if(file != INVALID_HANDLE_VALUE) { - DWORD size = GetFileSize(file, NULL); - char* buf = new char[size]; - DWORD rsize; - ReadFile(file, buf, size, &rsize, NULL); - CloseHandle(file); - std::wstring wstr; - int wlen = ::MultiByteToWideChar(CP_UTF8, 0, buf, size, NULL, 0); - if (wlen > 0) { - wstr.resize(wlen); - ::MultiByteToWideChar(CP_UTF8, 0, buf, size, &wstr[0], wlen); - ::SetDlgItemTextW(hwnd_, IDC_EDIT, wstr.c_str()); - } else { - ::SetDlgItemTextW(hwnd_, IDC_EDIT, L"無法讀取檔案"); - } - delete []buf; - } - return PropertyPage::onInitDialog(); -} - -// virtual -void SymbolsPropertyPage::onOK() { - // create the user directory if not exists - // NOTE: this call will fail in Windows 8 store apps - // We need a way to create the dir in desktop mode and - // set proper ACL, so later we can access it inside apps. - DWORD attributes = ::GetFileAttributesW(userDir_.c_str()); - if(attributes == INVALID_FILE_ATTRIBUTES) { - // create the directory if it does not exist - if(::GetLastError() == ERROR_FILE_NOT_FOUND) { - ::CreateDirectoryW(userDir_.c_str(), NULL); - attributes = ::GetFileAttributesW(userDir_.c_str()); - } - // make the directory hidden - if(attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_HIDDEN) == 0) - ::SetFileAttributesW(userDir_.c_str(), attributes|FILE_ATTRIBUTE_HIDDEN); - } - - // save current settings - std::wstring filename = userDir_; - filename += L"\\symbols.dat"; - HANDLE file = CreateFile(filename.c_str(), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL ); - if( file != INVALID_HANDLE_VALUE ) { - HWND edit = ::GetDlgItem(hwnd_, IDC_EDIT); - int len = ::GetWindowTextLengthW(edit); - wchar_t* buf = new wchar_t[len]; - len = ::GetWindowText(edit, buf, len); - std::string ustr; - int ulen = ::WideCharToMultiByte(CP_UTF8, 0, &buf[0], len, NULL, 0, NULL, NULL); - if (ulen > 0) { - ustr.resize(ulen); - ::WideCharToMultiByte(CP_UTF8, 0, &buf[0], len, &ustr[0], ulen, NULL, NULL); - DWORD wsize; - ::WriteFile( file, ustr.c_str(), ustr.length(), &wsize, NULL ); - ::CloseHandle(file); - } - delete []buf; - } - - PropertyPage::onOK(); -} - - -} // namespace Chewing diff --git a/ChewingPreferences/SymbolsPropertyPage.h b/ChewingPreferences/SymbolsPropertyPage.h deleted file mode 100644 index 5bbb141..0000000 --- a/ChewingPreferences/SymbolsPropertyPage.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#ifndef CHEWING_SYMBOLS_PROPERTY_PAGE -#define CHEWING_SYMBOLS_PROPERTY_PAGE -#pragma once - -#include "PropertyPage.h" -#include "ChewingConfig.h" -#include - -namespace Chewing { - -class SymbolsPropertyPage : public Ime::PropertyPage { -public: - SymbolsPropertyPage(Config* config); - virtual ~SymbolsPropertyPage(void); - -protected: - virtual bool onInitDialog(); - virtual void onOK(); - -private: - Config* config_; - std::wstring userDir_; -}; - -} // namespace Chewing - -#endif - diff --git a/ChewingPreferences/TypingPropertyPage.cpp b/ChewingPreferences/TypingPropertyPage.cpp deleted file mode 100644 index 528d6a1..0000000 --- a/ChewingPreferences/TypingPropertyPage.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#include "TypingPropertyPage.h" -#include "resource.h" -#include - -namespace Chewing { - -TypingPropertyPage::TypingPropertyPage(Config* config): - Ime::PropertyPage((LPCTSTR)IDD_TYPING), - config_(config) { -} - -TypingPropertyPage::~TypingPropertyPage(void) { -} - -// virtual -bool TypingPropertyPage::onInitDialog() { - - CheckDlgButton(hwnd_, IDC_SPACESEL, config_->showCandWithSpaceKey); - CheckDlgButton(hwnd_, IDC_ENABLE_SHIFT, config_->switchLangWithShift); - CheckDlgButton(hwnd_, IDC_ADD_PHRASE_FORWARD, config_->addPhraseForward); - CheckDlgButton(hwnd_, IDC_ADV_AFTER_SEL, config_->advanceAfterSelection); - CheckDlgButton(hwnd_, IDC_CURSOR_CANDLIST, config_->cursorCandList); - CheckDlgButton(hwnd_, IDC_ENABLE_CAPSLOCK, config_->enableCapsLock); - CheckDlgButton(hwnd_, IDC_SHIFT_FULLSHAPE, config_->fullShapeSymbols); - CheckDlgButton(hwnd_, IDC_ESC_CLEAN_ALL_BUF, config_->escCleanAllBuf); - CheckDlgButton(hwnd_, IDC_SHIFT_SYMBOL, config_->easySymbolsWithShift); - CheckDlgButton(hwnd_, IDC_CTRL_SYMBOL, config_->easySymbolsWithCtrl); - CheckDlgButton(hwnd_, IDC_SHIFT_UPPERCASE, config_->upperCaseWithShift); - CheckDlgButton(hwnd_, IDC_ENABLE_Simp, config_->outputSimpChinese); - CheckDlgButton(hwnd_, IDC_DEFAULT_ENG, config_->defaultEnglish); - CheckDlgButton(hwnd_, IDC_DEFAULT_FS, config_->defaultFullSpace); - - HWND combo = GetDlgItem(hwnd_, IDC_SELKEYS); - for(const wchar_t** pselkeys = config_->selKeys; *pselkeys; ++pselkeys) - ComboBox_AddString(combo, *pselkeys); - ComboBox_SetCurSel(combo, config_->selKeyType); - - combo = GetDlgItem(hwnd_, IDC_CONV_ENGINES); - for(const wchar_t** pconvEngine = config_->convEngines; *pconvEngine; ++pconvEngine) - ComboBox_AddString(combo, *pconvEngine); - ComboBox_SetCurSel(combo, config_->convEngine); - - return PropertyPage::onInitDialog(); -} - -// virtual -void TypingPropertyPage::onOK() { - - - config_->selKeyType = ComboBox_GetCurSel(GetDlgItem(hwnd_, IDC_SELKEYS)); - if(config_->selKeyType < 0) - config_->selKeyType = 0; - - config_->convEngine = ComboBox_GetCurSel(GetDlgItem(hwnd_, IDC_CONV_ENGINES)); - if(config_->convEngine < 0) - config_->convEngine = 0; - - config_->showCandWithSpaceKey = IsDlgButtonChecked(hwnd_, IDC_SPACESEL); - config_->switchLangWithShift = IsDlgButtonChecked(hwnd_, IDC_ENABLE_SHIFT); - config_->addPhraseForward = IsDlgButtonChecked(hwnd_, IDC_ADD_PHRASE_FORWARD); - config_->advanceAfterSelection = IsDlgButtonChecked(hwnd_, IDC_ADV_AFTER_SEL); - config_->cursorCandList = IsDlgButtonChecked(hwnd_, IDC_CURSOR_CANDLIST); - config_->enableCapsLock = IsDlgButtonChecked(hwnd_, IDC_ENABLE_CAPSLOCK); - config_->fullShapeSymbols = IsDlgButtonChecked(hwnd_, IDC_SHIFT_FULLSHAPE); - config_->escCleanAllBuf = IsDlgButtonChecked(hwnd_, IDC_ESC_CLEAN_ALL_BUF); - config_->easySymbolsWithShift = IsDlgButtonChecked(hwnd_, IDC_SHIFT_SYMBOL); - config_->easySymbolsWithCtrl = IsDlgButtonChecked(hwnd_, IDC_CTRL_SYMBOL); - config_->upperCaseWithShift = IsDlgButtonChecked(hwnd_, IDC_SHIFT_UPPERCASE); - config_->outputSimpChinese = IsDlgButtonChecked(hwnd_, IDC_ENABLE_Simp); - config_->defaultEnglish = IsDlgButtonChecked(hwnd_, IDC_DEFAULT_ENG); - config_->defaultFullSpace = IsDlgButtonChecked(hwnd_, IDC_DEFAULT_FS); - PropertyPage::onOK(); -} - -} // namespace Chewing diff --git a/ChewingPreferences/TypingPropertyPage.h b/ChewingPreferences/TypingPropertyPage.h deleted file mode 100644 index 18ebd02..0000000 --- a/ChewingPreferences/TypingPropertyPage.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#ifndef CHEWING_TYPING_PROPERTY_PAGE_H -#define CHEWING_TYPING_PROPERTY_PAGE_H - -#include "PropertyPage.h" -#include "ChewingConfig.h" - -namespace Chewing { - -class TypingPropertyPage : public Ime::PropertyPage { -public: - TypingPropertyPage(Config* config); - virtual ~TypingPropertyPage(void); - -protected: - virtual bool onInitDialog(); - virtual void onOK(); - -private: - Config* config_; -}; - -} - -#endif diff --git a/ChewingPreferences/UiPropertyPage.cpp b/ChewingPreferences/UiPropertyPage.cpp deleted file mode 100644 index 85aa479..0000000 --- a/ChewingPreferences/UiPropertyPage.cpp +++ /dev/null @@ -1,80 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#include "UiPropertyPage.h" -#include "resource.h" -#include -#include - -namespace Chewing { - -UiPropertyPage::UiPropertyPage(Config* config): - Ime::PropertyPage((LPCTSTR)IDD_UI), - config_(config) { -} - -UiPropertyPage::~UiPropertyPage(void) { -} - -// virtual -bool UiPropertyPage::onInitDialog() { - HWND spin = GetDlgItem(hwnd_, IDC_FONT_SIZE_SPIN); - ::SendMessage(spin, UDM_SETRANGE32, 4, 64); - ::SendMessage(spin, UDM_SETPOS, 0, - (LPARAM) MAKELONG ((short) config_->fontSize , 0)); - - CheckDlgButton(hwnd_, IDC_PHRASE_MARK, config_->phraseMark); - // CheckDlgButton(hwnd_, IDC_BLOCK_CURSOR, config_->ColoredCompCursor); - CheckDlgButton(hwnd_, IDC_COLOR_CANDIDATE, config_->colorCandWnd); - - spin = GetDlgItem(hwnd_, IDC_CAND_PER_ROW_SPIN); - ::SendMessage(spin, UDM_SETRANGE32, 1, 10); - ::SendMessage(spin, UDM_SETPOS, 0, - (LPARAM) MAKELONG ((short) config_->candPerRow , 0)); - - spin = GetDlgItem(hwnd_, IDC_CAND_PER_PAGE_SPIN); - ::SendMessage(spin, UDM_SETRANGE32, 7, 10); - ::SendMessage(spin, UDM_SETPOS, 0, - (LPARAM) MAKELONG ((short) config_->candPerPage , 0)); - return PropertyPage::onInitDialog(); -} - -// virtual -void UiPropertyPage::onOK() { - HWND spin = GetDlgItem(hwnd_, IDC_FONT_SIZE_SPIN); - int tFontSize = (int)::SendMessage(spin, UDM_GETPOS, 0, 0); - if(tFontSize < 4) tFontSize = 4; - if(tFontSize > 64) tFontSize = 64; - config_->fontSize = tFontSize; - - config_->phraseMark = IsDlgButtonChecked(hwnd_, IDC_PHRASE_MARK); - // config_->coloredCompCursor = IsDlgButtonChecked(hwnd_, IDC_BLOCK_CURSOR); - config_->colorCandWnd = IsDlgButtonChecked(hwnd_, IDC_COLOR_CANDIDATE); - - spin = GetDlgItem(hwnd_, IDC_CAND_PER_ROW_SPIN); - config_->candPerRow = (DWORD)::SendMessage(spin, UDM_GETPOS, 0, 0); - if(config_->candPerRow < 1) config_->candPerRow = 1; - if(config_->candPerRow > 10) config_->candPerRow = 10; - - spin = GetDlgItem(hwnd_, IDC_CAND_PER_PAGE_SPIN); - config_->candPerPage = (int)::SendMessage(spin, UDM_GETPOS, 0, 0); - PropertyPage::onOK(); -} - -} // namespace Chewing diff --git a/ChewingPreferences/UiPropertyPage.h b/ChewingPreferences/UiPropertyPage.h deleted file mode 100644 index dff3423..0000000 --- a/ChewingPreferences/UiPropertyPage.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// Copyright (C) 2013 Hong Jen Yee (PCMan) -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the -// Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -// Boston, MA 02110-1301, USA. -// - -#ifndef CHEWING_UI_PROPERTY_PAGE_H -#define CHEWING_UI_PROPERTY_PAGE_H -#pragma once - -#include "PropertyPage.h" -#include "ChewingConfig.h" - -namespace Chewing { - -class UiPropertyPage : public Ime::PropertyPage { -public: - UiPropertyPage(Config* config); - virtual ~UiPropertyPage(void); - -protected: - virtual bool onInitDialog(); - virtual void onOK(); - -private: - Config* config_; -}; - -} - -#endif diff --git a/ChewingPreferences/resource.h b/ChewingPreferences/resource.h deleted file mode 100644 index d1382d9..0000000 --- a/ChewingPreferences/resource.h +++ /dev/null @@ -1,169 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by ChewingPreferences.rc -// -#define IDI_ICON 101 -#define ID_SWITCH_LANG 101 -#define IDI_ICON2 102 -#define IDS_CHEWING 102 -#define ID_SWITCH_SHAPE 102 -#define IDS_SWITCH_SHAPE 103 -#define IDI_CHI 103 -#define ID_MODE_ICON 103 -#define IDS_SWITCH_LANG 104 -#define IDI_CONFIG 104 -#define IDI_ENG 105 -#define IDS_SETTINGS 105 -#define IDI_FULL_SHAPE 106 -#define IDS_CONFIG_TITLE 106 -#define IDI_HALF_SHAPE 107 -#define IDR_MENU1 108 -#define IDR_MENU2 109 -#define IDR_MENU 109 -#define IDD_KBLAYOUT 110 -#define IDD_ABOUT 121 -#define IDB_COOL 122 -#define IDD_UI 124 -#define IDD_SYMBOLS 127 -#define IDD_KEYBOARD 135 -#define IDD_EZ_SYMBOLS 136 -#define IDD_TYPING 137 -#define IDD_TYPING1 137 -#define IDC_BUTTON1 1009 -#define IDC_CAND_PER_ROW 1010 -#define IDC_BUTTON2 1010 -#define IDC_CAND_PER_ROW_SPIN 1011 -#define IDC_BUTTON3 1011 -#define IDC_CAND_PER_PAGE 1012 -#define IDC_BUTTON4 1012 -#define IDC_BUTTON5 1013 -#define IDC_DEFAULT_ENG 1013 -#define IDC_SELKEYS 1014 -#define IDC_BUTTON6 1014 -#define IDC_SHIFT_CAPITAL 1015 -#define IDC_BUTTON7 1015 -#define IDC_RADIO5 1015 -#define IDC_CONV_ENGINES 1015 -#define IDC_CAND_COLOR2 1016 -#define IDC_SPACESEL 1016 -#define IDC_BUTTON8 1016 -#define IDC_FIX_COMPWND 1017 -#define IDC_BUTTON9 1017 -#define IDC_RADIO6 1017 -#define IDC_CHECK1 1017 -#define IDC_ADD_PHRASE_FORWARD 1018 -#define IDC_BUTTON10 1018 -#define IDC_HIDE_STATUSWND 1019 -#define IDC_BUTTON11 1019 -#define IDC_RADIO7 1019 -#define IDC_LGPL 1019 -#define IDC_DEFAULT_FS 1020 -#define IDC_BUTTON12 1020 -#define IDC_RADIO8 1020 -#define IDC_HOMEPAGE 1020 -#define IDC_ENABLE_SHIFT 1021 -#define IDC_BUTTON13 1021 -#define IDC_VERSION 1021 -#define IDC_CAND_PER_PAGE_SPIN 1022 -#define IDC_BUTTON14 1022 -#define IDC_DEFAULT_FS2 1022 -#define IDC_RELEASE_DATE 1022 -#define IDC_COLOR_CANDIDATE 1023 -#define IDC_BUTTON15 1023 -#define IDC_BLOCK_CURSOR 1024 -#define IDC_BUTTON16 1024 -#define IDC_SHIFT_SYMBOL 1024 -#define IDC_ADV_AFTER_SEL 1025 -#define IDC_BUTTON17 1025 -#define IDC_FONT_SIZE 1026 -#define IDC_BUTTON18 1026 -#define IDC_RADIO2 1026 -#define IDC_CTRL_SYMBOL 1027 -#define IDC_BUTTON19 1027 -#define IDC_EDIT1 1027 -#define IDC_FONT_SIZE_SPIN 1028 -#define IDC_ENABLE_Simp 1028 -#define IDC_BUTTON20 1028 -#define IDC_DEFAULT_SIMP_CHINESE 1028 -#define IDC_BUTTON21 1029 -#define IDC_CURSOR_CANDLIST 1029 -#define IDC_ENABLE_CAPSLOCK 1030 -#define IDC_BUTTON22 1030 -#define IDC_BUTTON23 1031 -#define IDC_SHIFT_FULLSHAPE 1031 -#define IDC_PHRASE_MARK 1032 -#define IDC_BUTTON24 1032 -#define IDC_SHIFT_FULLSHAPE2 1032 -#define IDC_SHIFT_UPPERCASE 1032 -#define IDC_ESC_CLEAN_ALL_BUF 1033 -#define IDC_EDIT 1037 -#define IDC_EZEDIT 1038 -#define IDC_BUTTON25 1053 -#define IDC_BUTTON26 1054 -#define IDC_BUTTON27 1055 -#define IDC_BUTTON28 1056 -#define IDC_BUTTON29 1057 -#define IDC_BUTTON30 1058 -#define IDC_BUTTON31 1059 -#define IDC_BUTTON32 1060 -#define IDC_BUTTON33 1061 -#define IDC_BUTTON35 1063 -#define IDC_BUTTON36 1064 -#define IDC_BUTTON37 1065 -#define IDC_BUTTON38 1066 -#define IDC_BUTTON39 1067 -#define IDC_BUTTON40 1068 -#define IDC_BUTTON41 1069 -#define IDC_BUTTON42 1073 -#define IDC_BUTTON43 1074 -#define IDC_KB1 1075 -#define IDC_KB2 1076 -#define IDC_KB3 1077 -#define IDC_KB4 1078 -#define IDC_KB5 1079 -#define IDC_KB6 1080 -#define IDC_KB7 1081 -#define IDC_KB8 1082 -#define IDC_SELKEY_COLOR 1083 -#define IDC_KB9 1084 -#define IDC_KB10 1085 -#define IDC_KB11 1086 -#define IDC_KB12 1087 -#define IDC_KB13 1088 -#define IDC_KB14 1089 -#define IDC_KB15 1090 -#define ID_SETTINGS_ 40003 -#define ID_ABOUT 40005 -#define ID_CHECK_NEW_VER 40006 -#define ID_WEBSITE 40007 -#define ID_GROUP 40008 -#define ID_BUGREPORT 40009 -#define ID_DICT_BUGREPORT 40010 -#define ID_DICT 40011 -#define ID_SIMPDICT 40012 -#define ID_LITTLEDICT 40013 -#define ID_PROVERBDICT 40014 -#define ID_CHEWING_HELP 40015 -#define ID_HASHED 40016 -#define ID_CONFIG 40017 -#define ID_EDIT_UNDO 40018 -#define ID_EDIT_CUT 40019 -#define ID_EDIT_COPY 40020 -#define ID_EDIT_PASTE 40021 -#define ID_EDIT_DELETE 40022 -#define ID_EDIT_SELALL 40023 -#define ID_40024 40024 -#define ID_MOEDICT 40025 -#define IDC_STATIC -1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NO_MFC 1 -#define _APS_NEXT_RESOURCE_VALUE 111 -#define _APS_NEXT_COMMAND_VALUE 40026 -#define _APS_NEXT_CONTROL_VALUE 1028 -#define _APS_NEXT_SYMED_VALUE 104 -#endif -#endif diff --git a/chewing_tip/ChewingTextService.cpp b/chewing_tip/ChewingTextService.cpp index 9be4cc1..30b350b 100644 --- a/chewing_tip/ChewingTextService.cpp +++ b/chewing_tip/ChewingTextService.cpp @@ -628,6 +628,13 @@ STDMETHODIMP TextService::onCommand(UINT id, CommandType type) { case ID_MODE_ICON: // Windows 8 IME mode icon toggleLanguageMode(nullptr); break; + case ID_HASHED: // show config dialog + if(!isImmersive()) { // only do this in desktop app mode + std::wstring path = programDir(); + path += L"\\ChewingPreferences.exe"; + ::ShellExecuteW(HWND_DESKTOP, L"open", path.c_str(), L"--edit", NULL, SW_SHOWNORMAL); + } + break; case ID_CONFIG: // show config dialog if(!isImmersive()) { // only do this in desktop app mode std::wstring path = programDir(); @@ -643,7 +650,7 @@ STDMETHODIMP TextService::onCommand(UINT id, CommandType type) { // show about dialog std::wstring path = programDir(); path += L"\\ChewingPreferences.exe"; - ::ShellExecuteW(NULL, L"open", path.c_str(), L"/about", NULL, SW_SHOWNORMAL); + ::ShellExecuteW(NULL, L"open", path.c_str(), L"--about", NULL, SW_SHOWNORMAL); } break; case ID_WEBSITE: // visit chewing website diff --git a/chewing_tip/ChewingTextService.rc b/chewing_tip/ChewingTextService.rc index 5538579..2b51d4a 100644 --- a/chewing_tip/ChewingTextService.rc +++ b/chewing_tip/ChewingTextService.rc @@ -118,7 +118,7 @@ BEGIN MENUITEM "注音及選字選詞錯誤回報 (&P)", ID_DICT_BUGREPORT MENUITEM SEPARATOR MENUITEM "新酷音使用說明 (&H)", ID_CHEWING_HELP, INACTIVE - MENUITEM "編輯使用者詞庫 (&E)", ID_HASHED, INACTIVE + MENUITEM "編輯使用者詞庫 (&E)", ID_HASHED MENUITEM "設定新酷音輸入法(&C)", ID_CONFIG MENUITEM SEPARATOR POPUP "網路辭典 (&D)" diff --git a/preferences/Cargo.toml b/preferences/Cargo.toml new file mode 100644 index 0000000..70f67dd --- /dev/null +++ b/preferences/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "chewing-preferences" +version = "24.10.1" +edition = "2021" + +[[bin]] +name = "ChewingPreferences" +path = "src/main.rs" + +[dependencies] +anyhow = "1.0.95" +slint = "1.8.0" +windows = { version = "0.58.0", features = [ + "Win32_Security", + "Win32_System_Registry", +] } + +[dependencies.chewing] +version = "0.9.1" +features = ["sqlite"] +git = "https://github.com/chewing/libchewing" +branch = "feat-dictionary-mgmt-api" + +[build-dependencies] +embed-resource = "3.0.1" +slint-build = "1.8.0" diff --git a/preferences/build.rs b/preferences/build.rs new file mode 100644 index 0000000..dc6ad48 --- /dev/null +++ b/preferences/build.rs @@ -0,0 +1,6 @@ +fn main() { + slint_build::compile("ui/index.slint").expect("Slint build failed"); + embed_resource::compile("preferences.rc", embed_resource::NONE) + .manifest_optional() + .unwrap(); +} diff --git a/preferences/design/chewing-editor-flow.png b/preferences/design/chewing-editor-flow.png new file mode 100644 index 0000000..b3c843e Binary files /dev/null and b/preferences/design/chewing-editor-flow.png differ diff --git a/preferences/preferences.rc b/preferences/preferences.rc new file mode 100644 index 0000000..4e5eff7 --- /dev/null +++ b/preferences/preferences.rc @@ -0,0 +1,52 @@ +#pragma code_page(65001) // UTF-8 + +#include + +#include "../version.rc" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON ICON "../chewing_tip/im.chewing.Chewing.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VER_FILEVERSION + PRODUCTVERSION VER_PRODUCTVERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x0L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040404b0" + BEGIN + VALUE "CompanyName", "Chewing" + VALUE "FileDescription", "新酷音輸入法設定" + VALUE "FileVersion", VER_FILEVERSION_STR + VALUE "InternalName", "ChewingPreferences.exe" + VALUE "LegalCopyright", "Copyright (C) 2024" + VALUE "OriginalFilename", "ChewingPreferences.exe" + VALUE "ProductName", "新酷音輸入法設定" + VALUE "ProductVersion", VER_PRODUCTVERSION_STR + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x404, 1200 + END +END diff --git a/preferences/src/about.rs b/preferences/src/about.rs new file mode 100644 index 0000000..90ef212 --- /dev/null +++ b/preferences/src/about.rs @@ -0,0 +1,15 @@ +use anyhow::Result; +use slint::ComponentHandle; + +use crate::AboutWindow; + +pub fn run() -> Result<()> { + let ui = AboutWindow::new()?; + + ui.on_done(move || { + slint::quit_event_loop().unwrap(); + }); + + ui.run()?; + Ok(()) +} diff --git a/preferences/src/config.rs b/preferences/src/config.rs new file mode 100644 index 0000000..589bd56 --- /dev/null +++ b/preferences/src/config.rs @@ -0,0 +1,313 @@ +use std::{fs, path::PathBuf, time::SystemTime}; + +use anyhow::{bail, Result}; +use chewing::path::data_dir; +use slint::ComponentHandle; +use windows::{ + core::{w, PCWSTR}, + Win32::System::Registry::{ + RegCloseKey, RegCreateKeyExW, RegGetValueW, RegOpenKeyExW, RegSetValueExW, HKEY, + HKEY_CURRENT_USER, KEY_READ, KEY_WOW64_64KEY, KEY_WRITE, REG_DWORD, + REG_OPEN_CREATE_OPTIONS, RRF_RT_REG_DWORD, + }, +}; + +use crate::ConfigWindow; + +pub fn run() -> Result<()> { + let ui = ConfigWindow::new()?; + load_config(&ui)?; + + ui.on_cancel(move || { + slint::quit_event_loop().unwrap(); + }); + let ui_handle = ui.as_weak(); + ui.on_apply(move || { + let ui = ui_handle.upgrade().unwrap(); + save_config(&ui).unwrap(); + slint::quit_event_loop().unwrap(); + }); + + ui.run()?; + Ok(()) +} + +fn reg_open_key_read(hk: &mut HKEY) -> Result<()> { + unsafe { + RegOpenKeyExW( + HKEY_CURRENT_USER, + w!("Software\\ChewingTextService"), + 0, + KEY_WOW64_64KEY | KEY_READ, + hk, + ) + .ok()?; + } + Ok(()) +} + +fn reg_open_key_write(hk: &mut HKEY) -> Result<()> { + unsafe { + RegCreateKeyExW( + HKEY_CURRENT_USER, + w!("Software\\ChewingTextService"), + 0, + None, + REG_OPEN_CREATE_OPTIONS::default(), + KEY_WOW64_64KEY | KEY_READ | KEY_WRITE, + None, + hk, + None, + ) + .ok()?; + } + Ok(()) +} + +fn reg_close_key(hk: HKEY) { + unsafe { + let _ = RegCloseKey(hk); + } +} + +fn reg_get_u32(hk: HKEY, value_name: PCWSTR) -> Result { + let mut dword = 0; + let mut size = size_of::() as u32; + let pdword: *mut u32 = &mut dword; + unsafe { + RegGetValueW( + hk, + None, + value_name, + RRF_RT_REG_DWORD, + None, + Some(pdword.cast()), + Some(&mut size), + ) + .ok()?; + } + Ok(dword) +} + +fn reg_set_u32(hk: HKEY, value_name: PCWSTR, value: u32) -> Result<()> { + unsafe { + RegSetValueExW(hk, value_name, 0, REG_DWORD, Some(&value.to_ne_bytes())).ok()?; + } + Ok(()) +} + +fn reg_get_i32(hk: HKEY, value_name: PCWSTR) -> Result { + Ok(reg_get_u32(hk, value_name)? as i32) +} + +fn reg_set_i32(hk: HKEY, value_name: PCWSTR, value: i32) -> Result<()> { + Ok(reg_set_u32(hk, value_name, value as u32)?) +} + +fn reg_get_bool(hk: HKEY, value_name: PCWSTR) -> Result { + Ok(reg_get_u32(hk, value_name)? > 0) +} + +fn reg_set_bool(hk: HKEY, value_name: PCWSTR, value: bool) -> Result<()> { + Ok(reg_set_u32(hk, value_name, value as u32)?) +} + +fn default_user_symbols_dat_path() -> PathBuf { + let user_data_dir = PathBuf::from(env!("USERPROFILE")).join("ChewingTextService"); + let user_symbols_dat = data_dir().unwrap_or(user_data_dir).join("symbols.dat"); + user_symbols_dat +} + +// FIXME: provide path info from libchewing +fn user_symbols_dat_path() -> Result { + let user_data_dir = PathBuf::from(env!("USERPROFILE")).join("ChewingTextService"); + let user_symbols_dat = data_dir().unwrap_or(user_data_dir).join("symbols.dat"); + if user_symbols_dat.exists() { + return Ok(user_symbols_dat); + } + bail!("使用者符號檔不存在") +} + +// FIXME: provide path info from libchewing +fn system_symbols_dat_path() -> Result { + let prog_files_x86 = PathBuf::from(env!("ProgramFiles(x86)")) + .join("ChewingTextService\\Dictionary\\symbols.dat"); + let prog_files = + PathBuf::from(env!("ProgramFiles")).join("ChewingTextService\\Dictionary\\symbols.dat"); + if prog_files_x86.exists() { + return Ok(prog_files_x86); + } + if prog_files.exists() { + return Ok(prog_files); + } + bail!("系統詞庫不存在") +} + +fn load_config(ui: &ConfigWindow) -> Result<()> { + // Init settings to default value + ui.set_cand_per_row(3); + ui.set_switch_lang_with_shift(true); + ui.set_add_phrase_forward(true); + ui.set_advance_after_selection(true); + ui.set_font_size(16); + ui.set_conv_engine(1); + ui.set_cand_per_page(9); + ui.set_cursor_cand_list(true); + ui.set_enable_caps_lock(true); + ui.set_full_shape_symbols(true); + ui.set_easy_symbols_with_shift(true); + + if let Ok(path) = user_symbols_dat_path() { + ui.set_symbols_dat(fs::read_to_string(path)?.into()); + } else { + if let Ok(path) = system_symbols_dat_path() { + ui.set_symbols_dat(fs::read_to_string(path)?.into()); + } + } + + // Load custom value from the registry + let mut hk = Default::default(); + if reg_open_key_read(&mut hk).is_ok() { + if let Ok(value) = reg_get_i32(hk, w!("KeyboardLayout")) { + ui.set_keyboard_layout(value); + } + if let Ok(value) = reg_get_i32(hk, w!("CandPerRow")) { + ui.set_cand_per_row(value); + } + if let Ok(value) = reg_get_bool(hk, w!("DefaultEnglish")) { + ui.set_default_english(value); + } + if let Ok(value) = reg_get_bool(hk, w!("DefaultFullSpace")) { + ui.set_default_full_space(value); + } + if let Ok(value) = reg_get_bool(hk, w!("ShowCandWithSpaceKey")) { + ui.set_show_cand_with_space_key(value); + } + if let Ok(value) = reg_get_bool(hk, w!("SwitchLangWithShift")) { + ui.set_switch_lang_with_shift(value); + } + if let Ok(value) = reg_get_bool(hk, w!("OutputSimpChinese")) { + ui.set_output_simp_chinese(value); + } + if let Ok(value) = reg_get_bool(hk, w!("AddPhraseForward")) { + ui.set_add_phrase_forward(value); + } + // if let Ok(value) = reg_get_bool(hk, w!("ColorCandWnd")) { + // ui.set_color_cand_wnd(value); + // } + if let Ok(value) = reg_get_bool(hk, w!("AdvanceAfterSelection")) { + ui.set_advance_after_selection(value); + } + if let Ok(value) = reg_get_i32(hk, w!("DefFontSize")) { + ui.set_font_size(value); + } + if let Ok(value) = reg_get_i32(hk, w!("SelKeyType")) { + ui.set_sel_key_type(value); + } + if let Ok(value) = reg_get_i32(hk, w!("ConvEngine")) { + ui.set_conv_engine(value); + } + if let Ok(value) = reg_get_i32(hk, w!("SelAreaLen")) { + ui.set_cand_per_page(value); + } + if let Ok(value) = reg_get_bool(hk, w!("CursorCandList")) { + ui.set_cursor_cand_list(value); + } + if let Ok(value) = reg_get_bool(hk, w!("EnableCapsLock")) { + ui.set_enable_caps_lock(value); + } + if let Ok(value) = reg_get_bool(hk, w!("FullShapeSymbols")) { + ui.set_full_shape_symbols(value); + } + // if let Ok(value) = reg_get_bool(hk, w!("PhraseMark")) { + // ui.set_phrase_mark(value); + // } + if let Ok(value) = reg_get_bool(hk, w!("EscCleanAllBuf")) { + ui.set_esc_clean_all_buf(value); + } + if let Ok(value) = reg_get_bool(hk, w!("EasySymbolsWithShift")) { + ui.set_easy_symbols_with_shift(value); + } + if let Ok(value) = reg_get_bool(hk, w!("EasySymbolsWithCtrl")) { + ui.set_easy_symbols_with_ctrl(value); + } + if let Ok(value) = reg_get_bool(hk, w!("UpperCaseWithShift")) { + ui.set_upper_case_with_shift(value); + } + + reg_close_key(hk); + } + + Ok(()) +} + +fn save_config(ui: &ConfigWindow) -> Result<()> { + let mut hk: HKEY = Default::default(); + + if reg_open_key_write(&mut hk).is_ok() { + let _ = reg_set_i32(hk, w!("KeyboardLayout"), ui.get_keyboard_layout()); + let _ = reg_set_i32(hk, w!("CandPerRow"), ui.get_cand_per_row()); + let _ = reg_set_bool(hk, w!("DefaultEnglish"), ui.get_default_english()); + let _ = reg_set_bool(hk, w!("DefaultFullSpace"), ui.get_default_full_space()); + let _ = reg_set_bool( + hk, + w!("ShowCandWithSpaceKey"), + ui.get_show_cand_with_space_key(), + ); + let _ = reg_set_bool( + hk, + w!("SwitchLangWithShift"), + ui.get_switch_lang_with_shift(), + ); + let _ = reg_set_bool(hk, w!("OutputSimpChinese"), ui.get_output_simp_chinese()); + let _ = reg_set_bool(hk, w!("AddPhraseForward"), ui.get_add_phrase_forward()); + // let _ = reg_set_i32(hk, w!("ColorCandWnd"), ui.get_color_cand_wnd()); + let _ = reg_set_bool( + hk, + w!("AdvanceAfterSelection"), + ui.get_advance_after_selection(), + ); + let _ = reg_set_i32(hk, w!("DefFontSize"), ui.get_font_size()); + let _ = reg_set_i32(hk, w!("SelKeyType"), ui.get_sel_key_type()); + let _ = reg_set_i32(hk, w!("ConvEngine"), ui.get_conv_engine()); + let _ = reg_set_i32(hk, w!("SelAreaLen"), ui.get_cand_per_page()); + let _ = reg_set_bool(hk, w!("CursorCandList"), ui.get_cursor_cand_list()); + let _ = reg_set_bool(hk, w!("EnableCapsLock"), ui.get_enable_caps_lock()); + let _ = reg_set_bool(hk, w!("FullShapeSymbols"), ui.get_full_shape_symbols()); + // let _ = reg_set_bool(hk, w!("PhraseMark"), ui.get_phrase_mark()); + let _ = reg_set_bool(hk, w!("EscCleanAllBuf"), ui.get_esc_clean_all_buf()); + let _ = reg_set_bool( + hk, + w!("EasySymbolsWithShift"), + ui.get_easy_symbols_with_shift(), + ); + let _ = reg_set_bool( + hk, + w!("EasySymbolsWithCtrl"), + ui.get_easy_symbols_with_ctrl(), + ); + let _ = reg_set_bool(hk, w!("UpperCaseWithShift"), ui.get_upper_case_with_shift()); + let _ = reg_set_u32( + hk, + w!("ModifiedTimestamp"), + SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap_or_default() + .as_secs() as u32, + ); + + reg_close_key(hk); + } + + let sys_symbols_dat = system_symbols_dat_path() + .and_then(|path| Ok(fs::read_to_string(path)?)) + .unwrap_or_default(); + if ui.get_symbols_dat() != sys_symbols_dat { + let user_symbols_dat_path = + user_symbols_dat_path().unwrap_or_else(|_| default_user_symbols_dat_path()); + fs::create_dir_all(user_symbols_dat_path.parent().unwrap())?; + fs::write(user_symbols_dat_path, ui.get_symbols_dat())?; + } + + Ok(()) +} diff --git a/preferences/src/editor.rs b/preferences/src/editor.rs new file mode 100644 index 0000000..8c6cb67 --- /dev/null +++ b/preferences/src/editor.rs @@ -0,0 +1,380 @@ +use std::iter; +use std::rc::Rc; +use std::str::FromStr; +use std::sync::RwLock; + +use anyhow::{anyhow, Result}; +use chewing::dictionary::{ + Dictionary, DictionaryBuilder, SystemDictionaryLoader, TrieBuilder, UserDictionaryLoader, +}; +use chewing::dictionary::{DictionaryInfo, Phrase}; +use chewing::zhuyin::Syllable; +use slint::{ + ComponentHandle, Model, ModelNotify, ModelRc, ModelTracker, StandardListViewItem, VecModel, +}; + +use crate::CallbackResult; +use crate::EditorWindow; +use crate::ErrorKind; + +pub fn run() -> Result<()> { + let ui = EditorWindow::new()?; + + ui.set_dictionaries(dict_list_model()?); + + let ui_handle = ui.as_weak(); + ui.on_reload_dict_info(move || { + let ui = ui_handle.upgrade().unwrap(); + // FIXME panic on error + ui.set_dictionaries(dict_list_model().expect("unable to load dict info")); + }); + + let ui_handle = ui.as_weak(); + ui.on_info_clicked(move |row: ModelRc| { + let dict_item = row + .as_any() + .downcast_ref::() + .expect("row item should be a DictTableItemModel"); + let dict_model = ModelRc::new(DictInfoViewModel::from(dict_item)); + + let ui = ui_handle.upgrade().unwrap(); + ui.set_dictionary_info(dict_model.clone()); + }); + + let ui_handle = ui.as_weak(); + ui.on_edit_dict_clicked(move |row: ModelRc| { + let dict_item = row + .as_any() + .downcast_ref::() + .expect("row item should be a DictTableItemModel"); + let dict_model = ModelRc::new(DictEditViewModel::from(dict_item)); + + let ui = ui_handle.upgrade().unwrap(); + ui.set_entries(dict_model); + }); + + let ui_handle = ui.as_weak(); + ui.on_edit_entry_done(move || -> CallbackResult { + let ui = ui_handle.upgrade().unwrap(); + let out_phrase = ui.get_phrase(); + let out_bopomofo = ui.get_bopomofo(); + let out_freq = ui.get_freq(); + let index = ui.get_edit_dict_current_row() as usize; + let entries_rc = ui.get_entries(); + let entry = entries_rc + .as_any() + .downcast_ref::() + .expect("entries should be a DictEditViewModel"); + if let Ok(mut cache) = entry.cache.write() { + let freq: u32 = match out_freq.parse() { + Ok(v) => v, + Err(_) => { + return CallbackResult { + error: ErrorKind::Other, + err_msg: slint::format!("無法辨認 {out_freq} 為數字"), + } + } + }; + let phrase = Phrase::new(out_phrase.as_str(), freq); + let syllables = out_bopomofo + .replace("␣", " ") + // number one vs. bopomofo I + .replace("一", "ㄧ") + .trim() + .split_whitespace() + .map(|cluster| Syllable::from_str(&cluster)) + .collect::>(); + for err in syllables.iter() { + if err.is_err() { + dbg!(err); + } + } + if syllables.iter().any(|syl| syl.is_err()) { + let ellipsis = if out_bopomofo.len() > 20 { 3 } else { 0 }; + let sample = out_bopomofo + .chars() + .take(20) + .chain(iter::repeat_n('.', ellipsis)) + .collect::(); + return CallbackResult { + error: ErrorKind::Other, + err_msg: slint::format!( + "{sample} 不是正確的注音\n注意:字與字之間須有 ␣ 或是空格分開" + ), + }; + } + let syllables = syllables + .into_iter() + .map(|syl| syl.unwrap()) + .collect::>(); + cache[index] = (syllables, phrase); + } + entry.tracker.row_changed(index); + CallbackResult { + error: ErrorKind::Ok, + ..Default::default() + } + }); + + let ui_handle = ui.as_weak(); + ui.on_edit_entry_new(move || { + let ui = ui_handle.upgrade().unwrap(); + let entries_rc = ui.get_entries(); + let entry = entries_rc + .as_any() + .downcast_ref::() + .expect("entries should be a DictEditViewModel"); + let _ = entry + .cache + .write() + .map(|mut cache| { + let phrase = Phrase::new("", 0); + cache.push((vec![], phrase)); + cache.len() - 1 + }) + .map(|index| { + entry.tracker.row_added(index, 1); + }); + }); + + let ui_handle = ui.as_weak(); + ui.on_edit_entry_delete(move || { + let ui = ui_handle.upgrade().unwrap(); + let index = ui.get_edit_dict_current_row() as usize; + let entries_rc = ui.get_entries(); + let entry = entries_rc + .as_any() + .downcast_ref::() + .expect("entries should be a DictEditViewModel"); + let _ = entry + .cache + .write() + .map(|mut cache| { + cache.remove(index); + }) + .map(|_| { + entry.tracker.row_removed(index, 1); + }); + }); + + let ui_handle = ui.as_weak(); + ui.on_edit_dict_save(move || -> CallbackResult { + let ui = ui_handle.upgrade().unwrap(); + let entries_rc = ui.get_entries(); + let entry = entries_rc + .as_any() + .downcast_ref::() + .expect("entries should be a DictEditViewModel"); + entry + .cache + .read() + .map_err(|_| anyhow!("should be able to read cache")) + .and_then(|cache| -> Result<()> { + entry + .dict + .read() + .map_err(|_| anyhow!("should be able to read dict")) + .and_then(|dict| -> Result<()> { + // FIXME detect original dict format + let path = dict.path().expect("dict should have file path"); + let mut builder = TrieBuilder::new(); + builder.set_info(DictionaryInfo { + software: format!( + "{} {}", + env!("CARGO_PKG_NAME"), + env!("CARGO_PKG_VERSION") + ), + ..dict.about() + })?; + for (syls, phrase) in cache.iter() { + builder.insert(&syls, phrase.clone())?; + } + builder.build(path)?; + Ok(()) + }) + }) + .map(|_| CallbackResult { + error: ErrorKind::Ok, + ..Default::default() + }) + .unwrap_or_else(|_e| CallbackResult { + error: ErrorKind::Other, + err_msg: "無法寫入檔案".into(), + }) + }); + + ui.run()?; + + Ok(()) +} + +fn dict_list_model() -> Result>> { + let sys_loader = SystemDictionaryLoader::new(); + let user_loader = UserDictionaryLoader::new(); + + Ok(ModelRc::new(VecModel::from_iter( + sys_loader + .load()? + .into_iter() + .map(|dict| ModelRc::new(DictTableItemModel::new("系統", dict))) + .chain( + sys_loader + .load_extra()? + .into_iter() + .map(|dict| ModelRc::new(DictTableItemModel::new("擴充", dict))), + ) + .chain( + user_loader + .load() + .into_iter() + .map(|dict| ModelRc::new(DictTableItemModel::new("個人", dict))), + ), + ))) +} + +struct DictTableItemModel(&'static str, Rc>>); + +impl DictTableItemModel { + fn new(typ: &'static str, dict: Box) -> DictTableItemModel { + DictTableItemModel(typ, Rc::new(RwLock::new(dict))) + } +} + +impl Model for DictTableItemModel { + type Data = StandardListViewItem; + + fn row_count(&self) -> usize { + 2 + } + + fn row_data(&self, row: usize) -> Option { + match row { + 0 => Some(self.0.into()), + 1 => self + .1 + .read() + .ok() + .map(|dict| dict.about().name.as_str().into()), + _ => None, + } + } + + fn model_tracker(&self) -> &dyn ModelTracker { + &() + } + + fn as_any(&self) -> &dyn core::any::Any { + self + } +} + +struct DictInfoViewModel(&'static str, DictionaryInfo); + +impl From<&DictTableItemModel> for DictInfoViewModel { + fn from(value: &DictTableItemModel) -> Self { + DictInfoViewModel( + value.0, + value + .1 + .read() + .expect("should have no concurrent write") + .about(), + ) + } +} + +impl Model for DictInfoViewModel { + type Data = ModelRc; + + fn row_count(&self) -> usize { + 6 + } + + fn row_data(&self, row: usize) -> Option { + match row { + 0 => Some(ModelRc::from(["來源".into(), self.0.into()])), + 1 => Some(ModelRc::from(["名稱".into(), self.1.name.as_str().into()])), + 2 => Some(ModelRc::from([ + "版本".into(), + self.1.version.as_str().into(), + ])), + 3 => Some(ModelRc::from([ + "著作權".into(), + self.1.copyright.as_str().into(), + ])), + 4 => Some(ModelRc::from([ + "授權方式".into(), + self.1.license.as_str().into(), + ])), + 5 => Some(ModelRc::from([ + "製作軟體".into(), + self.1.software.as_str().into(), + ])), + _ => None, + } + } + + fn model_tracker(&self) -> &dyn ModelTracker { + &() + } +} + +struct DictEditViewModel { + cache: RwLock, Phrase)>>, + dict: Rc>>, + tracker: ModelNotify, +} + +impl From<&DictTableItemModel> for DictEditViewModel { + fn from(value: &DictTableItemModel) -> Self { + DictEditViewModel { + cache: value + .1 + .read() + .expect("should not have concurrent writer") + .entries() + .collect::>() + .into(), + dict: value.1.clone(), + tracker: ModelNotify::default(), + } + } +} + +impl Model for DictEditViewModel { + type Data = ModelRc; + + fn row_count(&self) -> usize { + self.cache.read().expect("no concurrent writer").len() + } + + fn row_data(&self, row: usize) -> Option { + self.cache + .read() + .expect("no concurrent writer") + .get(row) + .map(|entry| { + ModelRc::from([ + entry.1.as_str().into(), + // FIXME + entry + .0 + .iter() + .map(|syl| syl.to_string()) + .collect::>() + .join(" ") + .as_str() + .into(), + entry.1.freq().to_string().as_str().into(), + ]) + }) + } + + fn model_tracker(&self) -> &dyn ModelTracker { + &self.tracker + } + + fn as_any(&self) -> &dyn core::any::Any { + self + } +} diff --git a/preferences/src/main.rs b/preferences/src/main.rs new file mode 100644 index 0000000..75d62d1 --- /dev/null +++ b/preferences/src/main.rs @@ -0,0 +1,20 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +mod config; +mod editor; +mod about; + +use std::env; + +slint::include_modules!(); + +fn main() -> anyhow::Result<()> { + if env::args().any(|arg| arg == "/edit" || arg == "--edit") { + editor::run()?; + } else if env::args().any(|arg| arg == "/about" || arg == "--about") { + about::run()?; + } else { + config::run()?; + } + Ok(()) +} diff --git a/preferences/ui/about-box.slint b/preferences/ui/about-box.slint new file mode 100644 index 0000000..079f6ad --- /dev/null +++ b/preferences/ui/about-box.slint @@ -0,0 +1,51 @@ +import { VerticalBox } from "std-widgets.slint"; +import { Version } from "globals.slint"; + +export component AboutChewing inherits VerticalLayout { + HorizontalLayout { + spacing: 10px; + + Image { + source: @image-url("logo.png"); + } + + VerticalLayout { + Text { + text: "新酷音 - 智慧型注音輸入法"; + } + + Text { + text: "版本:" + Version.product-version; + } + + Text { + text: "發行日期:" + Version.build-date; + } + + Text { + text: "軟體開發者:libchewing 開發團隊"; + } + + Text { + text: "授權方式:GPL-3.0-or-later"; + } + + Text { + text: "專案首頁:https://chewing.im"; + } + } + } + + Text { + text: "題字:翁政銓"; + } + + Rectangle { + height: 16px; + } + + Text { + text: "新酷音原是 Linux 系統下知名的輸入法,由 gugod, jserv, kanru 等前輩,改良原本由龔律全與陳康本開發的酷音輸入法而來,有多種分支,目前已經能夠支援包括 Mac 在內的多種平台。這個 Windows 版本是由 PCMan, czchen 等人,使用 libchewing 核心,移植出 Windows TSF 版本。"; + wrap: word-wrap; + } +} diff --git a/preferences/ui/about-window.slint b/preferences/ui/about-window.slint new file mode 100644 index 0000000..4131783 --- /dev/null +++ b/preferences/ui/about-window.slint @@ -0,0 +1,29 @@ +import { Button, VerticalBox, HorizontalBox } from "std-widgets.slint"; +import { AboutChewing } from "about-box.slint"; +import { Assets, Version } from "globals.slint"; + +export component AboutWindow inherits Window { + title: "關於新酷音輸入法 (" + Version.product-version + ")"; + icon: Assets.icon; + preferred-width: 350px; + preferred-height: 300px; + max-width: 350px; + max-height: 300px; + + callback done(); + + VerticalBox { + alignment: start; + AboutChewing { } + + HorizontalBox { + alignment: end; + Button { + text: "確定"; + clicked => { + done(); + } + } + } + } +} diff --git a/preferences/ui/bopomofo-keyboard.slint b/preferences/ui/bopomofo-keyboard.slint new file mode 100644 index 0000000..b70aa21 --- /dev/null +++ b/preferences/ui/bopomofo-keyboard.slint @@ -0,0 +1,92 @@ +import { GridBox, Button, VerticalBox, HorizontalBox } from "std-widgets.slint"; + +export component BopomofoKeyboard inherits VerticalBox { + + callback clicked(text: string); + // callback backspace-clicked(); + callback clear-clicked(); + callback done(); + + property <[[string]]> keys: [ + [ + "ㄅ", + "ㄉ", + "ˇ", + "ˋ", + "ㄓ", + "ˊ", + "˙", + "ㄚ", + "ㄞ", + "ㄢ", + "ㄦ", + ], + ["ㄆ", "ㄊ", "ㄍ", "ㄐ", "ㄔ", "ㄗ", "ㄧ", "ㄛ", "ㄟ", "ㄣ"], + ["ㄇ", "ㄋ", "ㄎ", "ㄑ", "ㄕ", "ㄘ", "ㄨ", "ㄜ", "ㄠ", "ㄤ"], + ["ㄈ", "ㄌ", "ㄏ", "ㄒ", "ㄖ", "ㄙ", "ㄩ", "ㄝ", "ㄡ", "ㄥ"] + ]; + + for row[index] in root.keys: HorizontalLayout { + padding-left: 10px * index; + for btn in row: Rectangle { + width: 40px; + height: 30px; + if btn == "": Rectangle { } + if btn != "": Button { + text: btn; + clicked => { + root.clicked(self.text) + } + } + } + // if index == 1: Rectangle { + // width: 50px; + // height: 30px; + // Button { + // text: "⌫"; + // clicked => { + // backspace-clicked() + // } + // } + // } + } + HorizontalLayout { + Rectangle { + width: 40px; + } + + Rectangle { + width: 70px; + height: 30px; + Button { + text: "清空"; + clicked => { + clear-clicked() + } + } + } + + Rectangle { + width: 240px; + height: 30px; + Button { + width: 100%; + text: "␣"; + clicked => { + root.clicked(self.text) + } + } + } + + Rectangle { + width: 80px; + height: 30px; + Button { + text: "確定"; + clicked => { + root.done(); + } + } + } + } +} diff --git a/preferences/ui/config-window.slint b/preferences/ui/config-window.slint new file mode 100644 index 0000000..46da04e --- /dev/null +++ b/preferences/ui/config-window.slint @@ -0,0 +1,345 @@ +import { Button, VerticalBox, TabWidget, CheckBox, ComboBox, HorizontalBox, SpinBox, AboutSlint, TextEdit, StandardButton } from "std-widgets.slint"; +import { AboutChewing } from "about-box.slint"; +import { Assets, Version } from "globals.slint"; + +export component ConfigWindow inherits Window { + title: "設定新酷音輸入法 (" + Version.product-version + ")"; + icon: Assets.icon; + preferred-width: 500px; + preferred-height: 400px; + max-width: 500px; + max-height: 400px; + + in-out property switch-lang-with-shift; + in-out property enable-caps-lock; + in-out property esc-clean-all-buf; + in-out property full-shape-symbols; + in-out property upper-case-with-shift; + in-out property add-phrase-forward; + in-out property easy-symbols-with-shift: true; + in-out property easy-symbols-with-ctrl: false; + in-out property cursor-cand-list; + in-out property show-cand-with-space-key; + in-out property advance-after-selection; + in-out property default-full-space; + in-out property default-english; + in-out property output-simp-chinese; + in-out property sel-key-type; + in-out property conv-engine; + in-out property cand-per-row; + in-out property cand-per-page; + in-out property font-size; + in-out property keyboard-layout; + in-out property symbols-dat; + + callback apply(); + callback cancel(); + + VerticalBox { + + TabWidget { + Tab { + title: "打字行為"; + HorizontalLayout { + padding: 20px; + spacing: 20px; + VerticalLayout { + spacing: 10px; + alignment: start; + CheckBox { + text: "使用 Shift 快速切換中英文"; + checked <=> switch-lang-with-shift; + } + + CheckBox { + text: "使用 CapsLock 切換中英文"; + checked <=> enable-caps-lock; + } + + CheckBox { + text: "使用 Esc 清空編輯區字串"; + checked <=> esc-clean-all-buf; + } + + CheckBox { + text: "按住 Shift 輸入全形標點符號"; + checked <=> full-shape-symbols; + } + + CheckBox { + text: "按住 Shift 輸入大寫英文字母"; + checked <=> upper-case-with-shift; + } + + CheckBox { + text: "Ctrl + 數字儲存游標前方的詞"; + checked <=> add-phrase-forward; + } + + CheckBox { + text: "按住 Shift 輸入快速符號"; + checked <=> easy-symbols-with-shift; + enabled: false; + } + + CheckBox { + text: "按住 Ctrl 輸入快速符號"; + checked <=> easy-symbols-with-ctrl; + enabled: false; + } + } + + VerticalLayout { + spacing: 10px; + alignment: start; + CheckBox { + text: "使用方向鍵移動游標選字"; + checked <=> cursor-cand-list; + } + + CheckBox { + text: "按空白鍵叫出選字視窗"; + checked <=> show-cand-with-space-key; + } + + CheckBox { + text: "選字完畢自動跳到下一個字"; + checked <=> advance-after-selection; + } + + CheckBox { + text: "預設以全形模式啟動"; + checked <=> default-full-space; + } + + CheckBox { + text: "預設以英文模式啟動"; + checked <=> default-english; + } + + CheckBox { + text: "預設輸出簡體中文"; + checked <=> output-simp-chinese; + } + + Text { + text: "選字鍵:"; + } + + ComboBox { + model: [ + "1234567890", + "asdfghjkl;", + "asdfzxcv89", + "asdfjkl789", + "aoeuhtn789", + "1234qweras", + ]; + current-index <=> sel-key-type; + } + + Text { + text: "模式:"; + } + + ComboBox { + model: ["簡單注音", "智慧選詞", "模糊智慧選詞"]; + current-index <=> conv-engine; + } + } + } + } + + Tab { + title: "界面外觀"; + VerticalBox { + alignment: start; + Text { + text: "每列顯示後選字個數"; + min-width: 140px; + } + + SpinBox { + minimum: 1; + maximum: 10; + value <=> cand-per-row; + } + + Text { + text: "每頁顯示後選字個數"; + min-width: 140px; + } + + SpinBox { + minimum: 1; + maximum: 10; + value <=> cand-per-page; + } + + Text { + text: "選字及訊息視窗文字大小"; + min-width: 140px; + } + + SpinBox { + minimum: 4; + maximum: 64; + value <=> font-size; + } + } + } + + Tab { + title: "鍵盤設定"; + + property <[string]> layout-names: [ + "預設", + "許氏鍵盤", + "IBM", + "精業", + "倚天", + "倚天 26 鍵", + ]; + property <[string]> layout-names6: [ + "DVORAK", + "DVORAK 許氏", + "漢語拼音", + "台灣華語羅馬拼音", + "注音二式", + "CARPLX", + ]; + property <[string]> layout-names12: [ + "Colemak-DH ANSI", + "Colemak DH Orth", + "Workman", + ]; + + VerticalBox { + alignment: start; + Text { + text: "鍵盤對應"; + } + + HorizontalBox { + VerticalBox { + for layout[index] in layout-names: CheckBox { + text: layout; + property selected <=> keyboard-layout; + init => { + self.checked = selected == index; + } + changed selected => { + self.checked = selected == index; + } + toggled => { + if self.checked { + keyboard-layout = index; + } else { + keyboard-layout = 0; + } + } + } + } + + VerticalBox { + for layout[index] in layout-names6: CheckBox { + text: layout; + property selected <=> keyboard-layout; + init => { + self.checked = selected == index + 6; + } + changed selected => { + self.checked = selected == index + 6; + } + toggled => { + if self.checked { + keyboard-layout = index + 6; + } else { + keyboard-layout = 0; + } + } + } + } + + VerticalBox { + for layout[index] in layout-names12: CheckBox { + text: layout; + property selected <=> keyboard-layout; + init => { + self.checked = selected == index + 12; + } + changed selected => { + self.checked = selected == index + 12; + } + toggled => { + if self.checked { + keyboard-layout = index + 12; + } else { + keyboard-layout = 0; + } + } + } + } + } + } + } + + Tab { + title: "特殊符號"; + VerticalBox { + Text { + text: "輸入中文時,按下 ` 鍵,會顯示下列的符號表:"; + } + + TextEdit { + text <=> symbols-dat; + wrap: no-wrap; + } + + Text { + text: "以上是符號表的設定檔,語法相當簡單:\n每一行的內容都是:「分類名稱」=「此分類下的所有符號」\n您也可以一行只放一個符號,則該符號會被放在最上層選單。"; + wrap: word-wrap; + } + } + } + + Tab { + title: "關於"; + VerticalBox { + alignment: start; + + AboutChewing { } + + Text { + text: "此設定程式使用開源專案 Slint 開發:"; + wrap: word-wrap; + } + + HorizontalLayout { + alignment: start; + AboutSlint { + width: 50%; + } + } + } + } + } + + HorizontalBox { + alignment: end; + Button { + text: "確定"; + clicked => { + root.apply(); + } + } + + Button { + text: "取消"; + clicked => { + root.cancel(); + } + } + } + } +} diff --git a/preferences/ui/editor-window.slint b/preferences/ui/editor-window.slint new file mode 100644 index 0000000..f46e651 --- /dev/null +++ b/preferences/ui/editor-window.slint @@ -0,0 +1,320 @@ +import { VerticalBox, StandardTableView, Button, TabWidget, HorizontalBox, LineEdit, AboutSlint, StandardButton, GridBox } from "std-widgets.slint"; +import { Assets, Version } from "globals.slint"; +import { BopomofoKeyboard } from "bopomofo-keyboard.slint"; + +export enum ErrorKind { + ok, + other, +} + +export struct CallbackResult { + error: ErrorKind, + err_msg: string, +} + +enum TabState { + dict-info, + edit-entry, + about, +} + +export component EditorWindow inherits Window { + preferred-height: 500px; + title: "新酷音詞庫管理程式 (" + Version.product-version + ")"; + icon: Assets.icon; + in property <[[StandardListViewItem]]> dictionaries; + in property <[[StandardListViewItem]]> entries; + in property <[[StandardListViewItem]]> dictionary-info; + out property edit-dict-current-row: -1; + out property phrase; + out property bopomofo; + out property freq; + property tab-state: TabState.dict-info; + property edit-result; + + callback reload-dict-info(); + callback info-clicked(row: [StandardListViewItem]); + callback edit-dict-clicked(row: [StandardListViewItem]); + callback edit-entry-new(); + callback edit-entry-delete(); + callback edit-entry-done() -> CallbackResult; + callback edit-dict-save() -> CallbackResult; + + states [ + show-dict-info when tab-state == TabState.dict-info: {} + show-edit-entry when tab-state == TabState.edit-entry: {} + about when tab-state == TabState.about: { + tabs.current-index: 1; + } + ] + + HorizontalBox { + tabs := TabWidget { + width: 400px; + Tab { + states [ + show-dict-info when tab-state == TabState.dict-info: { + title: "管理"; + } + show-edit-entry when tab-state == TabState.edit-entry: { + title: "編輯"; + } + ] + title: "管理"; + if tab-state == TabState.dict-info: VerticalBox { + HorizontalBox { + alignment: start; + Button { + text: "編輯"; + enabled: table.current-row >= 0; + clicked => { + root.edit-dict-clicked(root.dictionaries[table.current-row]); + tab-state = TabState.edit-entry; + } + } + + // Button { + // text: "新增"; + // } + + // Button { + // text: "匯入"; + // } + + // Button { + // text: "匯出"; + // } + + // Button { + // text: "刪除"; + // } + + Button { + text: "重新整理"; + clicked => { + root.reload-dict-info(); + } + } + } + + table := StandardTableView { + columns: [{ title: "類型", width: 70px }, { title: "名稱" }]; + rows: root.dictionaries; + current-row-changed(current-row) => { + root.info-clicked(root.dictionaries[current-row]); + } + } + } + if tab-state == TabState.edit-entry: VerticalBox { + HorizontalBox { + alignment: start; + Button { + text: "新增"; + clicked => { + root.edit-entry-new(); + } + } + + Button { + text: "刪除"; + enabled: root.edit-dict-current-row >= 0; + clicked => { + root.edit-entry-delete(); + } + } + + Button { + text: "放棄修改"; + clicked => { + root.tab-state = TabState.dict-info; + root.edit-result = { } + } + } + + Button { + text: "存檔"; + clicked => { + root.edit-result = root.edit-dict-save(); + if (root.edit-result.error == ErrorKind.ok) { + root.reload-dict-info(); + root.tab-state = TabState.dict-info; + } + } + } + } + + HorizontalBox { + LineEdit { + placeholder-text: "搜尋"; + enabled: false; + } + } + + StandardTableView { + columns: [{ title: "字/詞" }, { title: "注音" }, { title: "詞頻" }]; + rows: entries; + current-row-changed(current-row) => { + root.edit-dict-current-row = current-row; + root.phrase = root.entries[current-row][0].text; + root.bopomofo = root.entries[current-row][1].text; + root.freq = root.entries[current-row][2].text; + } + } + } + } + + Tab { + title: "關於"; + VerticalBox { + alignment: start; + Text { + text: "新酷音詞庫管理程式"; + font-size: 20px; + font-weight: 800; + } + + Text { + text: "版本:" + Version.product-version; + wrap: word-wrap; + } + + Text { + text: "發行日期:" + Version.build-date; + wrap: word-wrap; + } + + Text { + text: "新酷音詞庫管理程式是一個跨平台的新酷音詞庫管理及編輯工具。它提供了一個簡單的方式來管理使用者詞庫。透過它,使用者可以自訂詞庫以提升輸入效率。"; + wrap: word-wrap; + } + + Text { + text: "新酷音詞庫管理程式採用 GNU 通用公眾授權條款第 3.0 版或更新版本授權 (GPL-3.0-or-later)。"; + wrap: word-wrap; + } + + Text { + text: "關於新酷音詞庫管理程式的授權詳情,請參閱 https://www.gnu.org/licenses/gpl-3.0.html 網站。"; + wrap: word-wrap; + } + + Text { + text: "版權所有© 2024 新酷音開發團隊及 GitHub 貢獻者。"; + wrap: word-wrap; + } + + Text { + text: "新酷音詞庫管理程式是一個開源專案,開發平台位於 https://github.com/chewing/chewing-editor。歡迎在 issues 提供任何建議。"; + wrap: word-wrap; + } + + Text { + text: "特別感謝:"; + wrap: word-wrap; + } + + Text { + text: "此版本使用開源專案 Slint 開發:"; + wrap: word-wrap; + } + + AboutSlint { } + } + } + } + + if tab-state == TabState.dict-info: HorizontalLayout { + Path { + width: 1px; + height: 100%; + stroke: Colors.lightgray; + stroke-width: 1px; + MoveTo { + x: 0; + y: 0; + } + + LineTo { + x: 0; + y: 100; + } + } + + VerticalBox { + StandardTableView { + columns: [{ title: "屬性", width: 100px }, { title: "內容" } ]; + rows: root.dictionary-info; + } + } + } + if tab-state == TabState.edit-entry: VerticalBox { + if root.edit-result.error != ErrorKind.ok: Rectangle { + height: 40px; + border-radius: 5px; + border-width: 1px; + border-color: Colors.lightgray; + background: Colors.lightyellow; + Text { + text: root.edit-result.err-msg; + } + } + HorizontalLayout { + Path { + width: 1px; + height: 100%; + stroke: Colors.lightgray; + stroke-width: 1px; + MoveTo { + x: 0; + y: 0; + } + + LineTo { + x: 0; + y: 100; + } + } + + VerticalBox { + alignment: start; + Text { + text: "字/詞:"; + } + + phrase := LineEdit { + text <=> root.phrase; + } + + Text { + text: "注音:"; + } + + bopomofo := LineEdit { + text <=> root.bopomofo; + } + + Text { + text: "詞頻:"; + } + + freq := LineEdit { + text <=> root.freq; + } + + BopomofoKeyboard { + clicked(text) => { + bopomofo.clear-focus(); + bopomofo.text += text; + } + clear-clicked => { + bopomofo.text = ""; + } + done => { + root.edit-result = root.edit-entry-done(); + } + } + } + } + } + } +} diff --git a/preferences/ui/globals.slint b/preferences/ui/globals.slint new file mode 100644 index 0000000..22e0c33 --- /dev/null +++ b/preferences/ui/globals.slint @@ -0,0 +1,5 @@ +export global Assets { + out property icon: @image-url("icon.png"); +} + +export * from "version.slint"; diff --git a/preferences/ui/icon.png b/preferences/ui/icon.png new file mode 100644 index 0000000..21a59ed Binary files /dev/null and b/preferences/ui/icon.png differ diff --git a/preferences/ui/index.slint b/preferences/ui/index.slint new file mode 100644 index 0000000..598a7c7 --- /dev/null +++ b/preferences/ui/index.slint @@ -0,0 +1,5 @@ +import { ConfigWindow } from "./config-window.slint"; +import { EditorWindow, CallbackResult, ErrorKind } from "./editor-window.slint"; +import { AboutWindow} from "./about-window.slint"; + +export { ConfigWindow, EditorWindow, CallbackResult, ErrorKind, AboutWindow } diff --git a/preferences/ui/logo.png b/preferences/ui/logo.png new file mode 100644 index 0000000..91db568 Binary files /dev/null and b/preferences/ui/logo.png differ diff --git a/preferences/ui/version.slint b/preferences/ui/version.slint new file mode 100644 index 0000000..2261176 --- /dev/null +++ b/preferences/ui/version.slint @@ -0,0 +1,4 @@ +export global Version { + out property product-version: "24.10.1.0"; + out property build-date: "2024 年 12 月 24 日"; +} diff --git a/scripts/build_installer.bat b/scripts/build_installer.bat index eb13ccd..2df229c 100644 --- a/scripts/build_installer.bat +++ b/scripts/build_installer.bat @@ -3,10 +3,10 @@ set SQLITE3_STATIC=1 cmake -B build\x86 -A Win32 -DBUILD_TESTING=OFF -DVCPKG_TARGET_TRIPLET=x86-windows-static cmake --build build\x86 -t libchewing\data\data --config Release -cmake --build build\x86 -t ChewingPreferences --config Release cargo build -p chewing_tip --release --target x86_64-pc-windows-msvc cargo build -p chewing_tip --release --target i686-pc-windows-msvc +cargo build -p chewing-preferences --release --target i686-pc-windows-msvc cargo build -p tsfreg --release --target i686-pc-windows-msvc mkdir dist @@ -20,7 +20,7 @@ copy libchewing\data\*.dat build\installer\Dictionary\ copy build\x86\libchewing\data\*.dat build\installer\Dictionary\ mkdir build\installer\x86 copy target\i686-pc-windows-msvc\release\chewing_tip.dll build\installer\x86\ -copy build\x86\ChewingPreferences\Release\*.exe build\installer\ +copy target\i686-pc-windows-msvc\release\ChewingPreferences.exe build\installer\ copy build\x86\libchewing\chewing-cli.exe build\installer\ mkdir build\installer\x64 copy target\x86_64-pc-windows-msvc\release\chewing_tip.dll build\installer\x64 diff --git a/xtask/src/main.rs b/xtask/src/main.rs index c08a8de..f3e9c8d 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -90,6 +90,17 @@ fn main() -> anyhow::Result<()> { "# )?; + let mut version_slint = File::create("preferences/ui/version.slint")?; + indoc::writedoc!( + version_slint, + r#" + export global Version {{ + out property product-version: "{yy}.{mm}.{rv}.{bn}"; + out property build-date: "{year} 年 {month:02} 月 {day:02} 日"; + }} + "# + )?; + let mut version_wxi = File::create("installer/version.wxi")?; indoc::writedoc!( version_wxi,