This commit is contained in:
Jonathan Turner 2019-07-16 15:25:36 +12:00
parent 49ddfa3940
commit 1ecb4401ba
2 changed files with 19 additions and 20 deletions

View File

@ -32,4 +32,4 @@ pub use cli::cli;
pub use errors::ShellError; pub use errors::ShellError;
pub use object::base::{Primitive, Value}; pub use object::base::{Primitive, Value};
pub use parser::parse::text::Text; pub use parser::parse::text::Text;
pub use parser::registry::{Args, CommandConfig, NamedType, PositionalType}; pub use parser::registry::{Args, CommandConfig, NamedType, NamedValue, PositionalType};

View File

@ -14,7 +14,7 @@ impl BinaryView {
impl Plugin for BinaryView { impl Plugin for BinaryView {
fn config(&mut self) -> Result<CommandConfig, ShellError> { fn config(&mut self) -> Result<CommandConfig, ShellError> {
let mut named = IndexMap::new(); let mut named = IndexMap::new();
named.insert("hires".to_string(), NamedType::Switch); named.insert("--lores".to_string(), NamedType::Switch);
Ok(CommandConfig { Ok(CommandConfig {
name: "binaryview".to_string(), name: "binaryview".to_string(),
positional: vec![], positional: vec![],
@ -32,7 +32,7 @@ impl Plugin for BinaryView {
item: Value::Binary(b), item: Value::Binary(b),
.. ..
} => { } => {
let _ = view_binary(&b, args.has("hires")); let _ = view_binary(&b, args.has("lores"));
} }
_ => {} _ => {}
} }
@ -40,17 +40,17 @@ impl Plugin for BinaryView {
} }
} }
fn view_binary(b: &[u8], hires_mode: bool) -> Result<(), Box<dyn std::error::Error>> { fn view_binary(b: &[u8], lores_mode: bool) -> Result<(), Box<dyn std::error::Error>> {
if b.len() > 3 { if b.len() > 3 {
match (b[0], b[1], b[2]) { match (b[0], b[1], b[2]) {
(0x4e, 0x45, 0x53) => { (0x4e, 0x45, 0x53) => {
view_contents_interactive(b, hires_mode)?; view_contents_interactive(b, lores_mode)?;
return Ok(()); return Ok(());
} }
_ => {} _ => {}
} }
} }
view_contents(b, hires_mode)?; view_contents(b, lores_mode)?;
Ok(()) Ok(())
} }
@ -59,17 +59,17 @@ pub struct RenderContext {
pub height: usize, pub height: usize,
pub frame_buffer: Vec<(u8, u8, u8)>, pub frame_buffer: Vec<(u8, u8, u8)>,
pub since_last_button: Vec<usize>, pub since_last_button: Vec<usize>,
pub hires_mode: bool, pub lores_mode: bool,
} }
impl RenderContext { impl RenderContext {
pub fn blank(hires_mode: bool) -> RenderContext { pub fn blank(lores_mode: bool) -> RenderContext {
RenderContext { RenderContext {
width: 0, width: 0,
height: 0, height: 0,
frame_buffer: vec![], frame_buffer: vec![],
since_last_button: vec![0; 8], since_last_button: vec![0; 8],
hires_mode, lores_mode,
} }
} }
pub fn clear(&mut self) { pub fn clear(&mut self) {
@ -174,10 +174,10 @@ impl RenderContext {
Ok(()) Ok(())
} }
pub fn flush(&mut self) -> Result<(), Box<dyn std::error::Error>> { pub fn flush(&mut self) -> Result<(), Box<dyn std::error::Error>> {
if self.hires_mode { if self.lores_mode {
self.render_to_screen_hires()
} else {
self.render_to_screen_lores() self.render_to_screen_lores()
} else {
self.render_to_screen_hires()
} }
} }
pub fn update(&mut self) -> Result<(), Box<dyn std::error::Error>> { pub fn update(&mut self) -> Result<(), Box<dyn std::error::Error>> {
@ -189,10 +189,10 @@ impl RenderContext {
cursor.hide()?; cursor.hide()?;
self.width = terminal_size.0 as usize + 1; self.width = terminal_size.0 as usize + 1;
self.height = if self.hires_mode { self.height = if self.lores_mode {
terminal_size.1 as usize * 2
} else {
terminal_size.1 as usize terminal_size.1 as usize
} else {
terminal_size.1 as usize * 2
}; };
} }
@ -247,7 +247,7 @@ fn load_from_jpg_buffer(buffer: &[u8]) -> Option<(RawImageBuffer)> {
}) })
} }
pub fn view_contents(buffer: &[u8], hires_mode: bool) -> Result<(), Box<dyn std::error::Error>> { pub fn view_contents(buffer: &[u8], lores_mode: bool) -> Result<(), Box<dyn std::error::Error>> {
let mut raw_image_buffer = load_from_png_buffer(buffer); let mut raw_image_buffer = load_from_png_buffer(buffer);
if raw_image_buffer.is_none() { if raw_image_buffer.is_none() {
@ -261,7 +261,7 @@ pub fn view_contents(buffer: &[u8], hires_mode: bool) -> Result<(), Box<dyn std:
} }
let raw_image_buffer = raw_image_buffer.unwrap(); let raw_image_buffer = raw_image_buffer.unwrap();
let mut render_context: RenderContext = RenderContext::blank(hires_mode); let mut render_context: RenderContext = RenderContext::blank(lores_mode);
let _ = render_context.update(); let _ = render_context.update();
render_context.clear(); render_context.clear();
@ -308,7 +308,6 @@ pub fn view_contents(buffer: &[u8], hires_mode: bool) -> Result<(), Box<dyn std:
for pixel in resized_img.pixels() { for pixel in resized_img.pixels() {
use image::Pixel; use image::Pixel;
let rgb = pixel.to_rgb(); let rgb = pixel.to_rgb();
//print!("{}", rgb[0]);
render_context.frame_buffer[count] = (rgb[0], rgb[1], rgb[2]); render_context.frame_buffer[count] = (rgb[0], rgb[1], rgb[2]);
count += 1; count += 1;
} }
@ -333,7 +332,7 @@ pub fn view_contents(buffer: &[u8], hires_mode: bool) -> Result<(), Box<dyn std:
pub fn view_contents_interactive( pub fn view_contents_interactive(
buffer: &[u8], buffer: &[u8],
hires_mode: bool, lores_mode: bool,
) -> Result<(), Box<dyn std::error::Error>> { ) -> Result<(), Box<dyn std::error::Error>> {
use rawkey::{KeyCode, RawKey}; use rawkey::{KeyCode, RawKey};
@ -344,7 +343,7 @@ pub fn view_contents_interactive(
nes.reset(); nes.reset();
if let Ok(_raw) = RawScreen::into_raw_mode() { if let Ok(_raw) = RawScreen::into_raw_mode() {
let mut render_context: RenderContext = RenderContext::blank(hires_mode); let mut render_context: RenderContext = RenderContext::blank(lores_mode);
let input = crossterm::input(); let input = crossterm::input();
let _ = input.read_async(); let _ = input.read_async();
let cursor = cursor(); let cursor = cursor();