Remove the state argument from gfxHandler'.
[matthijs/projects/fpprac.git] / FPPrac.hs
index d8fd94f5c1cf7b6271277c9c2e29dafdb1e029c5..5da734e98aebb4e9917f06b3f444a4d2f1b48afc 100644 (file)
--- a/FPPrac.hs
+++ b/FPPrac.hs
@@ -30,13 +30,14 @@ data Rect = Rect
 
 data Point = Point !Int !Int deriving (Show, Eq)
 
-type Color = Gtk.Color
+-- A color, with RGB values from 0 to 1
+data Color = Color Double Double Double deriving (Show, Eq)
 
 -- Create a Color from Red, Green and Blue values. The inputs should be
 -- between 0 and 255 (inclusive).
 rgb :: Int -> Int -> Int -> Color
-rgb r g b = Gtk.Color (conv r) (conv g) (conv b)
-       where conv = fromInteger . toInteger . (*256)
+rgb r g b = Color (conv r) (conv g) (conv b)
+       where conv = (/256) . fromIntegral
 
 -- | Some predefined colours
 red = rgb 0xff 0 0
@@ -260,7 +261,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)
@@ -277,8 +278,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 {..}  GfxClear                = Just $ Cairo.setSourceRGB 1 1 1 >> Cairo.paint
-gfxHandler' _        _                       = Nothing
+gfxHandler' (GfxText col (Point x y) st) = Just $ do
+       setSourceColor col
+       Cairo.moveTo (fromIntegral x) (fromIntegral y)
+       Cairo.showText st 
+gfxHandler' GfxClear = Just $ do
+       Cairo.setSourceRGB 1 1 1
+       Cairo.paint
+gfxHandler' _ = Nothing
+
+-- | Sets the source to a pattern fill of the given color
+setSourceColor :: Color -> Cairo.Render ()
+setSourceColor (Color r g b) =
+       Cairo.setSourceRGB r g b
 
 {-
 dirtyPts :: Window a -> [Point] -> IO ()