Render to exactly the size of the terminal
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
@@ -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));
|
||||||
|
Reference in New Issue
Block a user