wx-0.13.2: src/Graphics/UI/WX/Media.hs
{-# LANGUAGE TypeSynonymInstances #-}
--------------------------------------------------------------------------------
{-| Module : Media
Copyright : (c) Daan Leijen 2003
(c) shelarcy 2007
License : wxWindows
Maintainer : wxhaskell-devel@lists.sourceforge.net
Stability : provisional
Portability : portable
Images, Media, Sounds, and action!
-}
--------------------------------------------------------------------------------
module Graphics.UI.WX.Media
( -- * Media
Media(..)
-- * Sound
, sound, playLoop, playWait
-- * Images
, image, imageCreateFromFile, imageCreateFromPixels, imageGetPixels
, imageCreateFromPixelArray, imageGetPixelArray
-- * Bitmaps
, bitmap, bitmapCreateFromFile, bitmapFromImage
) where
import System.IO.Unsafe( unsafePerformIO )
import Graphics.UI.WXCore
import Graphics.UI.WX.Types( Var, varGet, varSet, varCreate )
import Graphics.UI.WX.Attributes
import Graphics.UI.WX.Classes
{--------------------------------------------------------------------
Bitmaps
--------------------------------------------------------------------}
-- | Return a managed bitmap object. Bitmaps are abstract images used
-- for drawing to a device context. The file path should point to
-- a valid bitmap file, normally a @.ico@, @.bmp@, @.xpm@, or @.png@,
-- but any file format supported by |Image| is correctly loaded.
--
-- Instances: 'Sized'.
bitmap :: FilePath -> Bitmap ()
bitmap fname
= unsafePerformIO $ bitmapCreateFromFile fname
instance Sized (Bitmap a) where
size = newAttr "size" bitmapGetSize bitmapSetSize
-- | Create a bitmap from an image with the same color depth.
bitmapFromImage :: Image a -> IO (Bitmap ())
bitmapFromImage image
= bitmapCreateFromImage image (-1)
{--------------------------------------------------------------------
Images
--------------------------------------------------------------------}
-- | Return a managed image. Images are platform independent representations
-- of pictures, using an array of rgb pixels. See "Graphics.UI.WXCore.Image" for
-- lowlevel pixel manipulation. The file path should point to
-- a valid image file, like @.jpg@, @.bmp@, @.xpm@, or @.png@, for example.
--
-- Instances: 'Sized'.
image :: FilePath -> Image ()
image fname
= unsafePerformIO $ imageCreateFromFile fname
instance Sized (Image a) where
size = newAttr "size" imageGetSize imageRescale
{--------------------------------------------------------------------
Media
--------------------------------------------------------------------}
-- | Abstract layer between 'MediaCtrl' and 'Sound'. This class intends to
-- avoid breaking backward-compatibility.
class Media w where
-- | If use this method with 'Sound', play a sound fragment asynchronously.
-- If use this method with 'MediaCtrl', play media that is loaded by
-- 'mediaCtrlLoad'.
play :: w -> IO ()
stop :: w -> IO ()
{--------------------------------------------------------------------
Sounds
--------------------------------------------------------------------}
-- | Return a managed sound object. The file path points to
-- a valid sound file, normally a @.wav@.
sound :: FilePath -> Sound ()
sound fname
= unsafePerformIO $ soundCreate fname False
instance Media (Sound a) where
play sound = unitIO (soundPlay sound wxSOUND_ASYNC)
stop = soundStop
-- | Play a sound fragment repeatedly (and asynchronously).
playLoop :: Sound a -> IO ()
playLoop sound
= unitIO (soundPlay sound $ wxSOUND_ASYNC .+. wxSOUND_LOOP)
-- | Play a sound fragment synchronously (i.e. wait till completion).
playWait :: Sound a -> IO ()
playWait sound
= unitIO (soundPlay sound wxSOUND_SYNC)