termux_gui/components/
image_view.rs

1//! ImageView component
2
3use serde_json::json;
4use crate::activity::Activity;
5use crate::view::View;
6use crate::error::Result;
7
8/// An ImageView displays images
9pub struct ImageView {
10    view: View,
11    aid: i64,
12}
13
14impl ImageView {
15    /// Create a new ImageView
16    pub fn new(activity: &mut Activity, parent: Option<i64>) -> Result<Self> {
17        let mut params = json!({
18            "aid": activity.id()
19        });
20        
21        // Only set parent if explicitly provided
22        if let Some(parent_id) = parent {
23            params["parent"] = json!(parent_id);
24        }
25        
26        let response = activity.send_read(&json!({
27            "method": "createImageView",
28            "params": params
29        }))?;
30        
31        let id = response
32            .as_i64()
33            .ok_or_else(|| crate::error::GuiError::InvalidResponse("Invalid id".to_string()))?;
34        
35        Ok(ImageView {
36            view: View::new(id),
37            aid: activity.id(),
38        })
39    }
40    
41    /// Get the view ID
42    pub fn id(&self) -> i64 {
43        self.view.id()
44    }
45    
46    /// Get the underlying View
47    pub fn view(&self) -> &View {
48        &self.view
49    }
50    
51    /// Set image from base64 encoded string
52    /// 
53    /// The image should be base64 encoded PNG or JPEG data.
54    /// You can use the `base64` crate to encode image bytes.
55    pub fn set_image(&self, activity: &mut Activity, img_base64: &str) -> Result<()> {
56        activity.send(&json!({
57            "method": "setImage",
58            "params": {
59                "aid": self.aid,
60                "id": self.view.id(),
61                "img": img_base64
62            }
63        }))?;
64        Ok(())
65    }
66    
67    /// Refresh the ImageView
68    /// 
69    /// This redraws the ImageView. Needed when using shared buffers.
70    pub fn refresh(&self, activity: &mut Activity) -> Result<()> {
71        activity.send(&json!({
72            "method": "refreshImageView",
73            "params": {
74                "aid": self.aid,
75                "id": self.view.id()
76            }
77        }))?;
78        Ok(())
79    }
80}