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
52
53
54
55
use crate::backends::puppet::observed::ObservedCell;
use crate::backends::puppet::observed::ObservedScreen;
use crate::theme::ColorStyle;
use crate::theme::ColorType;
use crate::view::View;
use crate::Printer;
use crate::Vec2;
pub struct ObservedScreenView {
screen: ObservedScreen,
}
impl ObservedScreenView {
pub fn new(obs: ObservedScreen) -> Self {
ObservedScreenView { screen: obs }
}
}
impl View for ObservedScreenView {
fn draw(&self, printer: &Printer) {
for x in 0..self.screen.size().x {
for y in 0..self.screen.size().y {
let pos = Vec2::new(x, y);
let cell_op: &Option<ObservedCell> = &self.screen[pos];
if cell_op.is_none() {
continue;
}
let cell = cell_op.as_ref().unwrap();
if cell.letter.is_continuation() {
continue;
}
printer.with_effects(cell.style.effects, |printer| {
let color_style = ColorStyle {
front: ColorType::Color(cell.style.colors.front),
back: ColorType::Color(cell.style.colors.back),
};
printer.with_color(color_style, |printer| {
printer.print(pos, &cell.letter.unwrap());
});
});
}
}
}
fn required_size(&mut self, _: Vec2) -> Vec2 {
self.screen.size()
}
}