-----------------------------------------------------------------------------
{-# LANGUAGE CPP               #-}
{-# LANGUAGE OverloadedStrings #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Miso.Canvas.FFI
-- Copyright   :  (C) 2016-2026 David M. Johnson
-- License     :  BSD3-style (see the file LICENSE)
-- Maintainer  :  David M. Johnson <code@dmj.io>
-- Stability   :  experimental
-- Portability :  non-portable
--
-- One JavaScript import per straight-line @CanvasRenderingContext2D@
-- operation: a method call or a property assignment that returns nothing.
--
-- "Miso.Canvas" used to go through the generic 'Miso.DSL.#' and 'setField':
-- a method name marshalled to a JavaScript string, a property lookup, an
-- argument array, and a 'JSVal' handle for every argument and the result,
-- on each operation.  A direct import does one call with the numbers as
-- numbers.  On MicroHs this made the canvas benchmark in @sample-app-canvas@
-- about 3.5 times faster (78 to 22 ms per frame for 1000 rectangles).
--
-- 'fillStyleRGB', 'strokeStyleRGB', 'shadowColorRGB' and their @RGBA@
-- variants take the colour as numbers and build the @rgb(…)@ string in
-- JavaScript, instead of 'Miso.CSS.Color.renderColor' building it from
-- Haskell (several string operations across the FFI per colour).
--
-- Operations that return a value (gradients, patterns, image data) stay on
-- the generic path in "Miso.Canvas".  The native GHC backend has no
-- JavaScript FFI, so there these are the generic calls as before.
----------------------------------------------------------------------------
module Miso.Canvas.FFI
  ( jsString
  , clearRect
  , fillRect
  , strokeRect
  , rect
  , quadraticCurveTo
  , beginPath
  , closePath
  , fill
  , stroke
  , clip
  , save
  , restore
  , moveTo
  , lineTo
  , scale
  , translate
  , rotate
  , bezierCurveTo
  , transform
  , setTransform
  , arc
  , arcTo
  , fillText
  , strokeText
  , drawImage
  , drawImage4
  , putImageData
  , lineWidth
  , miterLimit
  , shadowBlur
  , shadowOffsetX
  , shadowOffsetY
  , globalAlpha
  , font
  , lineCap
  , lineJoin
  , direction
  , textAlign
  , textBaseline
  , globalCompositeOperation
  , shadowColor
  , fillStyle
  , strokeStyle
  , fillStyleRGB
  , fillStyleRGBA
  , strokeStyleRGB
  , strokeStyleRGBA
  , shadowColorRGB
  , shadowColorRGBA
  ) where
-----------------------------------------------------------------------------
import           Miso.String (MisoString)
#if defined(GHCJS_NEW) || defined(wasm32_HOST_ARCH) || defined(__MHS__)
import           Miso.DSL.FFI (JSVal, JSString (..))
#ifdef MISO_TEXT
import           Miso.DSL.FFI (textToJSString)
#endif
#else
import           Control.Monad (void)
import           Miso.CSS.Color (Color (..), renderColor)
import           Miso.DSL (JSVal, (#), setField)
#endif
-----------------------------------------------------------------------------
-- | A 'MisoString' as the string the imports take.
#if !(defined(GHCJS_NEW) || defined(wasm32_HOST_ARCH) || defined(__MHS__))
jsString :: MisoString -> MisoString
jsString :: Text -> Text
jsString Text
s = Text
s
#elif defined(MISO_TEXT)
jsString :: MisoString -> JSString
jsString = textToJSString
#else
jsString :: MisoString -> JSString
jsString s = s
#endif
-----------------------------------------------------------------------------
#if defined(GHCJS_NEW)
-- The GHC JavaScript backend: the code is an arrow function.
foreign import javascript unsafe "(($1,$2,$3,$4,$5) => { $1.clearRect($2,$3,$4,$5); })"
  clearRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5) => { $1.fillRect($2,$3,$4,$5); })"
  fillRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5) => { $1.strokeRect($2,$3,$4,$5); })"
  strokeRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5) => { $1.rect($2,$3,$4,$5); })"
  rect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5) => { $1.quadraticCurveTo($2,$3,$4,$5); })"
  quadraticCurveTo :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1) => { $1.beginPath(); })"
  beginPath :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1) => { $1.closePath(); })"
  closePath :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1) => { $1.fill(); })"
  fill :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1) => { $1.stroke(); })"
  stroke :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1) => { $1.clip(); })"
  clip :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1) => { $1.save(); })"
  save :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1) => { $1.restore(); })"
  restore :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3) => { $1.moveTo($2,$3); })"
  moveTo :: JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3) => { $1.lineTo($2,$3); })"
  lineTo :: JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3) => { $1.scale($2,$3); })"
  scale :: JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3) => { $1.translate($2,$3); })"
  translate :: JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.rotate($2); })"
  rotate :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5,$6,$7) => { $1.bezierCurveTo($2,$3,$4,$5,$6,$7); })"
  bezierCurveTo :: JSVal -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5,$6,$7) => { $1.transform($2,$3,$4,$5,$6,$7); })"
  transform :: JSVal -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5,$6,$7) => { $1.setTransform($2,$3,$4,$5,$6,$7); })"
  setTransform :: JSVal -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5,$6) => { $1.arc($2,$3,$4,$5,$6); })"
  arc :: JSVal -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5,$6) => { $1.arcTo($2,$3,$4,$5,$6); })"
  arcTo :: JSVal -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4) => { $1.fillText($2,$3,$4); })"
  fillText :: JSVal -> JSString -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4) => { $1.strokeText($2,$3,$4); })"
  strokeText :: JSVal -> JSString -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4) => { $1.drawImage($2,$3,$4); })"
  drawImage :: JSVal -> JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5,$6) => { $1.drawImage($2,$3,$4,$5,$6); })"
  drawImage4 :: JSVal -> JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4) => { $1.putImageData($2,$3,$4); })"
  putImageData :: JSVal -> JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.lineWidth = $2; })"
  lineWidth :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.miterLimit = $2; })"
  miterLimit :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.shadowBlur = $2; })"
  shadowBlur :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.shadowOffsetX = $2; })"
  shadowOffsetX :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.shadowOffsetY = $2; })"
  shadowOffsetY :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.globalAlpha = $2; })"
  globalAlpha :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.font = $2; })"
  font :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.lineCap = $2; })"
  lineCap :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.lineJoin = $2; })"
  lineJoin :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.direction = $2; })"
  direction :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.textAlign = $2; })"
  textAlign :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.textBaseline = $2; })"
  textBaseline :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.globalCompositeOperation = $2; })"
  globalCompositeOperation :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.shadowColor = $2; })"
  shadowColor :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.fillStyle = $2; })"
  fillStyle :: JSVal -> JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2) => { $1.strokeStyle = $2; })"
  strokeStyle :: JSVal -> JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4) => { $1.fillStyle = 'rgb(' + $2 + ',' + $3 + ',' + $4 + ')'; })"
  fillStyleRGB :: JSVal -> Int -> Int -> Int -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5) => { $1.fillStyle = 'rgba(' + $2 + ',' + $3 + ',' + $4 + ',' + $5 + ')'; })"
  fillStyleRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4) => { $1.strokeStyle = 'rgb(' + $2 + ',' + $3 + ',' + $4 + ')'; })"
  strokeStyleRGB :: JSVal -> Int -> Int -> Int -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5) => { $1.strokeStyle = 'rgba(' + $2 + ',' + $3 + ',' + $4 + ',' + $5 + ')'; })"
  strokeStyleRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4) => { $1.shadowColor = 'rgb(' + $2 + ',' + $3 + ',' + $4 + ')'; })"
  shadowColorRGB :: JSVal -> Int -> Int -> Int -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "(($1,$2,$3,$4,$5) => { $1.shadowColor = 'rgba(' + $2 + ',' + $3 + ',' + $4 + ',' + $5 + ')'; })"
  shadowColorRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
#elif defined(wasm32_HOST_ARCH) || defined(__MHS__)
-- The GHC wasm backend and MicroHs: the code is a statement.
foreign import javascript unsafe "$1.clearRect($2,$3,$4,$5)"
  clearRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.fillRect($2,$3,$4,$5)"
  fillRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.strokeRect($2,$3,$4,$5)"
  strokeRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.rect($2,$3,$4,$5)"
  rect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.quadraticCurveTo($2,$3,$4,$5)"
  quadraticCurveTo :: JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.beginPath()"
  beginPath :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.closePath()"
  closePath :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.fill()"
  fill :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.stroke()"
  stroke :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.clip()"
  clip :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.save()"
  save :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.restore()"
  restore :: JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.moveTo($2,$3)"
  moveTo :: JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.lineTo($2,$3)"
  lineTo :: JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.scale($2,$3)"
  scale :: JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.translate($2,$3)"
  translate :: JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.rotate($2)"
  rotate :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.bezierCurveTo($2,$3,$4,$5,$6,$7)"
  bezierCurveTo :: JSVal -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.transform($2,$3,$4,$5,$6,$7)"
  transform :: JSVal -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.setTransform($2,$3,$4,$5,$6,$7)"
  setTransform :: JSVal -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.arc($2,$3,$4,$5,$6)"
  arc :: JSVal -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.arcTo($2,$3,$4,$5,$6)"
  arcTo :: JSVal -> Double -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.fillText($2,$3,$4)"
  fillText :: JSVal -> JSString -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.strokeText($2,$3,$4)"
  strokeText :: JSVal -> JSString -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.drawImage($2,$3,$4)"
  drawImage :: JSVal -> JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.drawImage($2,$3,$4,$5,$6)"
  drawImage4 :: JSVal -> JSVal -> Double -> Double -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.putImageData($2,$3,$4)"
  putImageData :: JSVal -> JSVal -> Double -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.lineWidth = $2"
  lineWidth :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.miterLimit = $2"
  miterLimit :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.shadowBlur = $2"
  shadowBlur :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.shadowOffsetX = $2"
  shadowOffsetX :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.shadowOffsetY = $2"
  shadowOffsetY :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.globalAlpha = $2"
  globalAlpha :: JSVal -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.font = $2"
  font :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.lineCap = $2"
  lineCap :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.lineJoin = $2"
  lineJoin :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.direction = $2"
  direction :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.textAlign = $2"
  textAlign :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.textBaseline = $2"
  textBaseline :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.globalCompositeOperation = $2"
  globalCompositeOperation :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.shadowColor = $2"
  shadowColor :: JSVal -> JSString -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.fillStyle = $2"
  fillStyle :: JSVal -> JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.strokeStyle = $2"
  strokeStyle :: JSVal -> JSVal -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.fillStyle = 'rgb(' + $2 + ',' + $3 + ',' + $4 + ')'"
  fillStyleRGB :: JSVal -> Int -> Int -> Int -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.fillStyle = 'rgba(' + $2 + ',' + $3 + ',' + $4 + ',' + $5 + ')'"
  fillStyleRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.strokeStyle = 'rgb(' + $2 + ',' + $3 + ',' + $4 + ')'"
  strokeStyleRGB :: JSVal -> Int -> Int -> Int -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.strokeStyle = 'rgba(' + $2 + ',' + $3 + ',' + $4 + ',' + $5 + ')'"
  strokeStyleRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.shadowColor = 'rgb(' + $2 + ',' + $3 + ',' + $4 + ')'"
  shadowColorRGB :: JSVal -> Int -> Int -> Int -> IO ()
-----------------------------------------------------------------------------
foreign import javascript unsafe "$1.shadowColor = 'rgba(' + $2 + ',' + $3 + ',' + $4 + ',' + $5 + ')'"
  shadowColorRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
#else
-- Native GHC: no JavaScript FFI, the generic DSL as before.
clearRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
clearRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
clearRect JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Double, Double, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"clearRect" ((Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3))
-----------------------------------------------------------------------------
fillRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
fillRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
fillRect JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Double, Double, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"fillRect" ((Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3))
-----------------------------------------------------------------------------
strokeRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
strokeRect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
strokeRect JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Double, Double, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"strokeRect" ((Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3))
-----------------------------------------------------------------------------
rect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
rect :: JSVal -> Double -> Double -> Double -> Double -> IO ()
rect JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Double, Double, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"rect" ((Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3))
-----------------------------------------------------------------------------
quadraticCurveTo :: JSVal -> Double -> Double -> Double -> Double -> IO ()
quadraticCurveTo :: JSVal -> Double -> Double -> Double -> Double -> IO ()
quadraticCurveTo JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Double, Double, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"quadraticCurveTo" ((Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3))
-----------------------------------------------------------------------------
beginPath :: JSVal -> IO ()
beginPath :: JSVal -> IO ()
beginPath JSVal
ctx = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"beginPath" (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ())
-----------------------------------------------------------------------------
closePath :: JSVal -> IO ()
closePath :: JSVal -> IO ()
closePath JSVal
ctx = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"closePath" (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ())
-----------------------------------------------------------------------------
fill :: JSVal -> IO ()
fill :: JSVal -> IO ()
fill JSVal
ctx = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"fill" (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ())
-----------------------------------------------------------------------------
stroke :: JSVal -> IO ()
stroke :: JSVal -> IO ()
stroke JSVal
ctx = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"stroke" (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ())
-----------------------------------------------------------------------------
clip :: JSVal -> IO ()
clip :: JSVal -> IO ()
clip JSVal
ctx = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"clip" (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ())
-----------------------------------------------------------------------------
save :: JSVal -> IO ()
save :: JSVal -> IO ()
save JSVal
ctx = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"save" (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ())
-----------------------------------------------------------------------------
restore :: JSVal -> IO ()
restore :: JSVal -> IO ()
restore JSVal
ctx = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> () -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"restore" (() -> IO JSVal) -> () -> IO JSVal
forall a b. (a -> b) -> a -> b
$ ())
-----------------------------------------------------------------------------
moveTo :: JSVal -> Double -> Double -> IO ()
moveTo :: JSVal -> Double -> Double -> IO ()
moveTo JSVal
ctx Double
a0 Double
a1 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"moveTo" ((Double, Double) -> IO JSVal) -> (Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1))
-----------------------------------------------------------------------------
lineTo :: JSVal -> Double -> Double -> IO ()
lineTo :: JSVal -> Double -> Double -> IO ()
lineTo JSVal
ctx Double
a0 Double
a1 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"lineTo" ((Double, Double) -> IO JSVal) -> (Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1))
-----------------------------------------------------------------------------
scale :: JSVal -> Double -> Double -> IO ()
scale :: JSVal -> Double -> Double -> IO ()
scale JSVal
ctx Double
a0 Double
a1 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"scale" ((Double, Double) -> IO JSVal) -> (Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1))
-----------------------------------------------------------------------------
translate :: JSVal -> Double -> Double -> IO ()
translate :: JSVal -> Double -> Double -> IO ()
translate JSVal
ctx Double
a0 Double
a1 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"translate" ((Double, Double) -> IO JSVal) -> (Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1))
-----------------------------------------------------------------------------
rotate :: JSVal -> Double -> IO ()
rotate :: JSVal -> Double -> IO ()
rotate JSVal
ctx Double
a0 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> Double -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"rotate" (Double -> IO JSVal) -> Double -> IO JSVal
forall a b. (a -> b) -> a -> b
$ Double
a0)
-----------------------------------------------------------------------------
bezierCurveTo :: JSVal -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
bezierCurveTo :: JSVal
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO ()
bezierCurveTo JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 Double
a4 Double
a5 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal
-> Text
-> (Double, Double, Double, Double, Double, Double)
-> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"bezierCurveTo" ((Double, Double, Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3,Double
a4,Double
a5))
-----------------------------------------------------------------------------
transform :: JSVal -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
transform :: JSVal
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO ()
transform JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 Double
a4 Double
a5 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal
-> Text
-> (Double, Double, Double, Double, Double, Double)
-> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"transform" ((Double, Double, Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3,Double
a4,Double
a5))
-----------------------------------------------------------------------------
setTransform :: JSVal -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
setTransform :: JSVal
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO ()
setTransform JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 Double
a4 Double
a5 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal
-> Text
-> (Double, Double, Double, Double, Double, Double)
-> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"setTransform" ((Double, Double, Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3,Double
a4,Double
a5))
-----------------------------------------------------------------------------
arc :: JSVal -> Double -> Double -> Double -> Double -> Double -> IO ()
arc :: JSVal -> Double -> Double -> Double -> Double -> Double -> IO ()
arc JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 Double
a4 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal
-> Text -> (Double, Double, Double, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"arc" ((Double, Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3,Double
a4))
-----------------------------------------------------------------------------
arcTo :: JSVal -> Double -> Double -> Double -> Double -> Double -> IO ()
arcTo :: JSVal -> Double -> Double -> Double -> Double -> Double -> IO ()
arcTo JSVal
ctx Double
a0 Double
a1 Double
a2 Double
a3 Double
a4 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal
-> Text -> (Double, Double, Double, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"arcTo" ((Double, Double, Double, Double, Double) -> IO JSVal)
-> (Double, Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Double
a0,Double
a1,Double
a2,Double
a3,Double
a4))
-----------------------------------------------------------------------------
fillText :: JSVal -> MisoString -> Double -> Double -> IO ()
fillText :: JSVal -> Text -> Double -> Double -> IO ()
fillText JSVal
ctx Text
o Double
a0 Double
a1 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Text, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"fillText" ((Text, Double, Double) -> IO JSVal)
-> (Text, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Text
o,Double
a0,Double
a1))
-----------------------------------------------------------------------------
strokeText :: JSVal -> MisoString -> Double -> Double -> IO ()
strokeText :: JSVal -> Text -> Double -> Double -> IO ()
strokeText JSVal
ctx Text
o Double
a0 Double
a1 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (Text, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"strokeText" ((Text, Double, Double) -> IO JSVal)
-> (Text, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (Text
o,Double
a0,Double
a1))
-----------------------------------------------------------------------------
drawImage :: JSVal -> JSVal -> Double -> Double -> IO ()
drawImage :: JSVal -> JSVal -> Double -> Double -> IO ()
drawImage JSVal
ctx JSVal
o Double
a0 Double
a1 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (JSVal, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"drawImage" ((JSVal, Double, Double) -> IO JSVal)
-> (JSVal, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (JSVal
o,Double
a0,Double
a1))
-----------------------------------------------------------------------------
drawImage4 :: JSVal -> JSVal -> Double -> Double -> Double -> Double -> IO ()
drawImage4 :: JSVal -> JSVal -> Double -> Double -> Double -> Double -> IO ()
drawImage4 JSVal
ctx JSVal
o Double
a0 Double
a1 Double
a2 Double
a3 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal
-> Text -> (JSVal, Double, Double, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"drawImage" ((JSVal, Double, Double, Double, Double) -> IO JSVal)
-> (JSVal, Double, Double, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (JSVal
o,Double
a0,Double
a1,Double
a2,Double
a3))
-----------------------------------------------------------------------------
putImageData :: JSVal -> JSVal -> Double -> Double -> IO ()
putImageData :: JSVal -> JSVal -> Double -> Double -> IO ()
putImageData JSVal
ctx JSVal
o Double
a0 Double
a1 = IO JSVal -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSVal
ctx JSVal -> Text -> (JSVal, Double, Double) -> IO JSVal
forall object args.
(ToObject object, ToArgs args) =>
object -> Text -> args -> IO JSVal
# Text
"putImageData" ((JSVal, Double, Double) -> IO JSVal)
-> (JSVal, Double, Double) -> IO JSVal
forall a b. (a -> b) -> a -> b
$ (JSVal
o,Double
a0,Double
a1))
-----------------------------------------------------------------------------
lineWidth :: JSVal -> Double -> IO ()
lineWidth :: JSVal -> Double -> IO ()
lineWidth JSVal
ctx Double
v = JSVal -> Text -> Double -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"lineWidth" Double
v
-----------------------------------------------------------------------------
miterLimit :: JSVal -> Double -> IO ()
miterLimit :: JSVal -> Double -> IO ()
miterLimit JSVal
ctx Double
v = JSVal -> Text -> Double -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"miterLimit" Double
v
-----------------------------------------------------------------------------
shadowBlur :: JSVal -> Double -> IO ()
shadowBlur :: JSVal -> Double -> IO ()
shadowBlur JSVal
ctx Double
v = JSVal -> Text -> Double -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"shadowBlur" Double
v
-----------------------------------------------------------------------------
shadowOffsetX :: JSVal -> Double -> IO ()
shadowOffsetX :: JSVal -> Double -> IO ()
shadowOffsetX JSVal
ctx Double
v = JSVal -> Text -> Double -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"shadowOffsetX" Double
v
-----------------------------------------------------------------------------
shadowOffsetY :: JSVal -> Double -> IO ()
shadowOffsetY :: JSVal -> Double -> IO ()
shadowOffsetY JSVal
ctx Double
v = JSVal -> Text -> Double -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"shadowOffsetY" Double
v
-----------------------------------------------------------------------------
globalAlpha :: JSVal -> Double -> IO ()
globalAlpha :: JSVal -> Double -> IO ()
globalAlpha JSVal
ctx Double
v = JSVal -> Text -> Double -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"globalAlpha" Double
v
-----------------------------------------------------------------------------
font :: JSVal -> MisoString -> IO ()
font :: JSVal -> Text -> IO ()
font JSVal
ctx Text
v = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"font" Text
v
-----------------------------------------------------------------------------
lineCap :: JSVal -> MisoString -> IO ()
lineCap :: JSVal -> Text -> IO ()
lineCap JSVal
ctx Text
v = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"lineCap" Text
v
-----------------------------------------------------------------------------
lineJoin :: JSVal -> MisoString -> IO ()
lineJoin :: JSVal -> Text -> IO ()
lineJoin JSVal
ctx Text
v = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"lineJoin" Text
v
-----------------------------------------------------------------------------
direction :: JSVal -> MisoString -> IO ()
direction :: JSVal -> Text -> IO ()
direction JSVal
ctx Text
v = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"direction" Text
v
-----------------------------------------------------------------------------
textAlign :: JSVal -> MisoString -> IO ()
textAlign :: JSVal -> Text -> IO ()
textAlign JSVal
ctx Text
v = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"textAlign" Text
v
-----------------------------------------------------------------------------
textBaseline :: JSVal -> MisoString -> IO ()
textBaseline :: JSVal -> Text -> IO ()
textBaseline JSVal
ctx Text
v = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"textBaseline" Text
v
-----------------------------------------------------------------------------
globalCompositeOperation :: JSVal -> MisoString -> IO ()
globalCompositeOperation :: JSVal -> Text -> IO ()
globalCompositeOperation JSVal
ctx Text
v = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"globalCompositeOperation" Text
v
-----------------------------------------------------------------------------
shadowColor :: JSVal -> MisoString -> IO ()
shadowColor :: JSVal -> Text -> IO ()
shadowColor JSVal
ctx Text
v = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"shadowColor" Text
v
-----------------------------------------------------------------------------
fillStyle :: JSVal -> JSVal -> IO ()
fillStyle :: JSVal -> JSVal -> IO ()
fillStyle JSVal
ctx JSVal
v = JSVal -> Text -> JSVal -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"fillStyle" JSVal
v
-----------------------------------------------------------------------------
strokeStyle :: JSVal -> JSVal -> IO ()
strokeStyle :: JSVal -> JSVal -> IO ()
strokeStyle JSVal
ctx JSVal
v = JSVal -> Text -> JSVal -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"strokeStyle" JSVal
v
-----------------------------------------------------------------------------
fillStyleRGB :: JSVal -> Int -> Int -> Int -> IO ()
fillStyleRGB :: JSVal -> Int -> Int -> Int -> IO ()
fillStyleRGB JSVal
ctx Int
r Int
g Int
b = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"fillStyle" (Color -> Text
renderColor (Int -> Int -> Int -> Color
RGB Int
r Int
g Int
b))
-----------------------------------------------------------------------------
fillStyleRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
fillStyleRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
fillStyleRGBA JSVal
ctx Int
r Int
g Int
b Double
a = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"fillStyle" (Color -> Text
renderColor (Int -> Int -> Int -> Double -> Color
RGBA Int
r Int
g Int
b Double
a))
-----------------------------------------------------------------------------
strokeStyleRGB :: JSVal -> Int -> Int -> Int -> IO ()
strokeStyleRGB :: JSVal -> Int -> Int -> Int -> IO ()
strokeStyleRGB JSVal
ctx Int
r Int
g Int
b = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"strokeStyle" (Color -> Text
renderColor (Int -> Int -> Int -> Color
RGB Int
r Int
g Int
b))
-----------------------------------------------------------------------------
strokeStyleRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
strokeStyleRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
strokeStyleRGBA JSVal
ctx Int
r Int
g Int
b Double
a = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"strokeStyle" (Color -> Text
renderColor (Int -> Int -> Int -> Double -> Color
RGBA Int
r Int
g Int
b Double
a))
-----------------------------------------------------------------------------
shadowColorRGB :: JSVal -> Int -> Int -> Int -> IO ()
shadowColorRGB :: JSVal -> Int -> Int -> Int -> IO ()
shadowColorRGB JSVal
ctx Int
r Int
g Int
b = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"shadowColor" (Color -> Text
renderColor (Int -> Int -> Int -> Color
RGB Int
r Int
g Int
b))
-----------------------------------------------------------------------------
shadowColorRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
shadowColorRGBA :: JSVal -> Int -> Int -> Int -> Double -> IO ()
shadowColorRGBA JSVal
ctx Int
r Int
g Int
b Double
a = JSVal -> Text -> Text -> IO ()
forall o v. (ToObject o, ToJSVal v) => o -> Text -> v -> IO ()
setField JSVal
ctx Text
"shadowColor" (Color -> Text
renderColor (Int -> Int -> Int -> Double -> Color
RGBA Int
r Int
g Int
b Double
a))
#endif
-----------------------------------------------------------------------------