pub struct ImageView { /* private fields */ }Expand description
Image view.
Works on terminals that support the Kitty graphics protocol
The view supports shrink, fit, and scale sizing modes (shrink is the default), image alignment, and scrolling.
Implementations§
Source§impl ImageView
impl ImageView
Sourcepub fn take_image(&mut self) -> Option<Image>
pub fn take_image(&mut self) -> Option<Image>
Sourcepub fn with_image(self, image: Image) -> Self
pub fn with_image(self, image: Image) -> Self
Set image.
Chainable.
Examples found in repository?
examples/gif.rs (lines 11-14)
8fn main() {
9 let mut cursive = default();
10
11 cursive.add_layer(Panel::new(ImageView::default().with_image(
12 // GIFs will always be RGBA
13 Image::new_stream_from_gif_file(FILE).expect("new_stream_from_gif_file"),
14 )));
15
16 cursive.add_global_callback('q', |cursive| cursive.quit());
17
18 cursive.run();
19}More examples
examples/simple.rs (lines 14-19)
9fn main() {
10 let mut cursive = default();
11
12 // By default the image view uses "shrink" sizing
13
14 cursive.add_layer(Panel::new(ImageView::default().with_image(Image::new_file(
15 FILE,
16 false,
17 ImageFormat::PNG,
18 (96, 96),
19 ))));
20
21 cursive.add_global_callback('q', |cursive| cursive.quit());
22
23 cursive.run();
24}examples/svg.rs (lines 12-16)
9fn main() {
10 let mut cursive = default();
11
12 cursive.add_layer(Panel::new(ImageView::default().with_image(
13 // SVG can be either PNG or RGBA (PNG is usually more efficient)
14 // Note that we can apply scaling during rendering
15 Image::new_stream_from_svg_file(FILE, ImageFormat::PNG, 2.5).expect("new_stream_from_svg_file"),
16 )));
17
18 cursive.add_global_callback('q', |cursive| cursive.quit());
19
20 cursive.run();
21}examples/scrollable.rs (lines 18-23)
12fn main() {
13 let mut cursive = default();
14
15 cursive.add_layer(
16 Panel::new(
17 ImageView::default()
18 .with_image(
19 // Note that RGBA is supported, too, if you need transparency
20 Image::new_stream_from_jpeg_file(FILE, ImageFormat::RGB).expect("new_stream_from_jpeg_file"),
21 // If you prefer to keep the image data in memory:
22 // Image::new_owned_from_jpeg_file(FILE, ImageFormat::RGB, true).expect("new_owned_from_jpeg_file"),
23 )
24 .with_sizing(Sizing::original())
25 .scrollable()
26 .scroll_x(true),
27 )
28 .fixed_size((50, 20)),
29 );
30
31 cursive.add_global_callback('q', |cursive| cursive.quit());
32
33 cursive.run();
34}examples/positioning.rs (line 22)
15fn main() {
16 let mut cursive = default();
17
18 cursive.add_layer(Panel::new(
19 ImageView::default()
20 // We're also showing the use of new_png_file(), which discovers the image size for us
21 // (requires the "png" feature)
22 .with_image(Image::new_png_file(FILE).expect("new_png_file"))
23 .with_name(NAME)
24 .fixed_size((50, 20)),
25 ));
26
27 cursive.add_global_callback('s', |cursive| {
28 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
29 image_view.set_sizing(match image_view.sizing() {
30 Sizing::Shrink => Sizing::Fit,
31 Sizing::Fit => Sizing::Scale(3.),
32 Sizing::Scale(_) => Sizing::Shrink,
33 })
34 });
35 });
36
37 cursive.add_global_callback('h', |cursive| {
38 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
39 image_view.set_align(match image_view.align() {
40 Align { h: HAlign::Left, v } => Align { h: HAlign::Center, v },
41 Align { h: HAlign::Center, v } => Align { h: HAlign::Right, v },
42 Align { h: HAlign::Right, v } => Align { h: HAlign::Left, v },
43 })
44 });
45 });
46
47 cursive.add_global_callback('v', |cursive| {
48 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
49 image_view.set_align(match image_view.align() {
50 Align { h, v: VAlign::Top } => Align { h, v: VAlign::Center },
51 Align { h, v: VAlign::Center } => Align { h, v: VAlign::Bottom },
52 Align { h, v: VAlign::Bottom } => Align { h, v: VAlign::Top },
53 })
54 });
55 });
56
57 cursive.add_global_callback('q', |cursive| cursive.quit());
58
59 cursive.run();
60}Sourcepub fn sizing(&self) -> Sizing
pub fn sizing(&self) -> Sizing
Sizing.
Examples found in repository?
examples/positioning.rs (line 29)
15fn main() {
16 let mut cursive = default();
17
18 cursive.add_layer(Panel::new(
19 ImageView::default()
20 // We're also showing the use of new_png_file(), which discovers the image size for us
21 // (requires the "png" feature)
22 .with_image(Image::new_png_file(FILE).expect("new_png_file"))
23 .with_name(NAME)
24 .fixed_size((50, 20)),
25 ));
26
27 cursive.add_global_callback('s', |cursive| {
28 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
29 image_view.set_sizing(match image_view.sizing() {
30 Sizing::Shrink => Sizing::Fit,
31 Sizing::Fit => Sizing::Scale(3.),
32 Sizing::Scale(_) => Sizing::Shrink,
33 })
34 });
35 });
36
37 cursive.add_global_callback('h', |cursive| {
38 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
39 image_view.set_align(match image_view.align() {
40 Align { h: HAlign::Left, v } => Align { h: HAlign::Center, v },
41 Align { h: HAlign::Center, v } => Align { h: HAlign::Right, v },
42 Align { h: HAlign::Right, v } => Align { h: HAlign::Left, v },
43 })
44 });
45 });
46
47 cursive.add_global_callback('v', |cursive| {
48 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
49 image_view.set_align(match image_view.align() {
50 Align { h, v: VAlign::Top } => Align { h, v: VAlign::Center },
51 Align { h, v: VAlign::Center } => Align { h, v: VAlign::Bottom },
52 Align { h, v: VAlign::Bottom } => Align { h, v: VAlign::Top },
53 })
54 });
55 });
56
57 cursive.add_global_callback('q', |cursive| cursive.quit());
58
59 cursive.run();
60}Sourcepub fn set_sizing(&mut self, sizing: Sizing)
pub fn set_sizing(&mut self, sizing: Sizing)
Set sizing.
Examples found in repository?
examples/positioning.rs (lines 29-33)
15fn main() {
16 let mut cursive = default();
17
18 cursive.add_layer(Panel::new(
19 ImageView::default()
20 // We're also showing the use of new_png_file(), which discovers the image size for us
21 // (requires the "png" feature)
22 .with_image(Image::new_png_file(FILE).expect("new_png_file"))
23 .with_name(NAME)
24 .fixed_size((50, 20)),
25 ));
26
27 cursive.add_global_callback('s', |cursive| {
28 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
29 image_view.set_sizing(match image_view.sizing() {
30 Sizing::Shrink => Sizing::Fit,
31 Sizing::Fit => Sizing::Scale(3.),
32 Sizing::Scale(_) => Sizing::Shrink,
33 })
34 });
35 });
36
37 cursive.add_global_callback('h', |cursive| {
38 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
39 image_view.set_align(match image_view.align() {
40 Align { h: HAlign::Left, v } => Align { h: HAlign::Center, v },
41 Align { h: HAlign::Center, v } => Align { h: HAlign::Right, v },
42 Align { h: HAlign::Right, v } => Align { h: HAlign::Left, v },
43 })
44 });
45 });
46
47 cursive.add_global_callback('v', |cursive| {
48 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
49 image_view.set_align(match image_view.align() {
50 Align { h, v: VAlign::Top } => Align { h, v: VAlign::Center },
51 Align { h, v: VAlign::Center } => Align { h, v: VAlign::Bottom },
52 Align { h, v: VAlign::Bottom } => Align { h, v: VAlign::Top },
53 })
54 });
55 });
56
57 cursive.add_global_callback('q', |cursive| cursive.quit());
58
59 cursive.run();
60}Sourcepub fn with_sizing(self, sizing: Sizing) -> Self
pub fn with_sizing(self, sizing: Sizing) -> Self
Set sizing.
Chainable.
Examples found in repository?
examples/scrollable.rs (line 24)
12fn main() {
13 let mut cursive = default();
14
15 cursive.add_layer(
16 Panel::new(
17 ImageView::default()
18 .with_image(
19 // Note that RGBA is supported, too, if you need transparency
20 Image::new_stream_from_jpeg_file(FILE, ImageFormat::RGB).expect("new_stream_from_jpeg_file"),
21 // If you prefer to keep the image data in memory:
22 // Image::new_owned_from_jpeg_file(FILE, ImageFormat::RGB, true).expect("new_owned_from_jpeg_file"),
23 )
24 .with_sizing(Sizing::original())
25 .scrollable()
26 .scroll_x(true),
27 )
28 .fixed_size((50, 20)),
29 );
30
31 cursive.add_global_callback('q', |cursive| cursive.quit());
32
33 cursive.run();
34}More examples
examples/pdf.rs (line 23)
10fn main() {
11 let mut cursive = default();
12
13 // The constructor returns a vector of images, one for each page in the PDF
14 // PDF pages can be either PNG or RGBA (PNG is usually more efficient)
15 // Note that we can apply scaling during rendering
16 let images = Image::new_owned_from_pdf_file(FILE, ImageFormat::PNG, 1.5, false).expect("new_owned_from_pdf_file");
17
18 cursive.set_user_data(Pages::new(images));
19
20 cursive.add_layer(
21 Dialog::around(
22 Panel::new(
23 ImageView::default().with_sizing(Sizing::original()).with_name(NAME).scrollable().scroll_x(true),
24 )
25 .fixed_size((50, 30)),
26 )
27 .button("Previous", |cursive| flip_page(cursive, -1))
28 .button("Next", |cursive| flip_page(cursive, 1)),
29 );
30
31 select_page(&mut cursive, 0);
32
33 cursive.add_global_callback('q', |cursive| cursive.quit());
34
35 cursive.run();
36}Sourcepub fn align(&self) -> Align
pub fn align(&self) -> Align
Align.
Examples found in repository?
examples/positioning.rs (line 39)
15fn main() {
16 let mut cursive = default();
17
18 cursive.add_layer(Panel::new(
19 ImageView::default()
20 // We're also showing the use of new_png_file(), which discovers the image size for us
21 // (requires the "png" feature)
22 .with_image(Image::new_png_file(FILE).expect("new_png_file"))
23 .with_name(NAME)
24 .fixed_size((50, 20)),
25 ));
26
27 cursive.add_global_callback('s', |cursive| {
28 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
29 image_view.set_sizing(match image_view.sizing() {
30 Sizing::Shrink => Sizing::Fit,
31 Sizing::Fit => Sizing::Scale(3.),
32 Sizing::Scale(_) => Sizing::Shrink,
33 })
34 });
35 });
36
37 cursive.add_global_callback('h', |cursive| {
38 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
39 image_view.set_align(match image_view.align() {
40 Align { h: HAlign::Left, v } => Align { h: HAlign::Center, v },
41 Align { h: HAlign::Center, v } => Align { h: HAlign::Right, v },
42 Align { h: HAlign::Right, v } => Align { h: HAlign::Left, v },
43 })
44 });
45 });
46
47 cursive.add_global_callback('v', |cursive| {
48 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
49 image_view.set_align(match image_view.align() {
50 Align { h, v: VAlign::Top } => Align { h, v: VAlign::Center },
51 Align { h, v: VAlign::Center } => Align { h, v: VAlign::Bottom },
52 Align { h, v: VAlign::Bottom } => Align { h, v: VAlign::Top },
53 })
54 });
55 });
56
57 cursive.add_global_callback('q', |cursive| cursive.quit());
58
59 cursive.run();
60}Sourcepub fn set_align(&mut self, align: Align)
pub fn set_align(&mut self, align: Align)
Set align.
Examples found in repository?
examples/positioning.rs (lines 39-43)
15fn main() {
16 let mut cursive = default();
17
18 cursive.add_layer(Panel::new(
19 ImageView::default()
20 // We're also showing the use of new_png_file(), which discovers the image size for us
21 // (requires the "png" feature)
22 .with_image(Image::new_png_file(FILE).expect("new_png_file"))
23 .with_name(NAME)
24 .fixed_size((50, 20)),
25 ));
26
27 cursive.add_global_callback('s', |cursive| {
28 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
29 image_view.set_sizing(match image_view.sizing() {
30 Sizing::Shrink => Sizing::Fit,
31 Sizing::Fit => Sizing::Scale(3.),
32 Sizing::Scale(_) => Sizing::Shrink,
33 })
34 });
35 });
36
37 cursive.add_global_callback('h', |cursive| {
38 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
39 image_view.set_align(match image_view.align() {
40 Align { h: HAlign::Left, v } => Align { h: HAlign::Center, v },
41 Align { h: HAlign::Center, v } => Align { h: HAlign::Right, v },
42 Align { h: HAlign::Right, v } => Align { h: HAlign::Left, v },
43 })
44 });
45 });
46
47 cursive.add_global_callback('v', |cursive| {
48 _ = cursive.call_on_name(NAME, |image_view: &mut ImageView| {
49 image_view.set_align(match image_view.align() {
50 Align { h, v: VAlign::Top } => Align { h, v: VAlign::Center },
51 Align { h, v: VAlign::Center } => Align { h, v: VAlign::Bottom },
52 Align { h, v: VAlign::Bottom } => Align { h, v: VAlign::Top },
53 })
54 });
55 });
56
57 cursive.add_global_callback('q', |cursive| cursive.quit());
58
59 cursive.run();
60}Sourcepub fn with_align(self, align: Align) -> Self
pub fn with_align(self, align: Align) -> Self
Set align.
Chainable.
Trait Implementations§
Source§impl View for ImageView
impl View for ImageView
Source§fn required_size(&mut self, constraint: Vec2) -> Vec2
fn required_size(&mut self, constraint: Vec2) -> Vec2
Returns the minimum size the view requires with the given restrictions. Read more
Source§fn needs_relayout(&self) -> bool
fn needs_relayout(&self) -> bool
Source§fn layout(&mut self, size: Vec2)
fn layout(&mut self, size: Vec2)
Called once the size for this view has been decided. Read more
Source§fn draw(&self, printer: &Printer<'_, '_>)
fn draw(&self, printer: &Printer<'_, '_>)
Draws the view with the given printer (includes bounds) and focus. Read more
Source§fn on_event(&mut self, _: Event) -> EventResult
fn on_event(&mut self, _: Event) -> EventResult
Called when an event is received (key press, mouse event, …). Read more
Source§fn call_on_any(
&mut self,
_: &Selector<'_>,
_: &mut dyn FnMut(&mut (dyn View + 'static)),
)
fn call_on_any( &mut self, _: &Selector<'_>, _: &mut dyn FnMut(&mut (dyn View + 'static)), )
Runs a closure on the view identified by the given selector. Read more
Source§fn focus_view(&mut self, _: &Selector<'_>) -> Result<EventResult, ViewNotFound>
fn focus_view(&mut self, _: &Selector<'_>) -> Result<EventResult, ViewNotFound>
Moves the focus to the view identified by the given selector. Read more
Source§fn take_focus(&mut self, source: Direction) -> Result<EventResult, CannotFocus>
fn take_focus(&mut self, source: Direction) -> Result<EventResult, CannotFocus>
Attempt to give this view the focus. Read more
Auto Trait Implementations§
impl !Freeze for ImageView
impl !RefUnwindSafe for ImageView
impl Send for ImageView
impl Sync for ImageView
impl Unpin for ImageView
impl UnsafeUnpin for ImageView
impl !UnwindSafe for ImageView
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Finder for Twhere
T: View,
impl<T> Finder for Twhere
T: View,
Source§fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)
fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)
Runs a callback on all views identified by
sel. Read moreSource§fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>
fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>
Runs a callback on the view identified by
sel. Read moreSource§fn call_on_name<V, F, R>(&mut self, name: &str, callback: F) -> Option<R>
fn call_on_name<V, F, R>(&mut self, name: &str, callback: F) -> Option<R>
Convenient method to use
call_on with a view::Selector::Name.Source§impl<T> IntoBoxedView for Twhere
T: View,
impl<T> IntoBoxedView for Twhere
T: View,
Source§fn into_boxed_view(self) -> Box<dyn View>
fn into_boxed_view(self) -> Box<dyn View>
Returns a
Box<View>.Source§impl<T> Resizable for Twhere
T: View,
impl<T> Resizable for Twhere
T: View,
Source§fn resized(
self,
width: SizeConstraint,
height: SizeConstraint,
) -> ResizedView<Self>
fn resized( self, width: SizeConstraint, height: SizeConstraint, ) -> ResizedView<Self>
Wraps
self in a ResizedView with the given size constraints.Source§fn fixed_size<S>(self, size: S) -> ResizedView<Self>
fn fixed_size<S>(self, size: S) -> ResizedView<Self>
Wraps
self into a fixed-size ResizedView.Source§fn fixed_width(self, width: usize) -> ResizedView<Self>
fn fixed_width(self, width: usize) -> ResizedView<Self>
Wraps
self into a fixed-width ResizedView.Source§fn fixed_height(self, height: usize) -> ResizedView<Self>
fn fixed_height(self, height: usize) -> ResizedView<Self>
Wraps
self into a fixed-width ResizedView.Source§fn full_screen(self) -> ResizedView<Self>
fn full_screen(self) -> ResizedView<Self>
Wraps
self into a full-screen ResizedView.Source§fn full_width(self) -> ResizedView<Self>
fn full_width(self) -> ResizedView<Self>
Wraps
self into a full-width ResizedView.Source§fn full_height(self) -> ResizedView<Self>
fn full_height(self) -> ResizedView<Self>
Wraps
self into a full-height ResizedView.Source§fn max_size<S>(self, size: S) -> ResizedView<Self>
fn max_size<S>(self, size: S) -> ResizedView<Self>
Wraps
self into a limited-size ResizedView.Source§fn max_width(self, max_width: usize) -> ResizedView<Self>
fn max_width(self, max_width: usize) -> ResizedView<Self>
Wraps
self into a limited-width ResizedView.Source§fn max_height(self, max_height: usize) -> ResizedView<Self>
fn max_height(self, max_height: usize) -> ResizedView<Self>
Wraps
self into a limited-height ResizedView.Source§fn min_size<S>(self, size: S) -> ResizedView<Self>
fn min_size<S>(self, size: S) -> ResizedView<Self>
Wraps
self into a ResizedView at least sized size.Source§fn min_width(self, min_width: usize) -> ResizedView<Self>
fn min_width(self, min_width: usize) -> ResizedView<Self>
Wraps
self in a ResizedView at least min_width wide.Source§fn min_height(self, min_height: usize) -> ResizedView<Self>
fn min_height(self, min_height: usize) -> ResizedView<Self>
Wraps
self in a ResizedView at least min_height tall.Source§impl<T> Scrollable for Twhere
T: View,
impl<T> Scrollable for Twhere
T: View,
Source§fn scrollable(self) -> ScrollView<Self>
fn scrollable(self) -> ScrollView<Self>
Wraps
self in a ScrollView.