use crate::error::Result; use xcb::{ x::{AllocColor, Colormap}, Connection, }; /// Caches colours in an X11 color map. pub struct Colours { #[allow(unused)] // Make sure the colour map we're using doesn't go anywhere cmap: Colormap, border_normal: u32, border_focused: u32, } impl Colours { /// Load the colours into the given colour map pub fn new_with(conn: &Connection, cmap: Colormap) -> Result { // TODO: Move these colours out to config.rs let (border_normal, border_focused) = ( conn.wait_for_reply(conn.send_request(&AllocColor { cmap, red: 0, green: 0, blue: 0, }))?, conn.wait_for_reply(conn.send_request(&AllocColor { cmap, red: u16::MAX, green: 0, blue: u16::MAX, }))?, ); Ok(Self { cmap, border_normal: border_normal.pixel(), border_focused: border_focused.pixel(), }) } /// Get the pixel ID of the colour for an unfocused window's border. pub const fn border_normal(&self) -> u32 { self.border_normal } /// Get the pixel ID of the colour for a focused window's border. pub const fn border_focused(&self) -> u32 { self.border_focused } }