Render to exactly the size of the terminal

This commit is contained in:
2020-11-29 10:52:11 -08:00
parent 8f8c42a853
commit 70e6cdf0cb
2 changed files with 10 additions and 6 deletions

View File

@@ -110,8 +110,6 @@ fn main() {
let loader = Loader::new(opt.directory); let loader = Loader::new(opt.directory);
let mut viewer = Viewer::default(); let mut viewer = Viewer::default();
viewer.loader = loader; viewer.loader = loader;
//let frame = loader.load_next(None);
//viewer.switch_frame(frame.unwrap());
// disable line buffering // disable line buffering
crossterm::terminal::enable_raw_mode().unwrap(); crossterm::terminal::enable_raw_mode().unwrap();
@@ -128,6 +126,6 @@ fn main() {
_ => {}, _ => {},
} }
} }
// otherwise terminal is left in a wacky state // return the terminal to its original state
crossterm::terminal::disable_raw_mode().unwrap(); crossterm::terminal::disable_raw_mode().unwrap();
} }

View File

@@ -76,8 +76,13 @@ struct RenderSteps<'a> {
} }
impl<'a> RenderSteps<'a> { impl<'a> RenderSteps<'a> {
/// Render using default configuration constants
fn render(state: &'a dyn GenericSim, measurements: &'a [Box<dyn AbstractMeasurement>], z: u32) -> RgbImage { fn render(state: &'a dyn GenericSim, measurements: &'a [Box<dyn AbstractMeasurement>], z: u32) -> RgbImage {
let (width, height) = im_size(state, 640, 480); Self::render_configured(state, measurements, z, (640, 480))
}
/// Render, controlling things like the size.
fn render_configured(state: &'a dyn GenericSim, measurements: &'a [Box<dyn AbstractMeasurement>], z: u32, max_size: (u32, u32)) -> RgbImage {
let (width, height) = im_size(state, max_size.0, max_size.1);
trace!("rendering at {}x{} with z={}", width, height, z); trace!("rendering at {}x{} with z={}", width, height, z);
let mut me = Self::new(state, measurements, width, height, z); let mut me = Self::new(state, measurements, width, height, z);
me.render_scalar_field(10.0, false, 2, |cell| { me.render_scalar_field(10.0, false, 2, |cell| {
@@ -274,8 +279,9 @@ pub trait Renderer: Send + Sync {
pub struct ColorTermRenderer; pub struct ColorTermRenderer;
impl Renderer for ColorTermRenderer { impl Renderer for ColorTermRenderer {
fn render_with_image(&self, _state: &dyn GenericSim, im: &RgbImage) { fn render_z_slice(&self, state: &dyn GenericSim, z: u32, measurements: &[Box<dyn AbstractMeasurement>]) {
// TODO: should scale the image to the size of the terminal! let max_size = crossterm::terminal::size().unwrap();
let im = RenderSteps::render_configured(state, measurements, z, (max_size.0 as _, max_size.1 as _));
let mut stdout = std::io::stdout(); let mut stdout = std::io::stdout();
let (w, h) = crossterm::terminal::size().unwrap(); let (w, h) = crossterm::terminal::size().unwrap();
stdout.queue(cursor::MoveTo(0, 0)); stdout.queue(cursor::MoveTo(0, 0));