This file is indexed.

/usr/share/doc/libghc-glut-doc/html/src/Graphics-UI-GLUT-GameMode.html is in libghc-glut-doc 2.7.0.1-3build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>src/Graphics/UI/GLUT/GameMode.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-2"></a><span class='hs-comment'>-- |</span>
<a name="line-3"></a><span class='hs-comment'>-- Module      :  Graphics.UI.GLUT.GameMode</span>
<a name="line-4"></a><span class='hs-comment'>-- Copyright   :  (c) Sven Panne 2002-2013</span>
<a name="line-5"></a><span class='hs-comment'>-- License     :  BSD3</span>
<a name="line-6"></a><span class='hs-comment'>--</span>
<a name="line-7"></a><span class='hs-comment'>-- Maintainer  :  Sven Panne &lt;svenpanne@gmail.com&gt;</span>
<a name="line-8"></a><span class='hs-comment'>-- Stability   :  stable</span>
<a name="line-9"></a><span class='hs-comment'>-- Portability :  portable</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- In addition to the functionality offered by</span>
<a name="line-12"></a><span class='hs-comment'>-- 'Graphics.UI.GLUT.Window.fullScreen', GLUT offers an sub-API to change the</span>
<a name="line-13"></a><span class='hs-comment'>-- screen resolution, color depth, and refresh rate of the display for a single</span>
<a name="line-14"></a><span class='hs-comment'>-- full screen window. This mode of operation is called /game mode/, and is</span>
<a name="line-15"></a><span class='hs-comment'>-- restricted in various ways: No pop-up menus are allowed for this full screen</span>
<a name="line-16"></a><span class='hs-comment'>-- window, no other (sub-)windows can be created, and all other applications are</span>
<a name="line-17"></a><span class='hs-comment'>-- hidden.</span>
<a name="line-18"></a><span class='hs-comment'>--</span>
<a name="line-19"></a><span class='hs-comment'>-- /X Implementation Notes:/ Note that game mode is not fully supported in the</span>
<a name="line-20"></a><span class='hs-comment'>-- original GLUT for X, it is essentially the same as using</span>
<a name="line-21"></a><span class='hs-comment'>-- 'Graphics.UI.GLUT.Window.fullScreen'. The GLUT clone freeglut</span>
<a name="line-22"></a><span class='hs-comment'>-- (see &lt;<a href="http://freeglut.sourceforge.net/">http://freeglut.sourceforge.net/</a>&gt;) does not have this restriction.</span>
<a name="line-23"></a><span class='hs-comment'>--</span>
<a name="line-24"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-25"></a>
<a name="line-26"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>GLUT</span><span class='hs-varop'>.</span><span class='hs-conid'>GameMode</span> <span class='hs-layout'>(</span>
<a name="line-27"></a>   <span class='hs-conid'>GameModeCapability</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>GameModeCapabilityDescription</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-28"></a>   <span class='hs-varid'>gameModeCapabilities</span><span class='hs-layout'>,</span> <span class='hs-varid'>enterGameMode</span><span class='hs-layout'>,</span> <span class='hs-varid'>leaveGameMode</span><span class='hs-layout'>,</span>
<a name="line-29"></a>   <span class='hs-conid'>BitsPerPlane</span><span class='hs-layout'>,</span> <span class='hs-conid'>RefreshRate</span><span class='hs-layout'>,</span> <span class='hs-conid'>GameModeInfo</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>gameModeInfo</span><span class='hs-layout'>,</span>
<a name="line-30"></a>   <span class='hs-varid'>gameModeActive</span>
<a name="line-31"></a><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-32"></a>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Class</span> <span class='hs-layout'>(</span> <span class='hs-conid'>MonadIO</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> <span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span> <span class='hs-layout'>(</span> <span class='hs-varid'>intersperse</span> <span class='hs-layout'>)</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>StateVar</span> <span class='hs-layout'>(</span> <span class='hs-conid'>GettableStateVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>makeGettableStateVar</span>
<a name="line-36"></a>                     <span class='hs-layout'>,</span> <span class='hs-conid'>SettableStateVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>makeSettableStateVar</span> <span class='hs-layout'>)</span>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>String</span> <span class='hs-layout'>(</span> <span class='hs-varid'>withCString</span> <span class='hs-layout'>)</span>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Size</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> <span class='hs-layout'>)</span>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span><span class='hs-varop'>.</span><span class='hs-conid'>Raw</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span> <span class='hs-layout'>(</span> <span class='hs-conid'>GLenum</span> <span class='hs-layout'>)</span>
<a name="line-40"></a>
<a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>GLUT</span><span class='hs-varop'>.</span><span class='hs-conid'>Raw</span>
<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>GLUT</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span>
<a name="line-43"></a>
<a name="line-44"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-45"></a>
<a name="line-46"></a><span class='hs-comment'>-- | Capabilities for 'gameModeCapabilities'</span>
<a name="line-47"></a>
<a name="line-48"></a><a name="GameModeCapability"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>GameModeCapability</span>
<a name="line-49"></a>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GameModeWidth</span>         <span class='hs-comment'>-- ^ Width of the screen resolution in pixels</span>
<a name="line-50"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GameModeHeight</span>        <span class='hs-comment'>-- ^ Height of the screen resolution in pixels</span>
<a name="line-51"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GameModeBitsPerPlane</span>  <span class='hs-comment'>-- ^ Color depth of the screen in bits</span>
<a name="line-52"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GameModeRefreshRate</span>   <span class='hs-comment'>-- ^ Refresh rate in Hertz</span>
<a name="line-53"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GameModeNum</span>           <span class='hs-comment'>-- ^ Match the Nth frame buffer configuration</span>
<a name="line-54"></a>                           <span class='hs-comment'>--   compatible with the given capabilities</span>
<a name="line-55"></a>                           <span class='hs-comment'>--   (numbering starts at 1)</span>
<a name="line-56"></a>   <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span> <span class='hs-layout'>)</span>
<a name="line-57"></a>
<a name="line-58"></a><a name="gameModeCapabilityToString"></a><span class='hs-definition'>gameModeCapabilityToString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>GameModeCapability</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-59"></a><span class='hs-definition'>gameModeCapabilityToString</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>x</span> <span class='hs-keyword'>of</span>
<a name="line-60"></a>   <span class='hs-conid'>GameModeWidth</span>        <span class='hs-keyglyph'>-&gt;</span> <span class='hs-str'>"width"</span>
<a name="line-61"></a>   <span class='hs-conid'>GameModeHeight</span>       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-str'>"height"</span>
<a name="line-62"></a>   <span class='hs-conid'>GameModeBitsPerPlane</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-str'>"bpp"</span>
<a name="line-63"></a>   <span class='hs-conid'>GameModeRefreshRate</span>  <span class='hs-keyglyph'>-&gt;</span> <span class='hs-str'>"hertz"</span>
<a name="line-64"></a>   <span class='hs-conid'>GameModeNum</span>          <span class='hs-keyglyph'>-&gt;</span> <span class='hs-str'>"num"</span>
<a name="line-65"></a>
<a name="line-66"></a><span class='hs-comment'>-- | A single capability description for 'gameModeCapabilities'.</span>
<a name="line-67"></a>
<a name="line-68"></a><a name="GameModeCapabilityDescription"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>GameModeCapabilityDescription</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Where'</span> <span class='hs-conid'>GameModeCapability</span> <span class='hs-conid'>Relation</span> <span class='hs-conid'>Int</span>
<a name="line-69"></a>   <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span> <span class='hs-layout'>)</span>
<a name="line-70"></a>
<a name="line-71"></a><a name="gameModeCapabilityDescriptionToString"></a><span class='hs-definition'>gameModeCapabilityDescriptionToString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>GameModeCapabilityDescription</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-72"></a><span class='hs-definition'>gameModeCapabilityDescriptionToString</span> <span class='hs-layout'>(</span><span class='hs-conid'>Where'</span> <span class='hs-varid'>c</span> <span class='hs-varid'>r</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-73"></a>      <span class='hs-varid'>gameModeCapabilityToString</span> <span class='hs-varid'>c</span> <span class='hs-varop'>++</span> <span class='hs-varid'>relationToString</span> <span class='hs-varid'>r</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>i</span>
<a name="line-74"></a>
<a name="line-75"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-76"></a>
<a name="line-77"></a><span class='hs-comment'>-- | Controls the /game mode/ to be used when 'enterGameMode' is called. It is</span>
<a name="line-78"></a><span class='hs-comment'>-- described by a list of zero or more capability descriptions, which are</span>
<a name="line-79"></a><span class='hs-comment'>-- translated into a set of criteria used to select the appropriate screen</span>
<a name="line-80"></a><span class='hs-comment'>-- configuration. The criteria are matched in strict left to right order of</span>
<a name="line-81"></a><span class='hs-comment'>-- precdence. That is, the first specified criterion (leftmost) takes precedence</span>
<a name="line-82"></a><span class='hs-comment'>-- over the later criteria for non-exact criteria</span>
<a name="line-83"></a><span class='hs-comment'>-- ('Graphics.UI.GLUT.Initialization.IsGreaterThan',</span>
<a name="line-84"></a><span class='hs-comment'>-- 'Graphics.UI.GLUT.Initialization.IsLessThan', etc.). Exact criteria</span>
<a name="line-85"></a><span class='hs-comment'>-- ('Graphics.UI.GLUT.Initialization.IsEqualTo',</span>
<a name="line-86"></a><span class='hs-comment'>-- 'Graphics.UI.GLUT.Initialization.IsNotEqualTo') must match exactly so</span>
<a name="line-87"></a><span class='hs-comment'>-- precedence is not relevant.</span>
<a name="line-88"></a><span class='hs-comment'>--</span>
<a name="line-89"></a><span class='hs-comment'>-- To determine which configuration will actually be tried by 'enterGameMode'</span>
<a name="line-90"></a><span class='hs-comment'>-- (if any), use 'gameModeInfo'.</span>
<a name="line-91"></a><span class='hs-comment'>--</span>
<a name="line-92"></a><span class='hs-comment'>-- Note that even for game mode the current values of</span>
<a name="line-93"></a><span class='hs-comment'>-- 'Graphics.UI.GLUT.Initialization.initialDisplayMode'or</span>
<a name="line-94"></a><span class='hs-comment'>-- 'Graphics.UI.GLUT.Initialization.initialDisplayCapabilities' will</span>
<a name="line-95"></a><span class='hs-comment'>-- determine which buffers are available, if double buffering is used or not,</span>
<a name="line-96"></a><span class='hs-comment'>-- etc.</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="gameModeCapabilities"></a><span class='hs-definition'>gameModeCapabilities</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SettableStateVar</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>GameModeCapabilityDescription</span><span class='hs-keyglyph'>]</span>
<a name="line-99"></a><span class='hs-definition'>gameModeCapabilities</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>makeSettableStateVar</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>ds</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-100"></a>   <span class='hs-varid'>withCString</span> <span class='hs-layout'>(</span><span class='hs-varid'>descriptionsToString</span> <span class='hs-varid'>ds</span><span class='hs-layout'>)</span> <span class='hs-varid'>glutGameModeString</span>
<a name="line-101"></a>
<a name="line-102"></a><a name="descriptionsToString"></a><span class='hs-comment'>-- freeglut currently handles only simple game mode descriptions like "WxH:B@R",</span>
<a name="line-103"></a><span class='hs-comment'>-- so we try hard to use this format instead of the more general format allowed</span>
<a name="line-104"></a><span class='hs-comment'>-- by the "real" GLUT.</span>
<a name="line-105"></a><span class='hs-definition'>descriptionsToString</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>GameModeCapabilityDescription</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-106"></a><span class='hs-definition'>descriptionsToString</span> <span class='hs-varid'>ds</span> <span class='hs-keyglyph'>=</span>
<a name="line-107"></a>   <span class='hs-keyword'>let</span> <span class='hs-varid'>ws</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Where'</span> <span class='hs-conid'>GameModeWidth</span>        <span class='hs-conid'>IsEqualTo</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>ds</span> <span class='hs-keyglyph'>]</span>
<a name="line-108"></a>       <span class='hs-varid'>hs</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Where'</span> <span class='hs-conid'>GameModeHeight</span>       <span class='hs-conid'>IsEqualTo</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>ds</span> <span class='hs-keyglyph'>]</span>
<a name="line-109"></a>       <span class='hs-varid'>bs</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Where'</span> <span class='hs-conid'>GameModeBitsPerPlane</span> <span class='hs-conid'>IsEqualTo</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>ds</span> <span class='hs-keyglyph'>]</span>
<a name="line-110"></a>       <span class='hs-varid'>rs</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Where'</span> <span class='hs-conid'>GameModeRefreshRate</span>  <span class='hs-conid'>IsEqualTo</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>ds</span> <span class='hs-keyglyph'>]</span>
<a name="line-111"></a>       <span class='hs-varid'>allSimple</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>length</span> <span class='hs-varid'>ws</span> <span class='hs-varop'>+</span> <span class='hs-varid'>length</span> <span class='hs-varid'>hs</span> <span class='hs-varop'>+</span> <span class='hs-varid'>length</span> <span class='hs-varid'>bs</span> <span class='hs-varop'>+</span> <span class='hs-varid'>length</span> <span class='hs-varid'>rs</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-varid'>length</span> <span class='hs-varid'>ds</span><span class='hs-layout'>)</span>
<a name="line-112"></a>       <span class='hs-varid'>dimensionsOK</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>null</span> <span class='hs-varid'>ws</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-varid'>null</span> <span class='hs-varid'>hs</span><span class='hs-layout'>)</span>
<a name="line-113"></a>   <span class='hs-keyword'>in</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>allSimple</span> <span class='hs-varop'>&amp;&amp;</span> <span class='hs-varid'>dimensionsOK</span>
<a name="line-114"></a>         <span class='hs-keyword'>then</span> <span class='hs-varid'>simpleCapStr</span> <span class='hs-varid'>ws</span> <span class='hs-varid'>hs</span> <span class='hs-varid'>bs</span> <span class='hs-varid'>rs</span>
<a name="line-115"></a>         <span class='hs-keyword'>else</span> <span class='hs-varid'>generalCapStr</span> <span class='hs-varid'>ds</span>
<a name="line-116"></a>
<a name="line-117"></a><a name="simpleCapStr"></a><span class='hs-definition'>simpleCapStr</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Int</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Int</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Int</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Int</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-118"></a><span class='hs-definition'>simpleCapStr</span> <span class='hs-varid'>ws</span> <span class='hs-varid'>hs</span> <span class='hs-varid'>bs</span> <span class='hs-varid'>rs</span> <span class='hs-keyglyph'>=</span>
<a name="line-119"></a>   <span class='hs-varid'>showCap</span> <span class='hs-str'>""</span> <span class='hs-varid'>ws</span> <span class='hs-varop'>++</span> <span class='hs-varid'>showCap</span> <span class='hs-str'>"x"</span> <span class='hs-varid'>hs</span> <span class='hs-varop'>++</span> <span class='hs-varid'>showCap</span> <span class='hs-str'>":"</span> <span class='hs-varid'>bs</span> <span class='hs-varop'>++</span> <span class='hs-varid'>showCap</span> <span class='hs-str'>"@"</span> <span class='hs-varid'>rs</span>
<a name="line-120"></a>   <span class='hs-keyword'>where</span> <span class='hs-varid'>showCap</span> <span class='hs-keyword'>_</span>      <span class='hs-conid'>[]</span>    <span class='hs-keyglyph'>=</span> <span class='hs-str'>""</span>
<a name="line-121"></a>         <span class='hs-varid'>showCap</span> <span class='hs-varid'>prefix</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>prefix</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>x</span>
<a name="line-122"></a>
<a name="line-123"></a><a name="generalCapStr"></a><span class='hs-definition'>generalCapStr</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>GameModeCapabilityDescription</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-124"></a><span class='hs-definition'>generalCapStr</span> <span class='hs-keyglyph'>=</span>
<a name="line-125"></a>   <span class='hs-varid'>concat</span> <span class='hs-varop'>.</span> <span class='hs-varid'>intersperse</span> <span class='hs-str'>" "</span> <span class='hs-varop'>.</span> <span class='hs-varid'>map</span> <span class='hs-varid'>gameModeCapabilityDescriptionToString</span>
<a name="line-126"></a>
<a name="line-127"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-128"></a>
<a name="line-129"></a><span class='hs-comment'>-- | Enter /game mode/, trying to change resolution, refresh rate, etc., as</span>
<a name="line-130"></a><span class='hs-comment'>-- specified by the current value of 'gameModeCapabilities'. An identifier for</span>
<a name="line-131"></a><span class='hs-comment'>-- the game mode window and a flag, indicating if the display mode actually</span>
<a name="line-132"></a><span class='hs-comment'>-- changed, are returned. The game mode window is made the /current window/.</span>
<a name="line-133"></a><span class='hs-comment'>--</span>
<a name="line-134"></a><span class='hs-comment'>-- Re-entering /game mode/ is allowed, the previous game mode window gets</span>
<a name="line-135"></a><span class='hs-comment'>-- destroyed by this, and a new one is created.</span>
<a name="line-136"></a>
<a name="line-137"></a><a name="enterGameMode"></a><span class='hs-definition'>enterGameMode</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-conid'>Window</span><span class='hs-layout'>,</span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span>
<a name="line-138"></a><span class='hs-definition'>enterGameMode</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-139"></a>   <span class='hs-varid'>w</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>glutEnterGameMode</span>
<a name="line-140"></a>   <span class='hs-varid'>c</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getBool</span> <span class='hs-varid'>glut_GAME_MODE_DISPLAY_CHANGED</span>
<a name="line-141"></a>   <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Window</span> <span class='hs-varid'>w</span><span class='hs-layout'>,</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span>
<a name="line-142"></a>
<a name="line-143"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-144"></a>
<a name="line-145"></a><span class='hs-comment'>-- | Leave /game mode/, restoring the old display mode and destroying the game</span>
<a name="line-146"></a><span class='hs-comment'>-- mode window.</span>
<a name="line-147"></a>
<a name="line-148"></a><a name="leaveGameMode"></a><span class='hs-definition'>leaveGameMode</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-149"></a><span class='hs-definition'>leaveGameMode</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>glutLeaveGameMode</span>
<a name="line-150"></a>
<a name="line-151"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-152"></a>
<a name="line-153"></a><span class='hs-comment'>-- | The color depth of the screen, measured in bits (e.g. 8, 16, 24, 32, ...)</span>
<a name="line-154"></a>
<a name="line-155"></a><a name="BitsPerPlane"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>BitsPerPlane</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Int</span>
<a name="line-156"></a>
<a name="line-157"></a><span class='hs-comment'>-- | The refresh rate of the screen, measured in Hertz (e.g. 60, 75, 100, ...)</span>
<a name="line-158"></a>
<a name="line-159"></a><a name="RefreshRate"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>RefreshRate</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Int</span>
<a name="line-160"></a>
<a name="line-161"></a><a name="GameModeInfo"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>GameModeInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GameModeInfo</span> <span class='hs-conid'>Size</span> <span class='hs-conid'>BitsPerPlane</span> <span class='hs-conid'>RefreshRate</span>
<a name="line-162"></a>   <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span> <span class='hs-layout'>)</span>
<a name="line-163"></a>
<a name="line-164"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-165"></a>
<a name="line-166"></a><span class='hs-comment'>-- | Return 'Just' the mode which would be tried by the next call to</span>
<a name="line-167"></a><span class='hs-comment'>-- 'enterGameMode'. Returns 'Nothing' if the mode requested by the current value</span>
<a name="line-168"></a><span class='hs-comment'>-- of 'gameModeCapabilities' is not possible, in which case 'enterGameMode'</span>
<a name="line-169"></a><span class='hs-comment'>-- would simply create a full screen window using the current mode.</span>
<a name="line-170"></a>
<a name="line-171"></a><a name="gameModeInfo"></a><span class='hs-definition'>gameModeInfo</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>GettableStateVar</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>GameModeInfo</span><span class='hs-layout'>)</span>
<a name="line-172"></a><span class='hs-definition'>gameModeInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>makeGettableStateVar</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-173"></a>   <span class='hs-varid'>possible</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getBool</span> <span class='hs-varid'>glut_GAME_MODE_POSSIBLE</span>
<a name="line-174"></a>   <span class='hs-keyword'>if</span> <span class='hs-varid'>possible</span>
<a name="line-175"></a>      <span class='hs-keyword'>then</span> <span class='hs-keyword'>do</span>
<a name="line-176"></a>         <span class='hs-varid'>w</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>glutGameModeGet</span> <span class='hs-varid'>glut_GAME_MODE_WIDTH</span>
<a name="line-177"></a>         <span class='hs-varid'>h</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>glutGameModeGet</span> <span class='hs-varid'>glut_GAME_MODE_HEIGHT</span>
<a name="line-178"></a>         <span class='hs-keyword'>let</span> <span class='hs-varid'>size</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Size</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span>
<a name="line-179"></a>         <span class='hs-varid'>b</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>glutGameModeGet</span> <span class='hs-varid'>glut_GAME_MODE_PIXEL_DEPTH</span>
<a name="line-180"></a>         <span class='hs-varid'>r</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>glutGameModeGet</span> <span class='hs-varid'>glut_GAME_MODE_REFRESH_RATE</span>
<a name="line-181"></a>         <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Just</span> <span class='hs-varop'>$</span> <span class='hs-conid'>GameModeInfo</span> <span class='hs-varid'>size</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span>
<a name="line-182"></a>      <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span>
<a name="line-183"></a>
<a name="line-184"></a><a name="getBool"></a><span class='hs-definition'>getBool</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>GLenum</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>Bool</span>
<a name="line-185"></a><span class='hs-definition'>getBool</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-186"></a>  <span class='hs-varid'>val</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>glutGameModeGet</span> <span class='hs-varid'>x</span>
<a name="line-187"></a>  <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>val</span> <span class='hs-varop'>/=</span> <span class='hs-num'>0</span>
<a name="line-188"></a>
<a name="line-189"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-190"></a>
<a name="line-191"></a><span class='hs-comment'>-- | Contains 'True' when the /game mode/ is active, 'False' otherwise.</span>
<a name="line-192"></a>
<a name="line-193"></a><a name="gameModeActive"></a><span class='hs-definition'>gameModeActive</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>GettableStateVar</span> <span class='hs-conid'>Bool</span>
<a name="line-194"></a><span class='hs-definition'>gameModeActive</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>makeGettableStateVar</span> <span class='hs-varop'>$</span> <span class='hs-varid'>getBool</span> <span class='hs-varid'>glut_GAME_MODE_ACTIVE</span>
</pre></body>
</html>