├── .cargo └── config.toml ├── .github └── workflows │ ├── pages.yml │ └── rust.yml ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── Trunk.toml ├── assets ├── favicon.ico ├── icon-1024.png ├── icon-256.png ├── icon_ios_touch_192.png ├── manifest.json ├── maskable_icon_x512.png └── sw.js ├── check.sh ├── images ├── crates.png └── integrations.png ├── index.html ├── rust-toolchain ├── slides.md └── src ├── app.rs ├── lib.rs └── main.rs /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | # clipboard api is still unstable, so web-sys requires the below flag to be passed for copy (ctrl + c) to work 2 | # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html 3 | # check status at https://developer.mozilla.org/en-US/docs/Web/API/Clipboard#browser_compatibility 4 | # we don't use `[build]` because of rust analyzer's build cache invalidation https://github.com/emilk/egui_presentation/issues/93 5 | [target.wasm32-unknown-unknown] 6 | rustflags = ["--cfg=web_sys_unstable_apis"] 7 | -------------------------------------------------------------------------------- /.github/workflows/pages.yml: -------------------------------------------------------------------------------- 1 | name: Github Pages 2 | 3 | # By default, runs if you push to master. keeps your deployed app in sync with master branch. 4 | on: 5 | push: 6 | branches: 7 | - master 8 | # to only run when you do a new github release, comment out above part and uncomment the below trigger. 9 | # on: 10 | # release: 11 | # types: 12 | # - published 13 | 14 | permissions: 15 | contents: write # for committing to gh-pages branch. 16 | 17 | jobs: 18 | build-github-pages: 19 | runs-on: ubuntu-latest 20 | steps: 21 | - uses: actions/checkout@v2 # repo checkout 22 | - uses: actions-rs/toolchain@v1 # get rust toolchain for wasm 23 | with: 24 | profile: minimal 25 | toolchain: stable 26 | target: wasm32-unknown-unknown 27 | override: true 28 | - name: Rust Cache # cache the rust build artefacts 29 | uses: Swatinem/rust-cache@v1 30 | - name: Download and install Trunk binary 31 | run: wget -qO- https://github.com/thedodd/trunk/releases/latest/download/trunk-x86_64-unknown-linux-gnu.tar.gz | tar -xzf- 32 | - name: Build # build 33 | # "${GITHUB_REPOSITORY#*/}" evaluates into the name of the repository 34 | # using --public-url something will allow trunk to modify all the href paths like from favicon.ico to repo_name/favicon.ico . 35 | # this is necessary for github pages where the site is deployed to username.github.io/repo_name and all files must be requested 36 | # relatively as egui_presentation/favicon.ico. if we skip public-url option, the href paths will instead request username.github.io/favicon.ico which 37 | # will obviously return error 404 not found. 38 | run: ./trunk build --release --public-url "${GITHUB_REPOSITORY#*/}" 39 | - name: Deploy 40 | uses: JamesIves/github-pages-deploy-action@v4 41 | with: 42 | folder: dist 43 | # this option will not maintain any history of your previous pages deployment 44 | # set to false if you want all page build to be committed to your gh-pages branch history 45 | single-commit: true 46 | -------------------------------------------------------------------------------- /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | on: [push, pull_request] 2 | 3 | name: CI 4 | 5 | env: 6 | # This is required to enable the web_sys clipboard API which egui_web uses 7 | # https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html 8 | # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html 9 | RUSTFLAGS: --cfg=web_sys_unstable_apis 10 | 11 | jobs: 12 | check: 13 | name: Check 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v2 17 | - uses: actions-rs/toolchain@v1 18 | with: 19 | profile: minimal 20 | toolchain: stable 21 | override: true 22 | - uses: actions-rs/cargo@v1 23 | with: 24 | command: check 25 | args: --all-features 26 | 27 | check_wasm: 28 | name: Check wasm32 29 | runs-on: ubuntu-latest 30 | steps: 31 | - uses: actions/checkout@v2 32 | - uses: actions-rs/toolchain@v1 33 | with: 34 | profile: minimal 35 | toolchain: stable 36 | target: wasm32-unknown-unknown 37 | override: true 38 | - uses: actions-rs/cargo@v1 39 | with: 40 | command: check 41 | args: --all-features --lib --target wasm32-unknown-unknown 42 | 43 | test: 44 | name: Test Suite 45 | runs-on: ubuntu-latest 46 | steps: 47 | - uses: actions/checkout@v2 48 | - uses: actions-rs/toolchain@v1 49 | with: 50 | profile: minimal 51 | toolchain: stable 52 | override: true 53 | - run: sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev 54 | - uses: actions-rs/cargo@v1 55 | with: 56 | command: test 57 | args: --lib 58 | 59 | fmt: 60 | name: Rustfmt 61 | runs-on: ubuntu-latest 62 | steps: 63 | - uses: actions/checkout@v2 64 | - uses: actions-rs/toolchain@v1 65 | with: 66 | profile: minimal 67 | toolchain: stable 68 | override: true 69 | components: rustfmt 70 | - uses: actions-rs/cargo@v1 71 | with: 72 | command: fmt 73 | args: --all -- --check 74 | 75 | clippy: 76 | name: Clippy 77 | runs-on: ubuntu-latest 78 | steps: 79 | - uses: actions/checkout@v2 80 | - uses: actions-rs/toolchain@v1 81 | with: 82 | profile: minimal 83 | toolchain: stable 84 | override: true 85 | components: clippy 86 | - uses: actions-rs/cargo@v1 87 | with: 88 | command: clippy 89 | args: -- -D warnings 90 | 91 | trunk: 92 | name: trunk 93 | runs-on: ubuntu-latest 94 | steps: 95 | - uses: actions/checkout@v2 96 | - uses: actions-rs/toolchain@v1 97 | with: 98 | profile: minimal 99 | toolchain: 1.71.1 100 | target: wasm32-unknown-unknown 101 | override: true 102 | - name: Download and install Trunk binary 103 | run: wget -qO- https://github.com/thedodd/trunk/releases/latest/download/trunk-x86_64-unknown-linux-gnu.tar.gz | tar -xzf- 104 | - name: Build 105 | run: ./trunk build 106 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /dist 3 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "ab_glyph" 7 | version = "0.2.21" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39" 10 | dependencies = [ 11 | "ab_glyph_rasterizer", 12 | "owned_ttf_parser", 13 | ] 14 | 15 | [[package]] 16 | name = "ab_glyph_rasterizer" 17 | version = "0.1.8" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" 20 | 21 | [[package]] 22 | name = "accesskit" 23 | version = "0.11.0" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "02c98a5d094590335462354da402d754fe2cb78f0e6ce5024611c28ed539c1de" 26 | dependencies = [ 27 | "enumn", 28 | "serde", 29 | ] 30 | 31 | [[package]] 32 | name = "accesskit_consumer" 33 | version = "0.15.0" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "ca541e0fdb600916d196a940228df99b86d804fd2e6ef13894d7814f2799db43" 36 | dependencies = [ 37 | "accesskit", 38 | ] 39 | 40 | [[package]] 41 | name = "accesskit_macos" 42 | version = "0.7.0" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "cfea17e5bb5dcbfcf5b256ab2f5889a3e6f6582de78b9db9b6689adad3b002f3" 45 | dependencies = [ 46 | "accesskit", 47 | "accesskit_consumer", 48 | "objc2", 49 | "once_cell", 50 | ] 51 | 52 | [[package]] 53 | name = "accesskit_unix" 54 | version = "0.5.0" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "b4d1517421278cc8e67422d0786a18cf4291093ebe49eadf1cf989ff80e57f90" 57 | dependencies = [ 58 | "accesskit", 59 | "accesskit_consumer", 60 | "async-channel", 61 | "atspi", 62 | "futures-lite", 63 | "serde", 64 | "zbus", 65 | ] 66 | 67 | [[package]] 68 | name = "accesskit_windows" 69 | version = "0.14.0" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "e11c7f177739f23bd19bb856e4a64fdd96eb8638ec0a6a6dde9a7019a9e91c53" 72 | dependencies = [ 73 | "accesskit", 74 | "accesskit_consumer", 75 | "arrayvec", 76 | "once_cell", 77 | "paste", 78 | "windows", 79 | ] 80 | 81 | [[package]] 82 | name = "accesskit_winit" 83 | version = "0.14.0" 84 | source = "registry+https://github.com/rust-lang/crates.io-index" 85 | checksum = "3f741b54fba827e49a73d55fdd43e8d3d5133aa7710a48581013c7802f232b83" 86 | dependencies = [ 87 | "accesskit", 88 | "accesskit_macos", 89 | "accesskit_unix", 90 | "accesskit_windows", 91 | "winit", 92 | ] 93 | 94 | [[package]] 95 | name = "adler" 96 | version = "1.0.2" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 99 | 100 | [[package]] 101 | name = "ahash" 102 | version = "0.8.3" 103 | source = "registry+https://github.com/rust-lang/crates.io-index" 104 | checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" 105 | dependencies = [ 106 | "cfg-if", 107 | "once_cell", 108 | "serde", 109 | "version_check", 110 | ] 111 | 112 | [[package]] 113 | name = "aho-corasick" 114 | version = "1.0.1" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" 117 | dependencies = [ 118 | "memchr", 119 | ] 120 | 121 | [[package]] 122 | name = "android-activity" 123 | version = "0.4.1" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | checksum = "7c77a0045eda8b888c76ea473c2b0515ba6f471d318f8927c5c72240937035a6" 126 | dependencies = [ 127 | "android-properties", 128 | "bitflags", 129 | "cc", 130 | "jni-sys", 131 | "libc", 132 | "log", 133 | "ndk", 134 | "ndk-context", 135 | "ndk-sys", 136 | "num_enum", 137 | ] 138 | 139 | [[package]] 140 | name = "android-properties" 141 | version = "0.2.2" 142 | source = "registry+https://github.com/rust-lang/crates.io-index" 143 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" 144 | 145 | [[package]] 146 | name = "arboard" 147 | version = "3.2.0" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854" 150 | dependencies = [ 151 | "clipboard-win", 152 | "log", 153 | "objc", 154 | "objc-foundation", 155 | "objc_id", 156 | "once_cell", 157 | "parking_lot", 158 | "thiserror", 159 | "winapi", 160 | "x11rb", 161 | ] 162 | 163 | [[package]] 164 | name = "arrayvec" 165 | version = "0.7.2" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" 168 | 169 | [[package]] 170 | name = "async-broadcast" 171 | version = "0.5.1" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" 174 | dependencies = [ 175 | "event-listener", 176 | "futures-core", 177 | ] 178 | 179 | [[package]] 180 | name = "async-channel" 181 | version = "1.8.0" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" 184 | dependencies = [ 185 | "concurrent-queue", 186 | "event-listener", 187 | "futures-core", 188 | ] 189 | 190 | [[package]] 191 | name = "async-executor" 192 | version = "1.5.1" 193 | source = "registry+https://github.com/rust-lang/crates.io-index" 194 | checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" 195 | dependencies = [ 196 | "async-lock", 197 | "async-task", 198 | "concurrent-queue", 199 | "fastrand", 200 | "futures-lite", 201 | "slab", 202 | ] 203 | 204 | [[package]] 205 | name = "async-fs" 206 | version = "1.6.0" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" 209 | dependencies = [ 210 | "async-lock", 211 | "autocfg", 212 | "blocking", 213 | "futures-lite", 214 | ] 215 | 216 | [[package]] 217 | name = "async-io" 218 | version = "1.13.0" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" 221 | dependencies = [ 222 | "async-lock", 223 | "autocfg", 224 | "cfg-if", 225 | "concurrent-queue", 226 | "futures-lite", 227 | "log", 228 | "parking", 229 | "polling", 230 | "rustix", 231 | "slab", 232 | "socket2", 233 | "waker-fn", 234 | ] 235 | 236 | [[package]] 237 | name = "async-lock" 238 | version = "2.7.0" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" 241 | dependencies = [ 242 | "event-listener", 243 | ] 244 | 245 | [[package]] 246 | name = "async-process" 247 | version = "1.7.0" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" 250 | dependencies = [ 251 | "async-io", 252 | "async-lock", 253 | "autocfg", 254 | "blocking", 255 | "cfg-if", 256 | "event-listener", 257 | "futures-lite", 258 | "rustix", 259 | "signal-hook", 260 | "windows-sys 0.48.0", 261 | ] 262 | 263 | [[package]] 264 | name = "async-recursion" 265 | version = "1.0.4" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" 268 | dependencies = [ 269 | "proc-macro2", 270 | "quote", 271 | "syn 2.0.16", 272 | ] 273 | 274 | [[package]] 275 | name = "async-task" 276 | version = "4.4.0" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" 279 | 280 | [[package]] 281 | name = "async-trait" 282 | version = "0.1.68" 283 | source = "registry+https://github.com/rust-lang/crates.io-index" 284 | checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" 285 | dependencies = [ 286 | "proc-macro2", 287 | "quote", 288 | "syn 2.0.16", 289 | ] 290 | 291 | [[package]] 292 | name = "atomic-waker" 293 | version = "1.1.1" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" 296 | 297 | [[package]] 298 | name = "atspi" 299 | version = "0.10.1" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | checksum = "674e7a3376837b2e7d12d34d58ac47073c491dc3bf6f71a7adaf687d4d817faa" 302 | dependencies = [ 303 | "async-recursion", 304 | "async-trait", 305 | "atspi-macros", 306 | "enumflags2", 307 | "futures-lite", 308 | "serde", 309 | "tracing", 310 | "zbus", 311 | "zbus_names", 312 | ] 313 | 314 | [[package]] 315 | name = "atspi-macros" 316 | version = "0.2.0" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "97fb4870a32c0eaa17e35bca0e6b16020635157121fb7d45593d242c295bc768" 319 | dependencies = [ 320 | "quote", 321 | "syn 1.0.109", 322 | ] 323 | 324 | [[package]] 325 | name = "autocfg" 326 | version = "1.1.0" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 329 | 330 | [[package]] 331 | name = "base64" 332 | version = "0.13.1" 333 | source = "registry+https://github.com/rust-lang/crates.io-index" 334 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 335 | 336 | [[package]] 337 | name = "base64" 338 | version = "0.21.2" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" 341 | 342 | [[package]] 343 | name = "bincode" 344 | version = "1.3.3" 345 | source = "registry+https://github.com/rust-lang/crates.io-index" 346 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 347 | dependencies = [ 348 | "serde", 349 | ] 350 | 351 | [[package]] 352 | name = "bit-set" 353 | version = "0.5.3" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 356 | dependencies = [ 357 | "bit-vec", 358 | ] 359 | 360 | [[package]] 361 | name = "bit-vec" 362 | version = "0.6.3" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 365 | 366 | [[package]] 367 | name = "bitflags" 368 | version = "1.3.2" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 371 | 372 | [[package]] 373 | name = "block" 374 | version = "0.1.6" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 377 | 378 | [[package]] 379 | name = "block-buffer" 380 | version = "0.10.4" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 383 | dependencies = [ 384 | "generic-array", 385 | ] 386 | 387 | [[package]] 388 | name = "block-sys" 389 | version = "0.1.0-beta.1" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" 392 | dependencies = [ 393 | "objc-sys", 394 | ] 395 | 396 | [[package]] 397 | name = "block2" 398 | version = "0.2.0-alpha.6" 399 | source = "registry+https://github.com/rust-lang/crates.io-index" 400 | checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" 401 | dependencies = [ 402 | "block-sys", 403 | "objc2-encode", 404 | ] 405 | 406 | [[package]] 407 | name = "blocking" 408 | version = "1.3.1" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" 411 | dependencies = [ 412 | "async-channel", 413 | "async-lock", 414 | "async-task", 415 | "atomic-waker", 416 | "fastrand", 417 | "futures-lite", 418 | "log", 419 | ] 420 | 421 | [[package]] 422 | name = "bumpalo" 423 | version = "3.13.0" 424 | source = "registry+https://github.com/rust-lang/crates.io-index" 425 | checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" 426 | 427 | [[package]] 428 | name = "bytemuck" 429 | version = "1.13.1" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" 432 | dependencies = [ 433 | "bytemuck_derive", 434 | ] 435 | 436 | [[package]] 437 | name = "bytemuck_derive" 438 | version = "1.4.1" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" 441 | dependencies = [ 442 | "proc-macro2", 443 | "quote", 444 | "syn 2.0.16", 445 | ] 446 | 447 | [[package]] 448 | name = "byteorder" 449 | version = "1.4.3" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 452 | 453 | [[package]] 454 | name = "bytes" 455 | version = "1.4.0" 456 | source = "registry+https://github.com/rust-lang/crates.io-index" 457 | checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" 458 | 459 | [[package]] 460 | name = "calloop" 461 | version = "0.10.5" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "1a59225be45a478d772ce015d9743e49e92798ece9e34eda9a6aa2a6a7f40192" 464 | dependencies = [ 465 | "log", 466 | "nix 0.25.1", 467 | "slotmap", 468 | "thiserror", 469 | "vec_map", 470 | ] 471 | 472 | [[package]] 473 | name = "cc" 474 | version = "1.0.79" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" 477 | dependencies = [ 478 | "jobserver", 479 | ] 480 | 481 | [[package]] 482 | name = "cesu8" 483 | version = "1.1.0" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 486 | 487 | [[package]] 488 | name = "cfg-if" 489 | version = "1.0.0" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 492 | 493 | [[package]] 494 | name = "cfg_aliases" 495 | version = "0.1.1" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" 498 | 499 | [[package]] 500 | name = "cgl" 501 | version = "0.3.2" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" 504 | dependencies = [ 505 | "libc", 506 | ] 507 | 508 | [[package]] 509 | name = "clipboard-win" 510 | version = "4.5.0" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" 513 | dependencies = [ 514 | "error-code", 515 | "str-buf", 516 | "winapi", 517 | ] 518 | 519 | [[package]] 520 | name = "cocoa" 521 | version = "0.24.1" 522 | source = "registry+https://github.com/rust-lang/crates.io-index" 523 | checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" 524 | dependencies = [ 525 | "bitflags", 526 | "block", 527 | "cocoa-foundation", 528 | "core-foundation", 529 | "core-graphics", 530 | "foreign-types", 531 | "libc", 532 | "objc", 533 | ] 534 | 535 | [[package]] 536 | name = "cocoa-foundation" 537 | version = "0.1.1" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" 540 | dependencies = [ 541 | "bitflags", 542 | "block", 543 | "core-foundation", 544 | "core-graphics-types", 545 | "foreign-types", 546 | "libc", 547 | "objc", 548 | ] 549 | 550 | [[package]] 551 | name = "color_quant" 552 | version = "1.1.0" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 555 | 556 | [[package]] 557 | name = "combine" 558 | version = "4.6.6" 559 | source = "registry+https://github.com/rust-lang/crates.io-index" 560 | checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" 561 | dependencies = [ 562 | "bytes", 563 | "memchr", 564 | ] 565 | 566 | [[package]] 567 | name = "concurrent-queue" 568 | version = "2.2.0" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" 571 | dependencies = [ 572 | "crossbeam-utils", 573 | ] 574 | 575 | [[package]] 576 | name = "core-foundation" 577 | version = "0.9.3" 578 | source = "registry+https://github.com/rust-lang/crates.io-index" 579 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 580 | dependencies = [ 581 | "core-foundation-sys", 582 | "libc", 583 | ] 584 | 585 | [[package]] 586 | name = "core-foundation-sys" 587 | version = "0.8.4" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" 590 | 591 | [[package]] 592 | name = "core-graphics" 593 | version = "0.22.3" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" 596 | dependencies = [ 597 | "bitflags", 598 | "core-foundation", 599 | "core-graphics-types", 600 | "foreign-types", 601 | "libc", 602 | ] 603 | 604 | [[package]] 605 | name = "core-graphics-types" 606 | version = "0.1.1" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" 609 | dependencies = [ 610 | "bitflags", 611 | "core-foundation", 612 | "foreign-types", 613 | "libc", 614 | ] 615 | 616 | [[package]] 617 | name = "cpufeatures" 618 | version = "0.2.7" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" 621 | dependencies = [ 622 | "libc", 623 | ] 624 | 625 | [[package]] 626 | name = "crc32fast" 627 | version = "1.3.2" 628 | source = "registry+https://github.com/rust-lang/crates.io-index" 629 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 630 | dependencies = [ 631 | "cfg-if", 632 | ] 633 | 634 | [[package]] 635 | name = "crossbeam-utils" 636 | version = "0.8.15" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" 639 | dependencies = [ 640 | "cfg-if", 641 | ] 642 | 643 | [[package]] 644 | name = "crypto-common" 645 | version = "0.1.6" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 648 | dependencies = [ 649 | "generic-array", 650 | "typenum", 651 | ] 652 | 653 | [[package]] 654 | name = "deranged" 655 | version = "0.3.8" 656 | source = "registry+https://github.com/rust-lang/crates.io-index" 657 | checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" 658 | 659 | [[package]] 660 | name = "derivative" 661 | version = "2.2.0" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 664 | dependencies = [ 665 | "proc-macro2", 666 | "quote", 667 | "syn 1.0.109", 668 | ] 669 | 670 | [[package]] 671 | name = "digest" 672 | version = "0.10.7" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 675 | dependencies = [ 676 | "block-buffer", 677 | "crypto-common", 678 | ] 679 | 680 | [[package]] 681 | name = "directories-next" 682 | version = "2.0.0" 683 | source = "registry+https://github.com/rust-lang/crates.io-index" 684 | checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" 685 | dependencies = [ 686 | "cfg-if", 687 | "dirs-sys-next", 688 | ] 689 | 690 | [[package]] 691 | name = "dirs-sys-next" 692 | version = "0.1.2" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" 695 | dependencies = [ 696 | "libc", 697 | "redox_users", 698 | "winapi", 699 | ] 700 | 701 | [[package]] 702 | name = "dispatch" 703 | version = "0.2.0" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 706 | 707 | [[package]] 708 | name = "dlib" 709 | version = "0.5.0" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" 712 | dependencies = [ 713 | "libloading", 714 | ] 715 | 716 | [[package]] 717 | name = "downcast-rs" 718 | version = "1.2.0" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" 721 | 722 | [[package]] 723 | name = "ecolor" 724 | version = "0.22.0" 725 | source = "git+https://github.com/emilk/egui?rev=67a3fcae383044def7450b311ddc1f79e36eaae0#67a3fcae383044def7450b311ddc1f79e36eaae0" 726 | dependencies = [ 727 | "bytemuck", 728 | "serde", 729 | ] 730 | 731 | [[package]] 732 | name = "eframe" 733 | version = "0.22.0" 734 | source = "git+https://github.com/emilk/egui?rev=67a3fcae383044def7450b311ddc1f79e36eaae0#67a3fcae383044def7450b311ddc1f79e36eaae0" 735 | dependencies = [ 736 | "bytemuck", 737 | "cocoa", 738 | "directories-next", 739 | "egui", 740 | "egui-winit", 741 | "egui_glow", 742 | "glow", 743 | "glutin", 744 | "glutin-winit", 745 | "image", 746 | "js-sys", 747 | "log", 748 | "objc", 749 | "parking_lot", 750 | "percent-encoding", 751 | "raw-window-handle", 752 | "ron", 753 | "serde", 754 | "static_assertions", 755 | "thiserror", 756 | "wasm-bindgen", 757 | "wasm-bindgen-futures", 758 | "web-sys", 759 | "winapi", 760 | "winit", 761 | ] 762 | 763 | [[package]] 764 | name = "egui" 765 | version = "0.22.0" 766 | source = "git+https://github.com/emilk/egui?rev=67a3fcae383044def7450b311ddc1f79e36eaae0#67a3fcae383044def7450b311ddc1f79e36eaae0" 767 | dependencies = [ 768 | "accesskit", 769 | "ahash", 770 | "epaint", 771 | "log", 772 | "nohash-hasher", 773 | "ron", 774 | "serde", 775 | ] 776 | 777 | [[package]] 778 | name = "egui-winit" 779 | version = "0.22.0" 780 | source = "git+https://github.com/emilk/egui?rev=67a3fcae383044def7450b311ddc1f79e36eaae0#67a3fcae383044def7450b311ddc1f79e36eaae0" 781 | dependencies = [ 782 | "accesskit_winit", 783 | "arboard", 784 | "egui", 785 | "log", 786 | "raw-window-handle", 787 | "serde", 788 | "smithay-clipboard", 789 | "web-time", 790 | "webbrowser", 791 | "winit", 792 | ] 793 | 794 | [[package]] 795 | name = "egui_commonmark" 796 | version = "0.7.4" 797 | source = "git+https://github.com/lampsitter/egui_commonmark.git?rev=7ae829780a450fa55c2bf4582d491527e070acf4#7ae829780a450fa55c2bf4582d491527e070acf4" 798 | dependencies = [ 799 | "egui", 800 | "egui_extras", 801 | "pulldown-cmark", 802 | "syntect", 803 | ] 804 | 805 | [[package]] 806 | name = "egui_extras" 807 | version = "0.22.0" 808 | source = "git+https://github.com/emilk/egui?rev=67a3fcae383044def7450b311ddc1f79e36eaae0#67a3fcae383044def7450b311ddc1f79e36eaae0" 809 | dependencies = [ 810 | "egui", 811 | "image", 812 | "log", 813 | "mime_guess", 814 | "serde", 815 | ] 816 | 817 | [[package]] 818 | name = "egui_glow" 819 | version = "0.22.0" 820 | source = "git+https://github.com/emilk/egui?rev=67a3fcae383044def7450b311ddc1f79e36eaae0#67a3fcae383044def7450b311ddc1f79e36eaae0" 821 | dependencies = [ 822 | "bytemuck", 823 | "egui", 824 | "glow", 825 | "log", 826 | "memoffset 0.6.5", 827 | "wasm-bindgen", 828 | "web-sys", 829 | ] 830 | 831 | [[package]] 832 | name = "egui_presentation" 833 | version = "0.1.0" 834 | dependencies = [ 835 | "eframe", 836 | "egui", 837 | "egui_commonmark", 838 | "egui_extras", 839 | "env_logger", 840 | "image", 841 | "itertools", 842 | "log", 843 | "serde", 844 | "wasm-bindgen-futures", 845 | ] 846 | 847 | [[package]] 848 | name = "either" 849 | version = "1.9.0" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" 852 | 853 | [[package]] 854 | name = "emath" 855 | version = "0.22.0" 856 | source = "git+https://github.com/emilk/egui?rev=67a3fcae383044def7450b311ddc1f79e36eaae0#67a3fcae383044def7450b311ddc1f79e36eaae0" 857 | dependencies = [ 858 | "bytemuck", 859 | "serde", 860 | ] 861 | 862 | [[package]] 863 | name = "enumflags2" 864 | version = "0.7.7" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" 867 | dependencies = [ 868 | "enumflags2_derive", 869 | "serde", 870 | ] 871 | 872 | [[package]] 873 | name = "enumflags2_derive" 874 | version = "0.7.7" 875 | source = "registry+https://github.com/rust-lang/crates.io-index" 876 | checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" 877 | dependencies = [ 878 | "proc-macro2", 879 | "quote", 880 | "syn 2.0.16", 881 | ] 882 | 883 | [[package]] 884 | name = "enumn" 885 | version = "0.1.8" 886 | source = "registry+https://github.com/rust-lang/crates.io-index" 887 | checksum = "48016319042fb7c87b78d2993084a831793a897a5cd1a2a67cab9d1eeb4b7d76" 888 | dependencies = [ 889 | "proc-macro2", 890 | "quote", 891 | "syn 2.0.16", 892 | ] 893 | 894 | [[package]] 895 | name = "env_logger" 896 | version = "0.10.0" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" 899 | dependencies = [ 900 | "humantime", 901 | "is-terminal", 902 | "log", 903 | "regex", 904 | "termcolor", 905 | ] 906 | 907 | [[package]] 908 | name = "epaint" 909 | version = "0.22.0" 910 | source = "git+https://github.com/emilk/egui?rev=67a3fcae383044def7450b311ddc1f79e36eaae0#67a3fcae383044def7450b311ddc1f79e36eaae0" 911 | dependencies = [ 912 | "ab_glyph", 913 | "ahash", 914 | "bytemuck", 915 | "ecolor", 916 | "emath", 917 | "log", 918 | "nohash-hasher", 919 | "parking_lot", 920 | "serde", 921 | ] 922 | 923 | [[package]] 924 | name = "errno" 925 | version = "0.3.1" 926 | source = "registry+https://github.com/rust-lang/crates.io-index" 927 | checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" 928 | dependencies = [ 929 | "errno-dragonfly", 930 | "libc", 931 | "windows-sys 0.48.0", 932 | ] 933 | 934 | [[package]] 935 | name = "errno-dragonfly" 936 | version = "0.1.2" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" 939 | dependencies = [ 940 | "cc", 941 | "libc", 942 | ] 943 | 944 | [[package]] 945 | name = "error-code" 946 | version = "2.3.1" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" 949 | dependencies = [ 950 | "libc", 951 | "str-buf", 952 | ] 953 | 954 | [[package]] 955 | name = "event-listener" 956 | version = "2.5.3" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 959 | 960 | [[package]] 961 | name = "fancy-regex" 962 | version = "0.11.0" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" 965 | dependencies = [ 966 | "bit-set", 967 | "regex", 968 | ] 969 | 970 | [[package]] 971 | name = "fastrand" 972 | version = "1.9.0" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" 975 | dependencies = [ 976 | "instant", 977 | ] 978 | 979 | [[package]] 980 | name = "fdeflate" 981 | version = "0.3.0" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" 984 | dependencies = [ 985 | "simd-adler32", 986 | ] 987 | 988 | [[package]] 989 | name = "flate2" 990 | version = "1.0.26" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" 993 | dependencies = [ 994 | "crc32fast", 995 | "miniz_oxide", 996 | ] 997 | 998 | [[package]] 999 | name = "fnv" 1000 | version = "1.0.7" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1003 | 1004 | [[package]] 1005 | name = "foreign-types" 1006 | version = "0.3.2" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1009 | dependencies = [ 1010 | "foreign-types-shared", 1011 | ] 1012 | 1013 | [[package]] 1014 | name = "foreign-types-shared" 1015 | version = "0.1.1" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1018 | 1019 | [[package]] 1020 | name = "form_urlencoded" 1021 | version = "1.1.0" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" 1024 | dependencies = [ 1025 | "percent-encoding", 1026 | ] 1027 | 1028 | [[package]] 1029 | name = "futures-core" 1030 | version = "0.3.28" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" 1033 | 1034 | [[package]] 1035 | name = "futures-io" 1036 | version = "0.3.28" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" 1039 | 1040 | [[package]] 1041 | name = "futures-lite" 1042 | version = "1.13.0" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" 1045 | dependencies = [ 1046 | "fastrand", 1047 | "futures-core", 1048 | "futures-io", 1049 | "memchr", 1050 | "parking", 1051 | "pin-project-lite", 1052 | "waker-fn", 1053 | ] 1054 | 1055 | [[package]] 1056 | name = "futures-sink" 1057 | version = "0.3.28" 1058 | source = "registry+https://github.com/rust-lang/crates.io-index" 1059 | checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" 1060 | 1061 | [[package]] 1062 | name = "futures-task" 1063 | version = "0.3.28" 1064 | source = "registry+https://github.com/rust-lang/crates.io-index" 1065 | checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" 1066 | 1067 | [[package]] 1068 | name = "futures-util" 1069 | version = "0.3.28" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" 1072 | dependencies = [ 1073 | "futures-core", 1074 | "futures-io", 1075 | "futures-sink", 1076 | "futures-task", 1077 | "memchr", 1078 | "pin-project-lite", 1079 | "pin-utils", 1080 | "slab", 1081 | ] 1082 | 1083 | [[package]] 1084 | name = "generic-array" 1085 | version = "0.14.7" 1086 | source = "registry+https://github.com/rust-lang/crates.io-index" 1087 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1088 | dependencies = [ 1089 | "typenum", 1090 | "version_check", 1091 | ] 1092 | 1093 | [[package]] 1094 | name = "gethostname" 1095 | version = "0.2.3" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" 1098 | dependencies = [ 1099 | "libc", 1100 | "winapi", 1101 | ] 1102 | 1103 | [[package]] 1104 | name = "getrandom" 1105 | version = "0.2.9" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" 1108 | dependencies = [ 1109 | "cfg-if", 1110 | "libc", 1111 | "wasi", 1112 | ] 1113 | 1114 | [[package]] 1115 | name = "gl_generator" 1116 | version = "0.14.0" 1117 | source = "registry+https://github.com/rust-lang/crates.io-index" 1118 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 1119 | dependencies = [ 1120 | "khronos_api", 1121 | "log", 1122 | "xml-rs", 1123 | ] 1124 | 1125 | [[package]] 1126 | name = "glow" 1127 | version = "0.12.1" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "4e007a07a24de5ecae94160f141029e9a347282cfe25d1d58d85d845cf3130f1" 1130 | dependencies = [ 1131 | "js-sys", 1132 | "slotmap", 1133 | "wasm-bindgen", 1134 | "web-sys", 1135 | ] 1136 | 1137 | [[package]] 1138 | name = "glutin" 1139 | version = "0.30.8" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "62f9b771a65f0a1e3ddb6aa16f867d87dc73c922411c255e6c4ab7f6d45c7327" 1142 | dependencies = [ 1143 | "bitflags", 1144 | "cfg_aliases", 1145 | "cgl", 1146 | "core-foundation", 1147 | "dispatch", 1148 | "glutin_egl_sys", 1149 | "glutin_glx_sys", 1150 | "glutin_wgl_sys", 1151 | "libloading", 1152 | "objc2", 1153 | "once_cell", 1154 | "raw-window-handle", 1155 | "wayland-sys 0.30.1", 1156 | "windows-sys 0.45.0", 1157 | "x11-dl", 1158 | ] 1159 | 1160 | [[package]] 1161 | name = "glutin-winit" 1162 | version = "0.3.0" 1163 | source = "registry+https://github.com/rust-lang/crates.io-index" 1164 | checksum = "629a873fc04062830bfe8f97c03773bcd7b371e23bcc465d0a61448cd1588fa4" 1165 | dependencies = [ 1166 | "cfg_aliases", 1167 | "glutin", 1168 | "raw-window-handle", 1169 | "winit", 1170 | ] 1171 | 1172 | [[package]] 1173 | name = "glutin_egl_sys" 1174 | version = "0.5.0" 1175 | source = "registry+https://github.com/rust-lang/crates.io-index" 1176 | checksum = "1b3bcbddc51573b977fc6dca5d93867e4f29682cdbaf5d13e48f4fa4346d4d87" 1177 | dependencies = [ 1178 | "gl_generator", 1179 | "windows-sys 0.45.0", 1180 | ] 1181 | 1182 | [[package]] 1183 | name = "glutin_glx_sys" 1184 | version = "0.4.0" 1185 | source = "registry+https://github.com/rust-lang/crates.io-index" 1186 | checksum = "1b53cb5fe568964aa066a3ba91eac5ecbac869fb0842cd0dc9e412434f1a1494" 1187 | dependencies = [ 1188 | "gl_generator", 1189 | "x11-dl", 1190 | ] 1191 | 1192 | [[package]] 1193 | name = "glutin_wgl_sys" 1194 | version = "0.4.0" 1195 | source = "registry+https://github.com/rust-lang/crates.io-index" 1196 | checksum = "ef89398e90033fc6bc65e9bd42fd29bbbfd483bda5b56dc5562f455550618165" 1197 | dependencies = [ 1198 | "gl_generator", 1199 | ] 1200 | 1201 | [[package]] 1202 | name = "hashbrown" 1203 | version = "0.12.3" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1206 | 1207 | [[package]] 1208 | name = "hermit-abi" 1209 | version = "0.3.1" 1210 | source = "registry+https://github.com/rust-lang/crates.io-index" 1211 | checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" 1212 | 1213 | [[package]] 1214 | name = "hex" 1215 | version = "0.4.3" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1218 | 1219 | [[package]] 1220 | name = "home" 1221 | version = "0.5.5" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" 1224 | dependencies = [ 1225 | "windows-sys 0.48.0", 1226 | ] 1227 | 1228 | [[package]] 1229 | name = "humantime" 1230 | version = "2.1.0" 1231 | source = "registry+https://github.com/rust-lang/crates.io-index" 1232 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1233 | 1234 | [[package]] 1235 | name = "idna" 1236 | version = "0.3.0" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" 1239 | dependencies = [ 1240 | "unicode-bidi", 1241 | "unicode-normalization", 1242 | ] 1243 | 1244 | [[package]] 1245 | name = "image" 1246 | version = "0.24.6" 1247 | source = "registry+https://github.com/rust-lang/crates.io-index" 1248 | checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" 1249 | dependencies = [ 1250 | "bytemuck", 1251 | "byteorder", 1252 | "color_quant", 1253 | "num-rational", 1254 | "num-traits", 1255 | "png", 1256 | ] 1257 | 1258 | [[package]] 1259 | name = "indexmap" 1260 | version = "1.9.3" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1263 | dependencies = [ 1264 | "autocfg", 1265 | "hashbrown", 1266 | ] 1267 | 1268 | [[package]] 1269 | name = "instant" 1270 | version = "0.1.12" 1271 | source = "registry+https://github.com/rust-lang/crates.io-index" 1272 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1273 | dependencies = [ 1274 | "cfg-if", 1275 | "js-sys", 1276 | "wasm-bindgen", 1277 | "web-sys", 1278 | ] 1279 | 1280 | [[package]] 1281 | name = "io-lifetimes" 1282 | version = "1.0.10" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" 1285 | dependencies = [ 1286 | "hermit-abi", 1287 | "libc", 1288 | "windows-sys 0.48.0", 1289 | ] 1290 | 1291 | [[package]] 1292 | name = "is-terminal" 1293 | version = "0.4.7" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" 1296 | dependencies = [ 1297 | "hermit-abi", 1298 | "io-lifetimes", 1299 | "rustix", 1300 | "windows-sys 0.48.0", 1301 | ] 1302 | 1303 | [[package]] 1304 | name = "itertools" 1305 | version = "0.11.0" 1306 | source = "registry+https://github.com/rust-lang/crates.io-index" 1307 | checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" 1308 | dependencies = [ 1309 | "either", 1310 | ] 1311 | 1312 | [[package]] 1313 | name = "itoa" 1314 | version = "1.0.9" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" 1317 | 1318 | [[package]] 1319 | name = "jni" 1320 | version = "0.21.1" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1323 | dependencies = [ 1324 | "cesu8", 1325 | "cfg-if", 1326 | "combine", 1327 | "jni-sys", 1328 | "log", 1329 | "thiserror", 1330 | "walkdir", 1331 | "windows-sys 0.45.0", 1332 | ] 1333 | 1334 | [[package]] 1335 | name = "jni-sys" 1336 | version = "0.3.0" 1337 | source = "registry+https://github.com/rust-lang/crates.io-index" 1338 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1339 | 1340 | [[package]] 1341 | name = "jobserver" 1342 | version = "0.1.26" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" 1345 | dependencies = [ 1346 | "libc", 1347 | ] 1348 | 1349 | [[package]] 1350 | name = "js-sys" 1351 | version = "0.3.61" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" 1354 | dependencies = [ 1355 | "wasm-bindgen", 1356 | ] 1357 | 1358 | [[package]] 1359 | name = "khronos_api" 1360 | version = "3.1.0" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1363 | 1364 | [[package]] 1365 | name = "lazy_static" 1366 | version = "1.4.0" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1369 | 1370 | [[package]] 1371 | name = "libc" 1372 | version = "0.2.144" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" 1375 | 1376 | [[package]] 1377 | name = "libloading" 1378 | version = "0.7.4" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" 1381 | dependencies = [ 1382 | "cfg-if", 1383 | "winapi", 1384 | ] 1385 | 1386 | [[package]] 1387 | name = "line-wrap" 1388 | version = "0.1.1" 1389 | source = "registry+https://github.com/rust-lang/crates.io-index" 1390 | checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" 1391 | dependencies = [ 1392 | "safemem", 1393 | ] 1394 | 1395 | [[package]] 1396 | name = "linked-hash-map" 1397 | version = "0.5.6" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 1400 | 1401 | [[package]] 1402 | name = "linux-raw-sys" 1403 | version = "0.3.8" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" 1406 | 1407 | [[package]] 1408 | name = "lock_api" 1409 | version = "0.4.9" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" 1412 | dependencies = [ 1413 | "autocfg", 1414 | "scopeguard", 1415 | ] 1416 | 1417 | [[package]] 1418 | name = "log" 1419 | version = "0.4.17" 1420 | source = "registry+https://github.com/rust-lang/crates.io-index" 1421 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 1422 | dependencies = [ 1423 | "cfg-if", 1424 | ] 1425 | 1426 | [[package]] 1427 | name = "malloc_buf" 1428 | version = "0.0.6" 1429 | source = "registry+https://github.com/rust-lang/crates.io-index" 1430 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1431 | dependencies = [ 1432 | "libc", 1433 | ] 1434 | 1435 | [[package]] 1436 | name = "memchr" 1437 | version = "2.5.0" 1438 | source = "registry+https://github.com/rust-lang/crates.io-index" 1439 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 1440 | 1441 | [[package]] 1442 | name = "memmap2" 1443 | version = "0.5.10" 1444 | source = "registry+https://github.com/rust-lang/crates.io-index" 1445 | checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" 1446 | dependencies = [ 1447 | "libc", 1448 | ] 1449 | 1450 | [[package]] 1451 | name = "memoffset" 1452 | version = "0.6.5" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 1455 | dependencies = [ 1456 | "autocfg", 1457 | ] 1458 | 1459 | [[package]] 1460 | name = "memoffset" 1461 | version = "0.7.1" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" 1464 | dependencies = [ 1465 | "autocfg", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "mime" 1470 | version = "0.3.17" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1473 | 1474 | [[package]] 1475 | name = "mime_guess" 1476 | version = "2.0.4" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" 1479 | dependencies = [ 1480 | "mime", 1481 | "unicase", 1482 | ] 1483 | 1484 | [[package]] 1485 | name = "minimal-lexical" 1486 | version = "0.2.1" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1489 | 1490 | [[package]] 1491 | name = "miniz_oxide" 1492 | version = "0.7.1" 1493 | source = "registry+https://github.com/rust-lang/crates.io-index" 1494 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" 1495 | dependencies = [ 1496 | "adler", 1497 | "simd-adler32", 1498 | ] 1499 | 1500 | [[package]] 1501 | name = "mio" 1502 | version = "0.8.6" 1503 | source = "registry+https://github.com/rust-lang/crates.io-index" 1504 | checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" 1505 | dependencies = [ 1506 | "libc", 1507 | "log", 1508 | "wasi", 1509 | "windows-sys 0.45.0", 1510 | ] 1511 | 1512 | [[package]] 1513 | name = "ndk" 1514 | version = "0.7.0" 1515 | source = "registry+https://github.com/rust-lang/crates.io-index" 1516 | checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" 1517 | dependencies = [ 1518 | "bitflags", 1519 | "jni-sys", 1520 | "ndk-sys", 1521 | "num_enum", 1522 | "raw-window-handle", 1523 | "thiserror", 1524 | ] 1525 | 1526 | [[package]] 1527 | name = "ndk-context" 1528 | version = "0.1.1" 1529 | source = "registry+https://github.com/rust-lang/crates.io-index" 1530 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1531 | 1532 | [[package]] 1533 | name = "ndk-sys" 1534 | version = "0.4.1+23.1.7779620" 1535 | source = "registry+https://github.com/rust-lang/crates.io-index" 1536 | checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" 1537 | dependencies = [ 1538 | "jni-sys", 1539 | ] 1540 | 1541 | [[package]] 1542 | name = "nix" 1543 | version = "0.24.3" 1544 | source = "registry+https://github.com/rust-lang/crates.io-index" 1545 | checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" 1546 | dependencies = [ 1547 | "bitflags", 1548 | "cfg-if", 1549 | "libc", 1550 | "memoffset 0.6.5", 1551 | ] 1552 | 1553 | [[package]] 1554 | name = "nix" 1555 | version = "0.25.1" 1556 | source = "registry+https://github.com/rust-lang/crates.io-index" 1557 | checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" 1558 | dependencies = [ 1559 | "autocfg", 1560 | "bitflags", 1561 | "cfg-if", 1562 | "libc", 1563 | "memoffset 0.6.5", 1564 | ] 1565 | 1566 | [[package]] 1567 | name = "nix" 1568 | version = "0.26.2" 1569 | source = "registry+https://github.com/rust-lang/crates.io-index" 1570 | checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" 1571 | dependencies = [ 1572 | "bitflags", 1573 | "cfg-if", 1574 | "libc", 1575 | "memoffset 0.7.1", 1576 | "static_assertions", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "nohash-hasher" 1581 | version = "0.2.0" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 1584 | 1585 | [[package]] 1586 | name = "nom" 1587 | version = "7.1.3" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1590 | dependencies = [ 1591 | "memchr", 1592 | "minimal-lexical", 1593 | ] 1594 | 1595 | [[package]] 1596 | name = "num-integer" 1597 | version = "0.1.45" 1598 | source = "registry+https://github.com/rust-lang/crates.io-index" 1599 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 1600 | dependencies = [ 1601 | "autocfg", 1602 | "num-traits", 1603 | ] 1604 | 1605 | [[package]] 1606 | name = "num-rational" 1607 | version = "0.4.1" 1608 | source = "registry+https://github.com/rust-lang/crates.io-index" 1609 | checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" 1610 | dependencies = [ 1611 | "autocfg", 1612 | "num-integer", 1613 | "num-traits", 1614 | ] 1615 | 1616 | [[package]] 1617 | name = "num-traits" 1618 | version = "0.2.15" 1619 | source = "registry+https://github.com/rust-lang/crates.io-index" 1620 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1621 | dependencies = [ 1622 | "autocfg", 1623 | ] 1624 | 1625 | [[package]] 1626 | name = "num_enum" 1627 | version = "0.5.11" 1628 | source = "registry+https://github.com/rust-lang/crates.io-index" 1629 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" 1630 | dependencies = [ 1631 | "num_enum_derive", 1632 | ] 1633 | 1634 | [[package]] 1635 | name = "num_enum_derive" 1636 | version = "0.5.11" 1637 | source = "registry+https://github.com/rust-lang/crates.io-index" 1638 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" 1639 | dependencies = [ 1640 | "proc-macro-crate", 1641 | "proc-macro2", 1642 | "quote", 1643 | "syn 1.0.109", 1644 | ] 1645 | 1646 | [[package]] 1647 | name = "objc" 1648 | version = "0.2.7" 1649 | source = "registry+https://github.com/rust-lang/crates.io-index" 1650 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1651 | dependencies = [ 1652 | "malloc_buf", 1653 | ] 1654 | 1655 | [[package]] 1656 | name = "objc-foundation" 1657 | version = "0.1.1" 1658 | source = "registry+https://github.com/rust-lang/crates.io-index" 1659 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 1660 | dependencies = [ 1661 | "block", 1662 | "objc", 1663 | "objc_id", 1664 | ] 1665 | 1666 | [[package]] 1667 | name = "objc-sys" 1668 | version = "0.2.0-beta.2" 1669 | source = "registry+https://github.com/rust-lang/crates.io-index" 1670 | checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" 1671 | 1672 | [[package]] 1673 | name = "objc2" 1674 | version = "0.3.0-beta.3" 1675 | source = "registry+https://github.com/rust-lang/crates.io-index" 1676 | checksum = "fe31e5425d3d0b89a15982c024392815da40689aceb34bad364d58732bcfd649" 1677 | dependencies = [ 1678 | "block2", 1679 | "objc-sys", 1680 | "objc2-encode", 1681 | ] 1682 | 1683 | [[package]] 1684 | name = "objc2-encode" 1685 | version = "2.0.0-pre.2" 1686 | source = "registry+https://github.com/rust-lang/crates.io-index" 1687 | checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" 1688 | dependencies = [ 1689 | "objc-sys", 1690 | ] 1691 | 1692 | [[package]] 1693 | name = "objc_id" 1694 | version = "0.1.1" 1695 | source = "registry+https://github.com/rust-lang/crates.io-index" 1696 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 1697 | dependencies = [ 1698 | "objc", 1699 | ] 1700 | 1701 | [[package]] 1702 | name = "once_cell" 1703 | version = "1.17.1" 1704 | source = "registry+https://github.com/rust-lang/crates.io-index" 1705 | checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" 1706 | 1707 | [[package]] 1708 | name = "orbclient" 1709 | version = "0.3.45" 1710 | source = "registry+https://github.com/rust-lang/crates.io-index" 1711 | checksum = "221d488cd70617f1bd599ed8ceb659df2147d9393717954d82a0f5e8032a6ab1" 1712 | dependencies = [ 1713 | "redox_syscall 0.3.5", 1714 | ] 1715 | 1716 | [[package]] 1717 | name = "ordered-stream" 1718 | version = "0.2.0" 1719 | source = "registry+https://github.com/rust-lang/crates.io-index" 1720 | checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" 1721 | dependencies = [ 1722 | "futures-core", 1723 | "pin-project-lite", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "owned_ttf_parser" 1728 | version = "0.19.0" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" 1731 | dependencies = [ 1732 | "ttf-parser", 1733 | ] 1734 | 1735 | [[package]] 1736 | name = "parking" 1737 | version = "2.1.0" 1738 | source = "registry+https://github.com/rust-lang/crates.io-index" 1739 | checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" 1740 | 1741 | [[package]] 1742 | name = "parking_lot" 1743 | version = "0.12.1" 1744 | source = "registry+https://github.com/rust-lang/crates.io-index" 1745 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1746 | dependencies = [ 1747 | "lock_api", 1748 | "parking_lot_core", 1749 | ] 1750 | 1751 | [[package]] 1752 | name = "parking_lot_core" 1753 | version = "0.9.7" 1754 | source = "registry+https://github.com/rust-lang/crates.io-index" 1755 | checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" 1756 | dependencies = [ 1757 | "cfg-if", 1758 | "libc", 1759 | "redox_syscall 0.2.16", 1760 | "smallvec", 1761 | "windows-sys 0.45.0", 1762 | ] 1763 | 1764 | [[package]] 1765 | name = "paste" 1766 | version = "1.0.12" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" 1769 | 1770 | [[package]] 1771 | name = "percent-encoding" 1772 | version = "2.2.0" 1773 | source = "registry+https://github.com/rust-lang/crates.io-index" 1774 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" 1775 | 1776 | [[package]] 1777 | name = "pin-project-lite" 1778 | version = "0.2.9" 1779 | source = "registry+https://github.com/rust-lang/crates.io-index" 1780 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 1781 | 1782 | [[package]] 1783 | name = "pin-utils" 1784 | version = "0.1.0" 1785 | source = "registry+https://github.com/rust-lang/crates.io-index" 1786 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1787 | 1788 | [[package]] 1789 | name = "pkg-config" 1790 | version = "0.3.27" 1791 | source = "registry+https://github.com/rust-lang/crates.io-index" 1792 | checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" 1793 | 1794 | [[package]] 1795 | name = "plist" 1796 | version = "1.5.0" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" 1799 | dependencies = [ 1800 | "base64 0.21.2", 1801 | "indexmap", 1802 | "line-wrap", 1803 | "quick-xml", 1804 | "serde", 1805 | "time", 1806 | ] 1807 | 1808 | [[package]] 1809 | name = "png" 1810 | version = "0.17.8" 1811 | source = "registry+https://github.com/rust-lang/crates.io-index" 1812 | checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" 1813 | dependencies = [ 1814 | "bitflags", 1815 | "crc32fast", 1816 | "fdeflate", 1817 | "flate2", 1818 | "miniz_oxide", 1819 | ] 1820 | 1821 | [[package]] 1822 | name = "polling" 1823 | version = "2.8.0" 1824 | source = "registry+https://github.com/rust-lang/crates.io-index" 1825 | checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" 1826 | dependencies = [ 1827 | "autocfg", 1828 | "bitflags", 1829 | "cfg-if", 1830 | "concurrent-queue", 1831 | "libc", 1832 | "log", 1833 | "pin-project-lite", 1834 | "windows-sys 0.48.0", 1835 | ] 1836 | 1837 | [[package]] 1838 | name = "ppv-lite86" 1839 | version = "0.2.17" 1840 | source = "registry+https://github.com/rust-lang/crates.io-index" 1841 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1842 | 1843 | [[package]] 1844 | name = "proc-macro-crate" 1845 | version = "1.3.1" 1846 | source = "registry+https://github.com/rust-lang/crates.io-index" 1847 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" 1848 | dependencies = [ 1849 | "once_cell", 1850 | "toml_edit", 1851 | ] 1852 | 1853 | [[package]] 1854 | name = "proc-macro2" 1855 | version = "1.0.58" 1856 | source = "registry+https://github.com/rust-lang/crates.io-index" 1857 | checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" 1858 | dependencies = [ 1859 | "unicode-ident", 1860 | ] 1861 | 1862 | [[package]] 1863 | name = "pulldown-cmark" 1864 | version = "0.9.3" 1865 | source = "registry+https://github.com/rust-lang/crates.io-index" 1866 | checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" 1867 | dependencies = [ 1868 | "bitflags", 1869 | "memchr", 1870 | "unicase", 1871 | ] 1872 | 1873 | [[package]] 1874 | name = "quick-xml" 1875 | version = "0.29.0" 1876 | source = "registry+https://github.com/rust-lang/crates.io-index" 1877 | checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" 1878 | dependencies = [ 1879 | "memchr", 1880 | ] 1881 | 1882 | [[package]] 1883 | name = "quote" 1884 | version = "1.0.27" 1885 | source = "registry+https://github.com/rust-lang/crates.io-index" 1886 | checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" 1887 | dependencies = [ 1888 | "proc-macro2", 1889 | ] 1890 | 1891 | [[package]] 1892 | name = "rand" 1893 | version = "0.8.5" 1894 | source = "registry+https://github.com/rust-lang/crates.io-index" 1895 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1896 | dependencies = [ 1897 | "libc", 1898 | "rand_chacha", 1899 | "rand_core", 1900 | ] 1901 | 1902 | [[package]] 1903 | name = "rand_chacha" 1904 | version = "0.3.1" 1905 | source = "registry+https://github.com/rust-lang/crates.io-index" 1906 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1907 | dependencies = [ 1908 | "ppv-lite86", 1909 | "rand_core", 1910 | ] 1911 | 1912 | [[package]] 1913 | name = "rand_core" 1914 | version = "0.6.4" 1915 | source = "registry+https://github.com/rust-lang/crates.io-index" 1916 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1917 | dependencies = [ 1918 | "getrandom", 1919 | ] 1920 | 1921 | [[package]] 1922 | name = "raw-window-handle" 1923 | version = "0.5.2" 1924 | source = "registry+https://github.com/rust-lang/crates.io-index" 1925 | checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" 1926 | 1927 | [[package]] 1928 | name = "redox_syscall" 1929 | version = "0.2.16" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 1932 | dependencies = [ 1933 | "bitflags", 1934 | ] 1935 | 1936 | [[package]] 1937 | name = "redox_syscall" 1938 | version = "0.3.5" 1939 | source = "registry+https://github.com/rust-lang/crates.io-index" 1940 | checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" 1941 | dependencies = [ 1942 | "bitflags", 1943 | ] 1944 | 1945 | [[package]] 1946 | name = "redox_users" 1947 | version = "0.4.3" 1948 | source = "registry+https://github.com/rust-lang/crates.io-index" 1949 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 1950 | dependencies = [ 1951 | "getrandom", 1952 | "redox_syscall 0.2.16", 1953 | "thiserror", 1954 | ] 1955 | 1956 | [[package]] 1957 | name = "regex" 1958 | version = "1.8.2" 1959 | source = "registry+https://github.com/rust-lang/crates.io-index" 1960 | checksum = "d1a59b5d8e97dee33696bf13c5ba8ab85341c002922fba050069326b9c498974" 1961 | dependencies = [ 1962 | "aho-corasick", 1963 | "memchr", 1964 | "regex-syntax", 1965 | ] 1966 | 1967 | [[package]] 1968 | name = "regex-syntax" 1969 | version = "0.7.2" 1970 | source = "registry+https://github.com/rust-lang/crates.io-index" 1971 | checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" 1972 | 1973 | [[package]] 1974 | name = "ron" 1975 | version = "0.8.0" 1976 | source = "registry+https://github.com/rust-lang/crates.io-index" 1977 | checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff" 1978 | dependencies = [ 1979 | "base64 0.13.1", 1980 | "bitflags", 1981 | "serde", 1982 | ] 1983 | 1984 | [[package]] 1985 | name = "rustix" 1986 | version = "0.37.19" 1987 | source = "registry+https://github.com/rust-lang/crates.io-index" 1988 | checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" 1989 | dependencies = [ 1990 | "bitflags", 1991 | "errno", 1992 | "io-lifetimes", 1993 | "libc", 1994 | "linux-raw-sys", 1995 | "windows-sys 0.48.0", 1996 | ] 1997 | 1998 | [[package]] 1999 | name = "ryu" 2000 | version = "1.0.15" 2001 | source = "registry+https://github.com/rust-lang/crates.io-index" 2002 | checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" 2003 | 2004 | [[package]] 2005 | name = "safemem" 2006 | version = "0.3.3" 2007 | source = "registry+https://github.com/rust-lang/crates.io-index" 2008 | checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" 2009 | 2010 | [[package]] 2011 | name = "same-file" 2012 | version = "1.0.6" 2013 | source = "registry+https://github.com/rust-lang/crates.io-index" 2014 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2015 | dependencies = [ 2016 | "winapi-util", 2017 | ] 2018 | 2019 | [[package]] 2020 | name = "scoped-tls" 2021 | version = "1.0.1" 2022 | source = "registry+https://github.com/rust-lang/crates.io-index" 2023 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2024 | 2025 | [[package]] 2026 | name = "scopeguard" 2027 | version = "1.1.0" 2028 | source = "registry+https://github.com/rust-lang/crates.io-index" 2029 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 2030 | 2031 | [[package]] 2032 | name = "serde" 2033 | version = "1.0.163" 2034 | source = "registry+https://github.com/rust-lang/crates.io-index" 2035 | checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" 2036 | dependencies = [ 2037 | "serde_derive", 2038 | ] 2039 | 2040 | [[package]] 2041 | name = "serde_derive" 2042 | version = "1.0.163" 2043 | source = "registry+https://github.com/rust-lang/crates.io-index" 2044 | checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" 2045 | dependencies = [ 2046 | "proc-macro2", 2047 | "quote", 2048 | "syn 2.0.16", 2049 | ] 2050 | 2051 | [[package]] 2052 | name = "serde_json" 2053 | version = "1.0.99" 2054 | source = "registry+https://github.com/rust-lang/crates.io-index" 2055 | checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" 2056 | dependencies = [ 2057 | "itoa", 2058 | "ryu", 2059 | "serde", 2060 | ] 2061 | 2062 | [[package]] 2063 | name = "serde_repr" 2064 | version = "0.1.12" 2065 | source = "registry+https://github.com/rust-lang/crates.io-index" 2066 | checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" 2067 | dependencies = [ 2068 | "proc-macro2", 2069 | "quote", 2070 | "syn 2.0.16", 2071 | ] 2072 | 2073 | [[package]] 2074 | name = "sha1" 2075 | version = "0.10.5" 2076 | source = "registry+https://github.com/rust-lang/crates.io-index" 2077 | checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" 2078 | dependencies = [ 2079 | "cfg-if", 2080 | "cpufeatures", 2081 | "digest", 2082 | ] 2083 | 2084 | [[package]] 2085 | name = "signal-hook" 2086 | version = "0.3.15" 2087 | source = "registry+https://github.com/rust-lang/crates.io-index" 2088 | checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" 2089 | dependencies = [ 2090 | "libc", 2091 | "signal-hook-registry", 2092 | ] 2093 | 2094 | [[package]] 2095 | name = "signal-hook-registry" 2096 | version = "1.4.1" 2097 | source = "registry+https://github.com/rust-lang/crates.io-index" 2098 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 2099 | dependencies = [ 2100 | "libc", 2101 | ] 2102 | 2103 | [[package]] 2104 | name = "simd-adler32" 2105 | version = "0.3.5" 2106 | source = "registry+https://github.com/rust-lang/crates.io-index" 2107 | checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" 2108 | 2109 | [[package]] 2110 | name = "slab" 2111 | version = "0.4.8" 2112 | source = "registry+https://github.com/rust-lang/crates.io-index" 2113 | checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" 2114 | dependencies = [ 2115 | "autocfg", 2116 | ] 2117 | 2118 | [[package]] 2119 | name = "slotmap" 2120 | version = "1.0.6" 2121 | source = "registry+https://github.com/rust-lang/crates.io-index" 2122 | checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" 2123 | dependencies = [ 2124 | "version_check", 2125 | ] 2126 | 2127 | [[package]] 2128 | name = "smallvec" 2129 | version = "1.10.0" 2130 | source = "registry+https://github.com/rust-lang/crates.io-index" 2131 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 2132 | 2133 | [[package]] 2134 | name = "smithay-client-toolkit" 2135 | version = "0.16.0" 2136 | source = "registry+https://github.com/rust-lang/crates.io-index" 2137 | checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" 2138 | dependencies = [ 2139 | "bitflags", 2140 | "calloop", 2141 | "dlib", 2142 | "lazy_static", 2143 | "log", 2144 | "memmap2", 2145 | "nix 0.24.3", 2146 | "pkg-config", 2147 | "wayland-client", 2148 | "wayland-cursor", 2149 | "wayland-protocols", 2150 | ] 2151 | 2152 | [[package]] 2153 | name = "smithay-clipboard" 2154 | version = "0.6.6" 2155 | source = "registry+https://github.com/rust-lang/crates.io-index" 2156 | checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" 2157 | dependencies = [ 2158 | "smithay-client-toolkit", 2159 | "wayland-client", 2160 | ] 2161 | 2162 | [[package]] 2163 | name = "socket2" 2164 | version = "0.4.9" 2165 | source = "registry+https://github.com/rust-lang/crates.io-index" 2166 | checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" 2167 | dependencies = [ 2168 | "libc", 2169 | "winapi", 2170 | ] 2171 | 2172 | [[package]] 2173 | name = "static_assertions" 2174 | version = "1.1.0" 2175 | source = "registry+https://github.com/rust-lang/crates.io-index" 2176 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2177 | 2178 | [[package]] 2179 | name = "str-buf" 2180 | version = "1.0.6" 2181 | source = "registry+https://github.com/rust-lang/crates.io-index" 2182 | checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" 2183 | 2184 | [[package]] 2185 | name = "syn" 2186 | version = "1.0.109" 2187 | source = "registry+https://github.com/rust-lang/crates.io-index" 2188 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2189 | dependencies = [ 2190 | "proc-macro2", 2191 | "quote", 2192 | "unicode-ident", 2193 | ] 2194 | 2195 | [[package]] 2196 | name = "syn" 2197 | version = "2.0.16" 2198 | source = "registry+https://github.com/rust-lang/crates.io-index" 2199 | checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" 2200 | dependencies = [ 2201 | "proc-macro2", 2202 | "quote", 2203 | "unicode-ident", 2204 | ] 2205 | 2206 | [[package]] 2207 | name = "syntect" 2208 | version = "5.1.0" 2209 | source = "registry+https://github.com/rust-lang/crates.io-index" 2210 | checksum = "e02b4b303bf8d08bfeb0445cba5068a3d306b6baece1d5582171a9bf49188f91" 2211 | dependencies = [ 2212 | "bincode", 2213 | "bitflags", 2214 | "fancy-regex", 2215 | "flate2", 2216 | "fnv", 2217 | "once_cell", 2218 | "plist", 2219 | "regex-syntax", 2220 | "serde", 2221 | "serde_json", 2222 | "thiserror", 2223 | "walkdir", 2224 | "yaml-rust", 2225 | ] 2226 | 2227 | [[package]] 2228 | name = "tempfile" 2229 | version = "3.5.0" 2230 | source = "registry+https://github.com/rust-lang/crates.io-index" 2231 | checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" 2232 | dependencies = [ 2233 | "cfg-if", 2234 | "fastrand", 2235 | "redox_syscall 0.3.5", 2236 | "rustix", 2237 | "windows-sys 0.45.0", 2238 | ] 2239 | 2240 | [[package]] 2241 | name = "termcolor" 2242 | version = "1.2.0" 2243 | source = "registry+https://github.com/rust-lang/crates.io-index" 2244 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" 2245 | dependencies = [ 2246 | "winapi-util", 2247 | ] 2248 | 2249 | [[package]] 2250 | name = "thiserror" 2251 | version = "1.0.40" 2252 | source = "registry+https://github.com/rust-lang/crates.io-index" 2253 | checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" 2254 | dependencies = [ 2255 | "thiserror-impl", 2256 | ] 2257 | 2258 | [[package]] 2259 | name = "thiserror-impl" 2260 | version = "1.0.40" 2261 | source = "registry+https://github.com/rust-lang/crates.io-index" 2262 | checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" 2263 | dependencies = [ 2264 | "proc-macro2", 2265 | "quote", 2266 | "syn 2.0.16", 2267 | ] 2268 | 2269 | [[package]] 2270 | name = "time" 2271 | version = "0.3.26" 2272 | source = "registry+https://github.com/rust-lang/crates.io-index" 2273 | checksum = "a79d09ac6b08c1ab3906a2f7cc2e81a0e27c7ae89c63812df75e52bef0751e07" 2274 | dependencies = [ 2275 | "deranged", 2276 | "itoa", 2277 | "serde", 2278 | "time-core", 2279 | "time-macros", 2280 | ] 2281 | 2282 | [[package]] 2283 | name = "time-core" 2284 | version = "0.1.1" 2285 | source = "registry+https://github.com/rust-lang/crates.io-index" 2286 | checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" 2287 | 2288 | [[package]] 2289 | name = "time-macros" 2290 | version = "0.2.12" 2291 | source = "registry+https://github.com/rust-lang/crates.io-index" 2292 | checksum = "75c65469ed6b3a4809d987a41eb1dc918e9bc1d92211cbad7ae82931846f7451" 2293 | dependencies = [ 2294 | "time-core", 2295 | ] 2296 | 2297 | [[package]] 2298 | name = "tinyvec" 2299 | version = "1.6.0" 2300 | source = "registry+https://github.com/rust-lang/crates.io-index" 2301 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 2302 | dependencies = [ 2303 | "tinyvec_macros", 2304 | ] 2305 | 2306 | [[package]] 2307 | name = "tinyvec_macros" 2308 | version = "0.1.1" 2309 | source = "registry+https://github.com/rust-lang/crates.io-index" 2310 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2311 | 2312 | [[package]] 2313 | name = "toml_datetime" 2314 | version = "0.6.2" 2315 | source = "registry+https://github.com/rust-lang/crates.io-index" 2316 | checksum = "5a76a9312f5ba4c2dec6b9161fdf25d87ad8a09256ccea5a556fef03c706a10f" 2317 | 2318 | [[package]] 2319 | name = "toml_edit" 2320 | version = "0.19.8" 2321 | source = "registry+https://github.com/rust-lang/crates.io-index" 2322 | checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" 2323 | dependencies = [ 2324 | "indexmap", 2325 | "toml_datetime", 2326 | "winnow", 2327 | ] 2328 | 2329 | [[package]] 2330 | name = "tracing" 2331 | version = "0.1.37" 2332 | source = "registry+https://github.com/rust-lang/crates.io-index" 2333 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" 2334 | dependencies = [ 2335 | "cfg-if", 2336 | "pin-project-lite", 2337 | "tracing-attributes", 2338 | "tracing-core", 2339 | ] 2340 | 2341 | [[package]] 2342 | name = "tracing-attributes" 2343 | version = "0.1.24" 2344 | source = "registry+https://github.com/rust-lang/crates.io-index" 2345 | checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" 2346 | dependencies = [ 2347 | "proc-macro2", 2348 | "quote", 2349 | "syn 2.0.16", 2350 | ] 2351 | 2352 | [[package]] 2353 | name = "tracing-core" 2354 | version = "0.1.31" 2355 | source = "registry+https://github.com/rust-lang/crates.io-index" 2356 | checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" 2357 | dependencies = [ 2358 | "once_cell", 2359 | ] 2360 | 2361 | [[package]] 2362 | name = "ttf-parser" 2363 | version = "0.19.0" 2364 | source = "registry+https://github.com/rust-lang/crates.io-index" 2365 | checksum = "44dcf002ae3b32cd25400d6df128c5babec3927cd1eb7ce813cfff20eb6c3746" 2366 | 2367 | [[package]] 2368 | name = "typenum" 2369 | version = "1.16.0" 2370 | source = "registry+https://github.com/rust-lang/crates.io-index" 2371 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" 2372 | 2373 | [[package]] 2374 | name = "uds_windows" 2375 | version = "1.0.2" 2376 | source = "registry+https://github.com/rust-lang/crates.io-index" 2377 | checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" 2378 | dependencies = [ 2379 | "tempfile", 2380 | "winapi", 2381 | ] 2382 | 2383 | [[package]] 2384 | name = "unicase" 2385 | version = "2.7.0" 2386 | source = "registry+https://github.com/rust-lang/crates.io-index" 2387 | checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" 2388 | dependencies = [ 2389 | "version_check", 2390 | ] 2391 | 2392 | [[package]] 2393 | name = "unicode-bidi" 2394 | version = "0.3.13" 2395 | source = "registry+https://github.com/rust-lang/crates.io-index" 2396 | checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" 2397 | 2398 | [[package]] 2399 | name = "unicode-ident" 2400 | version = "1.0.8" 2401 | source = "registry+https://github.com/rust-lang/crates.io-index" 2402 | checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" 2403 | 2404 | [[package]] 2405 | name = "unicode-normalization" 2406 | version = "0.1.22" 2407 | source = "registry+https://github.com/rust-lang/crates.io-index" 2408 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 2409 | dependencies = [ 2410 | "tinyvec", 2411 | ] 2412 | 2413 | [[package]] 2414 | name = "url" 2415 | version = "2.3.1" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" 2418 | dependencies = [ 2419 | "form_urlencoded", 2420 | "idna", 2421 | "percent-encoding", 2422 | ] 2423 | 2424 | [[package]] 2425 | name = "vec_map" 2426 | version = "0.8.2" 2427 | source = "registry+https://github.com/rust-lang/crates.io-index" 2428 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 2429 | 2430 | [[package]] 2431 | name = "version_check" 2432 | version = "0.9.4" 2433 | source = "registry+https://github.com/rust-lang/crates.io-index" 2434 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 2435 | 2436 | [[package]] 2437 | name = "waker-fn" 2438 | version = "1.1.0" 2439 | source = "registry+https://github.com/rust-lang/crates.io-index" 2440 | checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" 2441 | 2442 | [[package]] 2443 | name = "walkdir" 2444 | version = "2.3.3" 2445 | source = "registry+https://github.com/rust-lang/crates.io-index" 2446 | checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" 2447 | dependencies = [ 2448 | "same-file", 2449 | "winapi-util", 2450 | ] 2451 | 2452 | [[package]] 2453 | name = "wasi" 2454 | version = "0.11.0+wasi-snapshot-preview1" 2455 | source = "registry+https://github.com/rust-lang/crates.io-index" 2456 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2457 | 2458 | [[package]] 2459 | name = "wasm-bindgen" 2460 | version = "0.2.87" 2461 | source = "registry+https://github.com/rust-lang/crates.io-index" 2462 | checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" 2463 | dependencies = [ 2464 | "cfg-if", 2465 | "wasm-bindgen-macro", 2466 | ] 2467 | 2468 | [[package]] 2469 | name = "wasm-bindgen-backend" 2470 | version = "0.2.87" 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" 2472 | checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" 2473 | dependencies = [ 2474 | "bumpalo", 2475 | "log", 2476 | "once_cell", 2477 | "proc-macro2", 2478 | "quote", 2479 | "syn 2.0.16", 2480 | "wasm-bindgen-shared", 2481 | ] 2482 | 2483 | [[package]] 2484 | name = "wasm-bindgen-futures" 2485 | version = "0.4.34" 2486 | source = "registry+https://github.com/rust-lang/crates.io-index" 2487 | checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" 2488 | dependencies = [ 2489 | "cfg-if", 2490 | "js-sys", 2491 | "wasm-bindgen", 2492 | "web-sys", 2493 | ] 2494 | 2495 | [[package]] 2496 | name = "wasm-bindgen-macro" 2497 | version = "0.2.87" 2498 | source = "registry+https://github.com/rust-lang/crates.io-index" 2499 | checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" 2500 | dependencies = [ 2501 | "quote", 2502 | "wasm-bindgen-macro-support", 2503 | ] 2504 | 2505 | [[package]] 2506 | name = "wasm-bindgen-macro-support" 2507 | version = "0.2.87" 2508 | source = "registry+https://github.com/rust-lang/crates.io-index" 2509 | checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" 2510 | dependencies = [ 2511 | "proc-macro2", 2512 | "quote", 2513 | "syn 2.0.16", 2514 | "wasm-bindgen-backend", 2515 | "wasm-bindgen-shared", 2516 | ] 2517 | 2518 | [[package]] 2519 | name = "wasm-bindgen-shared" 2520 | version = "0.2.87" 2521 | source = "registry+https://github.com/rust-lang/crates.io-index" 2522 | checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" 2523 | 2524 | [[package]] 2525 | name = "wayland-client" 2526 | version = "0.29.5" 2527 | source = "registry+https://github.com/rust-lang/crates.io-index" 2528 | checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" 2529 | dependencies = [ 2530 | "bitflags", 2531 | "downcast-rs", 2532 | "libc", 2533 | "nix 0.24.3", 2534 | "scoped-tls", 2535 | "wayland-commons", 2536 | "wayland-scanner", 2537 | "wayland-sys 0.29.5", 2538 | ] 2539 | 2540 | [[package]] 2541 | name = "wayland-commons" 2542 | version = "0.29.5" 2543 | source = "registry+https://github.com/rust-lang/crates.io-index" 2544 | checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" 2545 | dependencies = [ 2546 | "nix 0.24.3", 2547 | "once_cell", 2548 | "smallvec", 2549 | "wayland-sys 0.29.5", 2550 | ] 2551 | 2552 | [[package]] 2553 | name = "wayland-cursor" 2554 | version = "0.29.5" 2555 | source = "registry+https://github.com/rust-lang/crates.io-index" 2556 | checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" 2557 | dependencies = [ 2558 | "nix 0.24.3", 2559 | "wayland-client", 2560 | "xcursor", 2561 | ] 2562 | 2563 | [[package]] 2564 | name = "wayland-protocols" 2565 | version = "0.29.5" 2566 | source = "registry+https://github.com/rust-lang/crates.io-index" 2567 | checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" 2568 | dependencies = [ 2569 | "bitflags", 2570 | "wayland-client", 2571 | "wayland-commons", 2572 | "wayland-scanner", 2573 | ] 2574 | 2575 | [[package]] 2576 | name = "wayland-scanner" 2577 | version = "0.29.5" 2578 | source = "registry+https://github.com/rust-lang/crates.io-index" 2579 | checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" 2580 | dependencies = [ 2581 | "proc-macro2", 2582 | "quote", 2583 | "xml-rs", 2584 | ] 2585 | 2586 | [[package]] 2587 | name = "wayland-sys" 2588 | version = "0.29.5" 2589 | source = "registry+https://github.com/rust-lang/crates.io-index" 2590 | checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" 2591 | dependencies = [ 2592 | "dlib", 2593 | "lazy_static", 2594 | "pkg-config", 2595 | ] 2596 | 2597 | [[package]] 2598 | name = "wayland-sys" 2599 | version = "0.30.1" 2600 | source = "registry+https://github.com/rust-lang/crates.io-index" 2601 | checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06" 2602 | dependencies = [ 2603 | "dlib", 2604 | "lazy_static", 2605 | "log", 2606 | "pkg-config", 2607 | ] 2608 | 2609 | [[package]] 2610 | name = "web-sys" 2611 | version = "0.3.61" 2612 | source = "registry+https://github.com/rust-lang/crates.io-index" 2613 | checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" 2614 | dependencies = [ 2615 | "js-sys", 2616 | "wasm-bindgen", 2617 | ] 2618 | 2619 | [[package]] 2620 | name = "web-time" 2621 | version = "0.2.0" 2622 | source = "registry+https://github.com/rust-lang/crates.io-index" 2623 | checksum = "19353897b48e2c4d849a2d73cb0aeb16dc2be4e00c565abfc11eb65a806e47de" 2624 | dependencies = [ 2625 | "js-sys", 2626 | "once_cell", 2627 | "wasm-bindgen", 2628 | ] 2629 | 2630 | [[package]] 2631 | name = "webbrowser" 2632 | version = "0.8.10" 2633 | source = "registry+https://github.com/rust-lang/crates.io-index" 2634 | checksum = "fd222aa310eb7532e3fd427a5d7db7e44bc0b0cf1c1e21139c345325511a85b6" 2635 | dependencies = [ 2636 | "core-foundation", 2637 | "home", 2638 | "jni", 2639 | "log", 2640 | "ndk-context", 2641 | "objc", 2642 | "raw-window-handle", 2643 | "url", 2644 | "web-sys", 2645 | ] 2646 | 2647 | [[package]] 2648 | name = "winapi" 2649 | version = "0.3.9" 2650 | source = "registry+https://github.com/rust-lang/crates.io-index" 2651 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2652 | dependencies = [ 2653 | "winapi-i686-pc-windows-gnu", 2654 | "winapi-x86_64-pc-windows-gnu", 2655 | ] 2656 | 2657 | [[package]] 2658 | name = "winapi-i686-pc-windows-gnu" 2659 | version = "0.4.0" 2660 | source = "registry+https://github.com/rust-lang/crates.io-index" 2661 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2662 | 2663 | [[package]] 2664 | name = "winapi-util" 2665 | version = "0.1.5" 2666 | source = "registry+https://github.com/rust-lang/crates.io-index" 2667 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 2668 | dependencies = [ 2669 | "winapi", 2670 | ] 2671 | 2672 | [[package]] 2673 | name = "winapi-wsapoll" 2674 | version = "0.1.1" 2675 | source = "registry+https://github.com/rust-lang/crates.io-index" 2676 | checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" 2677 | dependencies = [ 2678 | "winapi", 2679 | ] 2680 | 2681 | [[package]] 2682 | name = "winapi-x86_64-pc-windows-gnu" 2683 | version = "0.4.0" 2684 | source = "registry+https://github.com/rust-lang/crates.io-index" 2685 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2686 | 2687 | [[package]] 2688 | name = "windows" 2689 | version = "0.44.0" 2690 | source = "registry+https://github.com/rust-lang/crates.io-index" 2691 | checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" 2692 | dependencies = [ 2693 | "windows-implement", 2694 | "windows-interface", 2695 | "windows-targets 0.42.2", 2696 | ] 2697 | 2698 | [[package]] 2699 | name = "windows-implement" 2700 | version = "0.44.0" 2701 | source = "registry+https://github.com/rust-lang/crates.io-index" 2702 | checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" 2703 | dependencies = [ 2704 | "proc-macro2", 2705 | "quote", 2706 | "syn 1.0.109", 2707 | ] 2708 | 2709 | [[package]] 2710 | name = "windows-interface" 2711 | version = "0.44.0" 2712 | source = "registry+https://github.com/rust-lang/crates.io-index" 2713 | checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" 2714 | dependencies = [ 2715 | "proc-macro2", 2716 | "quote", 2717 | "syn 1.0.109", 2718 | ] 2719 | 2720 | [[package]] 2721 | name = "windows-sys" 2722 | version = "0.45.0" 2723 | source = "registry+https://github.com/rust-lang/crates.io-index" 2724 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 2725 | dependencies = [ 2726 | "windows-targets 0.42.2", 2727 | ] 2728 | 2729 | [[package]] 2730 | name = "windows-sys" 2731 | version = "0.48.0" 2732 | source = "registry+https://github.com/rust-lang/crates.io-index" 2733 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 2734 | dependencies = [ 2735 | "windows-targets 0.48.0", 2736 | ] 2737 | 2738 | [[package]] 2739 | name = "windows-targets" 2740 | version = "0.42.2" 2741 | source = "registry+https://github.com/rust-lang/crates.io-index" 2742 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 2743 | dependencies = [ 2744 | "windows_aarch64_gnullvm 0.42.2", 2745 | "windows_aarch64_msvc 0.42.2", 2746 | "windows_i686_gnu 0.42.2", 2747 | "windows_i686_msvc 0.42.2", 2748 | "windows_x86_64_gnu 0.42.2", 2749 | "windows_x86_64_gnullvm 0.42.2", 2750 | "windows_x86_64_msvc 0.42.2", 2751 | ] 2752 | 2753 | [[package]] 2754 | name = "windows-targets" 2755 | version = "0.48.0" 2756 | source = "registry+https://github.com/rust-lang/crates.io-index" 2757 | checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" 2758 | dependencies = [ 2759 | "windows_aarch64_gnullvm 0.48.0", 2760 | "windows_aarch64_msvc 0.48.0", 2761 | "windows_i686_gnu 0.48.0", 2762 | "windows_i686_msvc 0.48.0", 2763 | "windows_x86_64_gnu 0.48.0", 2764 | "windows_x86_64_gnullvm 0.48.0", 2765 | "windows_x86_64_msvc 0.48.0", 2766 | ] 2767 | 2768 | [[package]] 2769 | name = "windows_aarch64_gnullvm" 2770 | version = "0.42.2" 2771 | source = "registry+https://github.com/rust-lang/crates.io-index" 2772 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 2773 | 2774 | [[package]] 2775 | name = "windows_aarch64_gnullvm" 2776 | version = "0.48.0" 2777 | source = "registry+https://github.com/rust-lang/crates.io-index" 2778 | checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" 2779 | 2780 | [[package]] 2781 | name = "windows_aarch64_msvc" 2782 | version = "0.42.2" 2783 | source = "registry+https://github.com/rust-lang/crates.io-index" 2784 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 2785 | 2786 | [[package]] 2787 | name = "windows_aarch64_msvc" 2788 | version = "0.48.0" 2789 | source = "registry+https://github.com/rust-lang/crates.io-index" 2790 | checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" 2791 | 2792 | [[package]] 2793 | name = "windows_i686_gnu" 2794 | version = "0.42.2" 2795 | source = "registry+https://github.com/rust-lang/crates.io-index" 2796 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 2797 | 2798 | [[package]] 2799 | name = "windows_i686_gnu" 2800 | version = "0.48.0" 2801 | source = "registry+https://github.com/rust-lang/crates.io-index" 2802 | checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" 2803 | 2804 | [[package]] 2805 | name = "windows_i686_msvc" 2806 | version = "0.42.2" 2807 | source = "registry+https://github.com/rust-lang/crates.io-index" 2808 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 2809 | 2810 | [[package]] 2811 | name = "windows_i686_msvc" 2812 | version = "0.48.0" 2813 | source = "registry+https://github.com/rust-lang/crates.io-index" 2814 | checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" 2815 | 2816 | [[package]] 2817 | name = "windows_x86_64_gnu" 2818 | version = "0.42.2" 2819 | source = "registry+https://github.com/rust-lang/crates.io-index" 2820 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 2821 | 2822 | [[package]] 2823 | name = "windows_x86_64_gnu" 2824 | version = "0.48.0" 2825 | source = "registry+https://github.com/rust-lang/crates.io-index" 2826 | checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" 2827 | 2828 | [[package]] 2829 | name = "windows_x86_64_gnullvm" 2830 | version = "0.42.2" 2831 | source = "registry+https://github.com/rust-lang/crates.io-index" 2832 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 2833 | 2834 | [[package]] 2835 | name = "windows_x86_64_gnullvm" 2836 | version = "0.48.0" 2837 | source = "registry+https://github.com/rust-lang/crates.io-index" 2838 | checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" 2839 | 2840 | [[package]] 2841 | name = "windows_x86_64_msvc" 2842 | version = "0.42.2" 2843 | source = "registry+https://github.com/rust-lang/crates.io-index" 2844 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 2845 | 2846 | [[package]] 2847 | name = "windows_x86_64_msvc" 2848 | version = "0.48.0" 2849 | source = "registry+https://github.com/rust-lang/crates.io-index" 2850 | checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" 2851 | 2852 | [[package]] 2853 | name = "winit" 2854 | version = "0.28.6" 2855 | source = "registry+https://github.com/rust-lang/crates.io-index" 2856 | checksum = "866db3f712fffba75d31bf0cdecf357c8aeafd158c5b7ab51dba2a2b2d47f196" 2857 | dependencies = [ 2858 | "android-activity", 2859 | "bitflags", 2860 | "cfg_aliases", 2861 | "core-foundation", 2862 | "core-graphics", 2863 | "dispatch", 2864 | "instant", 2865 | "libc", 2866 | "log", 2867 | "mio", 2868 | "ndk", 2869 | "objc2", 2870 | "once_cell", 2871 | "orbclient", 2872 | "percent-encoding", 2873 | "raw-window-handle", 2874 | "redox_syscall 0.3.5", 2875 | "smithay-client-toolkit", 2876 | "wasm-bindgen", 2877 | "wayland-client", 2878 | "wayland-commons", 2879 | "wayland-protocols", 2880 | "wayland-scanner", 2881 | "web-sys", 2882 | "windows-sys 0.45.0", 2883 | "x11-dl", 2884 | ] 2885 | 2886 | [[package]] 2887 | name = "winnow" 2888 | version = "0.4.1" 2889 | source = "registry+https://github.com/rust-lang/crates.io-index" 2890 | checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" 2891 | dependencies = [ 2892 | "memchr", 2893 | ] 2894 | 2895 | [[package]] 2896 | name = "x11-dl" 2897 | version = "2.21.0" 2898 | source = "registry+https://github.com/rust-lang/crates.io-index" 2899 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 2900 | dependencies = [ 2901 | "libc", 2902 | "once_cell", 2903 | "pkg-config", 2904 | ] 2905 | 2906 | [[package]] 2907 | name = "x11rb" 2908 | version = "0.10.1" 2909 | source = "registry+https://github.com/rust-lang/crates.io-index" 2910 | checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" 2911 | dependencies = [ 2912 | "gethostname", 2913 | "nix 0.24.3", 2914 | "winapi", 2915 | "winapi-wsapoll", 2916 | "x11rb-protocol", 2917 | ] 2918 | 2919 | [[package]] 2920 | name = "x11rb-protocol" 2921 | version = "0.10.0" 2922 | source = "registry+https://github.com/rust-lang/crates.io-index" 2923 | checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" 2924 | dependencies = [ 2925 | "nix 0.24.3", 2926 | ] 2927 | 2928 | [[package]] 2929 | name = "xcursor" 2930 | version = "0.3.4" 2931 | source = "registry+https://github.com/rust-lang/crates.io-index" 2932 | checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" 2933 | dependencies = [ 2934 | "nom", 2935 | ] 2936 | 2937 | [[package]] 2938 | name = "xdg-home" 2939 | version = "1.0.0" 2940 | source = "registry+https://github.com/rust-lang/crates.io-index" 2941 | checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" 2942 | dependencies = [ 2943 | "nix 0.26.2", 2944 | "winapi", 2945 | ] 2946 | 2947 | [[package]] 2948 | name = "xml-rs" 2949 | version = "0.8.13" 2950 | source = "registry+https://github.com/rust-lang/crates.io-index" 2951 | checksum = "2d8f380ae16a37b30e6a2cf67040608071384b1450c189e61bea3ff57cde922d" 2952 | 2953 | [[package]] 2954 | name = "yaml-rust" 2955 | version = "0.4.5" 2956 | source = "registry+https://github.com/rust-lang/crates.io-index" 2957 | checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 2958 | dependencies = [ 2959 | "linked-hash-map", 2960 | ] 2961 | 2962 | [[package]] 2963 | name = "zbus" 2964 | version = "3.13.1" 2965 | source = "registry+https://github.com/rust-lang/crates.io-index" 2966 | checksum = "6c3d77c9966c28321f1907f0b6c5a5561189d1f7311eea6d94180c6be9daab29" 2967 | dependencies = [ 2968 | "async-broadcast", 2969 | "async-executor", 2970 | "async-fs", 2971 | "async-io", 2972 | "async-lock", 2973 | "async-process", 2974 | "async-recursion", 2975 | "async-task", 2976 | "async-trait", 2977 | "byteorder", 2978 | "derivative", 2979 | "enumflags2", 2980 | "event-listener", 2981 | "futures-core", 2982 | "futures-sink", 2983 | "futures-util", 2984 | "hex", 2985 | "nix 0.26.2", 2986 | "once_cell", 2987 | "ordered-stream", 2988 | "rand", 2989 | "serde", 2990 | "serde_repr", 2991 | "sha1", 2992 | "static_assertions", 2993 | "tracing", 2994 | "uds_windows", 2995 | "winapi", 2996 | "xdg-home", 2997 | "zbus_macros", 2998 | "zbus_names", 2999 | "zvariant", 3000 | ] 3001 | 3002 | [[package]] 3003 | name = "zbus_macros" 3004 | version = "3.13.1" 3005 | source = "registry+https://github.com/rust-lang/crates.io-index" 3006 | checksum = "f6e341d12edaff644e539ccbbf7f161601294c9a84ed3d7e015da33155b435af" 3007 | dependencies = [ 3008 | "proc-macro-crate", 3009 | "proc-macro2", 3010 | "quote", 3011 | "regex", 3012 | "syn 1.0.109", 3013 | "winnow", 3014 | "zvariant_utils", 3015 | ] 3016 | 3017 | [[package]] 3018 | name = "zbus_names" 3019 | version = "2.5.1" 3020 | source = "registry+https://github.com/rust-lang/crates.io-index" 3021 | checksum = "82441e6033be0a741157a72951a3e4957d519698f3a824439cc131c5ba77ac2a" 3022 | dependencies = [ 3023 | "serde", 3024 | "static_assertions", 3025 | "zvariant", 3026 | ] 3027 | 3028 | [[package]] 3029 | name = "zvariant" 3030 | version = "3.14.0" 3031 | source = "registry+https://github.com/rust-lang/crates.io-index" 3032 | checksum = "622cc473f10cef1b0d73b7b34a266be30ebdcfaea40ec297dd8cbda088f9f93c" 3033 | dependencies = [ 3034 | "byteorder", 3035 | "enumflags2", 3036 | "libc", 3037 | "serde", 3038 | "static_assertions", 3039 | "zvariant_derive", 3040 | ] 3041 | 3042 | [[package]] 3043 | name = "zvariant_derive" 3044 | version = "3.14.0" 3045 | source = "registry+https://github.com/rust-lang/crates.io-index" 3046 | checksum = "5d9c1b57352c25b778257c661f3c4744b7cefb7fc09dd46909a153cce7773da2" 3047 | dependencies = [ 3048 | "proc-macro-crate", 3049 | "proc-macro2", 3050 | "quote", 3051 | "syn 1.0.109", 3052 | "zvariant_utils", 3053 | ] 3054 | 3055 | [[package]] 3056 | name = "zvariant_utils" 3057 | version = "1.0.1" 3058 | source = "registry+https://github.com/rust-lang/crates.io-index" 3059 | checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" 3060 | dependencies = [ 3061 | "proc-macro2", 3062 | "quote", 3063 | "syn 1.0.109", 3064 | ] 3065 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "egui_presentation" 3 | version = "0.1.0" 4 | authors = ["Emil Ernerfeldt "] 5 | edition = "2021" 6 | rust-version = "1.65" 7 | 8 | 9 | [dependencies] 10 | egui = "0.22.0" 11 | egui_extras = { version = "0.22.0", features = ["image"] } 12 | eframe = { version = "0.22.0", default-features = false, features = [ 13 | "accesskit", # Make egui comptaible with screen readers. NOTE: adds a lot of dependencies. 14 | "default_fonts", # Embed the default egui fonts. 15 | "glow", # Use the glow rendering backend. Alternative: "wgpu". 16 | "persistence", # Enable restoring app state when restarting the app. 17 | ] } 18 | egui_commonmark = { version = "0.7", features = ["syntax_highlighting"] } 19 | env_logger = "0.10" 20 | itertools = "0.11" 21 | image = { version = "0.24", default-features = false, features = ["png"] } 22 | log = "0.4" 23 | serde = { version = "1", features = ["derive"] } 24 | 25 | # native: 26 | [target.'cfg(not(target_arch = "wasm32"))'.dependencies] 27 | env_logger = "0.10" 28 | 29 | # web: 30 | [target.'cfg(target_arch = "wasm32")'.dependencies] 31 | wasm-bindgen-futures = "0.4" 32 | 33 | 34 | [profile.release] 35 | opt-level = 2 # fast and small wasm 36 | 37 | # Optimize all dependencies even in debug builds: 38 | [profile.dev.package."*"] 39 | opt-level = 2 40 | 41 | 42 | [patch.crates-io] 43 | 44 | # If you want to use the bleeding edge version of egui and eframe: 45 | egui = { git = "https://github.com/emilk/egui", rev = "67a3fcae383044def7450b311ddc1f79e36eaae0" } 46 | egui_extras = { git = "https://github.com/emilk/egui", rev = "67a3fcae383044def7450b311ddc1f79e36eaae0" } 47 | eframe = { git = "https://github.com/emilk/egui", rev = "67a3fcae383044def7450b311ddc1f79e36eaae0" } 48 | egui_commonmark = { git = "https://github.com/lampsitter/egui_commonmark.git", rev = "7ae829780a450fa55c2bf4582d491527e070acf4" } 49 | 50 | # If you fork https://github.com/emilk/egui you can test with: 51 | # egui = { path = "../egui/crates/egui" } 52 | # eframe = { path = "../egui/crates/eframe" } 53 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # egui presentation 2 | 3 | A presentation about [egui](https://github.com/emilk/egui), implemented in egui. 4 | 5 | You can view the presentation at . 6 | 7 | ## TODO 8 | * [ ] Live-reloading of `slides.md` 9 | 10 | ### Running it 11 | 12 | `cargo run --release` 13 | 14 | ### Running the web version 15 | * `rustup target add wasm32-unknown-unknown` 16 | * `cargo install --locked trunk` 17 | * `trunk serve` 18 | * open `http://127.0.0.1:8080/index.html#dev` 19 | 20 | ### Web Deploy 21 | Should deploy automatically by the CI action. 22 | -------------------------------------------------------------------------------- /Trunk.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | -------------------------------------------------------------------------------- /assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emilk/egui_presentation/69b4355268b4b0a8d5c603e854c857296ab52bb5/assets/favicon.ico -------------------------------------------------------------------------------- /assets/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emilk/egui_presentation/69b4355268b4b0a8d5c603e854c857296ab52bb5/assets/icon-1024.png -------------------------------------------------------------------------------- /assets/icon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emilk/egui_presentation/69b4355268b4b0a8d5c603e854c857296ab52bb5/assets/icon-256.png -------------------------------------------------------------------------------- /assets/icon_ios_touch_192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emilk/egui_presentation/69b4355268b4b0a8d5c603e854c857296ab52bb5/assets/icon_ios_touch_192.png -------------------------------------------------------------------------------- /assets/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "egui Template PWA", 3 | "short_name": "egui-template-pwa", 4 | "icons": [ 5 | { 6 | "src": "./icon-256.png", 7 | "sizes": "256x256", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "./maskable_icon_x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png", 14 | "purpose": "any maskable" 15 | }, 16 | { 17 | "src": "./icon-1024.png", 18 | "sizes": "1024x1024", 19 | "type": "image/png" 20 | } 21 | ], 22 | "lang": "en-US", 23 | "id": "/index.html", 24 | "start_url": "./index.html", 25 | "display": "standalone", 26 | "background_color": "white", 27 | "theme_color": "white" 28 | } 29 | -------------------------------------------------------------------------------- /assets/maskable_icon_x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emilk/egui_presentation/69b4355268b4b0a8d5c603e854c857296ab52bb5/assets/maskable_icon_x512.png -------------------------------------------------------------------------------- /assets/sw.js: -------------------------------------------------------------------------------- 1 | var cacheName = 'egui-template-pwa'; 2 | var filesToCache = [ 3 | './', 4 | './index.html', 5 | './egui_presentation.js', 6 | './egui_presentation_bg.wasm', 7 | ]; 8 | 9 | /* Start the service worker and cache all of the app's content */ 10 | self.addEventListener('install', function (e) { 11 | e.waitUntil( 12 | caches.open(cacheName).then(function (cache) { 13 | return cache.addAll(filesToCache); 14 | }) 15 | ); 16 | }); 17 | 18 | /* Serve cached content when offline */ 19 | self.addEventListener('fetch', function (e) { 20 | e.respondWith( 21 | caches.match(e.request).then(function (response) { 22 | return response || fetch(e.request); 23 | }) 24 | ); 25 | }); 26 | -------------------------------------------------------------------------------- /check.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # This scripts runs various CI-like checks in a convenient way. 3 | set -eux 4 | 5 | cargo check --workspace --all-targets 6 | cargo check --workspace --all-features --lib --target wasm32-unknown-unknown 7 | cargo fmt --all -- --check 8 | cargo clippy --workspace --all-targets --all-features -- -D warnings -W clippy::all 9 | cargo test --workspace --all-targets --all-features 10 | cargo test --workspace --doc 11 | trunk build 12 | -------------------------------------------------------------------------------- /images/crates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emilk/egui_presentation/69b4355268b4b0a8d5c603e854c857296ab52bb5/images/crates.png -------------------------------------------------------------------------------- /images/integrations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emilk/egui_presentation/69b4355268b4b0a8d5c603e854c857296ab52bb5/images/integrations.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | egui presentation 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 135 | 136 | 137 | 138 | 139 | 140 | -------------------------------------------------------------------------------- /rust-toolchain: -------------------------------------------------------------------------------- 1 | # If you see this, run "rustup self update" to get rustup 1.23 or newer. 2 | 3 | # NOTE: above comment is for older `rustup` (before TOML support was added), 4 | # which will treat the first line as the toolchain name, and therefore show it 5 | # to the user in the error, instead of "error: invalid channel name '[toolchain]'". 6 | 7 | [toolchain] 8 | channel = "1.71.1" 9 | components = [ "rustfmt", "clippy" ] 10 | targets = [ "wasm32-unknown-unknown" ] 11 | -------------------------------------------------------------------------------- /slides.md: -------------------------------------------------------------------------------- 1 | # egui 2 | [www.egui.rs](www.egui.rs) 3 | 4 | An easy-to-use immediate mode GUI in Rust that runs on both web and native. 5 | 6 | The most popular pure Rust GUI library by downloads on [crates.io](https://crates.io/search?q=gui&sort=downloads) (second only to GTK). 7 | 8 | Limited accessibility support via [accesskit](https://crates.io/crates/accesskit). 9 | 10 | ------------------------------------------------------------------------------- 11 | 12 | # This presentation 13 | * What is it? 14 | * How does it work? 15 | * How is it integrated? 16 | 17 | ------------------------------------------------------------------------------- 18 | 19 | # Integrations 20 | ## Official 21 | * `eframe` 22 | * `egui_glow` 23 | * `egui-wgpu` 24 | * `egui-winit` 25 | 26 | ## 3rd party 27 | ![integrations](bytes://integrations.png) 28 | 29 | ------------------------------------------------------------------------------- 30 | 31 | # History 32 | Wrote the first piece of code in 2018, but started seriously during 2020 pandemic. 33 | 34 | Heavily inspired by [Dear ImGui](https://github.com/ocornut/imgui), my favorite GUI library for C++. 35 | 36 | Not my first GUI, but my first immediate mode one and my first in Rust. 37 | 38 | ------------------------------------------------------------------------------- 39 | 40 | # Crates 41 | ![crates](bytes://crates.png) 42 | 43 | ------------------------------------------------------------------------------- 44 | 45 | # Immediate mode 46 | 20 year old GUI paradigm from game dev 47 | 48 | ``` rs 49 | if ui.button("-").clicked() { 50 | counter -= 1; 51 | } 52 | 53 | ui.label(counter.to_string()); 54 | 55 | if ui.button("+").clicked() { 56 | counter += 1; 57 | } 58 | ``` 59 | 60 | !!!counter_example 61 | 62 | ------------------------------------------------------------------------------- 63 | 64 | # Context 65 | 66 | How to write your own egui integration: 67 | ```rs 68 | let mut ctx = egui::Context::default(); 69 | 70 | // Game loop: 71 | loop { 72 | // Gather keyboard/mouse events: 73 | let raw_input = window.collect_input(); 74 | 75 | // Run egui: 76 | let output = ctx.run(raw_input, |ctx| { 77 | egui::CentralPanel::default().show(&ctx, |ui| { 78 | ui.label("Hello world!"); 79 | if ui.button("Click me").clicked() { 80 | // take some action here 81 | } 82 | }); 83 | }); 84 | 85 | // Set cursor icon, set clipboard, open url, … 86 | window.handle_platform_output(output.platform_output); 87 | 88 | let triangles = ctx.tessellate(output.shapes); 89 | window.paint(output.textures_delta, triangles); 90 | } 91 | ``` 92 | 93 | ------------------------------------------------------------------------------- 94 | 95 | # Input 96 | ``` rs 97 | pub struct RawInput { 98 | pub time: Option, 99 | pub events: Vec, 100 | pub modifiers: Modifies, 101 | // … 102 | } 103 | 104 | pub enum Event { 105 | Copy, 106 | Cut, 107 | Paste(String), 108 | Text(String), 109 | Key { … }, 110 | PointerMoved(Pos2), 111 | PointerButton { … }, 112 | … 113 | } 114 | ``` 115 | 116 | ------------------------------------------------------------------------------- 117 | 118 | # Ui 119 | A hierarchial region of the screen with a layout where you can put widgets. 120 | 121 | ``` rs 122 | fn show_some_text(ui: &mut egui::Ui) { 123 | ui.label("Some text"); 124 | ui.horizontal(|ui| { 125 | ui.label("More"); 126 | ui.label("text"); 127 | }); 128 | ui.label("Even more text"); 129 | } 130 | ``` 131 | 132 | !!!ui_example 133 | 134 | ------------------------------------------------------------------------------- 135 | 136 | # Scopes 137 | 138 | * Different layouts 139 | * Containers widgets (`ScrollArea`, `Window`, …) 140 | * Scopes with different styling 141 | * … 142 | 143 | ``` rs 144 | // Error prone: 145 | ui.push_horizontal(); 146 | ui.label("More"); 147 | ui.label("text"); 148 | ui.pop_horizontal(); 149 | ``` 150 | 151 | ``` rs 152 | // I wish: 153 | with ui = ui.horizontal() { 154 | ui.label("More"); 155 | ui.label("text"); 156 | } 157 | ``` 158 | 159 | ``` rs 160 | // Ugly `Drop` hack? Requires lifetime on `Ui` :/ 161 | { 162 | let ui = ui.horizontal() 163 | ui.label("More"); 164 | ui.label("text"); 165 | } 166 | ``` 167 | 168 | ``` rs 169 | // Solution: closuers 170 | ui.horizontal(|ui| { 171 | ui.label("More"); 172 | ui.label("text"); 173 | }); 174 | ``` 175 | 176 | 177 | ------------------------------------------------------------------------------- 178 | 179 | # Layout 180 | 181 | | | | 182 | |-----------|--------------------------------------------------| 183 | | Min Rect | Bounding rect of all widgets so far | 184 | | Max Rect | Try to keep within these bounds (wrap width) | 185 | | Direction | Down, Up, Left-to-Right, Right-to-Left | 186 | | Cursor | Where to place the next widget | 187 | 188 | ------------------------------------------------------------------------------- 189 | 190 | # Response 191 | Returned from by widget. Has a `Rect`, a `Context` and interaction flags. 192 | 193 | ``` rs 194 | if ui 195 | .button("Save") 196 | .on_hover_text("Click to save document") 197 | .clicked() 198 | { 199 | save(); 200 | } 201 | 202 | if ui.add(egui::Slider::new(&mut volume, 0.0..=100.0)).changed() { 203 | set_volume(volume); 204 | } 205 | ``` 206 | 207 | ------------------------------------------------------------------------------- 208 | 209 | # Writing a widget 210 | 211 | ``` rs 212 | fn toggle_widget(ui: &mut Ui, on: &mut bool) -> Response { 213 | let desired_size = ui.spacing().interact_size.y * vec2(2.0, 1.0); 214 | let (rect, mut response) = ui.allocate_exact_size(desired_size, Sense::click()); 215 | if response.clicked() { 216 | *on = !*on; 217 | response.mark_changed(); 218 | } 219 | response.widget_info(|| WidgetInfo::selected(WidgetType::Checkbox, *on, "")); 220 | 221 | if ui.is_rect_visible(rect) { 222 | let how_on = ui.ctx().animate_bool(response.id, *on); 223 | let visuals = ui.style().interact_selectable(&response, *on); 224 | let rect = rect.expand(visuals.expansion); 225 | let radius = 0.5 * rect.height(); 226 | ui.painter() 227 | .rect(rect, radius, visuals.bg_fill, visuals.bg_stroke); 228 | let circle_x = lerp((rect.left() + radius)..=(rect.right() - radius), how_on); 229 | let center = pos2(circle_x, rect.center().y); 230 | ui.painter() 231 | .circle(center, 0.75 * radius, visuals.bg_fill, visuals.fg_stroke); 232 | } 233 | 234 | response 235 | } 236 | ``` 237 | 238 | ``` rs 239 | toggle_widget(ui, &mut some_bool); 240 | ``` 241 | 242 | !!!toggle_widget 243 | 244 | ------------------------------------------------------------------------------- 245 | 246 | # Widgets 247 | 248 | ```rs 249 | ui.add(egui::Label::new("Hello")); 250 | 251 | egui::Label::new("Hello").ui(ui); 252 | 253 | ui.label("Hello"); 254 | ``` 255 | 256 | 257 | ``` rs 258 | pub trait Widget { 259 | fn ui(self, ui: &mut Ui) -> Response; 260 | } 261 | ``` 262 | 263 | ------------------------------------------------------------------------------- 264 | 265 | # Builder pattern 266 | 267 | ```rs 268 | ui.add( 269 | Slider::new(&mut volume, 0.0..=120.0) 270 | .logarithmic(true) 271 | .suffix("dB") 272 | ); 273 | ``` 274 | 275 | ``` rs 276 | // I wish :( 277 | ui.slider(&mut volume, 0.0..=120.0, logarithmic=true, suffix="dB"); 278 | ``` 279 | 280 | ------------------------------------------------------------------------------- 281 | 282 | # FullOutput 283 | 284 | ``` rs 285 | pub struct FullOutput { 286 | /// Non-rendering related output. 287 | pub platform_output: PlatformOutput, 288 | 289 | /// If `Duration::is_zero()`, egui is requesting immediate repaint (i.e. on the next frame). 290 | pub repaint_after: std::time::Duration, 291 | 292 | /// Texture changes since last frame (including the font texture). 293 | pub textures_delta: epaint::textures::TexturesDelta, 294 | 295 | /// What to paint. 296 | pub shapes: Vec, 297 | } 298 | 299 | ``` 300 | 301 | ------------------------------------------------------------------------------- 302 | 303 | # PlatformOutput 304 | 305 | ``` rs 306 | pub struct PlatformOutput { 307 | /// Set the cursor to this icon. 308 | pub cursor_icon: CursorIcon, 309 | 310 | /// If set, open this url. 311 | pub open_url: Option, 312 | 313 | /// If set, put this text in the system clipboard. Ignore if empty. 314 | pub copied_text: String, 315 | 316 | // … 317 | } 318 | 319 | ``` 320 | 321 | ------------------------------------------------------------------------------- 322 | 323 | # Painting 324 | 325 | `Shape` ➡ tesslator ➡ `Mesh` 326 | 327 | Uses feathering for anti-aliasing 328 | 329 | `ab_glyph` ➡ font image 330 | 331 | ``` rs 332 | pub enum Shape { 333 | Circle(CircleShape), 334 | Text(TextShape), 335 | … 336 | 337 | /// Backend-specific painting. 338 | Callback(PaintCallback), 339 | } 340 | 341 | pub struct CircleShape { 342 | pub center: Pos2, 343 | pub radius: f32, 344 | pub fill: Color32, 345 | pub stroke: Stroke, 346 | } 347 | 348 | pub struct Stroke { 349 | pub width: f32, 350 | pub color: Color32, 351 | } 352 | ``` 353 | 354 | ------------------------------------------------------------------------------- 355 | 356 | # Id problem 357 | 358 | Need a consistent id for widgets for: 359 | * Interaction (is this widget being dragged?) 360 | * Storing state (what is the scroll offset in this `ScrollArea`?) 361 | 362 | Consider: 363 | 364 | ``` rs 365 | // How will egui keep track which is being dragged? 366 | ui.add(Slider::new(&mut x, 0.0..=1.0)); 367 | ui.add(Slider::new(&mut y, 0.0..=1.0)); 368 | ``` 369 | 370 | Manual ids? Annoying and error-prone :( 371 | 372 | ``` rs 373 | ui.add(Slider::new("x-slider", &mut x, 0.0..=1.0)); 374 | ui.add(Slider::new("y-slider", &mut x, 0.0..=1.0)); 375 | ``` 376 | 377 | Automatic ids? 378 | 379 | ``` rs 380 | ui.add(Slider::new(&mut x, 0.0..=1.0)); 381 | 382 | if foo { 383 | // !! Automatic ids will change depending on if this branch is taken! 384 | ui.label("Blah blah"); 385 | } 386 | 387 | ui.add(Slider::new(&mut x, 0.0..=1.0)); 388 | ``` 389 | 390 | ------------------------------------------------------------------------------- 391 | 392 | # Id solution 393 | A hybrid! 394 | 395 | * Hirerarchial using `Ui` 396 | * Automatic ids for widgets that don't store state (buttons, sliders, …) 397 | * Explicit id sources for widgets that store state (collapsing header, scroll areas, … 398 | 399 | Implemented as a hash of parent `Ui::id` and the id source (e.g. a string). 400 | 401 | ``` rs 402 | pub struct Id(u64); 403 | ``` 404 | 405 | ------------------------------------------------------------------------------- 406 | # Id clashes 407 | 408 | Print warnings on `Id` clashes. 409 | 410 | ``` rs 411 | ui.label("Ok, different names:"); 412 | ui.collapsing("First header", |ui| { 413 | ui.label("Contents of first foldable ui"); 414 | }); 415 | ui.collapsing("Second header", |ui| { 416 | ui.label("Contents of second foldable ui"); 417 | }); 418 | 419 | ui.add_space(16.0); 420 | 421 | ui.label("Oh-no, same name = same id source:"); 422 | ui.collapsing("Collapsing header", |ui| { 423 | ui.label("Contents of first foldable ui"); 424 | }); 425 | ui.collapsing("Collapsing header", |ui| { 426 | ui.label("Contents of second foldable ui"); 427 | }); 428 | ``` 429 | 430 | !!!id_clashes 431 | 432 | 433 | ------------------------------------------------------------------------------- 434 | 435 | # eframe 436 | The official egui framework 437 | 438 | * Windows, Mac, Linux, Android, iOS, Web 439 | * `winit` on native 440 | * `js-sys` on web 441 | * Renders using either `glow` (OpenGL) or `wgpu` 442 | 443 | ------------------------------------------------------------------------------- 444 | 445 | # Summary 446 | Strengths 447 | * Easy to use 448 | * Very little code 449 | * Runs anywhere 450 | 451 | Shortcomings 452 | * [Immediate mode limitations](https://github.com/emilk/egui#why-immediate-mode) 453 | * But surprisingly small problem in practice!? 454 | * Styling 455 | * Composition 456 | * Embedding in other languages 457 | 458 | ------------------------------------------------------------------------------- 459 | 460 | # Q&A 461 | Thank you! 462 | 463 | Questions? 464 | -------------------------------------------------------------------------------- /src/app.rs: -------------------------------------------------------------------------------- 1 | use eframe::egui; 2 | use egui_commonmark::{CommonMarkCache, CommonMarkViewer}; 3 | 4 | enum SlideMarker { 5 | CounterExample, 6 | 7 | UiExample, 8 | 9 | ToggleWidget, 10 | 11 | IdClashesExample, 12 | 13 | UnknownMarker(String), 14 | } 15 | 16 | struct Slide { 17 | title: String, 18 | 19 | markdown: String, 20 | 21 | /// Special slide id 22 | markers: Vec, 23 | } 24 | 25 | impl Slide { 26 | pub fn new(text: &str) -> Self { 27 | use itertools::Itertools as _; 28 | 29 | let mut markers = vec![]; 30 | 31 | let markdown = text 32 | .trim() 33 | .lines() 34 | .filter(|line| { 35 | if let Some(marker_str) = line.strip_prefix("!!!") { 36 | let marker = match marker_str.trim() { 37 | "counter_example" => SlideMarker::CounterExample, 38 | "ui_example" => SlideMarker::UiExample, 39 | "toggle_widget" => SlideMarker::ToggleWidget, 40 | "id_clashes" => SlideMarker::IdClashesExample, 41 | _ => { 42 | log::warn!("Unknown slide marker: {marker_str:?}"); 43 | SlideMarker::UnknownMarker(marker_str.to_owned()) 44 | } 45 | }; 46 | markers.push(marker); 47 | false 48 | } else { 49 | true 50 | } 51 | }) 52 | .join("\n"); 53 | 54 | let title = if let Some(trailing) = markdown.strip_prefix("# ") { 55 | let newline = trailing.find('\n').unwrap_or(trailing.len()); 56 | trailing[..newline].trim() 57 | } else { 58 | log::warn!("Unknown title for slide: {:?}", markdown); 59 | "???" 60 | }; 61 | 62 | Self { 63 | title: title.to_owned(), 64 | markdown: markdown.to_owned(), 65 | markers, 66 | } 67 | } 68 | } 69 | 70 | #[derive(serde::Serialize, serde::Deserialize)] 71 | #[serde(default)] 72 | pub struct Presentation { 73 | #[serde(skip)] 74 | cm_cache: CommonMarkCache, 75 | 76 | #[serde(skip)] 77 | slides: Vec, 78 | 79 | slide_nr: usize, 80 | 81 | // For examples: 82 | counter: i32, 83 | some_bool: bool, 84 | } 85 | 86 | impl eframe::App for Presentation { 87 | fn save(&mut self, storage: &mut dyn eframe::Storage) { 88 | eframe::set_value(storage, eframe::APP_KEY, self); 89 | } 90 | 91 | fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) { 92 | if !frame.is_web() { 93 | egui::gui_zoom::zoom_with_keyboard_shortcuts(ctx, frame.info().native_pixels_per_point); 94 | } 95 | 96 | egui::CentralPanel::default().show(ctx, |ui| { 97 | self.ui(ui); 98 | }); 99 | } 100 | 101 | fn persist_native_window(&self) -> bool { 102 | false 103 | } 104 | } 105 | 106 | impl Default for Presentation { 107 | fn default() -> Self { 108 | let slides = include_str!("../slides.md"); 109 | let slides = slides.split("\n-------------------------------------------------------------------------------\n").map(Slide::new).collect::>(); 110 | 111 | Self { 112 | cm_cache: Default::default(), 113 | slides, 114 | slide_nr: 0, 115 | counter: 0, 116 | some_bool: false, 117 | } 118 | } 119 | } 120 | 121 | impl Presentation { 122 | pub fn new(cc: &eframe::CreationContext<'_>) -> Self { 123 | cc.egui_ctx 124 | .include_bytes("bytes://crates.png", include_bytes!("../images/crates.png")); 125 | cc.egui_ctx.include_bytes( 126 | "bytes://integrations.png", 127 | include_bytes!("../images/integrations.png"), 128 | ); 129 | 130 | cc.egui_ctx.set_pixels_per_point( 131 | cc.integration_info.native_pixels_per_point.unwrap_or(1.0) * 1.75, 132 | ); 133 | 134 | if let Some(storage) = cc.storage { 135 | return eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default(); 136 | } 137 | 138 | Self::default() 139 | } 140 | 141 | pub fn ui(&mut self, ui: &mut egui::Ui) { 142 | let Self { 143 | cm_cache, 144 | slides, 145 | slide_nr, 146 | 147 | counter, 148 | some_bool, 149 | } = self; 150 | 151 | ui.input(|i| { 152 | if i.key_pressed(egui::Key::ArrowRight) || i.key_pressed(egui::Key::Space) { 153 | *slide_nr = (*slide_nr + 1) % slides.len(); 154 | } 155 | if i.key_pressed(egui::Key::ArrowLeft) { 156 | *slide_nr = (*slide_nr + slides.len() - 1) % slides.len(); 157 | } 158 | }); 159 | 160 | let mut preview_slide_nr = *slide_nr; 161 | 162 | ui.allocate_ui_with_layout( 163 | egui::vec2(ui.available_width(), 20.0), 164 | egui::Layout::right_to_left(egui::Align::Center), 165 | |ui| { 166 | let text = format!("{}/{}", *slide_nr + 1, slides.len()); 167 | let text = egui::RichText::new(text).weak(); 168 | ui.menu_button(text, |ui| { 169 | for (i, slide) in slides.iter().enumerate() { 170 | let response = ui.selectable_value(slide_nr, i, &slide.title); 171 | if response.hovered() { 172 | preview_slide_nr = i; 173 | } 174 | if response.clicked() { 175 | ui.close_menu(); 176 | } 177 | } 178 | }); 179 | }, 180 | ); 181 | 182 | let slide = &slides[preview_slide_nr]; 183 | let Slide { 184 | title: _, 185 | markdown, 186 | markers, 187 | } = slide; 188 | 189 | egui::ScrollArea::vertical() 190 | .auto_shrink([false, false]) 191 | .show(ui, |ui| { 192 | CommonMarkViewer::new("viewer") 193 | .max_image_width(Some(ui.available_width().floor() as _)) 194 | .show(ui, cm_cache, markdown); 195 | 196 | for marker in markers { 197 | ui.separator(); 198 | slider_marker_ui(ui, marker, counter, some_bool); 199 | } 200 | }); 201 | } 202 | } 203 | 204 | fn slider_marker_ui( 205 | ui: &mut egui::Ui, 206 | marker: &SlideMarker, 207 | counter: &mut i32, 208 | some_bool: &mut bool, 209 | ) { 210 | match marker { 211 | SlideMarker::CounterExample => { 212 | ui.horizontal(|ui| { 213 | if ui.button("-").clicked() { 214 | *counter -= 1; 215 | } 216 | 217 | ui.label(counter.to_string()); 218 | 219 | if ui.button("+").clicked() { 220 | *counter += 1; 221 | } 222 | }); 223 | } 224 | 225 | SlideMarker::UiExample => { 226 | ui.label("Some text"); 227 | ui.horizontal(|ui| { 228 | ui.label("More"); 229 | ui.label("text"); 230 | }); 231 | ui.label("Even more text"); 232 | } 233 | 234 | SlideMarker::ToggleWidget => { 235 | toggle_widget(ui, some_bool); 236 | } 237 | 238 | SlideMarker::IdClashesExample => { 239 | ui.label("Ok, different names:"); 240 | ui.collapsing("First header", |ui| { 241 | ui.label("Contents of first foldable ui"); 242 | }); 243 | ui.collapsing("Second header", |ui| { 244 | ui.label("Contents of second foldable ui"); 245 | }); 246 | 247 | ui.add_space(16.0); 248 | 249 | ui.label("Oh-no, same name = same id source:"); 250 | ui.collapsing("Collapsing header", |ui| { 251 | ui.label("Contents of first foldable ui"); 252 | }); 253 | ui.collapsing("Collapsing header", |ui| { 254 | ui.label("Contents of second foldable ui"); 255 | }); 256 | } 257 | 258 | SlideMarker::UnknownMarker(marker) => { 259 | ui.label( 260 | egui::RichText::new(format!("⚠ Unknown slider marker: {marker:?} ⚠")) 261 | .color(ui.visuals().warn_fg_color), 262 | ); 263 | } 264 | } 265 | } 266 | 267 | fn toggle_widget(ui: &mut egui::Ui, on: &mut bool) -> egui::Response { 268 | let desired_size = ui.spacing().interact_size.y * egui::vec2(2.0, 1.0); 269 | let (rect, mut response) = ui.allocate_exact_size(desired_size, egui::Sense::click()); 270 | if response.clicked() { 271 | *on = !*on; 272 | response.mark_changed(); 273 | } 274 | response.widget_info(|| egui::WidgetInfo::selected(egui::WidgetType::Checkbox, *on, "")); 275 | 276 | if ui.is_rect_visible(rect) { 277 | let how_on = ui.ctx().animate_bool(response.id, *on); 278 | let visuals = ui.style().interact_selectable(&response, *on); 279 | let rect = rect.expand(visuals.expansion); 280 | let radius = 0.5 * rect.height(); 281 | ui.painter() 282 | .rect(rect, radius, visuals.bg_fill, visuals.bg_stroke); 283 | let circle_x = egui::lerp((rect.left() + radius)..=(rect.right() - radius), how_on); 284 | let center = egui::pos2(circle_x, rect.center().y); 285 | ui.painter() 286 | .circle(center, 0.75 * radius, visuals.bg_fill, visuals.fg_stroke); 287 | } 288 | 289 | response 290 | } 291 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![warn(clippy::all, rust_2018_idioms)] 2 | 3 | mod app; 4 | pub use app::Presentation; 5 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![warn(clippy::all, rust_2018_idioms)] 2 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release 3 | 4 | // When compiling natively: 5 | #[cfg(not(target_arch = "wasm32"))] 6 | fn main() -> eframe::Result<()> { 7 | env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). 8 | 9 | let native_options = eframe::NativeOptions { 10 | initial_window_size: Some(egui::Vec2::new(1400.0, 1200.0)), 11 | ..Default::default() 12 | }; 13 | eframe::run_native( 14 | "egui presentation", 15 | native_options, 16 | Box::new(|cc| Box::new(egui_presentation::Presentation::new(cc))), 17 | ) 18 | } 19 | 20 | // When compiling to web using trunk: 21 | #[cfg(target_arch = "wasm32")] 22 | fn main() { 23 | // Redirect `log` message to `console.log` and friends: 24 | eframe::WebLogger::init(log::LevelFilter::Debug).ok(); 25 | 26 | let web_options = eframe::WebOptions::default(); 27 | 28 | wasm_bindgen_futures::spawn_local(async { 29 | eframe::WebRunner::new() 30 | .start( 31 | "the_canvas_id", // hardcode it 32 | web_options, 33 | Box::new(|cc| Box::new(egui_presentation::Presentation::new(cc))), 34 | ) 35 | .await 36 | .expect("failed to start eframe"); 37 | }); 38 | } 39 | --------------------------------------------------------------------------------