02_centered/
02_centered.rs

1//! Prints two lines of text to the center of the screen.
2
3use milk_tea::{
4    area::Area,
5    draw_call::{DrawCall, DrawCallKind},
6    event::{Event, KeyCode, KeyEvent, KeyEventKind},
7    run,
8    text_size::UnicodeSize,
9};
10
11fn main() {
12    run(Model::default(), view, update).unwrap();
13}
14
15fn view(_model: &Model, area: &mut Area) {
16    let text_0 = "this text is centered!".limit_size(area.size());
17    let text_1 = "try resizing the window ^.^".limit_size(area.size());
18
19    // `center_size` returns a position in the center of the `Area` according to a passed in size.
20    let pos_0 = area.center_rect(text_0.rect()).pos;
21    let pos_1 = area.center_rect(text_1.rect()).pos.map_y(|y| y + 1);
22
23    area.push_all(vec![
24        DrawCall::new(pos_0, DrawCallKind::PrintLine(text_0)),
25        DrawCall::new(pos_1, DrawCallKind::PrintLine(text_1)),
26    ]);
27}
28
29fn update(event: Event, model: &mut Model) {
30    if let Event::Key(KeyEvent {
31        code: KeyCode::Esc,
32        kind: KeyEventKind::Press,
33        ..
34    }) = event
35    {
36        model.0 = true;
37    }
38}
39
40#[derive(Default, Clone, PartialEq, Eq)]
41struct Model(bool);
42
43impl milk_tea::Model for Model {
44    fn should_exit(&self) -> bool {
45        self.0
46    }
47}