packages feed

gi-gdkpixbuf-0.2.32.14: GI/GdkPixbuf/Structs/Pixdata.hs


{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)

A #GdkPixdata contains pixbuf information in a form suitable for
serialization and streaming.
-}

module GI.GdkPixbuf.Structs.Pixdata
    ( 

-- * Exported types
    Pixdata(..)                             ,
    newZeroPixdata                          ,
    noPixdata                               ,


 -- * Methods
-- ** pixdataDeserialize
    PixdataDeserializeMethodInfo            ,
    pixdataDeserialize                      ,


-- ** pixdataSerialize
    PixdataSerializeMethodInfo              ,
    pixdataSerialize                        ,


-- ** pixdataToCsource
    PixdataToCsourceMethodInfo              ,
    pixdataToCsource                        ,




 -- * Properties
-- ** Height
    pixdataHeight                           ,
    pixdataReadHeight                       ,
    pixdataWriteHeight                      ,


-- ** Length
    pixdataLength                           ,
    pixdataReadLength                       ,
    pixdataWriteLength                      ,


-- ** Magic
    pixdataMagic                            ,
    pixdataReadMagic                        ,
    pixdataWriteMagic                       ,


-- ** PixdataType
    pixdataPixdataType                      ,
    pixdataReadPixdataType                  ,
    pixdataWritePixdataType                 ,


-- ** PixelData
    pixdataClearPixelData                   ,
    pixdataPixelData                        ,
    pixdataReadPixelData                    ,
    pixdataWritePixelData                   ,


-- ** Rowstride
    pixdataReadRowstride                    ,
    pixdataRowstride                        ,
    pixdataWriteRowstride                   ,


-- ** Width
    pixdataReadWidth                        ,
    pixdataWidth                            ,
    pixdataWriteWidth                       ,




    ) where

import Data.GI.Base.ShortPrelude

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.GdkPixbuf.Types
import GI.GdkPixbuf.Callbacks
import qualified GI.GLib as GLib

newtype Pixdata = Pixdata (ForeignPtr Pixdata)
-- | Construct a `Pixdata` struct initialized to zero.
newZeroPixdata :: MonadIO m => m Pixdata
newZeroPixdata = liftIO $ callocBytes 32 >>= wrapPtr Pixdata

instance tag ~ 'AttrSet => Constructible Pixdata tag where
    new _ attrs = do
        o <- newZeroPixdata
        GI.Attributes.set o attrs
        return o


noPixdata :: Maybe Pixdata
noPixdata = Nothing

pixdataReadMagic :: MonadIO m => Pixdata -> m Word32
pixdataReadMagic s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word32
    return val

pixdataWriteMagic :: MonadIO m => Pixdata -> Word32 -> m ()
pixdataWriteMagic s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: Word32)

data PixdataMagicFieldInfo
instance AttrInfo PixdataMagicFieldInfo where
    type AttrAllowedOps PixdataMagicFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint PixdataMagicFieldInfo = (~) Word32
    type AttrBaseTypeConstraint PixdataMagicFieldInfo = (~) Pixdata
    type AttrGetType PixdataMagicFieldInfo = Word32
    type AttrLabel PixdataMagicFieldInfo = "magic"
    attrGet _ = pixdataReadMagic
    attrSet _ = pixdataWriteMagic
    attrConstruct = undefined
    attrClear _ = undefined

pixdataMagic :: AttrLabelProxy "magic"
pixdataMagic = AttrLabelProxy


pixdataReadLength :: MonadIO m => Pixdata -> m Int32
pixdataReadLength s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 4) :: IO Int32
    return val

pixdataWriteLength :: MonadIO m => Pixdata -> Int32 -> m ()
pixdataWriteLength s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 4) (val :: Int32)

data PixdataLengthFieldInfo
instance AttrInfo PixdataLengthFieldInfo where
    type AttrAllowedOps PixdataLengthFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint PixdataLengthFieldInfo = (~) Int32
    type AttrBaseTypeConstraint PixdataLengthFieldInfo = (~) Pixdata
    type AttrGetType PixdataLengthFieldInfo = Int32
    type AttrLabel PixdataLengthFieldInfo = "length"
    attrGet _ = pixdataReadLength
    attrSet _ = pixdataWriteLength
    attrConstruct = undefined
    attrClear _ = undefined

pixdataLength :: AttrLabelProxy "length"
pixdataLength = AttrLabelProxy


pixdataReadPixdataType :: MonadIO m => Pixdata -> m Word32
pixdataReadPixdataType s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO Word32
    return val

pixdataWritePixdataType :: MonadIO m => Pixdata -> Word32 -> m ()
pixdataWritePixdataType s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: Word32)

data PixdataPixdataTypeFieldInfo
instance AttrInfo PixdataPixdataTypeFieldInfo where
    type AttrAllowedOps PixdataPixdataTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint PixdataPixdataTypeFieldInfo = (~) Word32
    type AttrBaseTypeConstraint PixdataPixdataTypeFieldInfo = (~) Pixdata
    type AttrGetType PixdataPixdataTypeFieldInfo = Word32
    type AttrLabel PixdataPixdataTypeFieldInfo = "pixdata_type"
    attrGet _ = pixdataReadPixdataType
    attrSet _ = pixdataWritePixdataType
    attrConstruct = undefined
    attrClear _ = undefined

pixdataPixdataType :: AttrLabelProxy "pixdataType"
pixdataPixdataType = AttrLabelProxy


pixdataReadRowstride :: MonadIO m => Pixdata -> m Word32
pixdataReadRowstride s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 12) :: IO Word32
    return val

pixdataWriteRowstride :: MonadIO m => Pixdata -> Word32 -> m ()
pixdataWriteRowstride s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 12) (val :: Word32)

data PixdataRowstrideFieldInfo
instance AttrInfo PixdataRowstrideFieldInfo where
    type AttrAllowedOps PixdataRowstrideFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint PixdataRowstrideFieldInfo = (~) Word32
    type AttrBaseTypeConstraint PixdataRowstrideFieldInfo = (~) Pixdata
    type AttrGetType PixdataRowstrideFieldInfo = Word32
    type AttrLabel PixdataRowstrideFieldInfo = "rowstride"
    attrGet _ = pixdataReadRowstride
    attrSet _ = pixdataWriteRowstride
    attrConstruct = undefined
    attrClear _ = undefined

pixdataRowstride :: AttrLabelProxy "rowstride"
pixdataRowstride = AttrLabelProxy


pixdataReadWidth :: MonadIO m => Pixdata -> m Word32
pixdataReadWidth s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO Word32
    return val

pixdataWriteWidth :: MonadIO m => Pixdata -> Word32 -> m ()
pixdataWriteWidth s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: Word32)

data PixdataWidthFieldInfo
instance AttrInfo PixdataWidthFieldInfo where
    type AttrAllowedOps PixdataWidthFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint PixdataWidthFieldInfo = (~) Word32
    type AttrBaseTypeConstraint PixdataWidthFieldInfo = (~) Pixdata
    type AttrGetType PixdataWidthFieldInfo = Word32
    type AttrLabel PixdataWidthFieldInfo = "width"
    attrGet _ = pixdataReadWidth
    attrSet _ = pixdataWriteWidth
    attrConstruct = undefined
    attrClear _ = undefined

pixdataWidth :: AttrLabelProxy "width"
pixdataWidth = AttrLabelProxy


pixdataReadHeight :: MonadIO m => Pixdata -> m Word32
pixdataReadHeight s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 20) :: IO Word32
    return val

pixdataWriteHeight :: MonadIO m => Pixdata -> Word32 -> m ()
pixdataWriteHeight s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 20) (val :: Word32)

data PixdataHeightFieldInfo
instance AttrInfo PixdataHeightFieldInfo where
    type AttrAllowedOps PixdataHeightFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint PixdataHeightFieldInfo = (~) Word32
    type AttrBaseTypeConstraint PixdataHeightFieldInfo = (~) Pixdata
    type AttrGetType PixdataHeightFieldInfo = Word32
    type AttrLabel PixdataHeightFieldInfo = "height"
    attrGet _ = pixdataReadHeight
    attrSet _ = pixdataWriteHeight
    attrConstruct = undefined
    attrClear _ = undefined

pixdataHeight :: AttrLabelProxy "height"
pixdataHeight = AttrLabelProxy


pixdataReadPixelData :: MonadIO m => Pixdata -> m (Maybe (Ptr Word8))
pixdataReadPixelData s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO (Ptr Word8)
    result <- convertIfNonNull val $ \val' -> do
        return val'
    return result

pixdataWritePixelData :: MonadIO m => Pixdata -> Ptr Word8 -> m ()
pixdataWritePixelData s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (val :: Ptr Word8)

pixdataClearPixelData :: MonadIO m => Pixdata -> m ()
pixdataClearPixelData s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (nullPtr :: Ptr Word8)

data PixdataPixelDataFieldInfo
instance AttrInfo PixdataPixelDataFieldInfo where
    type AttrAllowedOps PixdataPixelDataFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint PixdataPixelDataFieldInfo = (~) (Ptr Word8)
    type AttrBaseTypeConstraint PixdataPixelDataFieldInfo = (~) Pixdata
    type AttrGetType PixdataPixelDataFieldInfo = Maybe (Ptr Word8)
    type AttrLabel PixdataPixelDataFieldInfo = "pixel_data"
    attrGet _ = pixdataReadPixelData
    attrSet _ = pixdataWritePixelData
    attrConstruct = undefined
    attrClear _ = pixdataClearPixelData

pixdataPixelData :: AttrLabelProxy "pixelData"
pixdataPixelData = AttrLabelProxy



type instance AttributeList Pixdata = PixdataAttributeList
type PixdataAttributeList = ('[ '("magic", PixdataMagicFieldInfo), '("length", PixdataLengthFieldInfo), '("pixdataType", PixdataPixdataTypeFieldInfo), '("rowstride", PixdataRowstrideFieldInfo), '("width", PixdataWidthFieldInfo), '("height", PixdataHeightFieldInfo), '("pixelData", PixdataPixelDataFieldInfo)] :: [(Symbol, *)])

-- method Pixdata::deserialize
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GdkPixbuf" "Pixdata", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "stream_length", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "stream", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "stream_length", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "gdk_pixdata_deserialize" gdk_pixdata_deserialize :: 
    Ptr Pixdata ->                          -- _obj : TInterface "GdkPixbuf" "Pixdata"
    Word32 ->                               -- stream_length : TBasicType TUInt
    Ptr Word8 ->                            -- stream : TCArray False (-1) 1 (TBasicType TUInt8)
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{-# DEPRECATED pixdataDeserialize ["(Since version 2.32)","Use #GResource instead."]#-}
pixdataDeserialize ::
    (MonadIO m) =>
    Pixdata                                 -- _obj
    -> ByteString                           -- stream
    -> m ()                                 -- result
pixdataDeserialize _obj stream = liftIO $ do
    let streamLength = fromIntegral $ B.length stream
    let _obj' = unsafeManagedPtrGetPtr _obj
    stream' <- packByteString stream
    onException (do
        _ <- propagateGError $ gdk_pixdata_deserialize _obj' streamLength stream'
        touchManagedPtr _obj
        freeMem stream'
        return ()
     ) (do
        freeMem stream'
     )

data PixdataDeserializeMethodInfo
instance (signature ~ (ByteString -> m ()), MonadIO m) => MethodInfo PixdataDeserializeMethodInfo Pixdata signature where
    overloadedMethod _ = pixdataDeserialize

-- method Pixdata::serialize
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GdkPixbuf" "Pixdata", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "stream_length_p", argType = TBasicType TUInt, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : [Arg {argCName = "stream_length_p", argType = TBasicType TUInt, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- returnType : Just (TCArray False (-1) 1 (TBasicType TUInt8))
-- throws : False
-- Skip return : False

foreign import ccall "gdk_pixdata_serialize" gdk_pixdata_serialize :: 
    Ptr Pixdata ->                          -- _obj : TInterface "GdkPixbuf" "Pixdata"
    Ptr Word32 ->                           -- stream_length_p : TBasicType TUInt
    IO (Ptr Word8)

{-# DEPRECATED pixdataSerialize ["(Since version 2.32)","Use #GResource instead."]#-}
pixdataSerialize ::
    (MonadIO m) =>
    Pixdata                                 -- _obj
    -> m ByteString                         -- result
pixdataSerialize _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    streamLengthP <- allocMem :: IO (Ptr Word32)
    result <- gdk_pixdata_serialize _obj' streamLengthP
    streamLengthP' <- peek streamLengthP
    checkUnexpectedReturnNULL "gdk_pixdata_serialize" result
    result' <- (unpackByteStringWithLength streamLengthP') result
    freeMem result
    touchManagedPtr _obj
    freeMem streamLengthP
    return result'

data PixdataSerializeMethodInfo
instance (signature ~ (m ByteString), MonadIO m) => MethodInfo PixdataSerializeMethodInfo Pixdata signature where
    overloadedMethod _ = pixdataSerialize

-- method Pixdata::to_csource
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GdkPixbuf" "Pixdata", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dump_type", argType = TInterface "GdkPixbuf" "PixdataDumpType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface "GLib" "String")
-- throws : False
-- Skip return : False

foreign import ccall "gdk_pixdata_to_csource" gdk_pixdata_to_csource :: 
    Ptr Pixdata ->                          -- _obj : TInterface "GdkPixbuf" "Pixdata"
    CString ->                              -- name : TBasicType TUTF8
    CUInt ->                                -- dump_type : TInterface "GdkPixbuf" "PixdataDumpType"
    IO (Ptr GLib.String)

{-# DEPRECATED pixdataToCsource ["(Since version 2.32)","Use #GResource instead."]#-}
pixdataToCsource ::
    (MonadIO m) =>
    Pixdata                                 -- _obj
    -> T.Text                               -- name
    -> [PixdataDumpType]                    -- dumpType
    -> m GLib.String                        -- result
pixdataToCsource _obj name dumpType = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    name' <- textToCString name
    let dumpType' = gflagsToWord dumpType
    result <- gdk_pixdata_to_csource _obj' name' dumpType'
    checkUnexpectedReturnNULL "gdk_pixdata_to_csource" result
    result' <- (wrapBoxed GLib.String) result
    touchManagedPtr _obj
    freeMem name'
    return result'

data PixdataToCsourceMethodInfo
instance (signature ~ (T.Text -> [PixdataDumpType] -> m GLib.String), MonadIO m) => MethodInfo PixdataToCsourceMethodInfo Pixdata signature where
    overloadedMethod _ = pixdataToCsource

type family ResolvePixdataMethod (t :: Symbol) (o :: *) :: * where
    ResolvePixdataMethod "deserialize" o = PixdataDeserializeMethodInfo
    ResolvePixdataMethod "serialize" o = PixdataSerializeMethodInfo
    ResolvePixdataMethod "toCsource" o = PixdataToCsourceMethodInfo
    ResolvePixdataMethod l o = MethodResolutionFailed l o

instance (info ~ ResolvePixdataMethod t Pixdata, MethodInfo info Pixdata p) => IsLabelProxy t (Pixdata -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolvePixdataMethod t Pixdata, MethodInfo info Pixdata p) => IsLabel t (Pixdata -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif