summary refs log tree commit diff
path: root/src/x/context.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/x/context.rs')
-rw-r--r--src/x/context.rs33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/x/context.rs b/src/x/context.rs
index 0a8d11e..9e3796d 100644
--- a/src/x/context.rs
+++ b/src/x/context.rs
@@ -2,12 +2,20 @@ use crate::x::*;
 
 use std::sync::Arc;
 
-use xcb::x::{ self, Drawable, CreateGc, FreeGc };
+use xcb::x::{ Drawable, CreateGc, FreeGc };
 
 
 pub struct GraphicContext {
   display: Arc<Display>,
-  context_id: x::Gcontext,
+  context_id: xcb::x::Gcontext,
+}
+
+impl HasDisplay for GraphicContext {
+  fn display(&self) -> &Arc<Display> { &self.display }
+}
+
+impl HasConnection for GraphicContext {
+  fn connection(&self) -> &Connection { self.display.connection() }
 }
 
 
@@ -15,7 +23,7 @@ impl GraphicContext {
   pub fn new(display: Arc<Display>, drawable: Drawable)
     -> xcb::Result<Self>
   {
-    let context_id: x::Gcontext = display.generate_id();
+    let context_id: xcb::x::Gcontext = display.generate_id();
     let cookie = display.send_request_checked(&CreateGc {
       cid: context_id,
       drawable,
@@ -34,11 +42,22 @@ impl Drop for GraphicContext {
   }
 }
 
-impl HasDisplay for GraphicContext {
-  fn display(&self) -> &Arc<Display> { &self.display }
+
+pub trait HasGraphicContext {
+  fn graphic_context(&self) -> &GraphicContext;
 }
 
-impl HasConnection for GraphicContext {
-  fn connection(&self) -> &Connection { self.display.connection() }
+impl HasGraphicContext for GraphicContext {
+  fn graphic_context(&self) -> &GraphicContext { self }
 }
 
+
+
+pub trait GraphicContextExt: HasGraphicContext + HasDisplay + HasConnection {
+  fn graphic_context_id(&self) -> xcb::x::Gcontext {
+    self.graphic_context().context_id
+  }
+}
+
+impl<T: HasGraphicContext + HasDisplay + HasConnection> GraphicContextExt for T { }
+