{-# OPTIONS_GHC -fno-warn-orphans #-}
module Graphics.Blank.Generated where

import Graphics.Blank.Canvas
import Graphics.Blank.JavaScript
import Data.Text (Text)

instance Show Method where
  show (Arc (a1,a2,a3,a4,a5,a6)) = "arc(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ "," ++ jsFloat a5 ++ "," ++ jsBool a6 ++ ")"
  show (ArcTo (a1,a2,a3,a4,a5)) = "arcTo(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ "," ++ jsFloat a5 ++ ")"
  show BeginPath = "beginPath()"
  show (BezierCurveTo (a1,a2,a3,a4,a5,a6)) = "bezierCurveTo(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ "," ++ jsFloat a5 ++ "," ++ jsFloat a6 ++ ")"
  show (DrawImage (a1,a2)) = "drawImage(" ++ jsImage a1 ++ "," ++ jsList jsFloat a2 ++ ")"
  show (ClearRect (a1,a2,a3,a4)) = "clearRect(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ ")"
  show Clip = "clip()"
  show ClosePath = "closePath()"
  show Fill = "fill()"
  show (FillRect (a1,a2,a3,a4)) = "fillRect(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ ")"
  show (FillStyle (a1)) = "fillStyle = (" ++ jsStyle a1 ++ ")"
  show (FillText (a1,a2,a3)) = "fillText(" ++ jsText a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ ")"
  show (Font (a1)) = "font = (" ++ jsText a1 ++ ")"
  show (GlobalAlpha (a1)) = "globalAlpha = (" ++ jsFloat a1 ++ ")"
  show (GlobalCompositeOperation (a1)) = "globalCompositeOperation = (" ++ jsText a1 ++ ")"
  show (LineCap (a1)) = "lineCap = (" ++ jsText a1 ++ ")"
  show (LineJoin (a1)) = "lineJoin = (" ++ jsText a1 ++ ")"
  show (LineTo (a1,a2)) = "lineTo(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ ")"
  show (LineWidth (a1)) = "lineWidth = (" ++ jsFloat a1 ++ ")"
  show (MiterLimit (a1)) = "miterLimit = (" ++ jsFloat a1 ++ ")"
  show (MoveTo (a1,a2)) = "moveTo(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ ")"
  show (PutImageData (a1,a2)) = "putImageData(" ++ jsImageData a1 ++ "," ++ jsList jsFloat a2 ++ ")"
  show (QuadraticCurveTo (a1,a2,a3,a4)) = "quadraticCurveTo(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ ")"
  show (Rect (a1,a2,a3,a4)) = "rect(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ ")"
  show Restore = "restore()"
  show (Rotate (a1)) = "rotate(" ++ jsFloat a1 ++ ")"
  show (Scale (a1,a2)) = "scale(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ ")"
  show Save = "save()"
  show (SetTransform (a1,a2,a3,a4,a5,a6)) = "setTransform(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ "," ++ jsFloat a5 ++ "," ++ jsFloat a6 ++ ")"
  show Stroke = "stroke()"
  show (StrokeRect (a1,a2,a3,a4)) = "strokeRect(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ ")"
  show (StrokeText (a1,a2,a3)) = "strokeText(" ++ jsText a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ ")"
  show (StrokeStyle (a1)) = "strokeStyle = (" ++ jsStyle a1 ++ ")"
  show (ShadowBlur (a1)) = "shadowBlur = (" ++ jsFloat a1 ++ ")"
  show (ShadowColor (a1)) = "shadowColor = (" ++ jsText a1 ++ ")"
  show (ShadowOffsetX (a1)) = "shadowOffsetX = (" ++ jsFloat a1 ++ ")"
  show (ShadowOffsetY (a1)) = "shadowOffsetY = (" ++ jsFloat a1 ++ ")"
  show (TextAlign (a1)) = "textAlign = (" ++ jsText a1 ++ ")"
  show (TextBaseline (a1)) = "textBaseline = (" ++ jsText a1 ++ ")"
  show (Transform (a1,a2,a3,a4,a5,a6)) = "transform(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ "," ++ jsFloat a3 ++ "," ++ jsFloat a4 ++ "," ++ jsFloat a5 ++ "," ++ jsFloat a6 ++ ")"
  show (Translate (a1,a2)) = "translate(" ++ jsFloat a1 ++ "," ++ jsFloat a2 ++ ")"

-- DSL

arc :: (Float,Float,Float,Float,Float,Bool) -> Canvas ()
arc = Method . Arc

arcTo :: (Float,Float,Float,Float,Float) -> Canvas ()
arcTo = Method . ArcTo

beginPath :: () -> Canvas ()
beginPath () = Method BeginPath

bezierCurveTo :: (Float,Float,Float,Float,Float,Float) -> Canvas ()
bezierCurveTo = Method . BezierCurveTo

-- | 'drawImage' takes 2, 4 or 8 floats arguments
drawImage :: Image image => (image,[Float]) -> Canvas ()
drawImage = Method . DrawImage

clearRect :: (Float,Float,Float,Float) -> Canvas ()
clearRect = Method . ClearRect

clip :: () -> Canvas ()
clip () = Method Clip

closePath :: () -> Canvas ()
closePath () = Method ClosePath

fill :: () -> Canvas ()
fill () = Method Fill

fillRect :: (Float,Float,Float,Float) -> Canvas ()
fillRect = Method . FillRect

fillStyle :: Style style => style -> Canvas ()
fillStyle = Method . FillStyle

fillText :: (Text,Float,Float) -> Canvas ()
fillText = Method . FillText

font :: Text -> Canvas ()
font = Method . Font

globalAlpha :: Float -> Canvas ()
globalAlpha = Method . GlobalAlpha

globalCompositeOperation :: Text -> Canvas ()
globalCompositeOperation = Method . GlobalCompositeOperation

lineCap :: Text -> Canvas ()
lineCap = Method . LineCap

lineJoin :: Text -> Canvas ()
lineJoin = Method . LineJoin

lineTo :: (Float,Float) -> Canvas ()
lineTo = Method . LineTo

lineWidth :: Float -> Canvas ()
lineWidth = Method . LineWidth

miterLimit :: Float -> Canvas ()
miterLimit = Method . MiterLimit

moveTo :: (Float,Float) -> Canvas ()
moveTo = Method . MoveTo

putImageData :: (ImageData,[Float]) -> Canvas ()
putImageData = Method . PutImageData

quadraticCurveTo :: (Float,Float,Float,Float) -> Canvas ()
quadraticCurveTo = Method . QuadraticCurveTo

rect :: (Float,Float,Float,Float) -> Canvas ()
rect = Method . Rect

restore :: () -> Canvas ()
restore () = Method Restore

rotate :: Float -> Canvas ()
rotate = Method . Rotate

scale :: (Float,Float) -> Canvas ()
scale = Method . Scale

save :: () -> Canvas ()
save () = Method Save

setTransform :: (Float,Float,Float,Float,Float,Float) -> Canvas ()
setTransform = Method . SetTransform

stroke :: () -> Canvas ()
stroke () = Method Stroke

strokeRect :: (Float,Float,Float,Float) -> Canvas ()
strokeRect = Method . StrokeRect

strokeText :: (Text,Float,Float) -> Canvas ()
strokeText = Method . StrokeText

strokeStyle :: Style style => style -> Canvas ()
strokeStyle = Method . StrokeStyle

shadowBlur :: Float -> Canvas ()
shadowBlur = Method . ShadowBlur

shadowColor :: Text -> Canvas ()
shadowColor = Method . ShadowColor

shadowOffsetX :: Float -> Canvas ()
shadowOffsetX = Method . ShadowOffsetX

shadowOffsetY :: Float -> Canvas ()
shadowOffsetY = Method . ShadowOffsetY

textAlign :: Text -> Canvas ()
textAlign = Method . TextAlign

textBaseline :: Text -> Canvas ()
textBaseline = Method . TextBaseline

transform :: (Float,Float,Float,Float,Float,Float) -> Canvas ()
transform = Method . Transform

translate :: (Float,Float) -> Canvas ()
translate = Method . Translate