This file is indexed.

/usr/share/doc/libghc-gloss-doc/html/src/Graphics-Gloss-Internals-Render-Circle.html is in libghc-gloss-doc 1.7.8.3-1.

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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
<?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>Graphics/Gloss/Internals/Render/Circle.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE BangPatterns, MagicHash, PatternGuards #-}</span>
<a name="line-2"></a><span class='hs-comment'>{-# OPTIONS_HADDOCK hide #-}</span>
<a name="line-3"></a>
<a name="line-4"></a><span class='hs-comment'>-- | Fast(ish) rendering of circles.</span>
<a name="line-5"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Internals</span><span class='hs-varop'>.</span><span class='hs-conid'>Render</span><span class='hs-varop'>.</span><span class='hs-conid'>Circle</span>
<a name="line-6"></a>        <span class='hs-layout'>(</span> <span class='hs-varid'>renderCircle</span>
<a name="line-7"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>renderArc</span><span class='hs-layout'>)</span>
<a name="line-8"></a><span class='hs-keyword'>where</span>
<a name="line-9"></a><span class='hs-keyword'>import</span> 	<span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Internals</span><span class='hs-varop'>.</span><span class='hs-conid'>Render</span><span class='hs-varop'>.</span><span class='hs-conid'>Common</span>
<a name="line-10"></a><span class='hs-keyword'>import</span>  <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Geometry</span><span class='hs-varop'>.</span><span class='hs-conid'>Angle</span>
<a name="line-11"></a><span class='hs-keyword'>import</span>	<span class='hs-keyword'>qualified</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'>GL</span>		<span class='hs-keyword'>as</span> <span class='hs-conid'>GL</span>
<a name="line-12"></a><span class='hs-keyword'>import</span>	<span class='hs-conid'>GHC</span><span class='hs-varop'>.</span><span class='hs-conid'>Exts</span>
<a name="line-13"></a>
<a name="line-14"></a>
<a name="line-15"></a><a name="circleSteps"></a><span class='hs-comment'>-- | Decide how many line segments to use to render the circle.</span>
<a name="line-16"></a><span class='hs-comment'>--   The number of segments we should use to get a nice picture depends on </span>
<a name="line-17"></a><span class='hs-comment'>--   the size of the circle on the screen, not its intrinsic radius.</span>
<a name="line-18"></a><span class='hs-comment'>--   If the viewport has been zoomed-in then we need to use more segments.</span>
<a name="line-19"></a><span class='hs-comment'>--</span>
<a name="line-20"></a><span class='hs-comment'>{-# INLINE circleSteps #-}</span>
<a name="line-21"></a><span class='hs-definition'>circleSteps</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span>
<a name="line-22"></a><span class='hs-definition'>circleSteps</span> <span class='hs-varid'>sDiam</span>
<a name="line-23"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>sDiam</span> <span class='hs-varop'>&lt;</span> <span class='hs-num'>8</span>     <span class='hs-keyglyph'>=</span> <span class='hs-num'>8</span>
<a name="line-24"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>sDiam</span> <span class='hs-varop'>&lt;</span> <span class='hs-num'>16</span>    <span class='hs-keyglyph'>=</span> <span class='hs-num'>16</span>
<a name="line-25"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>sDiam</span> <span class='hs-varop'>&lt;</span> <span class='hs-num'>32</span>    <span class='hs-keyglyph'>=</span> <span class='hs-num'>32</span>
<a name="line-26"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span>     <span class='hs-keyglyph'>=</span> <span class='hs-num'>64</span>
<a name="line-27"></a>
<a name="line-28"></a>
<a name="line-29"></a><a name="renderCircle"></a><span class='hs-comment'>-- Circle ---------------------------------------------------------------------</span>
<a name="line-30"></a><span class='hs-comment'>-- | Render a circle with the given thickness</span>
<a name="line-31"></a><span class='hs-definition'>renderCircle</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-32"></a><span class='hs-definition'>renderCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>scaleFactor</span> <span class='hs-varid'>radius_</span> <span class='hs-varid'>thickness_</span>
<a name="line-33"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>go</span> <span class='hs-layout'>(</span><span class='hs-varid'>abs</span> <span class='hs-varid'>radius_</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>abs</span> <span class='hs-varid'>thickness_</span><span class='hs-layout'>)</span>
<a name="line-34"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>go</span> <span class='hs-varid'>radius</span> <span class='hs-varid'>thickness</span>
<a name="line-35"></a>
<a name="line-36"></a>        <span class='hs-comment'>-- If the circle is smaller than a pixel, render it as a point.</span>
<a name="line-37"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>thickness</span>     <span class='hs-varop'>==</span> <span class='hs-num'>0</span>
<a name="line-38"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>radScreen</span>     <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>scaleFactor</span> <span class='hs-varop'>*</span> <span class='hs-layout'>(</span><span class='hs-varid'>radius</span> <span class='hs-varop'>+</span> <span class='hs-varid'>thickness</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span><span class='hs-layout'>)</span>
<a name="line-39"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>radScreen</span>     <span class='hs-varop'>&lt;=</span> <span class='hs-num'>1</span>
<a name="line-40"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-varid'>renderPrimitive</span> <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>Points</span>
<a name="line-41"></a>            <span class='hs-varop'>$</span> <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-varid'>vertex</span> <span class='hs-varop'>$</span> <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>Vertex2</span> <span class='hs-layout'>(</span><span class='hs-varid'>gf</span> <span class='hs-varid'>posX</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>gf</span> <span class='hs-varid'>posY</span><span class='hs-layout'>)</span>
<a name="line-42"></a>
<a name="line-43"></a>        <span class='hs-comment'>-- Render zero thickness circles with lines.</span>
<a name="line-44"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>thickness</span> <span class='hs-varop'>==</span> <span class='hs-num'>0</span>
<a name="line-45"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>radScreen</span>	<span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>scaleFactor</span> <span class='hs-varop'>*</span> <span class='hs-varid'>radius</span>
<a name="line-46"></a>	<span class='hs-layout'>,</span> <span class='hs-varid'>steps</span>		<span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>circleSteps</span> <span class='hs-varid'>radScreen</span>
<a name="line-47"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>renderCircleLine</span>  <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>steps</span> <span class='hs-varid'>radius</span>
<a name="line-48"></a>
<a name="line-49"></a>        <span class='hs-comment'>-- Some thick circle.</span>
<a name="line-50"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>radScreen</span>     <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>scaleFactor</span> <span class='hs-varop'>*</span> <span class='hs-layout'>(</span><span class='hs-varid'>radius</span> <span class='hs-varop'>+</span> <span class='hs-varid'>thickness</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span><span class='hs-layout'>)</span>
<a name="line-51"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>steps</span>         <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>circleSteps</span> <span class='hs-varid'>radScreen</span>
<a name="line-52"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>renderCircleStrip</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>steps</span> <span class='hs-varid'>radius</span> <span class='hs-varid'>thickness</span>
<a name="line-53"></a>
<a name="line-54"></a>
<a name="line-55"></a><a name="renderCircleLine"></a><span class='hs-comment'>-- | Render a circle as a line.</span>
<a name="line-56"></a><span class='hs-definition'>renderCircleLine</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-57"></a><span class='hs-definition'>renderCircleLine</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>posX</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>posY</span><span class='hs-layout'>)</span> <span class='hs-varid'>steps</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>rad</span><span class='hs-layout'>)</span>
<a name="line-58"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span>  <span class='hs-varid'>n</span>               <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>steps</span>
<a name="line-59"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStep</span><span class='hs-layout'>)</span>     <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-num'>2</span> <span class='hs-varop'>*</span> <span class='hs-varid'>pi</span><span class='hs-layout'>)</span> <span class='hs-varop'>/</span> <span class='hs-varid'>n</span>
<a name="line-60"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStop</span><span class='hs-layout'>)</span>     <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-num'>2</span> <span class='hs-varop'>*</span> <span class='hs-varid'>pi</span><span class='hs-layout'>)</span>
<a name="line-61"></a>
<a name="line-62"></a>   <span class='hs-keyword'>in</span>   <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-varid'>renderPrimitive</span> <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>LineLoop</span>
<a name="line-63"></a>         <span class='hs-varop'>$</span> <span class='hs-varid'>renderCircleLine_step</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>tStep</span> <span class='hs-varid'>tStop</span> <span class='hs-varid'>rad</span> <span class='hs-num'>0.0</span><span class='hs-cpp'>#</span>
<a name="line-64"></a><span class='hs-comment'>{-# INLINE renderCircleLine #-}</span>
<a name="line-65"></a>
<a name="line-66"></a>
<a name="line-67"></a><a name="renderCircleStrip"></a><span class='hs-comment'>-- | Render a circle with a given thickness as a triangle strip</span>
<a name="line-68"></a><span class='hs-definition'>renderCircleStrip</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-69"></a><span class='hs-definition'>renderCircleStrip</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>posX</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>posY</span><span class='hs-layout'>)</span> <span class='hs-varid'>steps</span> <span class='hs-varid'>r</span> <span class='hs-varid'>width</span>
<a name="line-70"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span>  <span class='hs-varid'>n</span>               <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>steps</span>
<a name="line-71"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStep</span><span class='hs-layout'>)</span>     <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-num'>2</span> <span class='hs-varop'>*</span> <span class='hs-varid'>pi</span><span class='hs-layout'>)</span> <span class='hs-varop'>/</span> <span class='hs-varid'>n</span>
<a name="line-72"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStop</span><span class='hs-layout'>)</span>     <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-num'>2</span> <span class='hs-varop'>*</span> <span class='hs-varid'>pi</span><span class='hs-layout'>)</span> <span class='hs-varop'>+</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStep</span><span class='hs-layout'>)</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-73"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>r1</span><span class='hs-layout'>)</span>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <span class='hs-comment'>-</span> <span class='hs-varid'>width</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-74"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>r2</span><span class='hs-layout'>)</span>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <span class='hs-varop'>+</span> <span class='hs-varid'>width</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-75"></a>
<a name="line-76"></a>   <span class='hs-keyword'>in</span>   <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-varid'>renderPrimitive</span> <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>TriangleStrip</span>
<a name="line-77"></a>         <span class='hs-varop'>$</span> <span class='hs-varid'>renderCircleStrip_step</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>tStep</span> <span class='hs-varid'>tStop</span> <span class='hs-varid'>r1</span> <span class='hs-num'>0.0</span><span class='hs-cpp'>#</span> <span class='hs-varid'>r2</span> 
<a name="line-78"></a>                <span class='hs-layout'>(</span><span class='hs-varid'>tStep</span> <span class='hs-varop'>`</span><span class='hs-varid'>divideFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-num'>2.0</span><span class='hs-cpp'>#</span><span class='hs-layout'>)</span>
<a name="line-79"></a><span class='hs-comment'>{-# INLINE renderCircleStrip #-}</span>
<a name="line-80"></a>
<a name="line-81"></a>
<a name="line-82"></a><a name="renderArc"></a><span class='hs-comment'>-- Arc ------------------------------------------------------------------------</span>
<a name="line-83"></a><span class='hs-comment'>-- | Render an arc with the given thickness.</span>
<a name="line-84"></a><span class='hs-definition'>renderArc</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-85"></a><span class='hs-definition'>renderArc</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>scaleFactor</span> <span class='hs-varid'>radius_</span> <span class='hs-varid'>a1</span> <span class='hs-varid'>a2</span> <span class='hs-varid'>thickness_</span>
<a name="line-86"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>go</span> <span class='hs-layout'>(</span><span class='hs-varid'>abs</span> <span class='hs-varid'>radius_</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>abs</span> <span class='hs-varid'>thickness_</span><span class='hs-layout'>)</span>
<a name="line-87"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>go</span> <span class='hs-varid'>radius</span> <span class='hs-varid'>thickness</span>
<a name="line-88"></a>
<a name="line-89"></a>        <span class='hs-comment'>-- Render zero thickness arcs with lines.</span>
<a name="line-90"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>thickness</span> <span class='hs-varop'>==</span> <span class='hs-num'>0</span>
<a name="line-91"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>radScreen</span>     <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>scaleFactor</span> <span class='hs-varop'>*</span> <span class='hs-varid'>radius</span>
<a name="line-92"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>steps</span>         <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>circleSteps</span> <span class='hs-varid'>radScreen</span>
<a name="line-93"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>renderArcLine</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>steps</span> <span class='hs-varid'>radius</span> <span class='hs-varid'>a1</span> <span class='hs-varid'>a2</span>
<a name="line-94"></a>
<a name="line-95"></a>        <span class='hs-comment'>-- Some thick arc.</span>
<a name="line-96"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>radScreen</span>     <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>scaleFactor</span> <span class='hs-varop'>*</span> <span class='hs-layout'>(</span><span class='hs-varid'>radius</span> <span class='hs-varop'>+</span> <span class='hs-varid'>thickness</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span><span class='hs-layout'>)</span>
<a name="line-97"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>steps</span>         <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>circleSteps</span> <span class='hs-varid'>radScreen</span>
<a name="line-98"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>renderArcStrip</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>steps</span> <span class='hs-varid'>radius</span> <span class='hs-varid'>a1</span> <span class='hs-varid'>a2</span> <span class='hs-varid'>thickness</span>
<a name="line-99"></a>  
<a name="line-100"></a>
<a name="line-101"></a><a name="renderArcLine"></a><span class='hs-comment'>-- | Render an arc as a line.</span>
<a name="line-102"></a><span class='hs-definition'>renderArcLine</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-103"></a><span class='hs-definition'>renderArcLine</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>posX</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>posY</span><span class='hs-layout'>)</span> <span class='hs-varid'>steps</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>rad</span><span class='hs-layout'>)</span> <span class='hs-varid'>a1</span> <span class='hs-varid'>a2</span>
<a name="line-104"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span> 	<span class='hs-varid'>n</span>		<span class='hs-keyglyph'>=</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>steps</span>
<a name="line-105"></a>	<span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStep</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-num'>2</span> <span class='hs-varop'>*</span> <span class='hs-varid'>pi</span><span class='hs-layout'>)</span> <span class='hs-varop'>/</span> <span class='hs-varid'>n</span>
<a name="line-106"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStart</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>degToRad</span> <span class='hs-varid'>a1</span>
<a name="line-107"></a>	<span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStop</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>degToRad</span> <span class='hs-varid'>a2</span> <span class='hs-varop'>+</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>a1</span> <span class='hs-varop'>&gt;=</span> <span class='hs-varid'>a2</span> <span class='hs-keyword'>then</span> <span class='hs-num'>2</span> <span class='hs-varop'>*</span> <span class='hs-varid'>pi</span> <span class='hs-keyword'>else</span> <span class='hs-num'>0</span>
<a name="line-108"></a>
<a name="line-109"></a>        <span class='hs-comment'>-- force the line to end at the desired angle</span>
<a name="line-110"></a>        <span class='hs-varid'>endVertex</span>       <span class='hs-keyglyph'>=</span> <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>rad</span> <span class='hs-varid'>tStop</span>
<a name="line-111"></a>
<a name="line-112"></a>   <span class='hs-keyword'>in</span>	<span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-varid'>renderPrimitive</span> <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>LineStrip</span>
<a name="line-113"></a>   	 <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>   <span class='hs-varid'>renderCircleLine_step</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>tStep</span> <span class='hs-varid'>tStop</span> <span class='hs-varid'>rad</span> <span class='hs-varid'>tStart</span>
<a name="line-114"></a>                <span class='hs-varid'>endVertex</span>
<a name="line-115"></a><span class='hs-comment'>{-# INLINE renderArcLine #-}</span>
<a name="line-116"></a>
<a name="line-117"></a>
<a name="line-118"></a><a name="renderArcStrip"></a><span class='hs-comment'>-- | Render an arc with a given thickness as a triangle strip</span>
<a name="line-119"></a><span class='hs-definition'>renderArcStrip</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-120"></a><span class='hs-definition'>renderArcStrip</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>posX</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>posY</span><span class='hs-layout'>)</span> <span class='hs-varid'>steps</span> <span class='hs-varid'>r</span> <span class='hs-varid'>a1</span> <span class='hs-varid'>a2</span> <span class='hs-varid'>width</span>
<a name="line-121"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span>	<span class='hs-varid'>n</span>		<span class='hs-keyglyph'>=</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>steps</span>
<a name="line-122"></a>        <span class='hs-varid'>tStep</span>           <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-num'>2</span> <span class='hs-varop'>*</span> <span class='hs-varid'>pi</span><span class='hs-layout'>)</span> <span class='hs-varop'>/</span> <span class='hs-varid'>n</span>
<a name="line-123"></a>
<a name="line-124"></a>        <span class='hs-varid'>t1</span>              <span class='hs-keyglyph'>=</span> <span class='hs-varid'>normaliseAngle</span> <span class='hs-varop'>$</span> <span class='hs-varid'>degToRad</span> <span class='hs-varid'>a1</span>
<a name="line-125"></a>        <span class='hs-varid'>t2</span>              <span class='hs-keyglyph'>=</span> <span class='hs-varid'>normaliseAngle</span> <span class='hs-varop'>$</span> <span class='hs-varid'>degToRad</span> <span class='hs-varid'>a2</span>
<a name="line-126"></a>        <span class='hs-layout'>(</span><span class='hs-varid'>tStart</span><span class='hs-layout'>,</span> <span class='hs-varid'>tStop</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>t1</span> <span class='hs-varop'>&lt;=</span> <span class='hs-varid'>t2</span> <span class='hs-keyword'>then</span> <span class='hs-layout'>(</span><span class='hs-varid'>t1</span><span class='hs-layout'>,</span> <span class='hs-varid'>t2</span><span class='hs-layout'>)</span> <span class='hs-keyword'>else</span> <span class='hs-layout'>(</span><span class='hs-varid'>t2</span><span class='hs-layout'>,</span> <span class='hs-varid'>t1</span><span class='hs-layout'>)</span>
<a name="line-127"></a>        <span class='hs-varid'>tDiff</span>           <span class='hs-keyglyph'>=</span> <span class='hs-varid'>tStop</span> <span class='hs-comment'>-</span> <span class='hs-varid'>tStart</span>
<a name="line-128"></a>        <span class='hs-varid'>tMid</span>            <span class='hs-keyglyph'>=</span> <span class='hs-varid'>tStart</span> <span class='hs-varop'>+</span> <span class='hs-varid'>tDiff</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-129"></a>
<a name="line-130"></a> 	<span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStep'</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>tStep</span>
<a name="line-131"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStep2'</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>tStep</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-132"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStart'</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>tStart</span>
<a name="line-133"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tStop'</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>tStop</span>
<a name="line-134"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tCut'</span><span class='hs-layout'>)</span>     <span class='hs-keyglyph'>=</span> <span class='hs-varid'>tStop</span> <span class='hs-comment'>-</span> <span class='hs-varid'>tStep</span>
<a name="line-135"></a>        <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tMid'</span><span class='hs-layout'>)</span>     <span class='hs-keyglyph'>=</span> <span class='hs-varid'>tMid</span>
<a name="line-136"></a>	<span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>r1'</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <span class='hs-comment'>-</span> <span class='hs-varid'>width</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-137"></a>	<span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>r2'</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <span class='hs-varop'>+</span> <span class='hs-varid'>width</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-138"></a>                
<a name="line-139"></a>   <span class='hs-keyword'>in</span>	<span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-varid'>renderPrimitive</span> <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>TriangleStrip</span>
<a name="line-140"></a>   	 <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>  
<a name="line-141"></a>                 <span class='hs-comment'>-- start vector</span>
<a name="line-142"></a>                 <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>r1'</span> <span class='hs-varid'>tStart'</span>
<a name="line-143"></a>                 <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>r2'</span> <span class='hs-varid'>tStart'</span>
<a name="line-144"></a>
<a name="line-145"></a>                 <span class='hs-comment'>-- If we don't have a complete step then just drop a point</span>
<a name="line-146"></a>                 <span class='hs-comment'>-- between the two ending lines.</span>
<a name="line-147"></a>                 <span class='hs-keyword'>if</span> <span class='hs-varid'>tDiff</span> <span class='hs-varop'>&lt;</span> <span class='hs-varid'>tStep</span>
<a name="line-148"></a>                   <span class='hs-keyword'>then</span> <span class='hs-keyword'>do</span>
<a name="line-149"></a>                        <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>r1'</span> <span class='hs-varid'>tMid'</span>
<a name="line-150"></a>
<a name="line-151"></a>                        <span class='hs-comment'>-- end vectors</span>
<a name="line-152"></a>                        <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>r2'</span> <span class='hs-varid'>tStop'</span>
<a name="line-153"></a>                        <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>r1'</span> <span class='hs-varid'>tStop'</span>
<a name="line-154"></a>
<a name="line-155"></a>
<a name="line-156"></a>                   <span class='hs-keyword'>else</span> <span class='hs-keyword'>do</span>
<a name="line-157"></a>                        <span class='hs-varid'>renderCircleStrip_step</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>tStep'</span> <span class='hs-varid'>tCut'</span> <span class='hs-varid'>r1'</span> <span class='hs-varid'>tStart'</span> <span class='hs-varid'>r2'</span>
<a name="line-158"></a>                                <span class='hs-layout'>(</span><span class='hs-varid'>tStart'</span> <span class='hs-varop'>`</span><span class='hs-varid'>plusFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-varid'>tStep2'</span><span class='hs-layout'>)</span>
<a name="line-159"></a>
<a name="line-160"></a>                        <span class='hs-comment'>-- end vectors</span>
<a name="line-161"></a>                        <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>r1'</span> <span class='hs-varid'>tStop'</span>
<a name="line-162"></a>                        <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>r2'</span> <span class='hs-varid'>tStop'</span>
<a name="line-163"></a><span class='hs-comment'>{-# INLINE renderArcStrip #-}</span>
<a name="line-164"></a>
<a name="line-165"></a>
<a name="line-166"></a><a name="renderCircleLine_step"></a><span class='hs-comment'>-- Step functions -------------------------------------------------------------</span>
<a name="line-167"></a><span class='hs-definition'>renderCircleLine_step</span>
<a name="line-168"></a>        <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span>
<a name="line-169"></a>        <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span>
<a name="line-170"></a>        <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> 
<a name="line-171"></a>        <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-172"></a>
<a name="line-173"></a><span class='hs-definition'>renderCircleLine_step</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>tStep</span> <span class='hs-varid'>tStop</span> <span class='hs-varid'>rad</span> <span class='hs-varid'>tt</span>
<a name="line-174"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>tt</span> <span class='hs-varop'>`</span><span class='hs-varid'>geFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-varid'>tStop</span>
<a name="line-175"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-176"></a>        
<a name="line-177"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span>
<a name="line-178"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>    <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>rad</span> <span class='hs-varid'>tt</span>
<a name="line-179"></a>                <span class='hs-varid'>renderCircleLine_step</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>tStep</span> <span class='hs-varid'>tStop</span> <span class='hs-varid'>rad</span> 
<a name="line-180"></a>                        <span class='hs-layout'>(</span><span class='hs-varid'>tt</span> <span class='hs-varop'>`</span><span class='hs-varid'>plusFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-varid'>tStep</span><span class='hs-layout'>)</span>
<a name="line-181"></a><span class='hs-comment'>{-# INLINE renderCircleLine_step #-}</span>
<a name="line-182"></a>
<a name="line-183"></a>
<a name="line-184"></a><a name="renderCircleStrip_step"></a><span class='hs-definition'>renderCircleStrip_step</span> 
<a name="line-185"></a>	<span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> 
<a name="line-186"></a>	<span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> 
<a name="line-187"></a>	<span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span>
<a name="line-188"></a>        <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-189"></a>
<a name="line-190"></a><span class='hs-definition'>renderCircleStrip_step</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>tStep</span> <span class='hs-varid'>tStop</span> <span class='hs-varid'>r1</span> <span class='hs-varid'>t1</span> <span class='hs-varid'>r2</span> <span class='hs-varid'>t2</span>
<a name="line-191"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-varid'>t1</span> <span class='hs-varop'>`</span><span class='hs-varid'>geFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-varid'>tStop</span>
<a name="line-192"></a>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-193"></a>	
<a name="line-194"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span>
<a name="line-195"></a>	<span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>	<span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>r1</span> <span class='hs-varid'>t1</span>
<a name="line-196"></a>                <span class='hs-varid'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>r2</span> <span class='hs-varid'>t2</span>
<a name="line-197"></a>		<span class='hs-varid'>renderCircleStrip_step</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>tStep</span> <span class='hs-varid'>tStop</span> <span class='hs-varid'>r1</span> 
<a name="line-198"></a>			<span class='hs-layout'>(</span><span class='hs-varid'>t1</span> <span class='hs-varop'>`</span><span class='hs-varid'>plusFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-varid'>tStep</span><span class='hs-layout'>)</span> <span class='hs-varid'>r2</span> <span class='hs-layout'>(</span><span class='hs-varid'>t2</span> <span class='hs-varop'>`</span><span class='hs-varid'>plusFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-varid'>tStep</span><span class='hs-layout'>)</span>
<a name="line-199"></a><span class='hs-comment'>{-# INLINE renderCircleStrip_step #-}</span>
<a name="line-200"></a>
<a name="line-201"></a>
<a name="line-202"></a><a name="addPoint"></a><span class='hs-definition'>addPoint</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-203"></a><span class='hs-definition'>addPoint</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-keyglyph'>=</span>
<a name="line-204"></a>  <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-varid'>vertex</span> <span class='hs-varop'>$</span> <span class='hs-conid'>GL</span><span class='hs-varop'>.</span><span class='hs-conid'>Vertex2</span> <span class='hs-layout'>(</span><span class='hs-varid'>gf</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>gf</span> <span class='hs-layout'>(</span><span class='hs-conid'>F</span><span class='hs-cpp'>#</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-205"></a><span class='hs-comment'>{-# INLINE addPoint #-}</span>
<a name="line-206"></a>
<a name="line-207"></a>
<a name="line-208"></a><a name="addPointOnCircle"></a><span class='hs-definition'>addPointOnCircle</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span><span class='hs-cpp'>#</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-209"></a><span class='hs-definition'>addPointOnCircle</span> <span class='hs-varid'>posX</span> <span class='hs-varid'>posY</span> <span class='hs-varid'>rad</span> <span class='hs-varid'>tt</span> <span class='hs-keyglyph'>=</span>
<a name="line-210"></a>  <span class='hs-varid'>addPoint</span>
<a name="line-211"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>posX</span> <span class='hs-varop'>`</span><span class='hs-varid'>plusFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-layout'>(</span><span class='hs-varid'>rad</span> <span class='hs-varop'>`</span><span class='hs-varid'>timesFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-layout'>(</span><span class='hs-varid'>cosFloat</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-212"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>posY</span> <span class='hs-varop'>`</span><span class='hs-varid'>plusFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-layout'>(</span><span class='hs-varid'>rad</span> <span class='hs-varop'>`</span><span class='hs-varid'>timesFloat</span><span class='hs-cpp'>#</span><span class='hs-varop'>`</span> <span class='hs-layout'>(</span><span class='hs-varid'>sinFloat</span><span class='hs-cpp'>#</span> <span class='hs-varid'>tt</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-213"></a><span class='hs-comment'>{-# INLINE addPointOnCircle #-}</span>
<a name="line-214"></a>
<a name="line-215"></a>
<a name="line-216"></a>
<a name="line-217"></a><span class='hs-comment'>{- Unused sector drawing code.
<a name="line-218"></a>   Sectors are currently drawn as compound Pictures,
<a name="line-219"></a>   but we might want this if we end up implementing the ThickSector 
<a name="line-220"></a>   version as well.
<a name="line-221"></a>
<a name="line-222"></a>-- | Render a sector as a line.
<a name="line-223"></a>renderSectorLine :: Float -&gt; Float -&gt; Int -&gt; Float -&gt; Float -&gt; Float -&gt; IO ()
<a name="line-224"></a>renderSectorLine pX@(F# posX) pY@(F# posY) steps (F# rad) a1 a2
<a name="line-225"></a> = let  n               = fromIntegral steps
<a name="line-226"></a>        !(F# tStep)     = (2 * pi) / n
<a name="line-227"></a>        !(F# tStart)    = degToRad a1
<a name="line-228"></a>        !(F# tStop)     = degToRad a2 + if a1 &gt;= a2 then 2 * pi else 0
<a name="line-229"></a>
<a name="line-230"></a>        -- need to set up the edges of the start/end triangles
<a name="line-231"></a>        startVertex     = GL.vertex $ GL.Vertex2 (gf pX) (gf pY)
<a name="line-232"></a>        endVertex       = addPointOnCircle posX posY rad tStop
<a name="line-233"></a>
<a name="line-234"></a>   in   GL.renderPrimitive GL.LineLoop
<a name="line-235"></a>         $ do   startVertex
<a name="line-236"></a>                renderCircleLine_step posX posY tStep tStop rad tStart
<a name="line-237"></a>                endVertex
<a name="line-238"></a>
<a name="line-239"></a>-- | Render a sector.
<a name="line-240"></a>renderSector :: Float -&gt; Float -&gt; Float -&gt; Float -&gt; Float -&gt; Float -&gt; IO ()
<a name="line-241"></a>renderSector posX posY scaleFactor radius a1 a2
<a name="line-242"></a>        | radScreen     &lt;- scaleFactor * radius
<a name="line-243"></a>        , steps         &lt;- circleSteps (2 * radScreen)
<a name="line-244"></a>        = renderSectorLine posX posY steps radius a1 a2
<a name="line-245"></a>-}</span>
<a name="line-246"></a>
</pre></body>
</html>