Skip to main content

positioning/
positioning.rs

1use {
2    cursive::{align::*, view::*, views::*, *},
3    cursive_image::*,
4};
5
6const NAME: &str = "Image";
7const FILE: &str = "assets/media/linux.png";
8
9// Here we'll demonstrate the various positioning configurations
10
11// Press "s" to toggle fit/scale mode
12// Press "h" to switch horizontal alignment mode
13// Press "v" to switch vertical alignment mode
14
15fn main() {
16    let mut cursive = default();
17
18    cursive.add_layer(Panel::new(ImageView::default().with_image_file(FILE).with_name(NAME).fixed_size((50, 20))));
19
20    cursive.add_global_callback('s', |cursive| {
21        _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
22            image_view.set_sizing(match image_view.sizing() {
23                Sizing::Fit => Sizing::original(),
24                Sizing::Scale(_) => Sizing::Fit,
25            })
26        });
27    });
28
29    cursive.add_global_callback('h', |cursive| {
30        _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
31            image_view.set_align(match image_view.align() {
32                Align { h: HAlign::Left, v } => Align { h: HAlign::Center, v },
33                Align { h: HAlign::Center, v } => Align { h: HAlign::Right, v },
34                Align { h: HAlign::Right, v } => Align { h: HAlign::Left, v },
35            })
36        });
37    });
38
39    cursive.add_global_callback('v', |cursive| {
40        _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
41            image_view.set_align(match image_view.align() {
42                Align { h, v: VAlign::Top } => Align { h, v: VAlign::Center },
43                Align { h, v: VAlign::Center } => Align { h, v: VAlign::Bottom },
44                Align { h, v: VAlign::Bottom } => Align { h, v: VAlign::Top },
45            })
46        });
47    });
48
49    cursive.add_global_callback('q', |cursive| cursive.quit());
50
51    cursive.run();
52}