{-# LANGUAGE ForeignFunctionInterface, TypeFamilies, MultiParamTypeClasses, 
             FlexibleInstances, TypeSynonymInstances, EmptyDataDecls, 
             OverlappingInstances, IncoherentInstances #-}

module HROOT.Class.TAttFill.Implementation where


import HROOT.TypeCast

import HROOT.Class.TAttFill.RawType
import HROOT.Class.TAttFill.FFI
import HROOT.Class.TAttFill.Interface
import HROOT.Class.TAttFill.Cast

import HROOT.Class.Deletable.RawType
import HROOT.Class.Deletable.Cast
import HROOT.Class.Deletable.Interface

import Data.Word
-- import Foreign.C            
-- import Foreign.Ptr
import Foreign.ForeignPtr

import System.IO.Unsafe


instance ITAttFill TAttFill where
  setFillColor = xform1 c_tattfill_setfillcolor
  setFillStyle = xform1 c_tattfill_setfillstyle
instance IDeletable TAttFill where
  delete = xform0 c_tattfill_delete

instance ITAttFill (Exist TAttFill) where
  setFillColor (ETAttFill x) = setFillColor x
  setFillStyle (ETAttFill x) = setFillStyle x
instance IDeletable (Exist TAttFill) where
  delete (ETAttFill x) = delete x


newTAttFill :: Int -> Int -> IO TAttFill
newTAttFill = xform1 c_tattfill_newtattfill





instance FPtr (Exist TAttFill) where
  type Raw (Exist TAttFill) = RawTAttFill
  get_fptr (ETAttFill obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETAttFill (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttFill) :: TAttFill)