Copyright | (C) 2016-2025 David M. Johnson |
---|---|
License | BSD3-style (see the file LICENSE) |
Maintainer | David M. Johnson <code@dmj.io> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | None |
Language | Haskell2010 |
Miso.Canvas
Description
----------------------------------------------------------------------------- import Miso import qualified Miso.Canvas as Canvas import Miso.Canvas ----------------------------------------------------------------------------- baseUrl :: MisoString baseUrl = "https://7b40c187-5088-4a99-9118-37d20a2f875e.mdnplay.dev/en-US/docs/Web/API/Canvas_API/Tutorial/Basic_animations/" ----------------------------------------------------------------------------- main :: IO () main = run $ do sun <- newImage (baseUrl <> "canvas_sun.png") moon <- newImage (baseUrl <> "canvas_moon.png") earth <- newImage (baseUrl <> "canvas_earth.png") startComponent (app sun moon earth) { initialAction = Just GetTime } where app sun moon earth = defaultComponent (0.0, 0.0) updateModel (view_ sun moon earth) view_ sun moon earth m = div_ [ id_ "canvas grid" ] [ Canvas.canvas_ [ id_ "canvas" , width_ "300" , height_ "300" ] (canvasDraw sun moon earth m n) | n <- [ 1 :: Int .. 4 ] ] ----------------------------------------------------------------------------- canvasDraw :: Image -> Image -> Image -> (Double, Double) -> Int -> Canvas () canvasDraw sun moon earth (millis', secs') n = do let secs = secs' + fromIntegral n millis = millis' + fromIntegral n globalCompositeOperation DestinationOver clearRect (0,0,300,300) fillStyle $ Canvas.color (rgba 0 0 0 0.6) strokeStyle $ Canvas.color (rgba 0 153 255 0.4) save () translate (150, 150) rotate ((((2 * pi) 60) * secs) + (((2 * pi) 60000) * millis)) translate (105,0) fillRect (0 ,-12, 50, 24) drawImage (earth, -12, -12) save () rotate ((((2 * pi) 6) * secs) + (((2 * pi) 6000) * millis)) translate (0,28.5) drawImage (moon, -3.5, -3.5) replicateM_ 2 (restore ()) beginPath () arc (150, 150, 105, 0, pi * 2) stroke () drawImage' (sun, 0, 0, 300, 300)
Synopsis
- data Canvas a where
- Bind :: forall a1 a. Canvas a1 -> (a1 -> Canvas a) -> Canvas a
- Pure :: forall a. a -> Canvas a
- LiftIO :: forall a. IO a -> Canvas a
- LiftJSM :: forall a. JSM a -> Canvas a
- IsPointInPath :: Coord -> Canvas Bool
- MeasureText :: MisoString -> Canvas Double
- ClearRect :: (Double, Double, Double, Double) -> Canvas ()
- FillRect :: (Double, Double, Double, Double) -> Canvas ()
- StrokeRect :: (Double, Double, Double, Double) -> Canvas ()
- BeginPath :: Canvas ()
- ClosePath :: Canvas ()
- MoveTo :: (Double, Double) -> Canvas ()
- LineTo :: (Double, Double) -> Canvas ()
- Fill :: Canvas ()
- Rect :: (Double, Double, Double, Double) -> Canvas ()
- Stroke :: Canvas ()
- BezierCurveTo :: (Double, Double, Double, Double, Double, Double) -> Canvas ()
- Arc :: (Double, Double, Double, Double, Double) -> Canvas ()
- ArcTo :: (Double, Double, Double, Double, Double) -> Canvas ()
- QuadraticCurveTo :: (Double, Double, Double, Double) -> Canvas ()
- Direction :: DirectionType -> Canvas ()
- FillText :: (MisoString, Double, Double) -> Canvas ()
- Font :: MisoString -> Canvas ()
- StrokeText :: (MisoString, Double, Double) -> Canvas ()
- TextAlign :: TextAlignType -> Canvas ()
- TextBaseline :: TextBaselineType -> Canvas ()
- AddColorStop :: Gradient -> Double -> Color -> Canvas ()
- CreateLinearGradient :: (Double, Double, Double, Double) -> Canvas Gradient
- CreatePattern :: Image -> PatternType -> Canvas Pattern
- CreateRadialGradient :: (Double, Double, Double, Double, Double, Double) -> Canvas Gradient
- FillStyle :: StyleArg -> Canvas ()
- LineCap :: LineCapType -> Canvas ()
- LineJoin :: LineJoinType -> Canvas ()
- LineWidth :: Double -> Canvas ()
- MiterLimit :: Double -> Canvas ()
- ShadowBlur :: Double -> Canvas ()
- ShadowColor :: Color -> Canvas ()
- ShadowOffsetX :: Double -> Canvas ()
- ShadowOffsetY :: Double -> Canvas ()
- StrokeStyle :: StyleArg -> Canvas ()
- Scale :: (Double, Double) -> Canvas ()
- Rotate :: Double -> Canvas ()
- Translate :: Coord -> Canvas ()
- Transform :: (Double, Double, Double, Double, Double, Double) -> Canvas ()
- SetTransform :: (Double, Double, Double, Double, Double, Double) -> Canvas ()
- DrawImage :: (Image, Double, Double) -> Canvas ()
- DrawImage' :: (Image, Double, Double, Double, Double) -> Canvas ()
- CreateImageData :: (Double, Double) -> Canvas ImageData
- GetImageData :: (Double, Double, Double, Double) -> Canvas ImageData
- SetImageData :: ImageData -> Int -> Double -> Canvas ()
- ImageDataHeight :: ImageData -> Canvas Double
- ImageDataWidth :: ImageData -> Canvas Double
- PutImageData :: (ImageData, Double, Double) -> Canvas ()
- GlobalAlpha :: Double -> Canvas ()
- GlobalCompositeOperation :: CompositeOperation -> Canvas ()
- Clip :: Canvas ()
- Save :: Canvas ()
- Restore :: Canvas ()
- newtype Pattern = Pattern JSVal
- newtype Gradient = Gradient JSVal
- newtype ImageData = ImageData JSVal
- data LineCapType
- data PatternType
- data LineJoinType
- data DirectionType
- data TextAlignType
- data TextBaselineType
- data CompositeOperation
- data StyleArg
- type Coord = (Double, Double)
- canvas_ :: [Attribute action] -> Canvas a -> View action
- globalCompositeOperation :: CompositeOperation -> Canvas ()
- clearRect :: (Double, Double, Double, Double) -> Canvas ()
- fillRect :: (Double, Double, Double, Double) -> Canvas ()
- strokeRect :: (Double, Double, Double, Double) -> Canvas ()
- beginPath :: () -> Canvas ()
- closePath :: Canvas ()
- moveTo :: Coord -> Canvas ()
- lineTo :: Coord -> Canvas ()
- fill :: Canvas ()
- rect :: (Double, Double, Double, Double) -> Canvas ()
- stroke :: () -> Canvas ()
- bezierCurveTo :: (Double, Double, Double, Double, Double, Double) -> Canvas ()
- arc :: (Double, Double, Double, Double, Double) -> Canvas ()
- arcTo :: (Double, Double, Double, Double, Double) -> Canvas ()
- quadraticCurveTo :: (Double, Double, Double, Double) -> Canvas ()
- direction :: DirectionType -> Canvas ()
- fillText :: (MisoString, Double, Double) -> Canvas ()
- font :: MisoString -> Canvas ()
- strokeText :: (MisoString, Double, Double) -> Canvas ()
- textAlign :: TextAlignType -> Canvas ()
- textBaseline :: TextBaselineType -> Canvas ()
- addColorStop :: Gradient -> Double -> Color -> Canvas ()
- createLinearGradient :: (Double, Double, Double, Double) -> Canvas Gradient
- createPattern :: Image -> PatternType -> Canvas Pattern
- createRadialGradient :: (Double, Double, Double, Double, Double, Double) -> Canvas Gradient
- fillStyle :: StyleArg -> Canvas ()
- lineCap :: LineCapType -> Canvas ()
- lineJoin :: LineJoinType -> Canvas ()
- lineWidth :: Double -> Canvas ()
- miterLimit :: Double -> Canvas ()
- shadowBlur :: Double -> Canvas ()
- shadowColor :: Color -> Canvas ()
- shadowOffsetX :: Double -> Canvas ()
- shadowOffsetY :: Double -> Canvas ()
- strokeStyle :: StyleArg -> Canvas ()
- scale :: (Double, Double) -> Canvas ()
- rotate :: Double -> Canvas ()
- translate :: Coord -> Canvas ()
- transform :: (Double, Double, Double, Double, Double, Double) -> Canvas ()
- setTransform :: (Double, Double, Double, Double, Double, Double) -> Canvas ()
- drawImage :: (Image, Double, Double) -> Canvas ()
- drawImage' :: (Image, Double, Double, Double, Double) -> Canvas ()
- createImageData :: (Double, Double) -> Canvas ImageData
- getImageData :: (Double, Double, Double, Double) -> Canvas ImageData
- setImageData :: ImageData -> Int -> Double -> Canvas ()
- height :: ImageData -> Canvas Double
- width :: ImageData -> Canvas Double
- putImageData :: (ImageData, Double, Double) -> Canvas ()
- globalAlpha :: Double -> Canvas ()
- clip :: () -> Canvas ()
- save :: () -> Canvas ()
- restore :: () -> Canvas ()
- gradient :: Gradient -> StyleArg
- pattern_ :: Pattern -> StyleArg
- color :: Color -> StyleArg
Types
DSL for expressing operations on canvas_
Constructors
data LineCapType Source #
Constructors
LineCapButt | |
LineCapRound | |
LineCapSquare |
Instances
Show LineCapType Source # | |
Defined in Miso.Canvas Methods showsPrec :: Int -> LineCapType -> ShowS # show :: LineCapType -> String # showList :: [LineCapType] -> ShowS # | |
Eq LineCapType Source # | |
Defined in Miso.Canvas |
data LineJoinType Source #
Constructors
LineJoinBevel | |
LineJoinRound | |
LineJoinMiter |
Instances
Show LineJoinType Source # | |
Defined in Miso.Canvas Methods showsPrec :: Int -> LineJoinType -> ShowS # show :: LineJoinType -> String # showList :: [LineJoinType] -> ShowS # | |
Eq LineJoinType Source # | |
Defined in Miso.Canvas |
data DirectionType Source #
Instances
Show DirectionType Source # | |
Defined in Miso.Canvas Methods showsPrec :: Int -> DirectionType -> ShowS # show :: DirectionType -> String # showList :: [DirectionType] -> ShowS # | |
Eq DirectionType Source # | |
Defined in Miso.Canvas Methods (==) :: DirectionType -> DirectionType -> Bool # (/=) :: DirectionType -> DirectionType -> Bool # |
data TextAlignType Source #
Instances
Show TextAlignType Source # | |
Defined in Miso.Canvas Methods showsPrec :: Int -> TextAlignType -> ShowS # show :: TextAlignType -> String # showList :: [TextAlignType] -> ShowS # | |
Eq TextAlignType Source # | |
Defined in Miso.Canvas Methods (==) :: TextAlignType -> TextAlignType -> Bool # (/=) :: TextAlignType -> TextAlignType -> Bool # |
data TextBaselineType Source #
Constructors
TextBaselineAlphabetic | |
TextBaselineTop | |
TextBaselineHanging | |
TextBaselineMiddle | |
TextBaselineIdeographic | |
TextBaselineBottom |
Instances
Show TextBaselineType Source # | |
Defined in Miso.Canvas Methods showsPrec :: Int -> TextBaselineType -> ShowS # show :: TextBaselineType -> String # showList :: [TextBaselineType] -> ShowS # | |
Eq TextBaselineType Source # | |
Defined in Miso.Canvas Methods (==) :: TextBaselineType -> TextBaselineType -> Bool # (/=) :: TextBaselineType -> TextBaselineType -> Bool # |
data CompositeOperation Source #
Constructors
SourceOver | |
SourceAtop | |
SourceIn | |
SourceOut | |
DestinationOver | |
DestinationAtop | |
DestinationIn | |
DestinationOut | |
Lighter | |
Copy | |
Xor |
Instances
Show CompositeOperation Source # | |
Defined in Miso.Canvas Methods showsPrec :: Int -> CompositeOperation -> ShowS # show :: CompositeOperation -> String # showList :: [CompositeOperation] -> ShowS # | |
Eq CompositeOperation Source # | |
Defined in Miso.Canvas Methods (==) :: CompositeOperation -> CompositeOperation -> Bool # (/=) :: CompositeOperation -> CompositeOperation -> Bool # |
Constructors
ColorArg Color | |
GradientArg Gradient | |
PatternArg Pattern |
Property
canvas_ :: [Attribute action] -> Canvas a -> View action Source #
Element for drawing on a canvas, includes a Canvas
DSL.
API
strokeText :: (MisoString, Double, Double) -> Canvas () Source #
createRadialGradient :: (Double, Double, Double, Double, Double, Double) -> Canvas Gradient Source #
lineCap :: LineCapType -> Canvas () Source #
miterLimit :: Double -> Canvas () Source #
shadowBlur :: Double -> Canvas () Source #
shadowColor :: Color -> Canvas () Source #
setImageData :: ImageData -> Int -> Double -> Canvas () Source #
- imageData.data[index
- = 255](https:/www.w3schools.comtags/canvas_imagedata_data.asp)
globalAlpha :: Double -> Canvas () Source #