-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Painless 2D vector graphics, animations and simulations. -- @package gloss @version 1.8.2.2 module Graphics.Gloss.Data.Quad -- | Represents a Quadrant in the 2D plane. data Quad -- | North West NW :: Quad -- | North East NE :: Quad -- | South West SW :: Quad -- | South East SE :: Quad -- | A list of all quadrants. Same as [NW .. SE]. allQuads :: [Quad] instance Show Quad instance Eq Quad instance Enum Quad module Graphics.Gloss.Data.Point -- | A point on the x-y plane. Points can also be treated as -- Vectors, so Graphics.Gloss.Data.Vector may also be -- useful. type Point = (Float, Float) -- | Test whether a point lies within a rectangular box that is oriented on -- the x-y plane. The points P1-P2 are opposing points of the box, but -- need not be in a particular order. -- --
-- P2 +-------+ -- | | -- | + P0 | -- | | -- +-------+ P1 --pointInBox :: Point -> Point -> Point -> Bool instance Num Point -- | Geometric functions concerning angles. If not otherwise specified, all -- angles are in radians. module Graphics.Gloss.Geometry.Angle -- | Convert degrees to radians degToRad :: Float -> Float -- | Convert radians to degrees radToDeg :: Float -> Float -- | Normalise an angle to be between 0 and 2*pi radians normaliseAngle :: Float -> Float -- | Geometric functions concerning vectors. module Graphics.Gloss.Data.Vector -- | A vector can be treated as a point, and vis-versa. type Vector = Point -- | The magnitude of a vector. magV :: Vector -> Float -- | The angle of this vector, relative to the +ve x-axis. argV :: Vector -> Float -- | The dot product of two vectors. dotV :: Vector -> Vector -> Float -- | The determinant of two vectors. detV :: Vector -> Vector -> Float -- | Multiply a vector by a scalar. mulSV :: Float -> Vector -> Vector -- | Rotate a vector by an angle (in radians). +ve angle is -- counter-clockwise. rotateV :: Float -> Vector -> Vector -- | Compute the inner angle (in radians) between two vectors. angleVV :: Vector -> Vector -> Float -- | Normalise a vector, so it has a magnitude of 1. normaliseV :: Vector -> Vector -- | Produce a unit vector at a given angle relative to the +ve x-axis. The -- provided angle is in radians. unitVectorAtAngle :: Float -> Vector -- | Geometric functions concerning lines and segments. -- -- A Line is taken to be infinite in length, while a -- Seg is finite length line segment represented by its two -- endpoints. module Graphics.Gloss.Geometry.Line -- | Check if line segment (P1-P2) clears a box (P3-P4) by being well -- outside it. segClearsBox :: Point -> Point -> Point -> Point -> Bool -- | Given an infinite line which intersects P1 and P1, -- return the point on that line that is closest to P3 closestPointOnLine :: Point -> Point -> Point -> Point -- | Given an infinite line which intersects P1 and P2, let P4 be the point -- on the line that is closest to P3. -- -- Return an indication of where on the line P4 is relative to P1 and P2. -- --
-- if P4 == P1 then 0 -- if P4 == P2 then 1 -- if P4 is halfway between P1 and P2 then 0.5 ---- --
-- | -- P1 -- | -- P4 +---- P3 -- | -- P2 -- | --closestPointOnLineParam :: Point -> Point -> Point -> Float -- | Given four points specifying two lines, get the point where the two -- lines cross, if any. Note that the lines extend off to infinity, so -- the intersection point might not line between either of the two pairs -- of points. -- --
-- \ / -- P1 P4 -- \ / -- + -- / \ -- P3 P2 -- / \ --intersectLineLine :: Point -> Point -> Point -> Point -> Maybe Point -- | Get the point where a segment P1-P2 crosses an infinite line -- P3-P4, if any. intersectSegLine :: Point -> Point -> Point -> Point -> Maybe Point -- | Get the point where a segment crosses a horizontal line, if any. -- --
-- + P1 -- / -- -------+--------- -- / y0 -- P2 + --intersectSegHorzLine :: Point -> Point -> Float -> Maybe Point -- | Get the point where a segment crosses a vertical line, if any. -- --
-- | -- | + P1 -- | / -- + -- / | -- P2 + | -- | x0 --intersectSegVertLine :: Point -> Point -> Float -> Maybe Point -- | Get the point where a segment P1-P2 crosses another segement -- P3-P4, if any. intersectSegSeg :: Point -> Point -> Point -> Point -> Maybe Point -- | Check if an arbitrary segment intersects a horizontal segment. -- --
-- + P2 -- / -- (xa, y3) +---+----+ (xb, y3) -- / -- P1 + --intersectSegHorzSeg :: Point -> Point -> Float -> Float -> Float -> Maybe Point -- | Check if an arbitrary segment intersects a vertical segment. -- --
-- (x3, yb) + -- | + P1 -- | / -- + -- / | -- P2 + | -- + (x3, ya) --intersectSegVertSeg :: Point -> Point -> Float -> Float -> Float -> Maybe Point -- | Represents an integral rectangular area of the 2D plane. Using -- Ints (instead of Floats) for the bounds means we can -- safely compare extents for equality. module Graphics.Gloss.Data.Extent -- | A rectangular area of the 2D plane. We keep the type abstract to -- ensure that invalid extents cannot be constructed. data Extent -- | An integral coordinate. type Coord = (Int, Int) -- | Construct an extent. The north value must be > south, and east > -- west, else error. makeExtent :: Int -> Int -> Int -> Int -> Extent -- | Take the NSEW components of an extent. takeExtent :: Extent -> (Int, Int, Int, Int) -- | A square extent of a given size. squareExtent :: Int -> Extent -- | Get the width and height of an extent. sizeOfExtent :: Extent -> (Int, Int) -- | Check if an extent is a square with a width and height of 1. isUnitExtent :: Extent -> Bool -- | Check whether a coordinate lies inside an extent. coordInExtent :: Extent -> Coord -> Bool -- | Check whether a point lies inside an extent. pointInExtent :: Extent -> Point -> Bool -- | Get the coordinate that lies at the center of an extent. centerCoordOfExtent :: Extent -> (Int, Int) -- | Cut one quadrant out of an extent. cutQuadOfExtent :: Quad -> Extent -> Extent -- | Get the quadrant that this coordinate lies in, if any. quadOfCoord :: Extent -> Coord -> Maybe Quad -- | Constuct a path to a particular coordinate in an extent. pathToCoord :: Extent -> Coord -> Maybe [Quad] -- | If a line segment (P1-P2) intersects the outer edge of an extent then -- return the intersection point, that is closest to P1, if any. If P1 is -- inside the extent then Nothing. -- --
-- P2 -- / -- ----/- -- | / | -- + | -- /------ -- / -- P1 -- --intersectSegExtent :: Point -> Point -> Extent -> Maybe Point -- | Check whether a line segment's endpoints are inside an extent, or if -- it intersects with the boundary. touchesSegExtent :: Point -> Point -> Extent -> Bool instance Eq Extent instance Show Extent -- | A QuadTree can be used to recursively divide up 2D space into -- quadrants. The smallest division corresponds to an unit Extent, -- so the total depth of the tree will depend on what sized Extent -- you start with. module Graphics.Gloss.Data.QuadTree -- | The quad tree structure. data QuadTree a -- | An empty node. TNil :: QuadTree a -- | A leaf containint some value. TLeaf :: a -> QuadTree a -- | A node with four children. TNode :: (QuadTree a) -> (QuadTree a) -> (QuadTree a) -> (QuadTree a) -> QuadTree a -- | A TNil tree. emptyTree :: QuadTree a -- | A node with TNil. for all its branches. emptyNode :: QuadTree a -- | Get a quadrant from a node. If the tree does not have an outer node -- then Nothing. takeQuadOfTree :: Quad -> QuadTree a -> Maybe (QuadTree a) -- | Apply a function to a quadrant of a node. If the tree does not have an -- outer node then return the original tree. liftToQuad :: Quad -> (QuadTree a -> QuadTree a) -> QuadTree a -> QuadTree a -- | Insert a value into the tree at the position given by a path. If the -- path intersects an existing TLeaf then return the original -- tree. insertByPath :: [Quad] -> a -> QuadTree a -> QuadTree a -- | Insert a value into the node containing this coordinate. The node is -- created at maximum depth, corresponding to an unit Extent. insertByCoord :: Extent -> Coord -> a -> QuadTree a -> Maybe (QuadTree a) -- | Lookup a node based on a path to it. lookupNodeByPath :: [Quad] -> QuadTree a -> Maybe (QuadTree a) -- | Lookup an element based given a path to it. lookupByPath :: [Quad] -> QuadTree a -> Maybe a -- | Lookup a node if a tree given a coordinate which it contains. lookupByCoord :: Extent -> Coord -> QuadTree a -> Maybe a -- | Flatten a QuadTree into a list of its contained values, with -- coordinates. flattenQuadTree :: Extent -> QuadTree a -> [(Coord, a)] -- | Flatten a QuadTree into a list of its contained values, with -- coordinates. flattenQuadTreeWithExtents :: Extent -> QuadTree a -> [(Extent, a)] instance Show a => Show (QuadTree a) module Graphics.Gloss.Geometry module Graphics.Gloss.Data.Display -- | Describes how Gloss should display its output. data Display -- | Display in a window with the given name, size and position. InWindow :: String -> (Int, Int) -> (Int, Int) -> Display -- | Display full screen with a drawing area of the given size. FullScreen :: (Int, Int) -> Display instance Eq Display instance Read Display instance Show Display -- | Predefined and custom colors. module Graphics.Gloss.Data.Color -- | An abstract color value. We keep the type abstract so we can be sure -- that the components are in the required range. To make a custom color -- use makeColor. data Color -- | Make a custom color. All components are clamped to the range [0..1]. makeColor :: Float -> Float -> Float -> Float -> Color -- | Make a custom color. You promise that all components are clamped to -- the range [0..1] makeColor' :: Float -> Float -> Float -> Float -> Color -- | Make a custom color. All components are clamped to the range [0..255]. makeColor8 :: Int -> Int -> Int -> Int -> Color -- | Make a custom color. Components should be in the range [0..1] but this -- is not checked. rawColor :: Float -> Float -> Float -> Float -> Color -- | Take the RGBA components of a color. rgbaOfColor :: Color -> (Float, Float, Float, Float) -- | Mix two colors with the given ratios. mixColors :: Float -> Float -> Color -> Color -> Color -- | Add RGB components of a color component-wise, then normalise them to -- the highest resulting one. The alpha components are averaged. addColors :: Color -> Color -> Color -- | Make a dimmer version of a color, scaling towards black. dim :: Color -> Color -- | Make a brighter version of a color, scaling towards white. bright :: Color -> Color -- | Lighten a color, adding white. light :: Color -> Color -- | Darken a color, adding black. dark :: Color -> Color -- | A greyness of a given magnitude. greyN :: Float -> Color black :: Color white :: Color red :: Color green :: Color blue :: Color yellow :: Color cyan :: Color magenta :: Color rose :: Color violet :: Color azure :: Color aquamarine :: Color chartreuse :: Color orange :: Color instance Typeable Color instance Show Color instance Eq Color instance Data Color instance Num Color -- | Data types for representing pictures. module Graphics.Gloss.Data.Picture -- | A point on the x-y plane. Points can also be treated as -- Vectors, so Graphics.Gloss.Data.Vector may also be -- useful. type Point = (Float, Float) -- | A vector can be treated as a point, and vis-versa. type Vector = Point -- | A path through the x-y plane. type Path = [Point] -- | A 2D picture data Picture -- | A blank picture, with nothing in it. Blank :: Picture -- | A convex polygon filled with a solid color. Polygon :: Path -> Picture -- | A line along an arbitrary path. Line :: Path -> Picture -- | A circle with the given radius. Circle :: Float -> Picture -- | A circle with the given thickness and radius. If the thickness is 0 -- then this is equivalent to Circle. ThickCircle :: Float -> Float -> Picture -- | A circular arc drawn counter-clockwise between two angles (in degrees) -- at the given radius. Arc :: Float -> Float -> Float -> Picture -- | A circular arc drawn counter-clockwise between two angles (in -- degrees), with the given radius and thickness. If the thickness is 0 -- then this is equivalent to Arc. ThickArc :: Float -> Float -> Float -> Float -> Picture -- | Some text to draw with a vector font. Text :: String -> Picture -- | A bitmap image with a width, height and some 32-bit RGBA bitmap data. -- -- The boolean flag controls whether Gloss should cache the data between -- frames for speed. If you are programatically generating the image for -- each frame then use False. If you have loaded it from a file -- then use True. Bitmap :: Int -> Int -> BitmapData -> Bool -> Picture -- | A picture drawn with this color. Color :: Color -> Picture -> Picture -- | A picture translated by the given x and y coordinates. Translate :: Float -> Float -> Picture -> Picture -- | A picture rotated clockwise by the given angle (in degrees). Rotate :: Float -> Picture -> Picture -- | A picture scaled by the given x and y factors. Scale :: Float -> Float -> Picture -> Picture -- | A picture consisting of several others. Pictures :: [Picture] -> Picture -- | Abstract 32-bit RGBA bitmap data. data BitmapData -- | A blank picture, with nothing in it. blank :: Picture -- | A convex polygon filled with a solid color. polygon :: Path -> Picture -- | A line along an arbitrary path. line :: Path -> Picture -- | A circle with the given radius. circle :: Float -> Picture -- | A circle with the given thickness and radius. If the thickness is 0 -- then this is equivalent to Circle. thickCircle :: Float -> Float -> Picture -- | A circular arc drawn counter-clockwise between two angles (in degrees) -- at the given radius. arc :: Float -> Float -> Float -> Picture -- | A circular arc drawn counter-clockwise between two angles (in -- degrees), with the given radius and thickness. If the thickness is 0 -- then this is equivalent to Arc. thickArc :: Float -> Float -> Float -> Float -> Picture -- | Some text to draw with a vector font. text :: String -> Picture -- | A bitmap image with a width, height and a Vector holding the 32-bit -- RGBA bitmap data. -- -- The boolean flag controls whether Gloss should cache the data between -- frames for speed. If you are programatically generating the image for -- each frame then use False. If you have loaded it from a file -- then use True. bitmap :: Int -> Int -> BitmapData -> Bool -> Picture -- | A picture drawn with this color. color :: Color -> Picture -> Picture -- | A picture translated by the given x and y coordinates. translate :: Float -> Float -> Picture -> Picture -- | A picture rotated clockwise by the given angle (in degrees). rotate :: Float -> Picture -> Picture -- | A picture scaled by the given x and y factors. scale :: Float -> Float -> Picture -> Picture -- | A picture consisting of several others. pictures :: [Picture] -> Picture -- | A closed loop along a path. lineLoop :: Path -> Picture -- | A solid circle with the given radius. circleSolid :: Float -> Picture -- | A solid arc, drawn counter-clockwise between two angles at the given -- radius. arcSolid :: Float -> Float -> Float -> Picture -- | A wireframe sector of a circle. An arc is draw counter-clockwise from -- the first to the second angle at the given radius. Lines are drawn -- from the origin to the ends of the arc. sectorWire :: Float -> Float -> Float -> Picture -- | A path representing a rectangle centered about the origin rectanglePath :: Float -> Float -> Path -- | A wireframe rectangle centered about the origin. rectangleWire :: Float -> Float -> Picture -- | A solid rectangle centered about the origin. rectangleSolid :: Float -> Float -> Picture -- | A path representing a rectangle in the y > 0 half of the x-y plane. rectangleUpperPath :: Float -> Float -> Path -- | A wireframe rectangle in the y > 0 half of the x-y plane. rectangleUpperWire :: Float -> Float -> Picture -- | A solid rectangle in the y > 0 half of the x-y plane. rectangleUpperSolid :: Float -> Float -> Picture -- | O(1). Use a ForeignPtr of RGBA data as a bitmap with the given -- width and height. bitmapOfForeignPtr :: Int -> Int -> ForeignPtr Word8 -> Bool -> Picture -- | O(size). Copy a ByteString of RGBA data into a bitmap with the -- given width and height. -- -- The boolean flag controls whether Gloss should cache the data between -- frames for speed. If you are programatically generating the image for -- each frame then use False. If you have loaded it from a file -- then use True. bitmapOfByteString :: Int -> Int -> ByteString -> Bool -> Picture -- | O(size). Copy a BMP file into a bitmap. bitmapOfBMP :: BMP -> Picture -- | Load an uncompressed 24 or 32bit RGBA BMP file as a bitmap. loadBMP :: FilePath -> IO Picture instance Typeable Picture instance Show Picture instance Eq Picture instance Data Picture instance Monoid Picture module Graphics.Gloss.Data.ViewPort -- | The ViewPort represents the global transformation applied to -- the displayed picture. When the user pans, zooms, or rotates the -- display then this changes the ViewPort. data ViewPort ViewPort :: !(Float, Float) -> !Float -> !Float -> ViewPort -- | Global translation. viewPortTranslate :: ViewPort -> !(Float, Float) -- | Global rotation (in degrees). viewPortRotate :: ViewPort -> !Float -- | Global scaling (of both x and y coordinates). viewPortScale :: ViewPort -> !Float -- | The initial state of the viewport. viewPortInit :: ViewPort -- | Translates, rotates, and scales an image according to the -- ViewPort. applyViewPortToPicture :: ViewPort -> Picture -> Picture -- | Takes a point using screen coordinates, and uses the ViewPort -- to convert it to Picture coordinates. This is the inverse of -- applyViewPortToPicture for points. invertViewPort :: ViewPort -> Point -> Point module Graphics.Gloss.Data.ViewState -- | The commands suported by the view controller. data Command CRestore :: Command CTranslate :: Command CRotate :: Command CBumpZoomOut :: Command CBumpZoomIn :: Command CBumpLeft :: Command CBumpRight :: Command CBumpUp :: Command CBumpDown :: Command CBumpClockwise :: Command CBumpCClockwise :: Command type CommandConfig = [(Command, [(Key, Maybe Modifiers)])] -- | The default commands. Left click pans, wheel zooms, right click -- rotates, "r" key resets. defaultCommandConfig :: CommandConfig -- | State for controlling the viewport. These are used by the viewport -- control component. data ViewState ViewState :: !(Map Command [(Key, Maybe Modifiers)]) -> !Float -> !Float -> !(Maybe (Float, Float)) -> !(Maybe (Float, Float)) -> ViewPort -> ViewState -- | The command list for the viewport controller. These can be safely -- overwridden at any time by deleting or adding entries to the list. -- Entries at the front of the list take precedence. viewStateCommands :: ViewState -> !(Map Command [(Key, Maybe Modifiers)]) -- | How much to scale the world by for each step of the mouse wheel. viewStateScaleStep :: ViewState -> !Float -- | How many degrees to rotate the world by for each pixel of x motion. viewStateRotateFactor :: ViewState -> !Float -- | During viewport translation, where the mouse was clicked on the -- window. viewStateTranslateMark :: ViewState -> !(Maybe (Float, Float)) -- | During viewport rotation, where the mouse was clicked on the window viewStateRotateMark :: ViewState -> !(Maybe (Float, Float)) viewStateViewPort :: ViewState -> ViewPort -- | The ViewPort represents the global transformation applied to -- the displayed picture. When the user pans, zooms, or rotates the -- display then this changes the ViewPort. data ViewPort ViewPort :: !(Float, Float) -> !Float -> !Float -> ViewPort -- | Global translation. viewPortTranslate :: ViewPort -> !(Float, Float) -- | Global rotation (in degrees). viewPortRotate :: ViewPort -> !Float -- | Global scaling (of both x and y coordinates). viewPortScale :: ViewPort -> !Float -- | The initial view state. viewStateInit :: ViewState -- | Initial view state, with user defined config. viewStateInitWithConfig :: CommandConfig -> ViewState -- | Apply an event to a ViewState. updateViewStateWithEvent :: Event -> ViewState -> ViewState -- | Like updateViewStateWithEvent, but returns Nothing if no -- update was needed. updateViewStateWithEventMaybe :: Event -> ViewState -> Maybe ViewState -- | Translates, rotates, and scales an image according to the -- ViewPort. applyViewPortToPicture :: ViewPort -> Picture -> Picture -- | Takes a point using screen coordinates, and uses the ViewPort -- to convert it to Picture coordinates. This is the inverse of -- applyViewPortToPicture for points. invertViewPort :: ViewPort -> Point -> Point instance Show Command instance Eq Command instance Ord Command -- | Various ray casting algorithms. module Graphics.Gloss.Algorithms.RayCast -- | The quadtree contains cells of unit extent (NetHack style). Given a -- line segement (P1-P2) through the tree, get the cell closest to P1 -- that intersects the segment, if any. -- -- TODO: This currently uses a naive algorithm. It just calls -- traceSegIntoCellularQuadTree and sorts the results to get the -- one closest to P1. It'd be better to do a proper walk over the tree in -- the direction of the ray. castSegIntoCellularQuadTree :: Point -> Point -> Extent -> QuadTree a -> Maybe (Point, Extent, a) -- | The quadtree contains cells of unit extent (NetHack style). Given a -- line segment (P1-P2) through the tree, return the list of cells that -- intersect the segment. traceSegIntoCellularQuadTree :: Point -> Point -> Extent -> QuadTree a -> [(Point, Extent, a)] -- | Display mode is for drawing a static picture. module Graphics.Gloss.Interface.Pure.Display -- | Open a new window and display the given picture. -- -- Use the following commands once the window is open: -- --
-- import Graphics.Gloss -- main = display (InWindow "Nice Window" (200, 200) (10, 10)) white (Circle 80) -- ---- -- Once the window is open you can use the following: -- --