{-# LANGUAGE ForeignFunctionInterface #-} module Phi.Bindings.Util ( setClassHint , createXlibSurface ) where #include #include #include import Foreign.C.String (withCString) import Foreign.C.Types import Foreign.Ptr import Foreign.Marshal.Alloc (alloca, allocaBytes) import Foreign.Storable import Graphics.X11.Xlib import Graphics.X11.Xlib.Extras import Graphics.Rendering.Cairo.Types foreign import ccall unsafe "X11/Xutil.h XSetClassHint" xSetClassHint :: Display -> Window -> Ptr ClassHint -> IO () setClassHint :: Display -> Window -> ClassHint -> IO () setClassHint disp wnd hint = allocaBytes (#size XClassHint) $ \p -> withCString (resName hint) $ \res_name -> withCString (resClass hint) $ \res_class -> do (#poke XClassHint, res_name) p res_name (#poke XClassHint, res_class) p res_class xSetClassHint disp wnd p foreign import ccall unsafe "cairo-xlib.h cairo_xlib_surface_create" xlibSurfaceCreate :: Display -> Drawable -> Visual -> CInt -> CInt -> IO (Ptr Surface) createXlibSurface :: Display -> Drawable -> Visual -> CInt -> CInt -> IO Surface createXlibSurface dpy drawable visual width height = do surfacePtr <- xlibSurfaceCreate dpy drawable visual width height surface <- mkSurface surfacePtr manageSurface surface return surface