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

@@ -76,8 +76,13 @@ struct 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 {
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);
let mut me = Self::new(state, measurements, width, height, z);
me.render_scalar_field(10.0, false, 2, |cell| {
@@ -274,8 +279,9 @@ pub trait Renderer: Send + Sync {
pub struct ColorTermRenderer;
impl Renderer for ColorTermRenderer {
fn render_with_image(&self, _state: &dyn GenericSim, im: &RgbImage) {
// TODO: should scale the image to the size of the terminal!
fn render_z_slice(&self, state: &dyn GenericSim, z: u32, measurements: &[Box<dyn AbstractMeasurement>]) {
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 (w, h) = crossterm::terminal::size().unwrap();
stdout.queue(cursor::MoveTo(0, 0));