mirror of
https://github.com/FliegendeWurst/cursive.git
synced 2024-11-23 17:35:00 +00:00
Better printer cropping
Printer now also crops horizontally. Also applies to hline and vline.
This commit is contained in:
parent
5d9e8f760b
commit
8780dd1dde
@ -1,5 +1,7 @@
|
|||||||
//! Makes drawing on ncurses windows easier.
|
//! Makes drawing on ncurses windows easier.
|
||||||
|
|
||||||
|
use std::cmp::min;
|
||||||
|
|
||||||
use ncurses;
|
use ncurses;
|
||||||
|
|
||||||
use color;
|
use color;
|
||||||
@ -24,21 +26,36 @@ impl Printer {
|
|||||||
|
|
||||||
/// Prints some text at the given position relative to the window.
|
/// Prints some text at the given position relative to the window.
|
||||||
pub fn print<S: ToVec2>(&self, pos: S, text: &str) {
|
pub fn print<S: ToVec2>(&self, pos: S, text: &str) {
|
||||||
let mut p = pos.to_vec2();
|
let p = pos.to_vec2();
|
||||||
if p.y >= self.size.y { return; }
|
if p.y >= self.size.y || p.x >= self.size.x { return; }
|
||||||
p = p + self.offset;
|
// Do we have enough room for the entire line?
|
||||||
|
let room = (self.size.x - p.x) as usize;
|
||||||
|
// We want the number of CHARACTERS, not bytes.
|
||||||
|
let text = match text.char_indices().nth(room) {
|
||||||
|
Some((i,_)) => &text[..i],
|
||||||
|
_ => text,
|
||||||
|
};
|
||||||
|
let p = p + self.offset;
|
||||||
ncurses::mvprintw(p.y as i32, p.x as i32, text);
|
ncurses::mvprintw(p.y as i32, p.x as i32, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Prints a vertical line using the given character.
|
/// Prints a vertical line using the given character.
|
||||||
pub fn print_vline<T: ToVec2>(&self, start: T, len: u32, c: u64) {
|
pub fn print_vline<T: ToVec2>(&self, start: T, len: u32, c: u64) {
|
||||||
let p = start.to_vec2() + self.offset;
|
let p = start.to_vec2();
|
||||||
|
if p.y > self.size.y || p.x > self.size.x { return; }
|
||||||
|
let len = min(len, self.size.y - p.y);
|
||||||
|
|
||||||
|
let p = p + self.offset;
|
||||||
ncurses::mvvline(p.y as i32, p.x as i32, c, len as i32);
|
ncurses::mvvline(p.y as i32, p.x as i32, c, len as i32);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Prints a horizontal line using the given character.
|
/// Prints a horizontal line using the given character.
|
||||||
pub fn print_hline<T: ToVec2>(&self, start: T, len: u32, c: u64) {
|
pub fn print_hline<T: ToVec2>(&self, start: T, len: u32, c: u64) {
|
||||||
let p = start.to_vec2() + self.offset;
|
let p = start.to_vec2();
|
||||||
|
if p.y > self.size.y || p.x > self.size.x { return; }
|
||||||
|
let len = min(len, self.size.x - p.x);
|
||||||
|
|
||||||
|
let p = p + self.offset;
|
||||||
ncurses::mvhline(p.y as i32, p.x as i32, c, len as i32);
|
ncurses::mvhline(p.y as i32, p.x as i32, c, len as i32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user