1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
extern crate tui; use tui::Terminal; use tui::backend::Backend; use tui::layout::Rect; use tui::style::{Color, Style}; use tui::text::{Span, Spans, Text}; use crate::log; use crate::userinterface::widgets::{BORDERS, EMPTY_SPACES, querierpopup}; pub const RGB_BOX_HEIGHT: u16 = BORDERS + 1; pub const TEXT_HEIGHT: u16 = 3; const EXTRA_SPACES: u16 = 3; const LARGER_ROW: u16 = 31; pub const WIN_WIDTH: u16 = LARGER_ROW + (EXTRA_SPACES + EMPTY_SPACES) * 2 + BORDERS; pub const WIN_HEIGHT: u16 = TEXT_HEIGHT + EMPTY_SPACES + BORDERS + RGB_BOX_HEIGHT + 1; pub fn render<B: Backend>(terminal: &mut Terminal<B>, log: &mut log::Log) { terminal.draw(|frame| { let frame_area = frame.size(); let frame_left = frame_area.left(); let frame_top = frame_area.top(); let frame_width = frame_area.right() - frame_left; let frame_height = frame_area.bottom() - frame_top; let window_area = Rect::new(frame_left + frame_width/2 - WIN_WIDTH/2, frame_top + frame_height/2 - WIN_HEIGHT/2, WIN_WIDTH, WIN_HEIGHT); let keyboard_instructions = Text::from("< 0-9 > to modify RGB values, < ← | → > to move, < Enter > to save modifications"); let (red, green, blue) = log.brushcolor_getvalue(); let rgb_value = vec![Spans::from(vec![ Span::styled(red, Style::default().fg(Color::Red)), Span::styled(green, Style::default().fg(Color::Green)), Span::styled(blue, Style::default().fg(Color::Blue)), ])]; frame.render_widget(querierpopup::QuerierPopupWidget::new( keyboard_instructions, rgb_value, log.brushcolor_getcursor()), window_area); }).unwrap(); }