HOpenGL Libraries (GLUT package)ContentsIndex
Graphics.UI.GLUT.Callbacks.Window
Portabilityportable
Stabilitystable
Maintainersven.panne@aedion.de
Contents
Redisplay callbacks
Reshape callback
Callback for visibility changes
Window close callback
Keyboard and mouse input callback
Mouse movement callbacks
Spaceball callback
Dial & button box callback
Tablet callback
Joystick callback
Description
Synopsis
type DisplayCallback = IO ()
displayCallback :: SettableStateVar DisplayCallback
overlayDisplayCallback :: SettableStateVar (Maybe DisplayCallback)
type ReshapeCallback = Size -> IO ()
reshapeCallback :: SettableStateVar (Maybe ReshapeCallback)
data Visibility
= NotVisible
| Visible
type VisibilityCallback = Visibility -> IO ()
visibilityCallback :: SettableStateVar (Maybe VisibilityCallback)
type CloseCallback = IO ()
closeCallback :: SettableStateVar (Maybe CloseCallback)
data Key
= Char Char
| SpecialKey SpecialKey
| MouseButton MouseButton
data SpecialKey
= KeyF1
| KeyF2
| KeyF3
| KeyF4
| KeyF5
| KeyF6
| KeyF7
| KeyF8
| KeyF9
| KeyF10
| KeyF11
| KeyF12
| KeyLeft
| KeyUp
| KeyRight
| KeyDown
| KeyPageUp
| KeyPageDown
| KeyHome
| KeyEnd
| KeyInsert
data MouseButton
= LeftButton
| MiddleButton
| RightButton
| WheelUp
| WheelDown
data KeyState
= Down
| Up
data Modifiers = Modifiers {
shift, ctrl, alt :: KeyState
}
type KeyboardMouseCallback = Key -> KeyState -> Modifiers -> Position -> IO ()
keyboardMouseCallback :: SettableStateVar (Maybe KeyboardMouseCallback)
type MotionCallback = Position -> IO ()
motionCallback :: SettableStateVar (Maybe MotionCallback)
passiveMotionCallback :: SettableStateVar (Maybe MotionCallback)
data Crossing
= WindowLeft
| WindowEntered
type CrossingCallback = Crossing -> IO ()
crossingCallback :: SettableStateVar (Maybe CrossingCallback)
type SpaceballMotion = Int
type SpaceballRotation = Int
type ButtonIndex = Int
data SpaceballInput
= SpaceballMotion SpaceballMotion SpaceballMotion SpaceballMotion
| SpaceballRotation SpaceballRotation SpaceballRotation SpaceballRotation
| SpaceballButton ButtonIndex KeyState
type SpaceballCallback = SpaceballInput -> IO ()
spaceballCallback :: SettableStateVar (Maybe SpaceballCallback)
data DialAndButtonBoxInput
= DialAndButtonBoxButton ButtonIndex KeyState
| DialAndButtonBoxDial DialIndex Int
type DialIndex = Int
type DialAndButtonBoxCallback = DialAndButtonBoxInput -> IO ()
dialAndButtonBoxCallback :: SettableStateVar (Maybe DialAndButtonBoxCallback)
data TabletPosition = TabletPosition Int Int
data TabletInput
= TabletMotion
| TabletButton ButtonIndex KeyState
type TabletCallback = TabletInput -> TabletPosition -> IO ()
tabletCallback :: SettableStateVar (Maybe TabletCallback)
data JoystickButtons = JoystickButtons {
joystickButtonA, joystickButtonB, joystickButtonC, joystickButtonD :: KeyState
}
data JoystickPosition = JoystickPosition Int Int Int
type JoystickCallback = JoystickButtons -> JoystickPosition -> IO ()
joystickCallback :: SettableStateVar (Maybe (JoystickCallback, PollRate))
Redisplay callbacks
type DisplayCallback = IO ()
A display callback
displayCallback :: SettableStateVar DisplayCallback

Controls the display callback for the current window. When GLUT determines that the normal plane for the window needs to be redisplayed, the display callback for the window is called. Before the callback, the current window is set to the window needing to be redisplayed and (if no overlay display callback is registered) the layer in use is set to the normal plane. The entire normal plane region should be redisplayed in response to the callback (this includes ancillary buffers if your program depends on their state).

GLUT determines when the display callback should be triggered based on the window's redisplay state. The redisplay state for a window can be either set explicitly by calling postRedisplay or implicitly as the result of window damage reported by the window system. Multiple posted redisplays for a window are coalesced by GLUT to minimize the number of display callbacks called.

When an overlay is established for a window, but there is no overlay display callback registered, the display callback is used for redisplaying both the overlay and normal plane (that is, it will be called if either the redisplay state or overlay redisplay state is set). In this case, the layer in use is not implicitly changed on entry to the display callback.

See overlayDisplayCallback to understand how distinct callbacks for the overlay and normal plane of a window may be established.

When a window is created, no display callback exists for the window. It is the responsibility of the programmer to install a display callback for the window before the window is shown. A display callback must be registered for any window that is shown. If a window becomes displayed without a display callback being registered, a fatal error occurs. There is no way to "deregister" a display callback (though another callback routine can always be registered).

Upon return from the display callback, the normal damaged state of the window (see damaged) is cleared. If there is no overlay display callback registered the overlay damaged state of the window (see damaged) is also cleared.

overlayDisplayCallback :: SettableStateVar (Maybe DisplayCallback)

Controls the overlay display callback for the current window. The overlay display callback is functionally the same as the window's display callback except that the overlay display callback is used to redisplay the window's overlay.

When GLUT determines that the overlay plane for the window needs to be redisplayed, the overlay display callback for the window is called. Before the callback, the current window is set to the window needing to be redisplayed and the layer in use is set to the overlay. The entire overlay region should be redisplayed in response to the callback (this includes ancillary buffers if your program depends on their state).

GLUT determines when the overlay display callback should be triggered based on the window's overlay redisplay state. The overlay redisplay state for a window can be either set explicitly by calling postOverlayRedisplay or implicitly as the result of window damage reported by the window system. Multiple posted overlay redisplays for a window are coalesced by GLUT to minimize the number of overlay display callbacks called.

Upon return from the overlay display callback, the overlay damaged state of the window (see damaged) is cleared.

Initially there is no overlay display callback registered when an overlay is established. See displayCallback to understand how the display callback alone is used if an overlay display callback is not registered.

Reshape callback
type ReshapeCallback = Size -> IO ()
A reshape callback
reshapeCallback :: SettableStateVar (Maybe ReshapeCallback)

Controls the reshape callback for the current window. The reshape callback is triggered when a window is reshaped. A reshape callback is also triggered immediately before a window's first display callback after a window is created or whenever an overlay for the window is established. The parameter of the callback specifies the new window size in pixels. Before the callback, the current window is set to the window that has been reshaped.

If a reshape callback is not registered for a window or reshapeCallback is set to Nothing (to deregister a previously registered callback), the default reshape callback is used. This default callback will simply call

 viewport (Position 0 0) (Size width height)
 

on the normal plane (and on the overlay if one exists).

If an overlay is established for the window, a single reshape callback is generated. It is the callback's responsibility to update both the normal plane and overlay for the window (changing the layer in use as necessary).

When a top-level window is reshaped, subwindows are not reshaped. It is up to the GLUT program to manage the size and positions of subwindows within a top-level window. Still, reshape callbacks will be triggered for subwindows when their size is changed using windowSize.

Callback for visibility changes
data Visibility
The visibility state of the current window
Constructors
NotVisibleThe current window is totally or partially visible. GLUT considers a window visible if any pixel of the window is visible or any pixel of any descendant window is visible on the screen.
VisibleNo part of the current window is visible, i.e., until the window's visibility changes, all further rendering to the window is discarded.
show/hide Instances
type VisibilityCallback = Visibility -> IO ()
A visibilty callback
visibilityCallback :: SettableStateVar (Maybe VisibilityCallback)

Controls the visibility callback for the current window. The visibility callback for a window is called when the visibility of a window changes.

If the visibility callback for a window is disabled and later re-enabled, the visibility status of the window is undefined; any change in window visibility will be reported, that is if you disable a visibility callback and re-enable the callback, you are guaranteed the next visibility change will be reported.

Window close callback
type CloseCallback = IO ()
closeCallback :: SettableStateVar (Maybe CloseCallback)
Keyboard and mouse input callback
data Key
A generalized view of keys
Constructors
Char Char
SpecialKey SpecialKey
MouseButton MouseButton
show/hide Instances
data SpecialKey
Special keys
Constructors
KeyF1
KeyF2
KeyF3
KeyF4
KeyF5
KeyF6
KeyF7
KeyF8
KeyF9
KeyF10
KeyF11
KeyF12
KeyLeft
KeyUp
KeyRight
KeyDown
KeyPageUp
KeyPageDown
KeyHome
KeyEnd
KeyInsert
show/hide Instances
data MouseButton
Mouse buttons, including a wheel
Constructors
LeftButton
MiddleButton
RightButton
WheelUp
WheelDown
show/hide Instances
data KeyState
The current state of a key or button
Constructors
Down
Up
show/hide Instances
data Modifiers
The state of the keyboard modifiers
Constructors
Modifiers
shift, ctrl, alt :: KeyState
show/hide Instances
type KeyboardMouseCallback = Key -> KeyState -> Modifiers -> Position -> IO ()
A keyboard/mouse callback
keyboardMouseCallback :: SettableStateVar (Maybe KeyboardMouseCallback)
Controls the keyboard/mouse callback for the current window. The keyboard/mouse callback for a window is called when the state of a key or mouse button changes. The callback parameters indicate the new state of the key/button, the state of the keyboard modifiers, and the mouse location in window relative coordinates.
Mouse movement callbacks
type MotionCallback = Position -> IO ()
A motion callback
motionCallback :: SettableStateVar (Maybe MotionCallback)
Controls the motion callback for the current window. The motion callback for a window is called when the mouse moves within the window while one or more mouse buttons are pressed. The callback parameter indicates the mouse location in window relative coordinates.
passiveMotionCallback :: SettableStateVar (Maybe MotionCallback)
Controls the passive motion callback for the current window. The passive motion callback for a window is called when the mouse moves within the window while no mouse buttons are pressed. The callback parameter indicates the mouse location in window relative coordinates.
data Crossing
The relation between the mouse pointer and the current window has changed.
Constructors
WindowLeftThe mouse pointer has left the current window.
WindowEnteredThe mouse pointer has entered the current window.
show/hide Instances
type CrossingCallback = Crossing -> IO ()
An enter/leave callback
crossingCallback :: SettableStateVar (Maybe CrossingCallback)

Controls the mouse enter/leave callback for the current window. Note that some window systems may not generate accurate enter/leave callbacks.

X Implementation Notes: An X implementation of GLUT should generate accurate enter/leave callbacks.

Spaceball callback
type SpaceballMotion = Int
Translation of the Spaceball along one axis, normalized to be in the range of -1000 to +1000 inclusive
type SpaceballRotation = Int
Rotation of the Spaceball along one axis, normalized to be in the range of -1800 .. +1800 inclusive
type ButtonIndex = Int
The index of a specific buttons of an input device.
data SpaceballInput
The state of the Spaceball has changed.
Constructors
SpaceballMotion SpaceballMotion SpaceballMotion SpaceballMotion
SpaceballRotation SpaceballRotation SpaceballRotation SpaceballRotation
SpaceballButton ButtonIndex KeyState
show/hide Instances
type SpaceballCallback = SpaceballInput -> IO ()
A SpaceballButton callback
spaceballCallback :: SettableStateVar (Maybe SpaceballCallback)

Controls the Spaceball callback for the current window. The Spaceball callback for a window is called when the window has Spaceball input focus (normally, when the mouse is in the window) and the user generates Spaceball translations, rotations, or button presses. The number of available Spaceball buttons can be determined with numSpaceballButtons.

Registering a Spaceball callback when a Spaceball device is not available has no effect and is not an error. In this case, no Spaceball callbacks will be generated.

Dial & button box callback
data DialAndButtonBoxInput
The dial & button box state has changed.
Constructors
DialAndButtonBoxButton ButtonIndex KeyState
DialAndButtonBoxDial DialIndex Int
show/hide Instances
type DialIndex = Int
The index of a specific dial of a dial and button box.
type DialAndButtonBoxCallback = DialAndButtonBoxInput -> IO ()
A dial & button box callback
dialAndButtonBoxCallback :: SettableStateVar (Maybe DialAndButtonBoxCallback)

Controls the dial & button box callback for the current window. The dial & button box button callback for a window is called when the window has dial & button box input focus (normally, when the mouse is in the window) and the user generates dial & button box button presses or dial changes. The number of available dial & button box buttons and dials can be determined with numDialsAndButtons.

Registering a dial & button box callback when a dial & button box device is not available is ineffectual and not an error. In this case, no dial & button box button will be generated.

Tablet callback
data TabletPosition
Absolute tablet position, with coordinates normalized to be in the range of 0 to 2000 inclusive
Constructors
TabletPosition Int Int
show/hide Instances
data TabletInput
The table state has changed.
Constructors
TabletMotion
TabletButton ButtonIndex KeyState
show/hide Instances
type TabletCallback = TabletInput -> TabletPosition -> IO ()
A tablet callback
tabletCallback :: SettableStateVar (Maybe TabletCallback)

Controls the tablet callback for the current window. The tablet callback for a window is called when the window has tablet input focus (normally, when the mouse is in the window) and the user generates tablet motion or button presses. The number of available tablet buttons can be determined with numTabletButtons.

Registering a tablet callback when a tablet device is not available is ineffectual and not an error. In this case, no tablet callbacks will be generated.

Joystick callback
data JoystickButtons
The state of the joystick buttons
Constructors
JoystickButtons
joystickButtonA, joystickButtonB, joystickButtonC, joystickButtonD :: KeyState
show/hide Instances
data JoystickPosition

Absolute joystick position, with coordinates normalized to be in the range of -1000 to 1000 inclusive. The signs of the three axes mean the following:

  • negative = left, positive = right
  • negative = towards player, positive = away
  • if available (e.g. rudder): negative = down, positive = up
Constructors
JoystickPosition Int Int Int
show/hide Instances
type JoystickCallback = JoystickButtons -> JoystickPosition -> IO ()
A joystick callback
joystickCallback :: SettableStateVar (Maybe (JoystickCallback, PollRate))

Controls the joystick callback for the current window. The joystick callback is called either due to polling of the joystick at the uniform timer interval specified (if > 0) or in response to an explicit call of forceJoystickCallback.

X Implementation Notes: Currently GLUT has no joystick support for X11.

Produced by Haddock version 0.7