2
2
-- | Canvas API.
3
3
4
4
module 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
11
11
, Composite (..)
12
- , Dimensions ()
12
+ , Dimensions
13
13
, LineCap (..)
14
14
, LineJoin (..)
15
- , Rectangle ()
16
- , ScaleTransform ()
17
- , TextMetrics ()
18
- , Transform ()
19
- , TranslateTransform ()
15
+ , Rectangle
16
+ , ScaleTransform
17
+ , TextMetrics
18
+ , Transform
19
+ , TranslateTransform
20
20
, TextAlign (..)
21
- , CanvasPattern ()
21
+ , CanvasPattern
22
22
, PatternRepeat (..)
23
- , CanvasGradient ()
24
- , LinearGradient ()
25
- , RadialGradient ()
26
- , QuadraticCurve ()
27
- , BezierCurve ()
23
+ , CanvasGradient
24
+ , LinearGradient
25
+ , RadialGradient
26
+ , QuadraticCurve
27
+ , BezierCurve
28
28
29
29
, getCanvasElementById
30
30
, getContext2D
@@ -90,6 +90,9 @@ module Graphics.Canvas
90
90
, putImageDataFull
91
91
, createImageData
92
92
, createImageDataCopy
93
+ , imageDataWidth
94
+ , imageDataHeight
95
+ , imageDataBuffer
93
96
94
97
, canvasElementToImageSource
95
98
, drawImage
@@ -108,13 +111,13 @@ module Graphics.Canvas
108
111
, bezierCurveTo
109
112
) where
110
113
111
- import Prelude ( class Show , Unit , pure , bind , (<$>), (<>), ($), (>>=))
114
+ import Prelude
112
115
116
+ import Control.Monad.Eff (Eff )
117
+ import Control.Monad.Eff.Exception.Unsafe (unsafeThrow )
113
118
import Data.ArrayBuffer.Types (Uint8ClampedArray )
114
119
import Data.Function.Uncurried (Fn3 , runFn3 )
115
120
import Data.Maybe (Maybe (..))
116
- import Control.Monad.Eff (Eff )
117
- import Control.Monad.Eff.Exception.Unsafe (unsafeThrow )
118
121
119
122
-- | The `Canvas` effect denotes computations which read/write from/to the canvas.
120
123
foreign import data CANVAS :: !
@@ -126,7 +129,7 @@ foreign import data CanvasElement :: *
126
129
foreign import data Context2D :: *
127
130
128
131
-- | 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 :: *
130
133
131
134
-- | Opaque object for drawing elements and things to the canvas.
132
135
foreign import data CanvasImageSource :: *
@@ -139,13 +142,21 @@ foreign import data CanvasGradient :: *
139
142
140
143
foreign import canvasElementToImageSource :: CanvasElement -> CanvasImageSource
141
144
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
146
158
tryLoadImage path k = tryLoadImageImpl path (k Nothing ) (k <<< Just )
147
159
148
-
149
160
foreign import getCanvasElementByIdImpl ::
150
161
forall r eff . Fn3 String
151
162
(CanvasElement -> r )
@@ -562,6 +573,15 @@ foreign import createImageData :: forall eff. Context2D -> Number -> Number -> E
562
573
-- | Create a copy of an image data object.
563
574
foreign import createImageDataCopy :: forall eff . Context2D -> ImageData -> Eff (canvas :: CANVAS | eff ) ImageData
564
575
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
+
565
585
foreign import drawImage :: forall eff . Context2D -> CanvasImageSource -> Number -> Number -> Eff (canvas :: CANVAS | eff ) Context2D
566
586
567
587
foreign import drawImageScale :: forall eff . Context2D -> CanvasImageSource -> Number -> Number -> Number -> Number -> Eff (canvas :: CANVAS | eff ) Context2D
0 commit comments