module Graphics.Wayland.Internal.Cursor (
CursorTheme, CursorImage, Cursor,
cursorImageSize, cursorImageHotspot, cursorImageDelay,
cursorName, cursorImages,
cursorThemeLoad, cursorThemeDestroy, cursorThemeGetCursor, cursorImageGetBuffer, cursorFrame
) where
import Control.Monad (liftM)
import Foreign
import Foreign.C.Types
import Foreign.C.String
import System.IO.Unsafe (unsafePerformIO)
import Graphics.Wayland.Internal.SpliceClientTypes (Shm(..), Buffer(..))
newtype CursorTheme = CursorTheme (Ptr (CursorTheme))
newtype CursorImage = CursorImage (Ptr (CursorImage))
cursorImageSize :: CursorImage -> (Word, Word)
cursorImageSize (CursorImage ci) = unsafePerformIO $ do
width <- (\ptr -> do {peekByteOff ptr 0 ::IO CUInt}) ci
height <- (\ptr -> do {peekByteOff ptr 4 ::IO CUInt}) ci
return (fromIntegral width, fromIntegral height)
cursorImageHotspot :: CursorImage -> (Word, Word)
cursorImageHotspot (CursorImage ci) = unsafePerformIO $ do
x <- (\ptr -> do {peekByteOff ptr 8 ::IO CUInt}) ci
y <- (\ptr -> do {peekByteOff ptr 12 ::IO CUInt}) ci
return (fromIntegral x, fromIntegral y)
cursorImageDelay :: CursorImage -> Word
cursorImageDelay (CursorImage ci) = unsafePerformIO $ liftM fromIntegral $ (\ptr -> do {peekByteOff ptr 16 ::IO CUInt}) ci
newtype Cursor = Cursor (Ptr (Cursor))
cursorName :: Cursor -> String
cursorName (Cursor c) = unsafePerformIO $ do
cstr <- (\ptr -> do {peekByteOff ptr 16 ::IO (Ptr CChar)}) c
peekCString cstr
cursorImages :: Cursor -> [CursorImage]
cursorImages (Cursor c) = unsafePerformIO $ do
imagesPtr <- (\ ptr -> (peekByteOff ptr (8) :: IO (Ptr (Ptr CursorImage)))) c
count <- (\ptr -> do {peekByteOff ptr 0 ::IO CUInt}) c
return imagesPtr
ptrs <- peekArray (fromIntegral count) imagesPtr
return $ map CursorImage ptrs
cursorThemeLoad :: (String) -> (Int) -> (Shm) -> IO ((CursorTheme))
cursorThemeLoad a1 a2 a3 =
withCString a1 $ \a1' ->
let {a2' = fromIntegral a2} in
let {a3' = id a3} in
cursorThemeLoad'_ a1' a2' a3' >>= \res ->
let {res' = id res} in
return (res')
cursorThemeDestroy :: (CursorTheme) -> IO ()
cursorThemeDestroy a1 =
let {a1' = id a1} in
cursorThemeDestroy'_ a1' >>
return ()
cursorThemeGetCursor :: (CursorTheme) -> (String) -> IO ((Cursor))
cursorThemeGetCursor a1 a2 =
let {a1' = id a1} in
withCString a2 $ \a2' ->
cursorThemeGetCursor'_ a1' a2' >>= \res ->
let {res' = id res} in
return (res')
cursorImageGetBuffer :: (CursorImage) -> IO ((Buffer))
cursorImageGetBuffer a1 =
let {a1' = id a1} in
cursorImageGetBuffer'_ a1' >>= \res ->
let {res' = id res} in
return (res')
cursorFrame :: (Cursor) -> (Int) -> IO ((Int))
cursorFrame a1 a2 =
let {a1' = id a1} in
let {a2' = fromIntegral a2} in
cursorFrame'_ a1' a2' >>= \res ->
let {res' = fromIntegral res} in
return (res')
foreign import ccall unsafe "Graphics/Wayland/Internal/Cursor.chs.h wl_cursor_theme_load"
cursorThemeLoad'_ :: ((Ptr CChar) -> (CInt -> ((Shm) -> (IO (CursorTheme)))))
foreign import ccall unsafe "Graphics/Wayland/Internal/Cursor.chs.h wl_cursor_theme_destroy"
cursorThemeDestroy'_ :: ((CursorTheme) -> (IO ()))
foreign import ccall unsafe "Graphics/Wayland/Internal/Cursor.chs.h wl_cursor_theme_get_cursor"
cursorThemeGetCursor'_ :: ((CursorTheme) -> ((Ptr CChar) -> (IO (Cursor))))
foreign import ccall unsafe "Graphics/Wayland/Internal/Cursor.chs.h wl_cursor_image_get_buffer"
cursorImageGetBuffer'_ :: ((CursorImage) -> (IO (Buffer)))
foreign import ccall unsafe "Graphics/Wayland/Internal/Cursor.chs.h wl_cursor_frame"
cursorFrame'_ :: ((Cursor) -> (CUInt -> (IO CInt)))