{-# OPTIONS -fglasgow-exts #-}
-----------------------------------------------------------------------------
{-| Module    : Rect.hs
    Copyright : (c) David Harley 2010
    Project   : qtHaskell
    Version   : 1.1.4
    Modified  : 2010-09-02 17:02:14
    
    Warning   : this file is machine generated - do not modify.
--}
-----------------------------------------------------------------------------

module Qth.ClassTypes.Core.Rect (
  IRect(..), Rect, RectF
  ,withCRect, withCRectF, withRectResult, withRectFResult
  )
  where

import Foreign.C
import Foreign.Ptr
import Foreign.Storable
import Foreign.Marshal.Alloc
import Qtc.Classes.Types
import Qth.Core.Base

data IRect a = (Num a, Ord a) => IRect !a !a !a !a

type Rect = IRect Int
type RectF = IRect Double

withCRect :: Rect -> (CInt -> CInt -> CInt -> CInt -> IO a) -> IO a
withCRect (IRect x y w h) f
  = f (toCInt x) (toCInt y) (toCInt w) (toCInt h)

withRectResult :: (Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO ()) -> IO Rect
withRectResult f
  = alloca $ \cx ->
    alloca $ \cy ->
    alloca $ \cw ->
    alloca $ \ch ->
    do f cx cy cw ch
       x <- peek cx
       y <- peek cy
       w <- peek cw
       h <- peek ch
       return (fromCRect x y w h)

fromCRect :: CInt -> CInt -> CInt -> CInt -> Rect
fromCRect x y w h
  = IRect (fromCInt x) (fromCInt y) (fromCInt w) (fromCInt h)

withCRectF :: RectF -> (CDouble -> CDouble -> CDouble -> CDouble -> IO a) -> IO a
withCRectF (IRect x y w h) f
  = f (toCDouble x) (toCDouble y) (toCDouble w) (toCDouble h)

withRectFResult :: (Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()) -> IO RectF
withRectFResult f
  = alloca $ \cx ->
    alloca $ \cy ->
    alloca $ \cw ->
    alloca $ \ch ->
    do f cx cy cw ch
       x <- peek cx
       y <- peek cy
       w <- peek cw
       h <- peek ch
       return (fromCRectF x y w h)

fromCRectF :: CDouble -> CDouble -> CDouble -> CDouble -> RectF
fromCRectF x y w h
  = IRect (fromCDouble x) (fromCDouble y) (fromCDouble w) (fromCDouble h)