mirror of
https://github.com/FliegendeWurst/cursive.git
synced 2024-11-23 17:35:00 +00:00
Add &Backend
to Printer struct
Makes `::B` public but undocumented. Backend is currently an immutable ref, may need to become mutable to be more useful (will need to change the View trait)
This commit is contained in:
parent
05a862d98b
commit
829dd77deb
11
src/lib.rs
11
src/lib.rs
@ -132,6 +132,8 @@ pub struct Cursive {
|
||||
|
||||
running: bool,
|
||||
|
||||
backend: B,
|
||||
|
||||
cb_source: mpsc::Receiver<Box<Fn(&mut Cursive) + Send>>,
|
||||
cb_sink: mpsc::Sender<Box<Fn(&mut Cursive) + Send>>,
|
||||
}
|
||||
@ -140,7 +142,8 @@ new_default!(Cursive);
|
||||
|
||||
// Use the Ncurses backend.
|
||||
// TODO: make this feature-driven
|
||||
type B = NcursesBackend;
|
||||
#[doc(hidden)]
|
||||
pub type B = NcursesBackend;
|
||||
|
||||
impl Cursive {
|
||||
/// Creates a new Cursive root, and initialize ncurses.
|
||||
@ -163,6 +166,7 @@ impl Cursive {
|
||||
running: true,
|
||||
cb_source: rx,
|
||||
cb_sink: tx,
|
||||
backend: NcursesBackend,
|
||||
};
|
||||
|
||||
res.screens.push(views::StackView::new());
|
||||
@ -441,7 +445,7 @@ impl Cursive {
|
||||
fn draw(&mut self) {
|
||||
// TODO: don't clone the theme
|
||||
// Reference it or something
|
||||
let printer = Printer::new(self.screen_size(), self.theme.clone());
|
||||
let printer = Printer::new(self.screen_size(), self.theme.clone(), &mut self.backend);
|
||||
|
||||
// Draw the currently active screen
|
||||
// If the menubar is active, nothing else can be.
|
||||
@ -462,7 +466,8 @@ impl Cursive {
|
||||
|
||||
let printer =
|
||||
printer.sub_printer(Vec2::new(0, offset), printer.size, !selected);
|
||||
self.screen_mut().draw(&printer);
|
||||
let id = self.active_screen;
|
||||
self.screens.get_mut(id).unwrap().draw(&printer);
|
||||
|
||||
B::refresh();
|
||||
}
|
||||
|
@ -12,8 +12,7 @@ use theme::{BorderStyle, ColorStyle, Effect, Theme};
|
||||
use vec::Vec2;
|
||||
|
||||
/// Convenient interface to draw on a subset of the screen.
|
||||
#[derive(Clone)]
|
||||
pub struct Printer {
|
||||
pub struct Printer<'a> {
|
||||
/// Offset into the window this printer should start drawing at.
|
||||
pub offset: Vec2,
|
||||
/// Size of the area we are allowed to draw on.
|
||||
@ -22,16 +21,22 @@ pub struct Printer {
|
||||
pub focused: bool,
|
||||
/// Currently used theme
|
||||
pub theme: Theme,
|
||||
|
||||
backend: &'a B,
|
||||
}
|
||||
|
||||
impl Printer {
|
||||
impl <'a> Printer<'a> {
|
||||
/// Creates a new printer on the given window.
|
||||
pub fn new<T: Into<Vec2>>(size: T, theme: Theme) -> Self {
|
||||
///
|
||||
/// But nobody needs to know that.
|
||||
#[doc(hidden)]
|
||||
pub fn new<T: Into<Vec2>>(size: T, theme: Theme, backend: &'a B) -> Self {
|
||||
Printer {
|
||||
offset: Vec2::zero(),
|
||||
size: size.into(),
|
||||
focused: true,
|
||||
theme: theme,
|
||||
backend: backend,
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,7 +95,9 @@ impl Printer {
|
||||
/// ```no_run
|
||||
/// # use cursive::Printer;
|
||||
/// # use cursive::theme;
|
||||
/// # let printer = Printer::new((6,4), theme::load_default());
|
||||
/// # use cursive::B;
|
||||
/// # let b = B{};
|
||||
/// # let printer = Printer::new((6,4), theme::load_default(), &b);
|
||||
/// printer.with_color(theme::ColorStyle::Highlight, |printer| {
|
||||
/// printer.print((0,0), "This text is highlighted!");
|
||||
/// });
|
||||
@ -121,7 +128,9 @@ impl Printer {
|
||||
/// ```no_run
|
||||
/// # use cursive::Printer;
|
||||
/// # use cursive::theme;
|
||||
/// # let printer = Printer::new((6,4), theme::load_default());
|
||||
/// # use cursive::B;
|
||||
/// # let b = B{};
|
||||
/// # let printer = Printer::new((6,4), theme::load_default(), &b);
|
||||
/// printer.print_box((0,0), (6,4), false);
|
||||
/// ```
|
||||
pub fn print_box<T: Into<Vec2>, S: Into<Vec2>>(&self, start: T, size: S,
|
||||
@ -213,9 +222,9 @@ impl Printer {
|
||||
}
|
||||
|
||||
/// Returns a printer on a subset of this one's area.
|
||||
pub fn sub_printer<S: Into<Vec2>, T: Into<Vec2>>(&self, offset: S,
|
||||
pub fn sub_printer<S: Into<Vec2>, T: Into<Vec2>>(&'a self, offset: S,
|
||||
size: T, focused: bool)
|
||||
-> Printer {
|
||||
-> Printer<'a> {
|
||||
let size = size.into();
|
||||
let offset = offset.into().or_min(self.size);
|
||||
Printer {
|
||||
@ -224,6 +233,7 @@ impl Printer {
|
||||
size: Vec2::min(self.size - offset, size),
|
||||
focused: self.focused && focused,
|
||||
theme: self.theme.clone(),
|
||||
backend: self.backend,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,8 +134,10 @@ impl ScrollBase {
|
||||
/// # use cursive::view::ScrollBase;
|
||||
/// # use cursive::Printer;
|
||||
/// # use cursive::theme;
|
||||
/// # use cursive::B;
|
||||
/// # let scrollbase = ScrollBase::new();
|
||||
/// # let printer = Printer::new((5,1), theme::load_default());
|
||||
/// # let b = B{};
|
||||
/// # let printer = Printer::new((5,1), theme::load_default(), &b);
|
||||
/// # let printer = &printer;
|
||||
/// let lines = ["Line 1", "Line number 2"];
|
||||
/// scrollbase.draw(printer, |printer, i| {
|
||||
|
Loading…
Reference in New Issue
Block a user