22-- | Canvas API.
33
44module Graphics.Canvas
5- ( CANVAS ()
6- , CanvasElement ()
7- , Context2D ()
8- , ImageData ()
9- , CanvasImageSource ()
10- , Arc ()
5+ ( CANVAS
6+ , CanvasElement
7+ , Context2D
8+ , ImageData
9+ , CanvasImageSource
10+ , Arc
1111 , Composite (..)
12- , Dimensions ()
12+ , Dimensions
1313 , LineCap (..)
1414 , LineJoin (..)
15- , Rectangle ()
16- , ScaleTransform ()
17- , TextMetrics ()
18- , Transform ()
19- , TranslateTransform ()
15+ , Rectangle
16+ , ScaleTransform
17+ , TextMetrics
18+ , Transform
19+ , TranslateTransform
2020 , TextAlign (..)
21- , CanvasPattern ()
21+ , CanvasPattern
2222 , PatternRepeat (..)
23- , CanvasGradient ()
24- , LinearGradient ()
25- , RadialGradient ()
26- , QuadraticCurve ()
27- , BezierCurve ()
23+ , CanvasGradient
24+ , LinearGradient
25+ , RadialGradient
26+ , QuadraticCurve
27+ , BezierCurve
2828
2929 , getCanvasElementById
3030 , getContext2D
@@ -90,6 +90,9 @@ module Graphics.Canvas
9090 , putImageDataFull
9191 , createImageData
9292 , createImageDataCopy
93+ , imageDataWidth
94+ , imageDataHeight
95+ , imageDataBuffer
9396
9497 , canvasElementToImageSource
9598 , drawImage
@@ -108,13 +111,13 @@ module Graphics.Canvas
108111 , bezierCurveTo
109112 ) where
110113
111- import Prelude ( class Show , Unit , pure , bind , (<$>), (<>), ($), (>>=))
114+ import Prelude
112115
116+ import Control.Monad.Eff (Eff )
117+ import Control.Monad.Eff.Exception.Unsafe (unsafeThrow )
113118import Data.ArrayBuffer.Types (Uint8ClampedArray )
114119import Data.Function.Uncurried (Fn3 , runFn3 )
115120import Data.Maybe (Maybe (..))
116- import Control.Monad.Eff (Eff )
117- import Control.Monad.Eff.Exception.Unsafe (unsafeThrow )
118121
119122-- | The `Canvas` effect denotes computations which read/write from/to the canvas.
120123foreign import data CANVAS :: !
@@ -126,7 +129,7 @@ foreign import data CanvasElement :: *
126129foreign import data Context2D :: *
127130
128131-- | An image data object, used to store raster data outside the canvas.
129- type ImageData = { width :: Int , height :: Int , data :: Uint8ClampedArray }
132+ foreign import data ImageData :: *
130133
131134-- | Opaque object for drawing elements and things to the canvas.
132135foreign import data CanvasImageSource :: *
@@ -139,13 +142,21 @@ foreign import data CanvasGradient :: *
139142
140143foreign import canvasElementToImageSource :: CanvasElement -> CanvasImageSource
141144
142- foreign import tryLoadImageImpl :: forall eff . String -> Eff (canvas :: Canvas | eff ) Unit -> (CanvasImageSource -> Eff (canvas :: Canvas | eff ) Unit ) -> Eff (canvas :: Canvas | eff ) Unit
143-
144- -- | Wrapper for asynchronously loading a image file by path and use it in callback, e.g. drawImage
145- tryLoadImage :: forall eff . String -> (Maybe CanvasImageSource -> Eff (canvas :: Canvas | eff ) Unit ) -> Eff (canvas :: Canvas | eff ) Unit
145+ foreign import tryLoadImageImpl
146+ :: forall eff
147+ . String
148+ -> Eff (canvas :: CANVAS | eff ) Unit
149+ -> (CanvasImageSource -> Eff (canvas :: CANVAS | eff ) Unit )
150+ -> Eff (canvas :: CANVAS | eff ) Unit
151+
152+ -- | Asynchronously load an image file by specifying its path.
153+ tryLoadImage
154+ :: forall eff
155+ . String
156+ -> (Maybe CanvasImageSource -> Eff (canvas :: CANVAS | eff ) Unit )
157+ -> Eff (canvas :: CANVAS | eff ) Unit
146158tryLoadImage path k = tryLoadImageImpl path (k Nothing ) (k <<< Just )
147159
148-
149160foreign import getCanvasElementByIdImpl ::
150161 forall r eff . Fn3 String
151162 (CanvasElement -> r )
@@ -562,6 +573,15 @@ foreign import createImageData :: forall eff. Context2D -> Number -> Number -> E
562573-- | Create a copy of an image data object.
563574foreign import createImageDataCopy :: forall eff . Context2D -> ImageData -> Eff (canvas :: CANVAS | eff ) ImageData
564575
576+ -- | Get the width of an `ImageData` object.
577+ foreign import imageDataWidth :: ImageData -> Int
578+
579+ -- | Get the height of an `ImageData` object.
580+ foreign import imageDataHeight :: ImageData -> Int
581+
582+ -- | Get the underlying buffer from an `ImageData` object.
583+ foreign import imageDataBuffer :: ImageData -> Uint8ClampedArray
584+
565585foreign import drawImage :: forall eff . Context2D -> CanvasImageSource -> Number -> Number -> Eff (canvas :: CANVAS | eff ) Context2D
566586
567587foreign import drawImageScale :: forall eff . Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Eff (canvas :: CANVAS | eff ) Context2D
0 commit comments