summaryrefslogtreecommitdiffstats
path: root/tv/5pkgs/xmonad-tv/Util/XUtils.hs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2015-10-29 01:49:27 +0100
committertv <tv@krebsco.de>2015-10-29 01:49:27 +0100
commit81329c86ac95ec5c151cbdac98144eb87a5c01d7 (patch)
tree3ccb6edff8ad1fccf04e78285c9afb4232401265 /tv/5pkgs/xmonad-tv/Util/XUtils.hs
parent6db59aa0d6056fd2eb1c8fa6491b34b458a7d62a (diff)
tv: {2configs/xserver => 5pkgs}/xmonad-tv
Diffstat (limited to 'tv/5pkgs/xmonad-tv/Util/XUtils.hs')
-rw-r--r--tv/5pkgs/xmonad-tv/Util/XUtils.hs47
1 files changed, 47 insertions, 0 deletions
diff --git a/tv/5pkgs/xmonad-tv/Util/XUtils.hs b/tv/5pkgs/xmonad-tv/Util/XUtils.hs
new file mode 100644
index 0000000..de1d824
--- /dev/null
+++ b/tv/5pkgs/xmonad-tv/Util/XUtils.hs
@@ -0,0 +1,47 @@
+module Util.XUtils
+ ( shapeWindow
+ , withGC
+ , withPixmap
+ , withPixmapAndGC
+ ) where
+
+import Control.Exception ( bracket )
+import Foreign.C.Types ( CInt )
+import Graphics.X11.Xlib
+import Graphics.X11.Xlib.Extras
+import Graphics.X11.Xshape
+
+
+shapeWindow :: Display -> Window -> (Pixmap -> GC -> IO ()) -> IO ()
+shapeWindow d w f = do
+ wa <- getWindowAttributes d w
+
+ let width = fromIntegral $ wa_width wa
+ height = fromIntegral $ wa_height wa
+
+ withPixmapAndGC d w width height 1 $ \ p g -> do
+
+ setForeground d g 0
+ fillRectangle d p g 0 0 width height
+
+ setForeground d g 1
+
+ f p g
+
+ xshapeCombineMask d w shapeBounding 0 0 p shapeSet
+
+
+withGC :: Display -> Drawable -> (GC -> IO ()) -> IO ()
+withGC d p =
+ bracket (createGC d p) (freeGC d)
+
+
+withPixmap :: Display -> Drawable -> Dimension -> Dimension -> CInt -> (Pixmap -> IO ()) -> IO ()
+withPixmap d p w h depth =
+ bracket (createPixmap d p w h depth) (freePixmap d)
+
+
+withPixmapAndGC :: Display -> Drawable -> Dimension -> Dimension -> CInt -> (Pixmap -> GC -> IO ()) -> IO ()
+withPixmapAndGC d w width height depth f =
+ withPixmap d w width height depth $ \ p ->
+ withGC d p $ \ g -> f p g