AC-EasyRaster-GTK-1.1.3: Graphics/EasyRaster/GTK/Paranoid.hs
{- |
This module provides exactly the same interface as
"Graphics.EasyRaster.GTK", but with run-time sanity
checks. This results in greater safety and reduced
performance. Typically you will use this module while
developing and debugging your application, and then
change your import statement when you're happy that
any bugs have been corrected.
-}
module Graphics.EasyRaster.GTK.Paranoid
(
-- * System initialisation
init_system,
-- * Types
ER.Coord, ER.Channel,
ER.ImageFileType (..), ER.type_string,
ER.ImageBuffer (),
-- * Image buffer creation
ER.ib_new, ER.ib_load,
-- * Image buffer output
ER.ib_save,
-- * Image buffer queries
ER.ib_size, ER.ib_coords, ER.ib_coords2, ER.ib_valid_coords,
-- * Pixel I/O
ib_write_pixel, ib_read_pixel,
-- * Image display
ER.ib_display, ER.ib_canvas,
-- * GTK event loop
ER.process_event, ER.wait_event, ER.main_loop,
-- * Low-level GTK access
ER.ib_pixbuf
-- * Example code
-- | See "Graphics.EasyRaster.GTK" for examples.
)
where
import Control.Monad (when)
import Graphics.UI.Gtk
import qualified Graphics.EasyRaster.GTK as ER
{- |
Initialise the GTK runtime system. This function /must/
be called before any other functions in this module.
(If not, your program will likely summarily crash with
an obscure error to @stderr@.)
Note that Gtk2hs will crash with a warning message if
the program is compiled with the threaded RTS. (Use
the non-paranoid version of @init_system@ to turn this
warning off.)
-}
init_system :: IO ()
init_system = initGUI >> return ()
{- |
Overwrite the specified pixel with the (R, G, B) colour.
If the pixel coordinates are out of range, the 'error'
function is called.
-}
ib_write_pixel :: ER.ImageBuffer -> (ER.Coord, ER.Coord) -> (ER.Channel, ER.Channel, ER.Channel) -> IO ()
ib_write_pixel buf (x,y) (r,g,b) = do
when (not $ ER.ib_valid_coords buf (x,y)) $ error "ib_write_pixel: invalid coordinates."
ER.ib_write_pixel buf (x,y) (r,g,b)
{- |
Read the (R, G, B) colour of the specified pixel.
If the pixel coordinates are out of range, the 'error'
function is called.
-}
ib_read_pixel :: ER.ImageBuffer -> (ER.Coord, ER.Coord) -> IO (ER.Channel, ER.Channel, ER.Channel)
ib_read_pixel buf (x,y) = do
when (not $ ER.ib_valid_coords buf (x,y)) $ error "ib_write_pixel: invalid coordinates."
ER.ib_read_pixel buf (x,y)