{-| Module : Graphics.Shine.Image Description : Short description Copyright : (c) Francesco Gazzetta, 2016 License : MIT Maintainer : francygazz@gmail.com Stability : experimental Handling of external image (.png, .svg and all browser-supported formats). -} {-# LANGUAGE ForeignFunctionInterface #-} module Graphics.Shine.Image ( makeImage, ImageSize (..), ImageData (..), ) where import GHCJS.DOM.HTMLImageElement -- | Just a wrapper around the 'HTMLImageElement' type. Needed for the Show instance. newtype ImageData = ImageData { unImageData :: HTMLImageElement } deriving Eq -- we need this to show Pictures instance Show ImageData where show _ = "ImageData" -- | How big (and how stretched/cropped) the Image is drawn data ImageSize = -- | The orizinal size of the image Original -- | Scale the image to the given dimensions | Stretched Float Float -- | Clip the image from the given coordinates to the given width and height | Clipped Float Float Float Float -- | Clip (x,y,width,height) and scale (width, height) the image | ClippedStretched Float Float Float Float Float Float deriving (Eq, Show) foreign import javascript unsafe "$r = new Image();" js_newImage :: IO HTMLImageElement -- | Makes an image element from an URL makeImage :: FilePath -> IO ImageData makeImage url = do img <- js_newImage setSrc img url return $ ImageData img