module Graphics.UI.GLUT.Callbacks.Window (
DisplayCallback, displayCallback, overlayDisplayCallback,
ReshapeCallback, reshapeCallback,
PositionCallback, positionCallback,
Visibility(..), VisibilityCallback, visibilityCallback,
WindowState(..), WindowStateCallback, windowStateCallback,
CloseCallback, closeCallback,
InitContextCallback, initContextCallback,
AppStatus(..), AppStatusCallback, appStatusCallback,
KeyboardCallback, keyboardCallback, keyboardUpCallback,
SpecialCallback, specialCallback, specialUpCallback,
MouseCallback, mouseCallback,
Key(..), SpecialKey(..), MouseButton(..), KeyState(..), Modifiers(..),
KeyboardMouseCallback, keyboardMouseCallback,
WheelNumber, WheelDirection, MouseWheelCallback, mouseWheelCallback,
MotionCallback, motionCallback, passiveMotionCallback,
Crossing(..), CrossingCallback, crossingCallback,
SpaceballMotion, SpaceballRotation, ButtonIndex, SpaceballInput(..),
SpaceballCallback, spaceballCallback,
DialAndButtonBoxInput(..), DialIndex,
DialAndButtonBoxCallback, dialAndButtonBoxCallback,
TabletPosition(..), TabletInput(..), TabletCallback, tabletCallback,
JoystickButtons(..), JoystickPosition(..),
JoystickCallback, joystickCallback,
TouchID,
MultiMouseCallback, multiMouseCallback,
MultiCrossingCallback, multiCrossingCallback,
MultiMotionCallback, multiMotionCallback, multiPassiveMotionCallback
) where
import Data.Bits ( (.&.) )
import Data.Char ( chr )
import Data.Maybe ( fromJust )
import Data.StateVar ( SettableStateVar, makeSettableStateVar )
import Foreign.C.Types ( CInt, CUInt )
import Graphics.Rendering.OpenGL ( Position(..), Size(..) )
import Graphics.UI.GLUT.Callbacks.Registration
import Graphics.UI.GLUT.Raw
import Graphics.UI.GLUT.State
import Graphics.UI.GLUT.Types
type DisplayCallback = IO ()
displayCallback :: SettableStateVar DisplayCallback
displayCallback :: SettableStateVar DisplayCallback
displayCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
DisplayCB forall (m :: * -> *). MonadIO m => FunPtr DisplayCallback -> m ()
glutDisplayFunc DisplayCallback -> IO (FunPtr DisplayCallback)
makeDisplayFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a
Just
overlayDisplayCallback :: SettableStateVar (Maybe DisplayCallback)
overlayDisplayCallback :: SettableStateVar (Maybe DisplayCallback)
overlayDisplayCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
OverlayDisplayCB forall (m :: * -> *). MonadIO m => FunPtr DisplayCallback -> m ()
glutOverlayDisplayFunc DisplayCallback -> IO (FunPtr DisplayCallback)
makeOverlayDisplayFunc
type ReshapeCallback = Size -> IO ()
reshapeCallback :: SettableStateVar (Maybe ReshapeCallback)
reshapeCallback :: SettableStateVar (Maybe ReshapeCallback)
reshapeCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
ReshapeCB forall (m :: * -> *). MonadIO m => FunPtr ReshapeFunc -> m ()
glutReshapeFunc (ReshapeFunc -> IO (FunPtr ReshapeFunc)
makeReshapeFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {t}.
(Integral a, Integral a) =>
(Size -> t) -> a -> a -> t
unmarshal)
where unmarshal :: (Size -> t) -> a -> a -> t
unmarshal Size -> t
cb a
w a
h = Size -> t
cb (GLsizei -> GLsizei -> Size
Size (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
w) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
h))
type PositionCallback = Position -> IO ()
positionCallback :: SettableStateVar (Maybe PositionCallback)
positionCallback :: SettableStateVar (Maybe PositionCallback)
positionCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
PositionCB forall (m :: * -> *). MonadIO m => FunPtr ReshapeFunc -> m ()
glutPositionFunc (ReshapeFunc -> IO (FunPtr ReshapeFunc)
makePositionFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {t}.
(Integral a, Integral a) =>
(Position -> t) -> a -> a -> t
unmarshal)
where unmarshal :: (Position -> t) -> a -> a -> t
unmarshal Position -> t
cb a
x a
y = Position -> t
cb (GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
data Visibility
= NotVisible
| Visible
deriving ( Visibility -> Visibility -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Visibility -> Visibility -> Bool
$c/= :: Visibility -> Visibility -> Bool
== :: Visibility -> Visibility -> Bool
$c== :: Visibility -> Visibility -> Bool
Eq, Eq Visibility
Visibility -> Visibility -> Bool
Visibility -> Visibility -> Ordering
Visibility -> Visibility -> Visibility
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Visibility -> Visibility -> Visibility
$cmin :: Visibility -> Visibility -> Visibility
max :: Visibility -> Visibility -> Visibility
$cmax :: Visibility -> Visibility -> Visibility
>= :: Visibility -> Visibility -> Bool
$c>= :: Visibility -> Visibility -> Bool
> :: Visibility -> Visibility -> Bool
$c> :: Visibility -> Visibility -> Bool
<= :: Visibility -> Visibility -> Bool
$c<= :: Visibility -> Visibility -> Bool
< :: Visibility -> Visibility -> Bool
$c< :: Visibility -> Visibility -> Bool
compare :: Visibility -> Visibility -> Ordering
$ccompare :: Visibility -> Visibility -> Ordering
Ord, TouchID -> Visibility -> ShowS
[Visibility] -> ShowS
Visibility -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Visibility] -> ShowS
$cshowList :: [Visibility] -> ShowS
show :: Visibility -> String
$cshow :: Visibility -> String
showsPrec :: TouchID -> Visibility -> ShowS
$cshowsPrec :: TouchID -> Visibility -> ShowS
Show )
unmarshalVisibility :: CInt -> Visibility
unmarshalVisibility :: CInt -> Visibility
unmarshalVisibility CInt
x
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_NOT_VISIBLE = Visibility
NotVisible
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_VISIBLE = Visibility
Visible
| Bool
otherwise = forall a. HasCallStack => String -> a
error (String
"unmarshalVisibility: illegal value " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show CInt
x)
type VisibilityCallback = Visibility -> IO ()
visibilityCallback :: SettableStateVar (Maybe VisibilityCallback)
visibilityCallback :: SettableStateVar (Maybe VisibilityCallback)
visibilityCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
VisibilityCB forall (m :: * -> *). MonadIO m => FunPtr VisibilityFunc -> m ()
glutVisibilityFunc
(VisibilityFunc -> IO (FunPtr VisibilityFunc)
makeVisibilityFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {c}. (Visibility -> c) -> CInt -> c
unmarshal)
where unmarshal :: (Visibility -> c) -> CInt -> c
unmarshal Visibility -> c
cb = Visibility -> c
cb forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Visibility
unmarshalVisibility
data WindowState
= Unmapped
| FullyRetained
| PartiallyRetained
| FullyCovered
deriving ( WindowState -> WindowState -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: WindowState -> WindowState -> Bool
$c/= :: WindowState -> WindowState -> Bool
== :: WindowState -> WindowState -> Bool
$c== :: WindowState -> WindowState -> Bool
Eq, Eq WindowState
WindowState -> WindowState -> Bool
WindowState -> WindowState -> Ordering
WindowState -> WindowState -> WindowState
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: WindowState -> WindowState -> WindowState
$cmin :: WindowState -> WindowState -> WindowState
max :: WindowState -> WindowState -> WindowState
$cmax :: WindowState -> WindowState -> WindowState
>= :: WindowState -> WindowState -> Bool
$c>= :: WindowState -> WindowState -> Bool
> :: WindowState -> WindowState -> Bool
$c> :: WindowState -> WindowState -> Bool
<= :: WindowState -> WindowState -> Bool
$c<= :: WindowState -> WindowState -> Bool
< :: WindowState -> WindowState -> Bool
$c< :: WindowState -> WindowState -> Bool
compare :: WindowState -> WindowState -> Ordering
$ccompare :: WindowState -> WindowState -> Ordering
Ord, TouchID -> WindowState -> ShowS
[WindowState] -> ShowS
WindowState -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [WindowState] -> ShowS
$cshowList :: [WindowState] -> ShowS
show :: WindowState -> String
$cshow :: WindowState -> String
showsPrec :: TouchID -> WindowState -> ShowS
$cshowsPrec :: TouchID -> WindowState -> ShowS
Show )
unmarshalWindowState :: CInt -> WindowState
unmarshalWindowState :: CInt -> WindowState
unmarshalWindowState CInt
x
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_HIDDEN = WindowState
Unmapped
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_FULLY_RETAINED = WindowState
FullyRetained
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_PARTIALLY_RETAINED = WindowState
PartiallyRetained
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_FULLY_COVERED = WindowState
FullyCovered
| Bool
otherwise = forall a. HasCallStack => String -> a
error (String
"unmarshalWindowState: illegal value " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show CInt
x)
type WindowStateCallback = WindowState -> IO ()
windowStateCallback :: SettableStateVar (Maybe WindowStateCallback)
windowStateCallback :: SettableStateVar (Maybe WindowStateCallback)
windowStateCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
WindowStatusCB forall (m :: * -> *). MonadIO m => FunPtr VisibilityFunc -> m ()
glutWindowStatusFunc
(VisibilityFunc -> IO (FunPtr VisibilityFunc)
makeWindowStatusFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {c}. (WindowState -> c) -> CInt -> c
unmarshal)
where unmarshal :: (WindowState -> c) -> CInt -> c
unmarshal WindowState -> c
cb = WindowState -> c
cb forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> WindowState
unmarshalWindowState
type CloseCallback = IO ()
closeCallback :: SettableStateVar (Maybe CloseCallback)
closeCallback :: SettableStateVar (Maybe DisplayCallback)
closeCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
CloseCB forall (m :: * -> *). MonadIO m => FunPtr DisplayCallback -> m ()
glutCloseFunc DisplayCallback -> IO (FunPtr DisplayCallback)
makeCloseFunc
type InitContextCallback = IO ()
initContextCallback :: SettableStateVar (Maybe InitContextCallback)
initContextCallback :: SettableStateVar (Maybe DisplayCallback)
initContextCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
InitContextCB forall (m :: * -> *). MonadIO m => FunPtr DisplayCallback -> m ()
glutInitContextFunc DisplayCallback -> IO (FunPtr DisplayCallback)
makeInitContextFunc
data AppStatus
= AppStatusPause
| AppStatusResume
deriving ( AppStatus -> AppStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AppStatus -> AppStatus -> Bool
$c/= :: AppStatus -> AppStatus -> Bool
== :: AppStatus -> AppStatus -> Bool
$c== :: AppStatus -> AppStatus -> Bool
Eq, Eq AppStatus
AppStatus -> AppStatus -> Bool
AppStatus -> AppStatus -> Ordering
AppStatus -> AppStatus -> AppStatus
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: AppStatus -> AppStatus -> AppStatus
$cmin :: AppStatus -> AppStatus -> AppStatus
max :: AppStatus -> AppStatus -> AppStatus
$cmax :: AppStatus -> AppStatus -> AppStatus
>= :: AppStatus -> AppStatus -> Bool
$c>= :: AppStatus -> AppStatus -> Bool
> :: AppStatus -> AppStatus -> Bool
$c> :: AppStatus -> AppStatus -> Bool
<= :: AppStatus -> AppStatus -> Bool
$c<= :: AppStatus -> AppStatus -> Bool
< :: AppStatus -> AppStatus -> Bool
$c< :: AppStatus -> AppStatus -> Bool
compare :: AppStatus -> AppStatus -> Ordering
$ccompare :: AppStatus -> AppStatus -> Ordering
Ord, TouchID -> AppStatus -> ShowS
[AppStatus] -> ShowS
AppStatus -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AppStatus] -> ShowS
$cshowList :: [AppStatus] -> ShowS
show :: AppStatus -> String
$cshow :: AppStatus -> String
showsPrec :: TouchID -> AppStatus -> ShowS
$cshowsPrec :: TouchID -> AppStatus -> ShowS
Show )
unmarshalAppStatus :: CInt -> AppStatus
unmarshalAppStatus :: CInt -> AppStatus
unmarshalAppStatus CInt
x
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_APPSTATUS_PAUSE = AppStatus
AppStatusPause
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_APPSTATUS_RESUME = AppStatus
AppStatusResume
| Bool
otherwise = forall a. HasCallStack => String -> a
error (String
"unmarshalAppStatus: illegal value " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show CInt
x)
type AppStatusCallback = AppStatus -> IO ()
appStatusCallback :: SettableStateVar (Maybe AppStatusCallback)
appStatusCallback :: SettableStateVar (Maybe AppStatusCallback)
appStatusCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
AppStatusCB forall (m :: * -> *). MonadIO m => FunPtr VisibilityFunc -> m ()
glutAppStatusFunc
(VisibilityFunc -> IO (FunPtr VisibilityFunc)
makeAppStatusFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {c}. (AppStatus -> c) -> CInt -> c
unmarshal)
where unmarshal :: (AppStatus -> c) -> CInt -> c
unmarshal AppStatus -> c
cb = AppStatus -> c
cb forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> AppStatus
unmarshalAppStatus
type KeyboardCallback = Char -> Position -> IO ()
setKeyboardCallback :: Maybe KeyboardCallback -> IO ()
setKeyboardCallback :: Maybe KeyboardCallback -> DisplayCallback
setKeyboardCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
KeyboardCB forall (m :: * -> *). MonadIO m => FunPtr KeyboardFunc -> m ()
glutKeyboardFunc (KeyboardFunc -> IO (FunPtr KeyboardFunc)
makeKeyboardFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {t}.
(Integral a, Integral a, Integral a) =>
(Char -> Position -> t) -> a -> a -> a -> t
unmarshal)
where unmarshal :: (Char -> Position -> t) -> a -> a -> a -> t
unmarshal Char -> Position -> t
cb a
c a
x a
y = Char -> Position -> t
cb (TouchID -> Char
chr (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
c))
(GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
keyboardCallback :: SettableStateVar (Maybe KeyboardCallback)
keyboardCallback :: SettableStateVar (Maybe KeyboardCallback)
keyboardCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar Maybe KeyboardCallback -> DisplayCallback
setKeyboardCallback
setKeyboardUpCallback :: Maybe KeyboardCallback -> IO ()
setKeyboardUpCallback :: Maybe KeyboardCallback -> DisplayCallback
setKeyboardUpCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
KeyboardUpCB forall (m :: * -> *). MonadIO m => FunPtr KeyboardFunc -> m ()
glutKeyboardUpFunc
(KeyboardFunc -> IO (FunPtr KeyboardFunc)
makeKeyboardUpFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {t}.
(Integral a, Integral a, Integral a) =>
(Char -> Position -> t) -> a -> a -> a -> t
unmarshal)
where unmarshal :: (Char -> Position -> t) -> a -> a -> a -> t
unmarshal Char -> Position -> t
cb a
c a
x a
y = Char -> Position -> t
cb (TouchID -> Char
chr (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
c))
(GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
keyboardUpCallback :: SettableStateVar (Maybe KeyboardCallback)
keyboardUpCallback :: SettableStateVar (Maybe KeyboardCallback)
keyboardUpCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar Maybe KeyboardCallback -> DisplayCallback
setKeyboardUpCallback
data SpecialKey
= KeyF1
| KeyF2
| KeyF3
| KeyF4
| KeyF5
| KeyF6
| KeyF7
| KeyF8
| KeyF9
| KeyF10
| KeyF11
| KeyF12
| KeyLeft
| KeyUp
| KeyRight
| KeyDown
| KeyPageUp
| KeyPageDown
| KeyHome
| KeyEnd
| KeyInsert
| KeyNumLock
| KeyBegin
| KeyDelete
| KeyShiftL
| KeyShiftR
| KeyCtrlL
| KeyCtrlR
| KeyAltL
| KeyAltR
| KeyUnknown Int
deriving ( SpecialKey -> SpecialKey -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SpecialKey -> SpecialKey -> Bool
$c/= :: SpecialKey -> SpecialKey -> Bool
== :: SpecialKey -> SpecialKey -> Bool
$c== :: SpecialKey -> SpecialKey -> Bool
Eq, Eq SpecialKey
SpecialKey -> SpecialKey -> Bool
SpecialKey -> SpecialKey -> Ordering
SpecialKey -> SpecialKey -> SpecialKey
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SpecialKey -> SpecialKey -> SpecialKey
$cmin :: SpecialKey -> SpecialKey -> SpecialKey
max :: SpecialKey -> SpecialKey -> SpecialKey
$cmax :: SpecialKey -> SpecialKey -> SpecialKey
>= :: SpecialKey -> SpecialKey -> Bool
$c>= :: SpecialKey -> SpecialKey -> Bool
> :: SpecialKey -> SpecialKey -> Bool
$c> :: SpecialKey -> SpecialKey -> Bool
<= :: SpecialKey -> SpecialKey -> Bool
$c<= :: SpecialKey -> SpecialKey -> Bool
< :: SpecialKey -> SpecialKey -> Bool
$c< :: SpecialKey -> SpecialKey -> Bool
compare :: SpecialKey -> SpecialKey -> Ordering
$ccompare :: SpecialKey -> SpecialKey -> Ordering
Ord, TouchID -> SpecialKey -> ShowS
[SpecialKey] -> ShowS
SpecialKey -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SpecialKey] -> ShowS
$cshowList :: [SpecialKey] -> ShowS
show :: SpecialKey -> String
$cshow :: SpecialKey -> String
showsPrec :: TouchID -> SpecialKey -> ShowS
$cshowsPrec :: TouchID -> SpecialKey -> ShowS
Show )
unmarshalSpecialKey :: CInt -> SpecialKey
unmarshalSpecialKey :: CInt -> SpecialKey
unmarshalSpecialKey CInt
x
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F1 = SpecialKey
KeyF1
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F2 = SpecialKey
KeyF2
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F3 = SpecialKey
KeyF3
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F4 = SpecialKey
KeyF4
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F5 = SpecialKey
KeyF5
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F6 = SpecialKey
KeyF6
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F7 = SpecialKey
KeyF7
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F8 = SpecialKey
KeyF8
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F9 = SpecialKey
KeyF9
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F10 = SpecialKey
KeyF10
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F11 = SpecialKey
KeyF11
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_F12 = SpecialKey
KeyF12
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_LEFT = SpecialKey
KeyLeft
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_UP = SpecialKey
KeyUp
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_RIGHT = SpecialKey
KeyRight
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_DOWN = SpecialKey
KeyDown
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_PAGE_UP = SpecialKey
KeyPageUp
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_PAGE_DOWN = SpecialKey
KeyPageDown
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_HOME = SpecialKey
KeyHome
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_END = SpecialKey
KeyEnd
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_INSERT = SpecialKey
KeyInsert
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_NUM_LOCK = SpecialKey
KeyNumLock
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_BEGIN = SpecialKey
KeyBegin
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_DELETE = SpecialKey
KeyDelete
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_SHIFT_L = SpecialKey
KeyShiftL
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_SHIFT_R = SpecialKey
KeyShiftR
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_CTRL_L = SpecialKey
KeyCtrlL
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_CTRL_R = SpecialKey
KeyCtrlR
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_ALT_L = SpecialKey
KeyAltL
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_KEY_ALT_R = SpecialKey
KeyAltR
| Bool
otherwise = TouchID -> SpecialKey
KeyUnknown (forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
x)
type SpecialCallback = SpecialKey -> Position -> IO ()
setSpecialCallback :: Maybe SpecialCallback -> IO ()
setSpecialCallback :: Maybe SpecialCallback -> DisplayCallback
setSpecialCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
SpecialCB forall (m :: * -> *). MonadIO m => FunPtr SpecialFunc -> m ()
glutSpecialFunc (SpecialFunc -> IO (FunPtr SpecialFunc)
makeSpecialFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {t}.
(Integral a, Integral a) =>
(SpecialKey -> Position -> t) -> CInt -> a -> a -> t
unmarshal)
where unmarshal :: (SpecialKey -> Position -> t) -> CInt -> a -> a -> t
unmarshal SpecialKey -> Position -> t
cb CInt
k a
x a
y = SpecialKey -> Position -> t
cb (CInt -> SpecialKey
unmarshalSpecialKey CInt
k)
(GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
specialCallback :: SettableStateVar (Maybe SpecialCallback)
specialCallback :: SettableStateVar (Maybe SpecialCallback)
specialCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar Maybe SpecialCallback -> DisplayCallback
setSpecialCallback
setSpecialUpCallback :: Maybe SpecialCallback -> IO ()
setSpecialUpCallback :: Maybe SpecialCallback -> DisplayCallback
setSpecialUpCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
SpecialUpCB forall (m :: * -> *). MonadIO m => FunPtr SpecialFunc -> m ()
glutSpecialUpFunc (SpecialFunc -> IO (FunPtr SpecialFunc)
makeSpecialUpFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {t}.
(Integral a, Integral a) =>
(SpecialKey -> Position -> t) -> CInt -> a -> a -> t
unmarshal)
where unmarshal :: (SpecialKey -> Position -> t) -> CInt -> a -> a -> t
unmarshal SpecialKey -> Position -> t
cb CInt
k a
x a
y = SpecialKey -> Position -> t
cb (CInt -> SpecialKey
unmarshalSpecialKey CInt
k)
(GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
specialUpCallback :: SettableStateVar (Maybe SpecialCallback)
specialUpCallback :: SettableStateVar (Maybe SpecialCallback)
specialUpCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar Maybe SpecialCallback -> DisplayCallback
setSpecialUpCallback
data KeyState
= Down
| Up
deriving ( KeyState -> KeyState -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: KeyState -> KeyState -> Bool
$c/= :: KeyState -> KeyState -> Bool
== :: KeyState -> KeyState -> Bool
$c== :: KeyState -> KeyState -> Bool
Eq, Eq KeyState
KeyState -> KeyState -> Bool
KeyState -> KeyState -> Ordering
KeyState -> KeyState -> KeyState
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: KeyState -> KeyState -> KeyState
$cmin :: KeyState -> KeyState -> KeyState
max :: KeyState -> KeyState -> KeyState
$cmax :: KeyState -> KeyState -> KeyState
>= :: KeyState -> KeyState -> Bool
$c>= :: KeyState -> KeyState -> Bool
> :: KeyState -> KeyState -> Bool
$c> :: KeyState -> KeyState -> Bool
<= :: KeyState -> KeyState -> Bool
$c<= :: KeyState -> KeyState -> Bool
< :: KeyState -> KeyState -> Bool
$c< :: KeyState -> KeyState -> Bool
compare :: KeyState -> KeyState -> Ordering
$ccompare :: KeyState -> KeyState -> Ordering
Ord, TouchID -> KeyState -> ShowS
[KeyState] -> ShowS
KeyState -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [KeyState] -> ShowS
$cshowList :: [KeyState] -> ShowS
show :: KeyState -> String
$cshow :: KeyState -> String
showsPrec :: TouchID -> KeyState -> ShowS
$cshowsPrec :: TouchID -> KeyState -> ShowS
Show )
unmarshalKeyState :: CInt -> KeyState
unmarshalKeyState :: CInt -> KeyState
unmarshalKeyState CInt
x
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_DOWN = KeyState
Down
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_UP = KeyState
Up
| Bool
otherwise = forall a. HasCallStack => String -> a
error (String
"unmarshalKeyState: illegal value " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show CInt
x)
type MouseCallback = MouseButton -> KeyState -> Position -> IO ()
setMouseCallback :: Maybe MouseCallback -> IO ()
setMouseCallback :: Maybe MouseCallback -> DisplayCallback
setMouseCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
MouseCB forall (m :: * -> *). MonadIO m => FunPtr MouseFunc -> m ()
glutMouseFunc (MouseFunc -> IO (FunPtr MouseFunc)
makeMouseFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {t}.
(Integral a, Integral a) =>
(MouseButton -> KeyState -> Position -> t)
-> CInt -> CInt -> a -> a -> t
unmarshal)
where unmarshal :: (MouseButton -> KeyState -> Position -> t)
-> CInt -> CInt -> a -> a -> t
unmarshal MouseButton -> KeyState -> Position -> t
cb CInt
b CInt
s a
x a
y = MouseButton -> KeyState -> Position -> t
cb (CInt -> MouseButton
unmarshalMouseButton CInt
b)
(CInt -> KeyState
unmarshalKeyState CInt
s)
(GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
mouseCallback :: SettableStateVar (Maybe MouseCallback)
mouseCallback :: SettableStateVar (Maybe MouseCallback)
mouseCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar Maybe MouseCallback -> DisplayCallback
setMouseCallback
data Modifiers = Modifiers { Modifiers -> KeyState
shift, Modifiers -> KeyState
ctrl, Modifiers -> KeyState
alt :: KeyState }
deriving ( Modifiers -> Modifiers -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Modifiers -> Modifiers -> Bool
$c/= :: Modifiers -> Modifiers -> Bool
== :: Modifiers -> Modifiers -> Bool
$c== :: Modifiers -> Modifiers -> Bool
Eq, Eq Modifiers
Modifiers -> Modifiers -> Bool
Modifiers -> Modifiers -> Ordering
Modifiers -> Modifiers -> Modifiers
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Modifiers -> Modifiers -> Modifiers
$cmin :: Modifiers -> Modifiers -> Modifiers
max :: Modifiers -> Modifiers -> Modifiers
$cmax :: Modifiers -> Modifiers -> Modifiers
>= :: Modifiers -> Modifiers -> Bool
$c>= :: Modifiers -> Modifiers -> Bool
> :: Modifiers -> Modifiers -> Bool
$c> :: Modifiers -> Modifiers -> Bool
<= :: Modifiers -> Modifiers -> Bool
$c<= :: Modifiers -> Modifiers -> Bool
< :: Modifiers -> Modifiers -> Bool
$c< :: Modifiers -> Modifiers -> Bool
compare :: Modifiers -> Modifiers -> Ordering
$ccompare :: Modifiers -> Modifiers -> Ordering
Ord, TouchID -> Modifiers -> ShowS
[Modifiers] -> ShowS
Modifiers -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Modifiers] -> ShowS
$cshowList :: [Modifiers] -> ShowS
show :: Modifiers -> String
$cshow :: Modifiers -> String
showsPrec :: TouchID -> Modifiers -> ShowS
$cshowsPrec :: TouchID -> Modifiers -> ShowS
Show )
unmarshalModifiers :: CInt -> Modifiers
unmarshalModifiers :: CInt -> Modifiers
unmarshalModifiers CInt
m = Modifiers {
shift :: KeyState
shift = if (CInt
m forall a. Bits a => a -> a -> a
.&. CInt
glut_ACTIVE_SHIFT) forall a. Eq a => a -> a -> Bool
/= CInt
0 then KeyState
Down else KeyState
Up,
ctrl :: KeyState
ctrl = if (CInt
m forall a. Bits a => a -> a -> a
.&. CInt
glut_ACTIVE_CTRL ) forall a. Eq a => a -> a -> Bool
/= CInt
0 then KeyState
Down else KeyState
Up,
alt :: KeyState
alt = if (CInt
m forall a. Bits a => a -> a -> a
.&. CInt
glut_ACTIVE_ALT ) forall a. Eq a => a -> a -> Bool
/= CInt
0 then KeyState
Down else KeyState
Up }
getModifiers :: IO Modifiers
getModifiers :: IO Modifiers
getModifiers = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Modifiers
unmarshalModifiers forall (m :: * -> *). MonadIO m => m CInt
glutGetModifiers
data Key
= Char Char
| SpecialKey SpecialKey
| MouseButton MouseButton
deriving ( Key -> Key -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Key -> Key -> Bool
$c/= :: Key -> Key -> Bool
== :: Key -> Key -> Bool
$c== :: Key -> Key -> Bool
Eq, Eq Key
Key -> Key -> Bool
Key -> Key -> Ordering
Key -> Key -> Key
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Key -> Key -> Key
$cmin :: Key -> Key -> Key
max :: Key -> Key -> Key
$cmax :: Key -> Key -> Key
>= :: Key -> Key -> Bool
$c>= :: Key -> Key -> Bool
> :: Key -> Key -> Bool
$c> :: Key -> Key -> Bool
<= :: Key -> Key -> Bool
$c<= :: Key -> Key -> Bool
< :: Key -> Key -> Bool
$c< :: Key -> Key -> Bool
compare :: Key -> Key -> Ordering
$ccompare :: Key -> Key -> Ordering
Ord, TouchID -> Key -> ShowS
[Key] -> ShowS
Key -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Key] -> ShowS
$cshowList :: [Key] -> ShowS
show :: Key -> String
$cshow :: Key -> String
showsPrec :: TouchID -> Key -> ShowS
$cshowsPrec :: TouchID -> Key -> ShowS
Show )
type KeyboardMouseCallback =
Key -> KeyState -> Modifiers -> Position -> IO ()
keyboardMouseCallback :: SettableStateVar (Maybe KeyboardMouseCallback)
keyboardMouseCallback :: SettableStateVar (Maybe KeyboardMouseCallback)
keyboardMouseCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar Maybe KeyboardMouseCallback -> DisplayCallback
setKeyboardMouseCallback
setKeyboardMouseCallback :: Maybe KeyboardMouseCallback -> IO ()
setKeyboardMouseCallback :: Maybe KeyboardMouseCallback -> DisplayCallback
setKeyboardMouseCallback Maybe KeyboardMouseCallback
Nothing = do
Maybe KeyboardCallback -> DisplayCallback
setKeyboardCallback forall a. Maybe a
Nothing
Maybe KeyboardCallback -> DisplayCallback
setKeyboardUpCallback forall a. Maybe a
Nothing
Maybe SpecialCallback -> DisplayCallback
setSpecialCallback forall a. Maybe a
Nothing
Maybe SpecialCallback -> DisplayCallback
setSpecialUpCallback forall a. Maybe a
Nothing
Maybe MouseCallback -> DisplayCallback
setMouseCallback forall a. Maybe a
Nothing
setKeyboardMouseCallback (Just KeyboardMouseCallback
cb) = do
Maybe KeyboardCallback -> DisplayCallback
setKeyboardCallback (forall a. a -> Maybe a
Just (\Char
c Position
p -> do Modifiers
m <- IO Modifiers
getModifiers
KeyboardMouseCallback
cb (Char -> Key
Char Char
c) KeyState
Down Modifiers
m Position
p))
Maybe KeyboardCallback -> DisplayCallback
setKeyboardUpCallback (forall a. a -> Maybe a
Just (\Char
c Position
p -> do Modifiers
m <- IO Modifiers
getModifiers
KeyboardMouseCallback
cb (Char -> Key
Char Char
c) KeyState
Up Modifiers
m Position
p))
Maybe SpecialCallback -> DisplayCallback
setSpecialCallback (forall a. a -> Maybe a
Just (\SpecialKey
s Position
p -> do Modifiers
m <- IO Modifiers
getModifiers
KeyboardMouseCallback
cb (SpecialKey -> Key
SpecialKey SpecialKey
s) KeyState
Down Modifiers
m Position
p))
Maybe SpecialCallback -> DisplayCallback
setSpecialUpCallback (forall a. a -> Maybe a
Just (\SpecialKey
s Position
p -> do Modifiers
m <- IO Modifiers
getModifiers
KeyboardMouseCallback
cb (SpecialKey -> Key
SpecialKey SpecialKey
s) KeyState
Up Modifiers
m Position
p))
Maybe MouseCallback -> DisplayCallback
setMouseCallback (forall a. a -> Maybe a
Just (\MouseButton
b KeyState
s Position
p -> do Modifiers
m <- IO Modifiers
getModifiers
KeyboardMouseCallback
cb (MouseButton -> Key
MouseButton MouseButton
b) KeyState
s Modifiers
m Position
p))
type WheelNumber = Int
type WheelDirection = Int
type MouseWheelCallback = WheelNumber -> WheelDirection -> Position -> IO ()
mouseWheelCallback :: SettableStateVar (Maybe MouseWheelCallback)
mouseWheelCallback :: SettableStateVar (Maybe MouseWheelCallback)
mouseWheelCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
MouseWheelCB forall (m :: * -> *). MonadIO m => FunPtr MouseFunc -> m ()
glutMouseWheelFunc (MouseFunc -> IO (FunPtr MouseFunc)
makeMouseWheelFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {a} {t} {t} {t}.
(Integral a, Integral a, Integral a, Integral a, Num t, Num t) =>
(t -> t -> Position -> t) -> a -> a -> a -> a -> t
unmarshal)
where unmarshal :: (t -> t -> Position -> t) -> a -> a -> a -> a -> t
unmarshal t -> t -> Position -> t
cb a
n a
d a
x a
y = t -> t -> Position -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
n) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
d)
(GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
type MotionCallback = Position -> IO ()
motionCallback :: SettableStateVar (Maybe MotionCallback)
motionCallback :: SettableStateVar (Maybe PositionCallback)
motionCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
MotionCB forall (m :: * -> *). MonadIO m => FunPtr ReshapeFunc -> m ()
glutMotionFunc (ReshapeFunc -> IO (FunPtr ReshapeFunc)
makeMotionFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {t}.
(Integral a, Integral a) =>
(Position -> t) -> a -> a -> t
unmarshal)
where unmarshal :: (Position -> t) -> a -> a -> t
unmarshal Position -> t
cb a
x a
y = Position -> t
cb (GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
passiveMotionCallback :: SettableStateVar (Maybe MotionCallback)
passiveMotionCallback :: SettableStateVar (Maybe PositionCallback)
passiveMotionCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
PassiveMotionCB forall (m :: * -> *). MonadIO m => FunPtr ReshapeFunc -> m ()
glutPassiveMotionFunc
(ReshapeFunc -> IO (FunPtr ReshapeFunc)
makePassiveMotionFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {t}.
(Integral a, Integral a) =>
(Position -> t) -> a -> a -> t
unmarshal)
where unmarshal :: (Position -> t) -> a -> a -> t
unmarshal Position -> t
cb a
x a
y = Position -> t
cb (GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
data Crossing
= WindowLeft
| WindowEntered
deriving ( Crossing -> Crossing -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Crossing -> Crossing -> Bool
$c/= :: Crossing -> Crossing -> Bool
== :: Crossing -> Crossing -> Bool
$c== :: Crossing -> Crossing -> Bool
Eq, Eq Crossing
Crossing -> Crossing -> Bool
Crossing -> Crossing -> Ordering
Crossing -> Crossing -> Crossing
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Crossing -> Crossing -> Crossing
$cmin :: Crossing -> Crossing -> Crossing
max :: Crossing -> Crossing -> Crossing
$cmax :: Crossing -> Crossing -> Crossing
>= :: Crossing -> Crossing -> Bool
$c>= :: Crossing -> Crossing -> Bool
> :: Crossing -> Crossing -> Bool
$c> :: Crossing -> Crossing -> Bool
<= :: Crossing -> Crossing -> Bool
$c<= :: Crossing -> Crossing -> Bool
< :: Crossing -> Crossing -> Bool
$c< :: Crossing -> Crossing -> Bool
compare :: Crossing -> Crossing -> Ordering
$ccompare :: Crossing -> Crossing -> Ordering
Ord, TouchID -> Crossing -> ShowS
[Crossing] -> ShowS
Crossing -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Crossing] -> ShowS
$cshowList :: [Crossing] -> ShowS
show :: Crossing -> String
$cshow :: Crossing -> String
showsPrec :: TouchID -> Crossing -> ShowS
$cshowsPrec :: TouchID -> Crossing -> ShowS
Show )
unmarshalCrossing :: CInt -> Crossing
unmarshalCrossing :: CInt -> Crossing
unmarshalCrossing CInt
x
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_LEFT = Crossing
WindowLeft
| CInt
x forall a. Eq a => a -> a -> Bool
== CInt
glut_ENTERED = Crossing
WindowEntered
| Bool
otherwise = forall a. HasCallStack => String -> a
error (String
"unmarshalCrossing: illegal value " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show CInt
x)
type CrossingCallback = Crossing -> IO ()
crossingCallback :: SettableStateVar (Maybe CrossingCallback)
crossingCallback :: SettableStateVar (Maybe CrossingCallback)
crossingCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
CrossingCB forall (m :: * -> *). MonadIO m => FunPtr VisibilityFunc -> m ()
glutEntryFunc (VisibilityFunc -> IO (FunPtr VisibilityFunc)
makeEntryFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {c}. (Crossing -> c) -> CInt -> c
unmarshal)
where unmarshal :: (Crossing -> c) -> CInt -> c
unmarshal Crossing -> c
cb = Crossing -> c
cb forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Crossing
unmarshalCrossing
type SpaceballMotion = Int
type SpaceballRotation = Int
type ButtonIndex = Int
data SpaceballInput
= SpaceballMotion SpaceballMotion SpaceballMotion SpaceballMotion
| SpaceballRotation SpaceballRotation SpaceballRotation SpaceballRotation
| SpaceballButton ButtonIndex KeyState
deriving ( SpaceballInput -> SpaceballInput -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SpaceballInput -> SpaceballInput -> Bool
$c/= :: SpaceballInput -> SpaceballInput -> Bool
== :: SpaceballInput -> SpaceballInput -> Bool
$c== :: SpaceballInput -> SpaceballInput -> Bool
Eq, Eq SpaceballInput
SpaceballInput -> SpaceballInput -> Bool
SpaceballInput -> SpaceballInput -> Ordering
SpaceballInput -> SpaceballInput -> SpaceballInput
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SpaceballInput -> SpaceballInput -> SpaceballInput
$cmin :: SpaceballInput -> SpaceballInput -> SpaceballInput
max :: SpaceballInput -> SpaceballInput -> SpaceballInput
$cmax :: SpaceballInput -> SpaceballInput -> SpaceballInput
>= :: SpaceballInput -> SpaceballInput -> Bool
$c>= :: SpaceballInput -> SpaceballInput -> Bool
> :: SpaceballInput -> SpaceballInput -> Bool
$c> :: SpaceballInput -> SpaceballInput -> Bool
<= :: SpaceballInput -> SpaceballInput -> Bool
$c<= :: SpaceballInput -> SpaceballInput -> Bool
< :: SpaceballInput -> SpaceballInput -> Bool
$c< :: SpaceballInput -> SpaceballInput -> Bool
compare :: SpaceballInput -> SpaceballInput -> Ordering
$ccompare :: SpaceballInput -> SpaceballInput -> Ordering
Ord, TouchID -> SpaceballInput -> ShowS
[SpaceballInput] -> ShowS
SpaceballInput -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SpaceballInput] -> ShowS
$cshowList :: [SpaceballInput] -> ShowS
show :: SpaceballInput -> String
$cshow :: SpaceballInput -> String
showsPrec :: TouchID -> SpaceballInput -> ShowS
$cshowsPrec :: TouchID -> SpaceballInput -> ShowS
Show )
type SpaceballCallback = SpaceballInput -> IO ()
spaceballCallback :: SettableStateVar (Maybe SpaceballCallback)
spaceballCallback :: SettableStateVar (Maybe SpaceballCallback)
spaceballCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar Maybe SpaceballCallback -> DisplayCallback
setSpaceballCallback
setSpaceballCallback :: Maybe SpaceballCallback -> IO ()
setSpaceballCallback :: Maybe SpaceballCallback -> DisplayCallback
setSpaceballCallback Maybe SpaceballCallback
Nothing = do
Maybe SpaceballMotionCallback -> DisplayCallback
setSpaceballMotionCallback forall a. Maybe a
Nothing
Maybe SpaceballMotionCallback -> DisplayCallback
setSpaceballRotationCallback forall a. Maybe a
Nothing
Maybe SpaceballButtonCallback -> DisplayCallback
setSpaceballButtonCallback forall a. Maybe a
Nothing
setSpaceballCallback (Just SpaceballCallback
cb) = do
Maybe SpaceballMotionCallback -> DisplayCallback
setSpaceballMotionCallback (forall a. a -> Maybe a
Just (\TouchID
x TouchID
y TouchID
z -> SpaceballCallback
cb (TouchID -> TouchID -> TouchID -> SpaceballInput
SpaceballMotion TouchID
x TouchID
y TouchID
z)))
Maybe SpaceballMotionCallback -> DisplayCallback
setSpaceballRotationCallback (forall a. a -> Maybe a
Just (\TouchID
x TouchID
y TouchID
z -> SpaceballCallback
cb (TouchID -> TouchID -> TouchID -> SpaceballInput
SpaceballRotation TouchID
x TouchID
y TouchID
z)))
Maybe SpaceballButtonCallback -> DisplayCallback
setSpaceballButtonCallback (forall a. a -> Maybe a
Just (\TouchID
b KeyState
s -> SpaceballCallback
cb (TouchID -> KeyState -> SpaceballInput
SpaceballButton TouchID
b KeyState
s)))
type SpaceballMotionCallback =
SpaceballMotion -> SpaceballMotion -> SpaceballMotion -> IO ()
setSpaceballMotionCallback :: Maybe SpaceballMotionCallback -> IO ()
setSpaceballMotionCallback :: Maybe SpaceballMotionCallback -> DisplayCallback
setSpaceballMotionCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
SpaceballMotionCB forall (m :: * -> *). MonadIO m => FunPtr SpecialFunc -> m ()
glutSpaceballMotionFunc
(SpecialFunc -> IO (FunPtr SpecialFunc)
makeSpaceballMotionFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {t} {t} {t} {t}.
(Integral a, Integral a, Integral a, Num t, Num t, Num t) =>
(t -> t -> t -> t) -> a -> a -> a -> t
unmarshal)
where unmarshal :: (t -> t -> t -> t) -> a -> a -> a -> t
unmarshal t -> t -> t -> t
cb a
x a
y a
z =
t -> t -> t -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
z)
type SpaceballRotationCallback =
SpaceballRotation -> SpaceballRotation -> SpaceballRotation -> IO ()
setSpaceballRotationCallback :: Maybe SpaceballRotationCallback -> IO ()
setSpaceballRotationCallback :: Maybe SpaceballMotionCallback -> DisplayCallback
setSpaceballRotationCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
SpaceballRotateCB forall (m :: * -> *). MonadIO m => FunPtr SpecialFunc -> m ()
glutSpaceballRotateFunc
(SpecialFunc -> IO (FunPtr SpecialFunc)
makeSpaceballRotateFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {t} {t} {t} {t}.
(Integral a, Integral a, Integral a, Num t, Num t, Num t) =>
(t -> t -> t -> t) -> a -> a -> a -> t
unmarshal)
where unmarshal :: (t -> t -> t -> t) -> a -> a -> a -> t
unmarshal t -> t -> t -> t
cb a
x a
y a
z =
t -> t -> t -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
z)
type SpaceballButtonCallback = ButtonIndex -> KeyState -> IO ()
setSpaceballButtonCallback :: Maybe SpaceballButtonCallback -> IO ()
setSpaceballButtonCallback :: Maybe SpaceballButtonCallback -> DisplayCallback
setSpaceballButtonCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
SpaceballButtonCB forall (m :: * -> *). MonadIO m => FunPtr ReshapeFunc -> m ()
glutSpaceballButtonFunc
(ReshapeFunc -> IO (FunPtr ReshapeFunc)
makeSpaceballButtonFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {t} {t}.
(Integral a, Num t) =>
(t -> KeyState -> t) -> a -> CInt -> t
unmarshal)
where unmarshal :: (t -> KeyState -> t) -> a -> CInt -> t
unmarshal t -> KeyState -> t
cb a
b CInt
s = t -> KeyState -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
b) (CInt -> KeyState
unmarshalKeyState CInt
s)
type DialIndex = Int
data DialAndButtonBoxInput
= DialAndButtonBoxButton ButtonIndex KeyState
| DialAndButtonBoxDial DialIndex Int
deriving ( DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
$c/= :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
== :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
$c== :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
Eq, Eq DialAndButtonBoxInput
DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
DialAndButtonBoxInput -> DialAndButtonBoxInput -> Ordering
DialAndButtonBoxInput
-> DialAndButtonBoxInput -> DialAndButtonBoxInput
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: DialAndButtonBoxInput
-> DialAndButtonBoxInput -> DialAndButtonBoxInput
$cmin :: DialAndButtonBoxInput
-> DialAndButtonBoxInput -> DialAndButtonBoxInput
max :: DialAndButtonBoxInput
-> DialAndButtonBoxInput -> DialAndButtonBoxInput
$cmax :: DialAndButtonBoxInput
-> DialAndButtonBoxInput -> DialAndButtonBoxInput
>= :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
$c>= :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
> :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
$c> :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
<= :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
$c<= :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
< :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
$c< :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Bool
compare :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Ordering
$ccompare :: DialAndButtonBoxInput -> DialAndButtonBoxInput -> Ordering
Ord, TouchID -> DialAndButtonBoxInput -> ShowS
[DialAndButtonBoxInput] -> ShowS
DialAndButtonBoxInput -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DialAndButtonBoxInput] -> ShowS
$cshowList :: [DialAndButtonBoxInput] -> ShowS
show :: DialAndButtonBoxInput -> String
$cshow :: DialAndButtonBoxInput -> String
showsPrec :: TouchID -> DialAndButtonBoxInput -> ShowS
$cshowsPrec :: TouchID -> DialAndButtonBoxInput -> ShowS
Show )
type DialAndButtonBoxCallback = DialAndButtonBoxInput -> IO ()
dialAndButtonBoxCallback :: SettableStateVar (Maybe DialAndButtonBoxCallback)
dialAndButtonBoxCallback :: SettableStateVar (Maybe DialAndButtonBoxCallback)
dialAndButtonBoxCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar Maybe DialAndButtonBoxCallback -> DisplayCallback
setDialAndButtonBoxCallback
setDialAndButtonBoxCallback :: Maybe DialAndButtonBoxCallback -> IO ()
setDialAndButtonBoxCallback :: Maybe DialAndButtonBoxCallback -> DisplayCallback
setDialAndButtonBoxCallback Maybe DialAndButtonBoxCallback
Nothing = do
Maybe SpaceballButtonCallback -> DisplayCallback
setButtonBoxCallback forall a. Maybe a
Nothing
Maybe DialsCallback -> DisplayCallback
setDialsCallback forall a. Maybe a
Nothing
setDialAndButtonBoxCallback (Just DialAndButtonBoxCallback
cb) = do
Maybe SpaceballButtonCallback -> DisplayCallback
setButtonBoxCallback (forall a. a -> Maybe a
Just (\TouchID
b KeyState
s -> DialAndButtonBoxCallback
cb (TouchID -> KeyState -> DialAndButtonBoxInput
DialAndButtonBoxButton TouchID
b KeyState
s)))
Maybe DialsCallback -> DisplayCallback
setDialsCallback (forall a. a -> Maybe a
Just (\TouchID
d TouchID
x -> DialAndButtonBoxCallback
cb (TouchID -> TouchID -> DialAndButtonBoxInput
DialAndButtonBoxDial TouchID
d TouchID
x)))
type ButtonBoxCallback = ButtonIndex -> KeyState -> IO ()
setButtonBoxCallback :: Maybe ButtonBoxCallback -> IO ()
setButtonBoxCallback :: Maybe SpaceballButtonCallback -> DisplayCallback
setButtonBoxCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
ButtonBoxCB forall (m :: * -> *). MonadIO m => FunPtr ReshapeFunc -> m ()
glutButtonBoxFunc (ReshapeFunc -> IO (FunPtr ReshapeFunc)
makeButtonBoxFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {t} {t}.
(Integral a, Num t) =>
(t -> KeyState -> t) -> a -> CInt -> t
unmarshal)
where unmarshal :: (t -> KeyState -> t) -> a -> CInt -> t
unmarshal t -> KeyState -> t
cb a
b CInt
s = t -> KeyState -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
b) (CInt -> KeyState
unmarshalKeyState CInt
s)
type DialsCallback = DialIndex -> Int -> IO ()
setDialsCallback :: Maybe DialsCallback -> IO ()
setDialsCallback :: Maybe DialsCallback -> DisplayCallback
setDialsCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
DialsCB forall (m :: * -> *). MonadIO m => FunPtr ReshapeFunc -> m ()
glutDialsFunc (ReshapeFunc -> IO (FunPtr ReshapeFunc)
makeDialsFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {t} {t} {t}.
(Integral a, Integral a, Num t, Num t) =>
(t -> t -> t) -> a -> a -> t
unmarshal)
where unmarshal :: (t -> t -> t) -> a -> a -> t
unmarshal t -> t -> t
cb a
d a
x = t -> t -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
d) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x)
data TabletPosition = TabletPosition Int Int
deriving ( TabletPosition -> TabletPosition -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TabletPosition -> TabletPosition -> Bool
$c/= :: TabletPosition -> TabletPosition -> Bool
== :: TabletPosition -> TabletPosition -> Bool
$c== :: TabletPosition -> TabletPosition -> Bool
Eq, Eq TabletPosition
TabletPosition -> TabletPosition -> Bool
TabletPosition -> TabletPosition -> Ordering
TabletPosition -> TabletPosition -> TabletPosition
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TabletPosition -> TabletPosition -> TabletPosition
$cmin :: TabletPosition -> TabletPosition -> TabletPosition
max :: TabletPosition -> TabletPosition -> TabletPosition
$cmax :: TabletPosition -> TabletPosition -> TabletPosition
>= :: TabletPosition -> TabletPosition -> Bool
$c>= :: TabletPosition -> TabletPosition -> Bool
> :: TabletPosition -> TabletPosition -> Bool
$c> :: TabletPosition -> TabletPosition -> Bool
<= :: TabletPosition -> TabletPosition -> Bool
$c<= :: TabletPosition -> TabletPosition -> Bool
< :: TabletPosition -> TabletPosition -> Bool
$c< :: TabletPosition -> TabletPosition -> Bool
compare :: TabletPosition -> TabletPosition -> Ordering
$ccompare :: TabletPosition -> TabletPosition -> Ordering
Ord, TouchID -> TabletPosition -> ShowS
[TabletPosition] -> ShowS
TabletPosition -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TabletPosition] -> ShowS
$cshowList :: [TabletPosition] -> ShowS
show :: TabletPosition -> String
$cshow :: TabletPosition -> String
showsPrec :: TouchID -> TabletPosition -> ShowS
$cshowsPrec :: TouchID -> TabletPosition -> ShowS
Show )
data TabletInput
= TabletMotion
| TabletButton ButtonIndex KeyState
deriving ( TabletInput -> TabletInput -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TabletInput -> TabletInput -> Bool
$c/= :: TabletInput -> TabletInput -> Bool
== :: TabletInput -> TabletInput -> Bool
$c== :: TabletInput -> TabletInput -> Bool
Eq, Eq TabletInput
TabletInput -> TabletInput -> Bool
TabletInput -> TabletInput -> Ordering
TabletInput -> TabletInput -> TabletInput
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TabletInput -> TabletInput -> TabletInput
$cmin :: TabletInput -> TabletInput -> TabletInput
max :: TabletInput -> TabletInput -> TabletInput
$cmax :: TabletInput -> TabletInput -> TabletInput
>= :: TabletInput -> TabletInput -> Bool
$c>= :: TabletInput -> TabletInput -> Bool
> :: TabletInput -> TabletInput -> Bool
$c> :: TabletInput -> TabletInput -> Bool
<= :: TabletInput -> TabletInput -> Bool
$c<= :: TabletInput -> TabletInput -> Bool
< :: TabletInput -> TabletInput -> Bool
$c< :: TabletInput -> TabletInput -> Bool
compare :: TabletInput -> TabletInput -> Ordering
$ccompare :: TabletInput -> TabletInput -> Ordering
Ord, TouchID -> TabletInput -> ShowS
[TabletInput] -> ShowS
TabletInput -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TabletInput] -> ShowS
$cshowList :: [TabletInput] -> ShowS
show :: TabletInput -> String
$cshow :: TabletInput -> String
showsPrec :: TouchID -> TabletInput -> ShowS
$cshowsPrec :: TouchID -> TabletInput -> ShowS
Show )
type TabletCallback = TabletInput -> TabletPosition -> IO ()
tabletCallback :: SettableStateVar (Maybe TabletCallback)
tabletCallback :: SettableStateVar (Maybe TabletCallback)
tabletCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar Maybe TabletCallback -> DisplayCallback
setTabletCallback
setTabletCallback :: Maybe TabletCallback -> IO ()
setTabletCallback :: Maybe TabletCallback -> DisplayCallback
setTabletCallback Maybe TabletCallback
Nothing = do
Maybe TabletMotionCallback -> DisplayCallback
setTabletMotionCallback forall a. Maybe a
Nothing
Maybe TabletButtonCallback -> DisplayCallback
setTabletButtonCallback forall a. Maybe a
Nothing
setTabletCallback (Just TabletCallback
cb) = do
Maybe TabletMotionCallback -> DisplayCallback
setTabletMotionCallback (forall a. a -> Maybe a
Just (\TabletPosition
p -> TabletCallback
cb TabletInput
TabletMotion TabletPosition
p))
Maybe TabletButtonCallback -> DisplayCallback
setTabletButtonCallback (forall a. a -> Maybe a
Just (\TouchID
b KeyState
s TabletPosition
p -> TabletCallback
cb (TouchID -> KeyState -> TabletInput
TabletButton TouchID
b KeyState
s) TabletPosition
p))
type TabletMotionCallback = TabletPosition -> IO ()
setTabletMotionCallback :: Maybe TabletMotionCallback -> IO ()
setTabletMotionCallback :: Maybe TabletMotionCallback -> DisplayCallback
setTabletMotionCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
TabletMotionCB forall (m :: * -> *). MonadIO m => FunPtr ReshapeFunc -> m ()
glutTabletMotionFunc
(ReshapeFunc -> IO (FunPtr ReshapeFunc)
makeTabletMotionFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {t}.
(Integral a, Integral a) =>
(TabletPosition -> t) -> a -> a -> t
unmarshal)
where unmarshal :: (TabletPosition -> t) -> a -> a -> t
unmarshal TabletPosition -> t
cb a
x a
y =
TabletPosition -> t
cb (TouchID -> TouchID -> TabletPosition
TabletPosition (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
type TabletButtonCallback = ButtonIndex -> KeyState -> TabletPosition -> IO ()
setTabletButtonCallback :: Maybe TabletButtonCallback -> IO ()
setTabletButtonCallback :: Maybe TabletButtonCallback -> DisplayCallback
setTabletButtonCallback =
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
TabletButtonCB forall (m :: * -> *). MonadIO m => FunPtr MouseFunc -> m ()
glutTabletButtonFunc
(MouseFunc -> IO (FunPtr MouseFunc)
makeTabletButtonFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {t} {t}.
(Integral a, Integral a, Integral a, Num t) =>
(t -> KeyState -> TabletPosition -> t) -> a -> CInt -> a -> a -> t
unmarshal)
where unmarshal :: (t -> KeyState -> TabletPosition -> t) -> a -> CInt -> a -> a -> t
unmarshal t -> KeyState -> TabletPosition -> t
cb a
b CInt
s a
x a
y =
t -> KeyState -> TabletPosition -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
b) (CInt -> KeyState
unmarshalKeyState CInt
s)
(TouchID -> TouchID -> TabletPosition
TabletPosition (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
data JoystickButtons = JoystickButtons {
JoystickButtons -> KeyState
joystickButtonA, JoystickButtons -> KeyState
joystickButtonB,
JoystickButtons -> KeyState
joystickButtonC, JoystickButtons -> KeyState
joystickButtonD :: KeyState }
deriving ( JoystickButtons -> JoystickButtons -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: JoystickButtons -> JoystickButtons -> Bool
$c/= :: JoystickButtons -> JoystickButtons -> Bool
== :: JoystickButtons -> JoystickButtons -> Bool
$c== :: JoystickButtons -> JoystickButtons -> Bool
Eq, Eq JoystickButtons
JoystickButtons -> JoystickButtons -> Bool
JoystickButtons -> JoystickButtons -> Ordering
JoystickButtons -> JoystickButtons -> JoystickButtons
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: JoystickButtons -> JoystickButtons -> JoystickButtons
$cmin :: JoystickButtons -> JoystickButtons -> JoystickButtons
max :: JoystickButtons -> JoystickButtons -> JoystickButtons
$cmax :: JoystickButtons -> JoystickButtons -> JoystickButtons
>= :: JoystickButtons -> JoystickButtons -> Bool
$c>= :: JoystickButtons -> JoystickButtons -> Bool
> :: JoystickButtons -> JoystickButtons -> Bool
$c> :: JoystickButtons -> JoystickButtons -> Bool
<= :: JoystickButtons -> JoystickButtons -> Bool
$c<= :: JoystickButtons -> JoystickButtons -> Bool
< :: JoystickButtons -> JoystickButtons -> Bool
$c< :: JoystickButtons -> JoystickButtons -> Bool
compare :: JoystickButtons -> JoystickButtons -> Ordering
$ccompare :: JoystickButtons -> JoystickButtons -> Ordering
Ord, TouchID -> JoystickButtons -> ShowS
[JoystickButtons] -> ShowS
JoystickButtons -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [JoystickButtons] -> ShowS
$cshowList :: [JoystickButtons] -> ShowS
show :: JoystickButtons -> String
$cshow :: JoystickButtons -> String
showsPrec :: TouchID -> JoystickButtons -> ShowS
$cshowsPrec :: TouchID -> JoystickButtons -> ShowS
Show )
unmarshalJoystickButtons :: CUInt -> JoystickButtons
unmarshalJoystickButtons :: CUInt -> JoystickButtons
unmarshalJoystickButtons CUInt
m = JoystickButtons {
joystickButtonA :: KeyState
joystickButtonA = if (CUInt
m forall a. Bits a => a -> a -> a
.&. CUInt
glut_JOYSTICK_BUTTON_A) forall a. Eq a => a -> a -> Bool
/= CUInt
0 then KeyState
Down else KeyState
Up,
joystickButtonB :: KeyState
joystickButtonB = if (CUInt
m forall a. Bits a => a -> a -> a
.&. CUInt
glut_JOYSTICK_BUTTON_B) forall a. Eq a => a -> a -> Bool
/= CUInt
0 then KeyState
Down else KeyState
Up,
joystickButtonC :: KeyState
joystickButtonC = if (CUInt
m forall a. Bits a => a -> a -> a
.&. CUInt
glut_JOYSTICK_BUTTON_C) forall a. Eq a => a -> a -> Bool
/= CUInt
0 then KeyState
Down else KeyState
Up,
joystickButtonD :: KeyState
joystickButtonD = if (CUInt
m forall a. Bits a => a -> a -> a
.&. CUInt
glut_JOYSTICK_BUTTON_D) forall a. Eq a => a -> a -> Bool
/= CUInt
0 then KeyState
Down else KeyState
Up }
data JoystickPosition = JoystickPosition Int Int Int
deriving ( JoystickPosition -> JoystickPosition -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: JoystickPosition -> JoystickPosition -> Bool
$c/= :: JoystickPosition -> JoystickPosition -> Bool
== :: JoystickPosition -> JoystickPosition -> Bool
$c== :: JoystickPosition -> JoystickPosition -> Bool
Eq, Eq JoystickPosition
JoystickPosition -> JoystickPosition -> Bool
JoystickPosition -> JoystickPosition -> Ordering
JoystickPosition -> JoystickPosition -> JoystickPosition
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: JoystickPosition -> JoystickPosition -> JoystickPosition
$cmin :: JoystickPosition -> JoystickPosition -> JoystickPosition
max :: JoystickPosition -> JoystickPosition -> JoystickPosition
$cmax :: JoystickPosition -> JoystickPosition -> JoystickPosition
>= :: JoystickPosition -> JoystickPosition -> Bool
$c>= :: JoystickPosition -> JoystickPosition -> Bool
> :: JoystickPosition -> JoystickPosition -> Bool
$c> :: JoystickPosition -> JoystickPosition -> Bool
<= :: JoystickPosition -> JoystickPosition -> Bool
$c<= :: JoystickPosition -> JoystickPosition -> Bool
< :: JoystickPosition -> JoystickPosition -> Bool
$c< :: JoystickPosition -> JoystickPosition -> Bool
compare :: JoystickPosition -> JoystickPosition -> Ordering
$ccompare :: JoystickPosition -> JoystickPosition -> Ordering
Ord, TouchID -> JoystickPosition -> ShowS
[JoystickPosition] -> ShowS
JoystickPosition -> String
forall a.
(TouchID -> a -> ShowS)
-> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [JoystickPosition] -> ShowS
$cshowList :: [JoystickPosition] -> ShowS
show :: JoystickPosition -> String
$cshow :: JoystickPosition -> String
showsPrec :: TouchID -> JoystickPosition -> ShowS
$cshowsPrec :: TouchID -> JoystickPosition -> ShowS
Show )
type JoystickCallback = JoystickButtons -> JoystickPosition -> IO ()
joystickCallback :: SettableStateVar (Maybe (JoystickCallback, PollRate))
joystickCallback :: SettableStateVar (Maybe (JoystickCallback, TouchID))
joystickCallback =
forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$ \Maybe (JoystickCallback, TouchID)
maybeCBAndRate ->
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
JoystickCB
(\FunPtr JoystickFunc
f -> forall (m :: * -> *).
MonadIO m =>
FunPtr JoystickFunc -> CInt -> m ()
glutJoystickFunc FunPtr JoystickFunc
f (forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a b. (a, b) -> b
snd (forall a. HasCallStack => Maybe a -> a
fromJust Maybe (JoystickCallback, TouchID)
maybeCBAndRate))))
(JoystickFunc -> IO (FunPtr JoystickFunc)
makeJoystickFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {t}.
(Integral a, Integral a, Integral a) =>
(JoystickButtons -> JoystickPosition -> t)
-> CUInt -> a -> a -> a -> t
unmarshal)
(forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (a, b) -> a
fst Maybe (JoystickCallback, TouchID)
maybeCBAndRate)
where unmarshal :: (JoystickButtons -> JoystickPosition -> t)
-> CUInt -> a -> a -> a -> t
unmarshal JoystickButtons -> JoystickPosition -> t
cb CUInt
b a
x a
y a
z = JoystickButtons -> JoystickPosition -> t
cb (CUInt -> JoystickButtons
unmarshalJoystickButtons CUInt
b)
(TouchID -> TouchID -> TouchID -> JoystickPosition
JoystickPosition (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x)
(forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y)
(forall a b. (Integral a, Num b) => a -> b
fromIntegral a
z))
type TouchID = Int
type MultiMouseCallback = TouchID -> MouseCallback
multiMouseCallback :: SettableStateVar (Maybe MultiMouseCallback)
multiMouseCallback :: SettableStateVar (Maybe MultiMouseCallback)
multiMouseCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
MultiButtonCB forall (m :: * -> *). MonadIO m => FunPtr MultiButtonFunc -> m ()
glutMultiButtonFunc (MultiButtonFunc -> IO (FunPtr MultiButtonFunc)
makeMultiButtonFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {t} {t}.
(Integral a, Integral a, Integral a, Num t) =>
(t -> MouseButton -> KeyState -> Position -> t)
-> a -> a -> a -> CInt -> CInt -> t
unmarshal)
where unmarshal :: (t -> MouseButton -> KeyState -> Position -> t)
-> a -> a -> a -> CInt -> CInt -> t
unmarshal t -> MouseButton -> KeyState -> Position -> t
cb a
d a
x a
y CInt
b CInt
s = t -> MouseButton -> KeyState -> Position -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
d)
(CInt -> MouseButton
unmarshalMouseButton CInt
b)
(CInt -> KeyState
unmarshalKeyState CInt
s)
(GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
type MultiCrossingCallback = TouchID -> CrossingCallback
multiCrossingCallback :: SettableStateVar (Maybe MultiCrossingCallback)
multiCrossingCallback :: SettableStateVar (Maybe MultiCrossingCallback)
multiCrossingCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
MultiEntryCB forall (m :: * -> *). MonadIO m => FunPtr ReshapeFunc -> m ()
glutMultiEntryFunc (ReshapeFunc -> IO (FunPtr ReshapeFunc)
makeMultiEntryFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {t} {t}.
(Integral a, Num t) =>
(t -> Crossing -> t) -> a -> CInt -> t
unmarshal)
where unmarshal :: (t -> Crossing -> t) -> a -> CInt -> t
unmarshal t -> Crossing -> t
cb a
d CInt
c = t -> Crossing -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
d) (CInt -> Crossing
unmarshalCrossing CInt
c)
type MultiMotionCallback = TouchID -> MotionCallback
multiMotionCallback :: SettableStateVar (Maybe MultiMotionCallback)
multiMotionCallback :: SettableStateVar (Maybe MultiMotionCallback)
multiMotionCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
MultiMotionCB forall (m :: * -> *). MonadIO m => FunPtr SpecialFunc -> m ()
glutMultiMotionFunc (SpecialFunc -> IO (FunPtr SpecialFunc)
makeMultiMotionFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {t} {t}.
(Integral a, Integral a, Integral a, Num t) =>
(t -> Position -> t) -> a -> a -> a -> t
unmarshal)
where unmarshal :: (t -> Position -> t) -> a -> a -> a -> t
unmarshal t -> Position -> t
cb a
d a
x a
y =
t -> Position -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
d) (GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))
multiPassiveMotionCallback :: SettableStateVar (Maybe MultiMotionCallback)
multiPassiveMotionCallback :: SettableStateVar (Maybe MultiMotionCallback)
multiPassiveMotionCallback = forall a. (a -> DisplayCallback) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$
forall a b.
CallbackType
-> (FunPtr a -> DisplayCallback)
-> (b -> IO (FunPtr a))
-> Maybe b
-> DisplayCallback
setCallback CallbackType
MultiPassiveCB forall (m :: * -> *). MonadIO m => FunPtr SpecialFunc -> m ()
glutMultiPassiveFunc (SpecialFunc -> IO (FunPtr SpecialFunc)
makeMultiPassiveFunc forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a} {a} {a} {t} {t}.
(Integral a, Integral a, Integral a, Num t) =>
(t -> Position -> t) -> a -> a -> a -> t
unmarshal)
where unmarshal :: (t -> Position -> t) -> a -> a -> a -> t
unmarshal t -> Position -> t
cb a
d a
x a
y =
t -> Position -> t
cb (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
d) (GLsizei -> GLsizei -> Position
Position (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x) (forall a b. (Integral a, Num b) => a -> b
fromIntegral a
y))