├── .gitignore ├── src ├── ui │ ├── mod.rs │ ├── color.rs │ └── panel.rs ├── editor │ ├── cursor.rs │ ├── buffer.rs │ └── mod.rs ├── constants │ └── mod.rs ├── layout_manager │ └── mod.rs ├── main.rs └── cmdline │ └── mod.rs ├── screenshot.gif ├── assets ├── haskplex.ttf ├── haskplex-italic.ttf └── source.txt ├── Cargo.toml ├── README.md ├── .vscode └── launch.json └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | .DS_Store -------------------------------------------------------------------------------- /src/ui/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod panel; 2 | pub mod color; -------------------------------------------------------------------------------- /screenshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huytd/snarkyed/HEAD/screenshot.gif -------------------------------------------------------------------------------- /assets/haskplex.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huytd/snarkyed/HEAD/assets/haskplex.ttf -------------------------------------------------------------------------------- /assets/haskplex-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huytd/snarkyed/HEAD/assets/haskplex-italic.ttf -------------------------------------------------------------------------------- /src/editor/cursor.rs: -------------------------------------------------------------------------------- 1 | pub struct Cursor { 2 | pub row: i32, 3 | pub col: i32, 4 | } 5 | 6 | impl Cursor { 7 | pub fn new() -> Cursor { 8 | Cursor { row: 0, col: 0 } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "snarkyed" 3 | version = "0.1.0" 4 | authors = ["Huy Tran "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [dependencies] 10 | glium = "0.25.1" 11 | glium-glyph = "0.6.0" 12 | glyph_brush = "0.5" 13 | ropey = "1.1.0" 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SnarkyEd 2 | 3 | GPU rendered text editor written in Rust, backed by Rope data structure. 4 | 5 | Why? Because why not? it's a long weekend. 6 | 7 | ![](screenshot.gif) 8 | 9 | Keybinding: 10 | 11 | ``` 12 | h/j/k/l: Line and character movement 13 | 0/$: Move to begin/end of line 14 | C-j/C-k: Scroll up/down 10 lines 15 | ``` 16 | 17 | It's barely functional now. -------------------------------------------------------------------------------- /src/constants/mod.rs: -------------------------------------------------------------------------------- 1 | use glium::glutin::ModifiersState; 2 | 3 | pub const BASE_FONT_SIZE: f32 = 18.0; 4 | 5 | pub const NO_MODIFIERS: ModifiersState = ModifiersState { 6 | alt: false, 7 | ctrl: false, 8 | logo: false, 9 | shift: false, 10 | }; 11 | 12 | pub const CTRL_HOLD: ModifiersState = ModifiersState { 13 | alt: false, 14 | ctrl: true, 15 | logo: false, 16 | shift: false, 17 | }; 18 | 19 | pub const SHIFT_HOLD: ModifiersState = ModifiersState { 20 | alt: false, 21 | ctrl: false, 22 | logo: false, 23 | shift: true, 24 | }; 25 | 26 | pub const CMD_SHIFT_HOLD: ModifiersState = ModifiersState { 27 | alt: false, 28 | ctrl: false, 29 | logo: true, 30 | shift: true, 31 | }; 32 | -------------------------------------------------------------------------------- /src/editor/buffer.rs: -------------------------------------------------------------------------------- 1 | extern crate ropey; 2 | use ropey::Rope; 3 | 4 | pub struct Buffer { 5 | content: Rope, 6 | } 7 | 8 | impl Buffer { 9 | pub fn new(file: &str) -> Buffer { 10 | let content = Rope::from_reader(std::fs::File::open(file).unwrap()).unwrap(); 11 | Buffer { content: content } 12 | } 13 | 14 | pub fn get_line_at(&self, line: usize) -> String { 15 | String::from(self.content.line(line)) 16 | } 17 | 18 | pub fn get_lines_count(&self) -> usize { 19 | self.content.len_lines() 20 | } 21 | 22 | pub fn get_lines(&self, from: usize, to: usize) -> String { 23 | let max_len = self.content.len_lines(); 24 | let start = self.content.line_to_char(from); 25 | let end = if max_len > to { 26 | self.content.line_to_char(to) 27 | } else { 28 | self.content.line_to_char(max_len) 29 | }; 30 | String::from(self.content.slice(start..end)) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "lldb", 9 | "request": "launch", 10 | "name": "Debug executable 'snarkyed'", 11 | "cargo": { 12 | "args": [ 13 | "build", 14 | "--bin=snarkyed", 15 | "--package=snarkyed" 16 | ], 17 | "filter": { 18 | "name": "snarkyed", 19 | "kind": "bin" 20 | } 21 | }, 22 | "args": [], 23 | "cwd": "${workspaceFolder}" 24 | }, 25 | { 26 | "type": "lldb", 27 | "request": "launch", 28 | "name": "Debug unit tests in executable 'snarkyed'", 29 | "cargo": { 30 | "args": [ 31 | "test", 32 | "--no-run", 33 | "--bin=snarkyed", 34 | "--package=snarkyed" 35 | ], 36 | "filter": { 37 | "name": "snarkyed", 38 | "kind": "bin" 39 | } 40 | }, 41 | "args": [], 42 | "cwd": "${workspaceFolder}" 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /src/ui/color.rs: -------------------------------------------------------------------------------- 1 | pub struct Color { 2 | pub r: f32, 3 | pub g: f32, 4 | pub b: f32, 5 | pub a: f32 6 | } 7 | 8 | impl Color { 9 | pub fn as_slice(&self) -> [f32; 4] { 10 | self.into() 11 | } 12 | } 13 | 14 | impl std::convert::From<&Color> for [f32; 4] { 15 | fn from(c: &Color) -> Self { 16 | [c.r, c.g, c.b, c.a] 17 | } 18 | } 19 | 20 | pub fn rgba(r: u8, g: u8, b: u8, a: f32) -> Color { 21 | Color { 22 | r: r as f32 / 255.0, 23 | g: g as f32 / 255.0, 24 | b: b as f32 / 255.0, 25 | a: a 26 | } 27 | } 28 | 29 | pub fn rgb(r: u8, g: u8, b: u8) -> Color { 30 | rgba(r, g, b, 1.0) 31 | } 32 | 33 | pub fn hex(h: &str) -> Color { 34 | let c = parse_hex(h); 35 | rgb(c[0], c[1], c[2]) 36 | } 37 | 38 | pub fn hexa(h: &str, a: f32) -> Color { 39 | let c = parse_hex(h); 40 | rgba(c[0], c[1], c[2], a) 41 | } 42 | 43 | fn parse_hex(hex_asm: &str) -> Vec { 44 | let mut hex_bytes = hex_asm.as_bytes().iter().filter_map(|b| { 45 | match b { 46 | b'0'...b'9' => Some(b - b'0'), 47 | b'a'...b'f' => Some(b - b'a' + 10), 48 | b'A'...b'F' => Some(b - b'A' + 10), 49 | _ => None, 50 | } 51 | }).fuse(); 52 | 53 | let mut bytes = Vec::new(); 54 | while let (Some(h), Some(l)) = (hex_bytes.next(), hex_bytes.next()) { 55 | bytes.push(h << 4 | l) 56 | } 57 | bytes 58 | } -------------------------------------------------------------------------------- /src/layout_manager/mod.rs: -------------------------------------------------------------------------------- 1 | extern crate glium; 2 | use glium::glutin::{ElementState, ModifiersState, VirtualKeyCode}; 3 | use glium::{Display, Frame}; 4 | 5 | pub trait View { 6 | fn update(&mut self, display: &Display); 7 | fn draw(&mut self, display: &Display, target: &mut Frame); 8 | fn handle_input( 9 | &mut self, 10 | key_code: VirtualKeyCode, 11 | state: ElementState, 12 | modifiers: ModifiersState, 13 | ); 14 | fn push_char(&mut self, c: char); 15 | fn pop_char(&mut self); 16 | } 17 | 18 | pub struct LayoutManager { 19 | pub views: Vec>, 20 | } 21 | 22 | impl LayoutManager { 23 | pub fn update_views(&mut self, display: &Display) { 24 | for view in self.views.iter_mut() { 25 | view.update(display); 26 | } 27 | } 28 | 29 | pub fn draw(&mut self, display: &Display, target: &mut Frame) { 30 | for view in self.views.iter_mut() { 31 | view.draw(display, target); 32 | } 33 | } 34 | 35 | pub fn handle_input( 36 | &mut self, 37 | key_code: VirtualKeyCode, 38 | state: ElementState, 39 | modifiers: ModifiersState, 40 | ) { 41 | for view in self.views.iter_mut() { 42 | view.handle_input(key_code, state, modifiers); 43 | } 44 | } 45 | 46 | pub fn push_char(&mut self, c: char) { 47 | for view in self.views.iter_mut() { 48 | view.push_char(c); 49 | } 50 | } 51 | 52 | pub fn pop_char(&mut self) { 53 | for view in self.views.iter_mut() { 54 | view.pop_char(); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /assets/source.txt: -------------------------------------------------------------------------------- 1 | port module Models exposing (..) 2 | 3 | type Msg = NoOp | KeyDown Int | TextInput String | Move Task | DropTask String | Delete String 4 | 5 | type alias Task = { 6 | name: String, 7 | status: String 8 | } 9 | 10 | type alias Model = { 11 | taskInput: String, 12 | tasks: List Task, 13 | movingTask: Maybe Task 14 | } 15 | 16 | -- PORTS 17 | 18 | port setStorage : Model -> Cmd msg 19 | 20 | saveData : Model -> ( Model, Cmd Msg ) 21 | saveData model = ( model, setStorage model ) 22 | 23 | -- INITIAL FUNCTION 24 | 25 | initModel : Maybe Model -> ( Model, Cmd msg ) 26 | initModel model = 27 | case model of 28 | Just model -> ( model, Cmd.none ) 29 | Nothing -> ( Model "" [] Nothing, Cmd.none ) 30 | 31 | 32 | -- ADD TASK 33 | 34 | addNewTask : Model -> ( Model, Cmd Msg ) 35 | addNewTask model = 36 | let 37 | newModel = { model | 38 | tasks = model.tasks ++ [ Task model.taskInput "Todo" ], 39 | taskInput = "" 40 | } 41 | in 42 | ( newModel, Cmd.batch [ setStorage newModel, Cmd.none ] ) 43 | 44 | -- CHANGE TASK STATUS 45 | 46 | moveTaskToStatus : Task -> String -> List Task -> List Task 47 | moveTaskToStatus taskToFind newTaskStatus tasks = 48 | List.map (\t -> 49 | if t.name == taskToFind.name then 50 | { t | status = newTaskStatus } 51 | else 52 | t 53 | ) tasks 54 | 55 | 56 | moveTask : Model -> String -> ( Model, Cmd Msg ) 57 | moveTask model targetStatus = 58 | let 59 | newTasks = 60 | case model.movingTask of 61 | Just task -> moveTaskToStatus task targetStatus model.tasks 62 | Nothing -> model.tasks 63 | 64 | newModel = { model | tasks = newTasks, movingTask = Nothing } 65 | in 66 | ( newModel, Cmd.batch [ setStorage newModel, Cmd.none ] ) 67 | 68 | 69 | -- DELETE TASK 70 | 71 | deleteTask : Model -> String -> ( Model, Cmd Msg ) 72 | deleteTask model name = 73 | let 74 | newModel = { model | tasks = List.filter (\x -> x.name /= name) model.tasks } 75 | in 76 | ( newModel, Cmd.batch [ setStorage newModel, Cmd.none ] ) 77 | 78 | -- GET TASKS BY STATUS 79 | 80 | getOnGoingTasks : Model -> List Task 81 | getOnGoingTasks model = 82 | List.filter (\t -> t.status == "OnGoing") model.tasks 83 | 84 | getToDoTasks : Model -> List Task 85 | getToDoTasks model = 86 | List.filter (\t -> t.status == "Todo") model.tasks 87 | 88 | getDoneTasks : Model -> List Task 89 | getDoneTasks model = 90 | List.filter (\t -> t.status == "Done") model.tasks 91 | 92 | 93 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate glium; 3 | extern crate glium_glyph; 4 | 5 | use glium::{glutin, Surface}; 6 | 7 | mod cmdline; 8 | mod constants; 9 | mod editor; 10 | mod layout_manager; 11 | mod ui; 12 | 13 | use cmdline::CmdlineView; 14 | use editor::EditorView; 15 | use layout_manager::LayoutManager; 16 | 17 | #[derive(Copy, Clone)] 18 | pub struct Vertex { 19 | position: [f32; 2], 20 | } 21 | implement_vertex!(Vertex, position); 22 | 23 | fn main() { 24 | let mut events_loop = glutin::EventsLoop::new(); 25 | let wb = glutin::WindowBuilder::new() 26 | .with_dimensions(glium::glutin::dpi::LogicalSize::new(960.0, 600.0)) 27 | .with_title("SnarkyEd"); 28 | let cb = glutin::ContextBuilder::new(); 29 | let display = glium::Display::new(wb, cb, &events_loop).unwrap(); 30 | 31 | let mut layout = LayoutManager { 32 | views: vec![ 33 | Box::new(EditorView::new("assets/source.txt", &display)), 34 | Box::new(CmdlineView::new(&display)), 35 | ], 36 | }; 37 | 38 | let mut closed = false; 39 | 40 | while !closed { 41 | layout.update_views(&display); 42 | 43 | let mut target = display.draw(); 44 | let color = ui::color::hex("#1B262B"); 45 | target.clear_color_srgb(color.r, color.g, color.b, color.a); 46 | layout.draw(&display, &mut target); 47 | target.finish().unwrap(); 48 | 49 | events_loop.poll_events(|ev| { 50 | match ev { 51 | glutin::Event::WindowEvent { event, .. } => match event { 52 | // Broadcast input event 53 | glutin::WindowEvent::ReceivedCharacter(c) => { 54 | if c as u32 == 127 { 55 | layout.pop_char(); 56 | } else { 57 | layout.push_char(c); 58 | } 59 | } 60 | // Other window events 61 | glutin::WindowEvent::Resized(logical_size) => { 62 | let hidpi_factor = display.gl_window().window().get_hidpi_factor(); 63 | display 64 | .gl_window() 65 | .resize(logical_size.to_physical(hidpi_factor)); 66 | } 67 | glutin::WindowEvent::CloseRequested => closed = true, 68 | glutin::WindowEvent::KeyboardInput { 69 | input: 70 | glutin::KeyboardInput { 71 | virtual_keycode: Some(virtual_code), 72 | state, 73 | modifiers, 74 | .. 75 | }, 76 | .. 77 | } => layout.handle_input(virtual_code, state, modifiers), 78 | _ => (), 79 | }, 80 | _ => (), 81 | } 82 | }); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/ui/panel.rs: -------------------------------------------------------------------------------- 1 | use crate::Vertex; 2 | use glium::{Display, Frame, Surface}; 3 | 4 | pub struct Panel { 5 | pub position: [f32; 2], 6 | pub size: [f32; 2], 7 | pub color: [f32; 4], 8 | pub vb: glium::VertexBuffer, 9 | pub ib: glium::IndexBuffer, 10 | pub pg: glium::Program, 11 | } 12 | 13 | impl Panel { 14 | pub fn new(display: &Display, position: [f32; 2], size: [f32; 2], color: [f32; 4]) -> Panel { 15 | let (screen_width, screen_height) = display.get_framebuffer_dimensions(); 16 | let hidpi_factor = display.gl_window().window().get_hidpi_factor() as f32; 17 | let (origin_width, origin_height) = ( 18 | screen_width as f32 / hidpi_factor / 2.0, 19 | screen_height as f32 / hidpi_factor / 2.0, 20 | ); 21 | let [x, y] = position; 22 | let [width, height] = size; 23 | let v_top_left = Vertex { 24 | position: [ 25 | (x - origin_width) / origin_width, 26 | (origin_height - y) / origin_height, 27 | ], 28 | }; 29 | let v_top_right = Vertex { 30 | position: [ 31 | (x + width - origin_width) / origin_width, 32 | (origin_height - y) / origin_height, 33 | ], 34 | }; 35 | let v_bottom_right = Vertex { 36 | position: [ 37 | (x + width - origin_width) / origin_width, 38 | (origin_height - (y + height)) / origin_height, 39 | ], 40 | }; 41 | let v_bottom_left = Vertex { 42 | position: [ 43 | (x - origin_width) / origin_width, 44 | (origin_height - (y + height)) / origin_height, 45 | ], 46 | }; 47 | let shape = vec![v_top_left, v_top_right, v_bottom_right, v_bottom_left]; 48 | let indices: [u16; 6] = [0, 1, 2, 2, 0, 3]; 49 | let vb = glium::VertexBuffer::new(display, &shape).unwrap(); 50 | let ib = glium::IndexBuffer::new( 51 | display, 52 | glium::index::PrimitiveType::TrianglesList, 53 | &indices, 54 | ) 55 | .unwrap(); 56 | let vertex_shader_src = r#" 57 | #version 140 58 | in vec2 position; 59 | void main() { 60 | gl_Position = vec4(position, 0.0, 1.0); 61 | } 62 | "#; 63 | 64 | let fragment_shader_src = &format!(r#" 65 | #version 140 66 | out vec4 color; 67 | void main() {{ 68 | color = vec4({}, {}, {}, {}); 69 | }} 70 | "#, 71 | color[0], color[1], color[2], color[3] 72 | ); 73 | let pg = glium::Program::from_source(display, vertex_shader_src, fragment_shader_src, None) 74 | .unwrap(); 75 | Panel { 76 | position: position, 77 | size: size, 78 | color: color, 79 | vb: vb, 80 | ib: ib, 81 | pg: pg, 82 | } 83 | } 84 | 85 | pub fn draw(&mut self, target: &mut Frame) { 86 | target 87 | .draw( 88 | &self.vb, 89 | &self.ib, 90 | &self.pg, 91 | &glium::uniforms::EmptyUniforms, 92 | &Default::default(), 93 | ) 94 | .unwrap(); 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/cmdline/mod.rs: -------------------------------------------------------------------------------- 1 | use glium::glutin::{ElementState, ModifiersState, VirtualKeyCode}; 2 | use glium::{Display, Frame}; 3 | use glium_glyph::glyph_brush::rusttype::Rect; 4 | use glium_glyph::glyph_brush::{rusttype::Font, GlyphCruncher, Section}; 5 | use glium_glyph::GlyphBrush; 6 | 7 | use crate::constants::{BASE_FONT_SIZE, CMD_SHIFT_HOLD, NO_MODIFIERS}; 8 | use crate::layout_manager::View; 9 | use crate::ui::panel::Panel; 10 | use crate::ui::color; 11 | 12 | pub struct CmdlineView<'a, 'b> { 13 | glyph_brush: GlyphBrush<'a, 'b>, 14 | padding: f32, 15 | font_size: f32, 16 | letter_size: Rect, 17 | command_text: String, 18 | visible: bool, 19 | background: Panel, 20 | } 21 | 22 | impl<'a, 'b> CmdlineView<'a, 'b> { 23 | pub fn new(display: &Display) -> CmdlineView<'a, 'b> { 24 | let font_regular: &[u8] = include_bytes!("../../assets/haskplex.ttf"); 25 | let fonts = vec![Font::from_bytes(font_regular).unwrap()]; 26 | let mut gb = GlyphBrush::new(display, fonts); 27 | let hidpi_factor = display.gl_window().window().get_hidpi_factor() as f32; 28 | let font_size = BASE_FONT_SIZE * hidpi_factor; 29 | let letter_size = gb 30 | .glyph_bounds(Section { 31 | text: "0", 32 | scale: glyph_brush::rusttype::Scale::uniform(font_size), 33 | ..Section::default() 34 | }) 35 | .unwrap(); 36 | 37 | let screen_dims = display.get_framebuffer_dimensions(); 38 | let bg_w = 600.0; let bg_h = 30.0; 39 | let bg_x = screen_dims.0 as f32 / hidpi_factor / 2.0 - bg_w / 2.0; 40 | let bg_y = screen_dims.1 as f32 / hidpi_factor / 2.0 - bg_h / 2.0; 41 | 42 | CmdlineView { 43 | glyph_brush: gb, 44 | padding: 30.0, 45 | font_size: font_size, 46 | letter_size: letter_size, 47 | command_text: "Hello".to_owned(), 48 | visible: false, 49 | background: Panel::new(&display, [bg_x, bg_y], [bg_w, bg_h], color::hex("#4A148C").as_slice()), 50 | } 51 | } 52 | } 53 | 54 | impl<'a, 'b> View for CmdlineView<'a, 'b> { 55 | fn update(&mut self, display: &Display) { 56 | let hidpi_factor = display.gl_window().window().get_hidpi_factor() as f32; 57 | self.font_size = BASE_FONT_SIZE * hidpi_factor; 58 | let screen_dims = display.get_framebuffer_dimensions(); 59 | let text_x = screen_dims.0 as f32 / hidpi_factor / 2.0 - (300.0 / hidpi_factor) + self.padding * hidpi_factor; 60 | let text_y = screen_dims.1 as f32 / 2.0 - self.font_size / 2.0; 61 | 62 | self.glyph_brush.queue(Section { 63 | text: &self.command_text, 64 | bounds: (screen_dims.0 as f32 - self.padding, screen_dims.1 as f32), 65 | screen_position: (text_x, text_y), 66 | scale: glyph_brush::rusttype::Scale::uniform(self.font_size), 67 | color: color::hex("#FF5F56").as_slice(), 68 | ..Section::default() 69 | }); 70 | } 71 | 72 | fn draw(&mut self, display: &Display, target: &mut Frame) { 73 | if self.visible { 74 | self.background.draw(target); 75 | self.glyph_brush.draw_queued(display, target); 76 | } 77 | } 78 | 79 | fn handle_input( 80 | &mut self, 81 | key_code: VirtualKeyCode, 82 | state: ElementState, 83 | modifiers: ModifiersState, 84 | ) { 85 | match (key_code, state, modifiers) { 86 | (VirtualKeyCode::P, ElementState::Pressed, CMD_SHIFT_HOLD) => { 87 | self.visible = true; 88 | self.command_text = String::new(); 89 | } 90 | (VirtualKeyCode::Escape, ElementState::Pressed, NO_MODIFIERS) => { 91 | self.visible = false; 92 | } 93 | _ => (), 94 | } 95 | } 96 | 97 | fn push_char(&mut self, c: char) { 98 | if self.visible { 99 | self.command_text.push(c); 100 | } 101 | } 102 | 103 | fn pop_char(&mut self) { 104 | if self.visible { 105 | self.command_text.pop(); 106 | } 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/editor/mod.rs: -------------------------------------------------------------------------------- 1 | mod buffer; 2 | mod cursor; 3 | 4 | use glium::glutin::{ElementState, ModifiersState, VirtualKeyCode}; 5 | use glium::{Display, Frame}; 6 | use glium_glyph::glyph_brush::rusttype::Rect; 7 | use glium_glyph::glyph_brush::{rusttype::Font, GlyphCruncher, Section}; 8 | use glium_glyph::GlyphBrush; 9 | 10 | use buffer::Buffer; 11 | use cursor::Cursor; 12 | 13 | use crate::constants::{BASE_FONT_SIZE, CTRL_HOLD, NO_MODIFIERS, SHIFT_HOLD}; 14 | use crate::layout_manager::View; 15 | use crate::ui; 16 | 17 | pub struct EditorView<'a, 'b> { 18 | pub buffer: Buffer, 19 | cursor: Cursor, 20 | glyph_brush: GlyphBrush<'a, 'b>, 21 | padding: f32, 22 | font_size: f32, 23 | offset_y: usize, 24 | viewport_rows: usize, 25 | letter_size: Rect, 26 | last_column: i32, 27 | } 28 | 29 | impl<'a, 'b> EditorView<'a, 'b> { 30 | pub fn new(file: &str, display: &Display) -> EditorView<'a, 'b> { 31 | let font_regular: &[u8] = include_bytes!("../../assets/haskplex.ttf"); 32 | let fonts = vec![Font::from_bytes(font_regular).unwrap()]; 33 | let hidpi_factor = display.gl_window().window().get_hidpi_factor() as f32; 34 | let font_size = BASE_FONT_SIZE * hidpi_factor; 35 | let mut gb = GlyphBrush::new(display, fonts); 36 | let letter_size = gb 37 | .glyph_bounds(Section { 38 | text: "0", 39 | scale: glyph_brush::rusttype::Scale::uniform(font_size), 40 | ..Section::default() 41 | }) 42 | .unwrap(); 43 | 44 | EditorView { 45 | buffer: Buffer::new(file), 46 | cursor: Cursor::new(), 47 | glyph_brush: gb, 48 | padding: 30.0, 49 | font_size: font_size, 50 | offset_y: 0, 51 | viewport_rows: 0, 52 | letter_size: letter_size, 53 | last_column: -1, 54 | } 55 | } 56 | 57 | fn scroll_down(&mut self, step: usize) { 58 | if self.offset_y + self.cursor.row as usize + step < self.buffer.get_lines_count() { 59 | self.offset_y += step; 60 | } 61 | } 62 | 63 | fn scroll_up(&mut self, step: usize) { 64 | if self.offset_y as i32 - step as i32 >= 0 { 65 | self.offset_y -= step; 66 | } 67 | } 68 | 69 | fn move_cursor_down(&mut self) { 70 | if self.cursor.row as usize + 1 > self.viewport_rows - 1 { 71 | self.scroll_down(1); 72 | } else { 73 | self.cursor.row += 1; 74 | } 75 | if self.last_column != -1 { 76 | self.cursor.col = self.last_column; 77 | } 78 | self.last_column = -1; 79 | self.move_to_eol(true); 80 | } 81 | 82 | fn move_cursor_up(&mut self) { 83 | if self.cursor.row > 0 { 84 | self.cursor.row -= 1; 85 | } else { 86 | self.scroll_up(1); 87 | } 88 | if self.last_column != -1 { 89 | self.cursor.col = self.last_column; 90 | } 91 | self.last_column = -1; 92 | self.move_to_eol(true); 93 | } 94 | 95 | fn move_cursor_left(&mut self) { 96 | if self.cursor.col > 0 { 97 | self.cursor.col -= 1; 98 | } 99 | self.last_column = -1; 100 | } 101 | 102 | fn move_cursor_right(&mut self) { 103 | let current_line = self 104 | .buffer 105 | .get_line_at(self.offset_y + self.cursor.row as usize); 106 | if current_line.len() - 1 > self.cursor.col as usize { 107 | self.last_column = self.cursor.col; 108 | self.cursor.col += 1; 109 | } 110 | self.last_column = -1; 111 | } 112 | 113 | fn move_to_bol(&mut self) { 114 | self.cursor.col = 0; 115 | self.last_column = -1; 116 | } 117 | 118 | fn move_to_eol(&mut self, try_first: bool) { 119 | let current_line = self 120 | .buffer 121 | .get_line_at(self.offset_y + self.cursor.row as usize); 122 | if try_first { 123 | if self.cursor.col as usize > current_line.len() { 124 | self.last_column = self.cursor.col; 125 | self.cursor.col = current_line.len() as i32 - 1; 126 | } 127 | } else { 128 | self.cursor.col = current_line.len() as i32 - 1; 129 | self.last_column = -1; 130 | } 131 | } 132 | } 133 | 134 | impl<'a, 'b> View for EditorView<'a, 'b> { 135 | fn update(&mut self, display: &Display) { 136 | let hidpi_factor = display.gl_window().window().get_hidpi_factor() as f32; 137 | self.font_size = BASE_FONT_SIZE * hidpi_factor; 138 | 139 | let screen_dims = display.get_framebuffer_dimensions(); 140 | self.viewport_rows = (screen_dims.1 as f32 / self.font_size) as usize; 141 | 142 | let content_to_draw = self 143 | .buffer 144 | .get_lines(self.offset_y, self.offset_y + self.viewport_rows); 145 | let whitespace_content_to_draw = self 146 | .buffer 147 | .get_lines(self.offset_y, self.offset_y + self.viewport_rows) 148 | .replace(' ', "·"); 149 | 150 | self.glyph_brush.queue(Section { 151 | text: &whitespace_content_to_draw, 152 | bounds: (screen_dims.0 as f32 - self.padding, screen_dims.1 as f32), 153 | screen_position: ((self.padding / 2.0), (self.padding / 2.0)), 154 | scale: glyph_brush::rusttype::Scale::uniform(self.font_size), 155 | color: ui::color::hex("#293940").as_slice(), 156 | ..Section::default() 157 | }); 158 | 159 | self.glyph_brush.queue(Section { 160 | text: &content_to_draw, 161 | bounds: (screen_dims.0 as f32 - self.padding, screen_dims.1 as f32), 162 | screen_position: ((self.padding / 2.0), (self.padding / 2.0)), 163 | scale: glyph_brush::rusttype::Scale::uniform(self.font_size), 164 | color: ui::color::hex("#E6FFFF").as_slice(), 165 | ..Section::default() 166 | }); 167 | 168 | self.glyph_brush.queue(Section { 169 | text: "█", 170 | bounds: ( 171 | screen_dims.0 as f32 - self.padding, 172 | screen_dims.1 as f32 - self.padding, 173 | ), 174 | screen_position: ( 175 | (self.padding / 2.0) + (self.letter_size.width() * self.cursor.col as f32), 176 | (self.padding / 2.0) + (self.letter_size.height() * self.cursor.row as f32), 177 | ), 178 | scale: glyph_brush::rusttype::Scale::uniform(self.font_size), 179 | color: ui::color::hexa("#3A60D7", 0.4).as_slice(), 180 | ..Section::default() 181 | }); 182 | } 183 | 184 | fn draw(&mut self, display: &Display, target: &mut Frame) { 185 | self.glyph_brush.draw_queued(display, target); 186 | } 187 | 188 | fn handle_input( 189 | &mut self, 190 | key_code: VirtualKeyCode, 191 | state: ElementState, 192 | modifiers: ModifiersState, 193 | ) { 194 | match (key_code, state, modifiers) { 195 | (VirtualKeyCode::J, ElementState::Pressed, NO_MODIFIERS) => { 196 | self.move_cursor_down(); 197 | } 198 | (VirtualKeyCode::K, ElementState::Pressed, NO_MODIFIERS) => { 199 | self.move_cursor_up(); 200 | } 201 | (VirtualKeyCode::H, ElementState::Pressed, NO_MODIFIERS) => { 202 | self.move_cursor_left(); 203 | } 204 | (VirtualKeyCode::L, ElementState::Pressed, NO_MODIFIERS) => { 205 | self.move_cursor_right(); 206 | } 207 | (VirtualKeyCode::Key0, ElementState::Pressed, NO_MODIFIERS) => { 208 | self.move_to_bol(); 209 | } 210 | (VirtualKeyCode::Key4, ElementState::Pressed, SHIFT_HOLD) => { 211 | self.move_to_eol(false); 212 | } 213 | (VirtualKeyCode::J, ElementState::Pressed, CTRL_HOLD) => { 214 | self.scroll_down(10); 215 | } 216 | (VirtualKeyCode::K, ElementState::Pressed, CTRL_HOLD) => { 217 | self.scroll_up(10); 218 | } 219 | _ => (), 220 | } 221 | } 222 | 223 | fn push_char(&mut self, c: char) {} 224 | 225 | fn pop_char(&mut self) {} 226 | } 227 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "andrew" 5 | version = "0.2.1" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | dependencies = [ 8 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 9 | "line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 10 | "rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", 11 | "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", 12 | "xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 13 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 14 | ] 15 | 16 | [[package]] 17 | name = "android_glue" 18 | version = "0.2.3" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | 21 | [[package]] 22 | name = "approx" 23 | version = "0.3.2" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | dependencies = [ 26 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 27 | ] 28 | 29 | [[package]] 30 | name = "arrayvec" 31 | version = "0.5.1" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | 34 | [[package]] 35 | name = "autocfg" 36 | version = "0.1.7" 37 | source = "registry+https://github.com/rust-lang/crates.io-index" 38 | 39 | [[package]] 40 | name = "backtrace" 41 | version = "0.3.40" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | dependencies = [ 44 | "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 45 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 46 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 47 | "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 48 | ] 49 | 50 | [[package]] 51 | name = "backtrace-sys" 52 | version = "0.1.32" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | dependencies = [ 55 | "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", 56 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 57 | ] 58 | 59 | [[package]] 60 | name = "bitflags" 61 | version = "1.2.1" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | 64 | [[package]] 65 | name = "block" 66 | version = "0.1.6" 67 | source = "registry+https://github.com/rust-lang/crates.io-index" 68 | 69 | [[package]] 70 | name = "byteorder" 71 | version = "1.3.2" 72 | source = "registry+https://github.com/rust-lang/crates.io-index" 73 | 74 | [[package]] 75 | name = "cc" 76 | version = "1.0.47" 77 | source = "registry+https://github.com/rust-lang/crates.io-index" 78 | 79 | [[package]] 80 | name = "cfg-if" 81 | version = "0.1.10" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | 84 | [[package]] 85 | name = "cgl" 86 | version = "0.2.3" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | dependencies = [ 89 | "gleam 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", 90 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 91 | ] 92 | 93 | [[package]] 94 | name = "cloudabi" 95 | version = "0.0.3" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | dependencies = [ 98 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 99 | ] 100 | 101 | [[package]] 102 | name = "cocoa" 103 | version = "0.18.5" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | dependencies = [ 106 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 107 | "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 108 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 109 | "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", 110 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 111 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 112 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 113 | ] 114 | 115 | [[package]] 116 | name = "core-foundation" 117 | version = "0.6.4" 118 | source = "registry+https://github.com/rust-lang/crates.io-index" 119 | dependencies = [ 120 | "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 121 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 122 | ] 123 | 124 | [[package]] 125 | name = "core-foundation-sys" 126 | version = "0.6.2" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | 129 | [[package]] 130 | name = "core-graphics" 131 | version = "0.17.3" 132 | source = "registry+https://github.com/rust-lang/crates.io-index" 133 | dependencies = [ 134 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 135 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 136 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 137 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 138 | ] 139 | 140 | [[package]] 141 | name = "crossbeam-deque" 142 | version = "0.7.2" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | dependencies = [ 145 | "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 146 | "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 147 | ] 148 | 149 | [[package]] 150 | name = "crossbeam-epoch" 151 | version = "0.8.0" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | dependencies = [ 154 | "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 155 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 156 | "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 157 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 158 | "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 159 | "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 160 | ] 161 | 162 | [[package]] 163 | name = "crossbeam-utils" 164 | version = "0.6.6" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | dependencies = [ 167 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 168 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 169 | ] 170 | 171 | [[package]] 172 | name = "crossbeam-utils" 173 | version = "0.7.0" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | dependencies = [ 176 | "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 177 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 178 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 179 | ] 180 | 181 | [[package]] 182 | name = "derivative" 183 | version = "1.0.3" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | dependencies = [ 186 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 187 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 188 | "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", 189 | ] 190 | 191 | [[package]] 192 | name = "dlib" 193 | version = "0.4.1" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | dependencies = [ 196 | "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 197 | ] 198 | 199 | [[package]] 200 | name = "downcast-rs" 201 | version = "1.1.1" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | 204 | [[package]] 205 | name = "fnv" 206 | version = "1.0.6" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | 209 | [[package]] 210 | name = "foreign-types" 211 | version = "0.3.2" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | dependencies = [ 214 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 215 | ] 216 | 217 | [[package]] 218 | name = "foreign-types-shared" 219 | version = "0.1.1" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | 222 | [[package]] 223 | name = "fuchsia-cprng" 224 | version = "0.1.1" 225 | source = "registry+https://github.com/rust-lang/crates.io-index" 226 | 227 | [[package]] 228 | name = "gl_generator" 229 | version = "0.11.0" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | dependencies = [ 232 | "khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 233 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 234 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 235 | ] 236 | 237 | [[package]] 238 | name = "gl_generator" 239 | version = "0.13.1" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | dependencies = [ 242 | "khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 243 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 244 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 245 | ] 246 | 247 | [[package]] 248 | name = "gleam" 249 | version = "0.6.19" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | dependencies = [ 252 | "gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", 253 | ] 254 | 255 | [[package]] 256 | name = "glium" 257 | version = "0.25.1" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | dependencies = [ 260 | "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", 261 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 262 | "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 263 | "glutin 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)", 264 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 265 | "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 266 | "takeable-option 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 267 | ] 268 | 269 | [[package]] 270 | name = "glium-glyph" 271 | version = "0.6.0" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | dependencies = [ 274 | "glium 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", 275 | "glyph_brush 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 276 | ] 277 | 278 | [[package]] 279 | name = "glutin" 280 | version = "0.21.1" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | dependencies = [ 283 | "android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 284 | "cgl 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 285 | "cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)", 286 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 287 | "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", 288 | "derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 289 | "glutin_egl_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 290 | "glutin_emscripten_sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 291 | "glutin_gles2_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 292 | "glutin_glx_sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 293 | "glutin_wgl_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 294 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 295 | "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 296 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 297 | "osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 298 | "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 299 | "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 300 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 301 | "winit 0.19.5 (registry+https://github.com/rust-lang/crates.io-index)", 302 | ] 303 | 304 | [[package]] 305 | name = "glutin_egl_sys" 306 | version = "0.1.3" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | dependencies = [ 309 | "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 310 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 311 | ] 312 | 313 | [[package]] 314 | name = "glutin_emscripten_sys" 315 | version = "0.1.0" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | 318 | [[package]] 319 | name = "glutin_gles2_sys" 320 | version = "0.1.3" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | dependencies = [ 323 | "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 324 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 325 | ] 326 | 327 | [[package]] 328 | name = "glutin_glx_sys" 329 | version = "0.1.5" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | dependencies = [ 332 | "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 333 | "x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)", 334 | ] 335 | 336 | [[package]] 337 | name = "glutin_wgl_sys" 338 | version = "0.1.3" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | dependencies = [ 341 | "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 342 | ] 343 | 344 | [[package]] 345 | name = "glyph_brush" 346 | version = "0.5.4" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | dependencies = [ 349 | "glyph_brush 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 350 | ] 351 | 352 | [[package]] 353 | name = "glyph_brush" 354 | version = "0.6.1" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | dependencies = [ 357 | "glyph_brush_layout 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 358 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 359 | "ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 360 | "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 361 | "rusttype 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 362 | "twox-hash 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 363 | ] 364 | 365 | [[package]] 366 | name = "glyph_brush_layout" 367 | version = "0.1.8" 368 | source = "registry+https://github.com/rust-lang/crates.io-index" 369 | dependencies = [ 370 | "rusttype 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 371 | "xi-unicode 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 372 | ] 373 | 374 | [[package]] 375 | name = "hermit-abi" 376 | version = "0.1.3" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | dependencies = [ 379 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 380 | ] 381 | 382 | [[package]] 383 | name = "khronos_api" 384 | version = "3.1.0" 385 | source = "registry+https://github.com/rust-lang/crates.io-index" 386 | 387 | [[package]] 388 | name = "lazy_static" 389 | version = "1.4.0" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | 392 | [[package]] 393 | name = "libc" 394 | version = "0.2.65" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | 397 | [[package]] 398 | name = "libloading" 399 | version = "0.5.2" 400 | source = "registry+https://github.com/rust-lang/crates.io-index" 401 | dependencies = [ 402 | "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", 403 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 404 | ] 405 | 406 | [[package]] 407 | name = "line_drawing" 408 | version = "0.7.0" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | dependencies = [ 411 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 412 | ] 413 | 414 | [[package]] 415 | name = "linked-hash-map" 416 | version = "0.5.2" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | 419 | [[package]] 420 | name = "lock_api" 421 | version = "0.3.1" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | dependencies = [ 424 | "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 425 | ] 426 | 427 | [[package]] 428 | name = "log" 429 | version = "0.4.8" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | dependencies = [ 432 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 433 | ] 434 | 435 | [[package]] 436 | name = "malloc_buf" 437 | version = "0.0.6" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | dependencies = [ 440 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 441 | ] 442 | 443 | [[package]] 444 | name = "maybe-uninit" 445 | version = "2.0.0" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | 448 | [[package]] 449 | name = "memmap" 450 | version = "0.7.0" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | dependencies = [ 453 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 454 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 455 | ] 456 | 457 | [[package]] 458 | name = "memoffset" 459 | version = "0.5.3" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | dependencies = [ 462 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 463 | ] 464 | 465 | [[package]] 466 | name = "nix" 467 | version = "0.14.1" 468 | source = "registry+https://github.com/rust-lang/crates.io-index" 469 | dependencies = [ 470 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 471 | "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", 472 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 473 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 474 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 475 | ] 476 | 477 | [[package]] 478 | name = "num-traits" 479 | version = "0.2.8" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | dependencies = [ 482 | "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 483 | ] 484 | 485 | [[package]] 486 | name = "num_cpus" 487 | version = "1.11.0" 488 | source = "registry+https://github.com/rust-lang/crates.io-index" 489 | dependencies = [ 490 | "hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 491 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 492 | ] 493 | 494 | [[package]] 495 | name = "objc" 496 | version = "0.2.7" 497 | source = "registry+https://github.com/rust-lang/crates.io-index" 498 | dependencies = [ 499 | "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 500 | ] 501 | 502 | [[package]] 503 | name = "ordered-float" 504 | version = "1.0.2" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | dependencies = [ 507 | "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 508 | ] 509 | 510 | [[package]] 511 | name = "osmesa-sys" 512 | version = "0.1.2" 513 | source = "registry+https://github.com/rust-lang/crates.io-index" 514 | dependencies = [ 515 | "shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 516 | ] 517 | 518 | [[package]] 519 | name = "parking_lot" 520 | version = "0.9.0" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | dependencies = [ 523 | "lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 524 | "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 525 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 526 | ] 527 | 528 | [[package]] 529 | name = "parking_lot_core" 530 | version = "0.6.2" 531 | source = "registry+https://github.com/rust-lang/crates.io-index" 532 | dependencies = [ 533 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 534 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 535 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 536 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 537 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 538 | "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 539 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 540 | ] 541 | 542 | [[package]] 543 | name = "percent-encoding" 544 | version = "2.1.0" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | 547 | [[package]] 548 | name = "pkg-config" 549 | version = "0.3.17" 550 | source = "registry+https://github.com/rust-lang/crates.io-index" 551 | 552 | [[package]] 553 | name = "proc-macro2" 554 | version = "0.4.30" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | dependencies = [ 557 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 558 | ] 559 | 560 | [[package]] 561 | name = "quote" 562 | version = "0.6.13" 563 | source = "registry+https://github.com/rust-lang/crates.io-index" 564 | dependencies = [ 565 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 566 | ] 567 | 568 | [[package]] 569 | name = "rand" 570 | version = "0.6.5" 571 | source = "registry+https://github.com/rust-lang/crates.io-index" 572 | dependencies = [ 573 | "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 574 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 575 | "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 576 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 577 | "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 578 | "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 579 | "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 580 | "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 581 | "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 582 | "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 583 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 584 | ] 585 | 586 | [[package]] 587 | name = "rand_chacha" 588 | version = "0.1.1" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | dependencies = [ 591 | "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 592 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 593 | ] 594 | 595 | [[package]] 596 | name = "rand_core" 597 | version = "0.3.1" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | dependencies = [ 600 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 601 | ] 602 | 603 | [[package]] 604 | name = "rand_core" 605 | version = "0.4.2" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | 608 | [[package]] 609 | name = "rand_hc" 610 | version = "0.1.0" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | dependencies = [ 613 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 614 | ] 615 | 616 | [[package]] 617 | name = "rand_isaac" 618 | version = "0.1.1" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | dependencies = [ 621 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 622 | ] 623 | 624 | [[package]] 625 | name = "rand_jitter" 626 | version = "0.1.4" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | dependencies = [ 629 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 630 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 631 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 632 | ] 633 | 634 | [[package]] 635 | name = "rand_os" 636 | version = "0.1.3" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | dependencies = [ 639 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 640 | "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 641 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 642 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 643 | "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 644 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 645 | ] 646 | 647 | [[package]] 648 | name = "rand_pcg" 649 | version = "0.1.2" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | dependencies = [ 652 | "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 653 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 654 | ] 655 | 656 | [[package]] 657 | name = "rand_xorshift" 658 | version = "0.1.1" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | dependencies = [ 661 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 662 | ] 663 | 664 | [[package]] 665 | name = "raw-window-handle" 666 | version = "0.3.1" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | dependencies = [ 669 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 670 | ] 671 | 672 | [[package]] 673 | name = "rdrand" 674 | version = "0.4.0" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | dependencies = [ 677 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 678 | ] 679 | 680 | [[package]] 681 | name = "redox_syscall" 682 | version = "0.1.56" 683 | source = "registry+https://github.com/rust-lang/crates.io-index" 684 | 685 | [[package]] 686 | name = "ropey" 687 | version = "1.1.0" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | dependencies = [ 690 | "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 691 | ] 692 | 693 | [[package]] 694 | name = "rustc-demangle" 695 | version = "0.1.16" 696 | source = "registry+https://github.com/rust-lang/crates.io-index" 697 | 698 | [[package]] 699 | name = "rustc-hash" 700 | version = "1.0.1" 701 | source = "registry+https://github.com/rust-lang/crates.io-index" 702 | dependencies = [ 703 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 704 | ] 705 | 706 | [[package]] 707 | name = "rustc_version" 708 | version = "0.2.3" 709 | source = "registry+https://github.com/rust-lang/crates.io-index" 710 | dependencies = [ 711 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 712 | ] 713 | 714 | [[package]] 715 | name = "rusttype" 716 | version = "0.7.9" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | dependencies = [ 719 | "rusttype 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 720 | ] 721 | 722 | [[package]] 723 | name = "rusttype" 724 | version = "0.8.1" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | dependencies = [ 727 | "approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 728 | "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 729 | "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 730 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 731 | "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 732 | "num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 733 | "ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 734 | "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 735 | "stb_truetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 736 | ] 737 | 738 | [[package]] 739 | name = "same-file" 740 | version = "1.0.5" 741 | source = "registry+https://github.com/rust-lang/crates.io-index" 742 | dependencies = [ 743 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 744 | ] 745 | 746 | [[package]] 747 | name = "scopeguard" 748 | version = "1.0.0" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | 751 | [[package]] 752 | name = "semver" 753 | version = "0.9.0" 754 | source = "registry+https://github.com/rust-lang/crates.io-index" 755 | dependencies = [ 756 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 757 | ] 758 | 759 | [[package]] 760 | name = "semver-parser" 761 | version = "0.7.0" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | 764 | [[package]] 765 | name = "shared_library" 766 | version = "0.1.9" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | dependencies = [ 769 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 770 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 771 | ] 772 | 773 | [[package]] 774 | name = "smallvec" 775 | version = "0.6.13" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | dependencies = [ 778 | "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 779 | ] 780 | 781 | [[package]] 782 | name = "smithay-client-toolkit" 783 | version = "0.4.6" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | dependencies = [ 786 | "andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 787 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 788 | "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 789 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 790 | "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 791 | "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 792 | "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 793 | "wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 794 | "wayland-protocols 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 795 | ] 796 | 797 | [[package]] 798 | name = "snarkyed" 799 | version = "0.1.0" 800 | dependencies = [ 801 | "glium 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)", 802 | "glium-glyph 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 803 | "glyph_brush 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 804 | "ropey 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 805 | ] 806 | 807 | [[package]] 808 | name = "stb_truetype" 809 | version = "0.3.0" 810 | source = "registry+https://github.com/rust-lang/crates.io-index" 811 | dependencies = [ 812 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 813 | ] 814 | 815 | [[package]] 816 | name = "syn" 817 | version = "0.15.44" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | dependencies = [ 820 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 821 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 822 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 823 | ] 824 | 825 | [[package]] 826 | name = "takeable-option" 827 | version = "0.4.0" 828 | source = "registry+https://github.com/rust-lang/crates.io-index" 829 | 830 | [[package]] 831 | name = "twox-hash" 832 | version = "1.5.0" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | dependencies = [ 835 | "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 836 | ] 837 | 838 | [[package]] 839 | name = "unicode-xid" 840 | version = "0.1.0" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | 843 | [[package]] 844 | name = "void" 845 | version = "1.0.2" 846 | source = "registry+https://github.com/rust-lang/crates.io-index" 847 | 848 | [[package]] 849 | name = "walkdir" 850 | version = "2.2.9" 851 | source = "registry+https://github.com/rust-lang/crates.io-index" 852 | dependencies = [ 853 | "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 854 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 855 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 856 | ] 857 | 858 | [[package]] 859 | name = "wayland-client" 860 | version = "0.21.13" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | dependencies = [ 863 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 864 | "downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 865 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 866 | "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 867 | "wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 868 | "wayland-scanner 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 869 | "wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 870 | ] 871 | 872 | [[package]] 873 | name = "wayland-commons" 874 | version = "0.21.13" 875 | source = "registry+https://github.com/rust-lang/crates.io-index" 876 | dependencies = [ 877 | "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", 878 | "wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 879 | ] 880 | 881 | [[package]] 882 | name = "wayland-protocols" 883 | version = "0.21.13" 884 | source = "registry+https://github.com/rust-lang/crates.io-index" 885 | dependencies = [ 886 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 887 | "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 888 | "wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 889 | "wayland-scanner 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 890 | "wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 891 | ] 892 | 893 | [[package]] 894 | name = "wayland-scanner" 895 | version = "0.21.13" 896 | source = "registry+https://github.com/rust-lang/crates.io-index" 897 | dependencies = [ 898 | "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", 899 | "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 900 | "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 901 | ] 902 | 903 | [[package]] 904 | name = "wayland-sys" 905 | version = "0.21.13" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | dependencies = [ 908 | "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 909 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 910 | ] 911 | 912 | [[package]] 913 | name = "winapi" 914 | version = "0.3.8" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | dependencies = [ 917 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 918 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 919 | ] 920 | 921 | [[package]] 922 | name = "winapi-i686-pc-windows-gnu" 923 | version = "0.4.0" 924 | source = "registry+https://github.com/rust-lang/crates.io-index" 925 | 926 | [[package]] 927 | name = "winapi-util" 928 | version = "0.1.2" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | dependencies = [ 931 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 932 | ] 933 | 934 | [[package]] 935 | name = "winapi-x86_64-pc-windows-gnu" 936 | version = "0.4.0" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | 939 | [[package]] 940 | name = "winit" 941 | version = "0.19.5" 942 | source = "registry+https://github.com/rust-lang/crates.io-index" 943 | dependencies = [ 944 | "android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 945 | "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", 946 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 947 | "cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)", 948 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 949 | "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", 950 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 951 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 952 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 953 | "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 954 | "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 955 | "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 956 | "raw-window-handle 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 957 | "smithay-client-toolkit 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 958 | "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", 959 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 960 | "x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)", 961 | ] 962 | 963 | [[package]] 964 | name = "x11-dl" 965 | version = "2.18.4" 966 | source = "registry+https://github.com/rust-lang/crates.io-index" 967 | dependencies = [ 968 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 969 | "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", 970 | "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 971 | "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", 972 | ] 973 | 974 | [[package]] 975 | name = "xdg" 976 | version = "2.2.0" 977 | source = "registry+https://github.com/rust-lang/crates.io-index" 978 | 979 | [[package]] 980 | name = "xi-unicode" 981 | version = "0.2.0" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | 984 | [[package]] 985 | name = "xml-rs" 986 | version = "0.8.0" 987 | source = "registry+https://github.com/rust-lang/crates.io-index" 988 | 989 | [metadata] 990 | "checksum andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b7f09f89872c2b6b29e319377b1fbe91c6f5947df19a25596e121cf19a7b35e" 991 | "checksum android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" 992 | "checksum approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" 993 | "checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" 994 | "checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" 995 | "checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" 996 | "checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" 997 | "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 998 | "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 999 | "checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" 1000 | "checksum cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)" = "aa87058dce70a3ff5621797f1506cb837edd02ac4c0ae642b4542dce802908b8" 1001 | "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 1002 | "checksum cgl 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "55e7ec0b74fe5897894cbc207092c577e87c52f8a59e8ca8d97ef37551f60a49" 1003 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1004 | "checksum cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1706996401131526e36b3b49f0c4d912639ce110996f3ca144d78946727bce54" 1005 | "checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" 1006 | "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" 1007 | "checksum core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9" 1008 | "checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" 1009 | "checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" 1010 | "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" 1011 | "checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" 1012 | "checksum derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "942ca430eef7a3806595a6737bc388bf51adb888d3fc0dd1b50f1c170167ee3a" 1013 | "checksum dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "77e51249a9d823a4cb79e3eca6dcd756153e8ed0157b6c04775d04bf1b13b76a" 1014 | "checksum downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6" 1015 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1016 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1017 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1018 | "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 1019 | "checksum gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39a23d5e872a275135d66895d954269cf5e8661d234eb1c2480f4ce0d586acbd" 1020 | "checksum gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ca98bbde17256e02d17336a6bdb5a50f7d0ccacee502e191d3e3d0ec2f96f84a" 1021 | "checksum gleam 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "cae10d7c99d0e77b4766e850a60898a17c1abaf01075531f1066f03dc7dc5fc5" 1022 | "checksum glium 0.25.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6d7d887755ee729c5204e151db1c81b0b5beb809ef5e01d0eb14847e80a71256" 1023 | "checksum glium-glyph 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d392118989f202770ae8af79078f44a3953b91d392454f805ae24c2ff7290b" 1024 | "checksum glutin 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)" = "938ce7a2b1bbfe1535166133bea3f9c1b46350d2794b49561303575e9e1b9949" 1025 | "checksum glutin_egl_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "23f48987ab6cb2b61ad903b59e54a2fd0c380a7baff68cffd6826b69a73dd326" 1026 | "checksum glutin_emscripten_sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "245b3fdb08df6ffed7585365851f8404af9c7e2dd4b59f15262e968b6a95a0c7" 1027 | "checksum glutin_gles2_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "89996c30857ae1b4de4b5189abf1ea822a20a9fe9e1c93e5e7b862ff0bdd5cdf" 1028 | "checksum glutin_glx_sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1290a5ca5e46fcfa7f66f949cc9d9194b2cb6f2ed61892c8c2b82343631dba57" 1029 | "checksum glutin_wgl_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f801bbc91efc22dd1c4818a47814fc72bf74d024510451b119381579bfa39021" 1030 | "checksum glyph_brush 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "131d7d6f3e7ea0988a707da50ae876f8a9c4c7eb397ccfac9fe9309d4ebe8726" 1031 | "checksum glyph_brush 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6ec4a0787fffc6692ec1ccef9fe09a8e02df1b7fc8fadd5af96662dc979473f9" 1032 | "checksum glyph_brush_layout 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "62b6d460a62dc8a2d3402689b02824ca03d40ec6f1673b9d2016d1f30ce5cb62" 1033 | "checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120" 1034 | "checksum khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 1035 | "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1036 | "checksum libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "1a31a0627fdf1f6a39ec0dd577e101440b7db22672c0901fe00a9a6fbb5c24e8" 1037 | "checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" 1038 | "checksum line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5cc7ad3d82c845bdb5dde34ffdcc7a5fb4d2996e1e1ee0f19c33bc80e15196b9" 1039 | "checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" 1040 | "checksum lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8912e782533a93a167888781b836336a6ca5da6175c05944c86cf28c31104dc" 1041 | "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" 1042 | "checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1043 | "checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" 1044 | "checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" 1045 | "checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" 1046 | "checksum nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" 1047 | "checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" 1048 | "checksum num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "155394f924cdddf08149da25bfb932d226b4a593ca7468b08191ff6335941af5" 1049 | "checksum objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1050 | "checksum ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "18869315e81473c951eb56ad5558bbc56978562d3ecfb87abb7a1e944cea4518" 1051 | "checksum osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" 1052 | "checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" 1053 | "checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" 1054 | "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1055 | "checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" 1056 | "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 1057 | "checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" 1058 | "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" 1059 | "checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" 1060 | "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 1061 | "checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 1062 | "checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 1063 | "checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 1064 | "checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" 1065 | "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 1066 | "checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" 1067 | "checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" 1068 | "checksum raw-window-handle 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9db80d08d3ed847ce4fb3def46de0af4bfb6155bd09bd6eaf28b5ac72541c1f1" 1069 | "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 1070 | "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" 1071 | "checksum ropey 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba326a8508a4add47e7b260333aa2d896213a5f3572fde11ed6e9130241b7f71" 1072 | "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 1073 | "checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8" 1074 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1075 | "checksum rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)" = "310942406a39981bed7e12b09182a221a29e0990f3e7e0c971f131922ed135d5" 1076 | "checksum rusttype 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6fa38506b5cbf2fb67f915e2725cb5012f1b9a785b0ab55c4733acda5f6554ef" 1077 | "checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" 1078 | "checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" 1079 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1080 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1081 | "checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" 1082 | "checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" 1083 | "checksum smithay-client-toolkit 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2ccb8c57049b2a34d2cc2b203fa785020ba0129d31920ef0d317430adaf748fa" 1084 | "checksum stb_truetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "824210d6fb52cbc3ad2545270ead6860c7311aa5450642b078da4515937b6f7a" 1085 | "checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" 1086 | "checksum takeable-option 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d77adff586b9bd922afef7791341ed94b09845e11225929217efe949e6366d43" 1087 | "checksum twox-hash 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3bfd5b7557925ce778ff9b9ef90e3ade34c524b5ff10e239c69a42d546d2af56" 1088 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1089 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1090 | "checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" 1091 | "checksum wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "49963e5f9eeaf637bfcd1b9f0701c99fd5cd05225eb51035550d4272806f2713" 1092 | "checksum wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "40c08896768b667e1df195d88a62a53a2d1351a1ed96188be79c196b35bb32ec" 1093 | "checksum wayland-protocols 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "4afde2ea2a428eee6d7d2c8584fdbe8b82eee8b6c353e129a434cd6e07f42145" 1094 | "checksum wayland-scanner 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3828c568714507315ee425a9529edc4a4aa9901409e373e9e0027e7622b79e" 1095 | "checksum wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "520ab0fd578017a0ee2206623ba9ef4afe5e8f23ca7b42f6acfba2f4e66b1628" 1096 | "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 1097 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1098 | "checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" 1099 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1100 | "checksum winit 0.19.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1e96eb4bb472fa43e718e8fa4aef82f86cd9deac9483a1e1529230babdb394a8" 1101 | "checksum x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)" = "be65e1342a3baae65439cd03306778831a3d133b0d20243a7fb83fd5cf403c58" 1102 | "checksum xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" 1103 | "checksum xi-unicode 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7395cdb9d0a6219fa0ea77d08c946adf9c1984c72fcd443ace30365f3daadef7" 1104 | "checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5" 1105 | --------------------------------------------------------------------------------