-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A functional interface to 2D drawing in OpenGL -- -- This module is a functional wrapper around OpenGL, so you don't have -- to go into the deep, dark world of imperative stateful programming -- just to draw stuff. It supports 2D only (for now), with support -- drawing geometry, images, and text. @package graphics-drawingcombinators @version 0.4 -- | Drawing combinators as a functional interface to OpenGL (for 2D -- drawings only... for now). -- -- This module is intended to be imported qualified, as in: -- --
-- import Graphics.DrawingCombinators as Draw ---- -- It is recommended that you use this module in combination with SDL; it -- has not been tested in any other environments. For some reason the -- selection stuff (selectRegion, click) crashes GHCi, but -- it works okay compiled. module Graphics.DrawingCombinators -- | Draw a represents a drawing which returns a value of type a -- when selected. data Draw a -- | Draw a Drawing on the screen in the current OpenGL coordinate system -- (which, in absense of information, is (-1,-1) in the lower left and -- (1,1) in the upper right). runDrawing :: Draw a -> IO () -- | Like runDrawing, but clears the screen first, and sets up a little -- necessary OpenGL state. This is so you can use this module and pretend -- that OpenGL doesn't exist at all. draw :: Draw a -> IO () type Vec2 = (Double, Double) -- | Given a bounding box, lower left and upper right in the default -- coordinate system (-1,-1) to (1,1), return the topmost drawing's value -- (with respect to over) intersecting that bounding box. selectRegion :: Vec2 -> Vec2 -> Draw a -> IO (Maybe a) click :: Vec2 -> Draw a -> IO (Maybe a) over :: Draw a -> Draw a -> Draw a overlay :: (a -> a -> a) -> Draw a -> Draw a -> Draw a empty :: Draw a -- | Perform initialization of the library. This can fail. init :: IO () -- | Draw a single pixel at the specified point. point :: Vec2 -> Draw () -- | Draw a line connecting the two given points. line :: Vec2 -> Vec2 -> Draw () -- | Draw a regular polygon centered at the origin with n sides. regularPoly :: Int -> Draw () -- | Draw a unit circle centered at the origin. This is equivalent to -- regularPoly 24. circle :: Draw () -- | Draw a convex polygon given by the list of points. convexPoly :: [Vec2] -> Draw () -- | Translate the given drawing by the given amount. translate :: Vec2 -> Draw a -> Draw a -- | Rotate the given drawing counterclockwise by the given number of -- radians. rotate :: Double -> Draw a -> Draw a -- | scale x y d scales d by a factor of x in -- the horizontal direction and y in the vertical direction. scale :: Double -> Double -> Draw a -> Draw a type Color = (Double, Double, Double, Double) -- | color c d sets the color of the drawing to exactly -- c. color :: Color -> Draw a -> Draw a -- | colorFunc f d modifies all colors appearing in d -- with the function f. For example: -- --
-- colorFunc (\(r,g,b,a) -> (r,g,b,a/2)) d ---- -- Will draw d at greater transparency, regardless of the calls to color -- within. colorFunc :: (Color -> Color) -> Draw a -> Draw a -- | A sprite represents a bitmap image. data Sprite -- | Indicate how a nonrectangular image is to be mapped to a sprite. data SpriteScaling -- | ScaleMax will set the maximum of the height and width of the image to -- 1. ScaleMax :: SpriteScaling -- | ScaleWidth will set the width of the image to 1, and scale the height -- appropriately. ScaleWidth :: SpriteScaling -- | ScaleHeight will set the height of the image to 1, and scale the width -- appropriately. ScaleHeight :: SpriteScaling -- | Convert an SDL.Surface to a Sprite. surfaceToSprite :: SpriteScaling -> Surface -> IO Sprite -- | Load an image from a file and create a sprite out of it. imageToSprite :: SpriteScaling -> FilePath -> IO Sprite -- | Draw a sprite at the origin. sprite :: Sprite -> Draw () data Font -- | Load a TTF font from a file. openFont :: String -> Int -> IO Font -- | Draw a string using a font. The resulting string will have height 1. text :: Font -> String -> Draw () instance (Monoid a) => Monoid (Draw a) instance Functor Draw