----------------------------------------------------------------------------- -- | -- Module : Graphics.HGL.Internals.Types -- Copyright : (c) Alastair Reid, 1999-2003 -- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : libraries@haskell.org -- Stability : internal -- Portability : portable -- -- Basic types for a simple graphics library. -- ----------------------------------------------------------------------------- -- #hide module Graphics.HGL.Internals.Types where #if !X_DISPLAY_MISSING import qualified Graphics.X11.Xlib as X #else import Graphics.Win32.Misc(timeGetTime) import Control.Monad( liftM ) #endif import Data.Ix(Ix) import Data.Word(Word8) ---------------------------------------------------------------- -- Units ---------------------------------------------------------------- -- | A distance on the screen, measured in pixels. type Dimension = Int -- | A position within a window, measured in pixels to the right and down -- from the top left corner. type Point = (Int,Int) -- | A (width, height) pair, both measured in pixels. type Size = (Int,Int) -- | An angle in degrees (0 to 360). type Angle = Double -- | Time, measured in milliseconds. type Time = Integer -- | Time in milliseconds since some arbitrary epoch. getTime :: IO Integer #if !X_DISPLAY_MISSING getTime = X.gettimeofday_in_milliseconds #else getTime = liftM toInteger timeGetTime #endif --------------------------------------------------------------- -- Drawing ---------------------------------------------------------------- -- | A color, comprising red, green and blue components. data RGB = RGB Word8 Word8 Word8 -- | The style of line drawn by a pen. data Style = Solid | Dash -- "-------" | Dot -- "......." | DashDot -- "_._._._" | DashDotDot -- "_.._.._" | Null | InsideFrame -- | Background mode for drawing text. data BkMode = Opaque -- ^ Draw text on a bounding rectangle filled with the -- current background color. | Transparent -- ^ Draw text without a background rectangle. -- | How strings drawn with 'Graphics.HGL.Draw.Text.text' are positioned -- relative to the specified reference point. type Alignment = (HAlign, VAlign) -- | Horizontal alignment of text. -- Names have a tick to distinguish them from "Prelude" names. data HAlign = Left' -- ^ align the left edge of the text with the reference point | Center -- ^ center the text with the reference point | Right' -- ^ align the right edge of the text with the reference point deriving (Enum, Eq, Ord, Ix, Show) -- | Vertical alignment of text. data VAlign = Top -- ^ align the top edge of the text with the reference point | Baseline -- ^ align the baseline of the text with the reference point | Bottom -- ^ align the bottom edge of the text with the reference point deriving (Enum, Eq, Ord, Ix, Show) --------------------------------------------------------------- -- Windows ---------------------------------------------------------------- -- | Title of a window. type Title = String -- | How to draw in a window. data RedrawMode = DoubleBuffered -- ^ use a /double buffer/ to reduce flicker. -- You should probably use this for animations. | Unbuffered -- ^ draw directly to the window. -- This runs slightly faster but is more prone -- to flicker.