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
use crate::{
Component,
RenderError,
Rendered,
};
/// A placeholder component for inline terminal images.
///
/// The actual image data is passed to the renderer via
/// [`ImageCommand`](crate::renderer::ImageCommand); this widget only renders a
/// placeholder text line. Image protocol encoding (Kitty, iTerm2) is handled by
/// [`crate::image`].
pub struct ImageWidget {
_data: Vec<u8>,
_mime_type: String,
placeholder: String,
}
impl ImageWidget {
/// Create a new image widget.
///
/// `data` is the raw image bytes. `placeholder` defaults to `"[image]"`.
pub fn new(data: Vec<u8>, mime_type: impl Into<String>, placeholder: Option<String>) -> Self {
Self {
_data: data,
_mime_type: mime_type.into(),
placeholder: placeholder.unwrap_or_else(|| "[image]".to_string()),
}
}
}
impl Component for ImageWidget {
fn render(&self, _width: u16) -> Result<Rendered, RenderError> {
Ok(Rendered {
lines: vec![self.placeholder.clone()],
cursor: None,
images: Vec::new(),
})
}
}