-- #hide
-----------------------------------------------------------------------------
-- |
-- Module      :  Graphics.UI.GLUT.Constants
-- Copyright   :  (c) Sven Panne 2002-2005
-- License     :  BSD-style (see the file libraries/GLUT/LICENSE)
--
-- Maintainer  :  sven.panne@aedion.de
-- Stability   :  stable
-- Portability :  portable
--
-- This purely internal module defines all numeric GLUT constants.
--
-----------------------------------------------------------------------------

module Graphics.UI.GLUT.Constants where

import Foreign.C.Types ( CInt, CUInt )
import Graphics.Rendering.OpenGL.GL.BasicTypes ( GLenum )

-----------------------------------------------------------------------------
-- * Display mode bit masks
glut_RGB, glut_RGBA, glut_INDEX, glut_SINGLE, glut_DOUBLE, glut_ACCUM,
   glut_ALPHA, glut_DEPTH, glut_STENCIL, glut_MULTISAMPLE, glut_STEREO,
   glut_LUMINANCE, glut_AUX1, glut_AUX2, glut_AUX3, glut_AUX4 :: CUInt
glut_RGB                               = 0x0000
glut_RGBA                              = glut_RGB
glut_INDEX                             = 0x0001
glut_SINGLE                            = 0x0000
glut_DOUBLE                            = 0x0002
glut_ACCUM                             = 0x0004
glut_ALPHA                             = 0x0008
glut_DEPTH                             = 0x0010
glut_STENCIL                           = 0x0020
glut_MULTISAMPLE                       = 0x0080
glut_STEREO                            = 0x0100
glut_LUMINANCE                         = 0x0200
glut_AUX1                              = 0x1000
glut_AUX2                              = 0x2000
glut_AUX3                              = 0x4000
glut_AUX4                              = 0x8000

-----------------------------------------------------------------------------
-- * Mouse buttons
glut_LEFT_BUTTON, glut_MIDDLE_BUTTON, glut_RIGHT_BUTTON, glut_WHEEL_UP,
   glut_WHEEL_DOWN :: CInt
glut_LEFT_BUTTON                       = 0
glut_MIDDLE_BUTTON                     = 1
glut_RIGHT_BUTTON                      = 2
glut_WHEEL_UP                          = 3
glut_WHEEL_DOWN                        = 4

-----------------------------------------------------------------------------
-- * Mouse button  state
glut_DOWN, glut_UP :: CInt
glut_DOWN                              = 0
glut_UP                                = 1

-----------------------------------------------------------------------------
-- * Function keys
glut_KEY_F1, glut_KEY_F2, glut_KEY_F3, glut_KEY_F4, glut_KEY_F5, glut_KEY_F6,
   glut_KEY_F7, glut_KEY_F8, glut_KEY_F9, glut_KEY_F10, glut_KEY_F11,
   glut_KEY_F12 :: CInt
glut_KEY_F1                            = 1
glut_KEY_F2                            = 2
glut_KEY_F3                            = 3
glut_KEY_F4                            = 4
glut_KEY_F5                            = 5
glut_KEY_F6                            = 6
glut_KEY_F7                            = 7
glut_KEY_F8                            = 8
glut_KEY_F9                            = 9
glut_KEY_F10                           = 10
glut_KEY_F11                           = 11
glut_KEY_F12                           = 12

-----------------------------------------------------------------------------
-- * Directional Keys
glut_KEY_LEFT, glut_KEY_UP, glut_KEY_RIGHT, glut_KEY_DOWN, glut_KEY_PAGE_UP,
   glut_KEY_PAGE_DOWN, glut_KEY_HOME, glut_KEY_END, glut_KEY_INSERT :: CInt
glut_KEY_LEFT                          = 100
glut_KEY_UP                            = 101
glut_KEY_RIGHT                         = 102
glut_KEY_DOWN                          = 103
glut_KEY_PAGE_UP                       = 104
glut_KEY_PAGE_DOWN                     = 105
glut_KEY_HOME                          = 106
glut_KEY_END                           = 107
glut_KEY_INSERT                        = 108

-----------------------------------------------------------------------------
-- * Entry\/exit state
glut_LEFT, glut_ENTERED :: CInt
glut_LEFT                              = 0
glut_ENTERED                           = 1

-----------------------------------------------------------------------------
-- * Menu usage state
glut_MENU_NOT_IN_USE, glut_MENU_IN_USE :: CInt
glut_MENU_NOT_IN_USE                   = 0
glut_MENU_IN_USE                       = 1

-----------------------------------------------------------------------------
-- * Visibility state
glut_NOT_VISIBLE, glut_VISIBLE :: CInt
glut_NOT_VISIBLE                       = 0
glut_VISIBLE                           = 1

-----------------------------------------------------------------------------
-- * Window status state
glut_HIDDEN, glut_FULLY_RETAINED, glut_PARTIALLY_RETAINED,
   glut_FULLY_COVERED :: CInt
glut_HIDDEN                            = 0
glut_FULLY_RETAINED                    = 1
glut_PARTIALLY_RETAINED                = 2
glut_FULLY_COVERED                     = 3

-----------------------------------------------------------------------------
-- * Color index component selection values
glut_RED, glut_GREEN, glut_BLUE :: CInt
glut_RED                               = 0
glut_GREEN                             = 1
glut_BLUE                              = 2

-----------------------------------------------------------------------------
-- * Layers in use
glut_NORMAL, glut_OVERLAY :: GLenum
glut_NORMAL                            = 0
glut_OVERLAY                           = 1

-----------------------------------------------------------------------------
-- * @glutGet@ parameters

glut_WINDOW_X, glut_WINDOW_Y, glut_WINDOW_WIDTH, glut_WINDOW_HEIGHT,
   glut_WINDOW_BUFFER_SIZE, glut_WINDOW_STENCIL_SIZE, glut_WINDOW_DEPTH_SIZE,
   glut_WINDOW_RED_SIZE, glut_WINDOW_GREEN_SIZE, glut_WINDOW_BLUE_SIZE,
   glut_WINDOW_ALPHA_SIZE, glut_WINDOW_ACCUM_RED_SIZE,
   glut_WINDOW_ACCUM_GREEN_SIZE, glut_WINDOW_ACCUM_BLUE_SIZE,
   glut_WINDOW_ACCUM_ALPHA_SIZE, glut_WINDOW_DOUBLEBUFFER, glut_WINDOW_RGBA,
   glut_WINDOW_PARENT, glut_WINDOW_NUM_CHILDREN, glut_WINDOW_COLORMAP_SIZE,
   glut_WINDOW_NUM_SAMPLES, glut_WINDOW_STEREO, glut_WINDOW_CURSOR,
   glut_SCREEN_WIDTH, glut_SCREEN_HEIGHT, glut_SCREEN_WIDTH_MM,
   glut_SCREEN_HEIGHT_MM, glut_MENU_NUM_ITEMS, glut_DISPLAY_MODE_POSSIBLE,
   glut_INIT_WINDOW_X, glut_INIT_WINDOW_Y, glut_INIT_WINDOW_WIDTH,
   glut_INIT_WINDOW_HEIGHT, glut_INIT_DISPLAY_MODE, glut_ELAPSED_TIME,
   glut_WINDOW_FORMAT_ID, glut_ACTION_ON_WINDOW_CLOSE, glut_WINDOW_BORDER_WIDTH,
   glut_WINDOW_HEADER_HEIGHT, glut_VERSION, glut_RENDERING_CONTEXT,
   glut_DIRECT_RENDERING :: GLenum
glut_WINDOW_X                          = 100
glut_WINDOW_Y                          = 101
glut_WINDOW_WIDTH                      = 102
glut_WINDOW_HEIGHT                     = 103
glut_WINDOW_BUFFER_SIZE                = 104
glut_WINDOW_STENCIL_SIZE               = 105
glut_WINDOW_DEPTH_SIZE                 = 106
glut_WINDOW_RED_SIZE                   = 107
glut_WINDOW_GREEN_SIZE                 = 108
glut_WINDOW_BLUE_SIZE                  = 109
glut_WINDOW_ALPHA_SIZE                 = 110
glut_WINDOW_ACCUM_RED_SIZE             = 111
glut_WINDOW_ACCUM_GREEN_SIZE           = 112
glut_WINDOW_ACCUM_BLUE_SIZE            = 113
glut_WINDOW_ACCUM_ALPHA_SIZE           = 114
glut_WINDOW_DOUBLEBUFFER               = 115
glut_WINDOW_RGBA                       = 116
glut_WINDOW_PARENT                     = 117
glut_WINDOW_NUM_CHILDREN               = 118
glut_WINDOW_COLORMAP_SIZE              = 119
glut_WINDOW_NUM_SAMPLES                = 120
glut_WINDOW_STEREO                     = 121
glut_WINDOW_CURSOR                     = 122
glut_SCREEN_WIDTH                      = 200
glut_SCREEN_HEIGHT                     = 201
glut_SCREEN_WIDTH_MM                   = 202
glut_SCREEN_HEIGHT_MM                  = 203
glut_MENU_NUM_ITEMS                    = 300
glut_DISPLAY_MODE_POSSIBLE             = 400
glut_INIT_WINDOW_X                     = 500
glut_INIT_WINDOW_Y                     = 501
glut_INIT_WINDOW_WIDTH                 = 502
glut_INIT_WINDOW_HEIGHT                = 503
glut_INIT_DISPLAY_MODE                 = 504
glut_ELAPSED_TIME                      = 700
glut_WINDOW_FORMAT_ID                  = 123
glut_ACTION_ON_WINDOW_CLOSE            = 505
glut_WINDOW_BORDER_WIDTH               = 506
glut_WINDOW_HEADER_HEIGHT              = 507
glut_VERSION                           = 508
glut_RENDERING_CONTEXT                 = 509
glut_DIRECT_RENDERING                  = 510

-----------------------------------------------------------------------------
-- * @glutDeviceGet@ parameters
glut_HAS_KEYBOARD, glut_HAS_MOUSE, glut_HAS_SPACEBALL,
   glut_HAS_DIAL_AND_BUTTON_BOX, glut_HAS_TABLET, glut_NUM_MOUSE_BUTTONS,
   glut_NUM_SPACEBALL_BUTTONS, glut_NUM_BUTTON_BOX_BUTTONS, glut_NUM_DIALS,
   glut_NUM_TABLET_BUTTONS, glut_DEVICE_IGNORE_KEY_REPEAT,
   glut_DEVICE_KEY_REPEAT, glut_HAS_JOYSTICK, glut_OWNS_JOYSTICK,
   glut_JOYSTICK_BUTTONS, glut_JOYSTICK_AXES, glut_JOYSTICK_POLL_RATE :: GLenum
glut_HAS_KEYBOARD                      = 600
glut_HAS_MOUSE                         = 601
glut_HAS_SPACEBALL                     = 602
glut_HAS_DIAL_AND_BUTTON_BOX           = 603
glut_HAS_TABLET                        = 604
glut_NUM_MOUSE_BUTTONS                 = 605
glut_NUM_SPACEBALL_BUTTONS             = 606
glut_NUM_BUTTON_BOX_BUTTONS            = 607
glut_NUM_DIALS                         = 608
glut_NUM_TABLET_BUTTONS                = 609
glut_DEVICE_IGNORE_KEY_REPEAT          = 610
glut_DEVICE_KEY_REPEAT                 = 611
glut_HAS_JOYSTICK                      = 612
glut_OWNS_JOYSTICK                     = 613
glut_JOYSTICK_BUTTONS                  = 614
glut_JOYSTICK_AXES                     = 615
glut_JOYSTICK_POLL_RATE                = 616

-----------------------------------------------------------------------------
-- * @glutLayerGet@ parameters
glut_OVERLAY_POSSIBLE, glut_LAYER_IN_USE, glut_HAS_OVERLAY,
   glut_TRANSPARENT_INDEX, glut_NORMAL_DAMAGED, glut_OVERLAY_DAMAGED :: GLenum

glut_OVERLAY_POSSIBLE                  = 800
glut_LAYER_IN_USE                      = 801
glut_HAS_OVERLAY                       = 802
glut_TRANSPARENT_INDEX                 = 803
glut_NORMAL_DAMAGED                    = 804
glut_OVERLAY_DAMAGED                   = 805

-----------------------------------------------------------------------------
-- * @glutVideoResizeGet@ parameters
glut_VIDEO_RESIZE_POSSIBLE, glut_VIDEO_RESIZE_IN_USE,
   glut_VIDEO_RESIZE_X_DELTA, glut_VIDEO_RESIZE_Y_DELTA,
   glut_VIDEO_RESIZE_WIDTH_DELTA, glut_VIDEO_RESIZE_HEIGHT_DELTA,
   glut_VIDEO_RESIZE_X, glut_VIDEO_RESIZE_Y, glut_VIDEO_RESIZE_WIDTH,
   glut_VIDEO_RESIZE_HEIGHT :: CInt
glut_VIDEO_RESIZE_POSSIBLE             = 900
glut_VIDEO_RESIZE_IN_USE               = 901
glut_VIDEO_RESIZE_X_DELTA              = 902
glut_VIDEO_RESIZE_Y_DELTA              = 903
glut_VIDEO_RESIZE_WIDTH_DELTA          = 904
glut_VIDEO_RESIZE_HEIGHT_DELTA         = 905
glut_VIDEO_RESIZE_X                    = 906
glut_VIDEO_RESIZE_Y                    = 907
glut_VIDEO_RESIZE_WIDTH                = 908
glut_VIDEO_RESIZE_HEIGHT               = 909

-----------------------------------------------------------------------------
-- * @glutGetModifiers@ return mask
glut_ACTIVE_SHIFT, glut_ACTIVE_CTRL, glut_ACTIVE_ALT :: CInt
glut_ACTIVE_SHIFT                      = 0x01
glut_ACTIVE_CTRL                       = 0x02
glut_ACTIVE_ALT                        = 0x04

-----------------------------------------------------------------------------
-- * @glutSetCursor@ parameters
glut_CURSOR_RIGHT_ARROW, glut_CURSOR_LEFT_ARROW, glut_CURSOR_INFO,
   glut_CURSOR_DESTROY, glut_CURSOR_HELP, glut_CURSOR_CYCLE,
   glut_CURSOR_SPRAY, glut_CURSOR_WAIT, glut_CURSOR_TEXT,
   glut_CURSOR_CROSSHAIR, glut_CURSOR_UP_DOWN, glut_CURSOR_LEFT_RIGHT,
   glut_CURSOR_TOP_SIDE, glut_CURSOR_BOTTOM_SIDE, glut_CURSOR_LEFT_SIDE,
   glut_CURSOR_RIGHT_SIDE, glut_CURSOR_TOP_LEFT_CORNER,
   glut_CURSOR_TOP_RIGHT_CORNER, glut_CURSOR_BOTTOM_RIGHT_CORNER,
   glut_CURSOR_BOTTOM_LEFT_CORNER, glut_CURSOR_INHERIT, glut_CURSOR_NONE,
   glut_CURSOR_FULL_CROSSHAIR :: CInt
glut_CURSOR_RIGHT_ARROW                = 0
glut_CURSOR_LEFT_ARROW                 = 1
glut_CURSOR_INFO                       = 2
glut_CURSOR_DESTROY                    = 3
glut_CURSOR_HELP                       = 4
glut_CURSOR_CYCLE                      = 5
glut_CURSOR_SPRAY                      = 6
glut_CURSOR_WAIT                       = 7
glut_CURSOR_TEXT                       = 8
glut_CURSOR_CROSSHAIR                  = 9
glut_CURSOR_UP_DOWN                    = 10
glut_CURSOR_LEFT_RIGHT                 = 11
glut_CURSOR_TOP_SIDE                   = 12
glut_CURSOR_BOTTOM_SIDE                = 13
glut_CURSOR_LEFT_SIDE                  = 14
glut_CURSOR_RIGHT_SIDE                 = 15
glut_CURSOR_TOP_LEFT_CORNER            = 16
glut_CURSOR_TOP_RIGHT_CORNER           = 17
glut_CURSOR_BOTTOM_RIGHT_CORNER        = 18
glut_CURSOR_BOTTOM_LEFT_CORNER         = 19
glut_CURSOR_INHERIT                    = 100
glut_CURSOR_NONE                       = 101
glut_CURSOR_FULL_CROSSHAIR             = 102

-----------------------------------------------------------------------------
-- * @glutSetKeyRepeat@ modes
glut_KEY_REPEAT_OFF, glut_KEY_REPEAT_ON, glut_KEY_REPEAT_DEFAULT :: CInt
glut_KEY_REPEAT_OFF                    = 0
glut_KEY_REPEAT_ON                     = 1
glut_KEY_REPEAT_DEFAULT                = 2

-----------------------------------------------------------------------------
-- * Joystick button masks
glut_JOYSTICK_BUTTON_A, glut_JOYSTICK_BUTTON_B, glut_JOYSTICK_BUTTON_C,
   glut_JOYSTICK_BUTTON_D :: CUInt
glut_JOYSTICK_BUTTON_A                 = 0x01
glut_JOYSTICK_BUTTON_B                 = 0x02
glut_JOYSTICK_BUTTON_C                 = 0x04
glut_JOYSTICK_BUTTON_D                 = 0x08

-----------------------------------------------------------------------------
-- @glutGameModeGet@ parameters
glut_GAME_MODE_ACTIVE, glut_GAME_MODE_POSSIBLE, glut_GAME_MODE_WIDTH,
   glut_GAME_MODE_HEIGHT, glut_GAME_MODE_PIXEL_DEPTH,
   glut_GAME_MODE_REFRESH_RATE, glut_GAME_MODE_DISPLAY_CHANGED :: GLenum
glut_GAME_MODE_ACTIVE                  = 0
glut_GAME_MODE_POSSIBLE                = 1
glut_GAME_MODE_WIDTH                   = 2
glut_GAME_MODE_HEIGHT                  = 3
glut_GAME_MODE_PIXEL_DEPTH             = 4
glut_GAME_MODE_REFRESH_RATE            = 5
glut_GAME_MODE_DISPLAY_CHANGED         = 6

-----------------------------------------------------------------------------
-- Direct/indirect rendering context options (has meaning only in unix/x11),
-- see glut_DIRECT_RENDERING (freeglut extension)
glut_FORCE_INDIRECT_CONTEXT, glut_ALLOW_DIRECT_CONTEXT,
   glut_TRY_DIRECT_CONTEXT, glut_FORCE_DIRECT_CONTEXT :: CInt
glut_FORCE_INDIRECT_CONTEXT            = 0
glut_ALLOW_DIRECT_CONTEXT              = 1
glut_TRY_DIRECT_CONTEXT                = 2
glut_FORCE_DIRECT_CONTEXT              = 3

-----------------------------------------------------------------------------
-- Behaviour when the user clicks on an "x" to close a window, see
-- glut_ACTION_ON_WINDOW_CLOSE (freeglut extension)
glut_ACTION_EXIT, glut_ACTION_GLUTMAINLOOP_RETURNS,
   glut_ACTION_CONTINUE_EXECUTION :: CInt
glut_ACTION_EXIT                       = 0
glut_ACTION_GLUTMAINLOOP_RETURNS       = 1
glut_ACTION_CONTINUE_EXECUTION         = 2

-----------------------------------------------------------------------------
-- Create a new rendering context when the user opens a new window? See
-- glut_RENDERING_CONTEXT (freeglut extension)
glut_CREATE_NEW_CONTEXT, glut_USE_CURRENT_CONTEXT :: CInt
glut_CREATE_NEW_CONTEXT                = 0
glut_USE_CURRENT_CONTEXT               = 1