type-render
korin 3 years ago
parent 9f3b0e01e7
commit a5c0bed37d
  1. 1
      Cargo.toml
  2. 55
      src/main.rs

@ -9,4 +9,5 @@ opt-level = 3
[dependencies] [dependencies]
clipboard = "0.5.0" clipboard = "0.5.0"
num-format = "0.4.4"
sdl2 = { version = "0.35.2" } sdl2 = { version = "0.35.2" }

@ -1,10 +1,11 @@
extern crate sdl2; extern crate sdl2;
use clipboard::{ClipboardProvider, ClipboardContext}; use clipboard::{ClipboardProvider, ClipboardContext};
use num_format::{Locale, ToFormattedString};
use sdl2::event::{Event, WindowEvent}; use sdl2::event::{Event, WindowEvent};
use sdl2::keyboard::Keycode; use sdl2::keyboard::Keycode;
use sdl2::pixels::Color; use sdl2::pixels::Color;
use sdl2::rect::Point; use sdl2::rect::{Point, Rect};
mod editor_render; mod editor_render;
@ -34,13 +35,15 @@ pub fn main() -> Result<(), String> {
let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?; let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?;
let mut window_size = canvas.output_size()?;
let mut buffer = String::new(); let mut buffer = String::new();
let mut cursor_position = 0; let mut cursor_position = 0;
let mut selection_anchor: Option<usize> = None; let mut selection_anchor: Option<usize> = None;
let pad_offset = Point::new(10, 10); let pad_offset = Point::new(10, 10);
let mut draw_text = |text: &str, pos: usize| -> Result<(), String> { let mut draw_text = |window_size: (u32, u32), text: &str, pos: usize| -> Result<(), String> {
// Draw background // Draw background
canvas.set_draw_color(Color::RGB(32, 32, 32)); canvas.set_draw_color(Color::RGB(32, 32, 32));
canvas.clear(); canvas.clear();
@ -55,6 +58,29 @@ pub fn main() -> Result<(), String> {
); );
canvas.draw_points(&fb_text[..])?; canvas.draw_points(&fb_text[..])?;
// Draw info
let status = text.len().to_formatted_string(&Locale::en);
let status_position = Point::new(
pad_offset.x,
window_size.1 as i32 - glyph_metrics.height as i32 * 2
);
canvas.set_draw_color(Color::RGB(16, 64, 64));
canvas.fill_rect(Rect::new(0,
status_position.y - 5,
window_size.0,
glyph_metrics.height as u32 + 10
))?;
canvas.set_draw_color(Color::RGB(127, 240, 240));
let status_bar = editor_render::draw_text(
&glyph_atlas,
&glyph_metrics,
&status,
status_position
);
canvas.draw_points(&status_bar[..])?;
// Draw cursor // Draw cursor
canvas.set_draw_color(Color::RGB(64, 240, 240)); canvas.set_draw_color(Color::RGB(64, 240, 240));
let fb_cursor = editor_render::draw_cursor( let fb_cursor = editor_render::draw_cursor(
@ -70,7 +96,7 @@ pub fn main() -> Result<(), String> {
Ok(()) Ok(())
}; };
draw_text("", cursor_position)?; draw_text(window_size, "", cursor_position)?;
let mut modifier_keys = ModifierKeys {alt: false, ctrl: false, shift: false}; let mut modifier_keys = ModifierKeys {alt: false, ctrl: false, shift: false};
@ -79,8 +105,9 @@ pub fn main() -> Result<(), String> {
for event in sdl_context.event_pump()?.poll_iter() { for event in sdl_context.event_pump()?.poll_iter() {
match event { match event {
Event::Window { win_event, .. } => { Event::Window { win_event, .. } => {
if let WindowEvent::Resized(_w, _h) = win_event { if let WindowEvent::Resized(w, h) = win_event {
draw_text(&buffer, cursor_position)? window_size = (w as u32, h as u32);
draw_text(window_size, &buffer, cursor_position)?
} }
} }
// ESC or SIGKILL // ESC or SIGKILL
@ -130,7 +157,7 @@ pub fn main() -> Result<(), String> {
Some(Keycode::Delete) => { Some(Keycode::Delete) => {
if buffer.len() > 0 && cursor_position < buffer.len() { if buffer.len() > 0 && cursor_position < buffer.len() {
buffer.remove(cursor_position); buffer.remove(cursor_position);
draw_text(&buffer, cursor_position)? draw_text(window_size, &buffer, cursor_position)?
} }
}, },
@ -139,19 +166,19 @@ pub fn main() -> Result<(), String> {
let key = '\n'; let key = '\n';
buffer.insert(cursor_position, key); buffer.insert(cursor_position, key);
cursor_position += 1; cursor_position += 1;
draw_text(&buffer, cursor_position)? draw_text(window_size, &buffer, cursor_position)?
}, },
// HOME key // HOME key
Some(Keycode::Home) => { Some(Keycode::Home) => {
cursor_position = 0; cursor_position = 0;
draw_text(&buffer, cursor_position)? draw_text(window_size, &buffer, cursor_position)?
}, },
// END key // END key
Some(Keycode::End) => { Some(Keycode::End) => {
cursor_position = buffer.len(); cursor_position = buffer.len();
draw_text(&buffer, cursor_position)? draw_text(window_size, &buffer, cursor_position)?
}, },
// Left/Back arrow // Left/Back arrow
@ -159,14 +186,14 @@ pub fn main() -> Result<(), String> {
selection_anchor = None; selection_anchor = None;
cursor_position = usize::checked_sub(cursor_position, 1) cursor_position = usize::checked_sub(cursor_position, 1)
.unwrap_or(0); .unwrap_or(0);
draw_text(&buffer, cursor_position)? draw_text(window_size, &buffer, cursor_position)?
}, },
// Right/Forward arrow // Right/Forward arrow
Some(Keycode::Right) => { Some(Keycode::Right) => {
selection_anchor = None; selection_anchor = None;
cursor_position = (cursor_position + 1).min(buffer.len()); cursor_position = (cursor_position + 1).min(buffer.len());
draw_text(&buffer, cursor_position)? draw_text(window_size, &buffer, cursor_position)?
}, },
// BACKSPACE key // BACKSPACE key
@ -175,7 +202,7 @@ pub fn main() -> Result<(), String> {
// Character backspace; regular // Character backspace; regular
buffer.remove(cursor_position - 1); buffer.remove(cursor_position - 1);
cursor_position -= 1; cursor_position -= 1;
draw_text(&buffer, cursor_position)? draw_text(window_size, &buffer, cursor_position)?
} }
}, },
@ -209,7 +236,7 @@ pub fn main() -> Result<(), String> {
buffer.remove(cursor_position - 1); buffer.remove(cursor_position - 1);
cursor_position -= 1; cursor_position -= 1;
draw_text(&buffer, cursor_position)? draw_text(window_size, &buffer, cursor_position)?
} }
}, },
_ => (), _ => (),
@ -234,7 +261,7 @@ pub fn main() -> Result<(), String> {
buffer.insert(cursor_position, input_char); buffer.insert(cursor_position, input_char);
cursor_position += 1; cursor_position += 1;
draw_text(&buffer, cursor_position)?; draw_text(window_size, &buffer, cursor_position)?;
}, },
_ => {} _ => {}

Loading…
Cancel
Save