use std::io::{self, Write};
use crate::config::Osc11BackgroundFormat;
use crate::themes;
pub const OPACITY_SOLID_MIN: f32 = 1.0 - 1e-4;
#[inline]
#[must_use]
pub fn opacity_is_solid(v: f32) -> bool {
v >= OPACITY_SOLID_MIN
}
pub fn sync_osc11_page_background(
theme_name: Option<&str>,
opacity: f32,
format: Osc11BackgroundFormat,
) -> io::Result<()> {
let mut out = io::stdout();
if opacity >= OPACITY_SOLID_MIN {
return reset_osc_dynamic_background(&mut out);
}
let name = themes::theme_name_from_config(theme_name);
let palette = themes::get(Some(name));
let payload: Option<String> = match format {
Osc11BackgroundFormat::Rgba => {
themes::color_to_osc11_rgba_payload(palette.background, opacity)
}
Osc11BackgroundFormat::Hex8 => themes::color_to_osc11_hex8(palette.background, opacity),
};
let Some(payload) = payload else {
return reset_osc_dynamic_background(&mut out);
};
write_osc11_background_payload(&mut out, &payload)
}
pub fn write_osc11_background_payload(w: &mut impl Write, payload: &str) -> io::Result<()> {
write!(w, "\x1b]11;{payload}\x07")?;
w.flush()
}
pub fn reset_osc_dynamic_background(w: &mut impl Write) -> io::Result<()> {
write!(w, "\x1b]111\x07")?;
w.flush()
}