{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) -} module GI.GdkPixbuf.Callbacks ( -- * Signals -- ** PixbufDestroyNotify PixbufDestroyNotify , PixbufDestroyNotifyC , mkPixbufDestroyNotify , noPixbufDestroyNotify , pixbufDestroyNotifyClosure , pixbufDestroyNotifyWrapper , -- ** PixbufSaveFunc PixbufSaveFunc , PixbufSaveFuncC , mkPixbufSaveFunc , noPixbufSaveFunc , pixbufSaveFuncClosure , pixbufSaveFuncWrapper , ) where import Prelude () import Data.GI.Base.ShortPrelude import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import GI.GdkPixbuf.Types -- callback PixbufSaveFunc pixbufSaveFuncClosure :: PixbufSaveFunc -> IO Closure pixbufSaveFuncClosure cb = newCClosure =<< mkPixbufSaveFunc wrapped where wrapped = pixbufSaveFuncWrapper Nothing cb type PixbufSaveFuncC = Ptr Word8 -> Word64 -> Ptr (Ptr GError) -> Ptr () -> IO CInt foreign import ccall "wrapper" mkPixbufSaveFunc :: PixbufSaveFuncC -> IO (FunPtr PixbufSaveFuncC) type PixbufSaveFunc = ByteString -> IO (Bool,GError) noPixbufSaveFunc :: Maybe PixbufSaveFunc noPixbufSaveFunc = Nothing pixbufSaveFuncWrapper :: Maybe (Ptr (FunPtr (PixbufSaveFuncC))) -> PixbufSaveFunc -> Ptr Word8 -> Word64 -> Ptr (Ptr GError) -> Ptr () -> IO CInt pixbufSaveFuncWrapper funptrptr _cb buf count error_ _ = do buf' <- (unpackByteStringWithLength count) buf (result, outerror_) <- _cb buf' outerror_' <- copyBoxed outerror_ poke error_ outerror_' maybeReleaseFunPtr funptrptr let result' = (fromIntegral . fromEnum) result return result' -- callback PixbufDestroyNotify pixbufDestroyNotifyClosure :: PixbufDestroyNotify -> IO Closure pixbufDestroyNotifyClosure cb = newCClosure =<< mkPixbufDestroyNotify wrapped where wrapped = pixbufDestroyNotifyWrapper Nothing cb type PixbufDestroyNotifyC = Ptr Word8 -> Ptr () -> IO () foreign import ccall "wrapper" mkPixbufDestroyNotify :: PixbufDestroyNotifyC -> IO (FunPtr PixbufDestroyNotifyC) type PixbufDestroyNotify = Ptr Word8 -> IO () noPixbufDestroyNotify :: Maybe PixbufDestroyNotify noPixbufDestroyNotify = Nothing pixbufDestroyNotifyWrapper :: Maybe (Ptr (FunPtr (PixbufDestroyNotifyC))) -> PixbufDestroyNotify -> Ptr Word8 -> Ptr () -> IO () pixbufDestroyNotifyWrapper funptrptr _cb pixels _ = do _cb pixels maybeReleaseFunPtr funptrptr