{-# LANGUAGE TemplateHaskell, TypeFamilies #-}

module Data.Bitmap.Function.Internal
    ( BitmapFunction(..), bmpf_dimensions, bmpf_getPixel
    ) where

import Control.Monad.Record
import Data.Bitmap.Class
import Data.Bitmap.Pixel
import Data.Bitmap.Types

data BitmapFunction = BitmapFunction
    { _bmpf_dimensions :: Dimensions Integer
    , _bmpf_getPixel   :: Coordinates Integer -> PixelRGBA
    }

mkLabels [''BitmapFunction]

instance Bitmap BitmapFunction where
    type BIndexType BitmapFunction = Integer
    type BPixelType BitmapFunction = PixelRGBA

    depth = const Depth32RGBA

    dimensions      = (bmpf_dimensions <:)

    getPixel        = (bmpf_getPixel   <:)

    constructPixels = flip BitmapFunction