diff options
Diffstat (limited to 'src/x/context.rs')
| -rw-r--r-- | src/x/context.rs | 33 |
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 { } + |