├── .gitignore ├── rustfmt.toml ├── src ├── main.rs ├── compressor.rs ├── streaming.rs └── gui.rs ├── Cargo.toml ├── LICENSE ├── README.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | tab_spaces = 2 -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // Hide console window on Windows in release mode 2 | 3 | mod compressor; 4 | mod gui; 5 | mod streaming; 6 | 7 | fn main() { 8 | gui::run(); 9 | } 10 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "audio-limiter" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | eframe = "0.18" 8 | cpal = "0.13" 9 | ringbuf = "0.2" 10 | atomic_float = "0.1" 11 | 12 | [profile.release] 13 | strip = true 14 | lto = true 15 | codegen-units = 1 16 | panic = "abort" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 dylagit 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/compressor.rs: -------------------------------------------------------------------------------- 1 | #[derive(Copy, Clone, Debug)] 2 | pub struct Compressor { 3 | pub peak_at: f32, 4 | pub peak_rt: f32, 5 | pub peak_average: f32, 6 | 7 | pub gain_at: f32, 8 | pub gain_rt: f32, 9 | pub gain_average: f32, 10 | 11 | pub threshold: f32, 12 | } 13 | 14 | fn calc_tau(sample_rate: f32, time_ms: f32) -> f32 { 15 | 1.0 - (-2200.0 / (time_ms * sample_rate)).exp() 16 | } 17 | 18 | fn limiter(input: f32, threshold: f32) -> f32 { 19 | let db = 20.0 * input.abs().log10(); 20 | let gain = (threshold - db).min(0.0); 21 | 10.0f32.powf(0.05 * gain) 22 | } 23 | 24 | fn ar_avg(avg: f32, at: f32, rt: f32, input: f32) -> f32 { 25 | let tau = if input > avg { at } else { rt }; 26 | 27 | (1.0 - tau).mul_add(avg, tau * input) 28 | } 29 | 30 | impl Compressor { 31 | pub fn compress(&mut self, input: f32) -> f32 { 32 | self.peak_average = ar_avg(self.peak_average, self.peak_at, self.peak_rt, input.abs()); 33 | 34 | let gain = limiter(self.peak_average, self.threshold); 35 | 36 | self.gain_average = ar_avg(self.gain_average, self.gain_rt, self.gain_at, gain); 37 | 38 | self.gain_average * input 39 | } 40 | 41 | pub fn new(sample_rate: f32, threshold: f32, attack_ms: f32, release_ms: f32) -> Self { 42 | Self { 43 | peak_at: calc_tau(sample_rate, 0.01), 44 | peak_rt: calc_tau(sample_rate, 10.0), 45 | peak_average: 0.0, 46 | gain_at: calc_tau(sample_rate, attack_ms), 47 | gain_rt: calc_tau(sample_rate, release_ms), 48 | gain_average: 1.0, 49 | threshold, 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/streaming.rs: -------------------------------------------------------------------------------- 1 | use cpal::{ 2 | traits::{DeviceTrait, HostTrait, StreamTrait}, 3 | Device, Stream, 4 | }; 5 | use std::sync::atomic::Ordering; 6 | 7 | use crate::{ 8 | compressor::Compressor, 9 | gui::{CURR_THRESHOLD, DEFAULT_ATTACK, DEFAULT_RELEASE}, 10 | }; 11 | 12 | pub fn get_devices() -> Vec { 13 | cpal::default_host() 14 | .devices() 15 | .expect("Could not find devices") 16 | .collect() 17 | } 18 | 19 | pub fn create_stream( 20 | input_device: &Device, 21 | output_device: &Device, 22 | threshold: f32, 23 | ) -> Option<(Stream, Stream)> { 24 | let input_config: cpal::StreamConfig = input_device.default_input_config().ok()?.into(); 25 | let output_config: cpal::StreamConfig = output_device.default_output_config().ok()?.into(); 26 | 27 | let mut comp = Compressor::new( 28 | input_config.sample_rate.0 as f32, 29 | threshold, 30 | DEFAULT_ATTACK, 31 | DEFAULT_RELEASE, 32 | ); 33 | 34 | let err_fn = |err| eprintln!("An error occurred on the output audio stream: {}", err); 35 | 36 | let latency = 100.0; 37 | let latency_frames = (latency / 1000.0) * input_config.sample_rate.0 as f32; 38 | let latency_samples = latency_frames as usize * input_config.channels as usize; 39 | 40 | let ring = ringbuf::RingBuffer::new(latency_samples * 2); 41 | let (mut producer, mut consumer) = ring.split(); 42 | 43 | for _ in 0..latency_samples { 44 | producer.push(0.0).unwrap(); // The ring buffer has twice as much space as necessary to add latency here, so this should never fail 45 | } 46 | 47 | let input_data_fn = move |data: &[f32], _: &cpal::InputCallbackInfo| { 48 | comp.threshold = CURR_THRESHOLD.load(Ordering::SeqCst); 49 | 50 | for &sample in data { 51 | let compressed = comp.compress(sample); 52 | 53 | if producer.push(compressed).is_err() { 54 | // eprintln!("Output stream fell behind: try increasing latency"); 55 | } 56 | } 57 | }; 58 | 59 | let output_data_fn = move |data: &mut [f32], _: &cpal::OutputCallbackInfo| { 60 | for sample in data { 61 | *sample = consumer.pop().unwrap_or(0.0); 62 | } 63 | }; 64 | 65 | let input_stream = input_device 66 | .build_input_stream(&input_config, input_data_fn, err_fn) 67 | .expect("Error building input stream"); 68 | let output_stream = output_device 69 | .build_output_stream(&output_config, output_data_fn, err_fn) 70 | .expect("Error building output stream"); 71 | 72 | input_stream.play().expect("Could not play input stream"); 73 | output_stream.play().expect("Could not play output stream"); 74 | 75 | Some((input_stream, output_stream)) 76 | } 77 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Motivation 2 | 3 | Sometimes when watching videos or streams on my computer there is a sudden noise which is very loud and painful. 4 | 5 | In addition, sometimes I am on a voice call with friends and _we_ are loud. 6 | 7 | I wanted a way to be able to lower these loud sounds a bit. That is, I wished for a way to either lower my own microphone's peaks, or to lower all peaks that I hear through my earbuds. 8 | 9 | I searched online and didn't find much. Voicemeeter Banana was probably the best one, but it's a very large and complex program with an overwhelming user interface. I also had trouble getting it working and was experiencing issues with static. I just wanted something simpler. 10 | 11 | # Description 12 | 13 | This program can hopefully be that. The intention is for the interface to be extremely boring. Simply select your input device, output device, and threshold, and hit start. That's it. Then all sound piped through the input device will be limited (according to the threshold) and sent to the output device. 14 | 15 | # Compiling From Source 16 | 17 | Install Rust if you don't have it already and then clone the repository and run `cargo run` in the root folder. 18 | 19 | # Setup 20 | 21 | If you don't have a virtual audio cable to pipe audio through already, then you'll probably need to download one. 22 | 23 | [This one](https://vb-audio.com/Cable/) works fine for me and is the one I'm currently using. So I'd recommend downloading that. 24 | 25 | Then, you want to make sure all your sample rates match (otherwise they'll become out of sync and start dropping audio). For example, if you plan to use the program with your microphone and computer sound, then go to your Sound Settings on your computer, select all the relevant sound devices, and go to their properties, and make sure all the sample rates match up. 26 | 27 | I personally made all of my devices 16 bit, 48000 Hz like this: 28 | 29 | ![Audio Device Setup](https://i.imgur.com/AfUgm2X.png) 30 | 31 | # Using The Program 32 | 33 | Let's say you wanted to limit all incoming sound on your computer. Here's how you would do that: 34 | 35 | First, change your playback device on your computer from your speakers / headphones to `Cable Input`: 36 | 37 | ![Playback Devices](https://i.imgur.com/2Wqvc9H.png) 38 | 39 | Then, run `audio-limiter.exe`. If you're on Windows you can download a [binary here](https://github.com/dylagit/audio-limiter/releases). If you're on another platform, follow the `Compiling From Source` instructions above. When you open the program, it should look something like this: 40 | 41 | ![Audio Limiter](https://i.imgur.com/hPTh2bw.png) 42 | 43 | Next, you'll want to change the `Input Device` to `Cable Output`. 44 | 45 | Then, you'll want to change the `Output Device` to your speakers / headphones. Then click Start. If it works, the `Start` button's text should change to `Stop`. If it didn't, then something went wrong. It should now look like this: 46 | 47 | ![Audio Limiter Settings](https://i.imgur.com/ECPy4fH.png) 48 | 49 | Now start listening to music / videos / whatever, and adjust the `Threshold` until it all sounds normal. Now, if a loud sound occurs, its magnitude should be blunted. 50 | 51 | # Disclaimer 52 | 53 | I have no idea what I'm doing. The main reason why I made this open-source with a detailed tutorial is that I'm hoping someone who _does_ know what they're doing comes along and either suggestions improvements, or ideally just submits a pull request and improves things. 54 | 55 | As it stands, I'm still brand new to Rust, have no education whatsoever with regard to digital audio processing, and only started learning about making user interfaces in Rust yesterday. 56 | 57 | That is, this program barely works, if at all. I would love for it to be much better, so I am extremely receptive to any proposed changes. 58 | 59 | I would love if there was a way for the program to automatically determine the threshold instead of having to adjust it all the time, but I'm not sure how to do that, or if it's even possible. In addition, it might be nice to have some additional parameters for how blunted the sound should become, and things of that nature. But, as stated, I'm a complete noob, so I'll need a lot of help if you would like those features as well. -------------------------------------------------------------------------------- /src/gui.rs: -------------------------------------------------------------------------------- 1 | use atomic_float::AtomicF32; 2 | use cpal::Stream; 3 | use cpal::{traits::DeviceTrait, Device}; 4 | use eframe::egui::{self, InnerResponse, Layout, Ui}; 5 | use eframe::emath::Align; 6 | use std::sync::atomic::Ordering; 7 | 8 | use crate::streaming::{create_stream, get_devices}; 9 | 10 | pub const DEFAULT_THRESHOLD: f32 = -20.0; 11 | pub const DEFAULT_ATTACK: f32 = 25.0; 12 | pub const DEFAULT_RELEASE: f32 = 50.0; 13 | 14 | pub static CURR_THRESHOLD: AtomicF32 = AtomicF32::new(DEFAULT_THRESHOLD); 15 | 16 | struct AppData { 17 | devices: Vec, 18 | input_device_idx: Option, 19 | output_device_idx: Option, 20 | threshold: f32, 21 | running: bool, 22 | input_stream: Option, 23 | output_stream: Option, 24 | } 25 | 26 | fn get_device_name(devices: &[Device], idx: Option) -> String { 27 | idx.map_or_else( 28 | || "No Device Selected".to_string(), 29 | |idx| { 30 | devices[idx] 31 | .name() 32 | .unwrap_or_else(|_| "Unknown Device".to_string()) 33 | }, 34 | ) 35 | } 36 | 37 | fn create_combo_box( 38 | ui: &mut Ui, 39 | label: &'static str, 40 | devices: &[Device], 41 | device_idx: &mut Option, 42 | ) -> InnerResponse> { 43 | let device_name = get_device_name(devices, *device_idx); 44 | 45 | ui.label(label); 46 | 47 | let combo = egui::ComboBox::from_id_source(label) 48 | .width(ui.available_width() - 7.0) 49 | .selected_text(device_name) 50 | .show_ui(ui, |ui| { 51 | for (i, d) in devices.iter().enumerate() { 52 | let device_name = d.name().unwrap_or_else(|_| "Unknown Device".to_string()); 53 | 54 | ui.selectable_value(device_idx, Some(i), device_name); 55 | } 56 | }); 57 | 58 | ui.end_row(); 59 | 60 | combo 61 | } 62 | 63 | impl AppData { 64 | fn start_stream(&mut self) -> Option { 65 | let input_device_idx = self.input_device_idx?; 66 | let output_device_idx = self.output_device_idx?; 67 | 68 | let input_device = &self.devices[input_device_idx]; 69 | let output_device = &self.devices[output_device_idx]; 70 | 71 | let streams = create_stream(input_device, output_device, self.threshold)?; 72 | 73 | self.input_stream = Some(streams.0); 74 | self.output_stream = Some(streams.1); 75 | 76 | Some(true) 77 | } 78 | 79 | fn draw_start_stop_button(&mut self, ui: &mut Ui) { 80 | let button_text = if self.running { "Stop" } else { "Start" }; 81 | 82 | if ui.button(button_text).clicked() { 83 | if self.running { 84 | self.input_stream = None; 85 | self.output_stream = None; 86 | 87 | self.running = false; 88 | } else { 89 | self.running = self.start_stream().unwrap_or(false); 90 | } 91 | } 92 | 93 | if self.running { 94 | CURR_THRESHOLD.store(self.threshold, Ordering::SeqCst); 95 | } 96 | } 97 | 98 | fn draw_interface(&mut self, ui: &mut Ui) { 99 | create_combo_box( 100 | ui, 101 | "Input Device", 102 | &self.devices, 103 | &mut self.input_device_idx, 104 | ); 105 | create_combo_box( 106 | ui, 107 | "Output Device", 108 | &self.devices, 109 | &mut self.output_device_idx, 110 | ); 111 | 112 | ui.label("Threshold"); 113 | ui.add(egui::Slider::new(&mut self.threshold, -200.0..=0.0).max_decimals(0)); 114 | ui.end_row(); 115 | if ui.button("🔄 Refresh devices").clicked() { 116 | self.devices = get_devices(); 117 | } 118 | } 119 | } 120 | 121 | impl eframe::App for AppData { 122 | fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { 123 | egui::CentralPanel::default().show(ctx, |ui| { 124 | ui.spacing_mut().slider_width = ui.available_width() - 138.0; 125 | 126 | ui.with_layout(Layout::top_down_justified(Align::default()), |ui| { 127 | egui::Grid::new("app_grid") 128 | .num_columns(2) 129 | .spacing([10.0, 10.0]) 130 | .show(ui, |ui| { 131 | self.draw_interface(ui); 132 | 133 | ui.label(""); 134 | ui.with_layout(Layout::right_to_left(), |ui| { 135 | self.draw_start_stop_button(ui); 136 | }); 137 | }); 138 | }); 139 | }); 140 | } 141 | } 142 | 143 | pub fn run() { 144 | let options = eframe::NativeOptions::default(); 145 | 146 | eframe::run_native( 147 | "Audio Limiter", 148 | options, 149 | Box::new(|cc| { 150 | cc.egui_ctx.set_pixels_per_point(2.0); 151 | 152 | let app_data = AppData { 153 | devices: get_devices(), 154 | input_device_idx: None, 155 | output_device_idx: None, 156 | threshold: DEFAULT_THRESHOLD, 157 | running: false, 158 | input_stream: None, 159 | output_stream: None, 160 | }; 161 | 162 | Box::new(app_data) 163 | }), 164 | ); 165 | } 166 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "ab_glyph" 7 | version = "0.2.15" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c" 10 | dependencies = [ 11 | "ab_glyph_rasterizer", 12 | "owned_ttf_parser", 13 | ] 14 | 15 | [[package]] 16 | name = "ab_glyph_rasterizer" 17 | version = "0.1.5" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" 20 | 21 | [[package]] 22 | name = "ahash" 23 | version = "0.7.6" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 26 | dependencies = [ 27 | "getrandom", 28 | "once_cell", 29 | "version_check", 30 | ] 31 | 32 | [[package]] 33 | name = "alsa" 34 | version = "0.6.0" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "5915f52fe2cf65e83924d037b6c5290b7cee097c6b5c8700746e6168a343fd6b" 37 | dependencies = [ 38 | "alsa-sys", 39 | "bitflags", 40 | "libc", 41 | "nix 0.23.1", 42 | ] 43 | 44 | [[package]] 45 | name = "alsa-sys" 46 | version = "0.3.1" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" 49 | dependencies = [ 50 | "libc", 51 | "pkg-config", 52 | ] 53 | 54 | [[package]] 55 | name = "android_glue" 56 | version = "0.2.3" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" 59 | 60 | [[package]] 61 | name = "arboard" 62 | version = "2.1.1" 63 | source = "registry+https://github.com/rust-lang/crates.io-index" 64 | checksum = "dc120354d1b5ec6d7aaf4876b602def75595937b5e15d356eb554ab5177e08bb" 65 | dependencies = [ 66 | "clipboard-win", 67 | "log", 68 | "objc", 69 | "objc-foundation", 70 | "objc_id", 71 | "parking_lot 0.12.0", 72 | "thiserror", 73 | "winapi", 74 | "x11rb", 75 | ] 76 | 77 | [[package]] 78 | name = "atomic_float" 79 | version = "0.1.0" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "62af46d040ba9df09edc6528dae9d8e49f5f3e82f55b7d2ec31a733c38dbc49d" 82 | 83 | [[package]] 84 | name = "atomic_refcell" 85 | version = "0.1.8" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "73b5e5f48b927f04e952dedc932f31995a65a0bf65ec971c74436e51bf6e970d" 88 | 89 | [[package]] 90 | name = "audio-limiter" 91 | version = "0.1.0" 92 | dependencies = [ 93 | "atomic_float", 94 | "cpal", 95 | "eframe", 96 | "ringbuf", 97 | ] 98 | 99 | [[package]] 100 | name = "autocfg" 101 | version = "1.1.0" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 104 | 105 | [[package]] 106 | name = "bindgen" 107 | version = "0.59.2" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" 110 | dependencies = [ 111 | "bitflags", 112 | "cexpr", 113 | "clang-sys", 114 | "lazy_static", 115 | "lazycell", 116 | "peeking_take_while", 117 | "proc-macro2", 118 | "quote", 119 | "regex", 120 | "rustc-hash", 121 | "shlex", 122 | ] 123 | 124 | [[package]] 125 | name = "bitflags" 126 | version = "1.3.2" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 129 | 130 | [[package]] 131 | name = "block" 132 | version = "0.1.6" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 135 | 136 | [[package]] 137 | name = "bumpalo" 138 | version = "3.9.1" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" 141 | 142 | [[package]] 143 | name = "bytemuck" 144 | version = "1.9.1" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc" 147 | dependencies = [ 148 | "bytemuck_derive", 149 | ] 150 | 151 | [[package]] 152 | name = "bytemuck_derive" 153 | version = "1.1.0" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e" 156 | dependencies = [ 157 | "proc-macro2", 158 | "quote", 159 | "syn", 160 | ] 161 | 162 | [[package]] 163 | name = "bytes" 164 | version = "1.1.0" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" 167 | 168 | [[package]] 169 | name = "cache-padded" 170 | version = "1.2.0" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" 173 | 174 | [[package]] 175 | name = "calloop" 176 | version = "0.9.3" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82" 179 | dependencies = [ 180 | "log", 181 | "nix 0.22.3", 182 | ] 183 | 184 | [[package]] 185 | name = "cc" 186 | version = "1.0.73" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 189 | dependencies = [ 190 | "jobserver", 191 | ] 192 | 193 | [[package]] 194 | name = "cesu8" 195 | version = "1.1.0" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 198 | 199 | [[package]] 200 | name = "cexpr" 201 | version = "0.6.0" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 204 | dependencies = [ 205 | "nom", 206 | ] 207 | 208 | [[package]] 209 | name = "cfg-if" 210 | version = "0.1.10" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 213 | 214 | [[package]] 215 | name = "cfg-if" 216 | version = "1.0.0" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 219 | 220 | [[package]] 221 | name = "cgl" 222 | version = "0.3.2" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" 225 | dependencies = [ 226 | "libc", 227 | ] 228 | 229 | [[package]] 230 | name = "clang-sys" 231 | version = "1.3.2" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | checksum = "bf6b561dcf059c85bbe388e0a7b0a1469acb3934cc0cfa148613a830629e3049" 234 | dependencies = [ 235 | "glob", 236 | "libc", 237 | "libloading", 238 | ] 239 | 240 | [[package]] 241 | name = "clipboard-win" 242 | version = "4.4.1" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "2f3e1238132dc01f081e1cbb9dace14e5ef4c3a51ee244bd982275fb514605db" 245 | dependencies = [ 246 | "error-code", 247 | "str-buf", 248 | "winapi", 249 | ] 250 | 251 | [[package]] 252 | name = "cocoa" 253 | version = "0.24.0" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" 256 | dependencies = [ 257 | "bitflags", 258 | "block", 259 | "cocoa-foundation", 260 | "core-foundation 0.9.3", 261 | "core-graphics 0.22.3", 262 | "foreign-types", 263 | "libc", 264 | "objc", 265 | ] 266 | 267 | [[package]] 268 | name = "cocoa-foundation" 269 | version = "0.1.0" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" 272 | dependencies = [ 273 | "bitflags", 274 | "block", 275 | "core-foundation 0.9.3", 276 | "core-graphics-types", 277 | "foreign-types", 278 | "libc", 279 | "objc", 280 | ] 281 | 282 | [[package]] 283 | name = "combine" 284 | version = "4.6.4" 285 | source = "registry+https://github.com/rust-lang/crates.io-index" 286 | checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948" 287 | dependencies = [ 288 | "bytes", 289 | "memchr", 290 | ] 291 | 292 | [[package]] 293 | name = "core-foundation" 294 | version = "0.7.0" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" 297 | dependencies = [ 298 | "core-foundation-sys 0.7.0", 299 | "libc", 300 | ] 301 | 302 | [[package]] 303 | name = "core-foundation" 304 | version = "0.9.3" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 307 | dependencies = [ 308 | "core-foundation-sys 0.8.3", 309 | "libc", 310 | ] 311 | 312 | [[package]] 313 | name = "core-foundation-sys" 314 | version = "0.7.0" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" 317 | 318 | [[package]] 319 | name = "core-foundation-sys" 320 | version = "0.8.3" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 323 | 324 | [[package]] 325 | name = "core-graphics" 326 | version = "0.19.2" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" 329 | dependencies = [ 330 | "bitflags", 331 | "core-foundation 0.7.0", 332 | "foreign-types", 333 | "libc", 334 | ] 335 | 336 | [[package]] 337 | name = "core-graphics" 338 | version = "0.22.3" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" 341 | dependencies = [ 342 | "bitflags", 343 | "core-foundation 0.9.3", 344 | "core-graphics-types", 345 | "foreign-types", 346 | "libc", 347 | ] 348 | 349 | [[package]] 350 | name = "core-graphics-types" 351 | version = "0.1.1" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" 354 | dependencies = [ 355 | "bitflags", 356 | "core-foundation 0.9.3", 357 | "foreign-types", 358 | "libc", 359 | ] 360 | 361 | [[package]] 362 | name = "core-video-sys" 363 | version = "0.1.4" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" 366 | dependencies = [ 367 | "cfg-if 0.1.10", 368 | "core-foundation-sys 0.7.0", 369 | "core-graphics 0.19.2", 370 | "libc", 371 | "objc", 372 | ] 373 | 374 | [[package]] 375 | name = "coreaudio-rs" 376 | version = "0.10.0" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "11894b20ebfe1ff903cbdc52259693389eea03b94918a2def2c30c3bf227ad88" 379 | dependencies = [ 380 | "bitflags", 381 | "coreaudio-sys", 382 | ] 383 | 384 | [[package]] 385 | name = "coreaudio-sys" 386 | version = "0.2.10" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "3dff444d80630d7073077d38d40b4501fd518bd2b922c2a55edcc8b0f7be57e6" 389 | dependencies = [ 390 | "bindgen", 391 | ] 392 | 393 | [[package]] 394 | name = "cpal" 395 | version = "0.13.5" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "74117836a5124f3629e4b474eed03e479abaf98988b4bb317e29f08cfe0e4116" 398 | dependencies = [ 399 | "alsa", 400 | "core-foundation-sys 0.8.3", 401 | "coreaudio-rs", 402 | "jni", 403 | "js-sys", 404 | "lazy_static", 405 | "libc", 406 | "mach", 407 | "ndk 0.6.0", 408 | "ndk-glue 0.6.2", 409 | "nix 0.23.1", 410 | "oboe", 411 | "parking_lot 0.11.2", 412 | "stdweb", 413 | "thiserror", 414 | "web-sys", 415 | "winapi", 416 | ] 417 | 418 | [[package]] 419 | name = "cty" 420 | version = "0.2.2" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" 423 | 424 | [[package]] 425 | name = "darling" 426 | version = "0.13.4" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" 429 | dependencies = [ 430 | "darling_core", 431 | "darling_macro", 432 | ] 433 | 434 | [[package]] 435 | name = "darling_core" 436 | version = "0.13.4" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" 439 | dependencies = [ 440 | "fnv", 441 | "ident_case", 442 | "proc-macro2", 443 | "quote", 444 | "strsim", 445 | "syn", 446 | ] 447 | 448 | [[package]] 449 | name = "darling_macro" 450 | version = "0.13.4" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" 453 | dependencies = [ 454 | "darling_core", 455 | "quote", 456 | "syn", 457 | ] 458 | 459 | [[package]] 460 | name = "dispatch" 461 | version = "0.2.0" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 464 | 465 | [[package]] 466 | name = "dlib" 467 | version = "0.5.0" 468 | source = "registry+https://github.com/rust-lang/crates.io-index" 469 | checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" 470 | dependencies = [ 471 | "libloading", 472 | ] 473 | 474 | [[package]] 475 | name = "downcast-rs" 476 | version = "1.2.0" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" 479 | 480 | [[package]] 481 | name = "eframe" 482 | version = "0.18.0" 483 | source = "registry+https://github.com/rust-lang/crates.io-index" 484 | checksum = "53fa97a8188c36261ea162e625dbb23599f67b60777b462b834fe38161b81dce" 485 | dependencies = [ 486 | "bytemuck", 487 | "egui", 488 | "egui-winit", 489 | "egui_glow", 490 | "glow", 491 | "glutin", 492 | "js-sys", 493 | "percent-encoding", 494 | "tracing", 495 | "wasm-bindgen", 496 | "wasm-bindgen-futures", 497 | "web-sys", 498 | "winit", 499 | ] 500 | 501 | [[package]] 502 | name = "egui" 503 | version = "0.18.1" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "eb095a8b9feb9b7ff8f00b6776dffcef059538a3f4a91238e03c900e9c9ad9a2" 506 | dependencies = [ 507 | "ahash", 508 | "epaint", 509 | "nohash-hasher", 510 | "tracing", 511 | ] 512 | 513 | [[package]] 514 | name = "egui-winit" 515 | version = "0.18.0" 516 | source = "registry+https://github.com/rust-lang/crates.io-index" 517 | checksum = "b040afd583fd95a9b9578d4399214a13d948ed26bc0ff7cc0104502501f34e68" 518 | dependencies = [ 519 | "arboard", 520 | "egui", 521 | "instant", 522 | "tracing", 523 | "webbrowser", 524 | "winit", 525 | ] 526 | 527 | [[package]] 528 | name = "egui_glow" 529 | version = "0.18.1" 530 | source = "registry+https://github.com/rust-lang/crates.io-index" 531 | checksum = "af43ed7ec7199907ab5853c3bb3883ae1e741ab540aa127a798a60b7bdb906f1" 532 | dependencies = [ 533 | "bytemuck", 534 | "egui", 535 | "glow", 536 | "memoffset", 537 | "tracing", 538 | "wasm-bindgen", 539 | "web-sys", 540 | ] 541 | 542 | [[package]] 543 | name = "emath" 544 | version = "0.18.0" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "c223f58c7e38abe1770f367b969f1b3fbd4704b67666bcb65dbb1adb0980ba72" 547 | dependencies = [ 548 | "bytemuck", 549 | ] 550 | 551 | [[package]] 552 | name = "epaint" 553 | version = "0.18.1" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "0c29567088888e8ac3e8f61bbb2ddc820207ebb8d69eefde5bcefa06d65e4e89" 556 | dependencies = [ 557 | "ab_glyph", 558 | "ahash", 559 | "atomic_refcell", 560 | "bytemuck", 561 | "emath", 562 | "nohash-hasher", 563 | "parking_lot 0.12.0", 564 | ] 565 | 566 | [[package]] 567 | name = "error-code" 568 | version = "2.3.1" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" 571 | dependencies = [ 572 | "libc", 573 | "str-buf", 574 | ] 575 | 576 | [[package]] 577 | name = "fnv" 578 | version = "1.0.7" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 581 | 582 | [[package]] 583 | name = "foreign-types" 584 | version = "0.3.2" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 587 | dependencies = [ 588 | "foreign-types-shared", 589 | ] 590 | 591 | [[package]] 592 | name = "foreign-types-shared" 593 | version = "0.1.1" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 596 | 597 | [[package]] 598 | name = "form_urlencoded" 599 | version = "1.0.1" 600 | source = "registry+https://github.com/rust-lang/crates.io-index" 601 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 602 | dependencies = [ 603 | "matches", 604 | "percent-encoding", 605 | ] 606 | 607 | [[package]] 608 | name = "gethostname" 609 | version = "0.2.3" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" 612 | dependencies = [ 613 | "libc", 614 | "winapi", 615 | ] 616 | 617 | [[package]] 618 | name = "getrandom" 619 | version = "0.2.6" 620 | source = "registry+https://github.com/rust-lang/crates.io-index" 621 | checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" 622 | dependencies = [ 623 | "cfg-if 1.0.0", 624 | "libc", 625 | "wasi 0.10.2+wasi-snapshot-preview1", 626 | ] 627 | 628 | [[package]] 629 | name = "gl_generator" 630 | version = "0.14.0" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 633 | dependencies = [ 634 | "khronos_api", 635 | "log", 636 | "xml-rs", 637 | ] 638 | 639 | [[package]] 640 | name = "glob" 641 | version = "0.3.0" 642 | source = "registry+https://github.com/rust-lang/crates.io-index" 643 | checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" 644 | 645 | [[package]] 646 | name = "glow" 647 | version = "0.11.2" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" 650 | dependencies = [ 651 | "js-sys", 652 | "slotmap", 653 | "wasm-bindgen", 654 | "web-sys", 655 | ] 656 | 657 | [[package]] 658 | name = "glutin" 659 | version = "0.28.0" 660 | source = "registry+https://github.com/rust-lang/crates.io-index" 661 | checksum = "00ea9dbe544bc8a657c4c4a798c2d16cd01b549820e47657297549d28371f6d2" 662 | dependencies = [ 663 | "android_glue", 664 | "cgl", 665 | "cocoa", 666 | "core-foundation 0.9.3", 667 | "glutin_egl_sys", 668 | "glutin_emscripten_sys", 669 | "glutin_gles2_sys", 670 | "glutin_glx_sys", 671 | "glutin_wgl_sys", 672 | "lazy_static", 673 | "libloading", 674 | "log", 675 | "objc", 676 | "osmesa-sys", 677 | "parking_lot 0.11.2", 678 | "wayland-client", 679 | "wayland-egl", 680 | "winapi", 681 | "winit", 682 | ] 683 | 684 | [[package]] 685 | name = "glutin_egl_sys" 686 | version = "0.1.5" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" 689 | dependencies = [ 690 | "gl_generator", 691 | "winapi", 692 | ] 693 | 694 | [[package]] 695 | name = "glutin_emscripten_sys" 696 | version = "0.1.1" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" 699 | 700 | [[package]] 701 | name = "glutin_gles2_sys" 702 | version = "0.1.5" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" 705 | dependencies = [ 706 | "gl_generator", 707 | "objc", 708 | ] 709 | 710 | [[package]] 711 | name = "glutin_glx_sys" 712 | version = "0.1.7" 713 | source = "registry+https://github.com/rust-lang/crates.io-index" 714 | checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351" 715 | dependencies = [ 716 | "gl_generator", 717 | "x11-dl", 718 | ] 719 | 720 | [[package]] 721 | name = "glutin_wgl_sys" 722 | version = "0.1.5" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" 725 | dependencies = [ 726 | "gl_generator", 727 | ] 728 | 729 | [[package]] 730 | name = "ident_case" 731 | version = "1.0.1" 732 | source = "registry+https://github.com/rust-lang/crates.io-index" 733 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 734 | 735 | [[package]] 736 | name = "idna" 737 | version = "0.2.3" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" 740 | dependencies = [ 741 | "matches", 742 | "unicode-bidi", 743 | "unicode-normalization", 744 | ] 745 | 746 | [[package]] 747 | name = "instant" 748 | version = "0.1.12" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 751 | dependencies = [ 752 | "cfg-if 1.0.0", 753 | "js-sys", 754 | "wasm-bindgen", 755 | "web-sys", 756 | ] 757 | 758 | [[package]] 759 | name = "jni" 760 | version = "0.19.0" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" 763 | dependencies = [ 764 | "cesu8", 765 | "combine", 766 | "jni-sys", 767 | "log", 768 | "thiserror", 769 | "walkdir", 770 | ] 771 | 772 | [[package]] 773 | name = "jni-sys" 774 | version = "0.3.0" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 777 | 778 | [[package]] 779 | name = "jobserver" 780 | version = "0.1.24" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" 783 | dependencies = [ 784 | "libc", 785 | ] 786 | 787 | [[package]] 788 | name = "js-sys" 789 | version = "0.3.57" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" 792 | dependencies = [ 793 | "wasm-bindgen", 794 | ] 795 | 796 | [[package]] 797 | name = "khronos_api" 798 | version = "3.1.0" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 801 | 802 | [[package]] 803 | name = "lazy_static" 804 | version = "1.4.0" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 807 | 808 | [[package]] 809 | name = "lazycell" 810 | version = "1.3.0" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 813 | 814 | [[package]] 815 | name = "libc" 816 | version = "0.2.126" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" 819 | 820 | [[package]] 821 | name = "libloading" 822 | version = "0.7.3" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" 825 | dependencies = [ 826 | "cfg-if 1.0.0", 827 | "winapi", 828 | ] 829 | 830 | [[package]] 831 | name = "lock_api" 832 | version = "0.4.7" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 835 | dependencies = [ 836 | "autocfg", 837 | "scopeguard", 838 | ] 839 | 840 | [[package]] 841 | name = "log" 842 | version = "0.4.17" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 845 | dependencies = [ 846 | "cfg-if 1.0.0", 847 | ] 848 | 849 | [[package]] 850 | name = "mach" 851 | version = "0.3.2" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" 854 | dependencies = [ 855 | "libc", 856 | ] 857 | 858 | [[package]] 859 | name = "malloc_buf" 860 | version = "0.0.6" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 863 | dependencies = [ 864 | "libc", 865 | ] 866 | 867 | [[package]] 868 | name = "matches" 869 | version = "0.1.9" 870 | source = "registry+https://github.com/rust-lang/crates.io-index" 871 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 872 | 873 | [[package]] 874 | name = "memchr" 875 | version = "2.5.0" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 878 | 879 | [[package]] 880 | name = "memmap2" 881 | version = "0.3.1" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357" 884 | dependencies = [ 885 | "libc", 886 | ] 887 | 888 | [[package]] 889 | name = "memoffset" 890 | version = "0.6.5" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 893 | dependencies = [ 894 | "autocfg", 895 | ] 896 | 897 | [[package]] 898 | name = "minimal-lexical" 899 | version = "0.2.1" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 902 | 903 | [[package]] 904 | name = "mio" 905 | version = "0.8.3" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799" 908 | dependencies = [ 909 | "libc", 910 | "log", 911 | "wasi 0.11.0+wasi-snapshot-preview1", 912 | "windows-sys", 913 | ] 914 | 915 | [[package]] 916 | name = "ndk" 917 | version = "0.5.0" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" 920 | dependencies = [ 921 | "bitflags", 922 | "jni-sys", 923 | "ndk-sys 0.2.2", 924 | "num_enum", 925 | "thiserror", 926 | ] 927 | 928 | [[package]] 929 | name = "ndk" 930 | version = "0.6.0" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" 933 | dependencies = [ 934 | "bitflags", 935 | "jni-sys", 936 | "ndk-sys 0.3.0", 937 | "num_enum", 938 | "thiserror", 939 | ] 940 | 941 | [[package]] 942 | name = "ndk-context" 943 | version = "0.1.1" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 946 | 947 | [[package]] 948 | name = "ndk-glue" 949 | version = "0.5.2" 950 | source = "registry+https://github.com/rust-lang/crates.io-index" 951 | checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4" 952 | dependencies = [ 953 | "lazy_static", 954 | "libc", 955 | "log", 956 | "ndk 0.5.0", 957 | "ndk-context", 958 | "ndk-macro", 959 | "ndk-sys 0.2.2", 960 | ] 961 | 962 | [[package]] 963 | name = "ndk-glue" 964 | version = "0.6.2" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | checksum = "0d0c4a7b83860226e6b4183edac21851f05d5a51756e97a1144b7f5a6b63e65f" 967 | dependencies = [ 968 | "lazy_static", 969 | "libc", 970 | "log", 971 | "ndk 0.6.0", 972 | "ndk-context", 973 | "ndk-macro", 974 | "ndk-sys 0.3.0", 975 | ] 976 | 977 | [[package]] 978 | name = "ndk-macro" 979 | version = "0.3.0" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" 982 | dependencies = [ 983 | "darling", 984 | "proc-macro-crate", 985 | "proc-macro2", 986 | "quote", 987 | "syn", 988 | ] 989 | 990 | [[package]] 991 | name = "ndk-sys" 992 | version = "0.2.2" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" 995 | 996 | [[package]] 997 | name = "ndk-sys" 998 | version = "0.3.0" 999 | source = "registry+https://github.com/rust-lang/crates.io-index" 1000 | checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" 1001 | dependencies = [ 1002 | "jni-sys", 1003 | ] 1004 | 1005 | [[package]] 1006 | name = "nix" 1007 | version = "0.22.3" 1008 | source = "registry+https://github.com/rust-lang/crates.io-index" 1009 | checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" 1010 | dependencies = [ 1011 | "bitflags", 1012 | "cc", 1013 | "cfg-if 1.0.0", 1014 | "libc", 1015 | "memoffset", 1016 | ] 1017 | 1018 | [[package]] 1019 | name = "nix" 1020 | version = "0.23.1" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" 1023 | dependencies = [ 1024 | "bitflags", 1025 | "cc", 1026 | "cfg-if 1.0.0", 1027 | "libc", 1028 | "memoffset", 1029 | ] 1030 | 1031 | [[package]] 1032 | name = "nohash-hasher" 1033 | version = "0.2.0" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 1036 | 1037 | [[package]] 1038 | name = "nom" 1039 | version = "7.1.1" 1040 | source = "registry+https://github.com/rust-lang/crates.io-index" 1041 | checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" 1042 | dependencies = [ 1043 | "memchr", 1044 | "minimal-lexical", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "num-derive" 1049 | version = "0.3.3" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 1052 | dependencies = [ 1053 | "proc-macro2", 1054 | "quote", 1055 | "syn", 1056 | ] 1057 | 1058 | [[package]] 1059 | name = "num-traits" 1060 | version = "0.2.15" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1063 | dependencies = [ 1064 | "autocfg", 1065 | ] 1066 | 1067 | [[package]] 1068 | name = "num_enum" 1069 | version = "0.5.7" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" 1072 | dependencies = [ 1073 | "num_enum_derive", 1074 | ] 1075 | 1076 | [[package]] 1077 | name = "num_enum_derive" 1078 | version = "0.5.7" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" 1081 | dependencies = [ 1082 | "proc-macro-crate", 1083 | "proc-macro2", 1084 | "quote", 1085 | "syn", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "objc" 1090 | version = "0.2.7" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1093 | dependencies = [ 1094 | "malloc_buf", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "objc-foundation" 1099 | version = "0.1.1" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 1102 | dependencies = [ 1103 | "block", 1104 | "objc", 1105 | "objc_id", 1106 | ] 1107 | 1108 | [[package]] 1109 | name = "objc_id" 1110 | version = "0.1.1" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 1113 | dependencies = [ 1114 | "objc", 1115 | ] 1116 | 1117 | [[package]] 1118 | name = "oboe" 1119 | version = "0.4.6" 1120 | source = "registry+https://github.com/rust-lang/crates.io-index" 1121 | checksum = "27f63c358b4fa0fbcfefd7c8be5cfc39c08ce2389f5325687e7762a48d30a5c1" 1122 | dependencies = [ 1123 | "jni", 1124 | "ndk 0.6.0", 1125 | "ndk-context", 1126 | "num-derive", 1127 | "num-traits", 1128 | "oboe-sys", 1129 | ] 1130 | 1131 | [[package]] 1132 | name = "oboe-sys" 1133 | version = "0.4.5" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "3370abb7372ed744232c12954d920d1a40f1c4686de9e79e800021ef492294bd" 1136 | dependencies = [ 1137 | "cc", 1138 | ] 1139 | 1140 | [[package]] 1141 | name = "once_cell" 1142 | version = "1.12.0" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" 1145 | 1146 | [[package]] 1147 | name = "osmesa-sys" 1148 | version = "0.1.2" 1149 | source = "registry+https://github.com/rust-lang/crates.io-index" 1150 | checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" 1151 | dependencies = [ 1152 | "shared_library", 1153 | ] 1154 | 1155 | [[package]] 1156 | name = "owned_ttf_parser" 1157 | version = "0.15.0" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "4fb1e509cfe7a12db2a90bfa057dfcdbc55a347f5da677c506b53dd099cfec9d" 1160 | dependencies = [ 1161 | "ttf-parser", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "parking_lot" 1166 | version = "0.11.2" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 1169 | dependencies = [ 1170 | "instant", 1171 | "lock_api", 1172 | "parking_lot_core 0.8.5", 1173 | ] 1174 | 1175 | [[package]] 1176 | name = "parking_lot" 1177 | version = "0.12.0" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" 1180 | dependencies = [ 1181 | "lock_api", 1182 | "parking_lot_core 0.9.3", 1183 | ] 1184 | 1185 | [[package]] 1186 | name = "parking_lot_core" 1187 | version = "0.8.5" 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" 1189 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 1190 | dependencies = [ 1191 | "cfg-if 1.0.0", 1192 | "instant", 1193 | "libc", 1194 | "redox_syscall", 1195 | "smallvec", 1196 | "winapi", 1197 | ] 1198 | 1199 | [[package]] 1200 | name = "parking_lot_core" 1201 | version = "0.9.3" 1202 | source = "registry+https://github.com/rust-lang/crates.io-index" 1203 | checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" 1204 | dependencies = [ 1205 | "cfg-if 1.0.0", 1206 | "libc", 1207 | "redox_syscall", 1208 | "smallvec", 1209 | "windows-sys", 1210 | ] 1211 | 1212 | [[package]] 1213 | name = "peeking_take_while" 1214 | version = "0.1.2" 1215 | source = "registry+https://github.com/rust-lang/crates.io-index" 1216 | checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" 1217 | 1218 | [[package]] 1219 | name = "percent-encoding" 1220 | version = "2.1.0" 1221 | source = "registry+https://github.com/rust-lang/crates.io-index" 1222 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1223 | 1224 | [[package]] 1225 | name = "pin-project-lite" 1226 | version = "0.2.9" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 1229 | 1230 | [[package]] 1231 | name = "pkg-config" 1232 | version = "0.3.25" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" 1235 | 1236 | [[package]] 1237 | name = "proc-macro-crate" 1238 | version = "1.1.3" 1239 | source = "registry+https://github.com/rust-lang/crates.io-index" 1240 | checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" 1241 | dependencies = [ 1242 | "thiserror", 1243 | "toml", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "proc-macro2" 1248 | version = "1.0.39" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" 1251 | dependencies = [ 1252 | "unicode-ident", 1253 | ] 1254 | 1255 | [[package]] 1256 | name = "quote" 1257 | version = "1.0.18" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" 1260 | dependencies = [ 1261 | "proc-macro2", 1262 | ] 1263 | 1264 | [[package]] 1265 | name = "raw-window-handle" 1266 | version = "0.4.3" 1267 | source = "registry+https://github.com/rust-lang/crates.io-index" 1268 | checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" 1269 | dependencies = [ 1270 | "cty", 1271 | ] 1272 | 1273 | [[package]] 1274 | name = "redox_syscall" 1275 | version = "0.2.13" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" 1278 | dependencies = [ 1279 | "bitflags", 1280 | ] 1281 | 1282 | [[package]] 1283 | name = "regex" 1284 | version = "1.5.6" 1285 | source = "registry+https://github.com/rust-lang/crates.io-index" 1286 | checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" 1287 | dependencies = [ 1288 | "regex-syntax", 1289 | ] 1290 | 1291 | [[package]] 1292 | name = "regex-syntax" 1293 | version = "0.6.26" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" 1296 | 1297 | [[package]] 1298 | name = "ringbuf" 1299 | version = "0.2.8" 1300 | source = "registry+https://github.com/rust-lang/crates.io-index" 1301 | checksum = "f65af18d50f789e74aaf23bbb3f65dcd22a3cb6e029b5bced149f6bd57c5c2a2" 1302 | dependencies = [ 1303 | "cache-padded", 1304 | ] 1305 | 1306 | [[package]] 1307 | name = "rustc-hash" 1308 | version = "1.1.0" 1309 | source = "registry+https://github.com/rust-lang/crates.io-index" 1310 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1311 | 1312 | [[package]] 1313 | name = "same-file" 1314 | version = "1.0.6" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1317 | dependencies = [ 1318 | "winapi-util", 1319 | ] 1320 | 1321 | [[package]] 1322 | name = "scoped-tls" 1323 | version = "1.0.0" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" 1326 | 1327 | [[package]] 1328 | name = "scopeguard" 1329 | version = "1.1.0" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1332 | 1333 | [[package]] 1334 | name = "serde" 1335 | version = "1.0.137" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" 1338 | 1339 | [[package]] 1340 | name = "shared_library" 1341 | version = "0.1.9" 1342 | source = "registry+https://github.com/rust-lang/crates.io-index" 1343 | checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" 1344 | dependencies = [ 1345 | "lazy_static", 1346 | "libc", 1347 | ] 1348 | 1349 | [[package]] 1350 | name = "shlex" 1351 | version = "1.1.0" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" 1354 | 1355 | [[package]] 1356 | name = "slotmap" 1357 | version = "1.0.6" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" 1360 | dependencies = [ 1361 | "version_check", 1362 | ] 1363 | 1364 | [[package]] 1365 | name = "smallvec" 1366 | version = "1.8.0" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" 1369 | 1370 | [[package]] 1371 | name = "smithay-client-toolkit" 1372 | version = "0.15.4" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3" 1375 | dependencies = [ 1376 | "bitflags", 1377 | "calloop", 1378 | "dlib", 1379 | "lazy_static", 1380 | "log", 1381 | "memmap2", 1382 | "nix 0.22.3", 1383 | "pkg-config", 1384 | "wayland-client", 1385 | "wayland-cursor", 1386 | "wayland-protocols", 1387 | ] 1388 | 1389 | [[package]] 1390 | name = "stdweb" 1391 | version = "0.1.3" 1392 | source = "registry+https://github.com/rust-lang/crates.io-index" 1393 | checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" 1394 | 1395 | [[package]] 1396 | name = "str-buf" 1397 | version = "1.0.5" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a" 1400 | 1401 | [[package]] 1402 | name = "strsim" 1403 | version = "0.10.0" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 1406 | 1407 | [[package]] 1408 | name = "syn" 1409 | version = "1.0.95" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942" 1412 | dependencies = [ 1413 | "proc-macro2", 1414 | "quote", 1415 | "unicode-ident", 1416 | ] 1417 | 1418 | [[package]] 1419 | name = "thiserror" 1420 | version = "1.0.31" 1421 | source = "registry+https://github.com/rust-lang/crates.io-index" 1422 | checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" 1423 | dependencies = [ 1424 | "thiserror-impl", 1425 | ] 1426 | 1427 | [[package]] 1428 | name = "thiserror-impl" 1429 | version = "1.0.31" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" 1432 | dependencies = [ 1433 | "proc-macro2", 1434 | "quote", 1435 | "syn", 1436 | ] 1437 | 1438 | [[package]] 1439 | name = "tinyvec" 1440 | version = "1.6.0" 1441 | source = "registry+https://github.com/rust-lang/crates.io-index" 1442 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1443 | dependencies = [ 1444 | "tinyvec_macros", 1445 | ] 1446 | 1447 | [[package]] 1448 | name = "tinyvec_macros" 1449 | version = "0.1.0" 1450 | source = "registry+https://github.com/rust-lang/crates.io-index" 1451 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 1452 | 1453 | [[package]] 1454 | name = "toml" 1455 | version = "0.5.9" 1456 | source = "registry+https://github.com/rust-lang/crates.io-index" 1457 | checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" 1458 | dependencies = [ 1459 | "serde", 1460 | ] 1461 | 1462 | [[package]] 1463 | name = "tracing" 1464 | version = "0.1.34" 1465 | source = "registry+https://github.com/rust-lang/crates.io-index" 1466 | checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" 1467 | dependencies = [ 1468 | "cfg-if 1.0.0", 1469 | "pin-project-lite", 1470 | "tracing-attributes", 1471 | "tracing-core", 1472 | ] 1473 | 1474 | [[package]] 1475 | name = "tracing-attributes" 1476 | version = "0.1.21" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" 1479 | dependencies = [ 1480 | "proc-macro2", 1481 | "quote", 1482 | "syn", 1483 | ] 1484 | 1485 | [[package]] 1486 | name = "tracing-core" 1487 | version = "0.1.26" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" 1490 | dependencies = [ 1491 | "lazy_static", 1492 | ] 1493 | 1494 | [[package]] 1495 | name = "ttf-parser" 1496 | version = "0.15.0" 1497 | source = "registry+https://github.com/rust-lang/crates.io-index" 1498 | checksum = "c74c96594835e10fa545e2a51e8709f30b173a092bfd6036ef2cec53376244f3" 1499 | 1500 | [[package]] 1501 | name = "unicode-bidi" 1502 | version = "0.3.8" 1503 | source = "registry+https://github.com/rust-lang/crates.io-index" 1504 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 1505 | 1506 | [[package]] 1507 | name = "unicode-ident" 1508 | version = "1.0.0" 1509 | source = "registry+https://github.com/rust-lang/crates.io-index" 1510 | checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" 1511 | 1512 | [[package]] 1513 | name = "unicode-normalization" 1514 | version = "0.1.19" 1515 | source = "registry+https://github.com/rust-lang/crates.io-index" 1516 | checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" 1517 | dependencies = [ 1518 | "tinyvec", 1519 | ] 1520 | 1521 | [[package]] 1522 | name = "url" 1523 | version = "2.2.2" 1524 | source = "registry+https://github.com/rust-lang/crates.io-index" 1525 | checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" 1526 | dependencies = [ 1527 | "form_urlencoded", 1528 | "idna", 1529 | "matches", 1530 | "percent-encoding", 1531 | ] 1532 | 1533 | [[package]] 1534 | name = "version_check" 1535 | version = "0.9.4" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1538 | 1539 | [[package]] 1540 | name = "walkdir" 1541 | version = "2.3.2" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" 1544 | dependencies = [ 1545 | "same-file", 1546 | "winapi", 1547 | "winapi-util", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "wasi" 1552 | version = "0.10.2+wasi-snapshot-preview1" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" 1555 | 1556 | [[package]] 1557 | name = "wasi" 1558 | version = "0.11.0+wasi-snapshot-preview1" 1559 | source = "registry+https://github.com/rust-lang/crates.io-index" 1560 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1561 | 1562 | [[package]] 1563 | name = "wasm-bindgen" 1564 | version = "0.2.80" 1565 | source = "registry+https://github.com/rust-lang/crates.io-index" 1566 | checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" 1567 | dependencies = [ 1568 | "cfg-if 1.0.0", 1569 | "wasm-bindgen-macro", 1570 | ] 1571 | 1572 | [[package]] 1573 | name = "wasm-bindgen-backend" 1574 | version = "0.2.80" 1575 | source = "registry+https://github.com/rust-lang/crates.io-index" 1576 | checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" 1577 | dependencies = [ 1578 | "bumpalo", 1579 | "lazy_static", 1580 | "log", 1581 | "proc-macro2", 1582 | "quote", 1583 | "syn", 1584 | "wasm-bindgen-shared", 1585 | ] 1586 | 1587 | [[package]] 1588 | name = "wasm-bindgen-futures" 1589 | version = "0.4.30" 1590 | source = "registry+https://github.com/rust-lang/crates.io-index" 1591 | checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" 1592 | dependencies = [ 1593 | "cfg-if 1.0.0", 1594 | "js-sys", 1595 | "wasm-bindgen", 1596 | "web-sys", 1597 | ] 1598 | 1599 | [[package]] 1600 | name = "wasm-bindgen-macro" 1601 | version = "0.2.80" 1602 | source = "registry+https://github.com/rust-lang/crates.io-index" 1603 | checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" 1604 | dependencies = [ 1605 | "quote", 1606 | "wasm-bindgen-macro-support", 1607 | ] 1608 | 1609 | [[package]] 1610 | name = "wasm-bindgen-macro-support" 1611 | version = "0.2.80" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" 1614 | dependencies = [ 1615 | "proc-macro2", 1616 | "quote", 1617 | "syn", 1618 | "wasm-bindgen-backend", 1619 | "wasm-bindgen-shared", 1620 | ] 1621 | 1622 | [[package]] 1623 | name = "wasm-bindgen-shared" 1624 | version = "0.2.80" 1625 | source = "registry+https://github.com/rust-lang/crates.io-index" 1626 | checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" 1627 | 1628 | [[package]] 1629 | name = "wayland-client" 1630 | version = "0.29.4" 1631 | source = "registry+https://github.com/rust-lang/crates.io-index" 1632 | checksum = "91223460e73257f697d9e23d401279123d36039a3f7a449e983f123292d4458f" 1633 | dependencies = [ 1634 | "bitflags", 1635 | "downcast-rs", 1636 | "libc", 1637 | "nix 0.22.3", 1638 | "scoped-tls", 1639 | "wayland-commons", 1640 | "wayland-scanner", 1641 | "wayland-sys", 1642 | ] 1643 | 1644 | [[package]] 1645 | name = "wayland-commons" 1646 | version = "0.29.4" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "94f6e5e340d7c13490eca867898c4cec5af56c27a5ffe5c80c6fc4708e22d33e" 1649 | dependencies = [ 1650 | "nix 0.22.3", 1651 | "once_cell", 1652 | "smallvec", 1653 | "wayland-sys", 1654 | ] 1655 | 1656 | [[package]] 1657 | name = "wayland-cursor" 1658 | version = "0.29.4" 1659 | source = "registry+https://github.com/rust-lang/crates.io-index" 1660 | checksum = "c52758f13d5e7861fc83d942d3d99bf270c83269575e52ac29e5b73cb956a6bd" 1661 | dependencies = [ 1662 | "nix 0.22.3", 1663 | "wayland-client", 1664 | "xcursor", 1665 | ] 1666 | 1667 | [[package]] 1668 | name = "wayland-egl" 1669 | version = "0.29.4" 1670 | source = "registry+https://github.com/rust-lang/crates.io-index" 1671 | checksum = "83281d69ee162b59031c666385e93bde4039ec553b90c4191cdb128ceea29a3a" 1672 | dependencies = [ 1673 | "wayland-client", 1674 | "wayland-sys", 1675 | ] 1676 | 1677 | [[package]] 1678 | name = "wayland-protocols" 1679 | version = "0.29.4" 1680 | source = "registry+https://github.com/rust-lang/crates.io-index" 1681 | checksum = "60147ae23303402e41fe034f74fb2c35ad0780ee88a1c40ac09a3be1e7465741" 1682 | dependencies = [ 1683 | "bitflags", 1684 | "wayland-client", 1685 | "wayland-commons", 1686 | "wayland-scanner", 1687 | ] 1688 | 1689 | [[package]] 1690 | name = "wayland-scanner" 1691 | version = "0.29.4" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "39a1ed3143f7a143187156a2ab52742e89dac33245ba505c17224df48939f9e0" 1694 | dependencies = [ 1695 | "proc-macro2", 1696 | "quote", 1697 | "xml-rs", 1698 | ] 1699 | 1700 | [[package]] 1701 | name = "wayland-sys" 1702 | version = "0.29.4" 1703 | source = "registry+https://github.com/rust-lang/crates.io-index" 1704 | checksum = "d9341df79a8975679188e37dab3889bfa57c44ac2cb6da166f519a81cbe452d4" 1705 | dependencies = [ 1706 | "dlib", 1707 | "lazy_static", 1708 | "pkg-config", 1709 | ] 1710 | 1711 | [[package]] 1712 | name = "web-sys" 1713 | version = "0.3.57" 1714 | source = "registry+https://github.com/rust-lang/crates.io-index" 1715 | checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" 1716 | dependencies = [ 1717 | "js-sys", 1718 | "wasm-bindgen", 1719 | ] 1720 | 1721 | [[package]] 1722 | name = "webbrowser" 1723 | version = "0.7.1" 1724 | source = "registry+https://github.com/rust-lang/crates.io-index" 1725 | checksum = "fc6a3cffdb686fbb24d9fb8f03a213803277ed2300f11026a3afe1f108dc021b" 1726 | dependencies = [ 1727 | "jni", 1728 | "ndk-glue 0.6.2", 1729 | "url", 1730 | "web-sys", 1731 | "widestring", 1732 | "winapi", 1733 | ] 1734 | 1735 | [[package]] 1736 | name = "widestring" 1737 | version = "0.5.1" 1738 | source = "registry+https://github.com/rust-lang/crates.io-index" 1739 | checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" 1740 | 1741 | [[package]] 1742 | name = "winapi" 1743 | version = "0.3.9" 1744 | source = "registry+https://github.com/rust-lang/crates.io-index" 1745 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1746 | dependencies = [ 1747 | "winapi-i686-pc-windows-gnu", 1748 | "winapi-x86_64-pc-windows-gnu", 1749 | ] 1750 | 1751 | [[package]] 1752 | name = "winapi-i686-pc-windows-gnu" 1753 | version = "0.4.0" 1754 | source = "registry+https://github.com/rust-lang/crates.io-index" 1755 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1756 | 1757 | [[package]] 1758 | name = "winapi-util" 1759 | version = "0.1.5" 1760 | source = "registry+https://github.com/rust-lang/crates.io-index" 1761 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1762 | dependencies = [ 1763 | "winapi", 1764 | ] 1765 | 1766 | [[package]] 1767 | name = "winapi-wsapoll" 1768 | version = "0.1.1" 1769 | source = "registry+https://github.com/rust-lang/crates.io-index" 1770 | checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" 1771 | dependencies = [ 1772 | "winapi", 1773 | ] 1774 | 1775 | [[package]] 1776 | name = "winapi-x86_64-pc-windows-gnu" 1777 | version = "0.4.0" 1778 | source = "registry+https://github.com/rust-lang/crates.io-index" 1779 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1780 | 1781 | [[package]] 1782 | name = "windows-sys" 1783 | version = "0.36.1" 1784 | source = "registry+https://github.com/rust-lang/crates.io-index" 1785 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 1786 | dependencies = [ 1787 | "windows_aarch64_msvc", 1788 | "windows_i686_gnu", 1789 | "windows_i686_msvc", 1790 | "windows_x86_64_gnu", 1791 | "windows_x86_64_msvc", 1792 | ] 1793 | 1794 | [[package]] 1795 | name = "windows_aarch64_msvc" 1796 | version = "0.36.1" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 1799 | 1800 | [[package]] 1801 | name = "windows_i686_gnu" 1802 | version = "0.36.1" 1803 | source = "registry+https://github.com/rust-lang/crates.io-index" 1804 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 1805 | 1806 | [[package]] 1807 | name = "windows_i686_msvc" 1808 | version = "0.36.1" 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" 1810 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 1811 | 1812 | [[package]] 1813 | name = "windows_x86_64_gnu" 1814 | version = "0.36.1" 1815 | source = "registry+https://github.com/rust-lang/crates.io-index" 1816 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 1817 | 1818 | [[package]] 1819 | name = "windows_x86_64_msvc" 1820 | version = "0.36.1" 1821 | source = "registry+https://github.com/rust-lang/crates.io-index" 1822 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 1823 | 1824 | [[package]] 1825 | name = "winit" 1826 | version = "0.26.1" 1827 | source = "registry+https://github.com/rust-lang/crates.io-index" 1828 | checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" 1829 | dependencies = [ 1830 | "bitflags", 1831 | "cocoa", 1832 | "core-foundation 0.9.3", 1833 | "core-graphics 0.22.3", 1834 | "core-video-sys", 1835 | "dispatch", 1836 | "instant", 1837 | "lazy_static", 1838 | "libc", 1839 | "log", 1840 | "mio", 1841 | "ndk 0.5.0", 1842 | "ndk-glue 0.5.2", 1843 | "ndk-sys 0.2.2", 1844 | "objc", 1845 | "parking_lot 0.11.2", 1846 | "percent-encoding", 1847 | "raw-window-handle", 1848 | "smithay-client-toolkit", 1849 | "wasm-bindgen", 1850 | "wayland-client", 1851 | "wayland-protocols", 1852 | "web-sys", 1853 | "winapi", 1854 | "x11-dl", 1855 | ] 1856 | 1857 | [[package]] 1858 | name = "x11-dl" 1859 | version = "2.19.1" 1860 | source = "registry+https://github.com/rust-lang/crates.io-index" 1861 | checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" 1862 | dependencies = [ 1863 | "lazy_static", 1864 | "libc", 1865 | "pkg-config", 1866 | ] 1867 | 1868 | [[package]] 1869 | name = "x11rb" 1870 | version = "0.9.0" 1871 | source = "registry+https://github.com/rust-lang/crates.io-index" 1872 | checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a" 1873 | dependencies = [ 1874 | "gethostname", 1875 | "nix 0.22.3", 1876 | "winapi", 1877 | "winapi-wsapoll", 1878 | ] 1879 | 1880 | [[package]] 1881 | name = "xcursor" 1882 | version = "0.3.4" 1883 | source = "registry+https://github.com/rust-lang/crates.io-index" 1884 | checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" 1885 | dependencies = [ 1886 | "nom", 1887 | ] 1888 | 1889 | [[package]] 1890 | name = "xml-rs" 1891 | version = "0.8.4" 1892 | source = "registry+https://github.com/rust-lang/crates.io-index" 1893 | checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" 1894 | --------------------------------------------------------------------------------