Add some comments and type signatures.
[matthijs/projects/fpprac.git] / FPPrac.hs
index fcbf33e15c00def5e1ada934f01a03d24b340cdc..14e8c4f872036b122449cf12242e3338936520c5 100644 (file)
--- a/FPPrac.hs
+++ b/FPPrac.hs
@@ -236,6 +236,8 @@ transKey _ _ = return ()
 
 -}
 
+-- | Handlers for various requests.
+miscHandler, winHandler, gfxHandler :: IState -> Request -> Maybe (IO ())
 {-
 miscHandler s@IS {..} (FRead  fn     ) = Just $ readFile fn >>= post s . FileContents fn
 miscHandler   IS {..} (FWrite fn cnts) = Just $ writeFile fn cnts
@@ -261,7 +263,7 @@ winHandler s@IS {..} (WinMenu      ms) = Just $ mkMenu >>= \ms' -> sFrame `set`
 -}
 winHandler _        _                = Nothing
 
-gfxHandler s req = case gfxHandler' req of
+gfxHandler s req = case gfxHandler' req of
        Nothing -> Nothing
        Just render -> Just $ do
                buf <- readIORef (buffer s)
@@ -278,12 +280,19 @@ gfxHandler IS {..} (GfxDisc      col rt)    = Just $ ellipse buffer rt [penColor
 gfxHandler IS {..} (GfxFont      st  sz)    = Just $ buffer `set` [ fontSize := sz, fontFace := st ]
 gfxHandler IS {..} (GfxPicture   fd  pt)    = Just $ bitmapCreateFromFile fd >>= \bm -> drawBitmap buffer bm pt False [] >> bitmapGetSize bm >>= dirtyRect' sPanel pt
 -}
-gfxHandler' IS {..} (GfxText      col (Point x y) st) = Just $ do
+-- | Helper function for gfxHanlder
+gfxHandler' :: Request -> Maybe (Cairo.Render ())
+gfxHandler' (GfxText col (Point x y) st) = Just $ do
+       -- Set the source color, move to the requested position and draw the
+       -- text
        setSourceColor col
        Cairo.moveTo (fromIntegral x) (fromIntegral y)
        Cairo.showText st 
-gfxHandler' IS {..}  GfxClear                = Just $ Cairo.setSourceRGB 1 1 1 >> Cairo.paint
-gfxHandler' _        _                       = Nothing
+gfxHandler' GfxClear = Just $ do
+       -- Set the source to white and paint the entire surface with it
+       Cairo.setSourceRGB 1 1 1
+       Cairo.paint
+gfxHandler' _ = Nothing
 
 -- | Sets the source to a pattern fill of the given color
 setSourceColor :: Color -> Cairo.Render ()