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

module HROOT.Core.TAttFill.Implementation where


import FFICXX.Runtime.Cast

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

import HROOT.Core.Deletable.RawType
import HROOT.Core.Deletable.Cast
import HROOT.Core.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 :: CInt -> CInt -> 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)