miso
Copyright(C) 2016-2025 David M. Johnson
LicenseBSD3-style (see the file LICENSE)
MaintainerDavid M. Johnson <code@dmj.io>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Miso.Canvas

Description

Canvas Example

-----------------------------------------------------------------------------
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

Types

data Canvas a where Source #

DSL for expressing operations on canvas_

Constructors

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 () 

Instances

Instances details
Applicative Canvas Source # 
Instance details

Defined in Miso.Canvas

Methods

pure :: a -> Canvas a #

(<*>) :: Canvas (a -> b) -> Canvas a -> Canvas b #

liftA2 :: (a -> b -> c) -> Canvas a -> Canvas b -> Canvas c #

(*>) :: Canvas a -> Canvas b -> Canvas b #

(<*) :: Canvas a -> Canvas b -> Canvas a #

Functor Canvas Source # 
Instance details

Defined in Miso.Canvas

Methods

fmap :: (a -> b) -> Canvas a -> Canvas b #

(<$) :: a -> Canvas b -> Canvas a #

Monad Canvas Source # 
Instance details

Defined in Miso.Canvas

Methods

(>>=) :: Canvas a -> (a -> Canvas b) -> Canvas b #

(>>) :: Canvas a -> Canvas b -> Canvas b #

return :: a -> Canvas a #

MonadIO Canvas Source # 
Instance details

Defined in Miso.Canvas

Methods

liftIO :: IO a -> Canvas a #

MonadJSM Canvas Source # 
Instance details

Defined in Miso.Canvas

Methods

liftJSM' :: JSM a -> Canvas a Source #

Monoid a => Monoid (Canvas a) Source # 
Instance details

Defined in Miso.Canvas

Methods

mempty :: Canvas a #

mappend :: Canvas a -> Canvas a -> Canvas a #

mconcat :: [Canvas a] -> Canvas a #

Semigroup a => Semigroup (Canvas a) Source # 
Instance details

Defined in Miso.Canvas

Methods

(<>) :: Canvas a -> Canvas a -> Canvas a #

sconcat :: NonEmpty (Canvas a) -> Canvas a #

stimes :: Integral b => b -> Canvas a -> Canvas a #

newtype Pattern Source #

Constructors

Pattern JSVal 

Instances

Instances details
ToJSVal Pattern Source # 
Instance details

Defined in Miso.Canvas

newtype Gradient Source #

Constructors

Gradient JSVal 

Instances

Instances details
ToJSVal Gradient Source # 
Instance details

Defined in Miso.Canvas

newtype ImageData Source #

Constructors

ImageData JSVal 

Instances

Instances details
ToJSVal ImageData Source # 
Instance details

Defined in Miso.Canvas

MakeObject ImageData Source # 
Instance details

Defined in Miso.Canvas

data LineCapType Source #

Instances

Instances details
Show LineCapType Source # 
Instance details

Defined in Miso.Canvas

Eq LineCapType Source # 
Instance details

Defined in Miso.Canvas

data LineJoinType Source #

Instances

Instances details
Show LineJoinType Source # 
Instance details

Defined in Miso.Canvas

Eq LineJoinType Source # 
Instance details

Defined in Miso.Canvas

data DirectionType Source #

Constructors

LTR 
RTL 
Inherit 

Instances

Instances details
Show DirectionType Source # 
Instance details

Defined in Miso.Canvas

Eq DirectionType Source # 
Instance details

Defined in Miso.Canvas

Property

canvas_ :: [Attribute action] -> Canvas a -> View action Source #

Element for drawing on a canvas, includes a Canvas DSL.

API

setImageData :: ImageData -> Int -> Double -> Canvas () Source #

imageData.data[index
= 255](https:/www.w3schools.comtags/canvas_imagedata_data.asp)

Smart constructors