cursive/src/view/tracked_view.rs

36 lines
838 B
Rust
Raw Normal View History

2016-07-02 03:23:58 +00:00
use view::{IdView, View, ViewWrapper};
use printer::Printer;
use vec::Vec2;
/// Wrapper around a view that remembers its position.
2016-07-02 03:23:58 +00:00
pub struct TrackedView<T: View> {
/// Wrapped view.
2016-07-02 03:23:58 +00:00
pub view: T,
/// Last position the view was located.
2016-07-02 03:23:58 +00:00
pub offset: Vec2,
}
2016-07-10 02:05:51 +00:00
impl<T: View> TrackedView<T> {
/// Creates a new `TrackedView` around `view`.
2016-07-02 03:23:58 +00:00
pub fn new(view: T) -> Self {
TrackedView {
view: view,
offset: Vec2::zero(),
}
}
/// Wraps itself in a `IdView` for easy retrieval.
2016-07-02 03:23:58 +00:00
pub fn with_id(self, id: &str) -> IdView<Self> {
IdView::new(id, self)
}
}
impl<T: View> ViewWrapper for TrackedView<T> {
wrap_impl!(&self.view);
fn wrap_draw(&mut self, printer: &Printer) {
self.offset = printer.offset;
self.view.draw(printer);
}
}