{-# OPTIONS -Wall #-}
{-# LANGUAGE DeriveAnyClass #-}

-- | Bindings for types used in all raylib modules
module Raylib.Types.Core
  ( -- * Enumerations
    ConfigFlag (..),
    TraceLogLevel (..),
    KeyboardKey (..),
    MouseButton (..),
    MouseCursor (..),
    GamepadButton (..),
    GamepadAxis (..),
    BlendMode (..),
    Gesture (..),

    -- * Structures
    Vector2 (..),
    Vector3 (..),
    Vector4 (..),
    vectorToColor,
    Matrix (..),
    Color (..),
    Rectangle (..),
    VrDeviceInfo (..),
    VrStereoConfig (..),
    FilePathList (..),
    AutomationEvent (..),
    AutomationEventList (..),
    Quaternion,
    AutomationEventListRef,

    -- * Pointer utilities
    p'vector2'x,
    p'vector2'y,
    p'vector3'x,
    p'vector3'y,
    p'vector3'z,
    p'vector4'x,
    p'vector4'y,
    p'vector4'z,
    p'vector4'w,
    p'matrix'm0,
    p'matrix'm4,
    p'matrix'm8,
    p'matrix'm12,
    p'matrix'm1,
    p'matrix'm5,
    p'matrix'm9,
    p'matrix'm13,
    p'matrix'm2,
    p'matrix'm6,
    p'matrix'm10,
    p'matrix'm14,
    p'matrix'm3,
    p'matrix'm7,
    p'matrix'm11,
    p'matrix'm15,
    p'color'r,
    p'color'g,
    p'color'b,
    p'color'a,
    p'rectangle'x,
    p'rectangle'y,
    p'rectangle'width,
    p'rectangle'height,
    p'vrDeviceInfo'hResolution,
    p'vrDeviceInfo'vResolution,
    p'vrDeviceInfo'hScreenSize,
    p'vrDeviceInfo'vScreenSize,
    p'vrDeviceInfo'eyeToScreenDistance,
    p'vrDeviceInfo'lensSeparationDistance,
    p'vrDeviceInfo'interpupillaryDistance,
    p'vrDeviceInfo'lensDistortionValues,
    p'vrDeviceInfo'chromaAbCorrection,
    p'vrStereoConfig'projection,
    p'vrStereoConfig'viewOffset,
    p'vrStereoConfig'leftLensCenter,
    p'vrStereoConfig'rightLensCenter,
    p'vrStereoConfig'leftScreenCenter,
    p'vrStereoConfig'rightScreenCenter,
    p'vrStereoConfig'scale,
    p'vrStereoConfig'scaleIn,
    p'filePathList'capacity,
    p'filePathList'count,
    p'filePathList'paths,
    p'automationEvent'frame,
    p'automationEvent'type,
    p'automationEvent'params,
    p'automationEventList'capacity,
    p'automationEventList'count,
    p'automationEventList'events,

    -- * Callbacks
    LoadFileDataCallback,
    SaveFileDataCallback,
    LoadFileTextCallback,
    SaveFileTextCallback,
    C'LoadFileDataCallback,
    C'SaveFileDataCallback,
    C'LoadFileTextCallback,
    C'SaveFileTextCallback,
  )
where

import Foreign
  ( FunPtr,
    Ptr,
    Storable (alignment, peek, poke, sizeOf),
    Word8,
    castPtr,
    mallocArray,
    newArray,
    peekArray,
    plusPtr,
    pokeArray,
  )
import Foreign.C
  ( CFloat,
    CInt (..),
    CString,
    CUChar,
    CUInt,
    newCString,
    peekCString,
  )
import Raylib.Internal.Foreign (Freeable (rlFreeDependents), c'free, peekStaticArray, pokeStaticArray)

---------------------------------------
-- core enums -------------------------
---------------------------------------

data ConfigFlag
  = VsyncHint
  | FullscreenMode
  | WindowResizable
  | WindowUndecorated
  | WindowHidden
  | WindowMinimized
  | WindowMaximized
  | WindowUnfocused
  | WindowTopmost
  | WindowAlwaysRun
  | WindowTransparent
  | WindowHighdpi
  | WindowMousePassthrough
  | BorderlessWindowedMode
  | Msaa4xHint
  | InterlacedHint
  deriving (ConfigFlag -> ConfigFlag -> Bool
(ConfigFlag -> ConfigFlag -> Bool)
-> (ConfigFlag -> ConfigFlag -> Bool) -> Eq ConfigFlag
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ConfigFlag -> ConfigFlag -> Bool
== :: ConfigFlag -> ConfigFlag -> Bool
$c/= :: ConfigFlag -> ConfigFlag -> Bool
/= :: ConfigFlag -> ConfigFlag -> Bool
Eq, Int -> ConfigFlag -> ShowS
[ConfigFlag] -> ShowS
ConfigFlag -> String
(Int -> ConfigFlag -> ShowS)
-> (ConfigFlag -> String)
-> ([ConfigFlag] -> ShowS)
-> Show ConfigFlag
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ConfigFlag -> ShowS
showsPrec :: Int -> ConfigFlag -> ShowS
$cshow :: ConfigFlag -> String
show :: ConfigFlag -> String
$cshowList :: [ConfigFlag] -> ShowS
showList :: [ConfigFlag] -> ShowS
Show, ConfigFlag -> Ptr ConfigFlag -> IO ()
(ConfigFlag -> Ptr ConfigFlag -> IO ())
-> (ConfigFlag -> Ptr ConfigFlag -> IO ()) -> Freeable ConfigFlag
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: ConfigFlag -> Ptr ConfigFlag -> IO ()
rlFreeDependents :: ConfigFlag -> Ptr ConfigFlag -> IO ()
$crlFree :: ConfigFlag -> Ptr ConfigFlag -> IO ()
rlFree :: ConfigFlag -> Ptr ConfigFlag -> IO ()
Freeable)

instance Enum ConfigFlag where
  fromEnum :: ConfigFlag -> Int
fromEnum ConfigFlag
g = case ConfigFlag
g of
    ConfigFlag
VsyncHint -> Int
64
    ConfigFlag
FullscreenMode -> Int
2
    ConfigFlag
WindowResizable -> Int
4
    ConfigFlag
WindowUndecorated -> Int
8
    ConfigFlag
WindowHidden -> Int
128
    ConfigFlag
WindowMinimized -> Int
512
    ConfigFlag
WindowMaximized -> Int
1024
    ConfigFlag
WindowUnfocused -> Int
2048
    ConfigFlag
WindowTopmost -> Int
4096
    ConfigFlag
WindowAlwaysRun -> Int
256
    ConfigFlag
WindowTransparent -> Int
16
    ConfigFlag
WindowHighdpi -> Int
8192
    ConfigFlag
WindowMousePassthrough -> Int
16384
    ConfigFlag
BorderlessWindowedMode -> Int
32768
    ConfigFlag
Msaa4xHint -> Int
32
    ConfigFlag
InterlacedHint -> Int
65536
  toEnum :: Int -> ConfigFlag
toEnum Int
x = case Int
x of
    Int
64 -> ConfigFlag
VsyncHint
    Int
2 -> ConfigFlag
FullscreenMode
    Int
4 -> ConfigFlag
WindowResizable
    Int
8 -> ConfigFlag
WindowUndecorated
    Int
128 -> ConfigFlag
WindowHidden
    Int
512 -> ConfigFlag
WindowMinimized
    Int
1024 -> ConfigFlag
WindowMaximized
    Int
2048 -> ConfigFlag
WindowUnfocused
    Int
4096 -> ConfigFlag
WindowTopmost
    Int
256 -> ConfigFlag
WindowAlwaysRun
    Int
16 -> ConfigFlag
WindowTransparent
    Int
8192 -> ConfigFlag
WindowHighdpi
    Int
16384 -> ConfigFlag
WindowMousePassthrough
    Int
32768 -> ConfigFlag
BorderlessWindowedMode
    Int
32 -> ConfigFlag
Msaa4xHint
    Int
65536 -> ConfigFlag
InterlacedHint
    Int
n -> String -> ConfigFlag
forall a. HasCallStack => String -> a
error (String -> ConfigFlag) -> String -> ConfigFlag
forall a b. (a -> b) -> a -> b
$ String
"(ConfigFlag.toEnum) Invalid value: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n

data TraceLogLevel = LogAll | LogTrace | LogDebug | LogInfo | LogWarning | LogError | LogFatal | LogNone
  deriving (TraceLogLevel -> TraceLogLevel -> Bool
(TraceLogLevel -> TraceLogLevel -> Bool)
-> (TraceLogLevel -> TraceLogLevel -> Bool) -> Eq TraceLogLevel
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TraceLogLevel -> TraceLogLevel -> Bool
== :: TraceLogLevel -> TraceLogLevel -> Bool
$c/= :: TraceLogLevel -> TraceLogLevel -> Bool
/= :: TraceLogLevel -> TraceLogLevel -> Bool
Eq, Int -> TraceLogLevel -> ShowS
[TraceLogLevel] -> ShowS
TraceLogLevel -> String
(Int -> TraceLogLevel -> ShowS)
-> (TraceLogLevel -> String)
-> ([TraceLogLevel] -> ShowS)
-> Show TraceLogLevel
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TraceLogLevel -> ShowS
showsPrec :: Int -> TraceLogLevel -> ShowS
$cshow :: TraceLogLevel -> String
show :: TraceLogLevel -> String
$cshowList :: [TraceLogLevel] -> ShowS
showList :: [TraceLogLevel] -> ShowS
Show, Int -> TraceLogLevel
TraceLogLevel -> Int
TraceLogLevel -> [TraceLogLevel]
TraceLogLevel -> TraceLogLevel
TraceLogLevel -> TraceLogLevel -> [TraceLogLevel]
TraceLogLevel -> TraceLogLevel -> TraceLogLevel -> [TraceLogLevel]
(TraceLogLevel -> TraceLogLevel)
-> (TraceLogLevel -> TraceLogLevel)
-> (Int -> TraceLogLevel)
-> (TraceLogLevel -> Int)
-> (TraceLogLevel -> [TraceLogLevel])
-> (TraceLogLevel -> TraceLogLevel -> [TraceLogLevel])
-> (TraceLogLevel -> TraceLogLevel -> [TraceLogLevel])
-> (TraceLogLevel
    -> TraceLogLevel -> TraceLogLevel -> [TraceLogLevel])
-> Enum TraceLogLevel
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: TraceLogLevel -> TraceLogLevel
succ :: TraceLogLevel -> TraceLogLevel
$cpred :: TraceLogLevel -> TraceLogLevel
pred :: TraceLogLevel -> TraceLogLevel
$ctoEnum :: Int -> TraceLogLevel
toEnum :: Int -> TraceLogLevel
$cfromEnum :: TraceLogLevel -> Int
fromEnum :: TraceLogLevel -> Int
$cenumFrom :: TraceLogLevel -> [TraceLogLevel]
enumFrom :: TraceLogLevel -> [TraceLogLevel]
$cenumFromThen :: TraceLogLevel -> TraceLogLevel -> [TraceLogLevel]
enumFromThen :: TraceLogLevel -> TraceLogLevel -> [TraceLogLevel]
$cenumFromTo :: TraceLogLevel -> TraceLogLevel -> [TraceLogLevel]
enumFromTo :: TraceLogLevel -> TraceLogLevel -> [TraceLogLevel]
$cenumFromThenTo :: TraceLogLevel -> TraceLogLevel -> TraceLogLevel -> [TraceLogLevel]
enumFromThenTo :: TraceLogLevel -> TraceLogLevel -> TraceLogLevel -> [TraceLogLevel]
Enum)

data KeyboardKey
  = KeyNull
  | KeyApostrophe
  | KeyComma
  | KeyMinus
  | KeyPeriod
  | KeySlash
  | KeyZero
  | KeyOne
  | KeyTwo
  | KeyThree
  | KeyFour
  | KeyFive
  | KeySix
  | KeySeven
  | KeyEight
  | KeyNine
  | KeySemicolon
  | KeyEqual
  | KeyA
  | KeyB
  | KeyC
  | KeyD
  | KeyE
  | KeyF
  | KeyG
  | KeyH
  | KeyI
  | KeyJ
  | KeyK
  | KeyL
  | KeyM
  | KeyN
  | KeyO
  | KeyP
  | KeyQ
  | KeyR
  | KeyS
  | KeyT
  | KeyU
  | KeyV
  | KeyW
  | KeyX
  | KeyY
  | KeyZ
  | KeyLeftBracket
  | KeyBackslash
  | KeyRightBracket
  | KeyGrave
  | KeySpace
  | KeyEscape
  | KeyEnter
  | KeyTab
  | KeyBackspace
  | KeyInsert
  | KeyDelete
  | KeyRight
  | KeyLeft
  | KeyDown
  | KeyUp
  | KeyPageUp
  | KeyPageDown
  | KeyHome
  | KeyEnd
  | KeyCapsLock
  | KeyScrollLock
  | KeyNumLock
  | KeyPrintScreen
  | KeyPause
  | KeyF1
  | KeyF2
  | KeyF3
  | KeyF4
  | KeyF5
  | KeyF6
  | KeyF7
  | KeyF8
  | KeyF9
  | KeyF10
  | KeyF11
  | KeyF12
  | KeyLeftShift
  | KeyLeftControl
  | KeyLeftAlt
  | KeyLeftSuper
  | KeyRightShift
  | KeyRightControl
  | KeyRightAlt
  | KeyRightSuper
  | KeyKbMenu
  | KeyKp0
  | KeyKp1
  | KeyKp2
  | KeyKp3
  | KeyKp4
  | KeyKp5
  | KeyKp6
  | KeyKp7
  | KeyKp8
  | KeyKp9
  | KeyKpDecimal
  | KeyKpDivide
  | KeyKpMultiply
  | KeyKpSubtract
  | KeyKpAdd
  | KeyKpEnter
  | KeyKpEqual
  | KeyBack
  | KeyMenu
  | KeyVolumeUp
  | KeyVolumeDown
  deriving (KeyboardKey -> KeyboardKey -> Bool
(KeyboardKey -> KeyboardKey -> Bool)
-> (KeyboardKey -> KeyboardKey -> Bool) -> Eq KeyboardKey
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: KeyboardKey -> KeyboardKey -> Bool
== :: KeyboardKey -> KeyboardKey -> Bool
$c/= :: KeyboardKey -> KeyboardKey -> Bool
/= :: KeyboardKey -> KeyboardKey -> Bool
Eq, Int -> KeyboardKey -> ShowS
[KeyboardKey] -> ShowS
KeyboardKey -> String
(Int -> KeyboardKey -> ShowS)
-> (KeyboardKey -> String)
-> ([KeyboardKey] -> ShowS)
-> Show KeyboardKey
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> KeyboardKey -> ShowS
showsPrec :: Int -> KeyboardKey -> ShowS
$cshow :: KeyboardKey -> String
show :: KeyboardKey -> String
$cshowList :: [KeyboardKey] -> ShowS
showList :: [KeyboardKey] -> ShowS
Show)

instance Enum KeyboardKey where
  fromEnum :: KeyboardKey -> Int
fromEnum KeyboardKey
k = case KeyboardKey
k of
    KeyboardKey
KeyNull -> Int
0
    KeyboardKey
KeyApostrophe -> Int
39
    KeyboardKey
KeyComma -> Int
44
    KeyboardKey
KeyMinus -> Int
45
    KeyboardKey
KeyPeriod -> Int
46
    KeyboardKey
KeySlash -> Int
47
    KeyboardKey
KeyZero -> Int
48
    KeyboardKey
KeyOne -> Int
49
    KeyboardKey
KeyTwo -> Int
50
    KeyboardKey
KeyThree -> Int
51
    KeyboardKey
KeyFour -> Int
52
    KeyboardKey
KeyFive -> Int
53
    KeyboardKey
KeySix -> Int
54
    KeyboardKey
KeySeven -> Int
55
    KeyboardKey
KeyEight -> Int
56
    KeyboardKey
KeyNine -> Int
57
    KeyboardKey
KeySemicolon -> Int
59
    KeyboardKey
KeyEqual -> Int
61
    KeyboardKey
KeyA -> Int
65
    KeyboardKey
KeyB -> Int
66
    KeyboardKey
KeyC -> Int
67
    KeyboardKey
KeyD -> Int
68
    KeyboardKey
KeyE -> Int
69
    KeyboardKey
KeyF -> Int
70
    KeyboardKey
KeyG -> Int
71
    KeyboardKey
KeyH -> Int
72
    KeyboardKey
KeyI -> Int
73
    KeyboardKey
KeyJ -> Int
74
    KeyboardKey
KeyK -> Int
75
    KeyboardKey
KeyL -> Int
76
    KeyboardKey
KeyM -> Int
77
    KeyboardKey
KeyN -> Int
78
    KeyboardKey
KeyO -> Int
79
    KeyboardKey
KeyP -> Int
80
    KeyboardKey
KeyQ -> Int
81
    KeyboardKey
KeyR -> Int
82
    KeyboardKey
KeyS -> Int
83
    KeyboardKey
KeyT -> Int
84
    KeyboardKey
KeyU -> Int
85
    KeyboardKey
KeyV -> Int
86
    KeyboardKey
KeyW -> Int
87
    KeyboardKey
KeyX -> Int
88
    KeyboardKey
KeyY -> Int
89
    KeyboardKey
KeyZ -> Int
90
    KeyboardKey
KeyLeftBracket -> Int
91
    KeyboardKey
KeyBackslash -> Int
92
    KeyboardKey
KeyRightBracket -> Int
93
    KeyboardKey
KeyGrave -> Int
96
    KeyboardKey
KeySpace -> Int
32
    KeyboardKey
KeyEscape -> Int
256
    KeyboardKey
KeyEnter -> Int
257
    KeyboardKey
KeyTab -> Int
258
    KeyboardKey
KeyBackspace -> Int
259
    KeyboardKey
KeyInsert -> Int
260
    KeyboardKey
KeyDelete -> Int
261
    KeyboardKey
KeyRight -> Int
262
    KeyboardKey
KeyLeft -> Int
263
    KeyboardKey
KeyDown -> Int
264
    KeyboardKey
KeyUp -> Int
265
    KeyboardKey
KeyPageUp -> Int
266
    KeyboardKey
KeyPageDown -> Int
267
    KeyboardKey
KeyHome -> Int
268
    KeyboardKey
KeyEnd -> Int
269
    KeyboardKey
KeyCapsLock -> Int
280
    KeyboardKey
KeyScrollLock -> Int
281
    KeyboardKey
KeyNumLock -> Int
282
    KeyboardKey
KeyPrintScreen -> Int
283
    KeyboardKey
KeyPause -> Int
284
    KeyboardKey
KeyF1 -> Int
290
    KeyboardKey
KeyF2 -> Int
291
    KeyboardKey
KeyF3 -> Int
292
    KeyboardKey
KeyF4 -> Int
293
    KeyboardKey
KeyF5 -> Int
294
    KeyboardKey
KeyF6 -> Int
295
    KeyboardKey
KeyF7 -> Int
296
    KeyboardKey
KeyF8 -> Int
297
    KeyboardKey
KeyF9 -> Int
298
    KeyboardKey
KeyF10 -> Int
299
    KeyboardKey
KeyF11 -> Int
300
    KeyboardKey
KeyF12 -> Int
301
    KeyboardKey
KeyLeftShift -> Int
340
    KeyboardKey
KeyLeftControl -> Int
341
    KeyboardKey
KeyLeftAlt -> Int
342
    KeyboardKey
KeyLeftSuper -> Int
343
    KeyboardKey
KeyRightShift -> Int
344
    KeyboardKey
KeyRightControl -> Int
345
    KeyboardKey
KeyRightAlt -> Int
346
    KeyboardKey
KeyRightSuper -> Int
347
    KeyboardKey
KeyKbMenu -> Int
348
    KeyboardKey
KeyKp0 -> Int
320
    KeyboardKey
KeyKp1 -> Int
321
    KeyboardKey
KeyKp2 -> Int
322
    KeyboardKey
KeyKp3 -> Int
323
    KeyboardKey
KeyKp4 -> Int
324
    KeyboardKey
KeyKp5 -> Int
325
    KeyboardKey
KeyKp6 -> Int
326
    KeyboardKey
KeyKp7 -> Int
327
    KeyboardKey
KeyKp8 -> Int
328
    KeyboardKey
KeyKp9 -> Int
329
    KeyboardKey
KeyKpDecimal -> Int
330
    KeyboardKey
KeyKpDivide -> Int
331
    KeyboardKey
KeyKpMultiply -> Int
332
    KeyboardKey
KeyKpSubtract -> Int
333
    KeyboardKey
KeyKpAdd -> Int
334
    KeyboardKey
KeyKpEnter -> Int
335
    KeyboardKey
KeyKpEqual -> Int
336
    -- Android buttons
    KeyboardKey
KeyBack -> Int
4
    KeyboardKey
KeyMenu -> Int
5
    KeyboardKey
KeyVolumeUp -> Int
24
    KeyboardKey
KeyVolumeDown -> Int
25

  toEnum :: Int -> KeyboardKey
toEnum Int
n = case Int
n of
    Int
0 -> KeyboardKey
KeyNull
    Int
39 -> KeyboardKey
KeyApostrophe
    Int
44 -> KeyboardKey
KeyComma
    Int
45 -> KeyboardKey
KeyMinus
    Int
46 -> KeyboardKey
KeyPeriod
    Int
47 -> KeyboardKey
KeySlash
    Int
48 -> KeyboardKey
KeyZero
    Int
49 -> KeyboardKey
KeyOne
    Int
50 -> KeyboardKey
KeyTwo
    Int
51 -> KeyboardKey
KeyThree
    Int
52 -> KeyboardKey
KeyFour
    Int
53 -> KeyboardKey
KeyFive
    Int
54 -> KeyboardKey
KeySix
    Int
55 -> KeyboardKey
KeySeven
    Int
56 -> KeyboardKey
KeyEight
    Int
57 -> KeyboardKey
KeyNine
    Int
59 -> KeyboardKey
KeySemicolon
    Int
61 -> KeyboardKey
KeyEqual
    Int
65 -> KeyboardKey
KeyA
    Int
66 -> KeyboardKey
KeyB
    Int
67 -> KeyboardKey
KeyC
    Int
68 -> KeyboardKey
KeyD
    Int
69 -> KeyboardKey
KeyE
    Int
70 -> KeyboardKey
KeyF
    Int
71 -> KeyboardKey
KeyG
    Int
72 -> KeyboardKey
KeyH
    Int
73 -> KeyboardKey
KeyI
    Int
74 -> KeyboardKey
KeyJ
    Int
75 -> KeyboardKey
KeyK
    Int
76 -> KeyboardKey
KeyL
    Int
77 -> KeyboardKey
KeyM
    Int
78 -> KeyboardKey
KeyN
    Int
79 -> KeyboardKey
KeyO
    Int
80 -> KeyboardKey
KeyP
    Int
81 -> KeyboardKey
KeyQ
    Int
82 -> KeyboardKey
KeyR
    Int
83 -> KeyboardKey
KeyS
    Int
84 -> KeyboardKey
KeyT
    Int
85 -> KeyboardKey
KeyU
    Int
86 -> KeyboardKey
KeyV
    Int
87 -> KeyboardKey
KeyW
    Int
88 -> KeyboardKey
KeyX
    Int
89 -> KeyboardKey
KeyY
    Int
90 -> KeyboardKey
KeyZ
    Int
91 -> KeyboardKey
KeyLeftBracket
    Int
92 -> KeyboardKey
KeyBackslash
    Int
93 -> KeyboardKey
KeyRightBracket
    Int
96 -> KeyboardKey
KeyGrave
    Int
32 -> KeyboardKey
KeySpace
    Int
256 -> KeyboardKey
KeyEscape
    Int
257 -> KeyboardKey
KeyEnter
    Int
258 -> KeyboardKey
KeyTab
    Int
259 -> KeyboardKey
KeyBackspace
    Int
260 -> KeyboardKey
KeyInsert
    Int
261 -> KeyboardKey
KeyDelete
    Int
262 -> KeyboardKey
KeyRight
    Int
263 -> KeyboardKey
KeyLeft
    Int
264 -> KeyboardKey
KeyDown
    Int
265 -> KeyboardKey
KeyUp
    Int
266 -> KeyboardKey
KeyPageUp
    Int
267 -> KeyboardKey
KeyPageDown
    Int
268 -> KeyboardKey
KeyHome
    Int
269 -> KeyboardKey
KeyEnd
    Int
280 -> KeyboardKey
KeyCapsLock
    Int
281 -> KeyboardKey
KeyScrollLock
    Int
282 -> KeyboardKey
KeyNumLock
    Int
283 -> KeyboardKey
KeyPrintScreen
    Int
284 -> KeyboardKey
KeyPause
    Int
290 -> KeyboardKey
KeyF1
    Int
291 -> KeyboardKey
KeyF2
    Int
292 -> KeyboardKey
KeyF3
    Int
293 -> KeyboardKey
KeyF4
    Int
294 -> KeyboardKey
KeyF5
    Int
295 -> KeyboardKey
KeyF6
    Int
296 -> KeyboardKey
KeyF7
    Int
297 -> KeyboardKey
KeyF8
    Int
298 -> KeyboardKey
KeyF9
    Int
299 -> KeyboardKey
KeyF10
    Int
300 -> KeyboardKey
KeyF11
    Int
301 -> KeyboardKey
KeyF12
    Int
340 -> KeyboardKey
KeyLeftShift
    Int
341 -> KeyboardKey
KeyLeftControl
    Int
342 -> KeyboardKey
KeyLeftAlt
    Int
343 -> KeyboardKey
KeyLeftSuper
    Int
344 -> KeyboardKey
KeyRightShift
    Int
345 -> KeyboardKey
KeyRightControl
    Int
346 -> KeyboardKey
KeyRightAlt
    Int
347 -> KeyboardKey
KeyRightSuper
    Int
348 -> KeyboardKey
KeyKbMenu
    Int
320 -> KeyboardKey
KeyKp0
    Int
321 -> KeyboardKey
KeyKp1
    Int
322 -> KeyboardKey
KeyKp2
    Int
323 -> KeyboardKey
KeyKp3
    Int
324 -> KeyboardKey
KeyKp4
    Int
325 -> KeyboardKey
KeyKp5
    Int
326 -> KeyboardKey
KeyKp6
    Int
327 -> KeyboardKey
KeyKp7
    Int
328 -> KeyboardKey
KeyKp8
    Int
329 -> KeyboardKey
KeyKp9
    Int
330 -> KeyboardKey
KeyKpDecimal
    Int
331 -> KeyboardKey
KeyKpDivide
    Int
332 -> KeyboardKey
KeyKpMultiply
    Int
333 -> KeyboardKey
KeyKpSubtract
    Int
334 -> KeyboardKey
KeyKpAdd
    Int
335 -> KeyboardKey
KeyKpEnter
    Int
336 -> KeyboardKey
KeyKpEqual
    -- Android buttons
    Int
4 -> KeyboardKey
KeyBack
    Int
5 -> KeyboardKey
KeyMenu
    Int
24 -> KeyboardKey
KeyVolumeUp
    Int
25 -> KeyboardKey
KeyVolumeDown
    Int
x -> String -> KeyboardKey
forall a. HasCallStack => String -> a
error (String -> KeyboardKey) -> String -> KeyboardKey
forall a b. (a -> b) -> a -> b
$ String
"(KeyboardKey.toEnum) Invalid value: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
x

data MouseButton
  = MouseButtonLeft
  | MouseButtonRight
  | MouseButtonMiddle
  | MouseButtonSide
  | MouseButtonExtra
  | MouseButtonForward
  | MouseButtonBack
  deriving (MouseButton -> MouseButton -> Bool
(MouseButton -> MouseButton -> Bool)
-> (MouseButton -> MouseButton -> Bool) -> Eq MouseButton
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MouseButton -> MouseButton -> Bool
== :: MouseButton -> MouseButton -> Bool
$c/= :: MouseButton -> MouseButton -> Bool
/= :: MouseButton -> MouseButton -> Bool
Eq, Int -> MouseButton -> ShowS
[MouseButton] -> ShowS
MouseButton -> String
(Int -> MouseButton -> ShowS)
-> (MouseButton -> String)
-> ([MouseButton] -> ShowS)
-> Show MouseButton
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MouseButton -> ShowS
showsPrec :: Int -> MouseButton -> ShowS
$cshow :: MouseButton -> String
show :: MouseButton -> String
$cshowList :: [MouseButton] -> ShowS
showList :: [MouseButton] -> ShowS
Show, Int -> MouseButton
MouseButton -> Int
MouseButton -> [MouseButton]
MouseButton -> MouseButton
MouseButton -> MouseButton -> [MouseButton]
MouseButton -> MouseButton -> MouseButton -> [MouseButton]
(MouseButton -> MouseButton)
-> (MouseButton -> MouseButton)
-> (Int -> MouseButton)
-> (MouseButton -> Int)
-> (MouseButton -> [MouseButton])
-> (MouseButton -> MouseButton -> [MouseButton])
-> (MouseButton -> MouseButton -> [MouseButton])
-> (MouseButton -> MouseButton -> MouseButton -> [MouseButton])
-> Enum MouseButton
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: MouseButton -> MouseButton
succ :: MouseButton -> MouseButton
$cpred :: MouseButton -> MouseButton
pred :: MouseButton -> MouseButton
$ctoEnum :: Int -> MouseButton
toEnum :: Int -> MouseButton
$cfromEnum :: MouseButton -> Int
fromEnum :: MouseButton -> Int
$cenumFrom :: MouseButton -> [MouseButton]
enumFrom :: MouseButton -> [MouseButton]
$cenumFromThen :: MouseButton -> MouseButton -> [MouseButton]
enumFromThen :: MouseButton -> MouseButton -> [MouseButton]
$cenumFromTo :: MouseButton -> MouseButton -> [MouseButton]
enumFromTo :: MouseButton -> MouseButton -> [MouseButton]
$cenumFromThenTo :: MouseButton -> MouseButton -> MouseButton -> [MouseButton]
enumFromThenTo :: MouseButton -> MouseButton -> MouseButton -> [MouseButton]
Enum, MouseButton
MouseButton -> MouseButton -> Bounded MouseButton
forall a. a -> a -> Bounded a
$cminBound :: MouseButton
minBound :: MouseButton
$cmaxBound :: MouseButton
maxBound :: MouseButton
Bounded)

data MouseCursor
  = MouseCursorDefault
  | MouseCursorArrow
  | MouseCursorIbeam
  | MouseCursorCrosshair
  | MouseCursorPointingHand
  | MouseCursorResizeEW
  | MouseCursorResizeNS
  | MouseCursorResizeNWSE
  | MouseCursorResizeNESW
  | MouseCursorResizeAll
  | MouseCursorNotAllowed
  deriving (MouseCursor -> MouseCursor -> Bool
(MouseCursor -> MouseCursor -> Bool)
-> (MouseCursor -> MouseCursor -> Bool) -> Eq MouseCursor
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MouseCursor -> MouseCursor -> Bool
== :: MouseCursor -> MouseCursor -> Bool
$c/= :: MouseCursor -> MouseCursor -> Bool
/= :: MouseCursor -> MouseCursor -> Bool
Eq, Int -> MouseCursor -> ShowS
[MouseCursor] -> ShowS
MouseCursor -> String
(Int -> MouseCursor -> ShowS)
-> (MouseCursor -> String)
-> ([MouseCursor] -> ShowS)
-> Show MouseCursor
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MouseCursor -> ShowS
showsPrec :: Int -> MouseCursor -> ShowS
$cshow :: MouseCursor -> String
show :: MouseCursor -> String
$cshowList :: [MouseCursor] -> ShowS
showList :: [MouseCursor] -> ShowS
Show, Int -> MouseCursor
MouseCursor -> Int
MouseCursor -> [MouseCursor]
MouseCursor -> MouseCursor
MouseCursor -> MouseCursor -> [MouseCursor]
MouseCursor -> MouseCursor -> MouseCursor -> [MouseCursor]
(MouseCursor -> MouseCursor)
-> (MouseCursor -> MouseCursor)
-> (Int -> MouseCursor)
-> (MouseCursor -> Int)
-> (MouseCursor -> [MouseCursor])
-> (MouseCursor -> MouseCursor -> [MouseCursor])
-> (MouseCursor -> MouseCursor -> [MouseCursor])
-> (MouseCursor -> MouseCursor -> MouseCursor -> [MouseCursor])
-> Enum MouseCursor
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: MouseCursor -> MouseCursor
succ :: MouseCursor -> MouseCursor
$cpred :: MouseCursor -> MouseCursor
pred :: MouseCursor -> MouseCursor
$ctoEnum :: Int -> MouseCursor
toEnum :: Int -> MouseCursor
$cfromEnum :: MouseCursor -> Int
fromEnum :: MouseCursor -> Int
$cenumFrom :: MouseCursor -> [MouseCursor]
enumFrom :: MouseCursor -> [MouseCursor]
$cenumFromThen :: MouseCursor -> MouseCursor -> [MouseCursor]
enumFromThen :: MouseCursor -> MouseCursor -> [MouseCursor]
$cenumFromTo :: MouseCursor -> MouseCursor -> [MouseCursor]
enumFromTo :: MouseCursor -> MouseCursor -> [MouseCursor]
$cenumFromThenTo :: MouseCursor -> MouseCursor -> MouseCursor -> [MouseCursor]
enumFromThenTo :: MouseCursor -> MouseCursor -> MouseCursor -> [MouseCursor]
Enum, MouseCursor
MouseCursor -> MouseCursor -> Bounded MouseCursor
forall a. a -> a -> Bounded a
$cminBound :: MouseCursor
minBound :: MouseCursor
$cmaxBound :: MouseCursor
maxBound :: MouseCursor
Bounded)

data GamepadButton
  = GamepadButtonUnknown
  | GamepadButtonUnknownLeftFaceUp
  | GamepadButtonLeftFaceRight
  | GamepadButtonLeftFaceDown
  | GamepadButtonLeftFaceLeft
  | GamepadButtonRightFaceUp
  | GamepadButtonRightFaceRight
  | GamepadButtonRightFaceDown
  | GamepadButtonRightFaceLeft
  | GamepadButtonLeftTrigger1
  | GamepadButtonLeftTrigger2
  | GamepadButtonRightTrigger1
  | GamepadButtonRightTrigger2
  | GamepadButtonMiddleLeft
  | GamepadButtonMiddle
  | GamepadButtonMiddleRight
  | GamepadButtonLeftThumb
  | GamepadButtonRightThumb
  deriving (GamepadButton -> GamepadButton -> Bool
(GamepadButton -> GamepadButton -> Bool)
-> (GamepadButton -> GamepadButton -> Bool) -> Eq GamepadButton
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GamepadButton -> GamepadButton -> Bool
== :: GamepadButton -> GamepadButton -> Bool
$c/= :: GamepadButton -> GamepadButton -> Bool
/= :: GamepadButton -> GamepadButton -> Bool
Eq, Int -> GamepadButton -> ShowS
[GamepadButton] -> ShowS
GamepadButton -> String
(Int -> GamepadButton -> ShowS)
-> (GamepadButton -> String)
-> ([GamepadButton] -> ShowS)
-> Show GamepadButton
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GamepadButton -> ShowS
showsPrec :: Int -> GamepadButton -> ShowS
$cshow :: GamepadButton -> String
show :: GamepadButton -> String
$cshowList :: [GamepadButton] -> ShowS
showList :: [GamepadButton] -> ShowS
Show, Int -> GamepadButton
GamepadButton -> Int
GamepadButton -> [GamepadButton]
GamepadButton -> GamepadButton
GamepadButton -> GamepadButton -> [GamepadButton]
GamepadButton -> GamepadButton -> GamepadButton -> [GamepadButton]
(GamepadButton -> GamepadButton)
-> (GamepadButton -> GamepadButton)
-> (Int -> GamepadButton)
-> (GamepadButton -> Int)
-> (GamepadButton -> [GamepadButton])
-> (GamepadButton -> GamepadButton -> [GamepadButton])
-> (GamepadButton -> GamepadButton -> [GamepadButton])
-> (GamepadButton
    -> GamepadButton -> GamepadButton -> [GamepadButton])
-> Enum GamepadButton
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: GamepadButton -> GamepadButton
succ :: GamepadButton -> GamepadButton
$cpred :: GamepadButton -> GamepadButton
pred :: GamepadButton -> GamepadButton
$ctoEnum :: Int -> GamepadButton
toEnum :: Int -> GamepadButton
$cfromEnum :: GamepadButton -> Int
fromEnum :: GamepadButton -> Int
$cenumFrom :: GamepadButton -> [GamepadButton]
enumFrom :: GamepadButton -> [GamepadButton]
$cenumFromThen :: GamepadButton -> GamepadButton -> [GamepadButton]
enumFromThen :: GamepadButton -> GamepadButton -> [GamepadButton]
$cenumFromTo :: GamepadButton -> GamepadButton -> [GamepadButton]
enumFromTo :: GamepadButton -> GamepadButton -> [GamepadButton]
$cenumFromThenTo :: GamepadButton -> GamepadButton -> GamepadButton -> [GamepadButton]
enumFromThenTo :: GamepadButton -> GamepadButton -> GamepadButton -> [GamepadButton]
Enum, GamepadButton
GamepadButton -> GamepadButton -> Bounded GamepadButton
forall a. a -> a -> Bounded a
$cminBound :: GamepadButton
minBound :: GamepadButton
$cmaxBound :: GamepadButton
maxBound :: GamepadButton
Bounded)

data GamepadAxis
  = GamepadAxisLeftX
  | GamepadAxisLeftY
  | GamepadAxisRightX
  | GamepadAxisRightY
  | GamepadAxisLeftTrigger
  | GamepadAxisRightTrigger
  deriving (GamepadAxis -> GamepadAxis -> Bool
(GamepadAxis -> GamepadAxis -> Bool)
-> (GamepadAxis -> GamepadAxis -> Bool) -> Eq GamepadAxis
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GamepadAxis -> GamepadAxis -> Bool
== :: GamepadAxis -> GamepadAxis -> Bool
$c/= :: GamepadAxis -> GamepadAxis -> Bool
/= :: GamepadAxis -> GamepadAxis -> Bool
Eq, Int -> GamepadAxis -> ShowS
[GamepadAxis] -> ShowS
GamepadAxis -> String
(Int -> GamepadAxis -> ShowS)
-> (GamepadAxis -> String)
-> ([GamepadAxis] -> ShowS)
-> Show GamepadAxis
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GamepadAxis -> ShowS
showsPrec :: Int -> GamepadAxis -> ShowS
$cshow :: GamepadAxis -> String
show :: GamepadAxis -> String
$cshowList :: [GamepadAxis] -> ShowS
showList :: [GamepadAxis] -> ShowS
Show, Int -> GamepadAxis
GamepadAxis -> Int
GamepadAxis -> [GamepadAxis]
GamepadAxis -> GamepadAxis
GamepadAxis -> GamepadAxis -> [GamepadAxis]
GamepadAxis -> GamepadAxis -> GamepadAxis -> [GamepadAxis]
(GamepadAxis -> GamepadAxis)
-> (GamepadAxis -> GamepadAxis)
-> (Int -> GamepadAxis)
-> (GamepadAxis -> Int)
-> (GamepadAxis -> [GamepadAxis])
-> (GamepadAxis -> GamepadAxis -> [GamepadAxis])
-> (GamepadAxis -> GamepadAxis -> [GamepadAxis])
-> (GamepadAxis -> GamepadAxis -> GamepadAxis -> [GamepadAxis])
-> Enum GamepadAxis
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: GamepadAxis -> GamepadAxis
succ :: GamepadAxis -> GamepadAxis
$cpred :: GamepadAxis -> GamepadAxis
pred :: GamepadAxis -> GamepadAxis
$ctoEnum :: Int -> GamepadAxis
toEnum :: Int -> GamepadAxis
$cfromEnum :: GamepadAxis -> Int
fromEnum :: GamepadAxis -> Int
$cenumFrom :: GamepadAxis -> [GamepadAxis]
enumFrom :: GamepadAxis -> [GamepadAxis]
$cenumFromThen :: GamepadAxis -> GamepadAxis -> [GamepadAxis]
enumFromThen :: GamepadAxis -> GamepadAxis -> [GamepadAxis]
$cenumFromTo :: GamepadAxis -> GamepadAxis -> [GamepadAxis]
enumFromTo :: GamepadAxis -> GamepadAxis -> [GamepadAxis]
$cenumFromThenTo :: GamepadAxis -> GamepadAxis -> GamepadAxis -> [GamepadAxis]
enumFromThenTo :: GamepadAxis -> GamepadAxis -> GamepadAxis -> [GamepadAxis]
Enum, GamepadAxis
GamepadAxis -> GamepadAxis -> Bounded GamepadAxis
forall a. a -> a -> Bounded a
$cminBound :: GamepadAxis
minBound :: GamepadAxis
$cmaxBound :: GamepadAxis
maxBound :: GamepadAxis
Bounded)

data BlendMode
  = BlendAlpha
  | BlendAdditive
  | BlendMultiplied
  | BlendAddColors
  | BlendSubtractColors
  | BlendAlphaPremultiply
  | BlendCustom
  | BlendCustomSeparate
  deriving (Int -> BlendMode
BlendMode -> Int
BlendMode -> [BlendMode]
BlendMode -> BlendMode
BlendMode -> BlendMode -> [BlendMode]
BlendMode -> BlendMode -> BlendMode -> [BlendMode]
(BlendMode -> BlendMode)
-> (BlendMode -> BlendMode)
-> (Int -> BlendMode)
-> (BlendMode -> Int)
-> (BlendMode -> [BlendMode])
-> (BlendMode -> BlendMode -> [BlendMode])
-> (BlendMode -> BlendMode -> [BlendMode])
-> (BlendMode -> BlendMode -> BlendMode -> [BlendMode])
-> Enum BlendMode
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: BlendMode -> BlendMode
succ :: BlendMode -> BlendMode
$cpred :: BlendMode -> BlendMode
pred :: BlendMode -> BlendMode
$ctoEnum :: Int -> BlendMode
toEnum :: Int -> BlendMode
$cfromEnum :: BlendMode -> Int
fromEnum :: BlendMode -> Int
$cenumFrom :: BlendMode -> [BlendMode]
enumFrom :: BlendMode -> [BlendMode]
$cenumFromThen :: BlendMode -> BlendMode -> [BlendMode]
enumFromThen :: BlendMode -> BlendMode -> [BlendMode]
$cenumFromTo :: BlendMode -> BlendMode -> [BlendMode]
enumFromTo :: BlendMode -> BlendMode -> [BlendMode]
$cenumFromThenTo :: BlendMode -> BlendMode -> BlendMode -> [BlendMode]
enumFromThenTo :: BlendMode -> BlendMode -> BlendMode -> [BlendMode]
Enum)

data Gesture
  = GestureNone
  | GestureTap
  | GestureDoubleTap
  | GestureHold
  | GestureDrag
  | GestureSwipeRight
  | GestureSwipeLeft
  | GestureSwipeUp
  | GestureSwipeDown
  | GesturePinchIn
  | GesturePinchOut
  deriving (Int -> Gesture -> ShowS
[Gesture] -> ShowS
Gesture -> String
(Int -> Gesture -> ShowS)
-> (Gesture -> String) -> ([Gesture] -> ShowS) -> Show Gesture
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Gesture -> ShowS
showsPrec :: Int -> Gesture -> ShowS
$cshow :: Gesture -> String
show :: Gesture -> String
$cshowList :: [Gesture] -> ShowS
showList :: [Gesture] -> ShowS
Show, Gesture -> Gesture -> Bool
(Gesture -> Gesture -> Bool)
-> (Gesture -> Gesture -> Bool) -> Eq Gesture
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Gesture -> Gesture -> Bool
== :: Gesture -> Gesture -> Bool
$c/= :: Gesture -> Gesture -> Bool
/= :: Gesture -> Gesture -> Bool
Eq)

instance Enum Gesture where
  fromEnum :: Gesture -> Int
fromEnum Gesture
n = case Gesture
n of
    Gesture
GestureNone -> Int
0
    Gesture
GestureTap -> Int
1
    Gesture
GestureDoubleTap -> Int
2
    Gesture
GestureHold -> Int
4
    Gesture
GestureDrag -> Int
8
    Gesture
GestureSwipeRight -> Int
16
    Gesture
GestureSwipeLeft -> Int
32
    Gesture
GestureSwipeUp -> Int
64
    Gesture
GestureSwipeDown -> Int
128
    Gesture
GesturePinchIn -> Int
256
    Gesture
GesturePinchOut -> Int
512
  toEnum :: Int -> Gesture
toEnum Int
n = case Int
n of
    Int
0 -> Gesture
GestureNone
    Int
1 -> Gesture
GestureTap
    Int
2 -> Gesture
GestureDoubleTap
    Int
4 -> Gesture
GestureHold
    Int
8 -> Gesture
GestureDrag
    Int
16 -> Gesture
GestureSwipeRight
    Int
32 -> Gesture
GestureSwipeLeft
    Int
64 -> Gesture
GestureSwipeUp
    Int
128 -> Gesture
GestureSwipeDown
    Int
256 -> Gesture
GesturePinchIn
    Int
512 -> Gesture
GesturePinchOut
    Int
_ -> String -> Gesture
forall a. HasCallStack => String -> a
error (String -> Gesture) -> String -> Gesture
forall a b. (a -> b) -> a -> b
$ String
"(Gesture.toEnum) Invalid value: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n

---------------------------------------
-- core structures --------------------
---------------------------------------

data Vector2 = Vector2
  { Vector2 -> Float
vector2'x :: Float,
    Vector2 -> Float
vector2'y :: Float
  }
  deriving (Vector2 -> Vector2 -> Bool
(Vector2 -> Vector2 -> Bool)
-> (Vector2 -> Vector2 -> Bool) -> Eq Vector2
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Vector2 -> Vector2 -> Bool
== :: Vector2 -> Vector2 -> Bool
$c/= :: Vector2 -> Vector2 -> Bool
/= :: Vector2 -> Vector2 -> Bool
Eq, Int -> Vector2 -> ShowS
[Vector2] -> ShowS
Vector2 -> String
(Int -> Vector2 -> ShowS)
-> (Vector2 -> String) -> ([Vector2] -> ShowS) -> Show Vector2
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Vector2 -> ShowS
showsPrec :: Int -> Vector2 -> ShowS
$cshow :: Vector2 -> String
show :: Vector2 -> String
$cshowList :: [Vector2] -> ShowS
showList :: [Vector2] -> ShowS
Show, Vector2 -> Ptr Vector2 -> IO ()
(Vector2 -> Ptr Vector2 -> IO ())
-> (Vector2 -> Ptr Vector2 -> IO ()) -> Freeable Vector2
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: Vector2 -> Ptr Vector2 -> IO ()
rlFreeDependents :: Vector2 -> Ptr Vector2 -> IO ()
$crlFree :: Vector2 -> Ptr Vector2 -> IO ()
rlFree :: Vector2 -> Ptr Vector2 -> IO ()
Freeable)

instance Storable Vector2 where
  sizeOf :: Vector2 -> Int
sizeOf Vector2
_ = Int
8
  alignment :: Vector2 -> Int
alignment Vector2
_ = Int
4
  peek :: Ptr Vector2 -> IO Vector2
peek Ptr Vector2
_p = do
    Float
x <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Vector2 -> Ptr CFloat
p'vector2'x Ptr Vector2
_p)
    Float
y <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Vector2 -> Ptr CFloat
p'vector2'y Ptr Vector2
_p)
    Vector2 -> IO Vector2
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Vector2 -> IO Vector2) -> Vector2 -> IO Vector2
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vector2
Vector2 Float
x Float
y
  poke :: Ptr Vector2 -> Vector2 -> IO ()
poke Ptr Vector2
_p (Vector2 Float
x Float
y) = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Vector2 -> Ptr CFloat
p'vector2'x Ptr Vector2
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
x)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Vector2 -> Ptr CFloat
p'vector2'y Ptr Vector2
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
y)
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

p'vector2'x :: Ptr Vector2 -> Ptr CFloat
p'vector2'x :: Ptr Vector2 -> Ptr CFloat
p'vector2'x = (Ptr Vector2 -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'vector2'y :: Ptr Vector2 -> Ptr CFloat
p'vector2'y :: Ptr Vector2 -> Ptr CFloat
p'vector2'y = (Ptr Vector2 -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4)

data Vector3 = Vector3
  { Vector3 -> Float
vector3'x :: Float,
    Vector3 -> Float
vector3'y :: Float,
    Vector3 -> Float
vector3'z :: Float
  }
  deriving (Vector3 -> Vector3 -> Bool
(Vector3 -> Vector3 -> Bool)
-> (Vector3 -> Vector3 -> Bool) -> Eq Vector3
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Vector3 -> Vector3 -> Bool
== :: Vector3 -> Vector3 -> Bool
$c/= :: Vector3 -> Vector3 -> Bool
/= :: Vector3 -> Vector3 -> Bool
Eq, Int -> Vector3 -> ShowS
[Vector3] -> ShowS
Vector3 -> String
(Int -> Vector3 -> ShowS)
-> (Vector3 -> String) -> ([Vector3] -> ShowS) -> Show Vector3
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Vector3 -> ShowS
showsPrec :: Int -> Vector3 -> ShowS
$cshow :: Vector3 -> String
show :: Vector3 -> String
$cshowList :: [Vector3] -> ShowS
showList :: [Vector3] -> ShowS
Show, Vector3 -> Ptr Vector3 -> IO ()
(Vector3 -> Ptr Vector3 -> IO ())
-> (Vector3 -> Ptr Vector3 -> IO ()) -> Freeable Vector3
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: Vector3 -> Ptr Vector3 -> IO ()
rlFreeDependents :: Vector3 -> Ptr Vector3 -> IO ()
$crlFree :: Vector3 -> Ptr Vector3 -> IO ()
rlFree :: Vector3 -> Ptr Vector3 -> IO ()
Freeable)

instance Storable Vector3 where
  sizeOf :: Vector3 -> Int
sizeOf Vector3
_ = Int
12
  alignment :: Vector3 -> Int
alignment Vector3
_ = Int
4
  peek :: Ptr Vector3 -> IO Vector3
peek Ptr Vector3
_p = do
    Float
x <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Vector3 -> Ptr CFloat
p'vector3'x Ptr Vector3
_p)
    Float
y <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Vector3 -> Ptr CFloat
p'vector3'y Ptr Vector3
_p)
    Float
z <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Vector3 -> Ptr CFloat
p'vector3'z Ptr Vector3
_p)
    Vector3 -> IO Vector3
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Vector3 -> IO Vector3) -> Vector3 -> IO Vector3
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Float -> Vector3
Vector3 Float
x Float
y Float
z
  poke :: Ptr Vector3 -> Vector3 -> IO ()
poke Ptr Vector3
_p (Vector3 Float
x Float
y Float
z) = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Vector3 -> Ptr CFloat
p'vector3'x Ptr Vector3
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
x)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Vector3 -> Ptr CFloat
p'vector3'y Ptr Vector3
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
y)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Vector3 -> Ptr CFloat
p'vector3'z Ptr Vector3
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
z)
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

p'vector3'x :: Ptr Vector3 -> Ptr CFloat
p'vector3'x :: Ptr Vector3 -> Ptr CFloat
p'vector3'x = (Ptr Vector3 -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'vector3'y :: Ptr Vector3 -> Ptr CFloat
p'vector3'y :: Ptr Vector3 -> Ptr CFloat
p'vector3'y = (Ptr Vector3 -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4)

p'vector3'z :: Ptr Vector3 -> Ptr CFloat
p'vector3'z :: Ptr Vector3 -> Ptr CFloat
p'vector3'z = (Ptr Vector3 -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8)

data Vector4 = Vector4
  { Vector4 -> Float
vector4'x :: Float,
    Vector4 -> Float
vector4'y :: Float,
    Vector4 -> Float
vector4'z :: Float,
    Vector4 -> Float
vector4'w :: Float
  }
  deriving (Vector4 -> Vector4 -> Bool
(Vector4 -> Vector4 -> Bool)
-> (Vector4 -> Vector4 -> Bool) -> Eq Vector4
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Vector4 -> Vector4 -> Bool
== :: Vector4 -> Vector4 -> Bool
$c/= :: Vector4 -> Vector4 -> Bool
/= :: Vector4 -> Vector4 -> Bool
Eq, Int -> Vector4 -> ShowS
[Vector4] -> ShowS
Vector4 -> String
(Int -> Vector4 -> ShowS)
-> (Vector4 -> String) -> ([Vector4] -> ShowS) -> Show Vector4
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Vector4 -> ShowS
showsPrec :: Int -> Vector4 -> ShowS
$cshow :: Vector4 -> String
show :: Vector4 -> String
$cshowList :: [Vector4] -> ShowS
showList :: [Vector4] -> ShowS
Show, Vector4 -> Ptr Vector4 -> IO ()
(Vector4 -> Ptr Vector4 -> IO ())
-> (Vector4 -> Ptr Vector4 -> IO ()) -> Freeable Vector4
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: Vector4 -> Ptr Vector4 -> IO ()
rlFreeDependents :: Vector4 -> Ptr Vector4 -> IO ()
$crlFree :: Vector4 -> Ptr Vector4 -> IO ()
rlFree :: Vector4 -> Ptr Vector4 -> IO ()
Freeable)

instance Storable Vector4 where
  sizeOf :: Vector4 -> Int
sizeOf Vector4
_ = Int
16
  alignment :: Vector4 -> Int
alignment Vector4
_ = Int
4
  peek :: Ptr Vector4 -> IO Vector4
peek Ptr Vector4
_p = do
    Float
x <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Vector4 -> Ptr CFloat
p'vector4'x Ptr Vector4
_p)
    Float
y <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Vector4 -> Ptr CFloat
p'vector4'y Ptr Vector4
_p)
    Float
z <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Vector4 -> Ptr CFloat
p'vector4'z Ptr Vector4
_p)
    Float
w <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Vector4 -> Ptr CFloat
p'vector4'w Ptr Vector4
_p)
    Vector4 -> IO Vector4
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Vector4 -> IO Vector4) -> Vector4 -> IO Vector4
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Float -> Float -> Vector4
Vector4 Float
x Float
y Float
z Float
w
  poke :: Ptr Vector4 -> Vector4 -> IO ()
poke Ptr Vector4
_p (Vector4 Float
x Float
y Float
z Float
w) = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Vector4 -> Ptr CFloat
p'vector4'x Ptr Vector4
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
x)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Vector4 -> Ptr CFloat
p'vector4'y Ptr Vector4
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
y)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Vector4 -> Ptr CFloat
p'vector4'z Ptr Vector4
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
z)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Vector4 -> Ptr CFloat
p'vector4'w Ptr Vector4
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
w)
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

vectorToColor :: Vector4 -> Color
vectorToColor :: Vector4 -> Color
vectorToColor (Vector4 Float
x Float
y Float
z Float
w) = Word8 -> Word8 -> Word8 -> Word8 -> Color
Color (Float -> Word8
forall b. Integral b => Float -> b
forall a b. (RealFrac a, Integral b) => a -> b
round (Float -> Word8) -> Float -> Word8
forall a b. (a -> b) -> a -> b
$ Float
x Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
255) (Float -> Word8
forall b. Integral b => Float -> b
forall a b. (RealFrac a, Integral b) => a -> b
round (Float -> Word8) -> Float -> Word8
forall a b. (a -> b) -> a -> b
$ Float
y Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
255) (Float -> Word8
forall b. Integral b => Float -> b
forall a b. (RealFrac a, Integral b) => a -> b
round (Float -> Word8) -> Float -> Word8
forall a b. (a -> b) -> a -> b
$ Float
z Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
255) (Float -> Word8
forall b. Integral b => Float -> b
forall a b. (RealFrac a, Integral b) => a -> b
round (Float -> Word8) -> Float -> Word8
forall a b. (a -> b) -> a -> b
$ Float
w Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
255)

p'vector4'x :: Ptr Vector4 -> Ptr CFloat
p'vector4'x :: Ptr Vector4 -> Ptr CFloat
p'vector4'x = (Ptr Vector4 -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'vector4'y :: Ptr Vector4 -> Ptr CFloat
p'vector4'y :: Ptr Vector4 -> Ptr CFloat
p'vector4'y = (Ptr Vector4 -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4)

p'vector4'z :: Ptr Vector4 -> Ptr CFloat
p'vector4'z :: Ptr Vector4 -> Ptr CFloat
p'vector4'z = (Ptr Vector4 -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8)

p'vector4'w :: Ptr Vector4 -> Ptr CFloat
p'vector4'w :: Ptr Vector4 -> Ptr CFloat
p'vector4'w = (Ptr Vector4 -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12)

type Quaternion = Vector4

data Matrix = Matrix
  { Matrix -> Float
matrix'm0 :: Float,
    Matrix -> Float
matrix'm4 :: Float,
    Matrix -> Float
matrix'm8 :: Float,
    Matrix -> Float
matrix'm12 :: Float,
    Matrix -> Float
matrix'm1 :: Float,
    Matrix -> Float
matrix'm5 :: Float,
    Matrix -> Float
matrix'm9 :: Float,
    Matrix -> Float
matrix'm13 :: Float,
    Matrix -> Float
matrix'm2 :: Float,
    Matrix -> Float
matrix'm6 :: Float,
    Matrix -> Float
matrix'm10 :: Float,
    Matrix -> Float
matrix'm14 :: Float,
    Matrix -> Float
matrix'm3 :: Float,
    Matrix -> Float
matrix'm7 :: Float,
    Matrix -> Float
matrix'm11 :: Float,
    Matrix -> Float
matrix'm15 :: Float
  }
  deriving (Matrix -> Matrix -> Bool
(Matrix -> Matrix -> Bool)
-> (Matrix -> Matrix -> Bool) -> Eq Matrix
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Matrix -> Matrix -> Bool
== :: Matrix -> Matrix -> Bool
$c/= :: Matrix -> Matrix -> Bool
/= :: Matrix -> Matrix -> Bool
Eq, Int -> Matrix -> ShowS
[Matrix] -> ShowS
Matrix -> String
(Int -> Matrix -> ShowS)
-> (Matrix -> String) -> ([Matrix] -> ShowS) -> Show Matrix
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Matrix -> ShowS
showsPrec :: Int -> Matrix -> ShowS
$cshow :: Matrix -> String
show :: Matrix -> String
$cshowList :: [Matrix] -> ShowS
showList :: [Matrix] -> ShowS
Show, Matrix -> Ptr Matrix -> IO ()
(Matrix -> Ptr Matrix -> IO ())
-> (Matrix -> Ptr Matrix -> IO ()) -> Freeable Matrix
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: Matrix -> Ptr Matrix -> IO ()
rlFreeDependents :: Matrix -> Ptr Matrix -> IO ()
$crlFree :: Matrix -> Ptr Matrix -> IO ()
rlFree :: Matrix -> Ptr Matrix -> IO ()
Freeable)

instance Storable Matrix where
  sizeOf :: Matrix -> Int
sizeOf Matrix
_ = Int
64
  alignment :: Matrix -> Int
alignment Matrix
_ = Int
4
  peek :: Ptr Matrix -> IO Matrix
peek Ptr Matrix
_p = do
    Float
m0 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm0 Ptr Matrix
_p)
    Float
m4 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm4 Ptr Matrix
_p)
    Float
m8 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm8 Ptr Matrix
_p)
    Float
m12 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm12 Ptr Matrix
_p)
    Float
m1 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm1 Ptr Matrix
_p)
    Float
m5 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm5 Ptr Matrix
_p)
    Float
m9 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm9 Ptr Matrix
_p)
    Float
m13 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm13 Ptr Matrix
_p)
    Float
m2 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm2 Ptr Matrix
_p)
    Float
m6 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm6 Ptr Matrix
_p)
    Float
m10 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm10 Ptr Matrix
_p)
    Float
m14 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm14 Ptr Matrix
_p)
    Float
m3 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm3 Ptr Matrix
_p)
    Float
m7 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm7 Ptr Matrix
_p)
    Float
m11 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm11 Ptr Matrix
_p)
    Float
m15 <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Matrix -> Ptr CFloat
p'matrix'm15 Ptr Matrix
_p)
    Matrix -> IO Matrix
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Matrix -> IO Matrix) -> Matrix -> IO Matrix
forall a b. (a -> b) -> a -> b
$ Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Matrix
Matrix Float
m0 Float
m4 Float
m8 Float
m12 Float
m1 Float
m5 Float
m9 Float
m13 Float
m2 Float
m6 Float
m10 Float
m14 Float
m3 Float
m7 Float
m11 Float
m15
  poke :: Ptr Matrix -> Matrix -> IO ()
poke Ptr Matrix
_p (Matrix Float
m0 Float
m4 Float
m8 Float
m12 Float
m1 Float
m5 Float
m9 Float
m13 Float
m2 Float
m6 Float
m10 Float
m14 Float
m3 Float
m7 Float
m11 Float
m15) = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm0 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m0)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm4 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m4)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm8 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m8)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm12 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m12)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm1 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m1)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm5 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m5)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm9 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m9)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm13 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m13)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm2 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m2)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm6 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m6)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm10 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m10)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm14 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m14)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm3 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m3)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm7 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m7)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm11 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m11)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Matrix -> Ptr CFloat
p'matrix'm15 Ptr Matrix
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
m15)
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

p'matrix'm0 :: Ptr Matrix -> Ptr CFloat
p'matrix'm0 :: Ptr Matrix -> Ptr CFloat
p'matrix'm0 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'matrix'm4 :: Ptr Matrix -> Ptr CFloat
p'matrix'm4 :: Ptr Matrix -> Ptr CFloat
p'matrix'm4 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4)

p'matrix'm8 :: Ptr Matrix -> Ptr CFloat
p'matrix'm8 :: Ptr Matrix -> Ptr CFloat
p'matrix'm8 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8)

p'matrix'm12 :: Ptr Matrix -> Ptr CFloat
p'matrix'm12 :: Ptr Matrix -> Ptr CFloat
p'matrix'm12 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12)

p'matrix'm1 :: Ptr Matrix -> Ptr CFloat
p'matrix'm1 :: Ptr Matrix -> Ptr CFloat
p'matrix'm1 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16)

p'matrix'm5 :: Ptr Matrix -> Ptr CFloat
p'matrix'm5 :: Ptr Matrix -> Ptr CFloat
p'matrix'm5 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20)

p'matrix'm9 :: Ptr Matrix -> Ptr CFloat
p'matrix'm9 :: Ptr Matrix -> Ptr CFloat
p'matrix'm9 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24)

p'matrix'm13 :: Ptr Matrix -> Ptr CFloat
p'matrix'm13 :: Ptr Matrix -> Ptr CFloat
p'matrix'm13 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28)

p'matrix'm2 :: Ptr Matrix -> Ptr CFloat
p'matrix'm2 :: Ptr Matrix -> Ptr CFloat
p'matrix'm2 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32)

p'matrix'm6 :: Ptr Matrix -> Ptr CFloat
p'matrix'm6 :: Ptr Matrix -> Ptr CFloat
p'matrix'm6 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36)

p'matrix'm10 :: Ptr Matrix -> Ptr CFloat
p'matrix'm10 :: Ptr Matrix -> Ptr CFloat
p'matrix'm10 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40)

p'matrix'm14 :: Ptr Matrix -> Ptr CFloat
p'matrix'm14 :: Ptr Matrix -> Ptr CFloat
p'matrix'm14 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44)

p'matrix'm3 :: Ptr Matrix -> Ptr CFloat
p'matrix'm3 :: Ptr Matrix -> Ptr CFloat
p'matrix'm3 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48)

p'matrix'm7 :: Ptr Matrix -> Ptr CFloat
p'matrix'm7 :: Ptr Matrix -> Ptr CFloat
p'matrix'm7 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52)

p'matrix'm11 :: Ptr Matrix -> Ptr CFloat
p'matrix'm11 :: Ptr Matrix -> Ptr CFloat
p'matrix'm11 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56)

p'matrix'm15 :: Ptr Matrix -> Ptr CFloat
p'matrix'm15 :: Ptr Matrix -> Ptr CFloat
p'matrix'm15 = (Ptr Matrix -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60)

data Color = Color
  { Color -> Word8
color'r :: Word8,
    Color -> Word8
color'g :: Word8,
    Color -> Word8
color'b :: Word8,
    Color -> Word8
color'a :: Word8
  }
  deriving (Color -> Color -> Bool
(Color -> Color -> Bool) -> (Color -> Color -> Bool) -> Eq Color
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Color -> Color -> Bool
== :: Color -> Color -> Bool
$c/= :: Color -> Color -> Bool
/= :: Color -> Color -> Bool
Eq, Int -> Color -> ShowS
[Color] -> ShowS
Color -> String
(Int -> Color -> ShowS)
-> (Color -> String) -> ([Color] -> ShowS) -> Show Color
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Color -> ShowS
showsPrec :: Int -> Color -> ShowS
$cshow :: Color -> String
show :: Color -> String
$cshowList :: [Color] -> ShowS
showList :: [Color] -> ShowS
Show, Color -> Ptr Color -> IO ()
(Color -> Ptr Color -> IO ())
-> (Color -> Ptr Color -> IO ()) -> Freeable Color
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: Color -> Ptr Color -> IO ()
rlFreeDependents :: Color -> Ptr Color -> IO ()
$crlFree :: Color -> Ptr Color -> IO ()
rlFree :: Color -> Ptr Color -> IO ()
Freeable)

instance Storable Color where
  sizeOf :: Color -> Int
sizeOf Color
_ = Int
4
  alignment :: Color -> Int
alignment Color
_ = Int
1
  peek :: Ptr Color -> IO Color
peek Ptr Color
_p = do
    Word8
r <- CUChar -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUChar -> Word8) -> IO CUChar -> IO Word8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUChar -> IO CUChar
forall a. Storable a => Ptr a -> IO a
peek (Ptr Color -> Ptr CUChar
p'color'r Ptr Color
_p)
    Word8
g <- CUChar -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUChar -> Word8) -> IO CUChar -> IO Word8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUChar -> IO CUChar
forall a. Storable a => Ptr a -> IO a
peek (Ptr Color -> Ptr CUChar
p'color'g Ptr Color
_p)
    Word8
b <- CUChar -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUChar -> Word8) -> IO CUChar -> IO Word8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUChar -> IO CUChar
forall a. Storable a => Ptr a -> IO a
peek (Ptr Color -> Ptr CUChar
p'color'b Ptr Color
_p)
    Word8
a <- CUChar -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUChar -> Word8) -> IO CUChar -> IO Word8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUChar -> IO CUChar
forall a. Storable a => Ptr a -> IO a
peek (Ptr Color -> Ptr CUChar
p'color'a Ptr Color
_p)
    Color -> IO Color
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Color -> IO Color) -> Color -> IO Color
forall a b. (a -> b) -> a -> b
$ Word8 -> Word8 -> Word8 -> Word8 -> Color
Color Word8
r Word8
g Word8
b Word8
a
  poke :: Ptr Color -> Color -> IO ()
poke Ptr Color
_p (Color Word8
r Word8
g Word8
b Word8
a) = do
    Ptr CUChar -> CUChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Color -> Ptr CUChar
p'color'r Ptr Color
_p) (Word8 -> CUChar
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
r)
    Ptr CUChar -> CUChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Color -> Ptr CUChar
p'color'g Ptr Color
_p) (Word8 -> CUChar
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
g)
    Ptr CUChar -> CUChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Color -> Ptr CUChar
p'color'b Ptr Color
_p) (Word8 -> CUChar
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
b)
    Ptr CUChar -> CUChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Color -> Ptr CUChar
p'color'a Ptr Color
_p) (Word8 -> CUChar
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
a)
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

p'color'r :: Ptr Color -> Ptr CUChar
p'color'r :: Ptr Color -> Ptr CUChar
p'color'r = (Ptr Color -> Int -> Ptr CUChar
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'color'g :: Ptr Color -> Ptr CUChar
p'color'g :: Ptr Color -> Ptr CUChar
p'color'g = (Ptr Color -> Int -> Ptr CUChar
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
1)

p'color'b :: Ptr Color -> Ptr CUChar
p'color'b :: Ptr Color -> Ptr CUChar
p'color'b = (Ptr Color -> Int -> Ptr CUChar
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
2)

p'color'a :: Ptr Color -> Ptr CUChar
p'color'a :: Ptr Color -> Ptr CUChar
p'color'a = (Ptr Color -> Int -> Ptr CUChar
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
3)

data Rectangle = Rectangle
  { Rectangle -> Float
rectangle'x :: Float,
    Rectangle -> Float
rectangle'y :: Float,
    Rectangle -> Float
rectangle'width :: Float,
    Rectangle -> Float
rectangle'height :: Float
  }
  deriving (Rectangle -> Rectangle -> Bool
(Rectangle -> Rectangle -> Bool)
-> (Rectangle -> Rectangle -> Bool) -> Eq Rectangle
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Rectangle -> Rectangle -> Bool
== :: Rectangle -> Rectangle -> Bool
$c/= :: Rectangle -> Rectangle -> Bool
/= :: Rectangle -> Rectangle -> Bool
Eq, Int -> Rectangle -> ShowS
[Rectangle] -> ShowS
Rectangle -> String
(Int -> Rectangle -> ShowS)
-> (Rectangle -> String)
-> ([Rectangle] -> ShowS)
-> Show Rectangle
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Rectangle -> ShowS
showsPrec :: Int -> Rectangle -> ShowS
$cshow :: Rectangle -> String
show :: Rectangle -> String
$cshowList :: [Rectangle] -> ShowS
showList :: [Rectangle] -> ShowS
Show, Rectangle -> Ptr Rectangle -> IO ()
(Rectangle -> Ptr Rectangle -> IO ())
-> (Rectangle -> Ptr Rectangle -> IO ()) -> Freeable Rectangle
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: Rectangle -> Ptr Rectangle -> IO ()
rlFreeDependents :: Rectangle -> Ptr Rectangle -> IO ()
$crlFree :: Rectangle -> Ptr Rectangle -> IO ()
rlFree :: Rectangle -> Ptr Rectangle -> IO ()
Freeable)

instance Storable Rectangle where
  sizeOf :: Rectangle -> Int
sizeOf Rectangle
_ = Int
16
  alignment :: Rectangle -> Int
alignment Rectangle
_ = Int
4
  peek :: Ptr Rectangle -> IO Rectangle
peek Ptr Rectangle
_p = do
    Float
x <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Rectangle -> Ptr CFloat
p'rectangle'x Ptr Rectangle
_p)
    Float
y <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Rectangle -> Ptr CFloat
p'rectangle'y Ptr Rectangle
_p)
    Float
width <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Rectangle -> Ptr CFloat
p'rectangle'width Ptr Rectangle
_p)
    Float
height <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr Rectangle -> Ptr CFloat
p'rectangle'height Ptr Rectangle
_p)
    Rectangle -> IO Rectangle
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Rectangle -> IO Rectangle) -> Rectangle -> IO Rectangle
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Float -> Float -> Rectangle
Rectangle Float
x Float
y Float
width Float
height
  poke :: Ptr Rectangle -> Rectangle -> IO ()
poke Ptr Rectangle
_p (Rectangle Float
x Float
y Float
width Float
height) = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Rectangle -> Ptr CFloat
p'rectangle'x Ptr Rectangle
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
x)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Rectangle -> Ptr CFloat
p'rectangle'y Ptr Rectangle
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
y)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Rectangle -> Ptr CFloat
p'rectangle'width Ptr Rectangle
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
width)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Rectangle -> Ptr CFloat
p'rectangle'height Ptr Rectangle
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
height)
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

p'rectangle'x :: Ptr Rectangle -> Ptr CFloat
p'rectangle'x :: Ptr Rectangle -> Ptr CFloat
p'rectangle'x = (Ptr Rectangle -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'rectangle'y :: Ptr Rectangle -> Ptr CFloat
p'rectangle'y :: Ptr Rectangle -> Ptr CFloat
p'rectangle'y = (Ptr Rectangle -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4)

p'rectangle'width :: Ptr Rectangle -> Ptr CFloat
p'rectangle'width :: Ptr Rectangle -> Ptr CFloat
p'rectangle'width = (Ptr Rectangle -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8)

p'rectangle'height :: Ptr Rectangle -> Ptr CFloat
p'rectangle'height :: Ptr Rectangle -> Ptr CFloat
p'rectangle'height = (Ptr Rectangle -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12)

data VrDeviceInfo = VrDeviceInfo
  { VrDeviceInfo -> Int
vrDeviceInfo'hResolution :: Int,
    VrDeviceInfo -> Int
vrDeviceInfo'vResolution :: Int,
    VrDeviceInfo -> Float
vrDeviceInfo'hScreenSize :: Float,
    VrDeviceInfo -> Float
vrDeviceInfo'vScreenSize :: Float,
    VrDeviceInfo -> Float
vrDeviceInfo'eyeToScreenDistance :: Float,
    VrDeviceInfo -> Float
vrDeviceInfo'lensSeparationDistance :: Float,
    VrDeviceInfo -> Float
vrDeviceInfo'interpupillaryDistance :: Float,
    VrDeviceInfo -> [Float]
vrDeviceInfo'lensDistortionValues :: [Float],
    VrDeviceInfo -> [Float]
vrDeviceInfo'chromaAbCorrection :: [Float]
  }
  deriving (VrDeviceInfo -> VrDeviceInfo -> Bool
(VrDeviceInfo -> VrDeviceInfo -> Bool)
-> (VrDeviceInfo -> VrDeviceInfo -> Bool) -> Eq VrDeviceInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VrDeviceInfo -> VrDeviceInfo -> Bool
== :: VrDeviceInfo -> VrDeviceInfo -> Bool
$c/= :: VrDeviceInfo -> VrDeviceInfo -> Bool
/= :: VrDeviceInfo -> VrDeviceInfo -> Bool
Eq, Int -> VrDeviceInfo -> ShowS
[VrDeviceInfo] -> ShowS
VrDeviceInfo -> String
(Int -> VrDeviceInfo -> ShowS)
-> (VrDeviceInfo -> String)
-> ([VrDeviceInfo] -> ShowS)
-> Show VrDeviceInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VrDeviceInfo -> ShowS
showsPrec :: Int -> VrDeviceInfo -> ShowS
$cshow :: VrDeviceInfo -> String
show :: VrDeviceInfo -> String
$cshowList :: [VrDeviceInfo] -> ShowS
showList :: [VrDeviceInfo] -> ShowS
Show, VrDeviceInfo -> Ptr VrDeviceInfo -> IO ()
(VrDeviceInfo -> Ptr VrDeviceInfo -> IO ())
-> (VrDeviceInfo -> Ptr VrDeviceInfo -> IO ())
-> Freeable VrDeviceInfo
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: VrDeviceInfo -> Ptr VrDeviceInfo -> IO ()
rlFreeDependents :: VrDeviceInfo -> Ptr VrDeviceInfo -> IO ()
$crlFree :: VrDeviceInfo -> Ptr VrDeviceInfo -> IO ()
rlFree :: VrDeviceInfo -> Ptr VrDeviceInfo -> IO ()
Freeable)

instance Storable VrDeviceInfo where
  sizeOf :: VrDeviceInfo -> Int
sizeOf VrDeviceInfo
_ = Int
60
  alignment :: VrDeviceInfo -> Int
alignment VrDeviceInfo
_ = Int
4
  peek :: Ptr VrDeviceInfo -> IO VrDeviceInfo
peek Ptr VrDeviceInfo
_p = do
    Int
hResolution <- CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr VrDeviceInfo -> Ptr CInt
p'vrDeviceInfo'hResolution Ptr VrDeviceInfo
_p)
    Int
vResolution <- CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr VrDeviceInfo -> Ptr CInt
p'vrDeviceInfo'vResolution Ptr VrDeviceInfo
_p)
    Float
hScreenSize <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'hScreenSize Ptr VrDeviceInfo
_p)
    Float
vScreenSize <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'vScreenSize Ptr VrDeviceInfo
_p)
    Float
eyeToScreenDistance <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'eyeToScreenDistance Ptr VrDeviceInfo
_p)
    Float
lensSeparationDistance <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'lensSeparationDistance Ptr VrDeviceInfo
_p)
    Float
interpupillaryDistance <- CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac (CFloat -> Float) -> IO CFloat -> IO Float
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'interpupillaryDistance Ptr VrDeviceInfo
_p)
    [Float]
lensDistortionValues <- (CFloat -> Float) -> [CFloat] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac ([CFloat] -> [Float]) -> IO [CFloat] -> IO [Float]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Ptr CFloat -> IO [CFloat]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
4 (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'lensDistortionValues Ptr VrDeviceInfo
_p)
    [Float]
chromaAbCorrection <- (CFloat -> Float) -> [CFloat] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac ([CFloat] -> [Float]) -> IO [CFloat] -> IO [Float]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Ptr CFloat -> IO [CFloat]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
4 (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'chromaAbCorrection Ptr VrDeviceInfo
_p)
    VrDeviceInfo -> IO VrDeviceInfo
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (VrDeviceInfo -> IO VrDeviceInfo)
-> VrDeviceInfo -> IO VrDeviceInfo
forall a b. (a -> b) -> a -> b
$ Int
-> Int
-> Float
-> Float
-> Float
-> Float
-> Float
-> [Float]
-> [Float]
-> VrDeviceInfo
VrDeviceInfo Int
hResolution Int
vResolution Float
hScreenSize Float
vScreenSize Float
eyeToScreenDistance Float
lensSeparationDistance Float
interpupillaryDistance [Float]
lensDistortionValues [Float]
chromaAbCorrection
  poke :: Ptr VrDeviceInfo -> VrDeviceInfo -> IO ()
poke Ptr VrDeviceInfo
_p (VrDeviceInfo Int
hResolution Int
vResolution Float
hScreenSize Float
vScreenSize Float
eyeToScreenDistance Float
lensSeparationDistance Float
interpupillaryDistance [Float]
lensDistortionValues [Float]
chromaAbCorrection) = do
    Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VrDeviceInfo -> Ptr CInt
p'vrDeviceInfo'hResolution Ptr VrDeviceInfo
_p) (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
hResolution)
    Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VrDeviceInfo -> Ptr CInt
p'vrDeviceInfo'vResolution Ptr VrDeviceInfo
_p) (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
vResolution)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'hScreenSize Ptr VrDeviceInfo
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
hScreenSize)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'vScreenSize Ptr VrDeviceInfo
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
vScreenSize)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'eyeToScreenDistance Ptr VrDeviceInfo
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
eyeToScreenDistance)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'lensSeparationDistance Ptr VrDeviceInfo
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
lensSeparationDistance)
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'interpupillaryDistance Ptr VrDeviceInfo
_p) (Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
interpupillaryDistance)
    Ptr CFloat -> [CFloat] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'lensDistortionValues Ptr VrDeviceInfo
_p) ((Float -> CFloat) -> [Float] -> [CFloat]
forall a b. (a -> b) -> [a] -> [b]
map Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac [Float]
lensDistortionValues)
    Ptr CFloat -> [CFloat] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'chromaAbCorrection Ptr VrDeviceInfo
_p) ((Float -> CFloat) -> [Float] -> [CFloat]
forall a b. (a -> b) -> [a] -> [b]
map Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac [Float]
chromaAbCorrection)
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

p'vrDeviceInfo'hResolution :: Ptr VrDeviceInfo -> Ptr CInt
p'vrDeviceInfo'hResolution :: Ptr VrDeviceInfo -> Ptr CInt
p'vrDeviceInfo'hResolution = (Ptr VrDeviceInfo -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'vrDeviceInfo'vResolution :: Ptr VrDeviceInfo -> Ptr CInt
p'vrDeviceInfo'vResolution :: Ptr VrDeviceInfo -> Ptr CInt
p'vrDeviceInfo'vResolution = (Ptr VrDeviceInfo -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4)

p'vrDeviceInfo'hScreenSize :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'hScreenSize :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'hScreenSize = (Ptr VrDeviceInfo -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8)

p'vrDeviceInfo'vScreenSize :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'vScreenSize :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'vScreenSize = (Ptr VrDeviceInfo -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12)

p'vrDeviceInfo'eyeToScreenDistance :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'eyeToScreenDistance :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'eyeToScreenDistance = (Ptr VrDeviceInfo -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16)

p'vrDeviceInfo'lensSeparationDistance :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'lensSeparationDistance :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'lensSeparationDistance = (Ptr VrDeviceInfo -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20)

p'vrDeviceInfo'interpupillaryDistance :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'interpupillaryDistance :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'interpupillaryDistance = (Ptr VrDeviceInfo -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24)

-- static array (4)
p'vrDeviceInfo'lensDistortionValues :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'lensDistortionValues :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'lensDistortionValues = (Ptr VrDeviceInfo -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28)

-- static array (4)
p'vrDeviceInfo'chromaAbCorrection :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'chromaAbCorrection :: Ptr VrDeviceInfo -> Ptr CFloat
p'vrDeviceInfo'chromaAbCorrection = (Ptr VrDeviceInfo -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44)

data VrStereoConfig = VrStereoConfig
  { VrStereoConfig -> [Matrix]
vrStereoConfig'projection :: [Matrix],
    VrStereoConfig -> [Matrix]
vrStereoConfig'viewOffset :: [Matrix],
    VrStereoConfig -> [Float]
vrStereoConfig'leftLensCenter :: [Float],
    VrStereoConfig -> [Float]
vrStereoConfig'rightLensCenter :: [Float],
    VrStereoConfig -> [Float]
vrStereoConfig'leftScreenCenter :: [Float],
    VrStereoConfig -> [Float]
vrStereoConfig'rightScreenCenter :: [Float],
    VrStereoConfig -> [Float]
vrStereoConfig'scale :: [Float],
    VrStereoConfig -> [Float]
vrStereoConfig'scaleIn :: [Float]
  }
  deriving (VrStereoConfig -> VrStereoConfig -> Bool
(VrStereoConfig -> VrStereoConfig -> Bool)
-> (VrStereoConfig -> VrStereoConfig -> Bool) -> Eq VrStereoConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VrStereoConfig -> VrStereoConfig -> Bool
== :: VrStereoConfig -> VrStereoConfig -> Bool
$c/= :: VrStereoConfig -> VrStereoConfig -> Bool
/= :: VrStereoConfig -> VrStereoConfig -> Bool
Eq, Int -> VrStereoConfig -> ShowS
[VrStereoConfig] -> ShowS
VrStereoConfig -> String
(Int -> VrStereoConfig -> ShowS)
-> (VrStereoConfig -> String)
-> ([VrStereoConfig] -> ShowS)
-> Show VrStereoConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VrStereoConfig -> ShowS
showsPrec :: Int -> VrStereoConfig -> ShowS
$cshow :: VrStereoConfig -> String
show :: VrStereoConfig -> String
$cshowList :: [VrStereoConfig] -> ShowS
showList :: [VrStereoConfig] -> ShowS
Show, VrStereoConfig -> Ptr VrStereoConfig -> IO ()
(VrStereoConfig -> Ptr VrStereoConfig -> IO ())
-> (VrStereoConfig -> Ptr VrStereoConfig -> IO ())
-> Freeable VrStereoConfig
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: VrStereoConfig -> Ptr VrStereoConfig -> IO ()
rlFreeDependents :: VrStereoConfig -> Ptr VrStereoConfig -> IO ()
$crlFree :: VrStereoConfig -> Ptr VrStereoConfig -> IO ()
rlFree :: VrStereoConfig -> Ptr VrStereoConfig -> IO ()
Freeable)

instance Storable VrStereoConfig where
  sizeOf :: VrStereoConfig -> Int
sizeOf VrStereoConfig
_ = Int
304
  alignment :: VrStereoConfig -> Int
alignment VrStereoConfig
_ = Int
4
  peek :: Ptr VrStereoConfig -> IO VrStereoConfig
peek Ptr VrStereoConfig
_p = do
    [Matrix]
projection <- Int -> Ptr Matrix -> IO [Matrix]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
2 (Ptr VrStereoConfig -> Ptr Matrix
p'vrStereoConfig'projection Ptr VrStereoConfig
_p)
    [Matrix]
viewOffset <- Int -> Ptr Matrix -> IO [Matrix]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
2 (Ptr VrStereoConfig -> Ptr Matrix
p'vrStereoConfig'viewOffset Ptr VrStereoConfig
_p)
    [Float]
leftLensCenter <- (CFloat -> Float) -> [CFloat] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac ([CFloat] -> [Float]) -> IO [CFloat] -> IO [Float]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Ptr CFloat -> IO [CFloat]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
2 (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'leftLensCenter Ptr VrStereoConfig
_p)
    [Float]
rightLensCenter <- (CFloat -> Float) -> [CFloat] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac ([CFloat] -> [Float]) -> IO [CFloat] -> IO [Float]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Ptr CFloat -> IO [CFloat]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
2 (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'rightLensCenter Ptr VrStereoConfig
_p)
    [Float]
leftScreenCenter <- (CFloat -> Float) -> [CFloat] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac ([CFloat] -> [Float]) -> IO [CFloat] -> IO [Float]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Ptr CFloat -> IO [CFloat]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
2 (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'leftScreenCenter Ptr VrStereoConfig
_p)
    [Float]
rightScreenCenter <- (CFloat -> Float) -> [CFloat] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac ([CFloat] -> [Float]) -> IO [CFloat] -> IO [Float]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Ptr CFloat -> IO [CFloat]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
2 (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'rightScreenCenter Ptr VrStereoConfig
_p)
    [Float]
scale <- (CFloat -> Float) -> [CFloat] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac ([CFloat] -> [Float]) -> IO [CFloat] -> IO [Float]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Ptr CFloat -> IO [CFloat]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
2 (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'scale Ptr VrStereoConfig
_p)
    [Float]
scaleIn <- (CFloat -> Float) -> [CFloat] -> [Float]
forall a b. (a -> b) -> [a] -> [b]
map CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac ([CFloat] -> [Float]) -> IO [CFloat] -> IO [Float]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Ptr CFloat -> IO [CFloat]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
2 (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'scaleIn Ptr VrStereoConfig
_p)
    VrStereoConfig -> IO VrStereoConfig
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (VrStereoConfig -> IO VrStereoConfig)
-> VrStereoConfig -> IO VrStereoConfig
forall a b. (a -> b) -> a -> b
$ [Matrix]
-> [Matrix]
-> [Float]
-> [Float]
-> [Float]
-> [Float]
-> [Float]
-> [Float]
-> VrStereoConfig
VrStereoConfig [Matrix]
projection [Matrix]
viewOffset [Float]
leftLensCenter [Float]
rightLensCenter [Float]
leftScreenCenter [Float]
rightScreenCenter [Float]
scale [Float]
scaleIn
  poke :: Ptr VrStereoConfig -> VrStereoConfig -> IO ()
poke Ptr VrStereoConfig
_p (VrStereoConfig [Matrix]
projection [Matrix]
viewOffset [Float]
leftLensCenter [Float]
rightLensCenter [Float]
leftScreenCenter [Float]
rightScreenCenter [Float]
scale [Float]
scaleIn) = do
    Ptr Matrix -> [Matrix] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrStereoConfig -> Ptr Matrix
p'vrStereoConfig'projection Ptr VrStereoConfig
_p) [Matrix]
projection
    Ptr Matrix -> [Matrix] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrStereoConfig -> Ptr Matrix
p'vrStereoConfig'viewOffset Ptr VrStereoConfig
_p) [Matrix]
viewOffset
    Ptr CFloat -> [CFloat] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'leftLensCenter Ptr VrStereoConfig
_p) ((Float -> CFloat) -> [Float] -> [CFloat]
forall a b. (a -> b) -> [a] -> [b]
map Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac [Float]
leftLensCenter)
    Ptr CFloat -> [CFloat] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'rightLensCenter Ptr VrStereoConfig
_p) ((Float -> CFloat) -> [Float] -> [CFloat]
forall a b. (a -> b) -> [a] -> [b]
map Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac [Float]
rightLensCenter)
    Ptr CFloat -> [CFloat] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'leftScreenCenter Ptr VrStereoConfig
_p) ((Float -> CFloat) -> [Float] -> [CFloat]
forall a b. (a -> b) -> [a] -> [b]
map Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac [Float]
leftScreenCenter)
    Ptr CFloat -> [CFloat] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'rightScreenCenter Ptr VrStereoConfig
_p) ((Float -> CFloat) -> [Float] -> [CFloat]
forall a b. (a -> b) -> [a] -> [b]
map Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac [Float]
rightScreenCenter)
    Ptr CFloat -> [CFloat] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'scale Ptr VrStereoConfig
_p) ((Float -> CFloat) -> [Float] -> [CFloat]
forall a b. (a -> b) -> [a] -> [b]
map Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac [Float]
scale)
    Ptr CFloat -> [CFloat] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'scaleIn Ptr VrStereoConfig
_p) ((Float -> CFloat) -> [Float] -> [CFloat]
forall a b. (a -> b) -> [a] -> [b]
map Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac [Float]
scaleIn)
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

-- static array (2)
p'vrStereoConfig'projection :: Ptr VrStereoConfig -> Ptr Matrix
p'vrStereoConfig'projection :: Ptr VrStereoConfig -> Ptr Matrix
p'vrStereoConfig'projection = (Ptr VrStereoConfig -> Int -> Ptr Matrix
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

-- static array (2)
p'vrStereoConfig'viewOffset :: Ptr VrStereoConfig -> Ptr Matrix
p'vrStereoConfig'viewOffset :: Ptr VrStereoConfig -> Ptr Matrix
p'vrStereoConfig'viewOffset = (Ptr VrStereoConfig -> Int -> Ptr Matrix
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
128)

-- static array (2)
p'vrStereoConfig'leftLensCenter :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'leftLensCenter :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'leftLensCenter = (Ptr VrStereoConfig -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
256)

-- static array (2)
p'vrStereoConfig'rightLensCenter :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'rightLensCenter :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'rightLensCenter = (Ptr VrStereoConfig -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
264)

-- static array (2)
p'vrStereoConfig'leftScreenCenter :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'leftScreenCenter :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'leftScreenCenter = (Ptr VrStereoConfig -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
272)

-- static array (2)
p'vrStereoConfig'rightScreenCenter :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'rightScreenCenter :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'rightScreenCenter = (Ptr VrStereoConfig -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
280)

-- static array (2)
p'vrStereoConfig'scale :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'scale :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'scale = (Ptr VrStereoConfig -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
288)

-- static array (2)
p'vrStereoConfig'scaleIn :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'scaleIn :: Ptr VrStereoConfig -> Ptr CFloat
p'vrStereoConfig'scaleIn = (Ptr VrStereoConfig -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
296)

data FilePathList = FilePathList
  { FilePathList -> Integer
filePathList'capacity :: Integer,
    FilePathList -> [String]
filePathList'paths :: [String]
  }
  deriving (FilePathList -> FilePathList -> Bool
(FilePathList -> FilePathList -> Bool)
-> (FilePathList -> FilePathList -> Bool) -> Eq FilePathList
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FilePathList -> FilePathList -> Bool
== :: FilePathList -> FilePathList -> Bool
$c/= :: FilePathList -> FilePathList -> Bool
/= :: FilePathList -> FilePathList -> Bool
Eq, Int -> FilePathList -> ShowS
[FilePathList] -> ShowS
FilePathList -> String
(Int -> FilePathList -> ShowS)
-> (FilePathList -> String)
-> ([FilePathList] -> ShowS)
-> Show FilePathList
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> FilePathList -> ShowS
showsPrec :: Int -> FilePathList -> ShowS
$cshow :: FilePathList -> String
show :: FilePathList -> String
$cshowList :: [FilePathList] -> ShowS
showList :: [FilePathList] -> ShowS
Show)

instance Storable FilePathList where
  sizeOf :: FilePathList -> Int
sizeOf FilePathList
_ = Int
16
  alignment :: FilePathList -> Int
alignment FilePathList
_ = Int
4
  peek :: Ptr FilePathList -> IO FilePathList
peek Ptr FilePathList
_p = do
    Integer
capacity <- CUInt -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUInt -> Integer) -> IO CUInt -> IO Integer
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUInt -> IO CUInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr FilePathList -> Ptr CUInt
p'filePathList'capacity Ptr FilePathList
_p)
    Int
count <- CUInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUInt -> Int) -> IO CUInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUInt -> IO CUInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr FilePathList -> Ptr CUInt
p'filePathList'count Ptr FilePathList
_p)
    Ptr CString
pathsPtr <- Ptr (Ptr CString) -> IO (Ptr CString)
forall a. Storable a => Ptr a -> IO a
peek (Ptr FilePathList -> Ptr (Ptr CString)
p'filePathList'paths Ptr FilePathList
_p)
    [CString]
pathsCStrings <- Int -> Ptr CString -> IO [CString]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekArray Int
count Ptr CString
pathsPtr
    [String]
paths <- (CString -> IO String) -> [CString] -> IO [String]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM CString -> IO String
peekCString [CString]
pathsCStrings
    FilePathList -> IO FilePathList
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (FilePathList -> IO FilePathList)
-> FilePathList -> IO FilePathList
forall a b. (a -> b) -> a -> b
$ Integer -> [String] -> FilePathList
FilePathList Integer
capacity [String]
paths
  poke :: Ptr FilePathList -> FilePathList -> IO ()
poke Ptr FilePathList
_p (FilePathList Integer
capacity [String]
paths) = do
    Ptr CUInt -> CUInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr FilePathList -> Ptr CUInt
p'filePathList'capacity Ptr FilePathList
_p) (Integer -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
capacity)
    Ptr CUInt -> CUInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr FilePathList -> Ptr CUInt
p'filePathList'count Ptr FilePathList
_p) (Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral ([String] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
paths))
    [CString]
pathsCStrings <- (String -> IO CString) -> [String] -> IO [CString]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM String -> IO CString
newCString [String]
paths
    Ptr (Ptr CString) -> Ptr CString -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr FilePathList -> Ptr (Ptr CString)
p'filePathList'paths Ptr FilePathList
_p) (Ptr CString -> IO ()) -> IO (Ptr CString) -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< [CString] -> IO (Ptr CString)
forall a. Storable a => [a] -> IO (Ptr a)
newArray [CString]
pathsCStrings
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

p'filePathList'capacity :: Ptr FilePathList -> Ptr CUInt
p'filePathList'capacity :: Ptr FilePathList -> Ptr CUInt
p'filePathList'capacity = (Ptr FilePathList -> Int -> Ptr CUInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'filePathList'count :: Ptr FilePathList -> Ptr CUInt
p'filePathList'count :: Ptr FilePathList -> Ptr CUInt
p'filePathList'count = (Ptr FilePathList -> Int -> Ptr CUInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4)

-- array (filePathList'count)
p'filePathList'paths :: Ptr FilePathList -> Ptr (Ptr CString)
p'filePathList'paths :: Ptr FilePathList -> Ptr (Ptr CString)
p'filePathList'paths = (Ptr FilePathList -> Int -> Ptr (Ptr CString)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8)

instance Freeable FilePathList where
  rlFreeDependents :: FilePathList -> Ptr FilePathList -> IO ()
rlFreeDependents FilePathList
val Ptr FilePathList
ptr = do
    Ptr CString
pathsPtr <- Ptr (Ptr CString) -> IO (Ptr CString)
forall a. Storable a => Ptr a -> IO a
peek (Ptr FilePathList -> Ptr (Ptr CString)
p'filePathList'paths Ptr FilePathList
ptr)
    [CString]
pathsCStrings <- Int -> Ptr CString -> IO [CString]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekArray ([String] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length ([String] -> Int) -> [String] -> Int
forall a b. (a -> b) -> a -> b
$ FilePathList -> [String]
filePathList'paths FilePathList
val) Ptr CString
pathsPtr
    (CString -> IO ()) -> [CString] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (Ptr () -> IO ()
c'free (Ptr () -> IO ()) -> (CString -> Ptr ()) -> CString -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CString -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr) [CString]
pathsCStrings
    Ptr () -> IO ()
c'free (Ptr () -> IO ()) -> Ptr () -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CString -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr Ptr CString
pathsPtr

data AutomationEvent = AutomationEvent
  { AutomationEvent -> Integer
automationEvent'frame :: Integer,
    AutomationEvent -> Integer
automationEvent'type :: Integer,
    AutomationEvent -> [Int]
automationEvent'params :: [Int]
  }
  deriving (AutomationEvent -> AutomationEvent -> Bool
(AutomationEvent -> AutomationEvent -> Bool)
-> (AutomationEvent -> AutomationEvent -> Bool)
-> Eq AutomationEvent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AutomationEvent -> AutomationEvent -> Bool
== :: AutomationEvent -> AutomationEvent -> Bool
$c/= :: AutomationEvent -> AutomationEvent -> Bool
/= :: AutomationEvent -> AutomationEvent -> Bool
Eq, Int -> AutomationEvent -> ShowS
[AutomationEvent] -> ShowS
AutomationEvent -> String
(Int -> AutomationEvent -> ShowS)
-> (AutomationEvent -> String)
-> ([AutomationEvent] -> ShowS)
-> Show AutomationEvent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AutomationEvent -> ShowS
showsPrec :: Int -> AutomationEvent -> ShowS
$cshow :: AutomationEvent -> String
show :: AutomationEvent -> String
$cshowList :: [AutomationEvent] -> ShowS
showList :: [AutomationEvent] -> ShowS
Show, AutomationEvent -> Ptr AutomationEvent -> IO ()
(AutomationEvent -> Ptr AutomationEvent -> IO ())
-> (AutomationEvent -> Ptr AutomationEvent -> IO ())
-> Freeable AutomationEvent
forall a.
(a -> Ptr a -> IO ()) -> (a -> Ptr a -> IO ()) -> Freeable a
$crlFreeDependents :: AutomationEvent -> Ptr AutomationEvent -> IO ()
rlFreeDependents :: AutomationEvent -> Ptr AutomationEvent -> IO ()
$crlFree :: AutomationEvent -> Ptr AutomationEvent -> IO ()
rlFree :: AutomationEvent -> Ptr AutomationEvent -> IO ()
Freeable)

instance Storable AutomationEvent where
  sizeOf :: AutomationEvent -> Int
sizeOf AutomationEvent
_ = Int
24
  alignment :: AutomationEvent -> Int
alignment AutomationEvent
_ = Int
4
  peek :: Ptr AutomationEvent -> IO AutomationEvent
peek Ptr AutomationEvent
_p = do
    Integer
frame <- CUInt -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUInt -> Integer) -> IO CUInt -> IO Integer
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUInt -> IO CUInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr AutomationEvent -> Ptr CUInt
p'automationEvent'frame Ptr AutomationEvent
_p)
    Integer
aeType <- CUInt -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUInt -> Integer) -> IO CUInt -> IO Integer
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUInt -> IO CUInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr AutomationEvent -> Ptr CUInt
p'automationEvent'type Ptr AutomationEvent
_p)
    [Int]
params <- (CInt -> Int) -> [CInt] -> [Int]
forall a b. (a -> b) -> [a] -> [b]
map CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ([CInt] -> [Int]) -> IO [CInt] -> IO [Int]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> Ptr CInt -> IO [CInt]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekStaticArray Int
4 (Ptr AutomationEvent -> Ptr CInt
p'automationEvent'params Ptr AutomationEvent
_p)
    AutomationEvent -> IO AutomationEvent
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (AutomationEvent -> IO AutomationEvent)
-> AutomationEvent -> IO AutomationEvent
forall a b. (a -> b) -> a -> b
$ Integer -> Integer -> [Int] -> AutomationEvent
AutomationEvent Integer
frame Integer
aeType [Int]
params
  poke :: Ptr AutomationEvent -> AutomationEvent -> IO ()
poke Ptr AutomationEvent
_p (AutomationEvent Integer
frame Integer
aeType [Int]
params) = do
    Ptr CUInt -> CUInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AutomationEvent -> Ptr CUInt
p'automationEvent'frame Ptr AutomationEvent
_p) (Integer -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
frame)
    Ptr CUInt -> CUInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AutomationEvent -> Ptr CUInt
p'automationEvent'type Ptr AutomationEvent
_p) (Integer -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
aeType)
    Ptr CInt -> [CInt] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeStaticArray (Ptr AutomationEvent -> Ptr CInt
p'automationEvent'params Ptr AutomationEvent
_p) ((Int -> CInt) -> [Int] -> [CInt]
forall a b. (a -> b) -> [a] -> [b]
map Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral [Int]
params)
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

p'automationEvent'frame :: Ptr AutomationEvent -> Ptr CUInt
p'automationEvent'frame :: Ptr AutomationEvent -> Ptr CUInt
p'automationEvent'frame = (Ptr AutomationEvent -> Int -> Ptr CUInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'automationEvent'type :: Ptr AutomationEvent -> Ptr CUInt
p'automationEvent'type :: Ptr AutomationEvent -> Ptr CUInt
p'automationEvent'type = (Ptr AutomationEvent -> Int -> Ptr CUInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4)

-- static array (4)
p'automationEvent'params :: Ptr AutomationEvent -> Ptr CInt
p'automationEvent'params :: Ptr AutomationEvent -> Ptr CInt
p'automationEvent'params = (Ptr AutomationEvent -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8)

data AutomationEventList = AutomationEventList
  { AutomationEventList -> Integer
automationEventList'capacity :: Integer,
    AutomationEventList -> [AutomationEvent]
automationEventList'events :: [AutomationEvent]
  }
  deriving (AutomationEventList -> AutomationEventList -> Bool
(AutomationEventList -> AutomationEventList -> Bool)
-> (AutomationEventList -> AutomationEventList -> Bool)
-> Eq AutomationEventList
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AutomationEventList -> AutomationEventList -> Bool
== :: AutomationEventList -> AutomationEventList -> Bool
$c/= :: AutomationEventList -> AutomationEventList -> Bool
/= :: AutomationEventList -> AutomationEventList -> Bool
Eq, Int -> AutomationEventList -> ShowS
[AutomationEventList] -> ShowS
AutomationEventList -> String
(Int -> AutomationEventList -> ShowS)
-> (AutomationEventList -> String)
-> ([AutomationEventList] -> ShowS)
-> Show AutomationEventList
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AutomationEventList -> ShowS
showsPrec :: Int -> AutomationEventList -> ShowS
$cshow :: AutomationEventList -> String
show :: AutomationEventList -> String
$cshowList :: [AutomationEventList] -> ShowS
showList :: [AutomationEventList] -> ShowS
Show)

instance Storable AutomationEventList where
  sizeOf :: AutomationEventList -> Int
sizeOf AutomationEventList
_ = Int
16
  alignment :: AutomationEventList -> Int
alignment AutomationEventList
_ = Int
8
  peek :: Ptr AutomationEventList -> IO AutomationEventList
peek Ptr AutomationEventList
_p = do
    Integer
capacity <- CUInt -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUInt -> Integer) -> IO CUInt -> IO Integer
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUInt -> IO CUInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr AutomationEventList -> Ptr CUInt
p'automationEventList'capacity Ptr AutomationEventList
_p)
    Int
count <- CUInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CUInt -> Int) -> IO CUInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CUInt -> IO CUInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr AutomationEventList -> Ptr CUInt
p'automationEventList'count Ptr AutomationEventList
_p)
    [AutomationEvent]
events <- Int -> Ptr AutomationEvent -> IO [AutomationEvent]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekArray Int
count (Ptr AutomationEvent -> IO [AutomationEvent])
-> IO (Ptr AutomationEvent) -> IO [AutomationEvent]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr AutomationEvent) -> IO (Ptr AutomationEvent)
forall a. Storable a => Ptr a -> IO a
peek (Ptr AutomationEventList -> Ptr (Ptr AutomationEvent)
p'automationEventList'events Ptr AutomationEventList
_p)
    AutomationEventList -> IO AutomationEventList
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (AutomationEventList -> IO AutomationEventList)
-> AutomationEventList -> IO AutomationEventList
forall a b. (a -> b) -> a -> b
$ Integer -> [AutomationEvent] -> AutomationEventList
AutomationEventList Integer
capacity [AutomationEvent]
events
  poke :: Ptr AutomationEventList -> AutomationEventList -> IO ()
poke Ptr AutomationEventList
_p (AutomationEventList Integer
capacity [AutomationEvent]
events) = do
    Ptr CUInt -> CUInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AutomationEventList -> Ptr CUInt
p'automationEventList'capacity Ptr AutomationEventList
_p) (Integer -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
capacity)
    Ptr CUInt -> CUInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AutomationEventList -> Ptr CUInt
p'automationEventList'count Ptr AutomationEventList
_p) (Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral ([AutomationEvent] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [AutomationEvent]
events))
    Ptr AutomationEvent
eventsPtr <- Int -> IO (Ptr AutomationEvent)
forall a. Storable a => Int -> IO (Ptr a)
mallocArray (Integer -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
capacity)
    Ptr AutomationEvent -> [AutomationEvent] -> IO ()
forall a. Storable a => Ptr a -> [a] -> IO ()
pokeArray Ptr AutomationEvent
eventsPtr [AutomationEvent]
events
    Ptr (Ptr AutomationEvent) -> Ptr AutomationEvent -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AutomationEventList -> Ptr (Ptr AutomationEvent)
p'automationEventList'events Ptr AutomationEventList
_p) Ptr AutomationEvent
eventsPtr
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

p'automationEventList'capacity :: Ptr AutomationEventList -> Ptr CUInt
p'automationEventList'capacity :: Ptr AutomationEventList -> Ptr CUInt
p'automationEventList'capacity = (Ptr AutomationEventList -> Int -> Ptr CUInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0)

p'automationEventList'count :: Ptr AutomationEventList -> Ptr CUInt
p'automationEventList'count :: Ptr AutomationEventList -> Ptr CUInt
p'automationEventList'count = (Ptr AutomationEventList -> Int -> Ptr CUInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4)

-- array (automationEventList'count)
p'automationEventList'events :: Ptr AutomationEventList -> Ptr (Ptr AutomationEvent)
p'automationEventList'events :: Ptr AutomationEventList -> Ptr (Ptr AutomationEvent)
p'automationEventList'events = (Ptr AutomationEventList -> Int -> Ptr (Ptr AutomationEvent)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8)

instance Freeable AutomationEventList where
  rlFreeDependents :: AutomationEventList -> Ptr AutomationEventList -> IO ()
rlFreeDependents AutomationEventList
_ Ptr AutomationEventList
ptr = do
    Ptr () -> IO ()
c'free (Ptr () -> IO ())
-> (Ptr AutomationEvent -> Ptr ()) -> Ptr AutomationEvent -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr AutomationEvent -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (Ptr AutomationEvent -> IO ()) -> IO (Ptr AutomationEvent) -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr AutomationEvent) -> IO (Ptr AutomationEvent)
forall a. Storable a => Ptr a -> IO a
peek (Ptr AutomationEventList -> Ptr (Ptr AutomationEvent)
p'automationEventList'events Ptr AutomationEventList
ptr)

type AutomationEventListRef = Ptr AutomationEventList

---------------------------------------
-- core callbacks ---------------------
---------------------------------------

type LoadFileDataCallback = String -> IO [Integer]

type SaveFileDataCallback a = String -> Ptr a -> Integer -> IO Bool

type LoadFileTextCallback = String -> IO String

type SaveFileTextCallback = String -> String -> IO Bool

type C'LoadFileDataCallback = FunPtr (CString -> Ptr CUInt -> IO (Ptr CUChar))

type C'SaveFileDataCallback = FunPtr (CString -> Ptr () -> CUInt -> IO CInt)

type C'LoadFileTextCallback = FunPtr (CString -> IO CString)

type C'SaveFileTextCallback = FunPtr (CString -> CString -> IO CInt)