packages feed

gi-cairo-again-1.16.0: src/GI/Cairo/Structs/Matrix.hs

{-# LANGUAGE FlexibleInstances #-}
module GI.Cairo.Structs.Matrix where

import           Data.GI.Base.BasicTypes
import           Data.GI.Base.ManagedPtr
import           Foreign.ForeignPtr
import           Foreign.Marshal.Alloc
import           Foreign.Ptr
import           Foreign.Storable
import qualified Graphics.Cairo.Types as T
import           Helper

newtype Matrix = Matrix (ManagedPtr Matrix)

instance BoxedObject Matrix where
  boxedType _ = matrixGType

foreign import ccall safe "cairo_gobject_matrix__get_type"
  matrixGType :: IO GType

instance Connector Matrix (T.Matrix Double) where
  fromGI (Matrix (ManagedPtr fp _ _)) = withForeignPtr (castForeignPtr fp) peek
  toGI md = do
    p <- malloc
    poke p md
    Matrix <$> newManagedPtr_ (castPtr p)