use std::collections::{HashMap, HashSet};
use std::sync::mpsc;
pub use crate::config::ImageMode;
use crate::app::{ImageRenderResult, VisibleImage};
use crate::image_render::ImageProtocol;
use crate::ui::LinkRegion;
pub struct ImageState {
pub image_mode: ImageMode,
pub show_link_previews: bool,
pub link_regions: Vec<LinkRegion>,
pub link_url_map: HashMap<String, String>,
pub image_protocol: ImageProtocol,
pub cell_px: (u16, u16),
pub visible_images: Vec<VisibleImage>,
pub sixel_prev_scroll: usize,
pub prev_visible_images: Vec<VisibleImage>,
pub native_image_cache: HashMap<String, (String, u32, u32)>,
pub next_kitty_image_id: u32,
pub kitty_image_ids: HashMap<String, u32>,
pub kitty_transmitted: HashSet<u32>,
pub kitty_pending_transmits: Vec<(u32, String, u16, u16)>,
pub iterm2_crop_cache: HashMap<(String, u16, u16), String>,
pub sixel_cache: HashMap<String, String>,
pub image_render_tx: mpsc::Sender<ImageRenderResult>,
pub image_render_rx: mpsc::Receiver<ImageRenderResult>,
pub image_render_in_flight: HashSet<(String, i64, bool)>,
}
impl ImageState {
pub fn new(
image_render_tx: mpsc::Sender<ImageRenderResult>,
image_render_rx: mpsc::Receiver<ImageRenderResult>,
) -> Self {
use crate::image_render;
Self {
image_mode: ImageMode::Halfblock,
show_link_previews: true,
link_regions: Vec::new(),
link_url_map: HashMap::new(),
image_protocol: image_render::detect_protocol(),
cell_px: image_render::detect_cell_pixel_size(),
visible_images: Vec::new(),
sixel_prev_scroll: 0,
prev_visible_images: Vec::new(),
native_image_cache: HashMap::new(),
next_kitty_image_id: 1,
kitty_image_ids: HashMap::new(),
kitty_transmitted: HashSet::new(),
kitty_pending_transmits: Vec::new(),
iterm2_crop_cache: HashMap::new(),
sixel_cache: HashMap::new(),
image_render_tx,
image_render_rx,
image_render_in_flight: HashSet::new(),
}
}
}