packages feed

gloss-relative-0.1.0.0: src/Graphics/Gloss/Relative/Internal/Dimension.hs

module Graphics.Gloss.Relative.Internal.Dimension where

import qualified Graphics.Gloss as Gloss
import Graphics.Gloss.Data.Display
import Graphics.Gloss.Interface.Environment

import Control.Monad

-- | A dimension is pair @(width,height)@.
-- When used as a screen size, the position @(0,0)@ is considered to be at the center.
type Dimension = (Float,Float)

-- | A screen size screen size is a 'Dimension' in pixels, where the position @(0,0)@ is at the center.
type ScreenSize = (Int,Int)

-- | Gets the dimension of a Gloss 'Display'.
getDisplayScreenSize :: Display -> IO ScreenSize 
getDisplayScreenSize (InWindow _ dim _) = return dim
getDisplayScreenSize (FullScreen) = getScreenSize

getDisplayDimension :: Display -> IO Dimension 
getDisplayDimension = liftM screenSizeToDimension . getDisplayScreenSize

screenSizeToDimension :: ScreenSize -> Dimension
screenSizeToDimension (w,h) = (realToFrac w,realToFrac h)

dimensionToScreenSize :: Dimension -> ScreenSize
dimensionToScreenSize (w,h) = (ceiling w,ceiling h)