helm-1.0.0: src/Helm/Engine/SDL/Asset.hs
-- | Contains the SDL asset types.
module Helm.Engine.SDL.Asset
(
-- * Types
Image(..)
-- * Loading
, withImage
) where
import qualified Graphics.Rendering.Cairo as Cairo
import Linear.V2 (V2(..))
import Helm.Asset (Image)
import Helm.Engine.SDL.Engine (SDLEngine)
-- | Represents an 'Image' for the SDL engine.
data instance Image SDLEngine = SDLImage
{ cairoSurface :: Cairo.Surface -- ^ The Cairo surface for the image.
, imageDims :: V2 Int -- ^ The image dimensions of the image (when it was loaded).
}
-- | Load an image asset using the SDL engine and do
-- something with it. The image will be cleaned up
-- once the provided monad completes.
--
-- Currently, the only supported image file format is PNG.
--
-- The expected usage would be to use 'withImage'
-- for each image you need to load before
-- running the engine, and then use the images with
-- graphics. Once the engine stops running, the image
-- will then be automatically cleaned up.
withImage :: SDLEngine -> FilePath -> (Image SDLEngine -> IO a) -> IO a
withImage _ path f = Cairo.withImageSurfaceFromPNG path $ \surface -> do
width <- Cairo.imageSurfaceGetWidth surface
height <- Cairo.imageSurfaceGetHeight surface
f SDLImage
{ cairoSurface = surface
, imageDims = V2 width height
}