{-# OPTIONS_HADDOCK hide #-}
module Codec.BMP.BitmapInfo
	( BitmapInfo	(..)
	, getBitmapInfoV3)
where
import Codec.BMP.BitmapInfoV3
import Codec.BMP.BitmapInfoV4
import Codec.BMP.BitmapInfoV5
import Data.Binary
import Data.Binary.Get

-- Image Headers --------------------------------------------------------------
-- | A wrapper for the various image header types.
--   
data BitmapInfo
	= InfoV3 BitmapInfoV3
	| InfoV4 BitmapInfoV4
	| InfoV5 BitmapInfoV5
	deriving (Show)


instance Binary BitmapInfo where
 get
  = do	size	<- lookAhead getWord32le 
	case size of
	 40 -> do
		info 	<- get
		return	$ InfoV3 info
		
	 108 -> do
		info	<- get
		return	$ InfoV4 info
		
	 124 -> do
		info	<- get
		return	$ InfoV5 info
		
	 _   -> error "Codec.BMP.BitmapInfo.get: unhandled header size"
	
 put xx
  = case xx of
	InfoV3 info	-> put info
	InfoV4 info	-> put info
	InfoV5 info	-> put info
	

-- | Get the common `BitmapInfoV3` structure from a `BitmapInfo`
getBitmapInfoV3 :: BitmapInfo -> BitmapInfoV3
getBitmapInfoV3 bi
 = case bi of
	InfoV3 info	-> info
	InfoV4 info	-> dib4InfoV3 info
	InfoV5 info	-> dib4InfoV3 $ dib5InfoV4 info