{-# LINE 1 "src/Bindings/WLC/Geometry.hsc" #-}

{-# LINE 2 "src/Bindings/WLC/Geometry.hsc" #-}

{-# LINE 3 "src/Bindings/WLC/Geometry.hsc" #-}

{-|
Module      : Bindings.WLC.Geometry
Description : WLC Geometry
Copyright   : (c) Ashley Towns 2016
License     : BSD3
Maintainer  : mail@ashleytowns.id.au
Stability   : experimental
Portability : POSIX

Provides bindings to the geometry WLC data types.
-}
module Bindings.WLC.Geometry where
import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word

{-# LINE 17 "src/Bindings/WLC/Geometry.hsc" #-}

import Foreign.C.Types

-- |Fixed 2D point

{-# LINE 22 "src/Bindings/WLC/Geometry.hsc" #-}

{-# LINE 23 "src/Bindings/WLC/Geometry.hsc" #-}

{-# LINE 24 "src/Bindings/WLC/Geometry.hsc" #-}
data C'wlc_point = C'wlc_point{
  c'wlc_point'x :: CInt,
  c'wlc_point'y :: CInt
} deriving (Eq,Show)
p'wlc_point'x p = plusPtr p 0
p'wlc_point'x :: Ptr (C'wlc_point) -> Ptr (CInt)
p'wlc_point'y p = plusPtr p 4
p'wlc_point'y :: Ptr (C'wlc_point) -> Ptr (CInt)
instance Storable C'wlc_point where
  sizeOf _ = 8
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    return $ C'wlc_point v0 v1
  poke p (C'wlc_point v0 v1) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    return ()

{-# LINE 25 "src/Bindings/WLC/Geometry.hsc" #-}

-- |Fixed 2D size

{-# LINE 28 "src/Bindings/WLC/Geometry.hsc" #-}

{-# LINE 29 "src/Bindings/WLC/Geometry.hsc" #-}

{-# LINE 30 "src/Bindings/WLC/Geometry.hsc" #-}
data C'wlc_size = C'wlc_size{
  c'wlc_size'w :: CUInt,
  c'wlc_size'h :: CUInt
} deriving (Eq,Show)
p'wlc_size'w p = plusPtr p 0
p'wlc_size'w :: Ptr (C'wlc_size) -> Ptr (CUInt)
p'wlc_size'h p = plusPtr p 4
p'wlc_size'h :: Ptr (C'wlc_size) -> Ptr (CUInt)
instance Storable C'wlc_size where
  sizeOf _ = 8
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    return $ C'wlc_size v0 v1
  poke p (C'wlc_size v0 v1) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    return ()

{-# LINE 31 "src/Bindings/WLC/Geometry.hsc" #-}

-- |Fixed 2D point, size pair

{-# LINE 34 "src/Bindings/WLC/Geometry.hsc" #-}

{-# LINE 35 "src/Bindings/WLC/Geometry.hsc" #-}

{-# LINE 36 "src/Bindings/WLC/Geometry.hsc" #-}
data C'wlc_geometry = C'wlc_geometry{
  c'wlc_geometry'origin :: C'wlc_point,
  c'wlc_geometry'size :: C'wlc_size
} deriving (Eq,Show)
p'wlc_geometry'origin p = plusPtr p 0
p'wlc_geometry'origin :: Ptr (C'wlc_geometry) -> Ptr (C'wlc_point)
p'wlc_geometry'size p = plusPtr p 8
p'wlc_geometry'size :: Ptr (C'wlc_geometry) -> Ptr (C'wlc_size)
instance Storable C'wlc_geometry where
  sizeOf _ = 16
  alignment _ = 4
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 8
    return $ C'wlc_geometry v0 v1
  poke p (C'wlc_geometry v0 v1) = do
    pokeByteOff p 0 v0
    pokeByteOff p 8 v1
    return ()

{-# LINE 37 "src/Bindings/WLC/Geometry.hsc" #-}