packages feed

TeaHS-0.3: Tea/Size.hs

-- | Includes the Size class for types with dimensions, its instances, and
--   monadic convenience functions.
module Tea.Size ( Size (width,height)
                , heightM
                , widthM
                ) where

import Graphics.UI.SDL(Surface, surfaceGetHeight, surfaceGetWidth)
import Tea.Screen
import Tea.Bitmap
import Tea.Tea

-- |A class instantiated over all types that have a width and height.
--  Intended really only for internal use. Define your own Size class
--  if you want similar behavior.
class Size v where
   width  :: v -> Int
   width  = surfaceGetWidth  . size_buffer
   height :: v -> Int
   height = surfaceGetHeight . size_buffer
   size_buffer :: v -> Surface

widthM :: (Size a) => Tea s a -> Tea s Int
widthM  = fmap width
heightM :: (Size a) => Tea s a -> Tea s Int
heightM = fmap height

instance Size Screen where
   size_buffer = screenBuffer

instance Size Bitmap where
   size_buffer = buffer