-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Educational drawing canvas for FP explorers. -- -- This package is an experimental teaching tool that provides the -- foundation for presenting functional idioms with graphical metaphors. -- The OpenGL canvas boilerplate is abstracted away to a simple -- interface, which allows to focus on program logic instead of the -- graphics API. It's also arguably fun. @package lambda-canvas @version 0.1 module Graphics.LambdaCanvas type Point = (GLfloat, GLfloat) -- | Specification of the way the vertices given during -- renderPrimitive are interpreted. In the description of the -- constructors, n is an integer count starting at one, and -- N is the total number of vertices specified. data PrimitiveMode :: * -- | Treats each vertex as a single point. Vertex n defines point -- n. N points are drawn. Points :: PrimitiveMode -- | Treats each pair of vertices as an independent line segment. Vertices -- 2n-1 and 2n define line n. N/2 lines are -- drawn. Lines :: PrimitiveMode -- | Draws a connected group of line segments from the first vertex to the -- last, then back to the first. Vertices n and n+1 define -- line n. The last line, however, is defined by vertices N -- and 1. N lines are drawn. LineLoop :: PrimitiveMode -- | Draws a connected group of line segments from the first vertex to the -- last. Vertices n and n+1 define line n. -- N-1 lines are drawn. LineStrip :: PrimitiveMode -- | Treats each triplet of vertices as an independent triangle. Vertices -- 3n-2, 3n-1, and 3n define triangle n. -- N\3/ triangles are drawn. Triangles :: PrimitiveMode -- | Draws a connected group of triangles. One triangle is defined for each -- vertex presented after the first two vertices. For odd n, -- vertices n, n+1, and n+2 define triangle -- n. For even n, vertices n+1, n, and -- n+2 define triangle n. N-2 triangles are drawn. TriangleStrip :: PrimitiveMode -- | Draws a connected group of triangles. One triangle is defined for each -- vertex presented after the first two vertices. Vertices 1, n+1, -- and n+2 define triangle n. N-2 triangles are -- drawn. TriangleFan :: PrimitiveMode -- | Treats each group of four vertices as an independent quadrilateral. -- Vertices 4n-3, 4n-2, 4n-1, and 4n define -- quadrilateral n. N/4 quadrilaterals are drawn. Quads :: PrimitiveMode -- | Draws a connected group of quadrilaterals. One quadrilateral is -- defined for each pair of vertices presented after the first pair. -- Vertices 2n-1, 2n, 2n+2, and 2n+1 define -- quadrilateral n. N/2-1 quadrilaterals are drawn. Note -- that the order in which vertices are used to construct a quadrilateral -- from strip data is different from that used with independent data. QuadStrip :: PrimitiveMode -- | Draws a single, convex polygon. Vertices 1 through N define -- this polygon. Polygon :: PrimitiveMode -- | Create a canvas suitable for animation. The drawing block is invoked -- on each redisplay and is passed the current timestamp. animate :: String -> (POSIXTime -> IO ()) -> IO () -- | Create a canvas suitable for drawing a static picture. The drawing -- block is invoked on each redisplay. draw :: String -> IO () -> IO () -- | Draw a primitive from a set of a vertices on screen. put :: PrimitiveMode -> [Point] -> IO () -- | Given an amount of steps and a timestamp, calculate current step -- number. Step numbers begin with 0. stepOf :: Num a => Integer -> POSIXTime -> a