-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Painless 2D vector graphics, animations and simulations. -- -- Gloss hides the pain of drawing simple vector graphics behind a nice -- data type and a few display functions. Gloss uses OpenGL under the -- hood, but you won't need to worry about any of that. Get something -- cool on the screen in under 10 minutes. @package gloss @version 1.13.2.2 -- | Functions to load bitmap data from various places. module Graphics.Gloss.Data.Bitmap -- | Represents a rectangular section in a bitmap data Rectangle Rectangle :: (Int, Int) -> (Int, Int) -> Rectangle -- | x- and y-pos in the bitmap in pixels [rectPos] :: Rectangle -> (Int, Int) -- | width/height of the area in pixelsi [rectSize] :: Rectangle -> (Int, Int) -- | Abstract 32-bit RGBA bitmap data. data BitmapData -- | width, height in pixels bitmapSize :: BitmapData -> (Int, Int) -- | Description of how the bitmap is layed out in memory. -- --
-- P2 +-------+ -- | | -- | + P0 | -- | | -- +-------+ P1 --pointInBox :: Point -> Point -> Point -> Bool -- | 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 module Graphics.Gloss.Interface.Environment -- | Get the size of the screen, in pixels. -- -- This will be the size of the rendered gloss image when fullscreen mode -- is enabled. getScreenSize :: IO (Int, Int) module Graphics.Gloss.Data.ViewState -- | The commands suported by the view controller. data Command CRestore :: Command CTranslate :: Command CRotate :: Command CScale :: 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 -> !Float -> !Maybe (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 -- | Ratio to scale the world by for each pixel of y motion. [viewStateScaleFactor] :: ViewState -> !Float -- | During viewport translation, where the mouse was clicked on the window -- to start the translate. [viewStateTranslateMark] :: ViewState -> !Maybe (Float, Float) -- | During viewport rotation, where the mouse was clicked on the window to -- starte the rotate. [viewStateRotateMark] :: ViewState -> !Maybe (Float, Float) -- | During viewport scale, where the mouse was clicked on the window to -- start the scale. [viewStateScaleMark] :: ViewState -> !Maybe (Float, Float) -- | The current viewport. [viewStateViewPort] :: ViewState -> ViewPort -- | 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 instance GHC.Classes.Ord Graphics.Gloss.Data.ViewState.Command instance GHC.Classes.Eq Graphics.Gloss.Data.ViewState.Command instance GHC.Show.Show Graphics.Gloss.Data.ViewState.Command -- | Simulate mode is for producing an animation of some model who's -- picture changes over finite time steps. The behavior of the model can -- also depent on the current ViewPort. module Graphics.Gloss.Interface.Pure.Simulate -- | Run a finite-time-step simulation in a window. You decide how the -- model is represented, how to convert the model to a picture, and how -- to advance the model for each unit of time. This function does the -- rest. -- -- Once the window is open you can use the same commands as with -- display. simulate :: Display -> Color -> Int -> model -> (model -> Picture) -> (ViewPort -> Float -> model -> model) -> IO () -- | 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 -- | Simulate mode is for producing an animation of some model who's -- picture changes over finite time steps. The behavior of the model can -- also depent on the current ViewPort. module Graphics.Gloss.Interface.IO.Simulate simulateIO :: forall model. Display -> Color -> Int -> model -> (model -> IO Picture) -> (ViewPort -> Float -> model -> IO model) -> IO () -- | 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 -- | Display mode is for drawing a static picture. module Graphics.Gloss.Interface.IO.Interact -- | Open a new window and interact with an infrequently updated picture. -- -- Similar to displayIO, except that you manage your own events. interactIO :: Display -> Color -> world -> (world -> IO Picture) -> (Event -> world -> IO world) -> (Controller -> IO ()) -> IO () -- | Functions to asynchronously control a Gloss display. data Controller Controller :: IO () -> ((ViewPort -> IO ViewPort) -> IO ()) -> Controller -- | Indicate that we want the picture to be redrawn. [controllerSetRedraw] :: Controller -> IO () -- | Modify the current viewport, also indicating that it should be -- redrawn. [controllerModifyViewPort] :: Controller -> (ViewPort -> IO ViewPort) -> IO () -- | Possible input events. data Event EventKey :: Key -> KeyState -> Modifiers -> (Float, Float) -> Event EventMotion :: (Float, Float) -> Event EventResize :: (Int, Int) -> Event data Key Char :: Char -> Key SpecialKey :: SpecialKey -> Key MouseButton :: MouseButton -> Key data SpecialKey KeyUnknown :: SpecialKey KeySpace :: SpecialKey KeyEsc :: SpecialKey KeyF1 :: SpecialKey KeyF2 :: SpecialKey KeyF3 :: SpecialKey KeyF4 :: SpecialKey KeyF5 :: SpecialKey KeyF6 :: SpecialKey KeyF7 :: SpecialKey KeyF8 :: SpecialKey KeyF9 :: SpecialKey KeyF10 :: SpecialKey KeyF11 :: SpecialKey KeyF12 :: SpecialKey KeyF13 :: SpecialKey KeyF14 :: SpecialKey KeyF15 :: SpecialKey KeyF16 :: SpecialKey KeyF17 :: SpecialKey KeyF18 :: SpecialKey KeyF19 :: SpecialKey KeyF20 :: SpecialKey KeyF21 :: SpecialKey KeyF22 :: SpecialKey KeyF23 :: SpecialKey KeyF24 :: SpecialKey KeyF25 :: SpecialKey KeyUp :: SpecialKey KeyDown :: SpecialKey KeyLeft :: SpecialKey KeyRight :: SpecialKey KeyTab :: SpecialKey KeyEnter :: SpecialKey KeyBackspace :: SpecialKey KeyInsert :: SpecialKey KeyNumLock :: SpecialKey KeyBegin :: SpecialKey KeyDelete :: SpecialKey KeyPageUp :: SpecialKey KeyPageDown :: SpecialKey KeyHome :: SpecialKey KeyEnd :: SpecialKey KeyShiftL :: SpecialKey KeyShiftR :: SpecialKey KeyCtrlL :: SpecialKey KeyCtrlR :: SpecialKey KeyAltL :: SpecialKey KeyAltR :: SpecialKey KeyPad0 :: SpecialKey KeyPad1 :: SpecialKey KeyPad2 :: SpecialKey KeyPad3 :: SpecialKey KeyPad4 :: SpecialKey KeyPad5 :: SpecialKey KeyPad6 :: SpecialKey KeyPad7 :: SpecialKey KeyPad8 :: SpecialKey KeyPad9 :: SpecialKey KeyPadDivide :: SpecialKey KeyPadMultiply :: SpecialKey KeyPadSubtract :: SpecialKey KeyPadAdd :: SpecialKey KeyPadDecimal :: SpecialKey KeyPadEqual :: SpecialKey KeyPadEnter :: SpecialKey data MouseButton LeftButton :: MouseButton MiddleButton :: MouseButton RightButton :: MouseButton WheelUp :: MouseButton WheelDown :: MouseButton AdditionalButton :: Int -> MouseButton data KeyState Down :: KeyState Up :: KeyState data Modifiers Modifiers :: KeyState -> KeyState -> KeyState -> Modifiers [shift] :: Modifiers -> KeyState [ctrl] :: Modifiers -> KeyState [alt] :: Modifiers -> KeyState -- | This game mode lets you manage your own input. Pressing ESC will still -- abort the program, but you don't get automatic pan and zoom controls -- like with displayInWindow. module Graphics.Gloss.Interface.Pure.Game -- | Play a game in a window. Like simulate, but you manage your -- own input events. play :: Display -> Color -> Int -> world -> (world -> Picture) -> (Event -> world -> world) -> (Float -> world -> world) -> IO () -- | Possible input events. data Event EventKey :: Key -> KeyState -> Modifiers -> (Float, Float) -> Event EventMotion :: (Float, Float) -> Event EventResize :: (Int, Int) -> Event data Key Char :: Char -> Key SpecialKey :: SpecialKey -> Key MouseButton :: MouseButton -> Key data SpecialKey KeyUnknown :: SpecialKey KeySpace :: SpecialKey KeyEsc :: SpecialKey KeyF1 :: SpecialKey KeyF2 :: SpecialKey KeyF3 :: SpecialKey KeyF4 :: SpecialKey KeyF5 :: SpecialKey KeyF6 :: SpecialKey KeyF7 :: SpecialKey KeyF8 :: SpecialKey KeyF9 :: SpecialKey KeyF10 :: SpecialKey KeyF11 :: SpecialKey KeyF12 :: SpecialKey KeyF13 :: SpecialKey KeyF14 :: SpecialKey KeyF15 :: SpecialKey KeyF16 :: SpecialKey KeyF17 :: SpecialKey KeyF18 :: SpecialKey KeyF19 :: SpecialKey KeyF20 :: SpecialKey KeyF21 :: SpecialKey KeyF22 :: SpecialKey KeyF23 :: SpecialKey KeyF24 :: SpecialKey KeyF25 :: SpecialKey KeyUp :: SpecialKey KeyDown :: SpecialKey KeyLeft :: SpecialKey KeyRight :: SpecialKey KeyTab :: SpecialKey KeyEnter :: SpecialKey KeyBackspace :: SpecialKey KeyInsert :: SpecialKey KeyNumLock :: SpecialKey KeyBegin :: SpecialKey KeyDelete :: SpecialKey KeyPageUp :: SpecialKey KeyPageDown :: SpecialKey KeyHome :: SpecialKey KeyEnd :: SpecialKey KeyShiftL :: SpecialKey KeyShiftR :: SpecialKey KeyCtrlL :: SpecialKey KeyCtrlR :: SpecialKey KeyAltL :: SpecialKey KeyAltR :: SpecialKey KeyPad0 :: SpecialKey KeyPad1 :: SpecialKey KeyPad2 :: SpecialKey KeyPad3 :: SpecialKey KeyPad4 :: SpecialKey KeyPad5 :: SpecialKey KeyPad6 :: SpecialKey KeyPad7 :: SpecialKey KeyPad8 :: SpecialKey KeyPad9 :: SpecialKey KeyPadDivide :: SpecialKey KeyPadMultiply :: SpecialKey KeyPadSubtract :: SpecialKey KeyPadAdd :: SpecialKey KeyPadDecimal :: SpecialKey KeyPadEqual :: SpecialKey KeyPadEnter :: SpecialKey data MouseButton LeftButton :: MouseButton MiddleButton :: MouseButton RightButton :: MouseButton WheelUp :: MouseButton WheelDown :: MouseButton AdditionalButton :: Int -> MouseButton data KeyState Down :: KeyState Up :: KeyState data Modifiers Modifiers :: KeyState -> KeyState -> KeyState -> Modifiers [shift] :: Modifiers -> KeyState [ctrl] :: Modifiers -> KeyState [alt] :: Modifiers -> KeyState -- | This game mode lets you manage your own input. Pressing ESC will not -- abort the program. You also don't get automatic pan and zoom controls -- like with display. module Graphics.Gloss.Interface.IO.Game -- | Play a game in a window, using IO actions to build the pictures. playIO :: forall world. Display -> Color -> Int -> world -> (world -> IO Picture) -> (Event -> world -> IO world) -> (Float -> world -> IO world) -> IO () -- | Possible input events. data Event EventKey :: Key -> KeyState -> Modifiers -> (Float, Float) -> Event EventMotion :: (Float, Float) -> Event EventResize :: (Int, Int) -> Event data Key Char :: Char -> Key SpecialKey :: SpecialKey -> Key MouseButton :: MouseButton -> Key data SpecialKey KeyUnknown :: SpecialKey KeySpace :: SpecialKey KeyEsc :: SpecialKey KeyF1 :: SpecialKey KeyF2 :: SpecialKey KeyF3 :: SpecialKey KeyF4 :: SpecialKey KeyF5 :: SpecialKey KeyF6 :: SpecialKey KeyF7 :: SpecialKey KeyF8 :: SpecialKey KeyF9 :: SpecialKey KeyF10 :: SpecialKey KeyF11 :: SpecialKey KeyF12 :: SpecialKey KeyF13 :: SpecialKey KeyF14 :: SpecialKey KeyF15 :: SpecialKey KeyF16 :: SpecialKey KeyF17 :: SpecialKey KeyF18 :: SpecialKey KeyF19 :: SpecialKey KeyF20 :: SpecialKey KeyF21 :: SpecialKey KeyF22 :: SpecialKey KeyF23 :: SpecialKey KeyF24 :: SpecialKey KeyF25 :: SpecialKey KeyUp :: SpecialKey KeyDown :: SpecialKey KeyLeft :: SpecialKey KeyRight :: SpecialKey KeyTab :: SpecialKey KeyEnter :: SpecialKey KeyBackspace :: SpecialKey KeyInsert :: SpecialKey KeyNumLock :: SpecialKey KeyBegin :: SpecialKey KeyDelete :: SpecialKey KeyPageUp :: SpecialKey KeyPageDown :: SpecialKey KeyHome :: SpecialKey KeyEnd :: SpecialKey KeyShiftL :: SpecialKey KeyShiftR :: SpecialKey KeyCtrlL :: SpecialKey KeyCtrlR :: SpecialKey KeyAltL :: SpecialKey KeyAltR :: SpecialKey KeyPad0 :: SpecialKey KeyPad1 :: SpecialKey KeyPad2 :: SpecialKey KeyPad3 :: SpecialKey KeyPad4 :: SpecialKey KeyPad5 :: SpecialKey KeyPad6 :: SpecialKey KeyPad7 :: SpecialKey KeyPad8 :: SpecialKey KeyPad9 :: SpecialKey KeyPadDivide :: SpecialKey KeyPadMultiply :: SpecialKey KeyPadSubtract :: SpecialKey KeyPadAdd :: SpecialKey KeyPadDecimal :: SpecialKey KeyPadEqual :: SpecialKey KeyPadEnter :: SpecialKey data MouseButton LeftButton :: MouseButton MiddleButton :: MouseButton RightButton :: MouseButton WheelUp :: MouseButton WheelDown :: MouseButton AdditionalButton :: Int -> MouseButton data KeyState Down :: KeyState Up :: KeyState data Modifiers Modifiers :: KeyState -> KeyState -> KeyState -> Modifiers [shift] :: Modifiers -> KeyState [ctrl] :: Modifiers -> KeyState [alt] :: Modifiers -> KeyState -- | Display mode is for drawing a static picture. module Graphics.Gloss.Interface.Pure.Display -- | Open a new window and display the given picture. display :: Display -> Color -> Picture -> IO () -- | Display mode is for drawing a static picture. module Graphics.Gloss.Interface.IO.Display -- | Open a new window and display an infrequently updated picture. -- -- Once the window is open you can use the same commands as with -- display. -- --
-- 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: -- --
-- * Quit -- - esc-key -- -- * Move Viewport -- - arrow keys -- - left-click drag -- -- * Zoom Viewport -- - page up/down-keys -- - control-left-click drag -- - right-click drag -- - mouse wheel -- -- * Rotate Viewport -- - home/end-keys -- - alt-left-click drag -- -- * Reset Viewport -- r-key ---- -- Animations can be constructed similarly using the animate. -- -- If you want to run a simulation based around finite time steps then -- try simulate. -- -- If you want to manage your own key/mouse events then use play. -- -- Gloss uses OpenGL under the hood, but you don't have to worry about -- any of that. -- -- Gloss programs should be compiled with -threaded, otherwise -- the GHC runtime will limit the frame-rate to around 20Hz. -- -- To build gloss using the GLFW window manager instead of GLUT use -- cabal install gloss --flags="GLFW -GLUT" -- --
-- Release Notes: -- -- For 1.13.1: -- Thanks to Thaler Jonathan -- * Repaired GLFW backend. -- Thanks to Samuel Gfrörer -- * Support for bitmap sections. -- Thanks to Basile Henry -- * Handle resize events in playField driver. -- -- For 1.12.1: -- Thanks to Trevor McDonell -- * Travis CI integration, general cleanups. -- -- For 1.11.1: -- Thanks to Lars Wyssard -- * Use default display resolution in full-screen mode. -- -- For 1.10.1: -- * Gloss no longer consumes CPU time when displaying static pictures. -- * Added displayIO wrapper for mostly static pictures, eg when -- plotting graphs generated from infrequently updated files. -- * Allow viewport to be scaled with control-left-click drag. -- * Rotation of viewport changed to alt-left-click drag. -- * Preserve current colour when rendering bitmpaps. -- * Changed to proper sum-of-squares colour mixing, rather than naive -- addition of components which was causing mixed colours to be too dark. -- Thanks to Thomas DuBuisson -- * Allow bitmaps to be specified in RGBA byte order as well as ABGR. -- Thanks to Gabriel Gonzalez -- * Package definitions for building with Stack. ---- -- For more information, check out http://gloss.ouroborus.net. module Graphics.Gloss -- | 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. FullScreen :: Display -- | Open a new window and display the given picture. display :: Display -> Color -> Picture -> IO () -- | Open a new window and display the given animation. -- -- Once the window is open you can use the same commands as with -- display. animate :: Display -> Color -> (Float -> Picture) -> IO () -- | Run a finite-time-step simulation in a window. You decide how the -- model is represented, how to convert the model to a picture, and how -- to advance the model for each unit of time. This function does the -- rest. -- -- Once the window is open you can use the same commands as with -- display. simulate :: Display -> Color -> Int -> model -> (model -> Picture) -> (ViewPort -> Float -> model -> model) -> IO () -- | Play a game in a window. Like simulate, but you manage your -- own input events. play :: Display -> Color -> Int -> world -> (world -> Picture) -> (Event -> world -> world) -> (Float -> world -> world) -> IO () -- | Animate a picture in a window. module Graphics.Gloss.Interface.IO.Animate -- | Open a new window and display the given animation. -- -- Once the window is open you can use the same commands as with -- display. animateIO :: Display -> Color -> (Float -> IO Picture) -> (Controller -> IO ()) -> IO () -- | Like animateIO but don't allow the display to be panned around. animateFixedIO :: Display -> Color -> (Float -> IO Picture) -> (Controller -> IO ()) -> IO () -- | Functions to asynchronously control a Gloss display. data Controller Controller :: IO () -> ((ViewPort -> IO ViewPort) -> IO ()) -> Controller -- | Indicate that we want the picture to be redrawn. [controllerSetRedraw] :: Controller -> IO () -- | Modify the current viewport, also indicating that it should be -- redrawn. [controllerModifyViewPort] :: Controller -> (ViewPort -> IO ViewPort) -> IO ()