{-# OPTIONS_HADDOCK show-extensions #-}
{-# LANGUAGE
    DeriveDataTypeable
  , EmptyDataDecls
  , TypeFamilies
  #-}

{-|
Module      : Diagrams.Backend.HsQML.DiagramObj.Signals 
Description : Signals used by DiagramObj.
Copyright   : (c) Marcin Mrotek, 2015
License     : BSD-3
Maintainer  : marcin.jan.mrotek@gmail.com
Stability   : experimental

Ceci est une boilerplate.
-} 

module Diagrams.Backend.HsQML.DiagramObj.Signals where

import Diagrams.Backend.HsQML.GradientObj (GradientObj)

import Data.Proxy
import Data.Text (Text)
import Data.Typeable
import Graphics.QML

data Save                  deriving Typeable
data Restore               deriving Typeable
data RenderText            deriving Typeable
data BeginPath             deriving Typeable
data ClosePath             deriving Typeable
data MoveTo                deriving Typeable
data Stroke                deriving Typeable
data Fill                  deriving Typeable
data LineTo                deriving Typeable
data BezierCurveTo         deriving Typeable
data SetLineCap            deriving Typeable
data SetLineJoin           deriving Typeable
data SetLineMiterLimit     deriving Typeable
data SetGlobalAlpha        deriving Typeable
data SetLineWidth          deriving Typeable
data SetStrokeColour       deriving Typeable
data SetFillColour         deriving Typeable
data ConnectLinearGradient deriving Typeable
data ConnectRadialGradient deriving Typeable
data SetLineGradient       deriving Typeable
data SetFillGradient       deriving Typeable
data SetFont               deriving Typeable
data OddEvenFill           deriving Typeable
data WindingFill           deriving Typeable

save :: Proxy Save
save = Proxy

restore :: Proxy Restore
restore = Proxy

renderText :: Proxy RenderText
renderText = Proxy

beginPath :: Proxy BeginPath
beginPath = Proxy

closePath :: Proxy ClosePath
closePath = Proxy

moveTo :: Proxy MoveTo
moveTo = Proxy

stroke :: Proxy Stroke
stroke = Proxy

fill :: Proxy Fill
fill = Proxy

lineTo :: Proxy LineTo
lineTo = Proxy

bezierCurveTo :: Proxy BezierCurveTo
bezierCurveTo = Proxy

setLineCap :: Proxy SetLineCap
setLineCap = Proxy

setLineJoin :: Proxy SetLineJoin
setLineJoin = Proxy

setLineMiterLimit :: Proxy SetLineMiterLimit
setLineMiterLimit = Proxy

setGlobalAlpha :: Proxy SetGlobalAlpha
setGlobalAlpha = Proxy

setLineWidth :: Proxy SetLineWidth
setLineWidth = Proxy

setStrokeColour :: Proxy SetStrokeColour
setStrokeColour = Proxy

setFillColour :: Proxy SetFillColour
setFillColour = Proxy

connectLinearGradient :: Proxy ConnectLinearGradient
connectLinearGradient = Proxy

connectRadialGradient :: Proxy ConnectRadialGradient
connectRadialGradient = Proxy

setLineGradient :: Proxy SetLineGradient
setLineGradient = Proxy

setFillGradient :: Proxy SetFillGradient
setFillGradient = Proxy

setFont :: Proxy SetFont
setFont = Proxy

oddEvenFill :: Proxy OddEvenFill
oddEvenFill = Proxy

windingFill :: Proxy WindingFill
windingFill = Proxy

instance SignalKeyClass Save where
   type SignalParams Save = IO ()

instance SignalKeyClass Restore where
   type SignalParams Restore = IO ()

instance SignalKeyClass RenderText where
  type SignalParams RenderText = Text -> Double -> Double -> IO ()

instance SignalKeyClass BeginPath where
  type SignalParams BeginPath = IO ()

instance SignalKeyClass ClosePath where
  type SignalParams ClosePath = IO ()

instance SignalKeyClass MoveTo where
  type SignalParams MoveTo = Double -> Double -> IO ()

instance SignalKeyClass Stroke where
  type SignalParams Stroke = IO ()

instance SignalKeyClass Fill where
  type SignalParams Fill = IO ()

instance SignalKeyClass LineTo where
  type SignalParams LineTo = Double -> Double -> IO ()

instance SignalKeyClass BezierCurveTo where
  type SignalParams BezierCurveTo = 
    Double -> Double -> Double -> Double -> Double -> Double -> IO ()

instance SignalKeyClass SetLineCap where
  type SignalParams SetLineCap = Text -> IO ()

instance SignalKeyClass SetLineJoin where
  type SignalParams SetLineJoin = Text -> IO ()

instance SignalKeyClass SetLineMiterLimit where
  type SignalParams SetLineMiterLimit = Double -> IO ()

instance SignalKeyClass SetGlobalAlpha where
  type SignalParams SetGlobalAlpha = Double -> IO ()

instance SignalKeyClass SetLineWidth where
  type SignalParams SetLineWidth = Double -> IO ()

instance SignalKeyClass SetStrokeColour where
  type SignalParams SetStrokeColour = Double -> Double -> Double -> Double -> IO ()

instance SignalKeyClass SetFillColour where
  type SignalParams SetFillColour = Double -> Double -> Double -> Double -> IO ()

instance SignalKeyClass ConnectLinearGradient where
  type SignalParams ConnectLinearGradient = 
    ObjRef GradientObj -> Double -> Double -> Double -> Double -> IO () 

instance SignalKeyClass ConnectRadialGradient where
  type SignalParams ConnectRadialGradient = 
    ObjRef GradientObj -> Double -> Double -> Double -> Double -> Double -> Double -> IO () 

instance SignalKeyClass SetLineGradient where
  type SignalParams SetLineGradient = IO ()

instance SignalKeyClass SetFillGradient where
  type SignalParams SetFillGradient = IO ()

instance SignalKeyClass SetFont where
  type SignalParams SetFont = Text -> IO ()

instance SignalKeyClass OddEvenFill where
  type SignalParams OddEvenFill = IO ()

instance SignalKeyClass WindingFill where
  type SignalParams WindingFill = IO ()