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

module HROOT.Class.TAttCanvas.Implementation where


import HROOT.TypeCast

import HROOT.Class.TAttCanvas.RawType
import HROOT.Class.TAttCanvas.FFI
import HROOT.Class.TAttCanvas.Interface
import HROOT.Class.TAttCanvas.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 ITAttCanvas TAttCanvas where
instance IDeletable TAttCanvas where
  delete = xform0 c_tattcanvas_delete

instance ITAttCanvas (Exist TAttCanvas) where

instance IDeletable (Exist TAttCanvas) where
  delete (ETAttCanvas x) = delete x


newTAttCanvas :: IO TAttCanvas
newTAttCanvas = xformnull c_tattcanvas_newtattcanvas





instance FPtr (Exist TAttCanvas) where
  type Raw (Exist TAttCanvas) = RawTAttCanvas
  get_fptr (ETAttCanvas obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETAttCanvas (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttCanvas) :: TAttCanvas)