summaryrefslogtreecommitdiff
path: root/src/conn_info/colours.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/conn_info/colours.rs')
-rw-r--r--src/conn_info/colours.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/conn_info/colours.rs b/src/conn_info/colours.rs
new file mode 100644
index 0000000..22b4fc2
--- /dev/null
+++ b/src/conn_info/colours.rs
@@ -0,0 +1,50 @@
+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<Self> {
+ // 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
+ }
+}