├── .gitignore ├── .cargo └── config.toml ├── web ├── main.js ├── build.sh ├── style.css └── index.html ├── .idea ├── .gitignore ├── vcs.xml ├── modules.xml ├── fractal_viewer.iml └── misc.xml ├── src ├── main.rs ├── web.rs ├── uniforms.rs ├── shader.wgsl ├── settings │ ├── mod.rs │ └── compat.rs └── lib.rs ├── LICENSE ├── README.MD ├── Cargo.toml └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /web/pkg 3 | /web/*.zip -------------------------------------------------------------------------------- /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [target.wasm32-unknown-unknown] 2 | rustflags = [ "--cfg=web_sys_unstable_apis" ] -------------------------------------------------------------------------------- /web/main.js: -------------------------------------------------------------------------------- 1 | import init from "./fractal_viewer.js"; 2 | 3 | init().then(() => console.log("WASM loaded!")); -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /web/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | cd "$(dirname "$0")" 3 | rm -rf pkg 4 | mkdir pkg 5 | cp index.html main.js style.css pkg 6 | wasm-pack build --target web --no-typescript --no-pack -d web/pkg 7 | cd pkg 8 | zip -r ../fractal_viewer_web.zip * -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use fractal_viewer::FractalViewerApp; 2 | use eframe::NativeOptions; 3 | 4 | fn main() -> Result<(), eframe::Error> { 5 | env_logger::init(); 6 | let options = NativeOptions::default(); 7 | eframe::run_native( 8 | "fractal_viewer", 9 | options, 10 | Box::new(|cc| Ok(Box::new(FractalViewerApp::new(cc).unwrap()))), 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /web/style.css: -------------------------------------------------------------------------------- 1 | html { 2 | touch-action: manipulation; 3 | } 4 | 5 | html, body { 6 | overflow: hidden; 7 | margin: 0 !important; 8 | padding: 0 !important; 9 | height: 100%; 10 | width: 100%; 11 | } 12 | 13 | canvas { 14 | margin-right: auto; 15 | margin-left: auto; 16 | display: block; 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | width: 100%; 21 | height: 100%; 22 | } -------------------------------------------------------------------------------- /.idea/fractal_viewer.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 15 | -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | fractal_viewer 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/web.rs: -------------------------------------------------------------------------------- 1 | use crate::FractalViewerApp; 2 | use wasm_bindgen::prelude::*; 3 | use web_sys::HtmlCanvasElement; 4 | 5 | #[wasm_bindgen(start)] 6 | async fn wasm_main() -> Result<(), JsValue> { 7 | console_log::init().expect("error initialising logger"); 8 | 9 | let canvas: HtmlCanvasElement = web_sys::window() 10 | .and_then(|window| window.document()) 11 | .and_then(|document| document.get_element_by_id("fv_canvas")) 12 | .expect("Failed to get canvas element!") 13 | .dyn_into() 14 | .expect("fv_canvas was not an HtmlCanvasElement!"); 15 | 16 | let runner = eframe::WebRunner::new(); 17 | runner 18 | .start( 19 | canvas, 20 | eframe::WebOptions::default(), 21 | Box::new(|cc| Ok(Box::new(FractalViewerApp::new(cc).unwrap()))), 22 | ) 23 | .await 24 | } 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022-2024 arthomnix and contributors 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /src/uniforms.rs: -------------------------------------------------------------------------------- 1 | use crate::settings::UserSettings; 2 | use eframe::egui::Vec2; 3 | 4 | pub(crate) fn calculate_scale(size: Vec2, settings: &UserSettings) -> f32 { 5 | 4.0 / settings.zoom / size.min_elem() 6 | } 7 | 8 | #[repr(C)] 9 | #[derive(Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] 10 | pub(crate) struct Uniforms { 11 | scale: f32, 12 | escape_threshold: f32, 13 | centre: [f32; 2], 14 | iterations: i32, 15 | flags: u32, 16 | initial_value: [f32; 2], 17 | } 18 | 19 | impl Uniforms { 20 | pub(crate) fn new(size: Vec2, settings: &UserSettings) -> Self { 21 | let scale = calculate_scale(size, settings); 22 | Uniforms { 23 | scale, 24 | centre: [ 25 | size.x / 2.0 * scale - settings.centre[0], 26 | size.y / 2.0 * scale - settings.centre[1], 27 | ], 28 | iterations: settings.iterations, 29 | flags: (settings.initial_c as u32) << 3 30 | | (settings.internal_black as u32) << 2 31 | | (settings.smoothen as u32) << 1 32 | | (settings.julia_set as u32), 33 | initial_value: settings.initial_value, 34 | escape_threshold: settings.escape_threshold, 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # fractal_viewer 2 | A cross-platform, GPU-accelerated viewer for the Mandelbrot Set and related fractals. 3 | #### [Try it online!](https://arthomnix.dev/fractal) 4 | 5 | ## Usage 6 | Scroll wheel to zoom, click and drag to pan. Change the initial value of z or c by right-clicking. 7 | 8 | Custom functions should be valid WGSL expressions, with the following extra functions available: 9 | * `csquare(vec2) -> vec2`: square of a complex number 10 | * `cpow(vec2, f32) -> vec2`: real power of a complex number (can cause precision issues) 11 | * `ccpow(vec2, vec2) -> vec2`: complex power of a complex number 12 | * `cdiv(vec2, vec2) -> vec2`: divide two complex numbers 13 | * `cmul(vec2, vec2) -> vec2`: multiply two complex numbers 14 | 15 | * `rgb(u32) -> vec3` - Convert a hex RGB colour (in the form `0xRRGGBBu`) to the format WebGPU expects 16 | * `hsv_rgb(vec3) -> vec3` - Convert an HSV colour to RGB 17 | 18 | All builtin WGSL functions are also available. 19 | 20 | ## Note on Git history 21 | Version 2 (this branch) is a rewrite, using wgpu on top of eframe instead of egui on top of raw 22 | wgpu/winit. This was done on a fresh "orphan" branch which does not contain any of the Git commit 23 | history of the old master branch. If you want to view the history of the old version, you will need 24 | to look at that branch. -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "fractal_viewer" 3 | version = "2.1.2" 4 | edition = "2021" 5 | description = "Cross-platform GPU-accelerated viewer for the Mandelbrot set and related fractals" 6 | repository = "https://github.com/arthomnix/fractal_viewer" 7 | license = "MIT" 8 | 9 | [[bin]] 10 | name = "fractal_viewer_bin" 11 | path = "src/main.rs" 12 | 13 | [lib] 14 | crate-type = ["cdylib", "rlib"] 15 | 16 | [dependencies] 17 | eframe = { version = "0.32", default-features = false, features = [ "wgpu", "accesskit", "default_fonts", "wayland", "web_screen_reader" ] } 18 | egui-wgpu = "0.32" 19 | wgpu = { version = "25.0", features = ["webgpu", "webgl"] } 20 | log = "0.4" 21 | env_logger = "0.11" 22 | bytemuck = { version = "1.23", features = [ "derive" ] } 23 | bincode = { version = "2.0", features = ["serde"] } 24 | serde = { version = "1.0", features = [ "derive"] } 25 | base64 = "0.22" 26 | url = "2.5" 27 | instant = { version = "0.1", features = [ "wasm-bindgen" ] } 28 | 29 | [target.'cfg(not(target_arch = "wasm32"))'.dependencies] 30 | arboard = { version = "3.4", features = [ "wayland-data-control" ] } 31 | 32 | [target.'cfg(target_arch = "wasm32")'.dependencies] 33 | console_error_panic_hook = "0.1" 34 | console_log = { version = "1.0", features = [ "color" ] } 35 | wasm-bindgen = "0.2" 36 | wasm-bindgen-futures = "0.4" 37 | web-sys = { version = "0.3", features = [ "Window", "Location", "Document", "Element" ] } 38 | naga = "25.0" -------------------------------------------------------------------------------- /src/shader.wgsl: -------------------------------------------------------------------------------- 1 | struct Uniforms { 2 | scale: f32, 3 | escape_threshold: f32, 4 | centre: vec2, 5 | iterations: i32, 6 | flags: u32, 7 | initial_value: vec2, 8 | } 9 | 10 | const JULIA_SET = 1u; 11 | const SMOOTHEN = 2u; 12 | const INTERNAL_BLACK = 4u; 13 | const INITIAL_C = 8u; 14 | 15 | @group(0) @binding(0) var uniforms: Uniforms; 16 | 17 | @vertex 18 | fn vs_main(@builtin(vertex_index) in_vertex_index: u32) -> @builtin(position) vec4 { 19 | var vertex_positions: array, 6> = array, 6>( 20 | vec4(-1.0, -1.0, 0.0, 1.0), 21 | vec4(1.0, -1.0, 0.0, 1.0), 22 | vec4(-1.0, 1.0, 0.0, 1.0), 23 | vec4(1.0, -1.0, 0.0, 1.0), 24 | vec4(1.0, 1.0, 0.0, 1.0), 25 | vec4(-1.0, 1.0, 0.0, 1.0), 26 | ); 27 | return vertex_positions[in_vertex_index]; 28 | } 29 | 30 | fn cpow(z: vec2, p: f32) -> vec2 { 31 | let r: f32 = length(z); 32 | let arg: f32 = atan2(z.y, z.x); 33 | return vec2(pow(r, p) * cos(p * arg), pow(r, p) * sin(p * arg)); 34 | } 35 | 36 | fn ccpow(z: vec2, w: vec2) -> vec2 { 37 | let r: f32 = length(z); 38 | var len: f32 = pow(r, w.x); 39 | let arg: f32 = atan2(z.y, z.x); 40 | var phase: f32 = arg * w.x; 41 | if (w.y != 0.0) { 42 | len /= exp(arg * w.y); 43 | phase += w.y * log(r); 44 | } 45 | return vec2(len * cos(phase), len * sin(phase)); 46 | } 47 | 48 | fn cdiv(w: vec2, z: vec2) -> vec2 { 49 | return vec2(w.x * z.x + w.y * z.y, w.y * z.x - w.x * z.y) / (z.x * z.x + z.y * z.y); 50 | } 51 | 52 | fn cmul(w: vec2, z: vec2) -> vec2 { 53 | return vec2(z.x * w.x - z.y * w.y, z.x * w.y + z.y * w.x); 54 | } 55 | 56 | fn csquare(z: vec2) -> vec2 { 57 | return cmul(z, z); 58 | } 59 | 60 | fn hsv_rgb(hsv: vec3) -> vec3 { 61 | if (hsv.y == 0.0) { 62 | return vec3(hsv.z, hsv.z, hsv.z); 63 | } else { 64 | var hp: f32 = hsv.x * 6.0; 65 | if (hp == 6.0) { 66 | hp = 0.0; 67 | } 68 | let hpi: i32 = i32(hp); 69 | let v1: f32 = hsv.z * (1.0 - hsv.y); 70 | let v2: f32 = hsv.z * (1.0 - hsv.y * (hp - f32(hpi))); 71 | let v3: f32 = hsv.z * (1.0 - hsv.y * (1.0 - (hp - f32(hpi)))); 72 | switch (hpi) { 73 | case 0: { 74 | return vec3(hsv.z, v3, v1); 75 | } 76 | case 1: { 77 | return vec3(v2, hsv.z, v1); 78 | } 79 | case 2: { 80 | return vec3(v1, hsv.z, v3); 81 | } 82 | case 3: { 83 | return vec3(v1, v2, hsv.z); 84 | } 85 | case 4: { 86 | return vec3(v3, v1, hsv.z); 87 | } 88 | default: { 89 | return vec3(hsv.z, v1, v2); 90 | } 91 | } 92 | } 93 | } 94 | 95 | fn rgb(rgb: u32) -> vec3 { 96 | return vec3( 97 | f32((rgb & 0xFF0000) >> 16), 98 | f32((rgb & 0x00FF00) >> 8 ), 99 | f32((rgb & 0x0000FF) ), 100 | ) / 255.0; 101 | } 102 | 103 | fn get_fragment_colour(c: vec2) -> vec4 { 104 | var i: i32 = 0; 105 | var z: vec2; 106 | 107 | if ((uniforms.flags & JULIA_SET) == 0u) { 108 | if ((uniforms.flags & INITIAL_C) != 0u) { 109 | z = c; 110 | i++; 111 | } 112 | 113 | for ( 114 | z += uniforms.initial_value; 115 | length(z) < uniforms.escape_threshold; 116 | z = REPLACE_FRACTAL_EQN // gets replaced by user-defined expression 117 | ) { 118 | i++; 119 | if (i == uniforms.iterations) { 120 | if ((uniforms.flags & INTERNAL_BLACK) != 0u) { 121 | return vec4(0.0, 0.0, 0.0, 1.0); 122 | } else { 123 | break; 124 | } 125 | } 126 | } 127 | } else { 128 | z = c; 129 | var c: vec2 = uniforms.initial_value; 130 | for (; 131 | length(z) < uniforms.escape_threshold; 132 | z = REPLACE_FRACTAL_EQN // gets replaced by user-defined expression 133 | ) { 134 | i++; 135 | if (i == uniforms.iterations) { 136 | if ((uniforms.flags & INTERNAL_BLACK) != 0u) { 137 | return vec4(0.0, 0.0, 0.0, 1.0); 138 | } else { 139 | break; 140 | } 141 | } 142 | } 143 | } 144 | 145 | var n = f32(i); 146 | 147 | if ((uniforms.flags & SMOOTHEN) != 0u && i > 0) { 148 | z = REPLACE_FRACTAL_EQN; 149 | z = REPLACE_FRACTAL_EQN; 150 | 151 | n += 2.0 - log2(log(length(z))); 152 | } 153 | 154 | return vec4(REPLACE_COLOR, 1.0); // gets replaced by user-defined expression 155 | } 156 | 157 | @fragment 158 | fn fs_main(@builtin(position) in: vec4) -> @location(0) vec4 { 159 | return get_fragment_colour(in.xy * uniforms.scale - uniforms.centre); 160 | } -------------------------------------------------------------------------------- /src/settings/mod.rs: -------------------------------------------------------------------------------- 1 | mod compat; 2 | 3 | use crate::SHADER; 4 | use base64::{engine::general_purpose, Engine}; 5 | use std::fmt::{Display, Formatter}; 6 | 7 | #[derive(Debug, serde::Deserialize)] 8 | pub enum InvalidSettingsImportError { 9 | InvalidFormat, 10 | VersionMismatch, 11 | InvalidBase64, 12 | DeserialisationFailed, 13 | } 14 | 15 | impl InvalidSettingsImportError { 16 | fn to_str(&self) -> &str { 17 | match self { 18 | InvalidSettingsImportError::InvalidFormat => "Invalid settings string format", 19 | InvalidSettingsImportError::VersionMismatch => "Version mismatch or invalid format", 20 | InvalidSettingsImportError::InvalidBase64 => "Base64 decoding failed", 21 | InvalidSettingsImportError::DeserialisationFailed => "Deserialising data failed", 22 | } 23 | } 24 | } 25 | 26 | impl Display for InvalidSettingsImportError { 27 | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { 28 | write!(f, "{}", self.to_str()) 29 | } 30 | } 31 | 32 | impl std::error::Error for InvalidSettingsImportError { 33 | fn description(&self) -> &str { 34 | self.to_str() 35 | } 36 | } 37 | 38 | fn get_major_minor_version() -> String { 39 | let mut version_iterator = env!("CARGO_PKG_VERSION").split('.'); 40 | format!( 41 | "{}.{}", 42 | version_iterator.next().unwrap(), 43 | version_iterator.next().unwrap() 44 | ) 45 | } 46 | 47 | #[derive(Clone, serde::Serialize, serde::Deserialize)] 48 | pub(crate) struct CustomShaderData { 49 | pub(crate) equation: String, 50 | pub(crate) colour: String, 51 | pub(crate) additional: String, 52 | } 53 | 54 | impl CustomShaderData { 55 | pub(crate) fn shader(&self) -> String { 56 | SHADER 57 | .replace("REPLACE_FRACTAL_EQN", &self.equation) 58 | .replace("REPLACE_COLOR", &self.colour) 59 | + &self.additional 60 | } 61 | } 62 | 63 | #[derive(Clone, serde::Serialize, serde::Deserialize)] 64 | pub(crate) struct UserSettings { 65 | pub(crate) zoom: f32, 66 | pub(crate) centre: [f32; 2], 67 | pub(crate) iterations: i32, 68 | pub(crate) julia_set: bool, 69 | pub(crate) smoothen: bool, 70 | pub(crate) internal_black: bool, 71 | pub(crate) initial_value: [f32; 2], 72 | pub(crate) escape_threshold: f32, 73 | pub(crate) initial_c: bool, 74 | pub(crate) shader_data: CustomShaderData, 75 | } 76 | 77 | impl UserSettings { 78 | pub(crate) fn export_string(&self) -> String { 79 | let encoded = bincode::serde::encode_to_vec(self, bincode::config::legacy()).unwrap(); 80 | format!( 81 | "{};{}", 82 | get_major_minor_version(), 83 | general_purpose::STANDARD.encode(encoded) 84 | ) 85 | } 86 | 87 | pub(crate) fn import_string(string: &str) -> Result { 88 | let string = match url::Url::parse(string) { 89 | Ok(url) => url.query().unwrap_or_default().to_string(), 90 | Err(_) => string.to_string(), 91 | }; 92 | 93 | if string.is_empty() { 94 | return Err(InvalidSettingsImportError::InvalidFormat); 95 | } 96 | 97 | let mut iterator = string.split(';'); 98 | 99 | let major_minor_version = iterator 100 | .next() 101 | .ok_or(InvalidSettingsImportError::InvalidFormat)?; 102 | 103 | let base64 = iterator 104 | .next() 105 | .ok_or(InvalidSettingsImportError::InvalidFormat)?; 106 | 107 | let this_ver = get_major_minor_version(); 108 | match major_minor_version { 109 | s if s == &this_ver => { 110 | let bytes = general_purpose::STANDARD 111 | .decode(base64) 112 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?; 113 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy()) 114 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)? 115 | .0; 116 | Ok(result) 117 | } 118 | "2.0" => Ok(compat::v2_0::UserSettings::import_string(base64)?.into()), 119 | "0.5" => Ok(compat::v0_5::UserSettings::import_string(base64)?.into()), 120 | "0.3" => Ok(compat::v0_3::UserSettings::import_string(base64)?.into()), 121 | "0.4" => Ok(compat::v0_4::UserSettings::import_string(base64)?.into()), 122 | _ => Err(InvalidSettingsImportError::VersionMismatch), 123 | } 124 | } 125 | } 126 | 127 | impl Default for CustomShaderData { 128 | fn default() -> Self { 129 | Self { 130 | equation: "csquare(z) + c".to_string(), 131 | colour: "hsv_rgb(vec3(log(n + 1.0) / log(f32(uniforms.iterations) + 1.0), 0.8, 0.8))" 132 | .to_string(), 133 | additional: String::new(), 134 | } 135 | } 136 | } 137 | 138 | impl Default for UserSettings { 139 | fn default() -> Self { 140 | Self { 141 | zoom: 1.0, 142 | centre: [0.0, 0.0], 143 | iterations: 100, 144 | julia_set: false, 145 | smoothen: false, 146 | internal_black: true, 147 | initial_value: [0.0, 0.0], 148 | escape_threshold: 2.0, 149 | initial_c: false, 150 | shader_data: Default::default(), 151 | } 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /src/settings/compat.rs: -------------------------------------------------------------------------------- 1 | pub(crate) mod v0_3 { 2 | use crate::settings::{CustomShaderData, InvalidSettingsImportError}; 3 | 4 | use base64::engine::general_purpose; 5 | use base64::Engine; 6 | 7 | #[derive(Clone, serde::Serialize, serde::Deserialize)] 8 | pub(crate) struct UserSettings { 9 | zoom: f32, 10 | centre: [f32; 2], 11 | iterations: i32, 12 | equation: String, 13 | prev_equation: String, 14 | equation_valid: bool, 15 | julia_set: bool, 16 | initial_value: [f32; 2], 17 | escape_threshold: f32, 18 | } 19 | 20 | impl UserSettings { 21 | pub(crate) fn import_string(string: &str) -> Result { 22 | let bytes = general_purpose::STANDARD 23 | .decode(string) 24 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?; 25 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy()) 26 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)? 27 | .0; 28 | Ok(result) 29 | } 30 | } 31 | 32 | impl Into for UserSettings { 33 | fn into(self) -> crate::settings::UserSettings { 34 | crate::settings::UserSettings { 35 | zoom: self.zoom, 36 | centre: self.centre, 37 | iterations: self.iterations, 38 | julia_set: self.julia_set, 39 | initial_value: self.initial_value, 40 | escape_threshold: self.escape_threshold, 41 | shader_data: CustomShaderData { 42 | equation: self.equation, 43 | ..Default::default() 44 | }, 45 | ..Default::default() 46 | } 47 | } 48 | } 49 | } 50 | 51 | pub(crate) mod v0_4 { 52 | use crate::settings::{CustomShaderData, InvalidSettingsImportError}; 53 | 54 | use base64::engine::general_purpose; 55 | use base64::Engine; 56 | 57 | #[derive(Clone, serde::Serialize, serde::Deserialize)] 58 | pub(crate) struct UserSettings { 59 | zoom: f32, 60 | centre: [f32; 2], 61 | iterations: i32, 62 | equation: String, 63 | prev_equation: String, 64 | colour: String, 65 | prev_colour: String, 66 | equation_valid: bool, 67 | julia_set: bool, 68 | smoothen: bool, 69 | internal_black: bool, 70 | initial_value: [f32; 2], 71 | escape_threshold: f32, 72 | } 73 | 74 | impl UserSettings { 75 | pub(crate) fn import_string(string: &str) -> Result { 76 | let bytes = general_purpose::STANDARD 77 | .decode(string) 78 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?; 79 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy()) 80 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)? 81 | .0; 82 | Ok(result) 83 | } 84 | } 85 | 86 | impl Into for UserSettings { 87 | fn into(self) -> crate::settings::UserSettings { 88 | crate::settings::UserSettings { 89 | zoom: self.zoom, 90 | centre: self.centre, 91 | iterations: self.iterations, 92 | julia_set: self.julia_set, 93 | smoothen: self.smoothen, 94 | internal_black: self.internal_black, 95 | initial_value: self.initial_value, 96 | escape_threshold: self.escape_threshold, 97 | shader_data: CustomShaderData { 98 | equation: self.equation, 99 | colour: self.colour, 100 | ..Default::default() 101 | }, 102 | ..Default::default() 103 | } 104 | } 105 | } 106 | } 107 | 108 | pub(crate) mod v0_5 { 109 | use crate::settings::{CustomShaderData, InvalidSettingsImportError}; 110 | 111 | use base64::engine::general_purpose; 112 | use base64::Engine; 113 | 114 | #[derive(Clone, serde::Serialize, serde::Deserialize)] 115 | pub(crate) struct UserSettings { 116 | zoom: f32, 117 | centre: [f32; 2], 118 | iterations: i32, 119 | equation: String, 120 | prev_equation: String, 121 | colour: String, 122 | prev_colour: String, 123 | equation_valid: bool, 124 | julia_set: bool, 125 | smoothen: bool, 126 | internal_black: bool, 127 | initial_value: [f32; 2], 128 | escape_threshold: f32, 129 | initial_c: bool, 130 | } 131 | 132 | impl UserSettings { 133 | pub(crate) fn import_string(string: &str) -> Result { 134 | let bytes = general_purpose::STANDARD 135 | .decode(string) 136 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?; 137 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy()) 138 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)? 139 | .0; 140 | Ok(result) 141 | } 142 | } 143 | 144 | impl Into for UserSettings { 145 | fn into(self) -> crate::settings::UserSettings { 146 | crate::settings::UserSettings { 147 | zoom: self.zoom, 148 | centre: self.centre, 149 | iterations: self.iterations, 150 | julia_set: self.julia_set, 151 | smoothen: self.smoothen, 152 | internal_black: self.internal_black, 153 | initial_value: self.initial_value, 154 | escape_threshold: self.escape_threshold, 155 | initial_c: self.initial_c, 156 | shader_data: CustomShaderData { 157 | equation: self.equation, 158 | colour: self.colour, 159 | ..Default::default() 160 | }, 161 | ..Default::default() 162 | } 163 | } 164 | } 165 | } 166 | 167 | pub(crate) mod v2_0 { 168 | use crate::settings::{CustomShaderData, InvalidSettingsImportError}; 169 | 170 | use base64::engine::general_purpose; 171 | use base64::Engine; 172 | 173 | #[derive(Clone, serde::Serialize, serde::Deserialize)] 174 | pub(crate) struct UserSettings { 175 | zoom: f32, 176 | centre: [f32; 2], 177 | iterations: i32, 178 | equation: String, 179 | colour: String, 180 | julia_set: bool, 181 | smoothen: bool, 182 | internal_black: bool, 183 | initial_value: [f32; 2], 184 | escape_threshold: f32, 185 | initial_c: bool, 186 | } 187 | 188 | impl UserSettings { 189 | pub(crate) fn import_string(string: &str) -> Result { 190 | let bytes = general_purpose::STANDARD 191 | .decode(string) 192 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?; 193 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy()) 194 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)? 195 | .0; 196 | Ok(result) 197 | } 198 | } 199 | 200 | impl Into for UserSettings { 201 | fn into(self) -> crate::settings::UserSettings { 202 | crate::settings::UserSettings { 203 | zoom: self.zoom, 204 | centre: self.centre, 205 | iterations: self.iterations, 206 | julia_set: self.julia_set, 207 | smoothen: self.smoothen, 208 | internal_black: self.internal_black, 209 | initial_value: self.initial_value, 210 | escape_threshold: self.escape_threshold, 211 | initial_c: self.initial_c, 212 | shader_data: CustomShaderData { 213 | equation: self.equation, 214 | colour: self.colour, 215 | ..Default::default() 216 | }, 217 | ..Default::default() 218 | } 219 | } 220 | } 221 | } 222 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | mod settings; 2 | mod uniforms; 3 | #[cfg(target_arch = "wasm32")] 4 | mod web; 5 | 6 | use egui_wgpu::wgpu; 7 | #[cfg(not(target_arch = "wasm32"))] 8 | use egui_wgpu::wgpu::naga; 9 | 10 | use crate::settings::{CustomShaderData, UserSettings}; 11 | use crate::uniforms::{calculate_scale, Uniforms}; 12 | #[allow(unused_imports)] // eframe::egui::ViewportCommand used on native but not web 13 | use eframe::egui::{ 14 | Color32, Context, Key, PaintCallbackInfo, PointerButton, TextEdit, ViewportCommand, 15 | }; 16 | use eframe::{egui, Frame}; 17 | use egui_wgpu::{CallbackResources, ScreenDescriptor}; 18 | use instant::Instant; 19 | use naga::valid::{Capabilities, ValidationFlags}; 20 | use std::collections::VecDeque; 21 | use std::time::Duration; 22 | use wgpu::util::{BufferInitDescriptor, DeviceExt}; 23 | use wgpu::{ 24 | Backend, BindGroup, BindGroupDescriptor, BindGroupEntry, BindGroupLayout, 25 | BindGroupLayoutDescriptor, BindGroupLayoutEntry, BindingType, Buffer, BufferBindingType, 26 | BufferUsages, ColorTargetState, CommandBuffer, CommandEncoder, Device, FragmentState, 27 | MultisampleState, PipelineLayoutDescriptor, PrimitiveState, Queue, RenderPass, RenderPipeline, 28 | RenderPipelineDescriptor, ShaderModuleDescriptor, ShaderSource, ShaderStages, VertexState, 29 | }; 30 | 31 | static SHADER: &str = include_str!("shader.wgsl"); 32 | 33 | fn validate_shader(options: &CustomShaderData) -> Result<(), String> { 34 | let shader_src = options.shader(); 35 | 36 | let module = naga::front::wgsl::Frontend::new() 37 | .parse(&shader_src) 38 | .map_err(|e| e.to_string())?; 39 | naga::valid::Validator::new(ValidationFlags::all(), Capabilities::empty()) 40 | .validate(&module) 41 | .map_err(|e| e.to_string())?; 42 | Ok(()) 43 | } 44 | 45 | pub struct FractalViewerApp { 46 | settings: UserSettings, 47 | last_frame: Instant, 48 | prev_frame_time: Duration, 49 | backend: &'static str, 50 | driver_info: String, 51 | show_ui: bool, 52 | recompile_shader: bool, 53 | shader_error: Option, 54 | import_error: Option, 55 | fps_samples: VecDeque, 56 | last_title_update: Option, 57 | #[cfg(not(target_arch = "wasm32"))] 58 | clipboard: arboard::Clipboard, 59 | } 60 | 61 | impl FractalViewerApp { 62 | pub fn new<'a>(cc: &'a eframe::CreationContext<'a>) -> Option { 63 | #[cfg(not(target_arch = "wasm32"))] 64 | let settings = UserSettings::default(); 65 | #[cfg(not(target_arch = "wasm32"))] 66 | let import_error = None; 67 | 68 | #[cfg(target_arch = "wasm32")] 69 | let (mut settings, mut import_error) = match web_sys::window() 70 | .and_then(|w| match w.location().href().ok() { 71 | Some(s) if s.contains('?') => Some(s), 72 | _ => None, 73 | }) 74 | .map(|url| UserSettings::import_string(&url)) 75 | .unwrap_or_else(|| Ok(UserSettings::default())) 76 | { 77 | Ok(settings) => (settings, None), 78 | Err(e) => (UserSettings::default(), Some(e.to_string())), 79 | }; 80 | 81 | #[cfg(target_arch = "wasm32")] 82 | if let Err(e) = validate_shader(&settings.shader_data) { 83 | import_error = Some(format!("Invalid equation or colour expression: {e}")); 84 | settings = UserSettings::default(); 85 | } 86 | 87 | let wgpu_render_state = cc.wgpu_render_state.as_ref()?; 88 | let device = &wgpu_render_state.device; 89 | 90 | let size = cc.egui_ctx.screen_rect().size(); 91 | 92 | let uniform_buffer = device.create_buffer_init(&BufferInitDescriptor { 93 | label: Some("fv_uniform_buffer"), 94 | contents: bytemuck::cast_slice(&[Uniforms::new(size, &settings)]), 95 | usage: BufferUsages::UNIFORM | BufferUsages::COPY_DST, 96 | }); 97 | 98 | let uniform_bind_group_layout = 99 | device.create_bind_group_layout(&BindGroupLayoutDescriptor { 100 | label: Some("fv_uniform_bind_group_layout"), 101 | entries: &[BindGroupLayoutEntry { 102 | binding: 0, 103 | visibility: ShaderStages::VERTEX_FRAGMENT, 104 | ty: BindingType::Buffer { 105 | ty: BufferBindingType::Uniform, 106 | has_dynamic_offset: false, 107 | min_binding_size: None, 108 | }, 109 | count: None, 110 | }], 111 | }); 112 | 113 | let uniform_bind_group = device.create_bind_group(&BindGroupDescriptor { 114 | label: Some("fv_uniform_bind_group"), 115 | layout: &uniform_bind_group_layout, 116 | entries: &[BindGroupEntry { 117 | binding: 0, 118 | resource: uniform_buffer.as_entire_binding(), 119 | }], 120 | }); 121 | 122 | let renderer_state = RendererState { 123 | target_format: wgpu_render_state.target_format.into(), 124 | bind_group_layout: uniform_bind_group_layout, 125 | bind_group: uniform_bind_group, 126 | uniform_buffer, 127 | }; 128 | 129 | let pipeline = renderer_state.generate_pipeline(device, &settings.shader_data); 130 | 131 | wgpu_render_state 132 | .renderer 133 | .write() 134 | .callback_resources 135 | .insert(FvRenderer { 136 | pipeline, 137 | state: renderer_state, 138 | }); 139 | 140 | let adapter_info = wgpu_render_state.adapter.get_info(); 141 | let backend = match adapter_info.backend { 142 | Backend::Noop => "Empty", 143 | Backend::Vulkan => "Vulkan", 144 | Backend::Metal => "Metal", 145 | Backend::Dx12 => "DirectX 12", 146 | Backend::Gl => "WebGL/OpenGL", 147 | Backend::BrowserWebGpu => "WebGPU", 148 | }; 149 | let driver_info = adapter_info.driver_info.clone(); 150 | 151 | Some(Self { 152 | settings, 153 | last_frame: Instant::now(), 154 | prev_frame_time: Duration::from_secs(0), 155 | backend, 156 | driver_info, 157 | show_ui: true, 158 | recompile_shader: false, 159 | shader_error: None, 160 | import_error, 161 | fps_samples: VecDeque::new(), 162 | last_title_update: None, 163 | #[cfg(not(target_arch = "wasm32"))] 164 | clipboard: arboard::Clipboard::new().unwrap(), 165 | }) 166 | } 167 | 168 | pub fn paint_fractal(&mut self, ui: &mut egui::Ui) { 169 | let size = ui.available_size(); 170 | let (rect, response) = ui.allocate_exact_size(size, egui::Sense::click_and_drag()); 171 | 172 | let scale = calculate_scale(size, &self.settings); 173 | if response.dragged_by(PointerButton::Primary) { 174 | let drag_motion = response.drag_delta(); 175 | self.settings.centre[0] -= drag_motion.x * scale; 176 | self.settings.centre[1] -= drag_motion.y * scale; 177 | } else if response.clicked_by(PointerButton::Secondary) 178 | || response.dragged_by(PointerButton::Secondary) 179 | { 180 | let pointer_pos = response.interact_pointer_pos().unwrap(); 181 | self.settings.initial_value[0] = 182 | (pointer_pos.x - size.x / 2.0) * scale + self.settings.centre[0]; 183 | self.settings.initial_value[1] = 184 | (pointer_pos.y - size.y / 2.0) * scale + self.settings.centre[1]; 185 | } 186 | 187 | let scroll = ui.input(|i| i.raw_scroll_delta); 188 | self.settings.zoom += self.settings.zoom * (scroll.y / 300.0).max(-0.9); 189 | 190 | let uniforms = Uniforms::new(size, &self.settings); 191 | 192 | let callback = FvRenderCallback { 193 | uniforms, 194 | shader_recompilation_options: if self.recompile_shader { 195 | self.recompile_shader = false; 196 | Some(self.settings.shader_data.clone()) 197 | } else { 198 | None 199 | }, 200 | }; 201 | 202 | ui.painter() 203 | .add(egui_wgpu::Callback::new_paint_callback(rect, callback)); 204 | } 205 | } 206 | 207 | impl eframe::App for FractalViewerApp { 208 | fn update(&mut self, ctx: &Context, _frame: &mut Frame) { 209 | let fps = self.fps_samples.iter().sum::() / self.fps_samples.len() as f32; 210 | if self.last_title_update.is_none() 211 | || self 212 | .last_title_update 213 | .is_some_and(|i| i.elapsed() >= Duration::from_secs(1)) 214 | { 215 | let title = format!( 216 | "{} {} [{} | {} | {:.0} FPS]", 217 | env!("CARGO_PKG_NAME"), 218 | env!("CARGO_PKG_VERSION"), 219 | self.backend, 220 | std::env::consts::ARCH, 221 | fps 222 | ); 223 | 224 | #[cfg(not(target_arch = "wasm32"))] 225 | ctx.send_viewport_cmd(ViewportCommand::Title(title)); 226 | 227 | #[cfg(target_arch = "wasm32")] 228 | if let Some(title_element) = web_sys::window() 229 | .and_then(|window| window.document()) 230 | .and_then(|document| document.get_element_by_id("title")) 231 | { 232 | title_element.set_inner_html(&title); 233 | } 234 | 235 | self.last_title_update = Some(Instant::now()); 236 | } 237 | 238 | #[cfg(not(target_arch = "wasm32"))] 239 | if ctx.input(|i| i.key_pressed(Key::F11)) { 240 | let current_fullscreen = ctx.input(|i| i.viewport().fullscreen.unwrap()); 241 | ctx.send_viewport_cmd(ViewportCommand::Fullscreen(!current_fullscreen)); 242 | } 243 | 244 | if ctx.input(|i| i.key_pressed(Key::F1)) { 245 | self.show_ui = !self.show_ui; 246 | } 247 | 248 | egui::CentralPanel::default() 249 | .frame(egui::Frame::default().inner_margin(0.0)) 250 | .show(ctx, |ui| self.paint_fractal(ui)); 251 | 252 | egui::Window::new(env!("CARGO_PKG_NAME")) 253 | .title_bar(true) 254 | .open(&mut self.show_ui) 255 | .show(ctx, |ui| { 256 | ui.label(format!( 257 | "Version {} ({}{}{})", 258 | env!("CARGO_PKG_VERSION"), 259 | std::env::consts::OS, 260 | if std::env::consts::OS.is_empty() { 261 | "" 262 | } else { 263 | " " 264 | }, 265 | std::env::consts::ARCH 266 | )); 267 | 268 | if self.driver_info.is_empty() { 269 | ui.label(format!("Render backend: {}", self.backend)); 270 | } else { 271 | ui.label(format!("Render backend: {} ({})", self.backend, &self.driver_info)); 272 | } 273 | 274 | ui.label(format!( 275 | "Last frame: {:.1}ms (smoothed FPS: {:.0})", 276 | self.prev_frame_time.as_micros() as f64 / 1000.0, 277 | self.fps_samples.iter().sum::() / self.fps_samples.len() as f32 278 | )); 279 | #[cfg(not(target_arch = "wasm32"))] 280 | ui.label("Fullscreen: [F11]"); 281 | 282 | ui.label("Toggle UI: [F1]"); 283 | ui.separator(); 284 | 285 | ui.collapsing("Zoom [Scroll]", |ui| { 286 | ui.label("Zoom"); 287 | ui.add( 288 | egui::Slider::new(&mut self.settings.zoom, 0.0..=100000.0) 289 | .logarithmic(true), 290 | ); 291 | }); 292 | ui.separator(); 293 | ui.collapsing("Iterations", |ui| { 294 | ui.label("Iterations"); 295 | ui.add( 296 | egui::Slider::new(&mut self.settings.iterations, 1..=10000) 297 | .logarithmic(true), 298 | ); 299 | ui.label("Escape threshold"); 300 | ui.add( 301 | egui::Slider::new( 302 | &mut self.settings.escape_threshold, 303 | 1.0..=f32::MAX, 304 | ) 305 | .logarithmic(true), 306 | ); 307 | }); 308 | ui.separator(); 309 | ui.collapsing("Centre [Click and drag to pan]", |ui| { 310 | ui.label("Centre"); 311 | ui.add( 312 | egui::DragValue::new(&mut self.settings.centre[0]) 313 | .speed(0.1 / self.settings.zoom), 314 | ); 315 | ui.add( 316 | egui::DragValue::new(&mut self.settings.centre[1]) 317 | .speed(0.1 / self.settings.zoom) 318 | .suffix("i"), 319 | ); 320 | if ui.button("Reset").clicked() { 321 | self.settings.centre = [0.0, 0.0]; 322 | } 323 | }); 324 | ui.separator(); 325 | ui.checkbox(&mut self.settings.julia_set, "Julia set"); 326 | ui.separator(); 327 | ui.collapsing("Initial value [Hold right click and drag]", |ui| { 328 | ui.label("Initial value of z"); 329 | ui.label("(or value of c for Julia sets)"); 330 | ui.add(egui::DragValue::new(&mut self.settings.initial_value[0]).speed(0.01)); 331 | ui.add( 332 | egui::DragValue::new(&mut self.settings.initial_value[1]) 333 | .speed(0.01) 334 | .suffix("i"), 335 | ); 336 | if ui.button("Reset").clicked() { 337 | self.settings.initial_value = [0.0, 0.0]; 338 | } 339 | ui.checkbox(&mut self.settings.initial_c, "Add c to initial value"); 340 | }); 341 | ui.separator(); 342 | ui.collapsing("Equation", |ui| { 343 | ui.label("Iterative function (WGSL expression)"); 344 | egui::ComboBox::from_label("Iterative function") 345 | .selected_text("Select default equation") 346 | .show_ui(ui, |ui| { 347 | if ui.selectable_value( 348 | &mut self.settings.shader_data.equation, 349 | "csquare(z) + c".to_string(), 350 | "Mandelbrot set", 351 | ).clicked() || ui.selectable_value( 352 | &mut self.settings.shader_data.equation, 353 | "csquare(abs(z)) + c".to_string(), 354 | "Burning ship fractal", 355 | ).clicked() || ui.selectable_value( 356 | &mut self.settings.shader_data.equation, 357 | "cdiv(cmul(csquare(z), z), vec2(1.0, 0.0) + z * z) + c" 358 | .to_string(), 359 | "Feather fractal", 360 | ).clicked() || ui.selectable_value( 361 | &mut self.settings.shader_data.equation, 362 | "csquare(vec2(z.x, -z.y)) + c".to_string(), 363 | "Tricorn fractal", 364 | ).clicked() { 365 | self.recompile_shader = true; 366 | } 367 | }); 368 | ui.label("...Or edit it yourself!"); 369 | if ui.add(TextEdit::singleline(&mut self.settings.shader_data.equation).desired_width(ui.max_rect().width())).changed() { 370 | self.recompile_shader = true; 371 | }; 372 | ui.label("Colour expression:"); 373 | ui.horizontal(|ui| { 374 | if ui.text_edit_singleline(&mut self.settings.shader_data.colour).changed() { 375 | self.recompile_shader = true; 376 | }; 377 | if ui.button("Reset").clicked() { 378 | self.settings.shader_data.colour = "hsv_rgb(vec3(log(n + 1.0) / log(f32(uniforms.iterations) + 1.0), 0.8, 0.8))".to_string(); 379 | self.recompile_shader = true; 380 | } 381 | }); 382 | 383 | ui.label("Additional code to include in shader:"); 384 | if ui.add(TextEdit::multiline(&mut self.settings.shader_data.additional).code_editor()).changed() { 385 | self.recompile_shader = true; 386 | }; 387 | 388 | ui.checkbox(&mut self.settings.internal_black, "Always colour inside of set black"); 389 | 390 | if let Some(e) = &self.shader_error { 391 | ui.colored_label(Color32::RED, format!("Invalid expression: {e}")); 392 | } 393 | }); 394 | 395 | { 396 | ui.separator(); 397 | ui.checkbox(&mut self.settings.smoothen, "Smoothen (warning: only produces correct results on a normal Mandelbrot set!)"); 398 | } 399 | { 400 | ui.separator(); 401 | egui::CollapsingHeader::new("Export and import options") 402 | .default_open(self.import_error.is_some()) 403 | .show(ui, |ui| { 404 | if ui.button("Export to clipboard").clicked() { 405 | ctx.copy_text(self.settings.export_string()); 406 | } 407 | if ui.button("Export link to clipboard").clicked() { 408 | ctx.copy_text(format!("{}?{}", option_env!("SITE_LINK").unwrap_or("https://arthomnix.dev/fractal/"), self.settings.export_string())); 409 | } 410 | // Reading clipboard doesn't work in Firefox, so we only support importing from link on web 411 | #[cfg(not(target_arch = "wasm32"))] 412 | if ui.button("Import from clipboard").clicked() { 413 | let text = self.clipboard.get_text().unwrap_or_default(); 414 | match UserSettings::import_string(&text) { 415 | Ok(settings) => { 416 | self.settings = settings; 417 | self.import_error = None; 418 | self.recompile_shader = true; 419 | } 420 | Err(e) => self.import_error = Some(e.to_string()), 421 | }; 422 | } 423 | if let Some(e) = &self.import_error { 424 | ui.colored_label(Color32::RED, format!("Import failed: {e}")); 425 | } 426 | #[cfg(target_arch = "wasm32")] 427 | ui.label("To import a settings string on web, add '?' to the end of this page's URL.") 428 | }); 429 | } 430 | 431 | #[cfg(target_arch = "wasm32")] 432 | { 433 | ui.separator(); 434 | ui.horizontal(|ui| { 435 | ui.hyperlink_to("Source code", option_env!("SOURCE_LINK").unwrap_or("https://github.com/arthomnix/fractal_viewer")); 436 | ui.label("|"); 437 | ui.hyperlink_to("Download desktop version", option_env!("DL_LINK").unwrap_or("https://github.com/arthomnix/fractal_viewer/releases/latest")); 438 | }) 439 | } 440 | }); 441 | 442 | // Validate custom expressions 443 | if self.recompile_shader { 444 | if let Err(e) = validate_shader(&self.settings.shader_data) { 445 | self.shader_error = Some(e); 446 | self.recompile_shader = false; 447 | } else { 448 | self.shader_error = None; 449 | } 450 | } 451 | 452 | self.prev_frame_time = self.last_frame.elapsed(); 453 | let new_fps = self.prev_frame_time.as_secs_f32().recip(); 454 | self.fps_samples.push_back(new_fps); 455 | if self.fps_samples.len() > 200 { 456 | self.fps_samples.pop_front(); 457 | } 458 | self.last_frame = Instant::now(); 459 | } 460 | } 461 | 462 | struct RendererState { 463 | target_format: ColorTargetState, 464 | bind_group_layout: BindGroupLayout, 465 | bind_group: BindGroup, 466 | uniform_buffer: Buffer, 467 | } 468 | 469 | impl RendererState { 470 | fn generate_pipeline(&self, device: &Device, shader_data: &CustomShaderData) -> RenderPipeline { 471 | let shader = device.create_shader_module(ShaderModuleDescriptor { 472 | label: Some("fv_shader"), 473 | source: ShaderSource::Wgsl(shader_data.shader().into()), 474 | }); 475 | 476 | let pipeline_layout = device 477 | .create_pipeline_layout(&PipelineLayoutDescriptor { 478 | label: Some("fv_pipeline_layout"), 479 | bind_group_layouts: &[&self.bind_group_layout], 480 | push_constant_ranges: &[], 481 | }); 482 | 483 | device 484 | .create_render_pipeline(&RenderPipelineDescriptor { 485 | label: Some("fv_pipeline"), 486 | layout: Some(&pipeline_layout), 487 | vertex: VertexState { 488 | module: &shader, 489 | entry_point: Some("vs_main"), 490 | compilation_options: Default::default(), 491 | buffers: &[], 492 | }, 493 | fragment: Some(FragmentState { 494 | module: &shader, 495 | entry_point: Some("fs_main"), 496 | compilation_options: Default::default(), 497 | targets: &[Some(self.target_format.clone())], 498 | }), 499 | primitive: PrimitiveState::default(), 500 | depth_stencil: None, 501 | multisample: MultisampleState::default(), 502 | multiview: None, 503 | cache: None, 504 | }) 505 | } 506 | } 507 | 508 | struct FvRenderer { 509 | pipeline: RenderPipeline, 510 | state: RendererState, 511 | } 512 | 513 | impl FvRenderer { 514 | fn prepare(&mut self, device: &Device, queue: &Queue, callback: &FvRenderCallback) { 515 | if let Some(data) = &callback.shader_recompilation_options { 516 | self.pipeline = self.state.generate_pipeline(device, data); 517 | } 518 | 519 | queue.write_buffer( 520 | &self.state.uniform_buffer, 521 | 0, 522 | bytemuck::cast_slice(&[callback.uniforms]), 523 | ); 524 | } 525 | 526 | fn paint(&self, render_pass: &mut RenderPass<'static>) { 527 | render_pass.set_pipeline(&self.pipeline); 528 | render_pass.set_bind_group(0, &self.state.bind_group, &[]); 529 | render_pass.draw(0..6, 0..1); 530 | } 531 | } 532 | 533 | struct FvRenderCallback { 534 | uniforms: Uniforms, 535 | shader_recompilation_options: Option, 536 | } 537 | 538 | impl egui_wgpu::CallbackTrait for FvRenderCallback { 539 | fn prepare( 540 | &self, 541 | device: &Device, 542 | queue: &Queue, 543 | _screen_descriptor: &ScreenDescriptor, 544 | _egui_encoder: &mut CommandEncoder, 545 | callback_resources: &mut CallbackResources, 546 | ) -> Vec { 547 | let renderer: &mut FvRenderer = callback_resources.get_mut().unwrap(); 548 | renderer.prepare(device, queue, self); 549 | vec![] 550 | } 551 | 552 | fn paint( 553 | &self, 554 | _info: PaintCallbackInfo, 555 | render_pass: &mut RenderPass<'static>, 556 | callback_resources: &CallbackResources, 557 | ) { 558 | let renderer: &FvRenderer = callback_resources.get().unwrap(); 559 | renderer.paint(render_pass); 560 | } 561 | } 562 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "ab_glyph" 7 | version = "0.2.31" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d" 10 | dependencies = [ 11 | "ab_glyph_rasterizer", 12 | "owned_ttf_parser", 13 | ] 14 | 15 | [[package]] 16 | name = "ab_glyph_rasterizer" 17 | version = "0.1.10" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" 20 | 21 | [[package]] 22 | name = "accesskit" 23 | version = "0.19.0" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "e25ae84c0260bdf5df07796d7cc4882460de26a2b406ec0e6c42461a723b271b" 26 | 27 | [[package]] 28 | name = "accesskit_atspi_common" 29 | version = "0.12.0" 30 | source = "registry+https://github.com/rust-lang/crates.io-index" 31 | checksum = "29bd41de2e54451a8ca0dd95ebf45b54d349d29ebceb7f20be264eee14e3d477" 32 | dependencies = [ 33 | "accesskit", 34 | "accesskit_consumer", 35 | "atspi-common", 36 | "serde", 37 | "thiserror 1.0.69", 38 | "zvariant", 39 | ] 40 | 41 | [[package]] 42 | name = "accesskit_consumer" 43 | version = "0.28.0" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "8bfae7c152994a31dc7d99b8eeac7784a919f71d1b306f4b83217e110fd3824c" 46 | dependencies = [ 47 | "accesskit", 48 | "hashbrown 0.15.5", 49 | ] 50 | 51 | [[package]] 52 | name = "accesskit_macos" 53 | version = "0.20.0" 54 | source = "registry+https://github.com/rust-lang/crates.io-index" 55 | checksum = "692dd318ff8a7a0ffda67271c4bd10cf32249656f4e49390db0b26ca92b095f2" 56 | dependencies = [ 57 | "accesskit", 58 | "accesskit_consumer", 59 | "hashbrown 0.15.5", 60 | "objc2 0.5.2", 61 | "objc2-app-kit 0.2.2", 62 | "objc2-foundation 0.2.2", 63 | ] 64 | 65 | [[package]] 66 | name = "accesskit_unix" 67 | version = "0.15.0" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "c5f7474c36606d0fe4f438291d667bae7042ea2760f506650ad2366926358fc8" 70 | dependencies = [ 71 | "accesskit", 72 | "accesskit_atspi_common", 73 | "async-channel", 74 | "async-executor", 75 | "async-task", 76 | "atspi", 77 | "futures-lite", 78 | "futures-util", 79 | "serde", 80 | "zbus", 81 | ] 82 | 83 | [[package]] 84 | name = "accesskit_windows" 85 | version = "0.27.0" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "70a042b62c9c05bf7b616f015515c17d2813f3ba89978d6f4fc369735d60700a" 88 | dependencies = [ 89 | "accesskit", 90 | "accesskit_consumer", 91 | "hashbrown 0.15.5", 92 | "static_assertions", 93 | "windows 0.61.3", 94 | "windows-core 0.61.2", 95 | ] 96 | 97 | [[package]] 98 | name = "accesskit_winit" 99 | version = "0.27.0" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "5c1f0d3d13113d8857542a4f8d1a1c24d1dc1527b77aee8426127f4901588708" 102 | dependencies = [ 103 | "accesskit", 104 | "accesskit_macos", 105 | "accesskit_unix", 106 | "accesskit_windows", 107 | "raw-window-handle", 108 | "winit", 109 | ] 110 | 111 | [[package]] 112 | name = "adler2" 113 | version = "2.0.1" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 116 | 117 | [[package]] 118 | name = "ahash" 119 | version = "0.8.12" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" 122 | dependencies = [ 123 | "cfg-if", 124 | "getrandom", 125 | "once_cell", 126 | "version_check", 127 | "zerocopy", 128 | ] 129 | 130 | [[package]] 131 | name = "aho-corasick" 132 | version = "1.1.3" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 135 | dependencies = [ 136 | "memchr", 137 | ] 138 | 139 | [[package]] 140 | name = "android-activity" 141 | version = "0.6.0" 142 | source = "registry+https://github.com/rust-lang/crates.io-index" 143 | checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" 144 | dependencies = [ 145 | "android-properties", 146 | "bitflags 2.9.4", 147 | "cc", 148 | "cesu8", 149 | "jni", 150 | "jni-sys", 151 | "libc", 152 | "log", 153 | "ndk", 154 | "ndk-context", 155 | "ndk-sys 0.6.0+11769913", 156 | "num_enum", 157 | "thiserror 1.0.69", 158 | ] 159 | 160 | [[package]] 161 | name = "android-properties" 162 | version = "0.2.2" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" 165 | 166 | [[package]] 167 | name = "android_system_properties" 168 | version = "0.1.5" 169 | source = "registry+https://github.com/rust-lang/crates.io-index" 170 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 171 | dependencies = [ 172 | "libc", 173 | ] 174 | 175 | [[package]] 176 | name = "anstream" 177 | version = "0.6.20" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" 180 | dependencies = [ 181 | "anstyle", 182 | "anstyle-parse", 183 | "anstyle-query", 184 | "anstyle-wincon", 185 | "colorchoice", 186 | "is_terminal_polyfill", 187 | "utf8parse", 188 | ] 189 | 190 | [[package]] 191 | name = "anstyle" 192 | version = "1.0.11" 193 | source = "registry+https://github.com/rust-lang/crates.io-index" 194 | checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" 195 | 196 | [[package]] 197 | name = "anstyle-parse" 198 | version = "0.2.7" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 201 | dependencies = [ 202 | "utf8parse", 203 | ] 204 | 205 | [[package]] 206 | name = "anstyle-query" 207 | version = "1.1.4" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" 210 | dependencies = [ 211 | "windows-sys 0.60.2", 212 | ] 213 | 214 | [[package]] 215 | name = "anstyle-wincon" 216 | version = "3.0.10" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" 219 | dependencies = [ 220 | "anstyle", 221 | "once_cell_polyfill", 222 | "windows-sys 0.60.2", 223 | ] 224 | 225 | [[package]] 226 | name = "arboard" 227 | version = "3.6.1" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" 230 | dependencies = [ 231 | "clipboard-win", 232 | "image", 233 | "log", 234 | "objc2 0.6.2", 235 | "objc2-app-kit 0.3.1", 236 | "objc2-core-foundation", 237 | "objc2-core-graphics", 238 | "objc2-foundation 0.3.1", 239 | "parking_lot", 240 | "percent-encoding", 241 | "windows-sys 0.60.2", 242 | "wl-clipboard-rs", 243 | "x11rb", 244 | ] 245 | 246 | [[package]] 247 | name = "arrayvec" 248 | version = "0.7.6" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 251 | 252 | [[package]] 253 | name = "as-raw-xcb-connection" 254 | version = "1.0.1" 255 | source = "registry+https://github.com/rust-lang/crates.io-index" 256 | checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" 257 | 258 | [[package]] 259 | name = "ash" 260 | version = "0.38.0+1.3.281" 261 | source = "registry+https://github.com/rust-lang/crates.io-index" 262 | checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" 263 | dependencies = [ 264 | "libloading", 265 | ] 266 | 267 | [[package]] 268 | name = "async-broadcast" 269 | version = "0.7.2" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" 272 | dependencies = [ 273 | "event-listener", 274 | "event-listener-strategy", 275 | "futures-core", 276 | "pin-project-lite", 277 | ] 278 | 279 | [[package]] 280 | name = "async-channel" 281 | version = "2.5.0" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" 284 | dependencies = [ 285 | "concurrent-queue", 286 | "event-listener-strategy", 287 | "futures-core", 288 | "pin-project-lite", 289 | ] 290 | 291 | [[package]] 292 | name = "async-executor" 293 | version = "1.13.3" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" 296 | dependencies = [ 297 | "async-task", 298 | "concurrent-queue", 299 | "fastrand", 300 | "futures-lite", 301 | "pin-project-lite", 302 | "slab", 303 | ] 304 | 305 | [[package]] 306 | name = "async-io" 307 | version = "2.6.0" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" 310 | dependencies = [ 311 | "autocfg", 312 | "cfg-if", 313 | "concurrent-queue", 314 | "futures-io", 315 | "futures-lite", 316 | "parking", 317 | "polling", 318 | "rustix 1.1.2", 319 | "slab", 320 | "windows-sys 0.61.0", 321 | ] 322 | 323 | [[package]] 324 | name = "async-lock" 325 | version = "3.4.1" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" 328 | dependencies = [ 329 | "event-listener", 330 | "event-listener-strategy", 331 | "pin-project-lite", 332 | ] 333 | 334 | [[package]] 335 | name = "async-process" 336 | version = "2.5.0" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" 339 | dependencies = [ 340 | "async-channel", 341 | "async-io", 342 | "async-lock", 343 | "async-signal", 344 | "async-task", 345 | "blocking", 346 | "cfg-if", 347 | "event-listener", 348 | "futures-lite", 349 | "rustix 1.1.2", 350 | ] 351 | 352 | [[package]] 353 | name = "async-recursion" 354 | version = "1.1.1" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" 357 | dependencies = [ 358 | "proc-macro2", 359 | "quote", 360 | "syn", 361 | ] 362 | 363 | [[package]] 364 | name = "async-signal" 365 | version = "0.2.13" 366 | source = "registry+https://github.com/rust-lang/crates.io-index" 367 | checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" 368 | dependencies = [ 369 | "async-io", 370 | "async-lock", 371 | "atomic-waker", 372 | "cfg-if", 373 | "futures-core", 374 | "futures-io", 375 | "rustix 1.1.2", 376 | "signal-hook-registry", 377 | "slab", 378 | "windows-sys 0.61.0", 379 | ] 380 | 381 | [[package]] 382 | name = "async-task" 383 | version = "4.7.1" 384 | source = "registry+https://github.com/rust-lang/crates.io-index" 385 | checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 386 | 387 | [[package]] 388 | name = "async-trait" 389 | version = "0.1.89" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 392 | dependencies = [ 393 | "proc-macro2", 394 | "quote", 395 | "syn", 396 | ] 397 | 398 | [[package]] 399 | name = "atomic-waker" 400 | version = "1.1.2" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 403 | 404 | [[package]] 405 | name = "atspi" 406 | version = "0.25.0" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "c83247582e7508838caf5f316c00791eee0e15c0bf743e6880585b867e16815c" 409 | dependencies = [ 410 | "atspi-common", 411 | "atspi-connection", 412 | "atspi-proxies", 413 | ] 414 | 415 | [[package]] 416 | name = "atspi-common" 417 | version = "0.9.0" 418 | source = "registry+https://github.com/rust-lang/crates.io-index" 419 | checksum = "33dfc05e7cdf90988a197803bf24f5788f94f7c94a69efa95683e8ffe76cfdfb" 420 | dependencies = [ 421 | "enumflags2", 422 | "serde", 423 | "static_assertions", 424 | "zbus", 425 | "zbus-lockstep", 426 | "zbus-lockstep-macros", 427 | "zbus_names", 428 | "zvariant", 429 | ] 430 | 431 | [[package]] 432 | name = "atspi-connection" 433 | version = "0.9.0" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "4193d51303d8332304056ae0004714256b46b6635a5c556109b319c0d3784938" 436 | dependencies = [ 437 | "atspi-common", 438 | "atspi-proxies", 439 | "futures-lite", 440 | "zbus", 441 | ] 442 | 443 | [[package]] 444 | name = "atspi-proxies" 445 | version = "0.9.0" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "d2eebcb9e7e76f26d0bcfd6f0295e1cd1e6f33bedbc5698a971db8dc43d7751c" 448 | dependencies = [ 449 | "atspi-common", 450 | "serde", 451 | "zbus", 452 | ] 453 | 454 | [[package]] 455 | name = "autocfg" 456 | version = "1.5.0" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 459 | 460 | [[package]] 461 | name = "base64" 462 | version = "0.22.1" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 465 | 466 | [[package]] 467 | name = "bincode" 468 | version = "2.0.1" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" 471 | dependencies = [ 472 | "bincode_derive", 473 | "serde", 474 | "unty", 475 | ] 476 | 477 | [[package]] 478 | name = "bincode_derive" 479 | version = "2.0.1" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09" 482 | dependencies = [ 483 | "virtue", 484 | ] 485 | 486 | [[package]] 487 | name = "bit-set" 488 | version = "0.8.0" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 491 | dependencies = [ 492 | "bit-vec", 493 | ] 494 | 495 | [[package]] 496 | name = "bit-vec" 497 | version = "0.8.0" 498 | source = "registry+https://github.com/rust-lang/crates.io-index" 499 | checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 500 | 501 | [[package]] 502 | name = "bitflags" 503 | version = "1.3.2" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 506 | 507 | [[package]] 508 | name = "bitflags" 509 | version = "2.9.4" 510 | source = "registry+https://github.com/rust-lang/crates.io-index" 511 | checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" 512 | dependencies = [ 513 | "serde", 514 | ] 515 | 516 | [[package]] 517 | name = "block" 518 | version = "0.1.6" 519 | source = "registry+https://github.com/rust-lang/crates.io-index" 520 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 521 | 522 | [[package]] 523 | name = "block2" 524 | version = "0.5.1" 525 | source = "registry+https://github.com/rust-lang/crates.io-index" 526 | checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" 527 | dependencies = [ 528 | "objc2 0.5.2", 529 | ] 530 | 531 | [[package]] 532 | name = "blocking" 533 | version = "1.6.2" 534 | source = "registry+https://github.com/rust-lang/crates.io-index" 535 | checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" 536 | dependencies = [ 537 | "async-channel", 538 | "async-task", 539 | "futures-io", 540 | "futures-lite", 541 | "piper", 542 | ] 543 | 544 | [[package]] 545 | name = "bumpalo" 546 | version = "3.19.0" 547 | source = "registry+https://github.com/rust-lang/crates.io-index" 548 | checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 549 | 550 | [[package]] 551 | name = "bytemuck" 552 | version = "1.23.2" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" 555 | dependencies = [ 556 | "bytemuck_derive", 557 | ] 558 | 559 | [[package]] 560 | name = "bytemuck_derive" 561 | version = "1.10.1" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" 564 | dependencies = [ 565 | "proc-macro2", 566 | "quote", 567 | "syn", 568 | ] 569 | 570 | [[package]] 571 | name = "byteorder-lite" 572 | version = "0.1.0" 573 | source = "registry+https://github.com/rust-lang/crates.io-index" 574 | checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 575 | 576 | [[package]] 577 | name = "bytes" 578 | version = "1.10.1" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 581 | 582 | [[package]] 583 | name = "calloop" 584 | version = "0.13.0" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" 587 | dependencies = [ 588 | "bitflags 2.9.4", 589 | "log", 590 | "polling", 591 | "rustix 0.38.44", 592 | "slab", 593 | "thiserror 1.0.69", 594 | ] 595 | 596 | [[package]] 597 | name = "calloop-wayland-source" 598 | version = "0.3.0" 599 | source = "registry+https://github.com/rust-lang/crates.io-index" 600 | checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" 601 | dependencies = [ 602 | "calloop", 603 | "rustix 0.38.44", 604 | "wayland-backend", 605 | "wayland-client", 606 | ] 607 | 608 | [[package]] 609 | name = "cc" 610 | version = "1.2.38" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" 613 | dependencies = [ 614 | "find-msvc-tools", 615 | "jobserver", 616 | "libc", 617 | "shlex", 618 | ] 619 | 620 | [[package]] 621 | name = "cesu8" 622 | version = "1.1.0" 623 | source = "registry+https://github.com/rust-lang/crates.io-index" 624 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 625 | 626 | [[package]] 627 | name = "cfg-if" 628 | version = "1.0.3" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" 631 | 632 | [[package]] 633 | name = "cfg_aliases" 634 | version = "0.2.1" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 637 | 638 | [[package]] 639 | name = "cgl" 640 | version = "0.3.2" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" 643 | dependencies = [ 644 | "libc", 645 | ] 646 | 647 | [[package]] 648 | name = "clipboard-win" 649 | version = "5.4.1" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" 652 | dependencies = [ 653 | "error-code", 654 | ] 655 | 656 | [[package]] 657 | name = "codespan-reporting" 658 | version = "0.12.0" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" 661 | dependencies = [ 662 | "serde", 663 | "termcolor", 664 | "unicode-width", 665 | ] 666 | 667 | [[package]] 668 | name = "colorchoice" 669 | version = "1.0.4" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 672 | 673 | [[package]] 674 | name = "combine" 675 | version = "4.6.7" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 678 | dependencies = [ 679 | "bytes", 680 | "memchr", 681 | ] 682 | 683 | [[package]] 684 | name = "concurrent-queue" 685 | version = "2.5.0" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 688 | dependencies = [ 689 | "crossbeam-utils", 690 | ] 691 | 692 | [[package]] 693 | name = "console_error_panic_hook" 694 | version = "0.1.7" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 697 | dependencies = [ 698 | "cfg-if", 699 | "wasm-bindgen", 700 | ] 701 | 702 | [[package]] 703 | name = "console_log" 704 | version = "1.0.0" 705 | source = "registry+https://github.com/rust-lang/crates.io-index" 706 | checksum = "be8aed40e4edbf4d3b4431ab260b63fdc40f5780a4766824329ea0f1eefe3c0f" 707 | dependencies = [ 708 | "log", 709 | "wasm-bindgen", 710 | "web-sys", 711 | ] 712 | 713 | [[package]] 714 | name = "core-foundation" 715 | version = "0.9.4" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 718 | dependencies = [ 719 | "core-foundation-sys", 720 | "libc", 721 | ] 722 | 723 | [[package]] 724 | name = "core-foundation" 725 | version = "0.10.1" 726 | source = "registry+https://github.com/rust-lang/crates.io-index" 727 | checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 728 | dependencies = [ 729 | "core-foundation-sys", 730 | "libc", 731 | ] 732 | 733 | [[package]] 734 | name = "core-foundation-sys" 735 | version = "0.8.7" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 738 | 739 | [[package]] 740 | name = "core-graphics" 741 | version = "0.23.2" 742 | source = "registry+https://github.com/rust-lang/crates.io-index" 743 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" 744 | dependencies = [ 745 | "bitflags 1.3.2", 746 | "core-foundation 0.9.4", 747 | "core-graphics-types", 748 | "foreign-types", 749 | "libc", 750 | ] 751 | 752 | [[package]] 753 | name = "core-graphics-types" 754 | version = "0.1.3" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 757 | dependencies = [ 758 | "bitflags 1.3.2", 759 | "core-foundation 0.9.4", 760 | "libc", 761 | ] 762 | 763 | [[package]] 764 | name = "crc32fast" 765 | version = "1.5.0" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 768 | dependencies = [ 769 | "cfg-if", 770 | ] 771 | 772 | [[package]] 773 | name = "crossbeam-utils" 774 | version = "0.8.21" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 777 | 778 | [[package]] 779 | name = "crunchy" 780 | version = "0.2.4" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 783 | 784 | [[package]] 785 | name = "cursor-icon" 786 | version = "1.2.0" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" 789 | 790 | [[package]] 791 | name = "dispatch" 792 | version = "0.2.0" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 795 | 796 | [[package]] 797 | name = "dispatch2" 798 | version = "0.3.0" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 801 | dependencies = [ 802 | "bitflags 2.9.4", 803 | "objc2 0.6.2", 804 | ] 805 | 806 | [[package]] 807 | name = "displaydoc" 808 | version = "0.2.5" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 811 | dependencies = [ 812 | "proc-macro2", 813 | "quote", 814 | "syn", 815 | ] 816 | 817 | [[package]] 818 | name = "dlib" 819 | version = "0.5.2" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" 822 | dependencies = [ 823 | "libloading", 824 | ] 825 | 826 | [[package]] 827 | name = "document-features" 828 | version = "0.2.11" 829 | source = "registry+https://github.com/rust-lang/crates.io-index" 830 | checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 831 | dependencies = [ 832 | "litrs", 833 | ] 834 | 835 | [[package]] 836 | name = "downcast-rs" 837 | version = "1.2.1" 838 | source = "registry+https://github.com/rust-lang/crates.io-index" 839 | checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" 840 | 841 | [[package]] 842 | name = "dpi" 843 | version = "0.1.2" 844 | source = "registry+https://github.com/rust-lang/crates.io-index" 845 | checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" 846 | 847 | [[package]] 848 | name = "ecolor" 849 | version = "0.32.3" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | checksum = "94bdf37f8d5bd9aa7f753573fdda9cf7343afa73dd28d7bfe9593bd9798fc07e" 852 | dependencies = [ 853 | "bytemuck", 854 | "emath", 855 | ] 856 | 857 | [[package]] 858 | name = "eframe" 859 | version = "0.32.3" 860 | source = "registry+https://github.com/rust-lang/crates.io-index" 861 | checksum = "14d1c15e7bd136b309bd3487e6ffe5f668b354cd9768636a836dd738ac90eb0b" 862 | dependencies = [ 863 | "ahash", 864 | "bytemuck", 865 | "document-features", 866 | "egui", 867 | "egui-wgpu", 868 | "egui-winit", 869 | "egui_glow", 870 | "glutin", 871 | "glutin-winit", 872 | "image", 873 | "js-sys", 874 | "log", 875 | "objc2 0.5.2", 876 | "objc2-app-kit 0.2.2", 877 | "objc2-foundation 0.2.2", 878 | "parking_lot", 879 | "percent-encoding", 880 | "pollster", 881 | "profiling", 882 | "raw-window-handle", 883 | "static_assertions", 884 | "wasm-bindgen", 885 | "wasm-bindgen-futures", 886 | "web-sys", 887 | "web-time", 888 | "wgpu", 889 | "winapi", 890 | "windows-sys 0.59.0", 891 | "winit", 892 | ] 893 | 894 | [[package]] 895 | name = "egui" 896 | version = "0.32.3" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "5d5d0306cd61ca75e29682926d71f2390160247f135965242e904a636f51c0dc" 899 | dependencies = [ 900 | "accesskit", 901 | "ahash", 902 | "bitflags 2.9.4", 903 | "emath", 904 | "epaint", 905 | "log", 906 | "nohash-hasher", 907 | "profiling", 908 | "smallvec", 909 | "unicode-segmentation", 910 | ] 911 | 912 | [[package]] 913 | name = "egui-wgpu" 914 | version = "0.32.3" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "c12eca13293f8eba27a32aaaa1c765bfbf31acd43e8d30d5881dcbe5e99ca0c7" 917 | dependencies = [ 918 | "ahash", 919 | "bytemuck", 920 | "document-features", 921 | "egui", 922 | "epaint", 923 | "log", 924 | "profiling", 925 | "thiserror 1.0.69", 926 | "type-map", 927 | "web-time", 928 | "wgpu", 929 | "winit", 930 | ] 931 | 932 | [[package]] 933 | name = "egui-winit" 934 | version = "0.32.3" 935 | source = "registry+https://github.com/rust-lang/crates.io-index" 936 | checksum = "f95d0a91f9cb0dc2e732d49c2d521ac8948e1f0b758f306fb7b14d6f5db3927f" 937 | dependencies = [ 938 | "accesskit_winit", 939 | "ahash", 940 | "arboard", 941 | "bytemuck", 942 | "egui", 943 | "log", 944 | "profiling", 945 | "raw-window-handle", 946 | "smithay-clipboard", 947 | "web-time", 948 | "webbrowser", 949 | "winit", 950 | ] 951 | 952 | [[package]] 953 | name = "egui_glow" 954 | version = "0.32.3" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | checksum = "cc7037813341727937f9e22f78d912f3e29bc3c46e2f40a9e82bb51cbf5e4cfb" 957 | dependencies = [ 958 | "ahash", 959 | "bytemuck", 960 | "egui", 961 | "glow", 962 | "log", 963 | "memoffset", 964 | "profiling", 965 | "wasm-bindgen", 966 | "web-sys", 967 | "winit", 968 | ] 969 | 970 | [[package]] 971 | name = "emath" 972 | version = "0.32.3" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "45fd7bc25f769a3c198fe1cf183124bf4de3bd62ef7b4f1eaf6b08711a3af8db" 975 | dependencies = [ 976 | "bytemuck", 977 | ] 978 | 979 | [[package]] 980 | name = "endi" 981 | version = "1.1.0" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" 984 | 985 | [[package]] 986 | name = "enumflags2" 987 | version = "0.7.12" 988 | source = "registry+https://github.com/rust-lang/crates.io-index" 989 | checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" 990 | dependencies = [ 991 | "enumflags2_derive", 992 | "serde", 993 | ] 994 | 995 | [[package]] 996 | name = "enumflags2_derive" 997 | version = "0.7.12" 998 | source = "registry+https://github.com/rust-lang/crates.io-index" 999 | checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" 1000 | dependencies = [ 1001 | "proc-macro2", 1002 | "quote", 1003 | "syn", 1004 | ] 1005 | 1006 | [[package]] 1007 | name = "env_filter" 1008 | version = "0.1.3" 1009 | source = "registry+https://github.com/rust-lang/crates.io-index" 1010 | checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" 1011 | dependencies = [ 1012 | "log", 1013 | "regex", 1014 | ] 1015 | 1016 | [[package]] 1017 | name = "env_logger" 1018 | version = "0.11.8" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" 1021 | dependencies = [ 1022 | "anstream", 1023 | "anstyle", 1024 | "env_filter", 1025 | "jiff", 1026 | "log", 1027 | ] 1028 | 1029 | [[package]] 1030 | name = "epaint" 1031 | version = "0.32.3" 1032 | source = "registry+https://github.com/rust-lang/crates.io-index" 1033 | checksum = "63adcea970b7a13094fe97a36ab9307c35a750f9e24bf00bb7ef3de573e0fddb" 1034 | dependencies = [ 1035 | "ab_glyph", 1036 | "ahash", 1037 | "bytemuck", 1038 | "ecolor", 1039 | "emath", 1040 | "epaint_default_fonts", 1041 | "log", 1042 | "nohash-hasher", 1043 | "parking_lot", 1044 | "profiling", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "epaint_default_fonts" 1049 | version = "0.32.3" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | checksum = "1537accc50c9cab5a272c39300bdd0dd5dca210f6e5e8d70be048df9596e7ca2" 1052 | 1053 | [[package]] 1054 | name = "equivalent" 1055 | version = "1.0.2" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 1058 | 1059 | [[package]] 1060 | name = "errno" 1061 | version = "0.3.14" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 1064 | dependencies = [ 1065 | "libc", 1066 | "windows-sys 0.61.0", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "error-code" 1071 | version = "3.3.2" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" 1074 | 1075 | [[package]] 1076 | name = "event-listener" 1077 | version = "5.4.1" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 1080 | dependencies = [ 1081 | "concurrent-queue", 1082 | "parking", 1083 | "pin-project-lite", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "event-listener-strategy" 1088 | version = "0.5.4" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 1091 | dependencies = [ 1092 | "event-listener", 1093 | "pin-project-lite", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "fastrand" 1098 | version = "2.3.0" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1101 | 1102 | [[package]] 1103 | name = "fax" 1104 | version = "0.2.6" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" 1107 | dependencies = [ 1108 | "fax_derive", 1109 | ] 1110 | 1111 | [[package]] 1112 | name = "fax_derive" 1113 | version = "0.2.0" 1114 | source = "registry+https://github.com/rust-lang/crates.io-index" 1115 | checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" 1116 | dependencies = [ 1117 | "proc-macro2", 1118 | "quote", 1119 | "syn", 1120 | ] 1121 | 1122 | [[package]] 1123 | name = "fdeflate" 1124 | version = "0.3.7" 1125 | source = "registry+https://github.com/rust-lang/crates.io-index" 1126 | checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 1127 | dependencies = [ 1128 | "simd-adler32", 1129 | ] 1130 | 1131 | [[package]] 1132 | name = "find-msvc-tools" 1133 | version = "0.1.2" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" 1136 | 1137 | [[package]] 1138 | name = "fixedbitset" 1139 | version = "0.4.2" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" 1142 | 1143 | [[package]] 1144 | name = "flate2" 1145 | version = "1.1.2" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" 1148 | dependencies = [ 1149 | "crc32fast", 1150 | "miniz_oxide", 1151 | ] 1152 | 1153 | [[package]] 1154 | name = "foldhash" 1155 | version = "0.1.5" 1156 | source = "registry+https://github.com/rust-lang/crates.io-index" 1157 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1158 | 1159 | [[package]] 1160 | name = "foreign-types" 1161 | version = "0.5.0" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 1164 | dependencies = [ 1165 | "foreign-types-macros", 1166 | "foreign-types-shared", 1167 | ] 1168 | 1169 | [[package]] 1170 | name = "foreign-types-macros" 1171 | version = "0.2.3" 1172 | source = "registry+https://github.com/rust-lang/crates.io-index" 1173 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 1174 | dependencies = [ 1175 | "proc-macro2", 1176 | "quote", 1177 | "syn", 1178 | ] 1179 | 1180 | [[package]] 1181 | name = "foreign-types-shared" 1182 | version = "0.3.1" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 1185 | 1186 | [[package]] 1187 | name = "form_urlencoded" 1188 | version = "1.2.2" 1189 | source = "registry+https://github.com/rust-lang/crates.io-index" 1190 | checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 1191 | dependencies = [ 1192 | "percent-encoding", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "fractal_viewer" 1197 | version = "2.1.2" 1198 | dependencies = [ 1199 | "arboard", 1200 | "base64", 1201 | "bincode", 1202 | "bytemuck", 1203 | "console_error_panic_hook", 1204 | "console_log", 1205 | "eframe", 1206 | "egui-wgpu", 1207 | "env_logger", 1208 | "instant", 1209 | "log", 1210 | "naga", 1211 | "serde", 1212 | "url", 1213 | "wasm-bindgen", 1214 | "wasm-bindgen-futures", 1215 | "web-sys", 1216 | "wgpu", 1217 | ] 1218 | 1219 | [[package]] 1220 | name = "futures-core" 1221 | version = "0.3.31" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1224 | 1225 | [[package]] 1226 | name = "futures-io" 1227 | version = "0.3.31" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1230 | 1231 | [[package]] 1232 | name = "futures-lite" 1233 | version = "2.6.1" 1234 | source = "registry+https://github.com/rust-lang/crates.io-index" 1235 | checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1236 | dependencies = [ 1237 | "fastrand", 1238 | "futures-core", 1239 | "futures-io", 1240 | "parking", 1241 | "pin-project-lite", 1242 | ] 1243 | 1244 | [[package]] 1245 | name = "futures-macro" 1246 | version = "0.3.31" 1247 | source = "registry+https://github.com/rust-lang/crates.io-index" 1248 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 1249 | dependencies = [ 1250 | "proc-macro2", 1251 | "quote", 1252 | "syn", 1253 | ] 1254 | 1255 | [[package]] 1256 | name = "futures-task" 1257 | version = "0.3.31" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1260 | 1261 | [[package]] 1262 | name = "futures-util" 1263 | version = "0.3.31" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1266 | dependencies = [ 1267 | "futures-core", 1268 | "futures-macro", 1269 | "futures-task", 1270 | "pin-project-lite", 1271 | "pin-utils", 1272 | "slab", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "gethostname" 1277 | version = "1.0.2" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" 1280 | dependencies = [ 1281 | "rustix 1.1.2", 1282 | "windows-targets 0.52.6", 1283 | ] 1284 | 1285 | [[package]] 1286 | name = "getrandom" 1287 | version = "0.3.3" 1288 | source = "registry+https://github.com/rust-lang/crates.io-index" 1289 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1290 | dependencies = [ 1291 | "cfg-if", 1292 | "libc", 1293 | "r-efi", 1294 | "wasi", 1295 | ] 1296 | 1297 | [[package]] 1298 | name = "gl_generator" 1299 | version = "0.14.0" 1300 | source = "registry+https://github.com/rust-lang/crates.io-index" 1301 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 1302 | dependencies = [ 1303 | "khronos_api", 1304 | "log", 1305 | "xml-rs", 1306 | ] 1307 | 1308 | [[package]] 1309 | name = "glow" 1310 | version = "0.16.0" 1311 | source = "registry+https://github.com/rust-lang/crates.io-index" 1312 | checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" 1313 | dependencies = [ 1314 | "js-sys", 1315 | "slotmap", 1316 | "wasm-bindgen", 1317 | "web-sys", 1318 | ] 1319 | 1320 | [[package]] 1321 | name = "glutin" 1322 | version = "0.32.3" 1323 | source = "registry+https://github.com/rust-lang/crates.io-index" 1324 | checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" 1325 | dependencies = [ 1326 | "bitflags 2.9.4", 1327 | "cfg_aliases", 1328 | "cgl", 1329 | "dispatch2", 1330 | "glutin_egl_sys", 1331 | "glutin_wgl_sys", 1332 | "libloading", 1333 | "objc2 0.6.2", 1334 | "objc2-app-kit 0.3.1", 1335 | "objc2-core-foundation", 1336 | "objc2-foundation 0.3.1", 1337 | "once_cell", 1338 | "raw-window-handle", 1339 | "wayland-sys", 1340 | "windows-sys 0.52.0", 1341 | ] 1342 | 1343 | [[package]] 1344 | name = "glutin-winit" 1345 | version = "0.5.0" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" 1348 | dependencies = [ 1349 | "cfg_aliases", 1350 | "glutin", 1351 | "raw-window-handle", 1352 | "winit", 1353 | ] 1354 | 1355 | [[package]] 1356 | name = "glutin_egl_sys" 1357 | version = "0.7.1" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" 1360 | dependencies = [ 1361 | "gl_generator", 1362 | "windows-sys 0.52.0", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "glutin_wgl_sys" 1367 | version = "0.6.1" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" 1370 | dependencies = [ 1371 | "gl_generator", 1372 | ] 1373 | 1374 | [[package]] 1375 | name = "gpu-alloc" 1376 | version = "0.6.0" 1377 | source = "registry+https://github.com/rust-lang/crates.io-index" 1378 | checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" 1379 | dependencies = [ 1380 | "bitflags 2.9.4", 1381 | "gpu-alloc-types", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "gpu-alloc-types" 1386 | version = "0.3.0" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" 1389 | dependencies = [ 1390 | "bitflags 2.9.4", 1391 | ] 1392 | 1393 | [[package]] 1394 | name = "gpu-allocator" 1395 | version = "0.27.0" 1396 | source = "registry+https://github.com/rust-lang/crates.io-index" 1397 | checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" 1398 | dependencies = [ 1399 | "log", 1400 | "presser", 1401 | "thiserror 1.0.69", 1402 | "windows 0.58.0", 1403 | ] 1404 | 1405 | [[package]] 1406 | name = "gpu-descriptor" 1407 | version = "0.3.2" 1408 | source = "registry+https://github.com/rust-lang/crates.io-index" 1409 | checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" 1410 | dependencies = [ 1411 | "bitflags 2.9.4", 1412 | "gpu-descriptor-types", 1413 | "hashbrown 0.15.5", 1414 | ] 1415 | 1416 | [[package]] 1417 | name = "gpu-descriptor-types" 1418 | version = "0.2.0" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" 1421 | dependencies = [ 1422 | "bitflags 2.9.4", 1423 | ] 1424 | 1425 | [[package]] 1426 | name = "half" 1427 | version = "2.6.0" 1428 | source = "registry+https://github.com/rust-lang/crates.io-index" 1429 | checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" 1430 | dependencies = [ 1431 | "cfg-if", 1432 | "crunchy", 1433 | "num-traits", 1434 | ] 1435 | 1436 | [[package]] 1437 | name = "hashbrown" 1438 | version = "0.15.5" 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" 1440 | checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1441 | dependencies = [ 1442 | "foldhash", 1443 | ] 1444 | 1445 | [[package]] 1446 | name = "hashbrown" 1447 | version = "0.16.0" 1448 | source = "registry+https://github.com/rust-lang/crates.io-index" 1449 | checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1450 | 1451 | [[package]] 1452 | name = "heck" 1453 | version = "0.5.0" 1454 | source = "registry+https://github.com/rust-lang/crates.io-index" 1455 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1456 | 1457 | [[package]] 1458 | name = "hermit-abi" 1459 | version = "0.5.2" 1460 | source = "registry+https://github.com/rust-lang/crates.io-index" 1461 | checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1462 | 1463 | [[package]] 1464 | name = "hex" 1465 | version = "0.4.3" 1466 | source = "registry+https://github.com/rust-lang/crates.io-index" 1467 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1468 | 1469 | [[package]] 1470 | name = "hexf-parse" 1471 | version = "0.2.1" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 1474 | 1475 | [[package]] 1476 | name = "icu_collections" 1477 | version = "2.0.0" 1478 | source = "registry+https://github.com/rust-lang/crates.io-index" 1479 | checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1480 | dependencies = [ 1481 | "displaydoc", 1482 | "potential_utf", 1483 | "yoke", 1484 | "zerofrom", 1485 | "zerovec", 1486 | ] 1487 | 1488 | [[package]] 1489 | name = "icu_locale_core" 1490 | version = "2.0.0" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1493 | dependencies = [ 1494 | "displaydoc", 1495 | "litemap", 1496 | "tinystr", 1497 | "writeable", 1498 | "zerovec", 1499 | ] 1500 | 1501 | [[package]] 1502 | name = "icu_normalizer" 1503 | version = "2.0.0" 1504 | source = "registry+https://github.com/rust-lang/crates.io-index" 1505 | checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 1506 | dependencies = [ 1507 | "displaydoc", 1508 | "icu_collections", 1509 | "icu_normalizer_data", 1510 | "icu_properties", 1511 | "icu_provider", 1512 | "smallvec", 1513 | "zerovec", 1514 | ] 1515 | 1516 | [[package]] 1517 | name = "icu_normalizer_data" 1518 | version = "2.0.0" 1519 | source = "registry+https://github.com/rust-lang/crates.io-index" 1520 | checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 1521 | 1522 | [[package]] 1523 | name = "icu_properties" 1524 | version = "2.0.1" 1525 | source = "registry+https://github.com/rust-lang/crates.io-index" 1526 | checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 1527 | dependencies = [ 1528 | "displaydoc", 1529 | "icu_collections", 1530 | "icu_locale_core", 1531 | "icu_properties_data", 1532 | "icu_provider", 1533 | "potential_utf", 1534 | "zerotrie", 1535 | "zerovec", 1536 | ] 1537 | 1538 | [[package]] 1539 | name = "icu_properties_data" 1540 | version = "2.0.1" 1541 | source = "registry+https://github.com/rust-lang/crates.io-index" 1542 | checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 1543 | 1544 | [[package]] 1545 | name = "icu_provider" 1546 | version = "2.0.0" 1547 | source = "registry+https://github.com/rust-lang/crates.io-index" 1548 | checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 1549 | dependencies = [ 1550 | "displaydoc", 1551 | "icu_locale_core", 1552 | "stable_deref_trait", 1553 | "tinystr", 1554 | "writeable", 1555 | "yoke", 1556 | "zerofrom", 1557 | "zerotrie", 1558 | "zerovec", 1559 | ] 1560 | 1561 | [[package]] 1562 | name = "idna" 1563 | version = "1.1.0" 1564 | source = "registry+https://github.com/rust-lang/crates.io-index" 1565 | checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 1566 | dependencies = [ 1567 | "idna_adapter", 1568 | "smallvec", 1569 | "utf8_iter", 1570 | ] 1571 | 1572 | [[package]] 1573 | name = "idna_adapter" 1574 | version = "1.2.1" 1575 | source = "registry+https://github.com/rust-lang/crates.io-index" 1576 | checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1577 | dependencies = [ 1578 | "icu_normalizer", 1579 | "icu_properties", 1580 | ] 1581 | 1582 | [[package]] 1583 | name = "image" 1584 | version = "0.25.8" 1585 | source = "registry+https://github.com/rust-lang/crates.io-index" 1586 | checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" 1587 | dependencies = [ 1588 | "bytemuck", 1589 | "byteorder-lite", 1590 | "moxcms", 1591 | "num-traits", 1592 | "png", 1593 | "tiff", 1594 | ] 1595 | 1596 | [[package]] 1597 | name = "indexmap" 1598 | version = "2.11.4" 1599 | source = "registry+https://github.com/rust-lang/crates.io-index" 1600 | checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" 1601 | dependencies = [ 1602 | "equivalent", 1603 | "hashbrown 0.16.0", 1604 | ] 1605 | 1606 | [[package]] 1607 | name = "instant" 1608 | version = "0.1.13" 1609 | source = "registry+https://github.com/rust-lang/crates.io-index" 1610 | checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 1611 | dependencies = [ 1612 | "cfg-if", 1613 | "js-sys", 1614 | "wasm-bindgen", 1615 | "web-sys", 1616 | ] 1617 | 1618 | [[package]] 1619 | name = "is_terminal_polyfill" 1620 | version = "1.70.1" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1623 | 1624 | [[package]] 1625 | name = "jiff" 1626 | version = "0.2.15" 1627 | source = "registry+https://github.com/rust-lang/crates.io-index" 1628 | checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" 1629 | dependencies = [ 1630 | "jiff-static", 1631 | "log", 1632 | "portable-atomic", 1633 | "portable-atomic-util", 1634 | "serde", 1635 | ] 1636 | 1637 | [[package]] 1638 | name = "jiff-static" 1639 | version = "0.2.15" 1640 | source = "registry+https://github.com/rust-lang/crates.io-index" 1641 | checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" 1642 | dependencies = [ 1643 | "proc-macro2", 1644 | "quote", 1645 | "syn", 1646 | ] 1647 | 1648 | [[package]] 1649 | name = "jni" 1650 | version = "0.21.1" 1651 | source = "registry+https://github.com/rust-lang/crates.io-index" 1652 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1653 | dependencies = [ 1654 | "cesu8", 1655 | "cfg-if", 1656 | "combine", 1657 | "jni-sys", 1658 | "log", 1659 | "thiserror 1.0.69", 1660 | "walkdir", 1661 | "windows-sys 0.45.0", 1662 | ] 1663 | 1664 | [[package]] 1665 | name = "jni-sys" 1666 | version = "0.3.0" 1667 | source = "registry+https://github.com/rust-lang/crates.io-index" 1668 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1669 | 1670 | [[package]] 1671 | name = "jobserver" 1672 | version = "0.1.34" 1673 | source = "registry+https://github.com/rust-lang/crates.io-index" 1674 | checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 1675 | dependencies = [ 1676 | "getrandom", 1677 | "libc", 1678 | ] 1679 | 1680 | [[package]] 1681 | name = "js-sys" 1682 | version = "0.3.80" 1683 | source = "registry+https://github.com/rust-lang/crates.io-index" 1684 | checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" 1685 | dependencies = [ 1686 | "once_cell", 1687 | "wasm-bindgen", 1688 | ] 1689 | 1690 | [[package]] 1691 | name = "khronos-egl" 1692 | version = "6.0.0" 1693 | source = "registry+https://github.com/rust-lang/crates.io-index" 1694 | checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" 1695 | dependencies = [ 1696 | "libc", 1697 | "libloading", 1698 | "pkg-config", 1699 | ] 1700 | 1701 | [[package]] 1702 | name = "khronos_api" 1703 | version = "3.1.0" 1704 | source = "registry+https://github.com/rust-lang/crates.io-index" 1705 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1706 | 1707 | [[package]] 1708 | name = "libc" 1709 | version = "0.2.175" 1710 | source = "registry+https://github.com/rust-lang/crates.io-index" 1711 | checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" 1712 | 1713 | [[package]] 1714 | name = "libloading" 1715 | version = "0.8.9" 1716 | source = "registry+https://github.com/rust-lang/crates.io-index" 1717 | checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" 1718 | dependencies = [ 1719 | "cfg-if", 1720 | "windows-link 0.2.0", 1721 | ] 1722 | 1723 | [[package]] 1724 | name = "libm" 1725 | version = "0.2.15" 1726 | source = "registry+https://github.com/rust-lang/crates.io-index" 1727 | checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 1728 | 1729 | [[package]] 1730 | name = "libredox" 1731 | version = "0.1.10" 1732 | source = "registry+https://github.com/rust-lang/crates.io-index" 1733 | checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" 1734 | dependencies = [ 1735 | "bitflags 2.9.4", 1736 | "libc", 1737 | "redox_syscall 0.5.17", 1738 | ] 1739 | 1740 | [[package]] 1741 | name = "linux-raw-sys" 1742 | version = "0.4.15" 1743 | source = "registry+https://github.com/rust-lang/crates.io-index" 1744 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1745 | 1746 | [[package]] 1747 | name = "linux-raw-sys" 1748 | version = "0.11.0" 1749 | source = "registry+https://github.com/rust-lang/crates.io-index" 1750 | checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 1751 | 1752 | [[package]] 1753 | name = "litemap" 1754 | version = "0.8.0" 1755 | source = "registry+https://github.com/rust-lang/crates.io-index" 1756 | checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 1757 | 1758 | [[package]] 1759 | name = "litrs" 1760 | version = "0.4.2" 1761 | source = "registry+https://github.com/rust-lang/crates.io-index" 1762 | checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" 1763 | 1764 | [[package]] 1765 | name = "lock_api" 1766 | version = "0.4.13" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 1769 | dependencies = [ 1770 | "autocfg", 1771 | "scopeguard", 1772 | ] 1773 | 1774 | [[package]] 1775 | name = "log" 1776 | version = "0.4.28" 1777 | source = "registry+https://github.com/rust-lang/crates.io-index" 1778 | checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 1779 | 1780 | [[package]] 1781 | name = "malloc_buf" 1782 | version = "0.0.6" 1783 | source = "registry+https://github.com/rust-lang/crates.io-index" 1784 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1785 | dependencies = [ 1786 | "libc", 1787 | ] 1788 | 1789 | [[package]] 1790 | name = "memchr" 1791 | version = "2.7.5" 1792 | source = "registry+https://github.com/rust-lang/crates.io-index" 1793 | checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 1794 | 1795 | [[package]] 1796 | name = "memmap2" 1797 | version = "0.9.8" 1798 | source = "registry+https://github.com/rust-lang/crates.io-index" 1799 | checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" 1800 | dependencies = [ 1801 | "libc", 1802 | ] 1803 | 1804 | [[package]] 1805 | name = "memoffset" 1806 | version = "0.9.1" 1807 | source = "registry+https://github.com/rust-lang/crates.io-index" 1808 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1809 | dependencies = [ 1810 | "autocfg", 1811 | ] 1812 | 1813 | [[package]] 1814 | name = "metal" 1815 | version = "0.31.0" 1816 | source = "registry+https://github.com/rust-lang/crates.io-index" 1817 | checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" 1818 | dependencies = [ 1819 | "bitflags 2.9.4", 1820 | "block", 1821 | "core-graphics-types", 1822 | "foreign-types", 1823 | "log", 1824 | "objc", 1825 | "paste", 1826 | ] 1827 | 1828 | [[package]] 1829 | name = "minimal-lexical" 1830 | version = "0.2.1" 1831 | source = "registry+https://github.com/rust-lang/crates.io-index" 1832 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1833 | 1834 | [[package]] 1835 | name = "miniz_oxide" 1836 | version = "0.8.9" 1837 | source = "registry+https://github.com/rust-lang/crates.io-index" 1838 | checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 1839 | dependencies = [ 1840 | "adler2", 1841 | "simd-adler32", 1842 | ] 1843 | 1844 | [[package]] 1845 | name = "moxcms" 1846 | version = "0.7.5" 1847 | source = "registry+https://github.com/rust-lang/crates.io-index" 1848 | checksum = "ddd32fa8935aeadb8a8a6b6b351e40225570a37c43de67690383d87ef170cd08" 1849 | dependencies = [ 1850 | "num-traits", 1851 | "pxfm", 1852 | ] 1853 | 1854 | [[package]] 1855 | name = "naga" 1856 | version = "25.0.1" 1857 | source = "registry+https://github.com/rust-lang/crates.io-index" 1858 | checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632" 1859 | dependencies = [ 1860 | "arrayvec", 1861 | "bit-set", 1862 | "bitflags 2.9.4", 1863 | "cfg_aliases", 1864 | "codespan-reporting", 1865 | "half", 1866 | "hashbrown 0.15.5", 1867 | "hexf-parse", 1868 | "indexmap", 1869 | "log", 1870 | "num-traits", 1871 | "once_cell", 1872 | "rustc-hash 1.1.0", 1873 | "spirv", 1874 | "strum", 1875 | "thiserror 2.0.16", 1876 | "unicode-ident", 1877 | ] 1878 | 1879 | [[package]] 1880 | name = "ndk" 1881 | version = "0.9.0" 1882 | source = "registry+https://github.com/rust-lang/crates.io-index" 1883 | checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 1884 | dependencies = [ 1885 | "bitflags 2.9.4", 1886 | "jni-sys", 1887 | "log", 1888 | "ndk-sys 0.6.0+11769913", 1889 | "num_enum", 1890 | "raw-window-handle", 1891 | "thiserror 1.0.69", 1892 | ] 1893 | 1894 | [[package]] 1895 | name = "ndk-context" 1896 | version = "0.1.1" 1897 | source = "registry+https://github.com/rust-lang/crates.io-index" 1898 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1899 | 1900 | [[package]] 1901 | name = "ndk-sys" 1902 | version = "0.5.0+25.2.9519653" 1903 | source = "registry+https://github.com/rust-lang/crates.io-index" 1904 | checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" 1905 | dependencies = [ 1906 | "jni-sys", 1907 | ] 1908 | 1909 | [[package]] 1910 | name = "ndk-sys" 1911 | version = "0.6.0+11769913" 1912 | source = "registry+https://github.com/rust-lang/crates.io-index" 1913 | checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" 1914 | dependencies = [ 1915 | "jni-sys", 1916 | ] 1917 | 1918 | [[package]] 1919 | name = "nix" 1920 | version = "0.30.1" 1921 | source = "registry+https://github.com/rust-lang/crates.io-index" 1922 | checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 1923 | dependencies = [ 1924 | "bitflags 2.9.4", 1925 | "cfg-if", 1926 | "cfg_aliases", 1927 | "libc", 1928 | "memoffset", 1929 | ] 1930 | 1931 | [[package]] 1932 | name = "nohash-hasher" 1933 | version = "0.2.0" 1934 | source = "registry+https://github.com/rust-lang/crates.io-index" 1935 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 1936 | 1937 | [[package]] 1938 | name = "nom" 1939 | version = "7.1.3" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1942 | dependencies = [ 1943 | "memchr", 1944 | "minimal-lexical", 1945 | ] 1946 | 1947 | [[package]] 1948 | name = "num-traits" 1949 | version = "0.2.19" 1950 | source = "registry+https://github.com/rust-lang/crates.io-index" 1951 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1952 | dependencies = [ 1953 | "autocfg", 1954 | "libm", 1955 | ] 1956 | 1957 | [[package]] 1958 | name = "num_enum" 1959 | version = "0.7.4" 1960 | source = "registry+https://github.com/rust-lang/crates.io-index" 1961 | checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" 1962 | dependencies = [ 1963 | "num_enum_derive", 1964 | "rustversion", 1965 | ] 1966 | 1967 | [[package]] 1968 | name = "num_enum_derive" 1969 | version = "0.7.4" 1970 | source = "registry+https://github.com/rust-lang/crates.io-index" 1971 | checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" 1972 | dependencies = [ 1973 | "proc-macro-crate", 1974 | "proc-macro2", 1975 | "quote", 1976 | "syn", 1977 | ] 1978 | 1979 | [[package]] 1980 | name = "objc" 1981 | version = "0.2.7" 1982 | source = "registry+https://github.com/rust-lang/crates.io-index" 1983 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1984 | dependencies = [ 1985 | "malloc_buf", 1986 | ] 1987 | 1988 | [[package]] 1989 | name = "objc-sys" 1990 | version = "0.3.5" 1991 | source = "registry+https://github.com/rust-lang/crates.io-index" 1992 | checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 1993 | 1994 | [[package]] 1995 | name = "objc2" 1996 | version = "0.5.2" 1997 | source = "registry+https://github.com/rust-lang/crates.io-index" 1998 | checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 1999 | dependencies = [ 2000 | "objc-sys", 2001 | "objc2-encode", 2002 | ] 2003 | 2004 | [[package]] 2005 | name = "objc2" 2006 | version = "0.6.2" 2007 | source = "registry+https://github.com/rust-lang/crates.io-index" 2008 | checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" 2009 | dependencies = [ 2010 | "objc2-encode", 2011 | ] 2012 | 2013 | [[package]] 2014 | name = "objc2-app-kit" 2015 | version = "0.2.2" 2016 | source = "registry+https://github.com/rust-lang/crates.io-index" 2017 | checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" 2018 | dependencies = [ 2019 | "bitflags 2.9.4", 2020 | "block2", 2021 | "libc", 2022 | "objc2 0.5.2", 2023 | "objc2-core-data", 2024 | "objc2-core-image", 2025 | "objc2-foundation 0.2.2", 2026 | "objc2-quartz-core", 2027 | ] 2028 | 2029 | [[package]] 2030 | name = "objc2-app-kit" 2031 | version = "0.3.1" 2032 | source = "registry+https://github.com/rust-lang/crates.io-index" 2033 | checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" 2034 | dependencies = [ 2035 | "bitflags 2.9.4", 2036 | "objc2 0.6.2", 2037 | "objc2-core-foundation", 2038 | "objc2-core-graphics", 2039 | "objc2-foundation 0.3.1", 2040 | ] 2041 | 2042 | [[package]] 2043 | name = "objc2-cloud-kit" 2044 | version = "0.2.2" 2045 | source = "registry+https://github.com/rust-lang/crates.io-index" 2046 | checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" 2047 | dependencies = [ 2048 | "bitflags 2.9.4", 2049 | "block2", 2050 | "objc2 0.5.2", 2051 | "objc2-core-location", 2052 | "objc2-foundation 0.2.2", 2053 | ] 2054 | 2055 | [[package]] 2056 | name = "objc2-contacts" 2057 | version = "0.2.2" 2058 | source = "registry+https://github.com/rust-lang/crates.io-index" 2059 | checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" 2060 | dependencies = [ 2061 | "block2", 2062 | "objc2 0.5.2", 2063 | "objc2-foundation 0.2.2", 2064 | ] 2065 | 2066 | [[package]] 2067 | name = "objc2-core-data" 2068 | version = "0.2.2" 2069 | source = "registry+https://github.com/rust-lang/crates.io-index" 2070 | checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" 2071 | dependencies = [ 2072 | "bitflags 2.9.4", 2073 | "block2", 2074 | "objc2 0.5.2", 2075 | "objc2-foundation 0.2.2", 2076 | ] 2077 | 2078 | [[package]] 2079 | name = "objc2-core-foundation" 2080 | version = "0.3.1" 2081 | source = "registry+https://github.com/rust-lang/crates.io-index" 2082 | checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" 2083 | dependencies = [ 2084 | "bitflags 2.9.4", 2085 | "dispatch2", 2086 | "objc2 0.6.2", 2087 | ] 2088 | 2089 | [[package]] 2090 | name = "objc2-core-graphics" 2091 | version = "0.3.1" 2092 | source = "registry+https://github.com/rust-lang/crates.io-index" 2093 | checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" 2094 | dependencies = [ 2095 | "bitflags 2.9.4", 2096 | "dispatch2", 2097 | "objc2 0.6.2", 2098 | "objc2-core-foundation", 2099 | "objc2-io-surface", 2100 | ] 2101 | 2102 | [[package]] 2103 | name = "objc2-core-image" 2104 | version = "0.2.2" 2105 | source = "registry+https://github.com/rust-lang/crates.io-index" 2106 | checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" 2107 | dependencies = [ 2108 | "block2", 2109 | "objc2 0.5.2", 2110 | "objc2-foundation 0.2.2", 2111 | "objc2-metal", 2112 | ] 2113 | 2114 | [[package]] 2115 | name = "objc2-core-location" 2116 | version = "0.2.2" 2117 | source = "registry+https://github.com/rust-lang/crates.io-index" 2118 | checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" 2119 | dependencies = [ 2120 | "block2", 2121 | "objc2 0.5.2", 2122 | "objc2-contacts", 2123 | "objc2-foundation 0.2.2", 2124 | ] 2125 | 2126 | [[package]] 2127 | name = "objc2-encode" 2128 | version = "4.1.0" 2129 | source = "registry+https://github.com/rust-lang/crates.io-index" 2130 | checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 2131 | 2132 | [[package]] 2133 | name = "objc2-foundation" 2134 | version = "0.2.2" 2135 | source = "registry+https://github.com/rust-lang/crates.io-index" 2136 | checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 2137 | dependencies = [ 2138 | "bitflags 2.9.4", 2139 | "block2", 2140 | "dispatch", 2141 | "libc", 2142 | "objc2 0.5.2", 2143 | ] 2144 | 2145 | [[package]] 2146 | name = "objc2-foundation" 2147 | version = "0.3.1" 2148 | source = "registry+https://github.com/rust-lang/crates.io-index" 2149 | checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" 2150 | dependencies = [ 2151 | "bitflags 2.9.4", 2152 | "objc2 0.6.2", 2153 | "objc2-core-foundation", 2154 | ] 2155 | 2156 | [[package]] 2157 | name = "objc2-io-surface" 2158 | version = "0.3.1" 2159 | source = "registry+https://github.com/rust-lang/crates.io-index" 2160 | checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" 2161 | dependencies = [ 2162 | "bitflags 2.9.4", 2163 | "objc2 0.6.2", 2164 | "objc2-core-foundation", 2165 | ] 2166 | 2167 | [[package]] 2168 | name = "objc2-link-presentation" 2169 | version = "0.2.2" 2170 | source = "registry+https://github.com/rust-lang/crates.io-index" 2171 | checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" 2172 | dependencies = [ 2173 | "block2", 2174 | "objc2 0.5.2", 2175 | "objc2-app-kit 0.2.2", 2176 | "objc2-foundation 0.2.2", 2177 | ] 2178 | 2179 | [[package]] 2180 | name = "objc2-metal" 2181 | version = "0.2.2" 2182 | source = "registry+https://github.com/rust-lang/crates.io-index" 2183 | checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 2184 | dependencies = [ 2185 | "bitflags 2.9.4", 2186 | "block2", 2187 | "objc2 0.5.2", 2188 | "objc2-foundation 0.2.2", 2189 | ] 2190 | 2191 | [[package]] 2192 | name = "objc2-quartz-core" 2193 | version = "0.2.2" 2194 | source = "registry+https://github.com/rust-lang/crates.io-index" 2195 | checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 2196 | dependencies = [ 2197 | "bitflags 2.9.4", 2198 | "block2", 2199 | "objc2 0.5.2", 2200 | "objc2-foundation 0.2.2", 2201 | "objc2-metal", 2202 | ] 2203 | 2204 | [[package]] 2205 | name = "objc2-symbols" 2206 | version = "0.2.2" 2207 | source = "registry+https://github.com/rust-lang/crates.io-index" 2208 | checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" 2209 | dependencies = [ 2210 | "objc2 0.5.2", 2211 | "objc2-foundation 0.2.2", 2212 | ] 2213 | 2214 | [[package]] 2215 | name = "objc2-ui-kit" 2216 | version = "0.2.2" 2217 | source = "registry+https://github.com/rust-lang/crates.io-index" 2218 | checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" 2219 | dependencies = [ 2220 | "bitflags 2.9.4", 2221 | "block2", 2222 | "objc2 0.5.2", 2223 | "objc2-cloud-kit", 2224 | "objc2-core-data", 2225 | "objc2-core-image", 2226 | "objc2-core-location", 2227 | "objc2-foundation 0.2.2", 2228 | "objc2-link-presentation", 2229 | "objc2-quartz-core", 2230 | "objc2-symbols", 2231 | "objc2-uniform-type-identifiers", 2232 | "objc2-user-notifications", 2233 | ] 2234 | 2235 | [[package]] 2236 | name = "objc2-uniform-type-identifiers" 2237 | version = "0.2.2" 2238 | source = "registry+https://github.com/rust-lang/crates.io-index" 2239 | checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" 2240 | dependencies = [ 2241 | "block2", 2242 | "objc2 0.5.2", 2243 | "objc2-foundation 0.2.2", 2244 | ] 2245 | 2246 | [[package]] 2247 | name = "objc2-user-notifications" 2248 | version = "0.2.2" 2249 | source = "registry+https://github.com/rust-lang/crates.io-index" 2250 | checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" 2251 | dependencies = [ 2252 | "bitflags 2.9.4", 2253 | "block2", 2254 | "objc2 0.5.2", 2255 | "objc2-core-location", 2256 | "objc2-foundation 0.2.2", 2257 | ] 2258 | 2259 | [[package]] 2260 | name = "once_cell" 2261 | version = "1.21.3" 2262 | source = "registry+https://github.com/rust-lang/crates.io-index" 2263 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2264 | 2265 | [[package]] 2266 | name = "once_cell_polyfill" 2267 | version = "1.70.1" 2268 | source = "registry+https://github.com/rust-lang/crates.io-index" 2269 | checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" 2270 | 2271 | [[package]] 2272 | name = "orbclient" 2273 | version = "0.3.48" 2274 | source = "registry+https://github.com/rust-lang/crates.io-index" 2275 | checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" 2276 | dependencies = [ 2277 | "libredox", 2278 | ] 2279 | 2280 | [[package]] 2281 | name = "ordered-float" 2282 | version = "4.6.0" 2283 | source = "registry+https://github.com/rust-lang/crates.io-index" 2284 | checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" 2285 | dependencies = [ 2286 | "num-traits", 2287 | ] 2288 | 2289 | [[package]] 2290 | name = "ordered-stream" 2291 | version = "0.2.0" 2292 | source = "registry+https://github.com/rust-lang/crates.io-index" 2293 | checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" 2294 | dependencies = [ 2295 | "futures-core", 2296 | "pin-project-lite", 2297 | ] 2298 | 2299 | [[package]] 2300 | name = "os_pipe" 2301 | version = "1.2.2" 2302 | source = "registry+https://github.com/rust-lang/crates.io-index" 2303 | checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224" 2304 | dependencies = [ 2305 | "libc", 2306 | "windows-sys 0.59.0", 2307 | ] 2308 | 2309 | [[package]] 2310 | name = "owned_ttf_parser" 2311 | version = "0.25.1" 2312 | source = "registry+https://github.com/rust-lang/crates.io-index" 2313 | checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" 2314 | dependencies = [ 2315 | "ttf-parser", 2316 | ] 2317 | 2318 | [[package]] 2319 | name = "parking" 2320 | version = "2.2.1" 2321 | source = "registry+https://github.com/rust-lang/crates.io-index" 2322 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2323 | 2324 | [[package]] 2325 | name = "parking_lot" 2326 | version = "0.12.4" 2327 | source = "registry+https://github.com/rust-lang/crates.io-index" 2328 | checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 2329 | dependencies = [ 2330 | "lock_api", 2331 | "parking_lot_core", 2332 | ] 2333 | 2334 | [[package]] 2335 | name = "parking_lot_core" 2336 | version = "0.9.11" 2337 | source = "registry+https://github.com/rust-lang/crates.io-index" 2338 | checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 2339 | dependencies = [ 2340 | "cfg-if", 2341 | "libc", 2342 | "redox_syscall 0.5.17", 2343 | "smallvec", 2344 | "windows-targets 0.52.6", 2345 | ] 2346 | 2347 | [[package]] 2348 | name = "paste" 2349 | version = "1.0.15" 2350 | source = "registry+https://github.com/rust-lang/crates.io-index" 2351 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2352 | 2353 | [[package]] 2354 | name = "percent-encoding" 2355 | version = "2.3.2" 2356 | source = "registry+https://github.com/rust-lang/crates.io-index" 2357 | checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2358 | 2359 | [[package]] 2360 | name = "petgraph" 2361 | version = "0.6.5" 2362 | source = "registry+https://github.com/rust-lang/crates.io-index" 2363 | checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" 2364 | dependencies = [ 2365 | "fixedbitset", 2366 | "indexmap", 2367 | ] 2368 | 2369 | [[package]] 2370 | name = "pin-project" 2371 | version = "1.1.10" 2372 | source = "registry+https://github.com/rust-lang/crates.io-index" 2373 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 2374 | dependencies = [ 2375 | "pin-project-internal", 2376 | ] 2377 | 2378 | [[package]] 2379 | name = "pin-project-internal" 2380 | version = "1.1.10" 2381 | source = "registry+https://github.com/rust-lang/crates.io-index" 2382 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 2383 | dependencies = [ 2384 | "proc-macro2", 2385 | "quote", 2386 | "syn", 2387 | ] 2388 | 2389 | [[package]] 2390 | name = "pin-project-lite" 2391 | version = "0.2.16" 2392 | source = "registry+https://github.com/rust-lang/crates.io-index" 2393 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2394 | 2395 | [[package]] 2396 | name = "pin-utils" 2397 | version = "0.1.0" 2398 | source = "registry+https://github.com/rust-lang/crates.io-index" 2399 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2400 | 2401 | [[package]] 2402 | name = "piper" 2403 | version = "0.2.4" 2404 | source = "registry+https://github.com/rust-lang/crates.io-index" 2405 | checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 2406 | dependencies = [ 2407 | "atomic-waker", 2408 | "fastrand", 2409 | "futures-io", 2410 | ] 2411 | 2412 | [[package]] 2413 | name = "pkg-config" 2414 | version = "0.3.32" 2415 | source = "registry+https://github.com/rust-lang/crates.io-index" 2416 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2417 | 2418 | [[package]] 2419 | name = "png" 2420 | version = "0.18.0" 2421 | source = "registry+https://github.com/rust-lang/crates.io-index" 2422 | checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" 2423 | dependencies = [ 2424 | "bitflags 2.9.4", 2425 | "crc32fast", 2426 | "fdeflate", 2427 | "flate2", 2428 | "miniz_oxide", 2429 | ] 2430 | 2431 | [[package]] 2432 | name = "polling" 2433 | version = "3.11.0" 2434 | source = "registry+https://github.com/rust-lang/crates.io-index" 2435 | checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" 2436 | dependencies = [ 2437 | "cfg-if", 2438 | "concurrent-queue", 2439 | "hermit-abi", 2440 | "pin-project-lite", 2441 | "rustix 1.1.2", 2442 | "windows-sys 0.61.0", 2443 | ] 2444 | 2445 | [[package]] 2446 | name = "pollster" 2447 | version = "0.4.0" 2448 | source = "registry+https://github.com/rust-lang/crates.io-index" 2449 | checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" 2450 | 2451 | [[package]] 2452 | name = "portable-atomic" 2453 | version = "1.11.1" 2454 | source = "registry+https://github.com/rust-lang/crates.io-index" 2455 | checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 2456 | 2457 | [[package]] 2458 | name = "portable-atomic-util" 2459 | version = "0.2.4" 2460 | source = "registry+https://github.com/rust-lang/crates.io-index" 2461 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 2462 | dependencies = [ 2463 | "portable-atomic", 2464 | ] 2465 | 2466 | [[package]] 2467 | name = "potential_utf" 2468 | version = "0.1.3" 2469 | source = "registry+https://github.com/rust-lang/crates.io-index" 2470 | checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" 2471 | dependencies = [ 2472 | "zerovec", 2473 | ] 2474 | 2475 | [[package]] 2476 | name = "presser" 2477 | version = "0.3.1" 2478 | source = "registry+https://github.com/rust-lang/crates.io-index" 2479 | checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" 2480 | 2481 | [[package]] 2482 | name = "proc-macro-crate" 2483 | version = "3.4.0" 2484 | source = "registry+https://github.com/rust-lang/crates.io-index" 2485 | checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" 2486 | dependencies = [ 2487 | "toml_edit", 2488 | ] 2489 | 2490 | [[package]] 2491 | name = "proc-macro2" 2492 | version = "1.0.101" 2493 | source = "registry+https://github.com/rust-lang/crates.io-index" 2494 | checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" 2495 | dependencies = [ 2496 | "unicode-ident", 2497 | ] 2498 | 2499 | [[package]] 2500 | name = "profiling" 2501 | version = "1.0.17" 2502 | source = "registry+https://github.com/rust-lang/crates.io-index" 2503 | checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" 2504 | 2505 | [[package]] 2506 | name = "pxfm" 2507 | version = "0.1.24" 2508 | source = "registry+https://github.com/rust-lang/crates.io-index" 2509 | checksum = "83f9b339b02259ada5c0f4a389b7fb472f933aa17ce176fd2ad98f28bb401fde" 2510 | dependencies = [ 2511 | "num-traits", 2512 | ] 2513 | 2514 | [[package]] 2515 | name = "quick-error" 2516 | version = "2.0.1" 2517 | source = "registry+https://github.com/rust-lang/crates.io-index" 2518 | checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" 2519 | 2520 | [[package]] 2521 | name = "quick-xml" 2522 | version = "0.36.2" 2523 | source = "registry+https://github.com/rust-lang/crates.io-index" 2524 | checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" 2525 | dependencies = [ 2526 | "memchr", 2527 | "serde", 2528 | ] 2529 | 2530 | [[package]] 2531 | name = "quick-xml" 2532 | version = "0.37.5" 2533 | source = "registry+https://github.com/rust-lang/crates.io-index" 2534 | checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" 2535 | dependencies = [ 2536 | "memchr", 2537 | ] 2538 | 2539 | [[package]] 2540 | name = "quote" 2541 | version = "1.0.40" 2542 | source = "registry+https://github.com/rust-lang/crates.io-index" 2543 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 2544 | dependencies = [ 2545 | "proc-macro2", 2546 | ] 2547 | 2548 | [[package]] 2549 | name = "r-efi" 2550 | version = "5.3.0" 2551 | source = "registry+https://github.com/rust-lang/crates.io-index" 2552 | checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2553 | 2554 | [[package]] 2555 | name = "range-alloc" 2556 | version = "0.1.4" 2557 | source = "registry+https://github.com/rust-lang/crates.io-index" 2558 | checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" 2559 | 2560 | [[package]] 2561 | name = "raw-window-handle" 2562 | version = "0.6.2" 2563 | source = "registry+https://github.com/rust-lang/crates.io-index" 2564 | checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" 2565 | 2566 | [[package]] 2567 | name = "redox_syscall" 2568 | version = "0.4.1" 2569 | source = "registry+https://github.com/rust-lang/crates.io-index" 2570 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 2571 | dependencies = [ 2572 | "bitflags 1.3.2", 2573 | ] 2574 | 2575 | [[package]] 2576 | name = "redox_syscall" 2577 | version = "0.5.17" 2578 | source = "registry+https://github.com/rust-lang/crates.io-index" 2579 | checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" 2580 | dependencies = [ 2581 | "bitflags 2.9.4", 2582 | ] 2583 | 2584 | [[package]] 2585 | name = "regex" 2586 | version = "1.11.2" 2587 | source = "registry+https://github.com/rust-lang/crates.io-index" 2588 | checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" 2589 | dependencies = [ 2590 | "aho-corasick", 2591 | "memchr", 2592 | "regex-automata", 2593 | "regex-syntax", 2594 | ] 2595 | 2596 | [[package]] 2597 | name = "regex-automata" 2598 | version = "0.4.10" 2599 | source = "registry+https://github.com/rust-lang/crates.io-index" 2600 | checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" 2601 | dependencies = [ 2602 | "aho-corasick", 2603 | "memchr", 2604 | "regex-syntax", 2605 | ] 2606 | 2607 | [[package]] 2608 | name = "regex-syntax" 2609 | version = "0.8.6" 2610 | source = "registry+https://github.com/rust-lang/crates.io-index" 2611 | checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" 2612 | 2613 | [[package]] 2614 | name = "renderdoc-sys" 2615 | version = "1.1.0" 2616 | source = "registry+https://github.com/rust-lang/crates.io-index" 2617 | checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 2618 | 2619 | [[package]] 2620 | name = "rustc-hash" 2621 | version = "1.1.0" 2622 | source = "registry+https://github.com/rust-lang/crates.io-index" 2623 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2624 | 2625 | [[package]] 2626 | name = "rustc-hash" 2627 | version = "2.1.1" 2628 | source = "registry+https://github.com/rust-lang/crates.io-index" 2629 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2630 | 2631 | [[package]] 2632 | name = "rustix" 2633 | version = "0.38.44" 2634 | source = "registry+https://github.com/rust-lang/crates.io-index" 2635 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 2636 | dependencies = [ 2637 | "bitflags 2.9.4", 2638 | "errno", 2639 | "libc", 2640 | "linux-raw-sys 0.4.15", 2641 | "windows-sys 0.59.0", 2642 | ] 2643 | 2644 | [[package]] 2645 | name = "rustix" 2646 | version = "1.1.2" 2647 | source = "registry+https://github.com/rust-lang/crates.io-index" 2648 | checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 2649 | dependencies = [ 2650 | "bitflags 2.9.4", 2651 | "errno", 2652 | "libc", 2653 | "linux-raw-sys 0.11.0", 2654 | "windows-sys 0.61.0", 2655 | ] 2656 | 2657 | [[package]] 2658 | name = "rustversion" 2659 | version = "1.0.22" 2660 | source = "registry+https://github.com/rust-lang/crates.io-index" 2661 | checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 2662 | 2663 | [[package]] 2664 | name = "same-file" 2665 | version = "1.0.6" 2666 | source = "registry+https://github.com/rust-lang/crates.io-index" 2667 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2668 | dependencies = [ 2669 | "winapi-util", 2670 | ] 2671 | 2672 | [[package]] 2673 | name = "scoped-tls" 2674 | version = "1.0.1" 2675 | source = "registry+https://github.com/rust-lang/crates.io-index" 2676 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2677 | 2678 | [[package]] 2679 | name = "scopeguard" 2680 | version = "1.2.0" 2681 | source = "registry+https://github.com/rust-lang/crates.io-index" 2682 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2683 | 2684 | [[package]] 2685 | name = "serde" 2686 | version = "1.0.226" 2687 | source = "registry+https://github.com/rust-lang/crates.io-index" 2688 | checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" 2689 | dependencies = [ 2690 | "serde_core", 2691 | "serde_derive", 2692 | ] 2693 | 2694 | [[package]] 2695 | name = "serde_core" 2696 | version = "1.0.226" 2697 | source = "registry+https://github.com/rust-lang/crates.io-index" 2698 | checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" 2699 | dependencies = [ 2700 | "serde_derive", 2701 | ] 2702 | 2703 | [[package]] 2704 | name = "serde_derive" 2705 | version = "1.0.226" 2706 | source = "registry+https://github.com/rust-lang/crates.io-index" 2707 | checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" 2708 | dependencies = [ 2709 | "proc-macro2", 2710 | "quote", 2711 | "syn", 2712 | ] 2713 | 2714 | [[package]] 2715 | name = "serde_repr" 2716 | version = "0.1.20" 2717 | source = "registry+https://github.com/rust-lang/crates.io-index" 2718 | checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" 2719 | dependencies = [ 2720 | "proc-macro2", 2721 | "quote", 2722 | "syn", 2723 | ] 2724 | 2725 | [[package]] 2726 | name = "shlex" 2727 | version = "1.3.0" 2728 | source = "registry+https://github.com/rust-lang/crates.io-index" 2729 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2730 | 2731 | [[package]] 2732 | name = "signal-hook-registry" 2733 | version = "1.4.6" 2734 | source = "registry+https://github.com/rust-lang/crates.io-index" 2735 | checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 2736 | dependencies = [ 2737 | "libc", 2738 | ] 2739 | 2740 | [[package]] 2741 | name = "simd-adler32" 2742 | version = "0.3.7" 2743 | source = "registry+https://github.com/rust-lang/crates.io-index" 2744 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 2745 | 2746 | [[package]] 2747 | name = "slab" 2748 | version = "0.4.11" 2749 | source = "registry+https://github.com/rust-lang/crates.io-index" 2750 | checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 2751 | 2752 | [[package]] 2753 | name = "slotmap" 2754 | version = "1.0.7" 2755 | source = "registry+https://github.com/rust-lang/crates.io-index" 2756 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 2757 | dependencies = [ 2758 | "version_check", 2759 | ] 2760 | 2761 | [[package]] 2762 | name = "smallvec" 2763 | version = "1.15.1" 2764 | source = "registry+https://github.com/rust-lang/crates.io-index" 2765 | checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2766 | 2767 | [[package]] 2768 | name = "smithay-client-toolkit" 2769 | version = "0.19.2" 2770 | source = "registry+https://github.com/rust-lang/crates.io-index" 2771 | checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" 2772 | dependencies = [ 2773 | "bitflags 2.9.4", 2774 | "calloop", 2775 | "calloop-wayland-source", 2776 | "cursor-icon", 2777 | "libc", 2778 | "log", 2779 | "memmap2", 2780 | "rustix 0.38.44", 2781 | "thiserror 1.0.69", 2782 | "wayland-backend", 2783 | "wayland-client", 2784 | "wayland-csd-frame", 2785 | "wayland-cursor", 2786 | "wayland-protocols", 2787 | "wayland-protocols-wlr", 2788 | "wayland-scanner", 2789 | "xkeysym", 2790 | ] 2791 | 2792 | [[package]] 2793 | name = "smithay-clipboard" 2794 | version = "0.7.2" 2795 | source = "registry+https://github.com/rust-lang/crates.io-index" 2796 | checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" 2797 | dependencies = [ 2798 | "libc", 2799 | "smithay-client-toolkit", 2800 | "wayland-backend", 2801 | ] 2802 | 2803 | [[package]] 2804 | name = "smol_str" 2805 | version = "0.2.2" 2806 | source = "registry+https://github.com/rust-lang/crates.io-index" 2807 | checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" 2808 | dependencies = [ 2809 | "serde", 2810 | ] 2811 | 2812 | [[package]] 2813 | name = "spirv" 2814 | version = "0.3.0+sdk-1.3.268.0" 2815 | source = "registry+https://github.com/rust-lang/crates.io-index" 2816 | checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" 2817 | dependencies = [ 2818 | "bitflags 2.9.4", 2819 | ] 2820 | 2821 | [[package]] 2822 | name = "stable_deref_trait" 2823 | version = "1.2.0" 2824 | source = "registry+https://github.com/rust-lang/crates.io-index" 2825 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2826 | 2827 | [[package]] 2828 | name = "static_assertions" 2829 | version = "1.1.0" 2830 | source = "registry+https://github.com/rust-lang/crates.io-index" 2831 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2832 | 2833 | [[package]] 2834 | name = "strum" 2835 | version = "0.26.3" 2836 | source = "registry+https://github.com/rust-lang/crates.io-index" 2837 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 2838 | dependencies = [ 2839 | "strum_macros", 2840 | ] 2841 | 2842 | [[package]] 2843 | name = "strum_macros" 2844 | version = "0.26.4" 2845 | source = "registry+https://github.com/rust-lang/crates.io-index" 2846 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 2847 | dependencies = [ 2848 | "heck", 2849 | "proc-macro2", 2850 | "quote", 2851 | "rustversion", 2852 | "syn", 2853 | ] 2854 | 2855 | [[package]] 2856 | name = "syn" 2857 | version = "2.0.106" 2858 | source = "registry+https://github.com/rust-lang/crates.io-index" 2859 | checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" 2860 | dependencies = [ 2861 | "proc-macro2", 2862 | "quote", 2863 | "unicode-ident", 2864 | ] 2865 | 2866 | [[package]] 2867 | name = "synstructure" 2868 | version = "0.13.2" 2869 | source = "registry+https://github.com/rust-lang/crates.io-index" 2870 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 2871 | dependencies = [ 2872 | "proc-macro2", 2873 | "quote", 2874 | "syn", 2875 | ] 2876 | 2877 | [[package]] 2878 | name = "tempfile" 2879 | version = "3.22.0" 2880 | source = "registry+https://github.com/rust-lang/crates.io-index" 2881 | checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" 2882 | dependencies = [ 2883 | "fastrand", 2884 | "getrandom", 2885 | "once_cell", 2886 | "rustix 1.1.2", 2887 | "windows-sys 0.61.0", 2888 | ] 2889 | 2890 | [[package]] 2891 | name = "termcolor" 2892 | version = "1.4.1" 2893 | source = "registry+https://github.com/rust-lang/crates.io-index" 2894 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 2895 | dependencies = [ 2896 | "winapi-util", 2897 | ] 2898 | 2899 | [[package]] 2900 | name = "thiserror" 2901 | version = "1.0.69" 2902 | source = "registry+https://github.com/rust-lang/crates.io-index" 2903 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2904 | dependencies = [ 2905 | "thiserror-impl 1.0.69", 2906 | ] 2907 | 2908 | [[package]] 2909 | name = "thiserror" 2910 | version = "2.0.16" 2911 | source = "registry+https://github.com/rust-lang/crates.io-index" 2912 | checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" 2913 | dependencies = [ 2914 | "thiserror-impl 2.0.16", 2915 | ] 2916 | 2917 | [[package]] 2918 | name = "thiserror-impl" 2919 | version = "1.0.69" 2920 | source = "registry+https://github.com/rust-lang/crates.io-index" 2921 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2922 | dependencies = [ 2923 | "proc-macro2", 2924 | "quote", 2925 | "syn", 2926 | ] 2927 | 2928 | [[package]] 2929 | name = "thiserror-impl" 2930 | version = "2.0.16" 2931 | source = "registry+https://github.com/rust-lang/crates.io-index" 2932 | checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" 2933 | dependencies = [ 2934 | "proc-macro2", 2935 | "quote", 2936 | "syn", 2937 | ] 2938 | 2939 | [[package]] 2940 | name = "tiff" 2941 | version = "0.10.3" 2942 | source = "registry+https://github.com/rust-lang/crates.io-index" 2943 | checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" 2944 | dependencies = [ 2945 | "fax", 2946 | "flate2", 2947 | "half", 2948 | "quick-error", 2949 | "weezl", 2950 | "zune-jpeg", 2951 | ] 2952 | 2953 | [[package]] 2954 | name = "tinystr" 2955 | version = "0.8.1" 2956 | source = "registry+https://github.com/rust-lang/crates.io-index" 2957 | checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 2958 | dependencies = [ 2959 | "displaydoc", 2960 | "zerovec", 2961 | ] 2962 | 2963 | [[package]] 2964 | name = "toml_datetime" 2965 | version = "0.7.2" 2966 | source = "registry+https://github.com/rust-lang/crates.io-index" 2967 | checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" 2968 | dependencies = [ 2969 | "serde_core", 2970 | ] 2971 | 2972 | [[package]] 2973 | name = "toml_edit" 2974 | version = "0.23.6" 2975 | source = "registry+https://github.com/rust-lang/crates.io-index" 2976 | checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" 2977 | dependencies = [ 2978 | "indexmap", 2979 | "toml_datetime", 2980 | "toml_parser", 2981 | "winnow", 2982 | ] 2983 | 2984 | [[package]] 2985 | name = "toml_parser" 2986 | version = "1.0.3" 2987 | source = "registry+https://github.com/rust-lang/crates.io-index" 2988 | checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" 2989 | dependencies = [ 2990 | "winnow", 2991 | ] 2992 | 2993 | [[package]] 2994 | name = "tracing" 2995 | version = "0.1.41" 2996 | source = "registry+https://github.com/rust-lang/crates.io-index" 2997 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2998 | dependencies = [ 2999 | "pin-project-lite", 3000 | "tracing-attributes", 3001 | "tracing-core", 3002 | ] 3003 | 3004 | [[package]] 3005 | name = "tracing-attributes" 3006 | version = "0.1.30" 3007 | source = "registry+https://github.com/rust-lang/crates.io-index" 3008 | checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 3009 | dependencies = [ 3010 | "proc-macro2", 3011 | "quote", 3012 | "syn", 3013 | ] 3014 | 3015 | [[package]] 3016 | name = "tracing-core" 3017 | version = "0.1.34" 3018 | source = "registry+https://github.com/rust-lang/crates.io-index" 3019 | checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 3020 | dependencies = [ 3021 | "once_cell", 3022 | ] 3023 | 3024 | [[package]] 3025 | name = "tree_magic_mini" 3026 | version = "3.2.0" 3027 | source = "registry+https://github.com/rust-lang/crates.io-index" 3028 | checksum = "f943391d896cdfe8eec03a04d7110332d445be7df856db382dd96a730667562c" 3029 | dependencies = [ 3030 | "memchr", 3031 | "nom", 3032 | "once_cell", 3033 | "petgraph", 3034 | ] 3035 | 3036 | [[package]] 3037 | name = "ttf-parser" 3038 | version = "0.25.1" 3039 | source = "registry+https://github.com/rust-lang/crates.io-index" 3040 | checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" 3041 | 3042 | [[package]] 3043 | name = "type-map" 3044 | version = "0.5.1" 3045 | source = "registry+https://github.com/rust-lang/crates.io-index" 3046 | checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" 3047 | dependencies = [ 3048 | "rustc-hash 2.1.1", 3049 | ] 3050 | 3051 | [[package]] 3052 | name = "uds_windows" 3053 | version = "1.1.0" 3054 | source = "registry+https://github.com/rust-lang/crates.io-index" 3055 | checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" 3056 | dependencies = [ 3057 | "memoffset", 3058 | "tempfile", 3059 | "winapi", 3060 | ] 3061 | 3062 | [[package]] 3063 | name = "unicode-ident" 3064 | version = "1.0.19" 3065 | source = "registry+https://github.com/rust-lang/crates.io-index" 3066 | checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" 3067 | 3068 | [[package]] 3069 | name = "unicode-segmentation" 3070 | version = "1.12.0" 3071 | source = "registry+https://github.com/rust-lang/crates.io-index" 3072 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3073 | 3074 | [[package]] 3075 | name = "unicode-width" 3076 | version = "0.2.1" 3077 | source = "registry+https://github.com/rust-lang/crates.io-index" 3078 | checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" 3079 | 3080 | [[package]] 3081 | name = "unty" 3082 | version = "0.0.4" 3083 | source = "registry+https://github.com/rust-lang/crates.io-index" 3084 | checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" 3085 | 3086 | [[package]] 3087 | name = "url" 3088 | version = "2.5.7" 3089 | source = "registry+https://github.com/rust-lang/crates.io-index" 3090 | checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 3091 | dependencies = [ 3092 | "form_urlencoded", 3093 | "idna", 3094 | "percent-encoding", 3095 | "serde", 3096 | ] 3097 | 3098 | [[package]] 3099 | name = "utf8_iter" 3100 | version = "1.0.4" 3101 | source = "registry+https://github.com/rust-lang/crates.io-index" 3102 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3103 | 3104 | [[package]] 3105 | name = "utf8parse" 3106 | version = "0.2.2" 3107 | source = "registry+https://github.com/rust-lang/crates.io-index" 3108 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3109 | 3110 | [[package]] 3111 | name = "version_check" 3112 | version = "0.9.5" 3113 | source = "registry+https://github.com/rust-lang/crates.io-index" 3114 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3115 | 3116 | [[package]] 3117 | name = "virtue" 3118 | version = "0.0.18" 3119 | source = "registry+https://github.com/rust-lang/crates.io-index" 3120 | checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" 3121 | 3122 | [[package]] 3123 | name = "walkdir" 3124 | version = "2.5.0" 3125 | source = "registry+https://github.com/rust-lang/crates.io-index" 3126 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3127 | dependencies = [ 3128 | "same-file", 3129 | "winapi-util", 3130 | ] 3131 | 3132 | [[package]] 3133 | name = "wasi" 3134 | version = "0.14.7+wasi-0.2.4" 3135 | source = "registry+https://github.com/rust-lang/crates.io-index" 3136 | checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" 3137 | dependencies = [ 3138 | "wasip2", 3139 | ] 3140 | 3141 | [[package]] 3142 | name = "wasip2" 3143 | version = "1.0.1+wasi-0.2.4" 3144 | source = "registry+https://github.com/rust-lang/crates.io-index" 3145 | checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" 3146 | dependencies = [ 3147 | "wit-bindgen", 3148 | ] 3149 | 3150 | [[package]] 3151 | name = "wasm-bindgen" 3152 | version = "0.2.103" 3153 | source = "registry+https://github.com/rust-lang/crates.io-index" 3154 | checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" 3155 | dependencies = [ 3156 | "cfg-if", 3157 | "once_cell", 3158 | "rustversion", 3159 | "wasm-bindgen-macro", 3160 | "wasm-bindgen-shared", 3161 | ] 3162 | 3163 | [[package]] 3164 | name = "wasm-bindgen-backend" 3165 | version = "0.2.103" 3166 | source = "registry+https://github.com/rust-lang/crates.io-index" 3167 | checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" 3168 | dependencies = [ 3169 | "bumpalo", 3170 | "log", 3171 | "proc-macro2", 3172 | "quote", 3173 | "syn", 3174 | "wasm-bindgen-shared", 3175 | ] 3176 | 3177 | [[package]] 3178 | name = "wasm-bindgen-futures" 3179 | version = "0.4.53" 3180 | source = "registry+https://github.com/rust-lang/crates.io-index" 3181 | checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" 3182 | dependencies = [ 3183 | "cfg-if", 3184 | "js-sys", 3185 | "once_cell", 3186 | "wasm-bindgen", 3187 | "web-sys", 3188 | ] 3189 | 3190 | [[package]] 3191 | name = "wasm-bindgen-macro" 3192 | version = "0.2.103" 3193 | source = "registry+https://github.com/rust-lang/crates.io-index" 3194 | checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" 3195 | dependencies = [ 3196 | "quote", 3197 | "wasm-bindgen-macro-support", 3198 | ] 3199 | 3200 | [[package]] 3201 | name = "wasm-bindgen-macro-support" 3202 | version = "0.2.103" 3203 | source = "registry+https://github.com/rust-lang/crates.io-index" 3204 | checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" 3205 | dependencies = [ 3206 | "proc-macro2", 3207 | "quote", 3208 | "syn", 3209 | "wasm-bindgen-backend", 3210 | "wasm-bindgen-shared", 3211 | ] 3212 | 3213 | [[package]] 3214 | name = "wasm-bindgen-shared" 3215 | version = "0.2.103" 3216 | source = "registry+https://github.com/rust-lang/crates.io-index" 3217 | checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" 3218 | dependencies = [ 3219 | "unicode-ident", 3220 | ] 3221 | 3222 | [[package]] 3223 | name = "wayland-backend" 3224 | version = "0.3.11" 3225 | source = "registry+https://github.com/rust-lang/crates.io-index" 3226 | checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" 3227 | dependencies = [ 3228 | "cc", 3229 | "downcast-rs", 3230 | "rustix 1.1.2", 3231 | "scoped-tls", 3232 | "smallvec", 3233 | "wayland-sys", 3234 | ] 3235 | 3236 | [[package]] 3237 | name = "wayland-client" 3238 | version = "0.31.11" 3239 | source = "registry+https://github.com/rust-lang/crates.io-index" 3240 | checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" 3241 | dependencies = [ 3242 | "bitflags 2.9.4", 3243 | "rustix 1.1.2", 3244 | "wayland-backend", 3245 | "wayland-scanner", 3246 | ] 3247 | 3248 | [[package]] 3249 | name = "wayland-csd-frame" 3250 | version = "0.3.0" 3251 | source = "registry+https://github.com/rust-lang/crates.io-index" 3252 | checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" 3253 | dependencies = [ 3254 | "bitflags 2.9.4", 3255 | "cursor-icon", 3256 | "wayland-backend", 3257 | ] 3258 | 3259 | [[package]] 3260 | name = "wayland-cursor" 3261 | version = "0.31.11" 3262 | source = "registry+https://github.com/rust-lang/crates.io-index" 3263 | checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" 3264 | dependencies = [ 3265 | "rustix 1.1.2", 3266 | "wayland-client", 3267 | "xcursor", 3268 | ] 3269 | 3270 | [[package]] 3271 | name = "wayland-protocols" 3272 | version = "0.32.9" 3273 | source = "registry+https://github.com/rust-lang/crates.io-index" 3274 | checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" 3275 | dependencies = [ 3276 | "bitflags 2.9.4", 3277 | "wayland-backend", 3278 | "wayland-client", 3279 | "wayland-scanner", 3280 | ] 3281 | 3282 | [[package]] 3283 | name = "wayland-protocols-plasma" 3284 | version = "0.3.9" 3285 | source = "registry+https://github.com/rust-lang/crates.io-index" 3286 | checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" 3287 | dependencies = [ 3288 | "bitflags 2.9.4", 3289 | "wayland-backend", 3290 | "wayland-client", 3291 | "wayland-protocols", 3292 | "wayland-scanner", 3293 | ] 3294 | 3295 | [[package]] 3296 | name = "wayland-protocols-wlr" 3297 | version = "0.3.9" 3298 | source = "registry+https://github.com/rust-lang/crates.io-index" 3299 | checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" 3300 | dependencies = [ 3301 | "bitflags 2.9.4", 3302 | "wayland-backend", 3303 | "wayland-client", 3304 | "wayland-protocols", 3305 | "wayland-scanner", 3306 | ] 3307 | 3308 | [[package]] 3309 | name = "wayland-scanner" 3310 | version = "0.31.7" 3311 | source = "registry+https://github.com/rust-lang/crates.io-index" 3312 | checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" 3313 | dependencies = [ 3314 | "proc-macro2", 3315 | "quick-xml 0.37.5", 3316 | "quote", 3317 | ] 3318 | 3319 | [[package]] 3320 | name = "wayland-sys" 3321 | version = "0.31.7" 3322 | source = "registry+https://github.com/rust-lang/crates.io-index" 3323 | checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" 3324 | dependencies = [ 3325 | "dlib", 3326 | "log", 3327 | "once_cell", 3328 | "pkg-config", 3329 | ] 3330 | 3331 | [[package]] 3332 | name = "web-sys" 3333 | version = "0.3.80" 3334 | source = "registry+https://github.com/rust-lang/crates.io-index" 3335 | checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" 3336 | dependencies = [ 3337 | "js-sys", 3338 | "wasm-bindgen", 3339 | ] 3340 | 3341 | [[package]] 3342 | name = "web-time" 3343 | version = "1.1.0" 3344 | source = "registry+https://github.com/rust-lang/crates.io-index" 3345 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3346 | dependencies = [ 3347 | "js-sys", 3348 | "wasm-bindgen", 3349 | ] 3350 | 3351 | [[package]] 3352 | name = "webbrowser" 3353 | version = "1.0.5" 3354 | source = "registry+https://github.com/rust-lang/crates.io-index" 3355 | checksum = "aaf4f3c0ba838e82b4e5ccc4157003fb8c324ee24c058470ffb82820becbde98" 3356 | dependencies = [ 3357 | "core-foundation 0.10.1", 3358 | "jni", 3359 | "log", 3360 | "ndk-context", 3361 | "objc2 0.6.2", 3362 | "objc2-foundation 0.3.1", 3363 | "url", 3364 | "web-sys", 3365 | ] 3366 | 3367 | [[package]] 3368 | name = "weezl" 3369 | version = "0.1.10" 3370 | source = "registry+https://github.com/rust-lang/crates.io-index" 3371 | checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" 3372 | 3373 | [[package]] 3374 | name = "wgpu" 3375 | version = "25.0.2" 3376 | source = "registry+https://github.com/rust-lang/crates.io-index" 3377 | checksum = "ec8fb398f119472be4d80bc3647339f56eb63b2a331f6a3d16e25d8144197dd9" 3378 | dependencies = [ 3379 | "arrayvec", 3380 | "bitflags 2.9.4", 3381 | "cfg_aliases", 3382 | "document-features", 3383 | "hashbrown 0.15.5", 3384 | "js-sys", 3385 | "log", 3386 | "naga", 3387 | "parking_lot", 3388 | "portable-atomic", 3389 | "profiling", 3390 | "raw-window-handle", 3391 | "smallvec", 3392 | "static_assertions", 3393 | "wasm-bindgen", 3394 | "wasm-bindgen-futures", 3395 | "web-sys", 3396 | "wgpu-core", 3397 | "wgpu-hal", 3398 | "wgpu-types", 3399 | ] 3400 | 3401 | [[package]] 3402 | name = "wgpu-core" 3403 | version = "25.0.2" 3404 | source = "registry+https://github.com/rust-lang/crates.io-index" 3405 | checksum = "f7b882196f8368511d613c6aeec80655160db6646aebddf8328879a88d54e500" 3406 | dependencies = [ 3407 | "arrayvec", 3408 | "bit-set", 3409 | "bit-vec", 3410 | "bitflags 2.9.4", 3411 | "cfg_aliases", 3412 | "document-features", 3413 | "hashbrown 0.15.5", 3414 | "indexmap", 3415 | "log", 3416 | "naga", 3417 | "once_cell", 3418 | "parking_lot", 3419 | "portable-atomic", 3420 | "profiling", 3421 | "raw-window-handle", 3422 | "rustc-hash 1.1.0", 3423 | "smallvec", 3424 | "thiserror 2.0.16", 3425 | "wgpu-core-deps-apple", 3426 | "wgpu-core-deps-emscripten", 3427 | "wgpu-core-deps-wasm", 3428 | "wgpu-core-deps-windows-linux-android", 3429 | "wgpu-hal", 3430 | "wgpu-types", 3431 | ] 3432 | 3433 | [[package]] 3434 | name = "wgpu-core-deps-apple" 3435 | version = "25.0.0" 3436 | source = "registry+https://github.com/rust-lang/crates.io-index" 3437 | checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d" 3438 | dependencies = [ 3439 | "wgpu-hal", 3440 | ] 3441 | 3442 | [[package]] 3443 | name = "wgpu-core-deps-emscripten" 3444 | version = "25.0.0" 3445 | source = "registry+https://github.com/rust-lang/crates.io-index" 3446 | checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445" 3447 | dependencies = [ 3448 | "wgpu-hal", 3449 | ] 3450 | 3451 | [[package]] 3452 | name = "wgpu-core-deps-wasm" 3453 | version = "25.0.0" 3454 | source = "registry+https://github.com/rust-lang/crates.io-index" 3455 | checksum = "eca8809ad123f6c7f2c5e01a2c7117c4fdfd02f70bd422ee2533f69dfa98756c" 3456 | dependencies = [ 3457 | "wgpu-hal", 3458 | ] 3459 | 3460 | [[package]] 3461 | name = "wgpu-core-deps-windows-linux-android" 3462 | version = "25.0.0" 3463 | source = "registry+https://github.com/rust-lang/crates.io-index" 3464 | checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46" 3465 | dependencies = [ 3466 | "wgpu-hal", 3467 | ] 3468 | 3469 | [[package]] 3470 | name = "wgpu-hal" 3471 | version = "25.0.2" 3472 | source = "registry+https://github.com/rust-lang/crates.io-index" 3473 | checksum = "f968767fe4d3d33747bbd1473ccd55bf0f6451f55d733b5597e67b5deab4ad17" 3474 | dependencies = [ 3475 | "android_system_properties", 3476 | "arrayvec", 3477 | "ash", 3478 | "bit-set", 3479 | "bitflags 2.9.4", 3480 | "block", 3481 | "bytemuck", 3482 | "cfg-if", 3483 | "cfg_aliases", 3484 | "core-graphics-types", 3485 | "glow", 3486 | "glutin_wgl_sys", 3487 | "gpu-alloc", 3488 | "gpu-allocator", 3489 | "gpu-descriptor", 3490 | "hashbrown 0.15.5", 3491 | "js-sys", 3492 | "khronos-egl", 3493 | "libc", 3494 | "libloading", 3495 | "log", 3496 | "metal", 3497 | "naga", 3498 | "ndk-sys 0.5.0+25.2.9519653", 3499 | "objc", 3500 | "ordered-float", 3501 | "parking_lot", 3502 | "portable-atomic", 3503 | "profiling", 3504 | "range-alloc", 3505 | "raw-window-handle", 3506 | "renderdoc-sys", 3507 | "smallvec", 3508 | "thiserror 2.0.16", 3509 | "wasm-bindgen", 3510 | "web-sys", 3511 | "wgpu-types", 3512 | "windows 0.58.0", 3513 | "windows-core 0.58.0", 3514 | ] 3515 | 3516 | [[package]] 3517 | name = "wgpu-types" 3518 | version = "25.0.0" 3519 | source = "registry+https://github.com/rust-lang/crates.io-index" 3520 | checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc" 3521 | dependencies = [ 3522 | "bitflags 2.9.4", 3523 | "bytemuck", 3524 | "js-sys", 3525 | "log", 3526 | "thiserror 2.0.16", 3527 | "web-sys", 3528 | ] 3529 | 3530 | [[package]] 3531 | name = "winapi" 3532 | version = "0.3.9" 3533 | source = "registry+https://github.com/rust-lang/crates.io-index" 3534 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3535 | dependencies = [ 3536 | "winapi-i686-pc-windows-gnu", 3537 | "winapi-x86_64-pc-windows-gnu", 3538 | ] 3539 | 3540 | [[package]] 3541 | name = "winapi-i686-pc-windows-gnu" 3542 | version = "0.4.0" 3543 | source = "registry+https://github.com/rust-lang/crates.io-index" 3544 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3545 | 3546 | [[package]] 3547 | name = "winapi-util" 3548 | version = "0.1.11" 3549 | source = "registry+https://github.com/rust-lang/crates.io-index" 3550 | checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 3551 | dependencies = [ 3552 | "windows-sys 0.61.0", 3553 | ] 3554 | 3555 | [[package]] 3556 | name = "winapi-x86_64-pc-windows-gnu" 3557 | version = "0.4.0" 3558 | source = "registry+https://github.com/rust-lang/crates.io-index" 3559 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3560 | 3561 | [[package]] 3562 | name = "windows" 3563 | version = "0.58.0" 3564 | source = "registry+https://github.com/rust-lang/crates.io-index" 3565 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 3566 | dependencies = [ 3567 | "windows-core 0.58.0", 3568 | "windows-targets 0.52.6", 3569 | ] 3570 | 3571 | [[package]] 3572 | name = "windows" 3573 | version = "0.61.3" 3574 | source = "registry+https://github.com/rust-lang/crates.io-index" 3575 | checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 3576 | dependencies = [ 3577 | "windows-collections", 3578 | "windows-core 0.61.2", 3579 | "windows-future", 3580 | "windows-link 0.1.3", 3581 | "windows-numerics", 3582 | ] 3583 | 3584 | [[package]] 3585 | name = "windows-collections" 3586 | version = "0.2.0" 3587 | source = "registry+https://github.com/rust-lang/crates.io-index" 3588 | checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 3589 | dependencies = [ 3590 | "windows-core 0.61.2", 3591 | ] 3592 | 3593 | [[package]] 3594 | name = "windows-core" 3595 | version = "0.58.0" 3596 | source = "registry+https://github.com/rust-lang/crates.io-index" 3597 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 3598 | dependencies = [ 3599 | "windows-implement 0.58.0", 3600 | "windows-interface 0.58.0", 3601 | "windows-result 0.2.0", 3602 | "windows-strings 0.1.0", 3603 | "windows-targets 0.52.6", 3604 | ] 3605 | 3606 | [[package]] 3607 | name = "windows-core" 3608 | version = "0.61.2" 3609 | source = "registry+https://github.com/rust-lang/crates.io-index" 3610 | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 3611 | dependencies = [ 3612 | "windows-implement 0.60.0", 3613 | "windows-interface 0.59.1", 3614 | "windows-link 0.1.3", 3615 | "windows-result 0.3.4", 3616 | "windows-strings 0.4.2", 3617 | ] 3618 | 3619 | [[package]] 3620 | name = "windows-future" 3621 | version = "0.2.1" 3622 | source = "registry+https://github.com/rust-lang/crates.io-index" 3623 | checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 3624 | dependencies = [ 3625 | "windows-core 0.61.2", 3626 | "windows-link 0.1.3", 3627 | "windows-threading", 3628 | ] 3629 | 3630 | [[package]] 3631 | name = "windows-implement" 3632 | version = "0.58.0" 3633 | source = "registry+https://github.com/rust-lang/crates.io-index" 3634 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 3635 | dependencies = [ 3636 | "proc-macro2", 3637 | "quote", 3638 | "syn", 3639 | ] 3640 | 3641 | [[package]] 3642 | name = "windows-implement" 3643 | version = "0.60.0" 3644 | source = "registry+https://github.com/rust-lang/crates.io-index" 3645 | checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 3646 | dependencies = [ 3647 | "proc-macro2", 3648 | "quote", 3649 | "syn", 3650 | ] 3651 | 3652 | [[package]] 3653 | name = "windows-interface" 3654 | version = "0.58.0" 3655 | source = "registry+https://github.com/rust-lang/crates.io-index" 3656 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 3657 | dependencies = [ 3658 | "proc-macro2", 3659 | "quote", 3660 | "syn", 3661 | ] 3662 | 3663 | [[package]] 3664 | name = "windows-interface" 3665 | version = "0.59.1" 3666 | source = "registry+https://github.com/rust-lang/crates.io-index" 3667 | checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 3668 | dependencies = [ 3669 | "proc-macro2", 3670 | "quote", 3671 | "syn", 3672 | ] 3673 | 3674 | [[package]] 3675 | name = "windows-link" 3676 | version = "0.1.3" 3677 | source = "registry+https://github.com/rust-lang/crates.io-index" 3678 | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 3679 | 3680 | [[package]] 3681 | name = "windows-link" 3682 | version = "0.2.0" 3683 | source = "registry+https://github.com/rust-lang/crates.io-index" 3684 | checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" 3685 | 3686 | [[package]] 3687 | name = "windows-numerics" 3688 | version = "0.2.0" 3689 | source = "registry+https://github.com/rust-lang/crates.io-index" 3690 | checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 3691 | dependencies = [ 3692 | "windows-core 0.61.2", 3693 | "windows-link 0.1.3", 3694 | ] 3695 | 3696 | [[package]] 3697 | name = "windows-result" 3698 | version = "0.2.0" 3699 | source = "registry+https://github.com/rust-lang/crates.io-index" 3700 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 3701 | dependencies = [ 3702 | "windows-targets 0.52.6", 3703 | ] 3704 | 3705 | [[package]] 3706 | name = "windows-result" 3707 | version = "0.3.4" 3708 | source = "registry+https://github.com/rust-lang/crates.io-index" 3709 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 3710 | dependencies = [ 3711 | "windows-link 0.1.3", 3712 | ] 3713 | 3714 | [[package]] 3715 | name = "windows-strings" 3716 | version = "0.1.0" 3717 | source = "registry+https://github.com/rust-lang/crates.io-index" 3718 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 3719 | dependencies = [ 3720 | "windows-result 0.2.0", 3721 | "windows-targets 0.52.6", 3722 | ] 3723 | 3724 | [[package]] 3725 | name = "windows-strings" 3726 | version = "0.4.2" 3727 | source = "registry+https://github.com/rust-lang/crates.io-index" 3728 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 3729 | dependencies = [ 3730 | "windows-link 0.1.3", 3731 | ] 3732 | 3733 | [[package]] 3734 | name = "windows-sys" 3735 | version = "0.45.0" 3736 | source = "registry+https://github.com/rust-lang/crates.io-index" 3737 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 3738 | dependencies = [ 3739 | "windows-targets 0.42.2", 3740 | ] 3741 | 3742 | [[package]] 3743 | name = "windows-sys" 3744 | version = "0.52.0" 3745 | source = "registry+https://github.com/rust-lang/crates.io-index" 3746 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3747 | dependencies = [ 3748 | "windows-targets 0.52.6", 3749 | ] 3750 | 3751 | [[package]] 3752 | name = "windows-sys" 3753 | version = "0.59.0" 3754 | source = "registry+https://github.com/rust-lang/crates.io-index" 3755 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3756 | dependencies = [ 3757 | "windows-targets 0.52.6", 3758 | ] 3759 | 3760 | [[package]] 3761 | name = "windows-sys" 3762 | version = "0.60.2" 3763 | source = "registry+https://github.com/rust-lang/crates.io-index" 3764 | checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 3765 | dependencies = [ 3766 | "windows-targets 0.53.3", 3767 | ] 3768 | 3769 | [[package]] 3770 | name = "windows-sys" 3771 | version = "0.61.0" 3772 | source = "registry+https://github.com/rust-lang/crates.io-index" 3773 | checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" 3774 | dependencies = [ 3775 | "windows-link 0.2.0", 3776 | ] 3777 | 3778 | [[package]] 3779 | name = "windows-targets" 3780 | version = "0.42.2" 3781 | source = "registry+https://github.com/rust-lang/crates.io-index" 3782 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 3783 | dependencies = [ 3784 | "windows_aarch64_gnullvm 0.42.2", 3785 | "windows_aarch64_msvc 0.42.2", 3786 | "windows_i686_gnu 0.42.2", 3787 | "windows_i686_msvc 0.42.2", 3788 | "windows_x86_64_gnu 0.42.2", 3789 | "windows_x86_64_gnullvm 0.42.2", 3790 | "windows_x86_64_msvc 0.42.2", 3791 | ] 3792 | 3793 | [[package]] 3794 | name = "windows-targets" 3795 | version = "0.52.6" 3796 | source = "registry+https://github.com/rust-lang/crates.io-index" 3797 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3798 | dependencies = [ 3799 | "windows_aarch64_gnullvm 0.52.6", 3800 | "windows_aarch64_msvc 0.52.6", 3801 | "windows_i686_gnu 0.52.6", 3802 | "windows_i686_gnullvm 0.52.6", 3803 | "windows_i686_msvc 0.52.6", 3804 | "windows_x86_64_gnu 0.52.6", 3805 | "windows_x86_64_gnullvm 0.52.6", 3806 | "windows_x86_64_msvc 0.52.6", 3807 | ] 3808 | 3809 | [[package]] 3810 | name = "windows-targets" 3811 | version = "0.53.3" 3812 | source = "registry+https://github.com/rust-lang/crates.io-index" 3813 | checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" 3814 | dependencies = [ 3815 | "windows-link 0.1.3", 3816 | "windows_aarch64_gnullvm 0.53.0", 3817 | "windows_aarch64_msvc 0.53.0", 3818 | "windows_i686_gnu 0.53.0", 3819 | "windows_i686_gnullvm 0.53.0", 3820 | "windows_i686_msvc 0.53.0", 3821 | "windows_x86_64_gnu 0.53.0", 3822 | "windows_x86_64_gnullvm 0.53.0", 3823 | "windows_x86_64_msvc 0.53.0", 3824 | ] 3825 | 3826 | [[package]] 3827 | name = "windows-threading" 3828 | version = "0.1.0" 3829 | source = "registry+https://github.com/rust-lang/crates.io-index" 3830 | checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 3831 | dependencies = [ 3832 | "windows-link 0.1.3", 3833 | ] 3834 | 3835 | [[package]] 3836 | name = "windows_aarch64_gnullvm" 3837 | version = "0.42.2" 3838 | source = "registry+https://github.com/rust-lang/crates.io-index" 3839 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 3840 | 3841 | [[package]] 3842 | name = "windows_aarch64_gnullvm" 3843 | version = "0.52.6" 3844 | source = "registry+https://github.com/rust-lang/crates.io-index" 3845 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3846 | 3847 | [[package]] 3848 | name = "windows_aarch64_gnullvm" 3849 | version = "0.53.0" 3850 | source = "registry+https://github.com/rust-lang/crates.io-index" 3851 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 3852 | 3853 | [[package]] 3854 | name = "windows_aarch64_msvc" 3855 | version = "0.42.2" 3856 | source = "registry+https://github.com/rust-lang/crates.io-index" 3857 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 3858 | 3859 | [[package]] 3860 | name = "windows_aarch64_msvc" 3861 | version = "0.52.6" 3862 | source = "registry+https://github.com/rust-lang/crates.io-index" 3863 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3864 | 3865 | [[package]] 3866 | name = "windows_aarch64_msvc" 3867 | version = "0.53.0" 3868 | source = "registry+https://github.com/rust-lang/crates.io-index" 3869 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 3870 | 3871 | [[package]] 3872 | name = "windows_i686_gnu" 3873 | version = "0.42.2" 3874 | source = "registry+https://github.com/rust-lang/crates.io-index" 3875 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 3876 | 3877 | [[package]] 3878 | name = "windows_i686_gnu" 3879 | version = "0.52.6" 3880 | source = "registry+https://github.com/rust-lang/crates.io-index" 3881 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3882 | 3883 | [[package]] 3884 | name = "windows_i686_gnu" 3885 | version = "0.53.0" 3886 | source = "registry+https://github.com/rust-lang/crates.io-index" 3887 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 3888 | 3889 | [[package]] 3890 | name = "windows_i686_gnullvm" 3891 | version = "0.52.6" 3892 | source = "registry+https://github.com/rust-lang/crates.io-index" 3893 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3894 | 3895 | [[package]] 3896 | name = "windows_i686_gnullvm" 3897 | version = "0.53.0" 3898 | source = "registry+https://github.com/rust-lang/crates.io-index" 3899 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 3900 | 3901 | [[package]] 3902 | name = "windows_i686_msvc" 3903 | version = "0.42.2" 3904 | source = "registry+https://github.com/rust-lang/crates.io-index" 3905 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 3906 | 3907 | [[package]] 3908 | name = "windows_i686_msvc" 3909 | version = "0.52.6" 3910 | source = "registry+https://github.com/rust-lang/crates.io-index" 3911 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3912 | 3913 | [[package]] 3914 | name = "windows_i686_msvc" 3915 | version = "0.53.0" 3916 | source = "registry+https://github.com/rust-lang/crates.io-index" 3917 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 3918 | 3919 | [[package]] 3920 | name = "windows_x86_64_gnu" 3921 | version = "0.42.2" 3922 | source = "registry+https://github.com/rust-lang/crates.io-index" 3923 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 3924 | 3925 | [[package]] 3926 | name = "windows_x86_64_gnu" 3927 | version = "0.52.6" 3928 | source = "registry+https://github.com/rust-lang/crates.io-index" 3929 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3930 | 3931 | [[package]] 3932 | name = "windows_x86_64_gnu" 3933 | version = "0.53.0" 3934 | source = "registry+https://github.com/rust-lang/crates.io-index" 3935 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 3936 | 3937 | [[package]] 3938 | name = "windows_x86_64_gnullvm" 3939 | version = "0.42.2" 3940 | source = "registry+https://github.com/rust-lang/crates.io-index" 3941 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 3942 | 3943 | [[package]] 3944 | name = "windows_x86_64_gnullvm" 3945 | version = "0.52.6" 3946 | source = "registry+https://github.com/rust-lang/crates.io-index" 3947 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3948 | 3949 | [[package]] 3950 | name = "windows_x86_64_gnullvm" 3951 | version = "0.53.0" 3952 | source = "registry+https://github.com/rust-lang/crates.io-index" 3953 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 3954 | 3955 | [[package]] 3956 | name = "windows_x86_64_msvc" 3957 | version = "0.42.2" 3958 | source = "registry+https://github.com/rust-lang/crates.io-index" 3959 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 3960 | 3961 | [[package]] 3962 | name = "windows_x86_64_msvc" 3963 | version = "0.52.6" 3964 | source = "registry+https://github.com/rust-lang/crates.io-index" 3965 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3966 | 3967 | [[package]] 3968 | name = "windows_x86_64_msvc" 3969 | version = "0.53.0" 3970 | source = "registry+https://github.com/rust-lang/crates.io-index" 3971 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 3972 | 3973 | [[package]] 3974 | name = "winit" 3975 | version = "0.30.12" 3976 | source = "registry+https://github.com/rust-lang/crates.io-index" 3977 | checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" 3978 | dependencies = [ 3979 | "ahash", 3980 | "android-activity", 3981 | "atomic-waker", 3982 | "bitflags 2.9.4", 3983 | "block2", 3984 | "bytemuck", 3985 | "calloop", 3986 | "cfg_aliases", 3987 | "concurrent-queue", 3988 | "core-foundation 0.9.4", 3989 | "core-graphics", 3990 | "cursor-icon", 3991 | "dpi", 3992 | "js-sys", 3993 | "libc", 3994 | "memmap2", 3995 | "ndk", 3996 | "objc2 0.5.2", 3997 | "objc2-app-kit 0.2.2", 3998 | "objc2-foundation 0.2.2", 3999 | "objc2-ui-kit", 4000 | "orbclient", 4001 | "percent-encoding", 4002 | "pin-project", 4003 | "raw-window-handle", 4004 | "redox_syscall 0.4.1", 4005 | "rustix 0.38.44", 4006 | "smithay-client-toolkit", 4007 | "smol_str", 4008 | "tracing", 4009 | "unicode-segmentation", 4010 | "wasm-bindgen", 4011 | "wasm-bindgen-futures", 4012 | "wayland-backend", 4013 | "wayland-client", 4014 | "wayland-protocols", 4015 | "wayland-protocols-plasma", 4016 | "web-sys", 4017 | "web-time", 4018 | "windows-sys 0.52.0", 4019 | "x11-dl", 4020 | "x11rb", 4021 | "xkbcommon-dl", 4022 | ] 4023 | 4024 | [[package]] 4025 | name = "winnow" 4026 | version = "0.7.13" 4027 | source = "registry+https://github.com/rust-lang/crates.io-index" 4028 | checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 4029 | dependencies = [ 4030 | "memchr", 4031 | ] 4032 | 4033 | [[package]] 4034 | name = "wit-bindgen" 4035 | version = "0.46.0" 4036 | source = "registry+https://github.com/rust-lang/crates.io-index" 4037 | checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" 4038 | 4039 | [[package]] 4040 | name = "wl-clipboard-rs" 4041 | version = "0.9.2" 4042 | source = "registry+https://github.com/rust-lang/crates.io-index" 4043 | checksum = "8e5ff8d0e60065f549fafd9d6cb626203ea64a798186c80d8e7df4f8af56baeb" 4044 | dependencies = [ 4045 | "libc", 4046 | "log", 4047 | "os_pipe", 4048 | "rustix 0.38.44", 4049 | "tempfile", 4050 | "thiserror 2.0.16", 4051 | "tree_magic_mini", 4052 | "wayland-backend", 4053 | "wayland-client", 4054 | "wayland-protocols", 4055 | "wayland-protocols-wlr", 4056 | ] 4057 | 4058 | [[package]] 4059 | name = "writeable" 4060 | version = "0.6.1" 4061 | source = "registry+https://github.com/rust-lang/crates.io-index" 4062 | checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 4063 | 4064 | [[package]] 4065 | name = "x11-dl" 4066 | version = "2.21.0" 4067 | source = "registry+https://github.com/rust-lang/crates.io-index" 4068 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 4069 | dependencies = [ 4070 | "libc", 4071 | "once_cell", 4072 | "pkg-config", 4073 | ] 4074 | 4075 | [[package]] 4076 | name = "x11rb" 4077 | version = "0.13.2" 4078 | source = "registry+https://github.com/rust-lang/crates.io-index" 4079 | checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" 4080 | dependencies = [ 4081 | "as-raw-xcb-connection", 4082 | "gethostname", 4083 | "libc", 4084 | "libloading", 4085 | "once_cell", 4086 | "rustix 1.1.2", 4087 | "x11rb-protocol", 4088 | ] 4089 | 4090 | [[package]] 4091 | name = "x11rb-protocol" 4092 | version = "0.13.2" 4093 | source = "registry+https://github.com/rust-lang/crates.io-index" 4094 | checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" 4095 | 4096 | [[package]] 4097 | name = "xcursor" 4098 | version = "0.3.10" 4099 | source = "registry+https://github.com/rust-lang/crates.io-index" 4100 | checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" 4101 | 4102 | [[package]] 4103 | name = "xkbcommon-dl" 4104 | version = "0.4.2" 4105 | source = "registry+https://github.com/rust-lang/crates.io-index" 4106 | checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" 4107 | dependencies = [ 4108 | "bitflags 2.9.4", 4109 | "dlib", 4110 | "log", 4111 | "once_cell", 4112 | "xkeysym", 4113 | ] 4114 | 4115 | [[package]] 4116 | name = "xkeysym" 4117 | version = "0.2.1" 4118 | source = "registry+https://github.com/rust-lang/crates.io-index" 4119 | checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" 4120 | 4121 | [[package]] 4122 | name = "xml-rs" 4123 | version = "0.8.27" 4124 | source = "registry+https://github.com/rust-lang/crates.io-index" 4125 | checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" 4126 | 4127 | [[package]] 4128 | name = "yoke" 4129 | version = "0.8.0" 4130 | source = "registry+https://github.com/rust-lang/crates.io-index" 4131 | checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 4132 | dependencies = [ 4133 | "serde", 4134 | "stable_deref_trait", 4135 | "yoke-derive", 4136 | "zerofrom", 4137 | ] 4138 | 4139 | [[package]] 4140 | name = "yoke-derive" 4141 | version = "0.8.0" 4142 | source = "registry+https://github.com/rust-lang/crates.io-index" 4143 | checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 4144 | dependencies = [ 4145 | "proc-macro2", 4146 | "quote", 4147 | "syn", 4148 | "synstructure", 4149 | ] 4150 | 4151 | [[package]] 4152 | name = "zbus" 4153 | version = "5.11.0" 4154 | source = "registry+https://github.com/rust-lang/crates.io-index" 4155 | checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" 4156 | dependencies = [ 4157 | "async-broadcast", 4158 | "async-executor", 4159 | "async-io", 4160 | "async-lock", 4161 | "async-process", 4162 | "async-recursion", 4163 | "async-task", 4164 | "async-trait", 4165 | "blocking", 4166 | "enumflags2", 4167 | "event-listener", 4168 | "futures-core", 4169 | "futures-lite", 4170 | "hex", 4171 | "nix", 4172 | "ordered-stream", 4173 | "serde", 4174 | "serde_repr", 4175 | "tracing", 4176 | "uds_windows", 4177 | "windows-sys 0.60.2", 4178 | "winnow", 4179 | "zbus_macros", 4180 | "zbus_names", 4181 | "zvariant", 4182 | ] 4183 | 4184 | [[package]] 4185 | name = "zbus-lockstep" 4186 | version = "0.5.1" 4187 | source = "registry+https://github.com/rust-lang/crates.io-index" 4188 | checksum = "29e96e38ded30eeab90b6ba88cb888d70aef4e7489b6cd212c5e5b5ec38045b6" 4189 | dependencies = [ 4190 | "zbus_xml", 4191 | "zvariant", 4192 | ] 4193 | 4194 | [[package]] 4195 | name = "zbus-lockstep-macros" 4196 | version = "0.5.1" 4197 | source = "registry+https://github.com/rust-lang/crates.io-index" 4198 | checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836" 4199 | dependencies = [ 4200 | "proc-macro2", 4201 | "quote", 4202 | "syn", 4203 | "zbus-lockstep", 4204 | "zbus_xml", 4205 | "zvariant", 4206 | ] 4207 | 4208 | [[package]] 4209 | name = "zbus_macros" 4210 | version = "5.11.0" 4211 | source = "registry+https://github.com/rust-lang/crates.io-index" 4212 | checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" 4213 | dependencies = [ 4214 | "proc-macro-crate", 4215 | "proc-macro2", 4216 | "quote", 4217 | "syn", 4218 | "zbus_names", 4219 | "zvariant", 4220 | "zvariant_utils", 4221 | ] 4222 | 4223 | [[package]] 4224 | name = "zbus_names" 4225 | version = "4.2.0" 4226 | source = "registry+https://github.com/rust-lang/crates.io-index" 4227 | checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" 4228 | dependencies = [ 4229 | "serde", 4230 | "static_assertions", 4231 | "winnow", 4232 | "zvariant", 4233 | ] 4234 | 4235 | [[package]] 4236 | name = "zbus_xml" 4237 | version = "5.0.2" 4238 | source = "registry+https://github.com/rust-lang/crates.io-index" 4239 | checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29" 4240 | dependencies = [ 4241 | "quick-xml 0.36.2", 4242 | "serde", 4243 | "static_assertions", 4244 | "zbus_names", 4245 | "zvariant", 4246 | ] 4247 | 4248 | [[package]] 4249 | name = "zerocopy" 4250 | version = "0.8.27" 4251 | source = "registry+https://github.com/rust-lang/crates.io-index" 4252 | checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 4253 | dependencies = [ 4254 | "zerocopy-derive", 4255 | ] 4256 | 4257 | [[package]] 4258 | name = "zerocopy-derive" 4259 | version = "0.8.27" 4260 | source = "registry+https://github.com/rust-lang/crates.io-index" 4261 | checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 4262 | dependencies = [ 4263 | "proc-macro2", 4264 | "quote", 4265 | "syn", 4266 | ] 4267 | 4268 | [[package]] 4269 | name = "zerofrom" 4270 | version = "0.1.6" 4271 | source = "registry+https://github.com/rust-lang/crates.io-index" 4272 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 4273 | dependencies = [ 4274 | "zerofrom-derive", 4275 | ] 4276 | 4277 | [[package]] 4278 | name = "zerofrom-derive" 4279 | version = "0.1.6" 4280 | source = "registry+https://github.com/rust-lang/crates.io-index" 4281 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 4282 | dependencies = [ 4283 | "proc-macro2", 4284 | "quote", 4285 | "syn", 4286 | "synstructure", 4287 | ] 4288 | 4289 | [[package]] 4290 | name = "zerotrie" 4291 | version = "0.2.2" 4292 | source = "registry+https://github.com/rust-lang/crates.io-index" 4293 | checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 4294 | dependencies = [ 4295 | "displaydoc", 4296 | "yoke", 4297 | "zerofrom", 4298 | ] 4299 | 4300 | [[package]] 4301 | name = "zerovec" 4302 | version = "0.11.4" 4303 | source = "registry+https://github.com/rust-lang/crates.io-index" 4304 | checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" 4305 | dependencies = [ 4306 | "yoke", 4307 | "zerofrom", 4308 | "zerovec-derive", 4309 | ] 4310 | 4311 | [[package]] 4312 | name = "zerovec-derive" 4313 | version = "0.11.1" 4314 | source = "registry+https://github.com/rust-lang/crates.io-index" 4315 | checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 4316 | dependencies = [ 4317 | "proc-macro2", 4318 | "quote", 4319 | "syn", 4320 | ] 4321 | 4322 | [[package]] 4323 | name = "zune-core" 4324 | version = "0.4.12" 4325 | source = "registry+https://github.com/rust-lang/crates.io-index" 4326 | checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" 4327 | 4328 | [[package]] 4329 | name = "zune-jpeg" 4330 | version = "0.4.21" 4331 | source = "registry+https://github.com/rust-lang/crates.io-index" 4332 | checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" 4333 | dependencies = [ 4334 | "zune-core", 4335 | ] 4336 | 4337 | [[package]] 4338 | name = "zvariant" 4339 | version = "5.7.0" 4340 | source = "registry+https://github.com/rust-lang/crates.io-index" 4341 | checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" 4342 | dependencies = [ 4343 | "endi", 4344 | "enumflags2", 4345 | "serde", 4346 | "winnow", 4347 | "zvariant_derive", 4348 | "zvariant_utils", 4349 | ] 4350 | 4351 | [[package]] 4352 | name = "zvariant_derive" 4353 | version = "5.7.0" 4354 | source = "registry+https://github.com/rust-lang/crates.io-index" 4355 | checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" 4356 | dependencies = [ 4357 | "proc-macro-crate", 4358 | "proc-macro2", 4359 | "quote", 4360 | "syn", 4361 | "zvariant_utils", 4362 | ] 4363 | 4364 | [[package]] 4365 | name = "zvariant_utils" 4366 | version = "3.2.1" 4367 | source = "registry+https://github.com/rust-lang/crates.io-index" 4368 | checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" 4369 | dependencies = [ 4370 | "proc-macro2", 4371 | "quote", 4372 | "serde", 4373 | "syn", 4374 | "winnow", 4375 | ] 4376 | --------------------------------------------------------------------------------