mod hist;
mod image;
mod lut;
mod state;
pub use self::state::State;
use glium::{backend::Facade, Texture2d};
use imgui::{ImTexture, Textures, Ui};
use ndarray::Array2;
use err::Error;
use interactions;
use lims;
use ticks;
use util;
impl<'ui> UiImage2d for Ui<'ui> {
fn image2d<F>(
&self,
ctx: &F,
textures: &mut Textures<Texture2d>,
texture_id: ImTexture,
image: &Array2<f32>,
state: &mut State,
) -> Result<(), Error>
where
F: Facade,
{
state.vmin = lims::get_vmin(image)?;
state.vmax = lims::get_vmax(image)?;
let window_pos = self.get_window_pos();
let cursor_pos = self.get_cursor_screen_pos();
let window_size = self.get_window_size();
const HIST_WIDTH: f32 = 40.0;
const BAR_WIDTH: f32 = 20.0;
const RIGHT_PADDING: f32 = 100.0;
let image_max_size = (
window_size.0 - HIST_WIDTH - BAR_WIDTH - RIGHT_PADDING,
window_size.1 - (cursor_pos.1 - window_pos.1),
);
let [p, size] = state.show_image(self, ctx, textures, texture_id, image, image_max_size)?;
state.show_hist(
self,
[p.0 + size.0 as f32, p.1],
[HIST_WIDTH, size.1 as f32],
image,
);
state.show_bar(
self,
[p.0 + size.0 as f32 + HIST_WIDTH, p.1],
[BAR_WIDTH, size.1 as f32],
);
Ok(())
}
}
pub trait UiImage2d {
fn image2d<F>(
&self,
ctx: &F,
textures: &mut Textures<Texture2d>,
texture_id: ImTexture,
image: &Array2<f32>,
state: &mut State,
) -> Result<(), Error>
where
F: Facade;
}