Graphics.UI.GLUT.Callbacks.Global

GLUT-2.7.0.3: A binding for the OpenGL Utility Toolkit

Copyright | (c) Sven Panne 2002-2013
License | BSD3
Maintainer | Sven Panne <svenpanne@gmail.com>
Stability | stable
Portability | portable
Safe Haskell | None
Language | Haskell2010

Graphics.UI.GLUT.Callbacks.Global

Contents

- Menu status callback
- Idle callback
- Timer callbacks

Description

Synopsis

- data MenuUsage
  - = NotInUse
  - | InUse
- type MenuStatusCallback = MenuUsage -> Position -> IO ()
- menuStatusCallback :: SettableStateVar (Maybe MenuStatusCallback)
- type IdleCallback = IO ()
- idleCallback :: SettableStateVar (Maybe IdleCallback)
- type Timeout = Int
- type TimerCallback = IO ()
- addTimerCallback :: Timeout -> TimerCallback -> IO ()

# Menu status callback

data MenuUsage

Constructors

NotInUse |
InUse |

Instances

Eq MenuUsage |
Ord MenuUsage |
Show MenuUsage |

type MenuStatusCallback = MenuUsage -> Position -> IO ()

menuStatusCallback :: SettableStateVar (Maybe MenuStatusCallback)

Controls the global menu status callback so a GLUT program can determine when a menu is in use or not. When a menu status callback is registered, it will be called with the value `InUse` when pop-up menus are in use by the user; and the callback will be called with the value `NotInUse` when pop-up menus are no longer in use. Additionally, the location in window coordinates of the button press that caused the menu to go into use, or the location where the menu was released (maybe outside the window). Other callbacks continue to operate (except mouse motion callbacks) when pop-up menus are in use so the menu status callback allows a program to suspend animation or other tasks when menus are in use. The cascading and unmapping of sub-menus from an initial pop-up menu does not generate menu status callbacks. There is a single menu status callback for GLUT.

When the menu status callback is called, the current menu will be set to the initial pop-up menu in both the `InUse` and `NotInUse` cases. The current window will be set to the window from which the initial menu was popped up from, also in both cases.

# Idle callback

type IdleCallback = IO ()

idleCallback :: SettableStateVar (Maybe IdleCallback)

Controls the global idle callback so a GLUT program can perform background processing tasks or continuous animation when window system events are not being received. If enabled, the idle callback is continuously called when events are not being received. The current window and current menu will not be changed before the idle callback. Programs with multiple windows and/or menus should explicitly set the current window and/or /current menu/ and not rely on its current setting.

The amount of computation and rendering done in an idle callback should be minimized to avoid affecting the program's interactive response. In general, not more than a single frame of rendering should be done in an idle callback.

# Timer callbacks

type Timeout = Int

Timeout for the timer callback in milliseconds

type TimerCallback = IO ()

addTimerCallback :: Timeout -> TimerCallback -> IO ()

Register a one-shot timer callback to be triggered after at least the given amount of time. Multiple timer callbacks at same or differing times may be registered simultaneously. There is no support for canceling a registered callback.

The number of milliseconds is a lower bound on the time before the callback is generated. GLUT attempts to deliver the timer callback as soon as possible after the expiration of the callback's time interval.