{-# LANGUAGE BangPatterns #-}

module Vision.Primitive (
      module Vision.Primitive.Shape
    , Point, Size, Rect (..), RPoint (..)
    ) where

import Data.RatioInt (RatioInt)

import Vision.Primitive.Shape

-- | Coordinates inside the image.
--
-- Can be constructed using 'ix2'. The first parameter is the y coordinate while
-- the second is the x coordinate (i.e. @'ix2' y x@). Image origin (@'ix2' 0 0@)
-- is located in the upper left corner.
type Point = DIM2

-- | Size of an object.
--
-- Can be constructed using 'ix2'. The first parameter is the height while the
-- second is the width (i.e. @ix2 h w@).
type Size = DIM2

data Rect = Rect {
      rX     :: {-# UNPACK #-} !Int, rY      :: {-# UNPACK #-} !Int
    , rWidth :: {-# UNPACK #-} !Int, rHeight :: {-# UNPACK #-} !Int
    } deriving (Show, Read, Eq, Ord)

-- | Rational coordinates used for interpolations.
data RPoint = RPoint {
      rpX :: {-# UNPACK #-} !RatioInt, rpY :: {-# UNPACK #-} !RatioInt
    } deriving (Show, Read, Eq, Ord)