├── .gitignore ├── images ├── 1.png └── 2.png ├── README.md ├── Cargo.toml ├── src ├── style.rs ├── lib.rs ├── route.rs └── view.rs ├── examples └── basic.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teabound/egui-cfg/HEAD/images/1.png -------------------------------------------------------------------------------- /images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teabound/egui-cfg/HEAD/images/2.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # egui-cfg 2 | egui library for displaying control flow graphs using petgraph. 3 | 4 | | Default | Custom | 5 | |---|---| 6 | | | | 7 | 8 | ## Usage 9 | See the [examples](examples/) folder. 10 | 11 | ```toml 12 | [dependencies] 13 | egui-cfg = "*" 14 | ``` 15 | 16 | ## Demo 17 | ```bash 18 | $ git clone https://github.com/teabound/egui-cfg 19 | $ cd egui-cfg 20 | $ cargo run --example basic --release 21 | ``` 22 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "egui-cfg" 3 | version = "0.1.0" 4 | edition = "2024" 5 | license = "MIT" 6 | keywords = ["egui", "cfg", "visualization", "graph"] 7 | description = "egui library for displaying control flow graphs using petgraph." 8 | repository = "https://github.com/teabound/egui-cfg" 9 | homepage = "https://github.com/teabound/egui-cfg" 10 | documentation = "https://docs.rs/egui-cfg" 11 | readme = "README.md" 12 | 13 | [dependencies] 14 | egui = "0.32" 15 | petgraph = "0.8.1" 16 | rust-sugiyama = "0.4.0" 17 | 18 | [dev-dependencies] 19 | eframe = "0.32" 20 | -------------------------------------------------------------------------------- /src/style.rs: -------------------------------------------------------------------------------- 1 | use egui::{self, Color32, FontId, Stroke, TextStyle, Vec2, vec2}; 2 | 3 | use crate::BlockLike; 4 | 5 | /// This is the style of the Basic Block graph node. 6 | /// 7 | /// a.k.a how it actaully appears when rendered. 8 | #[derive(Clone)] 9 | pub struct NodeStyle { 10 | pub size: egui::Vec2, 11 | /// The n,w,e,s padding inside of the node. 12 | pub padding: egui::Vec2, 13 | pub button_padding: egui::Vec2, 14 | pub rounding: u8, 15 | pub fill: Color32, 16 | pub header_fill: Color32, 17 | pub stroke: Stroke, 18 | /// The height of the header, or title box. 19 | pub header_height: f32, 20 | pub label_font: FontId, 21 | pub text_font: FontId, 22 | pub edge: Stroke, 23 | pub select: Stroke, 24 | pub select_bg: Color32, 25 | } 26 | 27 | impl NodeStyle { 28 | pub fn from_style(style: &egui::Style) -> Self { 29 | let mono = style 30 | .text_styles 31 | .get(&TextStyle::Monospace) 32 | .cloned() 33 | .unwrap_or(FontId::monospace(12.0)); 34 | 35 | let visuals = &style.visuals; 36 | let non_interactive = &visuals.widgets.noninteractive; 37 | let inactive = &visuals.widgets.inactive; 38 | let spacing = &style.spacing; 39 | 40 | Self { 41 | size: vec2(260.0, 120.0), 42 | padding: Vec2::new(10.0, 10.0), 43 | button_padding: spacing.button_padding, 44 | rounding: non_interactive.corner_radius.nw, 45 | fill: visuals.code_bg_color, 46 | header_fill: inactive.bg_fill, 47 | stroke: non_interactive.bg_stroke, 48 | header_height: spacing.interact_size.y, 49 | label_font: mono.clone(), 50 | text_font: mono, 51 | edge: non_interactive.fg_stroke, 52 | select: style.visuals.selection.stroke, 53 | select_bg: style.visuals.selection.bg_fill, 54 | } 55 | } 56 | } 57 | 58 | impl Default for NodeStyle { 59 | fn default() -> Self { 60 | Self::from_style(&egui::Style::default()) 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /examples/basic.rs: -------------------------------------------------------------------------------- 1 | use egui_cfg::{BlockLike, EdgeKind, LayoutConfig, style::NodeStyle, view::CfgView}; 2 | 3 | use eframe::egui::{self, Rect, pos2, vec2}; 4 | use eframe::{self}; 5 | use petgraph::graph::NodeIndex; 6 | use petgraph::stable_graph::StableGraph; 7 | 8 | #[derive(Clone, Debug)] 9 | struct BasicBlock { 10 | addr: u64, 11 | title: String, 12 | code: Vec, 13 | } 14 | 15 | impl BlockLike for BasicBlock { 16 | fn title(&self) -> &str { 17 | &self.title 18 | } 19 | 20 | fn body_lines(&self) -> &[String] { 21 | &self.code 22 | } 23 | } 24 | 25 | fn build_dummy_cfg() -> StableGraph { 26 | let mut g = StableGraph::new(); 27 | 28 | let entry = g.add_node(BasicBlock { 29 | addr: 0x1000, 30 | title: "entry".into(), 31 | code: vec!["push rbp".into(), "mov rbp, rsp".into()], 32 | }); 33 | 34 | let cond = g.add_node(BasicBlock { 35 | addr: 0x1005, 36 | title: "cmp and branch".into(), 37 | code: vec!["cmp rdi, 0".into(), "jl then".into()], 38 | }); 39 | 40 | let then_ = g.add_node(BasicBlock { 41 | addr: 0x1010, 42 | title: "then".into(), 43 | code: vec!["neg rdi".into(), "mov rax, rdi".into()], 44 | }); 45 | 46 | let else_ = g.add_node(BasicBlock { 47 | addr: 0x1018, 48 | title: "else".into(), 49 | code: vec!["mov rax, rdi".into()], 50 | }); 51 | 52 | let exit = g.add_node(BasicBlock { 53 | addr: 0x1020, 54 | title: "exit".into(), 55 | code: vec!["pop rbp".into(), "ret".into()], 56 | }); 57 | 58 | g.add_edge(entry, cond, EdgeKind::FallThrough); 59 | g.add_edge(cond, then_, EdgeKind::Taken); 60 | g.add_edge(cond, else_, EdgeKind::FallThrough); 61 | g.add_edge(then_, exit, EdgeKind::Unconditional); 62 | g.add_edge(else_, exit, EdgeKind::Unconditional); 63 | 64 | g 65 | } 66 | 67 | struct App { 68 | graph: StableGraph, 69 | selected: Option, 70 | style: NodeStyle, 71 | scene_rect: Rect, 72 | } 73 | 74 | impl eframe::App for App { 75 | fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { 76 | egui::CentralPanel::default().show(ctx, |ui| { 77 | CfgView::new( 78 | self.graph.clone(), 79 | LayoutConfig::default(), 80 | &mut self.selected, 81 | &self.style, 82 | ) 83 | .show(ui, &mut self.scene_rect); 84 | }); 85 | } 86 | } 87 | 88 | fn main() -> eframe::Result<()> { 89 | let scene_rect = Rect::from_min_size(pos2(-1000.0, -1000.0), vec2(2000.0, 2000.0)); 90 | 91 | eframe::run_native( 92 | "CFG Demo", 93 | eframe::NativeOptions::default(), 94 | Box::new(|_| { 95 | Ok(Box::new(App { 96 | selected: None, 97 | graph: build_dummy_cfg(), 98 | style: NodeStyle::default(), 99 | scene_rect, 100 | })) 101 | }), 102 | ) 103 | } 104 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod route; 2 | pub mod style; 3 | pub mod view; 4 | 5 | use crate::style::NodeStyle; 6 | use egui::{Color32, Galley, Pos2, Rect, Ui, vec2}; 7 | use petgraph::{ 8 | graph::NodeIndex, 9 | stable_graph::StableGraph, 10 | visit::{EdgeRef, IntoEdgeReferences}, 11 | }; 12 | 13 | pub trait BlockLike: Clone { 14 | fn title(&self) -> &str; 15 | fn body_lines(&self) -> &[String]; 16 | } 17 | 18 | #[derive(Clone, Debug, Copy)] 19 | pub enum EdgeKind { 20 | Taken, 21 | FallThrough, 22 | Unconditional, 23 | } 24 | 25 | pub trait EdgeLike: Clone { 26 | fn kind(&self) -> EdgeKind; 27 | } 28 | 29 | impl EdgeLike for EdgeKind { 30 | fn kind(&self) -> EdgeKind { 31 | *self 32 | } 33 | } 34 | 35 | #[derive(Clone, Debug, Default)] 36 | pub struct CfgLayout { 37 | pub coords: Vec<(NodeIndex, (f64, f64))>, 38 | pub width: f64, 39 | pub height: f64, 40 | } 41 | 42 | #[derive(Clone, Debug)] 43 | pub struct LayoutConfig { 44 | pub vertex_spacing: f64, 45 | } 46 | 47 | impl Default for LayoutConfig { 48 | fn default() -> Self { 49 | Self { 50 | vertex_spacing: 30.0, 51 | } 52 | } 53 | } 54 | 55 | impl From<&LayoutConfig> for rust_sugiyama::configure::Config { 56 | fn from(lhs: &LayoutConfig) -> Self { 57 | let mut cfg = rust_sugiyama::configure::Config::default(); 58 | 59 | cfg.vertex_spacing = lhs.vertex_spacing; 60 | 61 | cfg 62 | } 63 | } 64 | 65 | pub fn get_block_rectangle( 66 | ui: &Ui, 67 | block: &N, 68 | style: &NodeStyle, 69 | ) -> (Rect, std::sync::Arc) { 70 | // where the block that we're going to draw starts. 71 | let block_position = Pos2::new(0.0, 0.0); 72 | 73 | // get the width of the content (the size of the node without the padding). 74 | let content_width = style.size.x - style.padding.x * 2.0; 75 | 76 | let body_text = block.body_lines().join("\n"); 77 | 78 | // get the text galley so we can get information related to it. 79 | let body_galley = ui.fonts(|f| { 80 | f.layout( 81 | body_text, 82 | style.text_font.clone(), 83 | Color32::WHITE, 84 | content_width, 85 | ) 86 | }); 87 | 88 | // ge the total size of the height including the padding, the text and the header. 89 | let block_height = style.header_height + style.padding.y * 2.0 + body_galley.size().y; 90 | 91 | // create a rectangle starting from the start of our block and is the size we've calculated 92 | // from the content in the block. 93 | let rect = Rect::from_min_size(block_position, vec2(style.size.x, block_height)); 94 | 95 | (rect, body_galley) 96 | } 97 | 98 | pub fn get_cfg_layout( 99 | ui: &Ui, 100 | graph: &StableGraph, 101 | config: &LayoutConfig, 102 | style: &NodeStyle, 103 | ) -> CfgLayout { 104 | // Get the block rectangle to use as the vertex size. 105 | let vertex_size = |_: NodeIndex, n: &N| { 106 | let rect = get_block_rectangle(ui, n, style).0; 107 | (rect.width() as _, rect.height() as f64) 108 | }; 109 | 110 | let mut graph = graph.clone(); 111 | 112 | // get all nodes that have an outgoing edge that connects to the same node. 113 | let loops: Vec<(petgraph::graph::NodeIndex, E)> = graph 114 | .edge_references() 115 | .filter(|e| e.source() == e.target()) 116 | .map(|e| (e.source(), e.weight().clone())) 117 | .collect(); 118 | 119 | // remove all the edges that point to the same node. 120 | for edge in graph.edge_indices().collect::>() { 121 | if let Some((u, v)) = graph.edge_endpoints(edge) { 122 | if u == v { 123 | graph.remove_edge(edge); 124 | } 125 | } 126 | } 127 | 128 | let info = rust_sugiyama::from_graph(&graph, &vertex_size, &config.into()); 129 | 130 | // NOTE: maybe there will be a case when we need to get the full vector. 131 | let (coords, width, height) = info[0].clone(); 132 | 133 | // add the loop back after we've placed nodes. 134 | for (n, w) in loops { 135 | graph.add_edge(n, n, w); 136 | } 137 | 138 | CfgLayout { 139 | coords, 140 | width, 141 | height, 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /src/route.rs: -------------------------------------------------------------------------------- 1 | use core::f32; 2 | use std::{ 3 | cmp::Reverse, 4 | collections::{BinaryHeap, HashMap, HashSet}, 5 | }; 6 | 7 | pub type GridCoord = (usize, usize); 8 | 9 | #[derive(Clone, Copy, Debug)] 10 | pub struct Grid { 11 | pub origin: egui::Pos2, 12 | pub cols: usize, 13 | pub rows: usize, 14 | pub cell: f32, 15 | } 16 | 17 | impl Grid { 18 | /// Create a grid from a rect, whose cell size is `cell`. 19 | pub fn from_scene(scene: egui::Rect, cell: f32) -> Self { 20 | // maybe return an error if either return 0 after floor. 21 | let cols = (scene.width() / cell).floor() as usize; 22 | let rows = (scene.height() / cell).floor() as usize; 23 | 24 | let ox = (scene.min.x / cell).floor() * cell; 25 | let oy = (scene.min.y / cell).floor() * cell; 26 | 27 | Self { 28 | origin: egui::pos2(ox, oy), 29 | cols, 30 | rows, 31 | cell, 32 | } 33 | } 34 | 35 | /// Gets all valid 4-direction neighbors of `coords` inside the grid. 36 | fn cardinal_neighbors(&self, coords: GridCoord) -> Vec { 37 | let (x, y) = coords; 38 | let mut neighbors = Vec::new(); 39 | 40 | if x + 1 < self.cols { 41 | neighbors.push((x + 1, y)); 42 | } 43 | if let Some(nx) = x.checked_sub(1) { 44 | neighbors.push((nx, y)); 45 | } 46 | 47 | if y + 1 < self.rows { 48 | neighbors.push((x, y + 1)); 49 | } 50 | 51 | if let Some(ny) = y.checked_sub(1) { 52 | neighbors.push((x, ny)); 53 | } 54 | 55 | neighbors 56 | } 57 | 58 | /// Convert a position to a place in the grid. 59 | fn to_cell(&self, p: egui::Pos2) -> GridCoord { 60 | // turn into origin relative coordinates. 61 | let rel = p - self.origin; 62 | 63 | // get the nearest cell. 64 | let mut x = (rel.x / self.cell).floor() as isize; 65 | let mut y = (rel.y / self.cell).floor() as isize; 66 | 67 | x = x.clamp(0, self.cols as isize - 1); 68 | y = y.clamp(0, self.rows as isize - 1); 69 | 70 | (x as usize, y as usize) 71 | } 72 | 73 | /// Convert 2D `GridCoord`, into 1D index. 74 | pub const fn to_index(&self, coords: GridCoord) -> usize { 75 | coords.1 * self.cols + coords.0 76 | } 77 | 78 | /// Return the position of the center of the cell. 79 | pub fn cell_center(&self, coords: GridCoord) -> egui::Pos2 { 80 | let (x, y) = coords; 81 | self.origin + egui::vec2((x as f32 + 0.5) * self.cell, (y as f32 + 0.5) * self.cell) 82 | } 83 | 84 | /// Returns which direction we go to, from `a`, to `b`. 85 | pub const fn get_direction(a: GridCoord, b: GridCoord) -> (i8, i8) { 86 | ( 87 | (b.0 as isize - a.0 as isize).signum() as i8, 88 | (b.1 as isize - a.1 as isize).signum() as i8, 89 | ) 90 | } 91 | } 92 | 93 | #[derive(Debug, Clone)] 94 | pub struct CostField { 95 | pub cost: Vec, 96 | pub grid: Grid, 97 | } 98 | 99 | impl CostField { 100 | pub fn new(grid: Grid) -> Self { 101 | Self { 102 | cost: vec![1.0; grid.cols * grid.rows], 103 | grid, 104 | } 105 | } 106 | 107 | fn get_cost_cell_mut(&mut self, coords: GridCoord) -> &mut f32 { 108 | &mut self.cost[self.grid.to_index(coords)] 109 | } 110 | 111 | fn cost_at(&self, coords: GridCoord) -> Option { 112 | self.cost.get(self.grid.to_index(coords)).copied() 113 | } 114 | 115 | /// Add a rectangle to the cost field, with a cost radius. 116 | /// 117 | /// The cost radius isn't a hard block but discourages lines from going through it. 118 | pub fn add_block_rect(&mut self, block_rectangle: egui::Rect, radius: f32) { 119 | // we expand the rectangle by the margin so that we increase the "hitbox". 120 | // let block_rectangle = block_rectangle.expand(margin); 121 | 122 | for y in 0..self.grid.rows { 123 | for x in 0..self.grid.cols { 124 | let coords: GridCoord = (x, y); 125 | 126 | // we get the position of the center of the current grid cell. 127 | let cell = self.grid.cell_center(coords); 128 | 129 | // anything that is inside of the block increase the cost. 130 | if block_rectangle.contains(cell) { 131 | *self.get_cost_cell_mut(coords) = f32::MAX; 132 | continue; 133 | } 134 | 135 | let d = block_rectangle.distance_to_pos(cell); 136 | 137 | // get the 3 cell distance percentage between current cell and the block. 138 | let falloff = (self.grid.cell * radius - d).max(0.0) / (self.grid.cell * radius); 139 | 140 | *self.get_cost_cell_mut(coords) += 3.0 * falloff; 141 | } 142 | } 143 | } 144 | } 145 | 146 | #[derive(Clone)] 147 | pub struct CellBase { 148 | g: f32, 149 | h: f32, 150 | parent: Option, 151 | } 152 | 153 | impl CellBase { 154 | const fn new() -> Self { 155 | Self { 156 | g: f32::INFINITY, 157 | h: 0.0, 158 | parent: None, 159 | } 160 | } 161 | 162 | const fn f(&self) -> f32 { 163 | self.g + self.h 164 | } 165 | } 166 | 167 | pub struct AStar<'a> { 168 | field: &'a CostField, 169 | // /// We map grid coordinates to cell information. 170 | } 171 | 172 | impl<'a> AStar<'a> { 173 | pub fn new(field: &'a CostField) -> Self { 174 | Self { field } 175 | } 176 | 177 | /// Manhattan distance that we use for our A* H cost calculation. 178 | const fn manhattan(a: GridCoord, b: GridCoord) -> usize { 179 | a.0.abs_diff(b.0) + a.1.abs_diff(b.1) 180 | } 181 | 182 | /// Used specifically so that we can have Ord on "floats". 183 | const fn float_key(f: f32) -> u32 { 184 | let bits = f.to_bits(); 185 | if bits & 0x8000_0000 == 0 { 186 | bits | 0x8000_0000 187 | } else { 188 | !bits 189 | } 190 | } 191 | 192 | pub fn find_path(&mut self, begin: egui::Pos2, finish: egui::Pos2) -> Option> { 193 | // get the starting cell. 194 | let start = self.field.grid.to_cell(begin); 195 | 196 | // get the ending cell. 197 | let end = self.field.grid.to_cell(finish); 198 | 199 | // reject if the goal is in a blocked region. 200 | if self.field.cost_at(end)? == f32::MAX { 201 | println!("invalid end position"); 202 | return None; 203 | } 204 | 205 | // we create a bounding box that keeps our focus within range of the start and end positions. 206 | let bounding_box = 207 | egui::Rect::from_two_pos(begin, finish).expand(100.0 * self.field.grid.cell); 208 | 209 | // we use a min heap to keep track of the most ideal pending coordinates. 210 | let mut pending: BinaryHeap<(Reverse, GridCoord)> = BinaryHeap::new(); 211 | 212 | // keep track of all the coordinates we've seen/processed. 213 | let mut seen: HashSet = HashSet::new(); 214 | 215 | let mut cells: HashMap = HashMap::new(); 216 | 217 | cells.insert( 218 | start, 219 | CellBase { 220 | g: 0.0, 221 | h: Self::manhattan(start, end) as _, 222 | parent: None, 223 | }, 224 | ); 225 | 226 | // place the starting coordinate into the pending min heap along with its f cost. 227 | pending.push((Reverse(Self::float_key(cells[&start].f())), start)); 228 | 229 | while let Some((_, mut current)) = pending.pop() { 230 | if !seen.insert(current) { 231 | continue; 232 | } 233 | 234 | if current == end { 235 | // this will create list of parents of successive cells. 236 | let mut path = vec![current]; 237 | 238 | while let Some(prev) = cells.get(¤t).and_then(|c| c.parent) { 239 | current = prev; 240 | path.push(current); 241 | } 242 | 243 | // reverse the list so that it's children->parent. 244 | path.reverse(); 245 | 246 | return Some( 247 | path.into_iter() 248 | .map(|p| self.field.grid.cell_center(p)) 249 | .collect(), 250 | ); 251 | } 252 | 253 | for neighbor in self.field.grid.cardinal_neighbors(current) { 254 | // if our neighbor doesn't exist within our assumed range then continue. 255 | if !bounding_box.contains(self.field.grid.cell_center(neighbor)) { 256 | continue; 257 | } 258 | 259 | // take any cost as long as the cost isn't the max, aka a wall. 260 | let neighbor_cost = match self.field.cost_at(neighbor) { 261 | Some(c) if c != f32::MAX => c, 262 | _ => continue, 263 | }; 264 | 265 | let incoming_dir = cells 266 | .get(¤t) 267 | .and_then(|c| c.parent) 268 | .map(|p| Grid::get_direction(p, current)); 269 | 270 | // get the direction from our current cell to the neighbor cell, to compare. 271 | let step_dir = Grid::get_direction(current, neighbor); 272 | 273 | // if the direction is different from parent to child than child to neighbor, add penalty. 274 | let turn_pen = if Some(step_dir) != incoming_dir { 275 | 1.0 276 | } else { 277 | 0.0 278 | }; 279 | 280 | // get the cost that it would take to go from our current cell to this neighbor. 281 | let candidate_cost = cells[¤t].g + neighbor_cost + turn_pen; 282 | 283 | let neighbor_cell = cells.entry(neighbor).or_insert_with(CellBase::new); 284 | 285 | if candidate_cost < neighbor_cell.g { 286 | neighbor_cell.g = candidate_cost; 287 | neighbor_cell.h = Self::manhattan(neighbor, end) as _; 288 | neighbor_cell.parent = Some(current); 289 | 290 | let f = neighbor_cell.f(); 291 | 292 | pending.push((Reverse(Self::float_key(f)), neighbor)); 293 | } 294 | } 295 | } 296 | 297 | None 298 | } 299 | } 300 | -------------------------------------------------------------------------------- /src/view.rs: -------------------------------------------------------------------------------- 1 | use std::collections::HashMap; 2 | 3 | use crate::BlockLike; 4 | use crate::CfgLayout; 5 | use crate::EdgeKind; 6 | use crate::EdgeLike; 7 | use crate::LayoutConfig; 8 | use crate::get_cfg_layout; 9 | use crate::route::{AStar, CostField, Grid}; 10 | use crate::style::NodeStyle; 11 | use egui::emath::easing; 12 | use egui::{Align2, Color32, CornerRadius, Pos2, Rect, Stroke, StrokeKind, Ui, pos2, vec2}; 13 | use petgraph::graph::NodeIndex; 14 | use petgraph::prelude::StableGraph; 15 | use petgraph::visit::EdgeRef; 16 | 17 | /// The offset from the port to the basic block rectangle. 18 | const PORT_OFFSET: f32 = 4.0; 19 | 20 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] 21 | pub enum PortKind { 22 | Input, 23 | Output, 24 | } 25 | 26 | #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] 27 | pub struct PortSlot { 28 | pub node: NodeIndex, 29 | pub slot: usize, 30 | pub kind: PortKind, 31 | } 32 | 33 | impl PortSlot { 34 | pub fn new(node: NodeIndex, slot: usize, kind: PortKind) -> Self { 35 | Self { node, slot, kind } 36 | } 37 | } 38 | 39 | #[derive(Clone, Debug, Hash, Eq, PartialEq)] 40 | pub struct PortLine { 41 | pub from: PortSlot, 42 | pub to: PortSlot, 43 | } 44 | 45 | pub struct CfgView<'a, N: BlockLike, E: EdgeLike> { 46 | graph: StableGraph, 47 | layout_config: LayoutConfig, 48 | block_rects: HashMap, 49 | port_positions: HashMap, 50 | port_lines: Vec, 51 | pub style: &'a NodeStyle, 52 | selected: &'a mut Option, 53 | } 54 | 55 | impl<'a, N: BlockLike, E: EdgeLike> CfgView<'a, N, E> { 56 | pub fn new( 57 | graph: StableGraph, 58 | config: LayoutConfig, 59 | selected: &'a mut Option, 60 | style: &'a NodeStyle, 61 | ) -> Self { 62 | Self { 63 | graph, 64 | layout_config: config, 65 | style, 66 | block_rects: HashMap::new(), 67 | port_lines: Vec::new(), 68 | port_positions: HashMap::new(), 69 | selected, 70 | } 71 | } 72 | 73 | /// Get a rectangle the encompasses every block node placed. 74 | fn get_world_rect(&self, expand: Option) -> Rect { 75 | let mut bounds = egui::Rect::NOTHING; 76 | 77 | // unionize all of the rects we created. 78 | for rects in self.block_rects.values() { 79 | bounds = bounds.union(*rects); 80 | } 81 | 82 | bounds.expand(expand.unwrap_or(100.0)) 83 | } 84 | 85 | fn handle_block_interaction(&mut self, ui: &mut Ui, rect: &Rect, node: &NodeIndex) { 86 | let id = ui.make_persistent_id(("node", node.index())); 87 | 88 | let response = ui.interact(*rect, id, egui::Sense::click()); 89 | 90 | // if we clicked on something that wasn't a rectangle. 91 | if ui.input(|i| i.pointer.any_pressed()) && !response.hovered() { 92 | *self.selected = None; 93 | } 94 | 95 | if response.clicked() { 96 | *self.selected = Some(*node) 97 | } 98 | 99 | let glow_on = response.hovered() || *self.selected == Some(*node); 100 | 101 | // goes from 0 to 1 over time, once we've hovered or selected. 102 | let t = ui.ctx().animate_bool(id, glow_on) * 0.4; 103 | 104 | if t > 0.0 { 105 | // we will increase the outline over time. 106 | let outline_width = 4.0 * easing::back_out(t); 107 | 108 | ui.painter().rect( 109 | *rect, 110 | CornerRadius::same(self.style.rounding), 111 | Color32::TRANSPARENT, 112 | Stroke::new(outline_width, self.style.select.color.gamma_multiply(0.50)), 113 | StrokeKind::Outside, 114 | ); 115 | } 116 | } 117 | 118 | /// This will draw blocks in the egui ui panel, and also push the position on the 119 | /// block rectangle to a hashmap, so that we can use it later. 120 | fn assign_and_draw_blocks(&mut self, ui: &mut Ui, layout: &CfgLayout) { 121 | for (node, coords) in &layout.coords { 122 | let (x, y) = (coords.0 as f32, coords.1 as f32); 123 | 124 | // get the target basic block from the graph. 125 | let block = self.graph[*node].clone(); 126 | 127 | let style = self.style; 128 | 129 | // get the rectangle of our basic block or just node. 130 | let (mut block_rectangle, body_galley) = crate::get_block_rectangle(ui, &block, style); 131 | 132 | // give the rectangle the correct position. 133 | block_rectangle.set_center(Pos2::new(x, y)); 134 | 135 | // TODO: have a setting that disables interaction somehow. 136 | self.handle_block_interaction(ui, &block_rectangle, node); 137 | 138 | // draw the entire node block. 139 | ui.painter().rect( 140 | block_rectangle, 141 | CornerRadius::same(style.rounding), 142 | style.fill, 143 | egui::Stroke { 144 | color: style.header_fill, 145 | ..style.stroke 146 | }, 147 | StrokeKind::Inside, 148 | ); 149 | 150 | // the header rectangle, width is the size of the block, then we just add the header height. 151 | let header_rectangle = Rect::from_min_max( 152 | block_rectangle.min, 153 | pos2( 154 | block_rectangle.max.x, 155 | block_rectangle.min.y + style.header_height, 156 | ), 157 | ); 158 | 159 | ui.painter().rect( 160 | header_rectangle, 161 | CornerRadius { 162 | nw: style.rounding, 163 | ne: style.rounding, 164 | se: 0, 165 | sw: 0, 166 | }, 167 | style.header_fill, 168 | Stroke::NONE, 169 | StrokeKind::Inside, 170 | ); 171 | 172 | // block title, could be empty or not. 173 | let label = format!("{}", block.title()); 174 | // NOTE: have an option to put the title in the middle of the header rectangle. 175 | let label_pos = header_rectangle.left_center() + vec2(style.button_padding.x, 0.0); 176 | 177 | ui.painter().text( 178 | label_pos, 179 | Align2::LEFT_CENTER, 180 | label, 181 | style.label_font.clone(), 182 | Color32::WHITE, 183 | ); 184 | 185 | let text_pos = pos2( 186 | block_rectangle.min.x + style.padding.x, 187 | header_rectangle.max.y + style.padding.y, 188 | ); 189 | 190 | ui.painter().galley(text_pos, body_galley, Color32::WHITE); 191 | 192 | // add our newly created block rectangle. 193 | self.block_rects.insert(*node, block_rectangle); 194 | } 195 | } 196 | 197 | /// This will get the position at the point of a rect, either the top 198 | /// or bottom, where the next port should be placed depending on `count`. 199 | fn layout_ports_on_rect(rect: Rect, kind: PortKind, count: usize) -> Vec { 200 | let (left, right) = match kind { 201 | PortKind::Input => (rect.left_top(), rect.right_top()), 202 | PortKind::Output => (rect.left_bottom(), rect.right_bottom()), 203 | }; 204 | 205 | (0..count) 206 | .map(|i| { 207 | let t = (i as f32 + 1.0) / (count as f32 + 1.0); 208 | left.lerp(right, t) 209 | }) 210 | .collect() 211 | } 212 | 213 | fn assign_port_positions(&mut self) { 214 | for node in self.graph.node_indices() { 215 | let graph = &self.graph; 216 | 217 | // get the indegree of hte current node. 218 | let inputs = graph.neighbors_directed(node, petgraph::Incoming).count(); 219 | // get the outdegree of the current node. 220 | let outputs = graph.neighbors_directed(node, petgraph::Outgoing).count(); 221 | 222 | if let Some(&rect) = self.block_rects.get(&node) { 223 | for (i, mut pos) in Self::layout_ports_on_rect(rect, PortKind::Input, inputs) 224 | .into_iter() 225 | .enumerate() 226 | { 227 | let port = PortSlot::new(node, i, PortKind::Input); 228 | // we offset so the ports don't overlap with the basic block rectangles. 229 | pos.y += -PORT_OFFSET; 230 | self.port_positions.insert(port, pos); 231 | } 232 | 233 | for (i, mut pos) in Self::layout_ports_on_rect(rect, PortKind::Output, outputs) 234 | .into_iter() 235 | .enumerate() 236 | { 237 | let port = PortSlot::new(node, i, PortKind::Output); 238 | // we offset so the ports don't overlap with the basic block rectangles. 239 | pos.y += PORT_OFFSET; 240 | self.port_positions.insert(port, pos); 241 | } 242 | } 243 | } 244 | } 245 | 246 | fn draw_arrow_tip( 247 | &self, 248 | ui: &mut egui::Ui, 249 | tip: egui::Pos2, 250 | dir: Option, 251 | selected: bool, 252 | ) { 253 | let size = self.style.edge.width * 4.0; 254 | 255 | // get the unit direction of the arrow 256 | let dir = dir.unwrap_or(egui::vec2(0.0, 1.0)).normalized(); 257 | 258 | // get the base of the triangle. 259 | let base = tip - dir * size; 260 | 261 | // set the vector perpendicular to tip->base, half the size of the base. 262 | let perp = egui::vec2(-dir.y, dir.x) * (size * 0.5); 263 | 264 | let p1 = base + perp; 265 | let p2 = base - perp; 266 | 267 | let (color, edge) = { 268 | if selected { 269 | (self.style.select.color, self.style.select) 270 | } else { 271 | (self.style.edge.color, self.style.edge) 272 | } 273 | }; 274 | 275 | ui.painter() 276 | .add(egui::Shape::convex_polygon(vec![tip, p1, p2], color, edge)); 277 | } 278 | 279 | fn draw_ports(&mut self, ui: &mut egui::Ui) { 280 | let target_ports: Vec<_> = self.selected.map_or(Vec::new(), |target| { 281 | self.port_lines 282 | .iter() 283 | .filter_map(|l| (l.from.node == target).then_some(l.to)) 284 | .collect() 285 | }); 286 | 287 | for (slot, mut pos) in self.port_positions.clone() { 288 | match slot.kind { 289 | PortKind::Output => { 290 | // draw the port closer to the block. 291 | pos.y -= PORT_OFFSET - 2.0; 292 | 293 | let radius = self.style.edge.width * 3.0; 294 | 295 | ui.painter().circle_stroke(pos, radius, self.style.edge); 296 | ui.painter().circle_filled(pos, radius, self.style.fill); 297 | } 298 | 299 | PortKind::Input => { 300 | // draw the port closer to the block. 301 | pos.y += PORT_OFFSET; 302 | 303 | self.draw_arrow_tip(ui, pos, None, target_ports.contains(&slot)); 304 | } 305 | } 306 | } 307 | } 308 | 309 | /// This will assign a port "edge", from one port to another. 310 | /// 311 | /// For every node in the in the graph connect each outgoing to port to an incoming port. 312 | fn assign_port_lines(&mut self) { 313 | let center_x = |n: NodeIndex| { 314 | self.block_rects 315 | .get(&n) 316 | .map(|r| r.center().x) 317 | .unwrap_or(0.0) 318 | }; 319 | 320 | let sorted_ports = |node: NodeIndex, kind: PortKind| -> Vec { 321 | let mut target_ports: Vec<(PortSlot, f32)> = self 322 | .port_positions 323 | .iter() 324 | .filter_map(|(slot, pos)| { 325 | // get the target slots from the target node, which are `kind`. 326 | (slot.node == node && slot.kind == kind).then_some((*slot, pos.x)) 327 | }) 328 | .collect(); 329 | 330 | // yes, it's super weird to sort f32s, but whatever. 331 | target_ports.sort_by(|a, b| a.1.total_cmp(&b.1)); 332 | 333 | target_ports.into_iter().map(|(slot, _)| slot).collect() 334 | }; 335 | 336 | for node in self.graph.node_indices() { 337 | let ports = sorted_ports(node, PortKind::Output); 338 | 339 | if ports.is_empty() { 340 | continue; 341 | } 342 | 343 | let mut sorted_out_edges: Vec<(petgraph::graph::EdgeIndex, NodeIndex)> = self 344 | .graph 345 | .edges_directed(node, petgraph::Direction::Outgoing) 346 | .map(|e| (e.id(), e.target())) 347 | .collect(); 348 | 349 | if sorted_out_edges.is_empty() { 350 | continue; 351 | } 352 | 353 | // yes, it's super weird to sort f32s, but whatever. 354 | sorted_out_edges 355 | .sort_by(|(_, lhs), (_, rhs)| center_x(*lhs).total_cmp(¢er_x(*rhs))); 356 | 357 | // we associate each outgoing edge with an outgoing port. 358 | for (n, (edge, target_node)) in sorted_out_edges.iter().enumerate() { 359 | let Some(&from_port) = ports.get(n) else { 360 | continue; 361 | }; 362 | 363 | let target_ports = sorted_ports(*target_node, PortKind::Input); 364 | 365 | if target_ports.is_empty() { 366 | continue; 367 | } 368 | 369 | // collect and sort the incoming edges from the target node. 370 | let mut incoming: Vec<(petgraph::graph::EdgeIndex, NodeIndex)> = self 371 | .graph 372 | .edges_directed(*target_node, petgraph::Direction::Incoming) 373 | .map(|e| (e.id(), e.source())) 374 | .collect(); 375 | 376 | incoming.sort_by(|(_, lhs), (_, rhs)| center_x(*lhs).total_cmp(¢er_x(*rhs))); 377 | 378 | // we want to get the port offset at the same index of the edge. 379 | let target_port = incoming.iter().position(|(e, _)| e == edge).unwrap_or(0); 380 | 381 | let Some(&to_port) = target_ports.get(target_port) else { 382 | continue; 383 | }; 384 | 385 | self.port_lines.push(PortLine { 386 | from: from_port, 387 | to: to_port, 388 | }); 389 | } 390 | } 391 | } 392 | 393 | fn build_field(&self, scene: egui::Rect) -> CostField { 394 | let grid = Grid::from_scene(scene, 3.0); 395 | 396 | let mut field = CostField::new(grid); 397 | 398 | // we just want to hard block pathfinding from going through block rects. 399 | for rect in self.block_rects.values() { 400 | field.add_block_rect(*rect, 5.0); 401 | } 402 | 403 | field 404 | } 405 | 406 | fn draw_edges(&mut self, ui: &mut egui::Ui, scene_rect: egui::Rect) { 407 | let mut field = self.build_field(scene_rect); 408 | 409 | let id = ui.make_persistent_id("cfg_edge_cache_v1"); 410 | let mut routed_polylines: Vec<(Vec, PortLine)> = Vec::new(); 411 | 412 | if let Some(lines) = ui 413 | .ctx() 414 | .data_mut(|d| d.get_persisted::, PortLine)>>(id)) 415 | { 416 | for (poly, pl) in lines { 417 | let edge_kind = self 418 | .graph 419 | .find_edge(pl.from.node, pl.to.node) 420 | .and_then(|e| self.graph.edge_weight(e)) 421 | .map(|e| e.kind()); 422 | 423 | let should_dash = match edge_kind { 424 | Some(EdgeKind::FallThrough) => true, 425 | _ => false, 426 | }; 427 | 428 | let is_selected = match self.selected.clone() { 429 | Some(node) if pl.from.node == node => true, 430 | _ => false, 431 | }; 432 | 433 | if should_dash && is_selected { 434 | let stroke = Stroke::new(2.0, self.style.select_bg); 435 | 436 | ui.painter().add(egui::Shape::dotted_line( 437 | &poly, 438 | self.style.select.color.gamma_multiply(0.5), 439 | 12.0, 440 | 2.0, 441 | )); 442 | 443 | continue; 444 | } 445 | 446 | if is_selected { 447 | let stroke = Stroke::new( 448 | self.style.select.width, 449 | self.style.select.color.gamma_multiply(0.5), 450 | ); 451 | 452 | ui.painter() 453 | .add(egui::Shape::line(poly.clone(), self.style.select)); 454 | 455 | continue; 456 | } 457 | 458 | ui.painter() 459 | .add(egui::Shape::line(poly.clone(), self.style.edge)); 460 | } 461 | 462 | return; 463 | } 464 | 465 | for pl in &self.port_lines { 466 | let Some(&from) = self.port_positions.get(&pl.from) else { 467 | continue; 468 | }; 469 | 470 | let Some(&to) = self.port_positions.get(&pl.to) else { 471 | continue; 472 | }; 473 | 474 | let mut astar = AStar::new(&field); 475 | 476 | if let Some(poly) = astar.find_path(from, to) { 477 | routed_polylines.push((poly, pl.clone())); 478 | } 479 | } 480 | 481 | for (poly, _) in routed_polylines.iter() { 482 | ui.painter() 483 | .add(egui::Shape::line(poly.clone(), self.style.edge)); 484 | } 485 | 486 | ui.ctx() 487 | .data_mut(|d| d.insert_persisted(id, routed_polylines)); 488 | } 489 | 490 | pub fn show(&mut self, ui: &mut Ui, scene_rect: &mut Rect) { 491 | // calculate the layout of the graph. 492 | // btw this should be pretty cheap to calculate. 493 | let layout = get_cfg_layout(ui, &self.graph, &self.layout_config, &self.style); 494 | 495 | egui::Scene::new() 496 | .max_inner_size([layout.width as f32 + 800.0, layout.height as f32 + 800.0]) 497 | .zoom_range(0.1..=2.0) 498 | .show(ui, scene_rect, |ui| { 499 | self.assign_and_draw_blocks(ui, &layout); 500 | self.assign_port_positions(); 501 | self.assign_port_lines(); 502 | self.draw_edges(ui, self.get_world_rect(None)); 503 | self.draw_ports(ui); 504 | }); 505 | } 506 | } 507 | -------------------------------------------------------------------------------- /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", 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", 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", 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 = "allocator-api2" 132 | version = "0.2.21" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 135 | 136 | [[package]] 137 | name = "android-activity" 138 | version = "0.6.0" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" 141 | dependencies = [ 142 | "android-properties", 143 | "bitflags 2.9.3", 144 | "cc", 145 | "cesu8", 146 | "jni", 147 | "jni-sys", 148 | "libc", 149 | "log", 150 | "ndk", 151 | "ndk-context", 152 | "ndk-sys 0.6.0+11769913", 153 | "num_enum", 154 | "thiserror 1.0.69", 155 | ] 156 | 157 | [[package]] 158 | name = "android-properties" 159 | version = "0.2.2" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" 162 | 163 | [[package]] 164 | name = "android_system_properties" 165 | version = "0.1.5" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 168 | dependencies = [ 169 | "libc", 170 | ] 171 | 172 | [[package]] 173 | name = "arboard" 174 | version = "3.6.0" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "55f533f8e0af236ffe5eb979b99381df3258853f00ba2e44b6e1955292c75227" 177 | dependencies = [ 178 | "clipboard-win", 179 | "image", 180 | "log", 181 | "objc2 0.6.2", 182 | "objc2-app-kit 0.3.1", 183 | "objc2-core-foundation", 184 | "objc2-core-graphics", 185 | "objc2-foundation 0.3.1", 186 | "parking_lot", 187 | "percent-encoding", 188 | "windows-sys 0.59.0", 189 | "x11rb", 190 | ] 191 | 192 | [[package]] 193 | name = "arrayref" 194 | version = "0.3.9" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" 197 | 198 | [[package]] 199 | name = "arrayvec" 200 | version = "0.7.6" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 203 | 204 | [[package]] 205 | name = "as-raw-xcb-connection" 206 | version = "1.0.1" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" 209 | 210 | [[package]] 211 | name = "ash" 212 | version = "0.38.0+1.3.281" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" 215 | dependencies = [ 216 | "libloading", 217 | ] 218 | 219 | [[package]] 220 | name = "async-broadcast" 221 | version = "0.7.2" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" 224 | dependencies = [ 225 | "event-listener", 226 | "event-listener-strategy", 227 | "futures-core", 228 | "pin-project-lite", 229 | ] 230 | 231 | [[package]] 232 | name = "async-channel" 233 | version = "2.5.0" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" 236 | dependencies = [ 237 | "concurrent-queue", 238 | "event-listener-strategy", 239 | "futures-core", 240 | "pin-project-lite", 241 | ] 242 | 243 | [[package]] 244 | name = "async-executor" 245 | version = "1.13.2" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" 248 | dependencies = [ 249 | "async-task", 250 | "concurrent-queue", 251 | "fastrand", 252 | "futures-lite", 253 | "pin-project-lite", 254 | "slab", 255 | ] 256 | 257 | [[package]] 258 | name = "async-io" 259 | version = "2.5.0" 260 | source = "registry+https://github.com/rust-lang/crates.io-index" 261 | checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" 262 | dependencies = [ 263 | "async-lock", 264 | "cfg-if", 265 | "concurrent-queue", 266 | "futures-io", 267 | "futures-lite", 268 | "parking", 269 | "polling", 270 | "rustix 1.0.8", 271 | "slab", 272 | "windows-sys 0.60.2", 273 | ] 274 | 275 | [[package]] 276 | name = "async-lock" 277 | version = "3.4.1" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" 280 | dependencies = [ 281 | "event-listener", 282 | "event-listener-strategy", 283 | "pin-project-lite", 284 | ] 285 | 286 | [[package]] 287 | name = "async-process" 288 | version = "2.4.0" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" 291 | dependencies = [ 292 | "async-channel", 293 | "async-io", 294 | "async-lock", 295 | "async-signal", 296 | "async-task", 297 | "blocking", 298 | "cfg-if", 299 | "event-listener", 300 | "futures-lite", 301 | "rustix 1.0.8", 302 | ] 303 | 304 | [[package]] 305 | name = "async-recursion" 306 | version = "1.1.1" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" 309 | dependencies = [ 310 | "proc-macro2", 311 | "quote", 312 | "syn", 313 | ] 314 | 315 | [[package]] 316 | name = "async-signal" 317 | version = "0.2.12" 318 | source = "registry+https://github.com/rust-lang/crates.io-index" 319 | checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" 320 | dependencies = [ 321 | "async-io", 322 | "async-lock", 323 | "atomic-waker", 324 | "cfg-if", 325 | "futures-core", 326 | "futures-io", 327 | "rustix 1.0.8", 328 | "signal-hook-registry", 329 | "slab", 330 | "windows-sys 0.60.2", 331 | ] 332 | 333 | [[package]] 334 | name = "async-task" 335 | version = "4.7.1" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 338 | 339 | [[package]] 340 | name = "async-trait" 341 | version = "0.1.89" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 344 | dependencies = [ 345 | "proc-macro2", 346 | "quote", 347 | "syn", 348 | ] 349 | 350 | [[package]] 351 | name = "atomic-waker" 352 | version = "1.1.2" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 355 | 356 | [[package]] 357 | name = "atspi" 358 | version = "0.25.0" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "c83247582e7508838caf5f316c00791eee0e15c0bf743e6880585b867e16815c" 361 | dependencies = [ 362 | "atspi-common", 363 | "atspi-connection", 364 | "atspi-proxies", 365 | ] 366 | 367 | [[package]] 368 | name = "atspi-common" 369 | version = "0.9.0" 370 | source = "registry+https://github.com/rust-lang/crates.io-index" 371 | checksum = "33dfc05e7cdf90988a197803bf24f5788f94f7c94a69efa95683e8ffe76cfdfb" 372 | dependencies = [ 373 | "enumflags2", 374 | "serde", 375 | "static_assertions", 376 | "zbus", 377 | "zbus-lockstep", 378 | "zbus-lockstep-macros", 379 | "zbus_names", 380 | "zvariant", 381 | ] 382 | 383 | [[package]] 384 | name = "atspi-connection" 385 | version = "0.9.0" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "4193d51303d8332304056ae0004714256b46b6635a5c556109b319c0d3784938" 388 | dependencies = [ 389 | "atspi-common", 390 | "atspi-proxies", 391 | "futures-lite", 392 | "zbus", 393 | ] 394 | 395 | [[package]] 396 | name = "atspi-proxies" 397 | version = "0.9.0" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | checksum = "d2eebcb9e7e76f26d0bcfd6f0295e1cd1e6f33bedbc5698a971db8dc43d7751c" 400 | dependencies = [ 401 | "atspi-common", 402 | "serde", 403 | "zbus", 404 | ] 405 | 406 | [[package]] 407 | name = "autocfg" 408 | version = "1.5.0" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 411 | 412 | [[package]] 413 | name = "bit-set" 414 | version = "0.8.0" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 417 | dependencies = [ 418 | "bit-vec", 419 | ] 420 | 421 | [[package]] 422 | name = "bit-vec" 423 | version = "0.8.0" 424 | source = "registry+https://github.com/rust-lang/crates.io-index" 425 | checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 426 | 427 | [[package]] 428 | name = "bitflags" 429 | version = "1.3.2" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 432 | 433 | [[package]] 434 | name = "bitflags" 435 | version = "2.9.3" 436 | source = "registry+https://github.com/rust-lang/crates.io-index" 437 | checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" 438 | dependencies = [ 439 | "serde", 440 | ] 441 | 442 | [[package]] 443 | name = "block" 444 | version = "0.1.6" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 447 | 448 | [[package]] 449 | name = "block2" 450 | version = "0.5.1" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" 453 | dependencies = [ 454 | "objc2 0.5.2", 455 | ] 456 | 457 | [[package]] 458 | name = "blocking" 459 | version = "1.6.2" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" 462 | dependencies = [ 463 | "async-channel", 464 | "async-task", 465 | "futures-io", 466 | "futures-lite", 467 | "piper", 468 | ] 469 | 470 | [[package]] 471 | name = "bumpalo" 472 | version = "3.19.0" 473 | source = "registry+https://github.com/rust-lang/crates.io-index" 474 | checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 475 | 476 | [[package]] 477 | name = "bytemuck" 478 | version = "1.23.2" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" 481 | dependencies = [ 482 | "bytemuck_derive", 483 | ] 484 | 485 | [[package]] 486 | name = "bytemuck_derive" 487 | version = "1.10.1" 488 | source = "registry+https://github.com/rust-lang/crates.io-index" 489 | checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" 490 | dependencies = [ 491 | "proc-macro2", 492 | "quote", 493 | "syn", 494 | ] 495 | 496 | [[package]] 497 | name = "byteorder-lite" 498 | version = "0.1.0" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 501 | 502 | [[package]] 503 | name = "bytes" 504 | version = "1.10.1" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 507 | 508 | [[package]] 509 | name = "calloop" 510 | version = "0.13.0" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" 513 | dependencies = [ 514 | "bitflags 2.9.3", 515 | "log", 516 | "polling", 517 | "rustix 0.38.44", 518 | "slab", 519 | "thiserror 1.0.69", 520 | ] 521 | 522 | [[package]] 523 | name = "calloop-wayland-source" 524 | version = "0.3.0" 525 | source = "registry+https://github.com/rust-lang/crates.io-index" 526 | checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" 527 | dependencies = [ 528 | "calloop", 529 | "rustix 0.38.44", 530 | "wayland-backend", 531 | "wayland-client", 532 | ] 533 | 534 | [[package]] 535 | name = "cc" 536 | version = "1.2.34" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" 539 | dependencies = [ 540 | "jobserver", 541 | "libc", 542 | "shlex", 543 | ] 544 | 545 | [[package]] 546 | name = "cesu8" 547 | version = "1.1.0" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 550 | 551 | [[package]] 552 | name = "cfg-if" 553 | version = "1.0.3" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" 556 | 557 | [[package]] 558 | name = "cfg_aliases" 559 | version = "0.2.1" 560 | source = "registry+https://github.com/rust-lang/crates.io-index" 561 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 562 | 563 | [[package]] 564 | name = "cgl" 565 | version = "0.3.2" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" 568 | dependencies = [ 569 | "libc", 570 | ] 571 | 572 | [[package]] 573 | name = "clipboard-win" 574 | version = "5.4.1" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" 577 | dependencies = [ 578 | "error-code", 579 | ] 580 | 581 | [[package]] 582 | name = "codespan-reporting" 583 | version = "0.12.0" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" 586 | dependencies = [ 587 | "serde", 588 | "termcolor", 589 | "unicode-width", 590 | ] 591 | 592 | [[package]] 593 | name = "combine" 594 | version = "4.6.7" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 597 | dependencies = [ 598 | "bytes", 599 | "memchr", 600 | ] 601 | 602 | [[package]] 603 | name = "concurrent-queue" 604 | version = "2.5.0" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 607 | dependencies = [ 608 | "crossbeam-utils", 609 | ] 610 | 611 | [[package]] 612 | name = "core-foundation" 613 | version = "0.9.4" 614 | source = "registry+https://github.com/rust-lang/crates.io-index" 615 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 616 | dependencies = [ 617 | "core-foundation-sys", 618 | "libc", 619 | ] 620 | 621 | [[package]] 622 | name = "core-foundation" 623 | version = "0.10.1" 624 | source = "registry+https://github.com/rust-lang/crates.io-index" 625 | checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 626 | dependencies = [ 627 | "core-foundation-sys", 628 | "libc", 629 | ] 630 | 631 | [[package]] 632 | name = "core-foundation-sys" 633 | version = "0.8.7" 634 | source = "registry+https://github.com/rust-lang/crates.io-index" 635 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 636 | 637 | [[package]] 638 | name = "core-graphics" 639 | version = "0.23.2" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" 642 | dependencies = [ 643 | "bitflags 1.3.2", 644 | "core-foundation 0.9.4", 645 | "core-graphics-types", 646 | "foreign-types", 647 | "libc", 648 | ] 649 | 650 | [[package]] 651 | name = "core-graphics-types" 652 | version = "0.1.3" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 655 | dependencies = [ 656 | "bitflags 1.3.2", 657 | "core-foundation 0.9.4", 658 | "libc", 659 | ] 660 | 661 | [[package]] 662 | name = "crc32fast" 663 | version = "1.5.0" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 666 | dependencies = [ 667 | "cfg-if", 668 | ] 669 | 670 | [[package]] 671 | name = "crossbeam-utils" 672 | version = "0.8.21" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 675 | 676 | [[package]] 677 | name = "crunchy" 678 | version = "0.2.4" 679 | source = "registry+https://github.com/rust-lang/crates.io-index" 680 | checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 681 | 682 | [[package]] 683 | name = "cursor-icon" 684 | version = "1.2.0" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" 687 | 688 | [[package]] 689 | name = "dispatch" 690 | version = "0.2.0" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 693 | 694 | [[package]] 695 | name = "dispatch2" 696 | version = "0.3.0" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 699 | dependencies = [ 700 | "bitflags 2.9.3", 701 | "objc2 0.6.2", 702 | ] 703 | 704 | [[package]] 705 | name = "displaydoc" 706 | version = "0.2.5" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 709 | dependencies = [ 710 | "proc-macro2", 711 | "quote", 712 | "syn", 713 | ] 714 | 715 | [[package]] 716 | name = "dlib" 717 | version = "0.5.2" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" 720 | dependencies = [ 721 | "libloading", 722 | ] 723 | 724 | [[package]] 725 | name = "document-features" 726 | version = "0.2.11" 727 | source = "registry+https://github.com/rust-lang/crates.io-index" 728 | checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 729 | dependencies = [ 730 | "litrs", 731 | ] 732 | 733 | [[package]] 734 | name = "downcast-rs" 735 | version = "1.2.1" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" 738 | 739 | [[package]] 740 | name = "dpi" 741 | version = "0.1.2" 742 | source = "registry+https://github.com/rust-lang/crates.io-index" 743 | checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" 744 | 745 | [[package]] 746 | name = "ecolor" 747 | version = "0.32.1" 748 | source = "registry+https://github.com/rust-lang/crates.io-index" 749 | checksum = "b6a7fc3172c2ef56966b2ce4f84177e159804c40b9a84de8861558ce4a59f422" 750 | dependencies = [ 751 | "bytemuck", 752 | "emath", 753 | ] 754 | 755 | [[package]] 756 | name = "eframe" 757 | version = "0.32.1" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | checksum = "34037a80dc03a4147e1684bff4e4fdab2b1408d715d7b78470cd3179258964b9" 760 | dependencies = [ 761 | "ahash", 762 | "bytemuck", 763 | "document-features", 764 | "egui", 765 | "egui-wgpu", 766 | "egui-winit", 767 | "egui_glow", 768 | "glow", 769 | "glutin", 770 | "glutin-winit", 771 | "image", 772 | "js-sys", 773 | "log", 774 | "objc2 0.5.2", 775 | "objc2-app-kit 0.2.2", 776 | "objc2-foundation 0.2.2", 777 | "parking_lot", 778 | "percent-encoding", 779 | "profiling", 780 | "raw-window-handle", 781 | "static_assertions", 782 | "wasm-bindgen", 783 | "wasm-bindgen-futures", 784 | "web-sys", 785 | "web-time", 786 | "winapi", 787 | "windows-sys 0.59.0", 788 | "winit", 789 | ] 790 | 791 | [[package]] 792 | name = "egui" 793 | version = "0.32.1" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | checksum = "49e2be082f77715496b4a39fdc6f5dc7491fefe2833111781b8697ea6ee919a7" 796 | dependencies = [ 797 | "accesskit", 798 | "ahash", 799 | "bitflags 2.9.3", 800 | "emath", 801 | "epaint", 802 | "log", 803 | "nohash-hasher", 804 | "profiling", 805 | "smallvec", 806 | "unicode-segmentation", 807 | ] 808 | 809 | [[package]] 810 | name = "egui-cfg" 811 | version = "0.1.0" 812 | dependencies = [ 813 | "eframe", 814 | "egui", 815 | "petgraph", 816 | "rust-sugiyama", 817 | ] 818 | 819 | [[package]] 820 | name = "egui-wgpu" 821 | version = "0.32.1" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "64c7277a171ec1b711080ddb3b0bfa1b3aa9358834d5386d39e83fbc16d61212" 824 | dependencies = [ 825 | "ahash", 826 | "bytemuck", 827 | "document-features", 828 | "egui", 829 | "epaint", 830 | "log", 831 | "profiling", 832 | "thiserror 1.0.69", 833 | "type-map", 834 | "web-time", 835 | "wgpu", 836 | "winit", 837 | ] 838 | 839 | [[package]] 840 | name = "egui-winit" 841 | version = "0.32.1" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "fe6d8b0f8d6de4d43e794e343f03bacc3908aada931f0ed6fd7041871388a590" 844 | dependencies = [ 845 | "accesskit_winit", 846 | "ahash", 847 | "arboard", 848 | "bytemuck", 849 | "egui", 850 | "log", 851 | "profiling", 852 | "raw-window-handle", 853 | "smithay-clipboard", 854 | "web-time", 855 | "webbrowser", 856 | "winit", 857 | ] 858 | 859 | [[package]] 860 | name = "egui_glow" 861 | version = "0.32.1" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | checksum = "0ab645760288e42eab70283a5cccf44509a6f43b554351855d3c73594bfe3c23" 864 | dependencies = [ 865 | "ahash", 866 | "bytemuck", 867 | "egui", 868 | "glow", 869 | "log", 870 | "memoffset", 871 | "profiling", 872 | "wasm-bindgen", 873 | "web-sys", 874 | "winit", 875 | ] 876 | 877 | [[package]] 878 | name = "emath" 879 | version = "0.32.1" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "935df67dc48fdeef132f2f7ada156ddc79e021344dd42c17f066b956bb88dde3" 882 | dependencies = [ 883 | "bytemuck", 884 | ] 885 | 886 | [[package]] 887 | name = "endi" 888 | version = "1.1.0" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" 891 | 892 | [[package]] 893 | name = "enumflags2" 894 | version = "0.7.12" 895 | source = "registry+https://github.com/rust-lang/crates.io-index" 896 | checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" 897 | dependencies = [ 898 | "enumflags2_derive", 899 | "serde", 900 | ] 901 | 902 | [[package]] 903 | name = "enumflags2_derive" 904 | version = "0.7.12" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" 907 | dependencies = [ 908 | "proc-macro2", 909 | "quote", 910 | "syn", 911 | ] 912 | 913 | [[package]] 914 | name = "epaint" 915 | version = "0.32.1" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "b66fc0a5a9d322917de9bd3ac7d426ca8aa3127fbf1e76fae5b6b25e051e06a3" 918 | dependencies = [ 919 | "ab_glyph", 920 | "ahash", 921 | "bytemuck", 922 | "ecolor", 923 | "emath", 924 | "epaint_default_fonts", 925 | "log", 926 | "nohash-hasher", 927 | "parking_lot", 928 | "profiling", 929 | ] 930 | 931 | [[package]] 932 | name = "epaint_default_fonts" 933 | version = "0.32.1" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | checksum = "4f6cf8ce0fb817000aa24f5e630bda904a353536bd430b83ebc1dceee95b4a3a" 936 | 937 | [[package]] 938 | name = "equivalent" 939 | version = "1.0.2" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 942 | 943 | [[package]] 944 | name = "errno" 945 | version = "0.3.13" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" 948 | dependencies = [ 949 | "libc", 950 | "windows-sys 0.60.2", 951 | ] 952 | 953 | [[package]] 954 | name = "error-code" 955 | version = "3.3.2" 956 | source = "registry+https://github.com/rust-lang/crates.io-index" 957 | checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" 958 | 959 | [[package]] 960 | name = "event-listener" 961 | version = "5.4.1" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 964 | dependencies = [ 965 | "concurrent-queue", 966 | "parking", 967 | "pin-project-lite", 968 | ] 969 | 970 | [[package]] 971 | name = "event-listener-strategy" 972 | version = "0.5.4" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 975 | dependencies = [ 976 | "event-listener", 977 | "pin-project-lite", 978 | ] 979 | 980 | [[package]] 981 | name = "fastrand" 982 | version = "2.3.0" 983 | source = "registry+https://github.com/rust-lang/crates.io-index" 984 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 985 | 986 | [[package]] 987 | name = "fdeflate" 988 | version = "0.3.7" 989 | source = "registry+https://github.com/rust-lang/crates.io-index" 990 | checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 991 | dependencies = [ 992 | "simd-adler32", 993 | ] 994 | 995 | [[package]] 996 | name = "fixedbitset" 997 | version = "0.5.7" 998 | source = "registry+https://github.com/rust-lang/crates.io-index" 999 | checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" 1000 | 1001 | [[package]] 1002 | name = "flate2" 1003 | version = "1.1.2" 1004 | source = "registry+https://github.com/rust-lang/crates.io-index" 1005 | checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" 1006 | dependencies = [ 1007 | "crc32fast", 1008 | "miniz_oxide", 1009 | ] 1010 | 1011 | [[package]] 1012 | name = "foldhash" 1013 | version = "0.1.5" 1014 | source = "registry+https://github.com/rust-lang/crates.io-index" 1015 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1016 | 1017 | [[package]] 1018 | name = "foreign-types" 1019 | version = "0.5.0" 1020 | source = "registry+https://github.com/rust-lang/crates.io-index" 1021 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 1022 | dependencies = [ 1023 | "foreign-types-macros", 1024 | "foreign-types-shared", 1025 | ] 1026 | 1027 | [[package]] 1028 | name = "foreign-types-macros" 1029 | version = "0.2.3" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 1032 | dependencies = [ 1033 | "proc-macro2", 1034 | "quote", 1035 | "syn", 1036 | ] 1037 | 1038 | [[package]] 1039 | name = "foreign-types-shared" 1040 | version = "0.3.1" 1041 | source = "registry+https://github.com/rust-lang/crates.io-index" 1042 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 1043 | 1044 | [[package]] 1045 | name = "form_urlencoded" 1046 | version = "1.2.2" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 1049 | dependencies = [ 1050 | "percent-encoding", 1051 | ] 1052 | 1053 | [[package]] 1054 | name = "futures-core" 1055 | version = "0.3.31" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1058 | 1059 | [[package]] 1060 | name = "futures-io" 1061 | version = "0.3.31" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1064 | 1065 | [[package]] 1066 | name = "futures-lite" 1067 | version = "2.6.1" 1068 | source = "registry+https://github.com/rust-lang/crates.io-index" 1069 | checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1070 | dependencies = [ 1071 | "fastrand", 1072 | "futures-core", 1073 | "futures-io", 1074 | "parking", 1075 | "pin-project-lite", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "futures-macro" 1080 | version = "0.3.31" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 1083 | dependencies = [ 1084 | "proc-macro2", 1085 | "quote", 1086 | "syn", 1087 | ] 1088 | 1089 | [[package]] 1090 | name = "futures-task" 1091 | version = "0.3.31" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1094 | 1095 | [[package]] 1096 | name = "futures-util" 1097 | version = "0.3.31" 1098 | source = "registry+https://github.com/rust-lang/crates.io-index" 1099 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1100 | dependencies = [ 1101 | "futures-core", 1102 | "futures-macro", 1103 | "futures-task", 1104 | "pin-project-lite", 1105 | "pin-utils", 1106 | "slab", 1107 | ] 1108 | 1109 | [[package]] 1110 | name = "gethostname" 1111 | version = "0.4.3" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" 1114 | dependencies = [ 1115 | "libc", 1116 | "windows-targets 0.48.5", 1117 | ] 1118 | 1119 | [[package]] 1120 | name = "getrandom" 1121 | version = "0.3.3" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1124 | dependencies = [ 1125 | "cfg-if", 1126 | "libc", 1127 | "r-efi", 1128 | "wasi", 1129 | ] 1130 | 1131 | [[package]] 1132 | name = "gl_generator" 1133 | version = "0.14.0" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 1136 | dependencies = [ 1137 | "khronos_api", 1138 | "log", 1139 | "xml-rs", 1140 | ] 1141 | 1142 | [[package]] 1143 | name = "glow" 1144 | version = "0.16.0" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" 1147 | dependencies = [ 1148 | "js-sys", 1149 | "slotmap", 1150 | "wasm-bindgen", 1151 | "web-sys", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "glutin" 1156 | version = "0.32.3" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" 1159 | dependencies = [ 1160 | "bitflags 2.9.3", 1161 | "cfg_aliases", 1162 | "cgl", 1163 | "dispatch2", 1164 | "glutin_egl_sys", 1165 | "glutin_glx_sys", 1166 | "glutin_wgl_sys", 1167 | "libloading", 1168 | "objc2 0.6.2", 1169 | "objc2-app-kit 0.3.1", 1170 | "objc2-core-foundation", 1171 | "objc2-foundation 0.3.1", 1172 | "once_cell", 1173 | "raw-window-handle", 1174 | "wayland-sys", 1175 | "windows-sys 0.52.0", 1176 | "x11-dl", 1177 | ] 1178 | 1179 | [[package]] 1180 | name = "glutin-winit" 1181 | version = "0.5.0" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" 1184 | dependencies = [ 1185 | "cfg_aliases", 1186 | "glutin", 1187 | "raw-window-handle", 1188 | "winit", 1189 | ] 1190 | 1191 | [[package]] 1192 | name = "glutin_egl_sys" 1193 | version = "0.7.1" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" 1196 | dependencies = [ 1197 | "gl_generator", 1198 | "windows-sys 0.52.0", 1199 | ] 1200 | 1201 | [[package]] 1202 | name = "glutin_glx_sys" 1203 | version = "0.6.1" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" 1206 | dependencies = [ 1207 | "gl_generator", 1208 | "x11-dl", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "glutin_wgl_sys" 1213 | version = "0.6.1" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" 1216 | dependencies = [ 1217 | "gl_generator", 1218 | ] 1219 | 1220 | [[package]] 1221 | name = "gpu-alloc" 1222 | version = "0.6.0" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" 1225 | dependencies = [ 1226 | "bitflags 2.9.3", 1227 | "gpu-alloc-types", 1228 | ] 1229 | 1230 | [[package]] 1231 | name = "gpu-alloc-types" 1232 | version = "0.3.0" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" 1235 | dependencies = [ 1236 | "bitflags 2.9.3", 1237 | ] 1238 | 1239 | [[package]] 1240 | name = "gpu-allocator" 1241 | version = "0.27.0" 1242 | source = "registry+https://github.com/rust-lang/crates.io-index" 1243 | checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" 1244 | dependencies = [ 1245 | "log", 1246 | "presser", 1247 | "thiserror 1.0.69", 1248 | "windows 0.58.0", 1249 | ] 1250 | 1251 | [[package]] 1252 | name = "gpu-descriptor" 1253 | version = "0.3.2" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" 1256 | dependencies = [ 1257 | "bitflags 2.9.3", 1258 | "gpu-descriptor-types", 1259 | "hashbrown", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "gpu-descriptor-types" 1264 | version = "0.2.0" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" 1267 | dependencies = [ 1268 | "bitflags 2.9.3", 1269 | ] 1270 | 1271 | [[package]] 1272 | name = "half" 1273 | version = "2.6.0" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" 1276 | dependencies = [ 1277 | "cfg-if", 1278 | "crunchy", 1279 | "num-traits", 1280 | ] 1281 | 1282 | [[package]] 1283 | name = "hashbrown" 1284 | version = "0.15.5" 1285 | source = "registry+https://github.com/rust-lang/crates.io-index" 1286 | checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1287 | dependencies = [ 1288 | "allocator-api2", 1289 | "equivalent", 1290 | "foldhash", 1291 | ] 1292 | 1293 | [[package]] 1294 | name = "heck" 1295 | version = "0.5.0" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1298 | 1299 | [[package]] 1300 | name = "hermit-abi" 1301 | version = "0.5.2" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1304 | 1305 | [[package]] 1306 | name = "hex" 1307 | version = "0.4.3" 1308 | source = "registry+https://github.com/rust-lang/crates.io-index" 1309 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1310 | 1311 | [[package]] 1312 | name = "hexf-parse" 1313 | version = "0.2.1" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 1316 | 1317 | [[package]] 1318 | name = "icu_collections" 1319 | version = "2.0.0" 1320 | source = "registry+https://github.com/rust-lang/crates.io-index" 1321 | checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1322 | dependencies = [ 1323 | "displaydoc", 1324 | "potential_utf", 1325 | "yoke", 1326 | "zerofrom", 1327 | "zerovec", 1328 | ] 1329 | 1330 | [[package]] 1331 | name = "icu_locale_core" 1332 | version = "2.0.0" 1333 | source = "registry+https://github.com/rust-lang/crates.io-index" 1334 | checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1335 | dependencies = [ 1336 | "displaydoc", 1337 | "litemap", 1338 | "tinystr", 1339 | "writeable", 1340 | "zerovec", 1341 | ] 1342 | 1343 | [[package]] 1344 | name = "icu_normalizer" 1345 | version = "2.0.0" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 1348 | dependencies = [ 1349 | "displaydoc", 1350 | "icu_collections", 1351 | "icu_normalizer_data", 1352 | "icu_properties", 1353 | "icu_provider", 1354 | "smallvec", 1355 | "zerovec", 1356 | ] 1357 | 1358 | [[package]] 1359 | name = "icu_normalizer_data" 1360 | version = "2.0.0" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 1363 | 1364 | [[package]] 1365 | name = "icu_properties" 1366 | version = "2.0.1" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 1369 | dependencies = [ 1370 | "displaydoc", 1371 | "icu_collections", 1372 | "icu_locale_core", 1373 | "icu_properties_data", 1374 | "icu_provider", 1375 | "potential_utf", 1376 | "zerotrie", 1377 | "zerovec", 1378 | ] 1379 | 1380 | [[package]] 1381 | name = "icu_properties_data" 1382 | version = "2.0.1" 1383 | source = "registry+https://github.com/rust-lang/crates.io-index" 1384 | checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 1385 | 1386 | [[package]] 1387 | name = "icu_provider" 1388 | version = "2.0.0" 1389 | source = "registry+https://github.com/rust-lang/crates.io-index" 1390 | checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 1391 | dependencies = [ 1392 | "displaydoc", 1393 | "icu_locale_core", 1394 | "stable_deref_trait", 1395 | "tinystr", 1396 | "writeable", 1397 | "yoke", 1398 | "zerofrom", 1399 | "zerotrie", 1400 | "zerovec", 1401 | ] 1402 | 1403 | [[package]] 1404 | name = "idna" 1405 | version = "1.1.0" 1406 | source = "registry+https://github.com/rust-lang/crates.io-index" 1407 | checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 1408 | dependencies = [ 1409 | "idna_adapter", 1410 | "smallvec", 1411 | "utf8_iter", 1412 | ] 1413 | 1414 | [[package]] 1415 | name = "idna_adapter" 1416 | version = "1.2.1" 1417 | source = "registry+https://github.com/rust-lang/crates.io-index" 1418 | checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1419 | dependencies = [ 1420 | "icu_normalizer", 1421 | "icu_properties", 1422 | ] 1423 | 1424 | [[package]] 1425 | name = "image" 1426 | version = "0.25.6" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" 1429 | dependencies = [ 1430 | "bytemuck", 1431 | "byteorder-lite", 1432 | "num-traits", 1433 | "png", 1434 | "tiff", 1435 | ] 1436 | 1437 | [[package]] 1438 | name = "indexmap" 1439 | version = "2.11.0" 1440 | source = "registry+https://github.com/rust-lang/crates.io-index" 1441 | checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" 1442 | dependencies = [ 1443 | "equivalent", 1444 | "hashbrown", 1445 | ] 1446 | 1447 | [[package]] 1448 | name = "jni" 1449 | version = "0.21.1" 1450 | source = "registry+https://github.com/rust-lang/crates.io-index" 1451 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1452 | dependencies = [ 1453 | "cesu8", 1454 | "cfg-if", 1455 | "combine", 1456 | "jni-sys", 1457 | "log", 1458 | "thiserror 1.0.69", 1459 | "walkdir", 1460 | "windows-sys 0.45.0", 1461 | ] 1462 | 1463 | [[package]] 1464 | name = "jni-sys" 1465 | version = "0.3.0" 1466 | source = "registry+https://github.com/rust-lang/crates.io-index" 1467 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1468 | 1469 | [[package]] 1470 | name = "jobserver" 1471 | version = "0.1.33" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" 1474 | dependencies = [ 1475 | "getrandom", 1476 | "libc", 1477 | ] 1478 | 1479 | [[package]] 1480 | name = "jpeg-decoder" 1481 | version = "0.3.2" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" 1484 | 1485 | [[package]] 1486 | name = "js-sys" 1487 | version = "0.3.77" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1490 | dependencies = [ 1491 | "once_cell", 1492 | "wasm-bindgen", 1493 | ] 1494 | 1495 | [[package]] 1496 | name = "khronos-egl" 1497 | version = "6.0.0" 1498 | source = "registry+https://github.com/rust-lang/crates.io-index" 1499 | checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" 1500 | dependencies = [ 1501 | "libc", 1502 | "libloading", 1503 | "pkg-config", 1504 | ] 1505 | 1506 | [[package]] 1507 | name = "khronos_api" 1508 | version = "3.1.0" 1509 | source = "registry+https://github.com/rust-lang/crates.io-index" 1510 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1511 | 1512 | [[package]] 1513 | name = "libc" 1514 | version = "0.2.175" 1515 | source = "registry+https://github.com/rust-lang/crates.io-index" 1516 | checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" 1517 | 1518 | [[package]] 1519 | name = "libloading" 1520 | version = "0.8.8" 1521 | source = "registry+https://github.com/rust-lang/crates.io-index" 1522 | checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" 1523 | dependencies = [ 1524 | "cfg-if", 1525 | "windows-targets 0.53.3", 1526 | ] 1527 | 1528 | [[package]] 1529 | name = "libm" 1530 | version = "0.2.15" 1531 | source = "registry+https://github.com/rust-lang/crates.io-index" 1532 | checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 1533 | 1534 | [[package]] 1535 | name = "libredox" 1536 | version = "0.1.9" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" 1539 | dependencies = [ 1540 | "bitflags 2.9.3", 1541 | "libc", 1542 | "redox_syscall 0.5.17", 1543 | ] 1544 | 1545 | [[package]] 1546 | name = "linux-raw-sys" 1547 | version = "0.4.15" 1548 | source = "registry+https://github.com/rust-lang/crates.io-index" 1549 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1550 | 1551 | [[package]] 1552 | name = "linux-raw-sys" 1553 | version = "0.9.4" 1554 | source = "registry+https://github.com/rust-lang/crates.io-index" 1555 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 1556 | 1557 | [[package]] 1558 | name = "litemap" 1559 | version = "0.8.0" 1560 | source = "registry+https://github.com/rust-lang/crates.io-index" 1561 | checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 1562 | 1563 | [[package]] 1564 | name = "litrs" 1565 | version = "0.4.2" 1566 | source = "registry+https://github.com/rust-lang/crates.io-index" 1567 | checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" 1568 | 1569 | [[package]] 1570 | name = "lock_api" 1571 | version = "0.4.13" 1572 | source = "registry+https://github.com/rust-lang/crates.io-index" 1573 | checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 1574 | dependencies = [ 1575 | "autocfg", 1576 | "scopeguard", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "log" 1581 | version = "0.4.27" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 1584 | 1585 | [[package]] 1586 | name = "malloc_buf" 1587 | version = "0.0.6" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1590 | dependencies = [ 1591 | "libc", 1592 | ] 1593 | 1594 | [[package]] 1595 | name = "memchr" 1596 | version = "2.7.5" 1597 | source = "registry+https://github.com/rust-lang/crates.io-index" 1598 | checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 1599 | 1600 | [[package]] 1601 | name = "memmap2" 1602 | version = "0.9.8" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" 1605 | dependencies = [ 1606 | "libc", 1607 | ] 1608 | 1609 | [[package]] 1610 | name = "memoffset" 1611 | version = "0.9.1" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1614 | dependencies = [ 1615 | "autocfg", 1616 | ] 1617 | 1618 | [[package]] 1619 | name = "metal" 1620 | version = "0.31.0" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" 1623 | dependencies = [ 1624 | "bitflags 2.9.3", 1625 | "block", 1626 | "core-graphics-types", 1627 | "foreign-types", 1628 | "log", 1629 | "objc", 1630 | "paste", 1631 | ] 1632 | 1633 | [[package]] 1634 | name = "miniz_oxide" 1635 | version = "0.8.9" 1636 | source = "registry+https://github.com/rust-lang/crates.io-index" 1637 | checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 1638 | dependencies = [ 1639 | "adler2", 1640 | "simd-adler32", 1641 | ] 1642 | 1643 | [[package]] 1644 | name = "naga" 1645 | version = "25.0.1" 1646 | source = "registry+https://github.com/rust-lang/crates.io-index" 1647 | checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632" 1648 | dependencies = [ 1649 | "arrayvec", 1650 | "bit-set", 1651 | "bitflags 2.9.3", 1652 | "cfg_aliases", 1653 | "codespan-reporting", 1654 | "half", 1655 | "hashbrown", 1656 | "hexf-parse", 1657 | "indexmap", 1658 | "log", 1659 | "num-traits", 1660 | "once_cell", 1661 | "rustc-hash 1.1.0", 1662 | "spirv", 1663 | "strum", 1664 | "thiserror 2.0.16", 1665 | "unicode-ident", 1666 | ] 1667 | 1668 | [[package]] 1669 | name = "ndk" 1670 | version = "0.9.0" 1671 | source = "registry+https://github.com/rust-lang/crates.io-index" 1672 | checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 1673 | dependencies = [ 1674 | "bitflags 2.9.3", 1675 | "jni-sys", 1676 | "log", 1677 | "ndk-sys 0.6.0+11769913", 1678 | "num_enum", 1679 | "raw-window-handle", 1680 | "thiserror 1.0.69", 1681 | ] 1682 | 1683 | [[package]] 1684 | name = "ndk-context" 1685 | version = "0.1.1" 1686 | source = "registry+https://github.com/rust-lang/crates.io-index" 1687 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1688 | 1689 | [[package]] 1690 | name = "ndk-sys" 1691 | version = "0.5.0+25.2.9519653" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" 1694 | dependencies = [ 1695 | "jni-sys", 1696 | ] 1697 | 1698 | [[package]] 1699 | name = "ndk-sys" 1700 | version = "0.6.0+11769913" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" 1703 | dependencies = [ 1704 | "jni-sys", 1705 | ] 1706 | 1707 | [[package]] 1708 | name = "nix" 1709 | version = "0.30.1" 1710 | source = "registry+https://github.com/rust-lang/crates.io-index" 1711 | checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 1712 | dependencies = [ 1713 | "bitflags 2.9.3", 1714 | "cfg-if", 1715 | "cfg_aliases", 1716 | "libc", 1717 | "memoffset", 1718 | ] 1719 | 1720 | [[package]] 1721 | name = "nohash-hasher" 1722 | version = "0.2.0" 1723 | source = "registry+https://github.com/rust-lang/crates.io-index" 1724 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 1725 | 1726 | [[package]] 1727 | name = "num-traits" 1728 | version = "0.2.19" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1731 | dependencies = [ 1732 | "autocfg", 1733 | "libm", 1734 | ] 1735 | 1736 | [[package]] 1737 | name = "num_enum" 1738 | version = "0.7.4" 1739 | source = "registry+https://github.com/rust-lang/crates.io-index" 1740 | checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" 1741 | dependencies = [ 1742 | "num_enum_derive", 1743 | "rustversion", 1744 | ] 1745 | 1746 | [[package]] 1747 | name = "num_enum_derive" 1748 | version = "0.7.4" 1749 | source = "registry+https://github.com/rust-lang/crates.io-index" 1750 | checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" 1751 | dependencies = [ 1752 | "proc-macro-crate", 1753 | "proc-macro2", 1754 | "quote", 1755 | "syn", 1756 | ] 1757 | 1758 | [[package]] 1759 | name = "objc" 1760 | version = "0.2.7" 1761 | source = "registry+https://github.com/rust-lang/crates.io-index" 1762 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1763 | dependencies = [ 1764 | "malloc_buf", 1765 | ] 1766 | 1767 | [[package]] 1768 | name = "objc-sys" 1769 | version = "0.3.5" 1770 | source = "registry+https://github.com/rust-lang/crates.io-index" 1771 | checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 1772 | 1773 | [[package]] 1774 | name = "objc2" 1775 | version = "0.5.2" 1776 | source = "registry+https://github.com/rust-lang/crates.io-index" 1777 | checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 1778 | dependencies = [ 1779 | "objc-sys", 1780 | "objc2-encode", 1781 | ] 1782 | 1783 | [[package]] 1784 | name = "objc2" 1785 | version = "0.6.2" 1786 | source = "registry+https://github.com/rust-lang/crates.io-index" 1787 | checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" 1788 | dependencies = [ 1789 | "objc2-encode", 1790 | ] 1791 | 1792 | [[package]] 1793 | name = "objc2-app-kit" 1794 | version = "0.2.2" 1795 | source = "registry+https://github.com/rust-lang/crates.io-index" 1796 | checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" 1797 | dependencies = [ 1798 | "bitflags 2.9.3", 1799 | "block2", 1800 | "libc", 1801 | "objc2 0.5.2", 1802 | "objc2-core-data", 1803 | "objc2-core-image", 1804 | "objc2-foundation 0.2.2", 1805 | "objc2-quartz-core", 1806 | ] 1807 | 1808 | [[package]] 1809 | name = "objc2-app-kit" 1810 | version = "0.3.1" 1811 | source = "registry+https://github.com/rust-lang/crates.io-index" 1812 | checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" 1813 | dependencies = [ 1814 | "bitflags 2.9.3", 1815 | "objc2 0.6.2", 1816 | "objc2-core-foundation", 1817 | "objc2-core-graphics", 1818 | "objc2-foundation 0.3.1", 1819 | ] 1820 | 1821 | [[package]] 1822 | name = "objc2-cloud-kit" 1823 | version = "0.2.2" 1824 | source = "registry+https://github.com/rust-lang/crates.io-index" 1825 | checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" 1826 | dependencies = [ 1827 | "bitflags 2.9.3", 1828 | "block2", 1829 | "objc2 0.5.2", 1830 | "objc2-core-location", 1831 | "objc2-foundation 0.2.2", 1832 | ] 1833 | 1834 | [[package]] 1835 | name = "objc2-contacts" 1836 | version = "0.2.2" 1837 | source = "registry+https://github.com/rust-lang/crates.io-index" 1838 | checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" 1839 | dependencies = [ 1840 | "block2", 1841 | "objc2 0.5.2", 1842 | "objc2-foundation 0.2.2", 1843 | ] 1844 | 1845 | [[package]] 1846 | name = "objc2-core-data" 1847 | version = "0.2.2" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" 1850 | dependencies = [ 1851 | "bitflags 2.9.3", 1852 | "block2", 1853 | "objc2 0.5.2", 1854 | "objc2-foundation 0.2.2", 1855 | ] 1856 | 1857 | [[package]] 1858 | name = "objc2-core-foundation" 1859 | version = "0.3.1" 1860 | source = "registry+https://github.com/rust-lang/crates.io-index" 1861 | checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" 1862 | dependencies = [ 1863 | "bitflags 2.9.3", 1864 | "dispatch2", 1865 | "objc2 0.6.2", 1866 | ] 1867 | 1868 | [[package]] 1869 | name = "objc2-core-graphics" 1870 | version = "0.3.1" 1871 | source = "registry+https://github.com/rust-lang/crates.io-index" 1872 | checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" 1873 | dependencies = [ 1874 | "bitflags 2.9.3", 1875 | "dispatch2", 1876 | "objc2 0.6.2", 1877 | "objc2-core-foundation", 1878 | "objc2-io-surface", 1879 | ] 1880 | 1881 | [[package]] 1882 | name = "objc2-core-image" 1883 | version = "0.2.2" 1884 | source = "registry+https://github.com/rust-lang/crates.io-index" 1885 | checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" 1886 | dependencies = [ 1887 | "block2", 1888 | "objc2 0.5.2", 1889 | "objc2-foundation 0.2.2", 1890 | "objc2-metal", 1891 | ] 1892 | 1893 | [[package]] 1894 | name = "objc2-core-location" 1895 | version = "0.2.2" 1896 | source = "registry+https://github.com/rust-lang/crates.io-index" 1897 | checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" 1898 | dependencies = [ 1899 | "block2", 1900 | "objc2 0.5.2", 1901 | "objc2-contacts", 1902 | "objc2-foundation 0.2.2", 1903 | ] 1904 | 1905 | [[package]] 1906 | name = "objc2-encode" 1907 | version = "4.1.0" 1908 | source = "registry+https://github.com/rust-lang/crates.io-index" 1909 | checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 1910 | 1911 | [[package]] 1912 | name = "objc2-foundation" 1913 | version = "0.2.2" 1914 | source = "registry+https://github.com/rust-lang/crates.io-index" 1915 | checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 1916 | dependencies = [ 1917 | "bitflags 2.9.3", 1918 | "block2", 1919 | "dispatch", 1920 | "libc", 1921 | "objc2 0.5.2", 1922 | ] 1923 | 1924 | [[package]] 1925 | name = "objc2-foundation" 1926 | version = "0.3.1" 1927 | source = "registry+https://github.com/rust-lang/crates.io-index" 1928 | checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" 1929 | dependencies = [ 1930 | "bitflags 2.9.3", 1931 | "objc2 0.6.2", 1932 | "objc2-core-foundation", 1933 | ] 1934 | 1935 | [[package]] 1936 | name = "objc2-io-surface" 1937 | version = "0.3.1" 1938 | source = "registry+https://github.com/rust-lang/crates.io-index" 1939 | checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" 1940 | dependencies = [ 1941 | "bitflags 2.9.3", 1942 | "objc2 0.6.2", 1943 | "objc2-core-foundation", 1944 | ] 1945 | 1946 | [[package]] 1947 | name = "objc2-link-presentation" 1948 | version = "0.2.2" 1949 | source = "registry+https://github.com/rust-lang/crates.io-index" 1950 | checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" 1951 | dependencies = [ 1952 | "block2", 1953 | "objc2 0.5.2", 1954 | "objc2-app-kit 0.2.2", 1955 | "objc2-foundation 0.2.2", 1956 | ] 1957 | 1958 | [[package]] 1959 | name = "objc2-metal" 1960 | version = "0.2.2" 1961 | source = "registry+https://github.com/rust-lang/crates.io-index" 1962 | checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 1963 | dependencies = [ 1964 | "bitflags 2.9.3", 1965 | "block2", 1966 | "objc2 0.5.2", 1967 | "objc2-foundation 0.2.2", 1968 | ] 1969 | 1970 | [[package]] 1971 | name = "objc2-quartz-core" 1972 | version = "0.2.2" 1973 | source = "registry+https://github.com/rust-lang/crates.io-index" 1974 | checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 1975 | dependencies = [ 1976 | "bitflags 2.9.3", 1977 | "block2", 1978 | "objc2 0.5.2", 1979 | "objc2-foundation 0.2.2", 1980 | "objc2-metal", 1981 | ] 1982 | 1983 | [[package]] 1984 | name = "objc2-symbols" 1985 | version = "0.2.2" 1986 | source = "registry+https://github.com/rust-lang/crates.io-index" 1987 | checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" 1988 | dependencies = [ 1989 | "objc2 0.5.2", 1990 | "objc2-foundation 0.2.2", 1991 | ] 1992 | 1993 | [[package]] 1994 | name = "objc2-ui-kit" 1995 | version = "0.2.2" 1996 | source = "registry+https://github.com/rust-lang/crates.io-index" 1997 | checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" 1998 | dependencies = [ 1999 | "bitflags 2.9.3", 2000 | "block2", 2001 | "objc2 0.5.2", 2002 | "objc2-cloud-kit", 2003 | "objc2-core-data", 2004 | "objc2-core-image", 2005 | "objc2-core-location", 2006 | "objc2-foundation 0.2.2", 2007 | "objc2-link-presentation", 2008 | "objc2-quartz-core", 2009 | "objc2-symbols", 2010 | "objc2-uniform-type-identifiers", 2011 | "objc2-user-notifications", 2012 | ] 2013 | 2014 | [[package]] 2015 | name = "objc2-uniform-type-identifiers" 2016 | version = "0.2.2" 2017 | source = "registry+https://github.com/rust-lang/crates.io-index" 2018 | checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" 2019 | dependencies = [ 2020 | "block2", 2021 | "objc2 0.5.2", 2022 | "objc2-foundation 0.2.2", 2023 | ] 2024 | 2025 | [[package]] 2026 | name = "objc2-user-notifications" 2027 | version = "0.2.2" 2028 | source = "registry+https://github.com/rust-lang/crates.io-index" 2029 | checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" 2030 | dependencies = [ 2031 | "bitflags 2.9.3", 2032 | "block2", 2033 | "objc2 0.5.2", 2034 | "objc2-core-location", 2035 | "objc2-foundation 0.2.2", 2036 | ] 2037 | 2038 | [[package]] 2039 | name = "once_cell" 2040 | version = "1.21.3" 2041 | source = "registry+https://github.com/rust-lang/crates.io-index" 2042 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2043 | 2044 | [[package]] 2045 | name = "orbclient" 2046 | version = "0.3.48" 2047 | source = "registry+https://github.com/rust-lang/crates.io-index" 2048 | checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" 2049 | dependencies = [ 2050 | "libredox", 2051 | ] 2052 | 2053 | [[package]] 2054 | name = "ordered-float" 2055 | version = "4.6.0" 2056 | source = "registry+https://github.com/rust-lang/crates.io-index" 2057 | checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" 2058 | dependencies = [ 2059 | "num-traits", 2060 | ] 2061 | 2062 | [[package]] 2063 | name = "ordered-stream" 2064 | version = "0.2.0" 2065 | source = "registry+https://github.com/rust-lang/crates.io-index" 2066 | checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" 2067 | dependencies = [ 2068 | "futures-core", 2069 | "pin-project-lite", 2070 | ] 2071 | 2072 | [[package]] 2073 | name = "owned_ttf_parser" 2074 | version = "0.25.1" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" 2077 | dependencies = [ 2078 | "ttf-parser", 2079 | ] 2080 | 2081 | [[package]] 2082 | name = "parking" 2083 | version = "2.2.1" 2084 | source = "registry+https://github.com/rust-lang/crates.io-index" 2085 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2086 | 2087 | [[package]] 2088 | name = "parking_lot" 2089 | version = "0.12.4" 2090 | source = "registry+https://github.com/rust-lang/crates.io-index" 2091 | checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 2092 | dependencies = [ 2093 | "lock_api", 2094 | "parking_lot_core", 2095 | ] 2096 | 2097 | [[package]] 2098 | name = "parking_lot_core" 2099 | version = "0.9.11" 2100 | source = "registry+https://github.com/rust-lang/crates.io-index" 2101 | checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 2102 | dependencies = [ 2103 | "cfg-if", 2104 | "libc", 2105 | "redox_syscall 0.5.17", 2106 | "smallvec", 2107 | "windows-targets 0.52.6", 2108 | ] 2109 | 2110 | [[package]] 2111 | name = "paste" 2112 | version = "1.0.15" 2113 | source = "registry+https://github.com/rust-lang/crates.io-index" 2114 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2115 | 2116 | [[package]] 2117 | name = "percent-encoding" 2118 | version = "2.3.2" 2119 | source = "registry+https://github.com/rust-lang/crates.io-index" 2120 | checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2121 | 2122 | [[package]] 2123 | name = "petgraph" 2124 | version = "0.8.2" 2125 | source = "registry+https://github.com/rust-lang/crates.io-index" 2126 | checksum = "54acf3a685220b533e437e264e4d932cfbdc4cc7ec0cd232ed73c08d03b8a7ca" 2127 | dependencies = [ 2128 | "fixedbitset", 2129 | "hashbrown", 2130 | "indexmap", 2131 | "serde", 2132 | ] 2133 | 2134 | [[package]] 2135 | name = "pin-project" 2136 | version = "1.1.10" 2137 | source = "registry+https://github.com/rust-lang/crates.io-index" 2138 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 2139 | dependencies = [ 2140 | "pin-project-internal", 2141 | ] 2142 | 2143 | [[package]] 2144 | name = "pin-project-internal" 2145 | version = "1.1.10" 2146 | source = "registry+https://github.com/rust-lang/crates.io-index" 2147 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 2148 | dependencies = [ 2149 | "proc-macro2", 2150 | "quote", 2151 | "syn", 2152 | ] 2153 | 2154 | [[package]] 2155 | name = "pin-project-lite" 2156 | version = "0.2.16" 2157 | source = "registry+https://github.com/rust-lang/crates.io-index" 2158 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2159 | 2160 | [[package]] 2161 | name = "pin-utils" 2162 | version = "0.1.0" 2163 | source = "registry+https://github.com/rust-lang/crates.io-index" 2164 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2165 | 2166 | [[package]] 2167 | name = "piper" 2168 | version = "0.2.4" 2169 | source = "registry+https://github.com/rust-lang/crates.io-index" 2170 | checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 2171 | dependencies = [ 2172 | "atomic-waker", 2173 | "fastrand", 2174 | "futures-io", 2175 | ] 2176 | 2177 | [[package]] 2178 | name = "pkg-config" 2179 | version = "0.3.32" 2180 | source = "registry+https://github.com/rust-lang/crates.io-index" 2181 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2182 | 2183 | [[package]] 2184 | name = "png" 2185 | version = "0.17.16" 2186 | source = "registry+https://github.com/rust-lang/crates.io-index" 2187 | checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" 2188 | dependencies = [ 2189 | "bitflags 1.3.2", 2190 | "crc32fast", 2191 | "fdeflate", 2192 | "flate2", 2193 | "miniz_oxide", 2194 | ] 2195 | 2196 | [[package]] 2197 | name = "polling" 2198 | version = "3.10.0" 2199 | source = "registry+https://github.com/rust-lang/crates.io-index" 2200 | checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" 2201 | dependencies = [ 2202 | "cfg-if", 2203 | "concurrent-queue", 2204 | "hermit-abi", 2205 | "pin-project-lite", 2206 | "rustix 1.0.8", 2207 | "windows-sys 0.60.2", 2208 | ] 2209 | 2210 | [[package]] 2211 | name = "portable-atomic" 2212 | version = "1.11.1" 2213 | source = "registry+https://github.com/rust-lang/crates.io-index" 2214 | checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 2215 | 2216 | [[package]] 2217 | name = "potential_utf" 2218 | version = "0.1.2" 2219 | source = "registry+https://github.com/rust-lang/crates.io-index" 2220 | checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 2221 | dependencies = [ 2222 | "zerovec", 2223 | ] 2224 | 2225 | [[package]] 2226 | name = "presser" 2227 | version = "0.3.1" 2228 | source = "registry+https://github.com/rust-lang/crates.io-index" 2229 | checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" 2230 | 2231 | [[package]] 2232 | name = "proc-macro-crate" 2233 | version = "3.3.0" 2234 | source = "registry+https://github.com/rust-lang/crates.io-index" 2235 | checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" 2236 | dependencies = [ 2237 | "toml_edit", 2238 | ] 2239 | 2240 | [[package]] 2241 | name = "proc-macro2" 2242 | version = "1.0.101" 2243 | source = "registry+https://github.com/rust-lang/crates.io-index" 2244 | checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" 2245 | dependencies = [ 2246 | "unicode-ident", 2247 | ] 2248 | 2249 | [[package]] 2250 | name = "profiling" 2251 | version = "1.0.17" 2252 | source = "registry+https://github.com/rust-lang/crates.io-index" 2253 | checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" 2254 | 2255 | [[package]] 2256 | name = "quick-xml" 2257 | version = "0.36.2" 2258 | source = "registry+https://github.com/rust-lang/crates.io-index" 2259 | checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" 2260 | dependencies = [ 2261 | "memchr", 2262 | "serde", 2263 | ] 2264 | 2265 | [[package]] 2266 | name = "quick-xml" 2267 | version = "0.37.5" 2268 | source = "registry+https://github.com/rust-lang/crates.io-index" 2269 | checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" 2270 | dependencies = [ 2271 | "memchr", 2272 | ] 2273 | 2274 | [[package]] 2275 | name = "quote" 2276 | version = "1.0.40" 2277 | source = "registry+https://github.com/rust-lang/crates.io-index" 2278 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 2279 | dependencies = [ 2280 | "proc-macro2", 2281 | ] 2282 | 2283 | [[package]] 2284 | name = "r-efi" 2285 | version = "5.3.0" 2286 | source = "registry+https://github.com/rust-lang/crates.io-index" 2287 | checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2288 | 2289 | [[package]] 2290 | name = "range-alloc" 2291 | version = "0.1.4" 2292 | source = "registry+https://github.com/rust-lang/crates.io-index" 2293 | checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" 2294 | 2295 | [[package]] 2296 | name = "raw-window-handle" 2297 | version = "0.6.2" 2298 | source = "registry+https://github.com/rust-lang/crates.io-index" 2299 | checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" 2300 | 2301 | [[package]] 2302 | name = "redox_syscall" 2303 | version = "0.4.1" 2304 | source = "registry+https://github.com/rust-lang/crates.io-index" 2305 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 2306 | dependencies = [ 2307 | "bitflags 1.3.2", 2308 | ] 2309 | 2310 | [[package]] 2311 | name = "redox_syscall" 2312 | version = "0.5.17" 2313 | source = "registry+https://github.com/rust-lang/crates.io-index" 2314 | checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" 2315 | dependencies = [ 2316 | "bitflags 2.9.3", 2317 | ] 2318 | 2319 | [[package]] 2320 | name = "renderdoc-sys" 2321 | version = "1.1.0" 2322 | source = "registry+https://github.com/rust-lang/crates.io-index" 2323 | checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 2324 | 2325 | [[package]] 2326 | name = "rust-sugiyama" 2327 | version = "0.4.0" 2328 | source = "registry+https://github.com/rust-lang/crates.io-index" 2329 | checksum = "a81a3e22e7b3e9218ae4d1a3640a7e7ad142e120acd03e5e66d231d5861598b1" 2330 | dependencies = [ 2331 | "log", 2332 | "petgraph", 2333 | ] 2334 | 2335 | [[package]] 2336 | name = "rustc-hash" 2337 | version = "1.1.0" 2338 | source = "registry+https://github.com/rust-lang/crates.io-index" 2339 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2340 | 2341 | [[package]] 2342 | name = "rustc-hash" 2343 | version = "2.1.1" 2344 | source = "registry+https://github.com/rust-lang/crates.io-index" 2345 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2346 | 2347 | [[package]] 2348 | name = "rustix" 2349 | version = "0.38.44" 2350 | source = "registry+https://github.com/rust-lang/crates.io-index" 2351 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 2352 | dependencies = [ 2353 | "bitflags 2.9.3", 2354 | "errno", 2355 | "libc", 2356 | "linux-raw-sys 0.4.15", 2357 | "windows-sys 0.59.0", 2358 | ] 2359 | 2360 | [[package]] 2361 | name = "rustix" 2362 | version = "1.0.8" 2363 | source = "registry+https://github.com/rust-lang/crates.io-index" 2364 | checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" 2365 | dependencies = [ 2366 | "bitflags 2.9.3", 2367 | "errno", 2368 | "libc", 2369 | "linux-raw-sys 0.9.4", 2370 | "windows-sys 0.60.2", 2371 | ] 2372 | 2373 | [[package]] 2374 | name = "rustversion" 2375 | version = "1.0.22" 2376 | source = "registry+https://github.com/rust-lang/crates.io-index" 2377 | checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 2378 | 2379 | [[package]] 2380 | name = "same-file" 2381 | version = "1.0.6" 2382 | source = "registry+https://github.com/rust-lang/crates.io-index" 2383 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2384 | dependencies = [ 2385 | "winapi-util", 2386 | ] 2387 | 2388 | [[package]] 2389 | name = "scoped-tls" 2390 | version = "1.0.1" 2391 | source = "registry+https://github.com/rust-lang/crates.io-index" 2392 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2393 | 2394 | [[package]] 2395 | name = "scopeguard" 2396 | version = "1.2.0" 2397 | source = "registry+https://github.com/rust-lang/crates.io-index" 2398 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2399 | 2400 | [[package]] 2401 | name = "sctk-adwaita" 2402 | version = "0.10.1" 2403 | source = "registry+https://github.com/rust-lang/crates.io-index" 2404 | checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" 2405 | dependencies = [ 2406 | "ab_glyph", 2407 | "log", 2408 | "memmap2", 2409 | "smithay-client-toolkit", 2410 | "tiny-skia", 2411 | ] 2412 | 2413 | [[package]] 2414 | name = "serde" 2415 | version = "1.0.219" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 2418 | dependencies = [ 2419 | "serde_derive", 2420 | ] 2421 | 2422 | [[package]] 2423 | name = "serde_derive" 2424 | version = "1.0.219" 2425 | source = "registry+https://github.com/rust-lang/crates.io-index" 2426 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 2427 | dependencies = [ 2428 | "proc-macro2", 2429 | "quote", 2430 | "syn", 2431 | ] 2432 | 2433 | [[package]] 2434 | name = "serde_repr" 2435 | version = "0.1.20" 2436 | source = "registry+https://github.com/rust-lang/crates.io-index" 2437 | checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" 2438 | dependencies = [ 2439 | "proc-macro2", 2440 | "quote", 2441 | "syn", 2442 | ] 2443 | 2444 | [[package]] 2445 | name = "shlex" 2446 | version = "1.3.0" 2447 | source = "registry+https://github.com/rust-lang/crates.io-index" 2448 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2449 | 2450 | [[package]] 2451 | name = "signal-hook-registry" 2452 | version = "1.4.6" 2453 | source = "registry+https://github.com/rust-lang/crates.io-index" 2454 | checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 2455 | dependencies = [ 2456 | "libc", 2457 | ] 2458 | 2459 | [[package]] 2460 | name = "simd-adler32" 2461 | version = "0.3.7" 2462 | source = "registry+https://github.com/rust-lang/crates.io-index" 2463 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 2464 | 2465 | [[package]] 2466 | name = "slab" 2467 | version = "0.4.11" 2468 | source = "registry+https://github.com/rust-lang/crates.io-index" 2469 | checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 2470 | 2471 | [[package]] 2472 | name = "slotmap" 2473 | version = "1.0.7" 2474 | source = "registry+https://github.com/rust-lang/crates.io-index" 2475 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 2476 | dependencies = [ 2477 | "version_check", 2478 | ] 2479 | 2480 | [[package]] 2481 | name = "smallvec" 2482 | version = "1.15.1" 2483 | source = "registry+https://github.com/rust-lang/crates.io-index" 2484 | checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2485 | 2486 | [[package]] 2487 | name = "smithay-client-toolkit" 2488 | version = "0.19.2" 2489 | source = "registry+https://github.com/rust-lang/crates.io-index" 2490 | checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" 2491 | dependencies = [ 2492 | "bitflags 2.9.3", 2493 | "calloop", 2494 | "calloop-wayland-source", 2495 | "cursor-icon", 2496 | "libc", 2497 | "log", 2498 | "memmap2", 2499 | "rustix 0.38.44", 2500 | "thiserror 1.0.69", 2501 | "wayland-backend", 2502 | "wayland-client", 2503 | "wayland-csd-frame", 2504 | "wayland-cursor", 2505 | "wayland-protocols", 2506 | "wayland-protocols-wlr", 2507 | "wayland-scanner", 2508 | "xkeysym", 2509 | ] 2510 | 2511 | [[package]] 2512 | name = "smithay-clipboard" 2513 | version = "0.7.2" 2514 | source = "registry+https://github.com/rust-lang/crates.io-index" 2515 | checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" 2516 | dependencies = [ 2517 | "libc", 2518 | "smithay-client-toolkit", 2519 | "wayland-backend", 2520 | ] 2521 | 2522 | [[package]] 2523 | name = "smol_str" 2524 | version = "0.2.2" 2525 | source = "registry+https://github.com/rust-lang/crates.io-index" 2526 | checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" 2527 | dependencies = [ 2528 | "serde", 2529 | ] 2530 | 2531 | [[package]] 2532 | name = "spirv" 2533 | version = "0.3.0+sdk-1.3.268.0" 2534 | source = "registry+https://github.com/rust-lang/crates.io-index" 2535 | checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" 2536 | dependencies = [ 2537 | "bitflags 2.9.3", 2538 | ] 2539 | 2540 | [[package]] 2541 | name = "stable_deref_trait" 2542 | version = "1.2.0" 2543 | source = "registry+https://github.com/rust-lang/crates.io-index" 2544 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2545 | 2546 | [[package]] 2547 | name = "static_assertions" 2548 | version = "1.1.0" 2549 | source = "registry+https://github.com/rust-lang/crates.io-index" 2550 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2551 | 2552 | [[package]] 2553 | name = "strict-num" 2554 | version = "0.1.1" 2555 | source = "registry+https://github.com/rust-lang/crates.io-index" 2556 | checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" 2557 | 2558 | [[package]] 2559 | name = "strum" 2560 | version = "0.26.3" 2561 | source = "registry+https://github.com/rust-lang/crates.io-index" 2562 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 2563 | dependencies = [ 2564 | "strum_macros", 2565 | ] 2566 | 2567 | [[package]] 2568 | name = "strum_macros" 2569 | version = "0.26.4" 2570 | source = "registry+https://github.com/rust-lang/crates.io-index" 2571 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 2572 | dependencies = [ 2573 | "heck", 2574 | "proc-macro2", 2575 | "quote", 2576 | "rustversion", 2577 | "syn", 2578 | ] 2579 | 2580 | [[package]] 2581 | name = "syn" 2582 | version = "2.0.106" 2583 | source = "registry+https://github.com/rust-lang/crates.io-index" 2584 | checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" 2585 | dependencies = [ 2586 | "proc-macro2", 2587 | "quote", 2588 | "unicode-ident", 2589 | ] 2590 | 2591 | [[package]] 2592 | name = "synstructure" 2593 | version = "0.13.2" 2594 | source = "registry+https://github.com/rust-lang/crates.io-index" 2595 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 2596 | dependencies = [ 2597 | "proc-macro2", 2598 | "quote", 2599 | "syn", 2600 | ] 2601 | 2602 | [[package]] 2603 | name = "tempfile" 2604 | version = "3.21.0" 2605 | source = "registry+https://github.com/rust-lang/crates.io-index" 2606 | checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" 2607 | dependencies = [ 2608 | "fastrand", 2609 | "getrandom", 2610 | "once_cell", 2611 | "rustix 1.0.8", 2612 | "windows-sys 0.60.2", 2613 | ] 2614 | 2615 | [[package]] 2616 | name = "termcolor" 2617 | version = "1.4.1" 2618 | source = "registry+https://github.com/rust-lang/crates.io-index" 2619 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 2620 | dependencies = [ 2621 | "winapi-util", 2622 | ] 2623 | 2624 | [[package]] 2625 | name = "thiserror" 2626 | version = "1.0.69" 2627 | source = "registry+https://github.com/rust-lang/crates.io-index" 2628 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2629 | dependencies = [ 2630 | "thiserror-impl 1.0.69", 2631 | ] 2632 | 2633 | [[package]] 2634 | name = "thiserror" 2635 | version = "2.0.16" 2636 | source = "registry+https://github.com/rust-lang/crates.io-index" 2637 | checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" 2638 | dependencies = [ 2639 | "thiserror-impl 2.0.16", 2640 | ] 2641 | 2642 | [[package]] 2643 | name = "thiserror-impl" 2644 | version = "1.0.69" 2645 | source = "registry+https://github.com/rust-lang/crates.io-index" 2646 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2647 | dependencies = [ 2648 | "proc-macro2", 2649 | "quote", 2650 | "syn", 2651 | ] 2652 | 2653 | [[package]] 2654 | name = "thiserror-impl" 2655 | version = "2.0.16" 2656 | source = "registry+https://github.com/rust-lang/crates.io-index" 2657 | checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" 2658 | dependencies = [ 2659 | "proc-macro2", 2660 | "quote", 2661 | "syn", 2662 | ] 2663 | 2664 | [[package]] 2665 | name = "tiff" 2666 | version = "0.9.1" 2667 | source = "registry+https://github.com/rust-lang/crates.io-index" 2668 | checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 2669 | dependencies = [ 2670 | "flate2", 2671 | "jpeg-decoder", 2672 | "weezl", 2673 | ] 2674 | 2675 | [[package]] 2676 | name = "tiny-skia" 2677 | version = "0.11.4" 2678 | source = "registry+https://github.com/rust-lang/crates.io-index" 2679 | checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" 2680 | dependencies = [ 2681 | "arrayref", 2682 | "arrayvec", 2683 | "bytemuck", 2684 | "cfg-if", 2685 | "log", 2686 | "tiny-skia-path", 2687 | ] 2688 | 2689 | [[package]] 2690 | name = "tiny-skia-path" 2691 | version = "0.11.4" 2692 | source = "registry+https://github.com/rust-lang/crates.io-index" 2693 | checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" 2694 | dependencies = [ 2695 | "arrayref", 2696 | "bytemuck", 2697 | "strict-num", 2698 | ] 2699 | 2700 | [[package]] 2701 | name = "tinystr" 2702 | version = "0.8.1" 2703 | source = "registry+https://github.com/rust-lang/crates.io-index" 2704 | checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 2705 | dependencies = [ 2706 | "displaydoc", 2707 | "zerovec", 2708 | ] 2709 | 2710 | [[package]] 2711 | name = "toml_datetime" 2712 | version = "0.6.11" 2713 | source = "registry+https://github.com/rust-lang/crates.io-index" 2714 | checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" 2715 | 2716 | [[package]] 2717 | name = "toml_edit" 2718 | version = "0.22.27" 2719 | source = "registry+https://github.com/rust-lang/crates.io-index" 2720 | checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" 2721 | dependencies = [ 2722 | "indexmap", 2723 | "toml_datetime", 2724 | "winnow", 2725 | ] 2726 | 2727 | [[package]] 2728 | name = "tracing" 2729 | version = "0.1.41" 2730 | source = "registry+https://github.com/rust-lang/crates.io-index" 2731 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2732 | dependencies = [ 2733 | "pin-project-lite", 2734 | "tracing-attributes", 2735 | "tracing-core", 2736 | ] 2737 | 2738 | [[package]] 2739 | name = "tracing-attributes" 2740 | version = "0.1.30" 2741 | source = "registry+https://github.com/rust-lang/crates.io-index" 2742 | checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 2743 | dependencies = [ 2744 | "proc-macro2", 2745 | "quote", 2746 | "syn", 2747 | ] 2748 | 2749 | [[package]] 2750 | name = "tracing-core" 2751 | version = "0.1.34" 2752 | source = "registry+https://github.com/rust-lang/crates.io-index" 2753 | checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 2754 | dependencies = [ 2755 | "once_cell", 2756 | ] 2757 | 2758 | [[package]] 2759 | name = "ttf-parser" 2760 | version = "0.25.1" 2761 | source = "registry+https://github.com/rust-lang/crates.io-index" 2762 | checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" 2763 | 2764 | [[package]] 2765 | name = "type-map" 2766 | version = "0.5.1" 2767 | source = "registry+https://github.com/rust-lang/crates.io-index" 2768 | checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" 2769 | dependencies = [ 2770 | "rustc-hash 2.1.1", 2771 | ] 2772 | 2773 | [[package]] 2774 | name = "uds_windows" 2775 | version = "1.1.0" 2776 | source = "registry+https://github.com/rust-lang/crates.io-index" 2777 | checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" 2778 | dependencies = [ 2779 | "memoffset", 2780 | "tempfile", 2781 | "winapi", 2782 | ] 2783 | 2784 | [[package]] 2785 | name = "unicode-ident" 2786 | version = "1.0.18" 2787 | source = "registry+https://github.com/rust-lang/crates.io-index" 2788 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 2789 | 2790 | [[package]] 2791 | name = "unicode-segmentation" 2792 | version = "1.12.0" 2793 | source = "registry+https://github.com/rust-lang/crates.io-index" 2794 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 2795 | 2796 | [[package]] 2797 | name = "unicode-width" 2798 | version = "0.2.1" 2799 | source = "registry+https://github.com/rust-lang/crates.io-index" 2800 | checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" 2801 | 2802 | [[package]] 2803 | name = "url" 2804 | version = "2.5.7" 2805 | source = "registry+https://github.com/rust-lang/crates.io-index" 2806 | checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 2807 | dependencies = [ 2808 | "form_urlencoded", 2809 | "idna", 2810 | "percent-encoding", 2811 | "serde", 2812 | ] 2813 | 2814 | [[package]] 2815 | name = "utf8_iter" 2816 | version = "1.0.4" 2817 | source = "registry+https://github.com/rust-lang/crates.io-index" 2818 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2819 | 2820 | [[package]] 2821 | name = "version_check" 2822 | version = "0.9.5" 2823 | source = "registry+https://github.com/rust-lang/crates.io-index" 2824 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2825 | 2826 | [[package]] 2827 | name = "walkdir" 2828 | version = "2.5.0" 2829 | source = "registry+https://github.com/rust-lang/crates.io-index" 2830 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 2831 | dependencies = [ 2832 | "same-file", 2833 | "winapi-util", 2834 | ] 2835 | 2836 | [[package]] 2837 | name = "wasi" 2838 | version = "0.14.2+wasi-0.2.4" 2839 | source = "registry+https://github.com/rust-lang/crates.io-index" 2840 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 2841 | dependencies = [ 2842 | "wit-bindgen-rt", 2843 | ] 2844 | 2845 | [[package]] 2846 | name = "wasm-bindgen" 2847 | version = "0.2.100" 2848 | source = "registry+https://github.com/rust-lang/crates.io-index" 2849 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 2850 | dependencies = [ 2851 | "cfg-if", 2852 | "once_cell", 2853 | "rustversion", 2854 | "wasm-bindgen-macro", 2855 | ] 2856 | 2857 | [[package]] 2858 | name = "wasm-bindgen-backend" 2859 | version = "0.2.100" 2860 | source = "registry+https://github.com/rust-lang/crates.io-index" 2861 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 2862 | dependencies = [ 2863 | "bumpalo", 2864 | "log", 2865 | "proc-macro2", 2866 | "quote", 2867 | "syn", 2868 | "wasm-bindgen-shared", 2869 | ] 2870 | 2871 | [[package]] 2872 | name = "wasm-bindgen-futures" 2873 | version = "0.4.50" 2874 | source = "registry+https://github.com/rust-lang/crates.io-index" 2875 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 2876 | dependencies = [ 2877 | "cfg-if", 2878 | "js-sys", 2879 | "once_cell", 2880 | "wasm-bindgen", 2881 | "web-sys", 2882 | ] 2883 | 2884 | [[package]] 2885 | name = "wasm-bindgen-macro" 2886 | version = "0.2.100" 2887 | source = "registry+https://github.com/rust-lang/crates.io-index" 2888 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 2889 | dependencies = [ 2890 | "quote", 2891 | "wasm-bindgen-macro-support", 2892 | ] 2893 | 2894 | [[package]] 2895 | name = "wasm-bindgen-macro-support" 2896 | version = "0.2.100" 2897 | source = "registry+https://github.com/rust-lang/crates.io-index" 2898 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 2899 | dependencies = [ 2900 | "proc-macro2", 2901 | "quote", 2902 | "syn", 2903 | "wasm-bindgen-backend", 2904 | "wasm-bindgen-shared", 2905 | ] 2906 | 2907 | [[package]] 2908 | name = "wasm-bindgen-shared" 2909 | version = "0.2.100" 2910 | source = "registry+https://github.com/rust-lang/crates.io-index" 2911 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2912 | dependencies = [ 2913 | "unicode-ident", 2914 | ] 2915 | 2916 | [[package]] 2917 | name = "wayland-backend" 2918 | version = "0.3.11" 2919 | source = "registry+https://github.com/rust-lang/crates.io-index" 2920 | checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" 2921 | dependencies = [ 2922 | "cc", 2923 | "downcast-rs", 2924 | "rustix 1.0.8", 2925 | "scoped-tls", 2926 | "smallvec", 2927 | "wayland-sys", 2928 | ] 2929 | 2930 | [[package]] 2931 | name = "wayland-client" 2932 | version = "0.31.11" 2933 | source = "registry+https://github.com/rust-lang/crates.io-index" 2934 | checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" 2935 | dependencies = [ 2936 | "bitflags 2.9.3", 2937 | "rustix 1.0.8", 2938 | "wayland-backend", 2939 | "wayland-scanner", 2940 | ] 2941 | 2942 | [[package]] 2943 | name = "wayland-csd-frame" 2944 | version = "0.3.0" 2945 | source = "registry+https://github.com/rust-lang/crates.io-index" 2946 | checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" 2947 | dependencies = [ 2948 | "bitflags 2.9.3", 2949 | "cursor-icon", 2950 | "wayland-backend", 2951 | ] 2952 | 2953 | [[package]] 2954 | name = "wayland-cursor" 2955 | version = "0.31.11" 2956 | source = "registry+https://github.com/rust-lang/crates.io-index" 2957 | checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" 2958 | dependencies = [ 2959 | "rustix 1.0.8", 2960 | "wayland-client", 2961 | "xcursor", 2962 | ] 2963 | 2964 | [[package]] 2965 | name = "wayland-protocols" 2966 | version = "0.32.9" 2967 | source = "registry+https://github.com/rust-lang/crates.io-index" 2968 | checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" 2969 | dependencies = [ 2970 | "bitflags 2.9.3", 2971 | "wayland-backend", 2972 | "wayland-client", 2973 | "wayland-scanner", 2974 | ] 2975 | 2976 | [[package]] 2977 | name = "wayland-protocols-plasma" 2978 | version = "0.3.9" 2979 | source = "registry+https://github.com/rust-lang/crates.io-index" 2980 | checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" 2981 | dependencies = [ 2982 | "bitflags 2.9.3", 2983 | "wayland-backend", 2984 | "wayland-client", 2985 | "wayland-protocols", 2986 | "wayland-scanner", 2987 | ] 2988 | 2989 | [[package]] 2990 | name = "wayland-protocols-wlr" 2991 | version = "0.3.9" 2992 | source = "registry+https://github.com/rust-lang/crates.io-index" 2993 | checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" 2994 | dependencies = [ 2995 | "bitflags 2.9.3", 2996 | "wayland-backend", 2997 | "wayland-client", 2998 | "wayland-protocols", 2999 | "wayland-scanner", 3000 | ] 3001 | 3002 | [[package]] 3003 | name = "wayland-scanner" 3004 | version = "0.31.7" 3005 | source = "registry+https://github.com/rust-lang/crates.io-index" 3006 | checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" 3007 | dependencies = [ 3008 | "proc-macro2", 3009 | "quick-xml 0.37.5", 3010 | "quote", 3011 | ] 3012 | 3013 | [[package]] 3014 | name = "wayland-sys" 3015 | version = "0.31.7" 3016 | source = "registry+https://github.com/rust-lang/crates.io-index" 3017 | checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" 3018 | dependencies = [ 3019 | "dlib", 3020 | "log", 3021 | "once_cell", 3022 | "pkg-config", 3023 | ] 3024 | 3025 | [[package]] 3026 | name = "web-sys" 3027 | version = "0.3.77" 3028 | source = "registry+https://github.com/rust-lang/crates.io-index" 3029 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 3030 | dependencies = [ 3031 | "js-sys", 3032 | "wasm-bindgen", 3033 | ] 3034 | 3035 | [[package]] 3036 | name = "web-time" 3037 | version = "1.1.0" 3038 | source = "registry+https://github.com/rust-lang/crates.io-index" 3039 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3040 | dependencies = [ 3041 | "js-sys", 3042 | "wasm-bindgen", 3043 | ] 3044 | 3045 | [[package]] 3046 | name = "webbrowser" 3047 | version = "1.0.5" 3048 | source = "registry+https://github.com/rust-lang/crates.io-index" 3049 | checksum = "aaf4f3c0ba838e82b4e5ccc4157003fb8c324ee24c058470ffb82820becbde98" 3050 | dependencies = [ 3051 | "core-foundation 0.10.1", 3052 | "jni", 3053 | "log", 3054 | "ndk-context", 3055 | "objc2 0.6.2", 3056 | "objc2-foundation 0.3.1", 3057 | "url", 3058 | "web-sys", 3059 | ] 3060 | 3061 | [[package]] 3062 | name = "weezl" 3063 | version = "0.1.10" 3064 | source = "registry+https://github.com/rust-lang/crates.io-index" 3065 | checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" 3066 | 3067 | [[package]] 3068 | name = "wgpu" 3069 | version = "25.0.2" 3070 | source = "registry+https://github.com/rust-lang/crates.io-index" 3071 | checksum = "ec8fb398f119472be4d80bc3647339f56eb63b2a331f6a3d16e25d8144197dd9" 3072 | dependencies = [ 3073 | "arrayvec", 3074 | "bitflags 2.9.3", 3075 | "cfg_aliases", 3076 | "document-features", 3077 | "hashbrown", 3078 | "js-sys", 3079 | "log", 3080 | "naga", 3081 | "parking_lot", 3082 | "portable-atomic", 3083 | "profiling", 3084 | "raw-window-handle", 3085 | "smallvec", 3086 | "static_assertions", 3087 | "wasm-bindgen", 3088 | "wasm-bindgen-futures", 3089 | "web-sys", 3090 | "wgpu-core", 3091 | "wgpu-hal", 3092 | "wgpu-types", 3093 | ] 3094 | 3095 | [[package]] 3096 | name = "wgpu-core" 3097 | version = "25.0.2" 3098 | source = "registry+https://github.com/rust-lang/crates.io-index" 3099 | checksum = "f7b882196f8368511d613c6aeec80655160db6646aebddf8328879a88d54e500" 3100 | dependencies = [ 3101 | "arrayvec", 3102 | "bit-set", 3103 | "bit-vec", 3104 | "bitflags 2.9.3", 3105 | "cfg_aliases", 3106 | "document-features", 3107 | "hashbrown", 3108 | "indexmap", 3109 | "log", 3110 | "naga", 3111 | "once_cell", 3112 | "parking_lot", 3113 | "portable-atomic", 3114 | "profiling", 3115 | "raw-window-handle", 3116 | "rustc-hash 1.1.0", 3117 | "smallvec", 3118 | "thiserror 2.0.16", 3119 | "wgpu-core-deps-apple", 3120 | "wgpu-core-deps-emscripten", 3121 | "wgpu-core-deps-windows-linux-android", 3122 | "wgpu-hal", 3123 | "wgpu-types", 3124 | ] 3125 | 3126 | [[package]] 3127 | name = "wgpu-core-deps-apple" 3128 | version = "25.0.0" 3129 | source = "registry+https://github.com/rust-lang/crates.io-index" 3130 | checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d" 3131 | dependencies = [ 3132 | "wgpu-hal", 3133 | ] 3134 | 3135 | [[package]] 3136 | name = "wgpu-core-deps-emscripten" 3137 | version = "25.0.0" 3138 | source = "registry+https://github.com/rust-lang/crates.io-index" 3139 | checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445" 3140 | dependencies = [ 3141 | "wgpu-hal", 3142 | ] 3143 | 3144 | [[package]] 3145 | name = "wgpu-core-deps-windows-linux-android" 3146 | version = "25.0.0" 3147 | source = "registry+https://github.com/rust-lang/crates.io-index" 3148 | checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46" 3149 | dependencies = [ 3150 | "wgpu-hal", 3151 | ] 3152 | 3153 | [[package]] 3154 | name = "wgpu-hal" 3155 | version = "25.0.2" 3156 | source = "registry+https://github.com/rust-lang/crates.io-index" 3157 | checksum = "f968767fe4d3d33747bbd1473ccd55bf0f6451f55d733b5597e67b5deab4ad17" 3158 | dependencies = [ 3159 | "android_system_properties", 3160 | "arrayvec", 3161 | "ash", 3162 | "bit-set", 3163 | "bitflags 2.9.3", 3164 | "block", 3165 | "bytemuck", 3166 | "cfg-if", 3167 | "cfg_aliases", 3168 | "core-graphics-types", 3169 | "glow", 3170 | "glutin_wgl_sys", 3171 | "gpu-alloc", 3172 | "gpu-allocator", 3173 | "gpu-descriptor", 3174 | "hashbrown", 3175 | "js-sys", 3176 | "khronos-egl", 3177 | "libc", 3178 | "libloading", 3179 | "log", 3180 | "metal", 3181 | "naga", 3182 | "ndk-sys 0.5.0+25.2.9519653", 3183 | "objc", 3184 | "ordered-float", 3185 | "parking_lot", 3186 | "portable-atomic", 3187 | "profiling", 3188 | "range-alloc", 3189 | "raw-window-handle", 3190 | "renderdoc-sys", 3191 | "smallvec", 3192 | "thiserror 2.0.16", 3193 | "wasm-bindgen", 3194 | "web-sys", 3195 | "wgpu-types", 3196 | "windows 0.58.0", 3197 | "windows-core 0.58.0", 3198 | ] 3199 | 3200 | [[package]] 3201 | name = "wgpu-types" 3202 | version = "25.0.0" 3203 | source = "registry+https://github.com/rust-lang/crates.io-index" 3204 | checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc" 3205 | dependencies = [ 3206 | "bitflags 2.9.3", 3207 | "bytemuck", 3208 | "js-sys", 3209 | "log", 3210 | "thiserror 2.0.16", 3211 | "web-sys", 3212 | ] 3213 | 3214 | [[package]] 3215 | name = "winapi" 3216 | version = "0.3.9" 3217 | source = "registry+https://github.com/rust-lang/crates.io-index" 3218 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3219 | dependencies = [ 3220 | "winapi-i686-pc-windows-gnu", 3221 | "winapi-x86_64-pc-windows-gnu", 3222 | ] 3223 | 3224 | [[package]] 3225 | name = "winapi-i686-pc-windows-gnu" 3226 | version = "0.4.0" 3227 | source = "registry+https://github.com/rust-lang/crates.io-index" 3228 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3229 | 3230 | [[package]] 3231 | name = "winapi-util" 3232 | version = "0.1.10" 3233 | source = "registry+https://github.com/rust-lang/crates.io-index" 3234 | checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" 3235 | dependencies = [ 3236 | "windows-sys 0.60.2", 3237 | ] 3238 | 3239 | [[package]] 3240 | name = "winapi-x86_64-pc-windows-gnu" 3241 | version = "0.4.0" 3242 | source = "registry+https://github.com/rust-lang/crates.io-index" 3243 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3244 | 3245 | [[package]] 3246 | name = "windows" 3247 | version = "0.58.0" 3248 | source = "registry+https://github.com/rust-lang/crates.io-index" 3249 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 3250 | dependencies = [ 3251 | "windows-core 0.58.0", 3252 | "windows-targets 0.52.6", 3253 | ] 3254 | 3255 | [[package]] 3256 | name = "windows" 3257 | version = "0.61.3" 3258 | source = "registry+https://github.com/rust-lang/crates.io-index" 3259 | checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 3260 | dependencies = [ 3261 | "windows-collections", 3262 | "windows-core 0.61.2", 3263 | "windows-future", 3264 | "windows-link", 3265 | "windows-numerics", 3266 | ] 3267 | 3268 | [[package]] 3269 | name = "windows-collections" 3270 | version = "0.2.0" 3271 | source = "registry+https://github.com/rust-lang/crates.io-index" 3272 | checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 3273 | dependencies = [ 3274 | "windows-core 0.61.2", 3275 | ] 3276 | 3277 | [[package]] 3278 | name = "windows-core" 3279 | version = "0.58.0" 3280 | source = "registry+https://github.com/rust-lang/crates.io-index" 3281 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 3282 | dependencies = [ 3283 | "windows-implement 0.58.0", 3284 | "windows-interface 0.58.0", 3285 | "windows-result 0.2.0", 3286 | "windows-strings 0.1.0", 3287 | "windows-targets 0.52.6", 3288 | ] 3289 | 3290 | [[package]] 3291 | name = "windows-core" 3292 | version = "0.61.2" 3293 | source = "registry+https://github.com/rust-lang/crates.io-index" 3294 | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 3295 | dependencies = [ 3296 | "windows-implement 0.60.0", 3297 | "windows-interface 0.59.1", 3298 | "windows-link", 3299 | "windows-result 0.3.4", 3300 | "windows-strings 0.4.2", 3301 | ] 3302 | 3303 | [[package]] 3304 | name = "windows-future" 3305 | version = "0.2.1" 3306 | source = "registry+https://github.com/rust-lang/crates.io-index" 3307 | checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 3308 | dependencies = [ 3309 | "windows-core 0.61.2", 3310 | "windows-link", 3311 | "windows-threading", 3312 | ] 3313 | 3314 | [[package]] 3315 | name = "windows-implement" 3316 | version = "0.58.0" 3317 | source = "registry+https://github.com/rust-lang/crates.io-index" 3318 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 3319 | dependencies = [ 3320 | "proc-macro2", 3321 | "quote", 3322 | "syn", 3323 | ] 3324 | 3325 | [[package]] 3326 | name = "windows-implement" 3327 | version = "0.60.0" 3328 | source = "registry+https://github.com/rust-lang/crates.io-index" 3329 | checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 3330 | dependencies = [ 3331 | "proc-macro2", 3332 | "quote", 3333 | "syn", 3334 | ] 3335 | 3336 | [[package]] 3337 | name = "windows-interface" 3338 | version = "0.58.0" 3339 | source = "registry+https://github.com/rust-lang/crates.io-index" 3340 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 3341 | dependencies = [ 3342 | "proc-macro2", 3343 | "quote", 3344 | "syn", 3345 | ] 3346 | 3347 | [[package]] 3348 | name = "windows-interface" 3349 | version = "0.59.1" 3350 | source = "registry+https://github.com/rust-lang/crates.io-index" 3351 | checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 3352 | dependencies = [ 3353 | "proc-macro2", 3354 | "quote", 3355 | "syn", 3356 | ] 3357 | 3358 | [[package]] 3359 | name = "windows-link" 3360 | version = "0.1.3" 3361 | source = "registry+https://github.com/rust-lang/crates.io-index" 3362 | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 3363 | 3364 | [[package]] 3365 | name = "windows-numerics" 3366 | version = "0.2.0" 3367 | source = "registry+https://github.com/rust-lang/crates.io-index" 3368 | checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 3369 | dependencies = [ 3370 | "windows-core 0.61.2", 3371 | "windows-link", 3372 | ] 3373 | 3374 | [[package]] 3375 | name = "windows-result" 3376 | version = "0.2.0" 3377 | source = "registry+https://github.com/rust-lang/crates.io-index" 3378 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 3379 | dependencies = [ 3380 | "windows-targets 0.52.6", 3381 | ] 3382 | 3383 | [[package]] 3384 | name = "windows-result" 3385 | version = "0.3.4" 3386 | source = "registry+https://github.com/rust-lang/crates.io-index" 3387 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 3388 | dependencies = [ 3389 | "windows-link", 3390 | ] 3391 | 3392 | [[package]] 3393 | name = "windows-strings" 3394 | version = "0.1.0" 3395 | source = "registry+https://github.com/rust-lang/crates.io-index" 3396 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 3397 | dependencies = [ 3398 | "windows-result 0.2.0", 3399 | "windows-targets 0.52.6", 3400 | ] 3401 | 3402 | [[package]] 3403 | name = "windows-strings" 3404 | version = "0.4.2" 3405 | source = "registry+https://github.com/rust-lang/crates.io-index" 3406 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 3407 | dependencies = [ 3408 | "windows-link", 3409 | ] 3410 | 3411 | [[package]] 3412 | name = "windows-sys" 3413 | version = "0.45.0" 3414 | source = "registry+https://github.com/rust-lang/crates.io-index" 3415 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 3416 | dependencies = [ 3417 | "windows-targets 0.42.2", 3418 | ] 3419 | 3420 | [[package]] 3421 | name = "windows-sys" 3422 | version = "0.52.0" 3423 | source = "registry+https://github.com/rust-lang/crates.io-index" 3424 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3425 | dependencies = [ 3426 | "windows-targets 0.52.6", 3427 | ] 3428 | 3429 | [[package]] 3430 | name = "windows-sys" 3431 | version = "0.59.0" 3432 | source = "registry+https://github.com/rust-lang/crates.io-index" 3433 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3434 | dependencies = [ 3435 | "windows-targets 0.52.6", 3436 | ] 3437 | 3438 | [[package]] 3439 | name = "windows-sys" 3440 | version = "0.60.2" 3441 | source = "registry+https://github.com/rust-lang/crates.io-index" 3442 | checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 3443 | dependencies = [ 3444 | "windows-targets 0.53.3", 3445 | ] 3446 | 3447 | [[package]] 3448 | name = "windows-targets" 3449 | version = "0.42.2" 3450 | source = "registry+https://github.com/rust-lang/crates.io-index" 3451 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 3452 | dependencies = [ 3453 | "windows_aarch64_gnullvm 0.42.2", 3454 | "windows_aarch64_msvc 0.42.2", 3455 | "windows_i686_gnu 0.42.2", 3456 | "windows_i686_msvc 0.42.2", 3457 | "windows_x86_64_gnu 0.42.2", 3458 | "windows_x86_64_gnullvm 0.42.2", 3459 | "windows_x86_64_msvc 0.42.2", 3460 | ] 3461 | 3462 | [[package]] 3463 | name = "windows-targets" 3464 | version = "0.48.5" 3465 | source = "registry+https://github.com/rust-lang/crates.io-index" 3466 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3467 | dependencies = [ 3468 | "windows_aarch64_gnullvm 0.48.5", 3469 | "windows_aarch64_msvc 0.48.5", 3470 | "windows_i686_gnu 0.48.5", 3471 | "windows_i686_msvc 0.48.5", 3472 | "windows_x86_64_gnu 0.48.5", 3473 | "windows_x86_64_gnullvm 0.48.5", 3474 | "windows_x86_64_msvc 0.48.5", 3475 | ] 3476 | 3477 | [[package]] 3478 | name = "windows-targets" 3479 | version = "0.52.6" 3480 | source = "registry+https://github.com/rust-lang/crates.io-index" 3481 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3482 | dependencies = [ 3483 | "windows_aarch64_gnullvm 0.52.6", 3484 | "windows_aarch64_msvc 0.52.6", 3485 | "windows_i686_gnu 0.52.6", 3486 | "windows_i686_gnullvm 0.52.6", 3487 | "windows_i686_msvc 0.52.6", 3488 | "windows_x86_64_gnu 0.52.6", 3489 | "windows_x86_64_gnullvm 0.52.6", 3490 | "windows_x86_64_msvc 0.52.6", 3491 | ] 3492 | 3493 | [[package]] 3494 | name = "windows-targets" 3495 | version = "0.53.3" 3496 | source = "registry+https://github.com/rust-lang/crates.io-index" 3497 | checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" 3498 | dependencies = [ 3499 | "windows-link", 3500 | "windows_aarch64_gnullvm 0.53.0", 3501 | "windows_aarch64_msvc 0.53.0", 3502 | "windows_i686_gnu 0.53.0", 3503 | "windows_i686_gnullvm 0.53.0", 3504 | "windows_i686_msvc 0.53.0", 3505 | "windows_x86_64_gnu 0.53.0", 3506 | "windows_x86_64_gnullvm 0.53.0", 3507 | "windows_x86_64_msvc 0.53.0", 3508 | ] 3509 | 3510 | [[package]] 3511 | name = "windows-threading" 3512 | version = "0.1.0" 3513 | source = "registry+https://github.com/rust-lang/crates.io-index" 3514 | checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 3515 | dependencies = [ 3516 | "windows-link", 3517 | ] 3518 | 3519 | [[package]] 3520 | name = "windows_aarch64_gnullvm" 3521 | version = "0.42.2" 3522 | source = "registry+https://github.com/rust-lang/crates.io-index" 3523 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 3524 | 3525 | [[package]] 3526 | name = "windows_aarch64_gnullvm" 3527 | version = "0.48.5" 3528 | source = "registry+https://github.com/rust-lang/crates.io-index" 3529 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 3530 | 3531 | [[package]] 3532 | name = "windows_aarch64_gnullvm" 3533 | version = "0.52.6" 3534 | source = "registry+https://github.com/rust-lang/crates.io-index" 3535 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3536 | 3537 | [[package]] 3538 | name = "windows_aarch64_gnullvm" 3539 | version = "0.53.0" 3540 | source = "registry+https://github.com/rust-lang/crates.io-index" 3541 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 3542 | 3543 | [[package]] 3544 | name = "windows_aarch64_msvc" 3545 | version = "0.42.2" 3546 | source = "registry+https://github.com/rust-lang/crates.io-index" 3547 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 3548 | 3549 | [[package]] 3550 | name = "windows_aarch64_msvc" 3551 | version = "0.48.5" 3552 | source = "registry+https://github.com/rust-lang/crates.io-index" 3553 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 3554 | 3555 | [[package]] 3556 | name = "windows_aarch64_msvc" 3557 | version = "0.52.6" 3558 | source = "registry+https://github.com/rust-lang/crates.io-index" 3559 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3560 | 3561 | [[package]] 3562 | name = "windows_aarch64_msvc" 3563 | version = "0.53.0" 3564 | source = "registry+https://github.com/rust-lang/crates.io-index" 3565 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 3566 | 3567 | [[package]] 3568 | name = "windows_i686_gnu" 3569 | version = "0.42.2" 3570 | source = "registry+https://github.com/rust-lang/crates.io-index" 3571 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 3572 | 3573 | [[package]] 3574 | name = "windows_i686_gnu" 3575 | version = "0.48.5" 3576 | source = "registry+https://github.com/rust-lang/crates.io-index" 3577 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 3578 | 3579 | [[package]] 3580 | name = "windows_i686_gnu" 3581 | version = "0.52.6" 3582 | source = "registry+https://github.com/rust-lang/crates.io-index" 3583 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3584 | 3585 | [[package]] 3586 | name = "windows_i686_gnu" 3587 | version = "0.53.0" 3588 | source = "registry+https://github.com/rust-lang/crates.io-index" 3589 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 3590 | 3591 | [[package]] 3592 | name = "windows_i686_gnullvm" 3593 | version = "0.52.6" 3594 | source = "registry+https://github.com/rust-lang/crates.io-index" 3595 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3596 | 3597 | [[package]] 3598 | name = "windows_i686_gnullvm" 3599 | version = "0.53.0" 3600 | source = "registry+https://github.com/rust-lang/crates.io-index" 3601 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 3602 | 3603 | [[package]] 3604 | name = "windows_i686_msvc" 3605 | version = "0.42.2" 3606 | source = "registry+https://github.com/rust-lang/crates.io-index" 3607 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 3608 | 3609 | [[package]] 3610 | name = "windows_i686_msvc" 3611 | version = "0.48.5" 3612 | source = "registry+https://github.com/rust-lang/crates.io-index" 3613 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 3614 | 3615 | [[package]] 3616 | name = "windows_i686_msvc" 3617 | version = "0.52.6" 3618 | source = "registry+https://github.com/rust-lang/crates.io-index" 3619 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3620 | 3621 | [[package]] 3622 | name = "windows_i686_msvc" 3623 | version = "0.53.0" 3624 | source = "registry+https://github.com/rust-lang/crates.io-index" 3625 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 3626 | 3627 | [[package]] 3628 | name = "windows_x86_64_gnu" 3629 | version = "0.42.2" 3630 | source = "registry+https://github.com/rust-lang/crates.io-index" 3631 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 3632 | 3633 | [[package]] 3634 | name = "windows_x86_64_gnu" 3635 | version = "0.48.5" 3636 | source = "registry+https://github.com/rust-lang/crates.io-index" 3637 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 3638 | 3639 | [[package]] 3640 | name = "windows_x86_64_gnu" 3641 | version = "0.52.6" 3642 | source = "registry+https://github.com/rust-lang/crates.io-index" 3643 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3644 | 3645 | [[package]] 3646 | name = "windows_x86_64_gnu" 3647 | version = "0.53.0" 3648 | source = "registry+https://github.com/rust-lang/crates.io-index" 3649 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 3650 | 3651 | [[package]] 3652 | name = "windows_x86_64_gnullvm" 3653 | version = "0.42.2" 3654 | source = "registry+https://github.com/rust-lang/crates.io-index" 3655 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 3656 | 3657 | [[package]] 3658 | name = "windows_x86_64_gnullvm" 3659 | version = "0.48.5" 3660 | source = "registry+https://github.com/rust-lang/crates.io-index" 3661 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 3662 | 3663 | [[package]] 3664 | name = "windows_x86_64_gnullvm" 3665 | version = "0.52.6" 3666 | source = "registry+https://github.com/rust-lang/crates.io-index" 3667 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3668 | 3669 | [[package]] 3670 | name = "windows_x86_64_gnullvm" 3671 | version = "0.53.0" 3672 | source = "registry+https://github.com/rust-lang/crates.io-index" 3673 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 3674 | 3675 | [[package]] 3676 | name = "windows_x86_64_msvc" 3677 | version = "0.42.2" 3678 | source = "registry+https://github.com/rust-lang/crates.io-index" 3679 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 3680 | 3681 | [[package]] 3682 | name = "windows_x86_64_msvc" 3683 | version = "0.48.5" 3684 | source = "registry+https://github.com/rust-lang/crates.io-index" 3685 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3686 | 3687 | [[package]] 3688 | name = "windows_x86_64_msvc" 3689 | version = "0.52.6" 3690 | source = "registry+https://github.com/rust-lang/crates.io-index" 3691 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3692 | 3693 | [[package]] 3694 | name = "windows_x86_64_msvc" 3695 | version = "0.53.0" 3696 | source = "registry+https://github.com/rust-lang/crates.io-index" 3697 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 3698 | 3699 | [[package]] 3700 | name = "winit" 3701 | version = "0.30.12" 3702 | source = "registry+https://github.com/rust-lang/crates.io-index" 3703 | checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" 3704 | dependencies = [ 3705 | "ahash", 3706 | "android-activity", 3707 | "atomic-waker", 3708 | "bitflags 2.9.3", 3709 | "block2", 3710 | "bytemuck", 3711 | "calloop", 3712 | "cfg_aliases", 3713 | "concurrent-queue", 3714 | "core-foundation 0.9.4", 3715 | "core-graphics", 3716 | "cursor-icon", 3717 | "dpi", 3718 | "js-sys", 3719 | "libc", 3720 | "memmap2", 3721 | "ndk", 3722 | "objc2 0.5.2", 3723 | "objc2-app-kit 0.2.2", 3724 | "objc2-foundation 0.2.2", 3725 | "objc2-ui-kit", 3726 | "orbclient", 3727 | "percent-encoding", 3728 | "pin-project", 3729 | "raw-window-handle", 3730 | "redox_syscall 0.4.1", 3731 | "rustix 0.38.44", 3732 | "sctk-adwaita", 3733 | "smithay-client-toolkit", 3734 | "smol_str", 3735 | "tracing", 3736 | "unicode-segmentation", 3737 | "wasm-bindgen", 3738 | "wasm-bindgen-futures", 3739 | "wayland-backend", 3740 | "wayland-client", 3741 | "wayland-protocols", 3742 | "wayland-protocols-plasma", 3743 | "web-sys", 3744 | "web-time", 3745 | "windows-sys 0.52.0", 3746 | "x11-dl", 3747 | "x11rb", 3748 | "xkbcommon-dl", 3749 | ] 3750 | 3751 | [[package]] 3752 | name = "winnow" 3753 | version = "0.7.13" 3754 | source = "registry+https://github.com/rust-lang/crates.io-index" 3755 | checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 3756 | dependencies = [ 3757 | "memchr", 3758 | ] 3759 | 3760 | [[package]] 3761 | name = "wit-bindgen-rt" 3762 | version = "0.39.0" 3763 | source = "registry+https://github.com/rust-lang/crates.io-index" 3764 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 3765 | dependencies = [ 3766 | "bitflags 2.9.3", 3767 | ] 3768 | 3769 | [[package]] 3770 | name = "writeable" 3771 | version = "0.6.1" 3772 | source = "registry+https://github.com/rust-lang/crates.io-index" 3773 | checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 3774 | 3775 | [[package]] 3776 | name = "x11-dl" 3777 | version = "2.21.0" 3778 | source = "registry+https://github.com/rust-lang/crates.io-index" 3779 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 3780 | dependencies = [ 3781 | "libc", 3782 | "once_cell", 3783 | "pkg-config", 3784 | ] 3785 | 3786 | [[package]] 3787 | name = "x11rb" 3788 | version = "0.13.1" 3789 | source = "registry+https://github.com/rust-lang/crates.io-index" 3790 | checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" 3791 | dependencies = [ 3792 | "as-raw-xcb-connection", 3793 | "gethostname", 3794 | "libc", 3795 | "libloading", 3796 | "once_cell", 3797 | "rustix 0.38.44", 3798 | "x11rb-protocol", 3799 | ] 3800 | 3801 | [[package]] 3802 | name = "x11rb-protocol" 3803 | version = "0.13.1" 3804 | source = "registry+https://github.com/rust-lang/crates.io-index" 3805 | checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" 3806 | 3807 | [[package]] 3808 | name = "xcursor" 3809 | version = "0.3.10" 3810 | source = "registry+https://github.com/rust-lang/crates.io-index" 3811 | checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" 3812 | 3813 | [[package]] 3814 | name = "xkbcommon-dl" 3815 | version = "0.4.2" 3816 | source = "registry+https://github.com/rust-lang/crates.io-index" 3817 | checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" 3818 | dependencies = [ 3819 | "bitflags 2.9.3", 3820 | "dlib", 3821 | "log", 3822 | "once_cell", 3823 | "xkeysym", 3824 | ] 3825 | 3826 | [[package]] 3827 | name = "xkeysym" 3828 | version = "0.2.1" 3829 | source = "registry+https://github.com/rust-lang/crates.io-index" 3830 | checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" 3831 | 3832 | [[package]] 3833 | name = "xml-rs" 3834 | version = "0.8.27" 3835 | source = "registry+https://github.com/rust-lang/crates.io-index" 3836 | checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" 3837 | 3838 | [[package]] 3839 | name = "yoke" 3840 | version = "0.8.0" 3841 | source = "registry+https://github.com/rust-lang/crates.io-index" 3842 | checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 3843 | dependencies = [ 3844 | "serde", 3845 | "stable_deref_trait", 3846 | "yoke-derive", 3847 | "zerofrom", 3848 | ] 3849 | 3850 | [[package]] 3851 | name = "yoke-derive" 3852 | version = "0.8.0" 3853 | source = "registry+https://github.com/rust-lang/crates.io-index" 3854 | checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 3855 | dependencies = [ 3856 | "proc-macro2", 3857 | "quote", 3858 | "syn", 3859 | "synstructure", 3860 | ] 3861 | 3862 | [[package]] 3863 | name = "zbus" 3864 | version = "5.9.0" 3865 | source = "registry+https://github.com/rust-lang/crates.io-index" 3866 | checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad" 3867 | dependencies = [ 3868 | "async-broadcast", 3869 | "async-executor", 3870 | "async-io", 3871 | "async-lock", 3872 | "async-process", 3873 | "async-recursion", 3874 | "async-task", 3875 | "async-trait", 3876 | "blocking", 3877 | "enumflags2", 3878 | "event-listener", 3879 | "futures-core", 3880 | "futures-lite", 3881 | "hex", 3882 | "nix", 3883 | "ordered-stream", 3884 | "serde", 3885 | "serde_repr", 3886 | "tracing", 3887 | "uds_windows", 3888 | "windows-sys 0.59.0", 3889 | "winnow", 3890 | "zbus_macros", 3891 | "zbus_names", 3892 | "zvariant", 3893 | ] 3894 | 3895 | [[package]] 3896 | name = "zbus-lockstep" 3897 | version = "0.5.1" 3898 | source = "registry+https://github.com/rust-lang/crates.io-index" 3899 | checksum = "29e96e38ded30eeab90b6ba88cb888d70aef4e7489b6cd212c5e5b5ec38045b6" 3900 | dependencies = [ 3901 | "zbus_xml", 3902 | "zvariant", 3903 | ] 3904 | 3905 | [[package]] 3906 | name = "zbus-lockstep-macros" 3907 | version = "0.5.1" 3908 | source = "registry+https://github.com/rust-lang/crates.io-index" 3909 | checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836" 3910 | dependencies = [ 3911 | "proc-macro2", 3912 | "quote", 3913 | "syn", 3914 | "zbus-lockstep", 3915 | "zbus_xml", 3916 | "zvariant", 3917 | ] 3918 | 3919 | [[package]] 3920 | name = "zbus_macros" 3921 | version = "5.9.0" 3922 | source = "registry+https://github.com/rust-lang/crates.io-index" 3923 | checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659" 3924 | dependencies = [ 3925 | "proc-macro-crate", 3926 | "proc-macro2", 3927 | "quote", 3928 | "syn", 3929 | "zbus_names", 3930 | "zvariant", 3931 | "zvariant_utils", 3932 | ] 3933 | 3934 | [[package]] 3935 | name = "zbus_names" 3936 | version = "4.2.0" 3937 | source = "registry+https://github.com/rust-lang/crates.io-index" 3938 | checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" 3939 | dependencies = [ 3940 | "serde", 3941 | "static_assertions", 3942 | "winnow", 3943 | "zvariant", 3944 | ] 3945 | 3946 | [[package]] 3947 | name = "zbus_xml" 3948 | version = "5.0.2" 3949 | source = "registry+https://github.com/rust-lang/crates.io-index" 3950 | checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29" 3951 | dependencies = [ 3952 | "quick-xml 0.36.2", 3953 | "serde", 3954 | "static_assertions", 3955 | "zbus_names", 3956 | "zvariant", 3957 | ] 3958 | 3959 | [[package]] 3960 | name = "zerocopy" 3961 | version = "0.8.26" 3962 | source = "registry+https://github.com/rust-lang/crates.io-index" 3963 | checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" 3964 | dependencies = [ 3965 | "zerocopy-derive", 3966 | ] 3967 | 3968 | [[package]] 3969 | name = "zerocopy-derive" 3970 | version = "0.8.26" 3971 | source = "registry+https://github.com/rust-lang/crates.io-index" 3972 | checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" 3973 | dependencies = [ 3974 | "proc-macro2", 3975 | "quote", 3976 | "syn", 3977 | ] 3978 | 3979 | [[package]] 3980 | name = "zerofrom" 3981 | version = "0.1.6" 3982 | source = "registry+https://github.com/rust-lang/crates.io-index" 3983 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 3984 | dependencies = [ 3985 | "zerofrom-derive", 3986 | ] 3987 | 3988 | [[package]] 3989 | name = "zerofrom-derive" 3990 | version = "0.1.6" 3991 | source = "registry+https://github.com/rust-lang/crates.io-index" 3992 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 3993 | dependencies = [ 3994 | "proc-macro2", 3995 | "quote", 3996 | "syn", 3997 | "synstructure", 3998 | ] 3999 | 4000 | [[package]] 4001 | name = "zerotrie" 4002 | version = "0.2.2" 4003 | source = "registry+https://github.com/rust-lang/crates.io-index" 4004 | checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 4005 | dependencies = [ 4006 | "displaydoc", 4007 | "yoke", 4008 | "zerofrom", 4009 | ] 4010 | 4011 | [[package]] 4012 | name = "zerovec" 4013 | version = "0.11.4" 4014 | source = "registry+https://github.com/rust-lang/crates.io-index" 4015 | checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" 4016 | dependencies = [ 4017 | "yoke", 4018 | "zerofrom", 4019 | "zerovec-derive", 4020 | ] 4021 | 4022 | [[package]] 4023 | name = "zerovec-derive" 4024 | version = "0.11.1" 4025 | source = "registry+https://github.com/rust-lang/crates.io-index" 4026 | checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 4027 | dependencies = [ 4028 | "proc-macro2", 4029 | "quote", 4030 | "syn", 4031 | ] 4032 | 4033 | [[package]] 4034 | name = "zvariant" 4035 | version = "5.6.0" 4036 | source = "registry+https://github.com/rust-lang/crates.io-index" 4037 | checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" 4038 | dependencies = [ 4039 | "endi", 4040 | "enumflags2", 4041 | "serde", 4042 | "winnow", 4043 | "zvariant_derive", 4044 | "zvariant_utils", 4045 | ] 4046 | 4047 | [[package]] 4048 | name = "zvariant_derive" 4049 | version = "5.6.0" 4050 | source = "registry+https://github.com/rust-lang/crates.io-index" 4051 | checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" 4052 | dependencies = [ 4053 | "proc-macro-crate", 4054 | "proc-macro2", 4055 | "quote", 4056 | "syn", 4057 | "zvariant_utils", 4058 | ] 4059 | 4060 | [[package]] 4061 | name = "zvariant_utils" 4062 | version = "3.2.0" 4063 | source = "registry+https://github.com/rust-lang/crates.io-index" 4064 | checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" 4065 | dependencies = [ 4066 | "proc-macro2", 4067 | "quote", 4068 | "serde", 4069 | "static_assertions", 4070 | "syn", 4071 | "winnow", 4072 | ] 4073 | --------------------------------------------------------------------------------