This file is indexed.

/usr/share/doc/libghc-gloss-doc/html/src/Graphics-Gloss-Data-Picture.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
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
<?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/Data/Picture.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a>
<a name="line-2"></a><span class='hs-comment'>-- | Data types for representing pictures.</span>
<a name="line-3"></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'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Picture</span>
<a name="line-4"></a>	<span class='hs-layout'>(</span> <span class='hs-conid'>Point</span>
<a name="line-5"></a>	<span class='hs-layout'>,</span> <span class='hs-conid'>Vector</span>
<a name="line-6"></a>	<span class='hs-layout'>,</span> <span class='hs-conid'>Path</span>
<a name="line-7"></a>	<span class='hs-layout'>,</span> <span class='hs-conid'>Picture</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-8"></a>	<span class='hs-layout'>,</span> <span class='hs-conid'>BitmapData</span>
<a name="line-9"></a>
<a name="line-10"></a>	<span class='hs-comment'>-- * Aliases for Picture constructors</span>
<a name="line-11"></a>	<span class='hs-layout'>,</span> <span class='hs-varid'>blank</span>
<a name="line-12"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>polygon</span>
<a name="line-13"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>line</span>
<a name="line-14"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>circle</span><span class='hs-layout'>,</span> <span class='hs-varid'>thickCircle</span>
<a name="line-15"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>arc</span><span class='hs-layout'>,</span>    <span class='hs-varid'>thickArc</span>
<a name="line-16"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>text</span>
<a name="line-17"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>bitmap</span>
<a name="line-18"></a>	<span class='hs-layout'>,</span> <span class='hs-varid'>color</span>
<a name="line-19"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>translate</span><span class='hs-layout'>,</span> <span class='hs-varid'>rotate</span><span class='hs-layout'>,</span> <span class='hs-varid'>scale</span>
<a name="line-20"></a>	<span class='hs-layout'>,</span> <span class='hs-varid'>pictures</span>
<a name="line-21"></a>
<a name="line-22"></a>	<span class='hs-comment'>-- * Compound shapes</span>
<a name="line-23"></a> 	<span class='hs-layout'>,</span> <span class='hs-varid'>lineLoop</span>
<a name="line-24"></a> 	<span class='hs-layout'>,</span> <span class='hs-varid'>circleSolid</span>
<a name="line-25"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>arcSolid</span>
<a name="line-26"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>sectorWire</span>
<a name="line-27"></a>	<span class='hs-layout'>,</span> <span class='hs-varid'>rectanglePath</span>
<a name="line-28"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>rectangleWire</span>
<a name="line-29"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>rectangleSolid</span>
<a name="line-30"></a>	<span class='hs-layout'>,</span> <span class='hs-varid'>rectangleUpperPath</span>
<a name="line-31"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>rectangleUpperWire</span>
<a name="line-32"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>rectangleUpperSolid</span>
<a name="line-33"></a>
<a name="line-34"></a>        <span class='hs-comment'>-- * Loading Bitmaps</span>
<a name="line-35"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>bitmapOfForeignPtr</span>
<a name="line-36"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>bitmapOfByteString</span>
<a name="line-37"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>bitmapOfBMP</span>
<a name="line-38"></a>        <span class='hs-layout'>,</span> <span class='hs-varid'>loadBMP</span><span class='hs-layout'>)</span>
<a name="line-39"></a>
<a name="line-40"></a><span class='hs-keyword'>where</span>
<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'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Color</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'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Point</span>
<a name="line-43"></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'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Vector</span>
<a name="line-44"></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-45"></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'>Bitmap</span>
<a name="line-46"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Codec</span><span class='hs-varop'>.</span><span class='hs-conid'>BMP</span>
<a name="line-47"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>ForeignPtr</span>
<a name="line-48"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>Marshal</span><span class='hs-varop'>.</span><span class='hs-conid'>Alloc</span>
<a name="line-49"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>Marshal</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span>
<a name="line-50"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>Ptr</span>
<a name="line-51"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Word</span>
<a name="line-52"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Monoid</span>
<a name="line-53"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span>
<a name="line-54"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Unsafe</span>
<a name="line-55"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Unsafe</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>BSU</span>
<a name="line-56"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span><span class='hs-layout'>)</span>
<a name="line-57"></a>
<a name="line-58"></a><a name="Path"></a><span class='hs-comment'>-- | A path through the x-y plane.</span>
<a name="line-59"></a><a name="Path"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Path</span>	<span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Point</span><span class='hs-keyglyph'>]</span>				
<a name="line-60"></a>
<a name="line-61"></a>
<a name="line-62"></a><a name="Picture"></a><span class='hs-comment'>-- | A 2D picture</span>
<a name="line-63"></a><a name="Picture"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Picture</span>
<a name="line-64"></a>	<span class='hs-comment'>-- Primitives -------------------------------------</span>
<a name="line-65"></a>
<a name="line-66"></a>	<span class='hs-comment'>-- | A blank picture, with nothing in it.</span>
<a name="line-67"></a>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Blank</span>
<a name="line-68"></a>
<a name="line-69"></a>	<span class='hs-comment'>-- | A convex polygon filled with a solid color.</span>
<a name="line-70"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Polygon</span> 	<span class='hs-conid'>Path</span>
<a name="line-71"></a>	
<a name="line-72"></a>	<span class='hs-comment'>-- | A line along an arbitrary path.</span>
<a name="line-73"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Line</span>		<span class='hs-conid'>Path</span>
<a name="line-74"></a>
<a name="line-75"></a>	<span class='hs-comment'>-- | A circle with the given radius.</span>
<a name="line-76"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Circle</span>	<span class='hs-conid'>Float</span>
<a name="line-77"></a>
<a name="line-78"></a>	<span class='hs-comment'>-- | A circle with the given thickness and radius.</span>
<a name="line-79"></a>	<span class='hs-comment'>--   If the thickness is 0 then this is equivalent to `Circle`.</span>
<a name="line-80"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>ThickCircle</span>	<span class='hs-conid'>Float</span> <span class='hs-conid'>Float</span>
<a name="line-81"></a>
<a name="line-82"></a>	<span class='hs-comment'>-- | A circular arc drawn counter-clockwise between two angles </span>
<a name="line-83"></a>        <span class='hs-comment'>--  (in degrees) at the given radius.</span>
<a name="line-84"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Arc</span>           <span class='hs-conid'>Float</span> <span class='hs-conid'>Float</span> <span class='hs-conid'>Float</span>
<a name="line-85"></a>
<a name="line-86"></a>	<span class='hs-comment'>-- | A circular arc drawn counter-clockwise between two angles </span>
<a name="line-87"></a>        <span class='hs-comment'>--  (in degrees), with the given radius  and thickness.</span>
<a name="line-88"></a>	<span class='hs-comment'>--   If the thickness is 0 then this is equivalent to `Arc`.</span>
<a name="line-89"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ThickArc</span>	<span class='hs-conid'>Float</span> <span class='hs-conid'>Float</span> <span class='hs-conid'>Float</span> <span class='hs-conid'>Float</span>
<a name="line-90"></a>
<a name="line-91"></a>	<span class='hs-comment'>-- | Some text to draw with a vector font.</span>
<a name="line-92"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Text</span>		<span class='hs-conid'>String</span>
<a name="line-93"></a>
<a name="line-94"></a>	<span class='hs-comment'>-- | A bitmap image with a width, height and some 32-bit RGBA</span>
<a name="line-95"></a>        <span class='hs-comment'>--   bitmap data.</span>
<a name="line-96"></a>	<span class='hs-comment'>-- </span>
<a name="line-97"></a>	<span class='hs-comment'>--  The boolean flag controls whether Gloss should cache the data</span>
<a name="line-98"></a>        <span class='hs-comment'>--  between frames for speed. If you are programatically generating</span>
<a name="line-99"></a>        <span class='hs-comment'>--  the image for each frame then use `False`. If you have loaded it</span>
<a name="line-100"></a>        <span class='hs-comment'>--  from a file then use `True`.</span>
<a name="line-101"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Bitmap</span>	<span class='hs-conid'>Int</span>	<span class='hs-conid'>Int</span> 	<span class='hs-conid'>BitmapData</span> <span class='hs-conid'>Bool</span>
<a name="line-102"></a>
<a name="line-103"></a>	<span class='hs-comment'>-- Color ------------------------------------------</span>
<a name="line-104"></a>	<span class='hs-comment'>-- | A picture drawn with this color.</span>
<a name="line-105"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Color</span>		<span class='hs-conid'>Color</span>  		<span class='hs-conid'>Picture</span>
<a name="line-106"></a>
<a name="line-107"></a>	<span class='hs-comment'>-- Transforms -------------------------------------</span>
<a name="line-108"></a>	<span class='hs-comment'>-- | A picture translated by the given x and y coordinates.</span>
<a name="line-109"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Translate</span>	<span class='hs-conid'>Float</span> <span class='hs-conid'>Float</span>	<span class='hs-conid'>Picture</span>
<a name="line-110"></a>
<a name="line-111"></a>	<span class='hs-comment'>-- | A picture rotated clockwise by the given angle (in degrees).</span>
<a name="line-112"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Rotate</span>	<span class='hs-conid'>Float</span>		<span class='hs-conid'>Picture</span>
<a name="line-113"></a>
<a name="line-114"></a>	<span class='hs-comment'>-- | A picture scaled by the given x and y factors.</span>
<a name="line-115"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Scale</span>		<span class='hs-conid'>Float</span>	<span class='hs-conid'>Float</span>	<span class='hs-conid'>Picture</span>
<a name="line-116"></a>
<a name="line-117"></a>	<span class='hs-comment'>-- More Pictures ----------------------------------</span>
<a name="line-118"></a>	<span class='hs-comment'>-- | A picture consisting of several others.</span>
<a name="line-119"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Pictures</span>	<span class='hs-keyglyph'>[</span><span class='hs-conid'>Picture</span><span class='hs-keyglyph'>]</span>
<a name="line-120"></a>	<span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-121"></a>
<a name="line-122"></a>
<a name="line-123"></a><a name="instance%20Monoid%20Picture"></a><span class='hs-comment'>-- Instances ------------------------------------------------------------------</span>
<a name="line-124"></a><a name="instance%20Monoid%20Picture"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monoid</span> <span class='hs-conid'>Picture</span> <span class='hs-keyword'>where</span>
<a name="line-125"></a>	<span class='hs-varid'>mempty</span>		<span class='hs-keyglyph'>=</span> <span class='hs-varid'>blank</span>
<a name="line-126"></a>	<span class='hs-varid'>mappend</span> <span class='hs-varid'>a</span> <span class='hs-varid'>b</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Pictures</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>b</span><span class='hs-keyglyph'>]</span>
<a name="line-127"></a>	<span class='hs-varid'>mconcat</span>		<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Pictures</span>
<a name="line-128"></a>
<a name="line-129"></a>
<a name="line-130"></a><span class='hs-comment'>-- Constructors ----------------------------------------------------------------</span>
<a name="line-131"></a><span class='hs-comment'>-- NOTE: The docs here should be identical to the ones on the constructors.</span>
<a name="line-132"></a>
<a name="line-133"></a><a name="blank"></a><span class='hs-comment'>-- | A blank picture, with nothing in it.</span>
<a name="line-134"></a><span class='hs-definition'>blank</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Picture</span>
<a name="line-135"></a><span class='hs-definition'>blank</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Blank</span>
<a name="line-136"></a>
<a name="line-137"></a><a name="polygon"></a><span class='hs-comment'>-- | A convex polygon filled with a solid color.</span>
<a name="line-138"></a><span class='hs-definition'>polygon</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-139"></a><span class='hs-definition'>polygon</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Polygon</span>
<a name="line-140"></a>
<a name="line-141"></a><a name="line"></a><span class='hs-comment'>-- | A line along an arbitrary path.</span>
<a name="line-142"></a><span class='hs-definition'>line</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-143"></a><span class='hs-definition'>line</span> 	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Line</span>
<a name="line-144"></a>
<a name="line-145"></a><a name="circle"></a><span class='hs-comment'>-- | A circle with the given radius.</span>
<a name="line-146"></a><span class='hs-definition'>circle</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span>  <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-147"></a><span class='hs-definition'>circle</span> 	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Circle</span>
<a name="line-148"></a>
<a name="line-149"></a><a name="thickCircle"></a><span class='hs-comment'>-- | A circle with the given thickness and radius.</span>
<a name="line-150"></a><span class='hs-comment'>--   If the thickness is 0 then this is equivalent to `Circle`.</span>
<a name="line-151"></a><span class='hs-definition'>thickCircle</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'>Picture</span>
<a name="line-152"></a><span class='hs-definition'>thickCircle</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ThickCircle</span>
<a name="line-153"></a>
<a name="line-154"></a><a name="arc"></a><span class='hs-comment'>-- | A circular arc drawn counter-clockwise between two angles (in degrees) </span>
<a name="line-155"></a><span class='hs-comment'>--   at the given radius.</span>
<a name="line-156"></a><span class='hs-definition'>arc</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'>Picture</span>
<a name="line-157"></a><span class='hs-definition'>arc</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Arc</span>
<a name="line-158"></a>
<a name="line-159"></a><a name="thickArc"></a><span class='hs-comment'>-- | A circular arc drawn counter-clockwise between two angles (in degrees),</span>
<a name="line-160"></a><span class='hs-comment'>--   with the given radius  and thickness.</span>
<a name="line-161"></a><span class='hs-comment'>--   If the thickness is 0 then this is equivalent to `Arc`.</span>
<a name="line-162"></a><span class='hs-definition'>thickArc</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'>Picture</span>
<a name="line-163"></a><span class='hs-definition'>thickArc</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ThickArc</span>
<a name="line-164"></a>
<a name="line-165"></a><a name="text"></a><span class='hs-comment'>-- | Some text to draw with a vector font.</span>
<a name="line-166"></a><span class='hs-definition'>text</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-167"></a><span class='hs-definition'>text</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Text</span>
<a name="line-168"></a>
<a name="line-169"></a><a name="bitmap"></a><span class='hs-comment'>-- | A bitmap image with a width, height and a Vector holding the </span>
<a name="line-170"></a><span class='hs-comment'>--   32-bit RGBA bitmap data.</span>
<a name="line-171"></a><span class='hs-comment'>-- </span>
<a name="line-172"></a><span class='hs-comment'>--  The boolean flag controls whether Gloss should cache the data</span>
<a name="line-173"></a><span class='hs-comment'>--  between frames for speed.</span>
<a name="line-174"></a><span class='hs-comment'>--  If you are programatically generating the image for</span>
<a name="line-175"></a><span class='hs-comment'>--  each frame then use `False`.  </span>
<a name="line-176"></a><span class='hs-comment'>--  If you have loaded it from a file then use `True`.</span>
<a name="line-177"></a><span class='hs-definition'>bitmap</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>BitmapData</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-178"></a><span class='hs-definition'>bitmap</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Bitmap</span>
<a name="line-179"></a>
<a name="line-180"></a><a name="color"></a><span class='hs-comment'>-- | A picture drawn with this color.</span>
<a name="line-181"></a><span class='hs-definition'>color</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Color</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-182"></a><span class='hs-definition'>color</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Color</span>
<a name="line-183"></a>
<a name="line-184"></a><a name="translate"></a><span class='hs-comment'>-- | A picture translated by the given x and y coordinates.</span>
<a name="line-185"></a><span class='hs-definition'>translate</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'>Picture</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-186"></a><span class='hs-definition'>translate</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Translate</span>
<a name="line-187"></a>
<a name="line-188"></a><a name="rotate"></a><span class='hs-comment'>-- | A picture rotated clockwise by the given angle (in degrees).</span>
<a name="line-189"></a><span class='hs-definition'>rotate</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-190"></a><span class='hs-definition'>rotate</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Rotate</span>
<a name="line-191"></a>
<a name="line-192"></a><a name="scale"></a><span class='hs-comment'>-- | A picture scaled by the given x and y factors.</span>
<a name="line-193"></a><span class='hs-definition'>scale</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'>Picture</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-194"></a><span class='hs-definition'>scale</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Scale</span>
<a name="line-195"></a>
<a name="line-196"></a><a name="pictures"></a><span class='hs-comment'>-- | A picture consisting of several others.</span>
<a name="line-197"></a><span class='hs-definition'>pictures</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Picture</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-198"></a><span class='hs-definition'>pictures</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Pictures</span>
<a name="line-199"></a>
<a name="line-200"></a>
<a name="line-201"></a><span class='hs-comment'>-- Bitmaps --------------------------------------------------------------------</span>
<a name="line-202"></a><span class='hs-comment'>-- | O(1). Use a `ForeignPtr` of RGBA data as a bitmap with the given</span>
<a name="line-203"></a><span class='hs-comment'>--   width and height.</span>
<a name="line-204"></a>
<a name="line-205"></a><a name="bitmapOfForeignPtr"></a><span class='hs-comment'>--   The boolean flag controls whether Gloss should cache the data</span>
<a name="line-206"></a><span class='hs-comment'>--   between frames for speed. If you are programatically generating</span>
<a name="line-207"></a><span class='hs-comment'>--   the image for each frame then use `False`. If you have loaded it</span>
<a name="line-208"></a><span class='hs-comment'>--   from a file then use `True`.</span>
<a name="line-209"></a><span class='hs-definition'>bitmapOfForeignPtr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ForeignPtr</span> <span class='hs-conid'>Word8</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-210"></a><span class='hs-definition'>bitmapOfForeignPtr</span> <span class='hs-varid'>width</span> <span class='hs-varid'>height</span> <span class='hs-varid'>fptr</span> <span class='hs-varid'>cacheMe</span>
<a name="line-211"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span>  <span class='hs-varid'>len</span>     <span class='hs-keyglyph'>=</span> <span class='hs-varid'>width</span> <span class='hs-varop'>*</span> <span class='hs-varid'>height</span> <span class='hs-varop'>*</span> <span class='hs-num'>4</span>
<a name="line-212"></a>        <span class='hs-varid'>bdata</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>BitmapData</span> <span class='hs-varid'>len</span> <span class='hs-varid'>fptr</span>
<a name="line-213"></a>   <span class='hs-keyword'>in</span>   <span class='hs-conid'>Bitmap</span> <span class='hs-varid'>width</span> <span class='hs-varid'>height</span> <span class='hs-varid'>bdata</span> <span class='hs-varid'>cacheMe</span> 
<a name="line-214"></a>
<a name="line-215"></a>
<a name="line-216"></a><a name="bitmapOfByteString"></a><span class='hs-comment'>-- | O(size). Copy a `ByteString` of RGBA data into a bitmap with the given</span>
<a name="line-217"></a><span class='hs-comment'>--   width and height.</span>
<a name="line-218"></a><span class='hs-comment'>--</span>
<a name="line-219"></a><span class='hs-comment'>--   The boolean flag controls whether Gloss should cache the data</span>
<a name="line-220"></a><span class='hs-comment'>--   between frames for speed. If you are programatically generating</span>
<a name="line-221"></a><span class='hs-comment'>--   the image for each frame then use `False`. If you have loaded it</span>
<a name="line-222"></a><span class='hs-comment'>--   from a file then use `True`.</span>
<a name="line-223"></a><span class='hs-comment'>{-# NOINLINE bitmapOfByteString #-}</span>
<a name="line-224"></a><span class='hs-definition'>bitmapOfByteString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-225"></a><span class='hs-definition'>bitmapOfByteString</span> <span class='hs-varid'>width</span> <span class='hs-varid'>height</span> <span class='hs-varid'>bs</span> <span class='hs-varid'>cacheMe</span>
<a name="line-226"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unsafePerformIO</span>
<a name="line-227"></a> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>   <span class='hs-keyword'>let</span> <span class='hs-varid'>len</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>width</span> <span class='hs-varop'>*</span> <span class='hs-varid'>height</span> <span class='hs-varop'>*</span> <span class='hs-num'>4</span>
<a name="line-228"></a>        <span class='hs-varid'>ptr</span>     <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mallocBytes</span> <span class='hs-varid'>len</span>
<a name="line-229"></a>        <span class='hs-varid'>fptr</span>    <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newForeignPtr</span> <span class='hs-varid'>finalizerFree</span> <span class='hs-varid'>ptr</span>
<a name="line-230"></a>
<a name="line-231"></a>        <span class='hs-conid'>BSU</span><span class='hs-varop'>.</span><span class='hs-varid'>unsafeUseAsCString</span> <span class='hs-varid'>bs</span>
<a name="line-232"></a>         <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>cstr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>copyBytes</span> <span class='hs-varid'>ptr</span> <span class='hs-layout'>(</span><span class='hs-varid'>castPtr</span> <span class='hs-varid'>cstr</span><span class='hs-layout'>)</span> <span class='hs-varid'>len</span>
<a name="line-233"></a>
<a name="line-234"></a>        <span class='hs-keyword'>let</span> <span class='hs-varid'>bdata</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>BitmapData</span> <span class='hs-varid'>len</span> <span class='hs-varid'>fptr</span>
<a name="line-235"></a>        <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Bitmap</span> <span class='hs-varid'>width</span> <span class='hs-varid'>height</span> <span class='hs-varid'>bdata</span> <span class='hs-varid'>cacheMe</span>
<a name="line-236"></a>
<a name="line-237"></a>
<a name="line-238"></a><a name="bitmapOfBMP"></a><span class='hs-comment'>-- | O(size). Copy a `BMP` file into a bitmap.</span>
<a name="line-239"></a><span class='hs-comment'>{-# NOINLINE bitmapOfBMP #-}</span>
<a name="line-240"></a><span class='hs-definition'>bitmapOfBMP</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>BMP</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-241"></a><span class='hs-definition'>bitmapOfBMP</span> <span class='hs-varid'>bmp</span>
<a name="line-242"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unsafePerformIO</span>
<a name="line-243"></a> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>   <span class='hs-keyword'>let</span> <span class='hs-layout'>(</span><span class='hs-varid'>width</span><span class='hs-layout'>,</span> <span class='hs-varid'>height</span><span class='hs-layout'>)</span>     <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bmpDimensions</span> <span class='hs-varid'>bmp</span>
<a name="line-244"></a>        <span class='hs-keyword'>let</span> <span class='hs-varid'>bs</span>                  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unpackBMPToRGBA32</span> <span class='hs-varid'>bmp</span> 
<a name="line-245"></a>        <span class='hs-keyword'>let</span> <span class='hs-varid'>len</span>                 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>width</span> <span class='hs-varop'>*</span> <span class='hs-varid'>height</span> <span class='hs-varop'>*</span> <span class='hs-num'>4</span>
<a name="line-246"></a>
<a name="line-247"></a>        <span class='hs-varid'>ptr</span>     <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mallocBytes</span> <span class='hs-varid'>len</span>
<a name="line-248"></a>        <span class='hs-varid'>fptr</span>    <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newForeignPtr</span> <span class='hs-varid'>finalizerFree</span> <span class='hs-varid'>ptr</span>
<a name="line-249"></a>
<a name="line-250"></a>        <span class='hs-conid'>BSU</span><span class='hs-varop'>.</span><span class='hs-varid'>unsafeUseAsCString</span> <span class='hs-varid'>bs</span>
<a name="line-251"></a>         <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>cstr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>copyBytes</span> <span class='hs-varid'>ptr</span> <span class='hs-layout'>(</span><span class='hs-varid'>castPtr</span> <span class='hs-varid'>cstr</span><span class='hs-layout'>)</span> <span class='hs-varid'>len</span>
<a name="line-252"></a>
<a name="line-253"></a>        <span class='hs-keyword'>let</span> <span class='hs-varid'>bdata</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>BitmapData</span> <span class='hs-varid'>len</span> <span class='hs-varid'>fptr</span>
<a name="line-254"></a>        <span class='hs-varid'>reverseRGBA</span> <span class='hs-varid'>bdata</span>
<a name="line-255"></a>
<a name="line-256"></a>        <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Bitmap</span> <span class='hs-varid'>width</span> <span class='hs-varid'>height</span> <span class='hs-varid'>bdata</span> <span class='hs-conid'>True</span>
<a name="line-257"></a>
<a name="line-258"></a>
<a name="line-259"></a><a name="loadBMP"></a><span class='hs-comment'>-- | Load an uncompressed 24 or 32bit RGBA BMP file as a bitmap.</span>
<a name="line-260"></a><span class='hs-definition'>loadBMP</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Picture</span>
<a name="line-261"></a><span class='hs-definition'>loadBMP</span> <span class='hs-varid'>filePath</span>
<a name="line-262"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>   <span class='hs-varid'>ebmp</span>    <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readBMP</span> <span class='hs-varid'>filePath</span>
<a name="line-263"></a>        <span class='hs-keyword'>case</span> <span class='hs-varid'>ebmp</span> <span class='hs-keyword'>of</span>
<a name="line-264"></a>         <span class='hs-conid'>Left</span> <span class='hs-varid'>err</span>       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>error</span> <span class='hs-varop'>$</span> <span class='hs-varid'>show</span> <span class='hs-varid'>err</span>
<a name="line-265"></a>         <span class='hs-conid'>Right</span> <span class='hs-varid'>bmp</span>      <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>bitmapOfBMP</span> <span class='hs-varid'>bmp</span>
<a name="line-266"></a>
<a name="line-267"></a>
<a name="line-268"></a><a name="lineLoop"></a><span class='hs-comment'>-- Other Shapes ---------------------------------------------------------------</span>
<a name="line-269"></a><span class='hs-comment'>-- | A closed loop along a path.</span>
<a name="line-270"></a><span class='hs-definition'>lineLoop</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-271"></a><span class='hs-definition'>lineLoop</span> <span class='hs-conid'>[]</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Line</span> <span class='hs-conid'>[]</span>
<a name="line-272"></a><span class='hs-definition'>lineLoop</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Line</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-varop'>++</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>x</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-273"></a>
<a name="line-274"></a>
<a name="line-275"></a><a name="circleSolid"></a><span class='hs-comment'>-- Circles and Arcs -----------------------------------------------------------</span>
<a name="line-276"></a><span class='hs-comment'>-- | A solid circle with the given radius.</span>
<a name="line-277"></a><span class='hs-definition'>circleSolid</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Picture</span>
<a name="line-278"></a><span class='hs-definition'>circleSolid</span> <span class='hs-varid'>r</span> 
<a name="line-279"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>thickCircle</span> <span class='hs-layout'>(</span><span class='hs-varid'>r</span><span class='hs-varop'>/</span><span class='hs-num'>2</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span>
<a name="line-280"></a>
<a name="line-281"></a>
<a name="line-282"></a><a name="arcSolid"></a><span class='hs-comment'>-- | A solid arc, drawn counter-clockwise between two angles at the given radius.</span>
<a name="line-283"></a><span class='hs-definition'>arcSolid</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'>Picture</span>
<a name="line-284"></a><span class='hs-definition'>arcSolid</span> <span class='hs-varid'>a1</span> <span class='hs-varid'>a2</span> <span class='hs-varid'>r</span> 
<a name="line-285"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>thickArc</span> <span class='hs-varid'>a1</span> <span class='hs-varid'>a2</span> <span class='hs-layout'>(</span><span class='hs-varid'>r</span><span class='hs-varop'>/</span><span class='hs-num'>2</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> 
<a name="line-286"></a>
<a name="line-287"></a>
<a name="line-288"></a><a name="sectorWire"></a><span class='hs-comment'>-- | A wireframe sector of a circle. </span>
<a name="line-289"></a><span class='hs-comment'>--   An arc is draw counter-clockwise from the first to the second angle at</span>
<a name="line-290"></a><span class='hs-comment'>--   the given radius. Lines are drawn from the origin to the ends of the arc.</span>
<a name="line-291"></a><span class='hs-comment'>---</span>
<a name="line-292"></a><span class='hs-comment'>--   NOTE: We take the absolute value of the radius incase it's negative.</span>
<a name="line-293"></a><span class='hs-comment'>--   It would also make sense to draw the sector flipped around the </span>
<a name="line-294"></a><span class='hs-comment'>--   origin, but I think taking the absolute value will be less surprising</span>
<a name="line-295"></a><span class='hs-comment'>--   for the user.</span>
<a name="line-296"></a><span class='hs-comment'>-- </span>
<a name="line-297"></a><span class='hs-definition'>sectorWire</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'>Picture</span>
<a name="line-298"></a><span class='hs-definition'>sectorWire</span> <span class='hs-varid'>a1</span> <span class='hs-varid'>a2</span> <span class='hs-varid'>r_</span>
<a name="line-299"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span> <span class='hs-varid'>r</span>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>abs</span> <span class='hs-varid'>r_</span>
<a name="line-300"></a>   <span class='hs-keyword'>in</span>  <span class='hs-conid'>Pictures</span> 
<a name="line-301"></a>        <span class='hs-keyglyph'>[</span> <span class='hs-conid'>Arc</span> <span class='hs-varid'>a1</span> <span class='hs-varid'>a2</span> <span class='hs-varid'>r</span>
<a name="line-302"></a>        <span class='hs-layout'>,</span> <span class='hs-conid'>Line</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-num'>0</span><span class='hs-layout'>,</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varid'>r</span> <span class='hs-varop'>*</span> <span class='hs-varid'>cos</span> <span class='hs-layout'>(</span><span class='hs-varid'>degToRad</span> <span class='hs-varid'>a1</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>r</span> <span class='hs-varop'>*</span> <span class='hs-varid'>sin</span> <span class='hs-layout'>(</span><span class='hs-varid'>degToRad</span> <span class='hs-varid'>a1</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-303"></a>        <span class='hs-layout'>,</span> <span class='hs-conid'>Line</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-num'>0</span><span class='hs-layout'>,</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varid'>r</span> <span class='hs-varop'>*</span> <span class='hs-varid'>cos</span> <span class='hs-layout'>(</span><span class='hs-varid'>degToRad</span> <span class='hs-varid'>a2</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>r</span> <span class='hs-varop'>*</span> <span class='hs-varid'>sin</span> <span class='hs-layout'>(</span><span class='hs-varid'>degToRad</span> <span class='hs-varid'>a2</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>]</span>
<a name="line-304"></a>
<a name="line-305"></a>
<a name="line-306"></a><span class='hs-comment'>-- Rectangles -----------------------------------------------------------------</span>
<a name="line-307"></a><span class='hs-comment'>-- NOTE: Only the first of these rectangle functions has haddocks on the</span>
<a name="line-308"></a><span class='hs-comment'>--       arguments to reduce the amount of noise in the extracted docs.</span>
<a name="line-309"></a>
<a name="line-310"></a><a name="rectanglePath"></a><span class='hs-comment'>-- | A path representing a rectangle centered about the origin</span>
<a name="line-311"></a><span class='hs-definition'>rectanglePath</span> 
<a name="line-312"></a>        <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span>        <span class='hs-comment'>-- ^ width of rectangle</span>
<a name="line-313"></a>        <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Float</span>        <span class='hs-comment'>-- ^ height of rectangle</span>
<a name="line-314"></a>        <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Path</span>
<a name="line-315"></a><span class='hs-definition'>rectanglePath</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sizeY</span>			
<a name="line-316"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span>	<span class='hs-varid'>sx</span>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>sizeX</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-317"></a>	<span class='hs-varid'>sy</span>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>sizeY</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-318"></a>   <span class='hs-keyword'>in</span>	<span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-comment'>-</span><span class='hs-varid'>sx</span><span class='hs-layout'>,</span> <span class='hs-comment'>-</span><span class='hs-varid'>sy</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-comment'>-</span><span class='hs-varid'>sx</span><span class='hs-layout'>,</span> <span class='hs-varid'>sy</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varid'>sx</span><span class='hs-layout'>,</span> <span class='hs-varid'>sy</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varid'>sx</span><span class='hs-layout'>,</span> <span class='hs-comment'>-</span><span class='hs-varid'>sy</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-319"></a>
<a name="line-320"></a>
<a name="line-321"></a><a name="rectangleWire"></a><span class='hs-comment'>-- | A wireframe rectangle centered about the origin.</span>
<a name="line-322"></a><span class='hs-definition'>rectangleWire</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'>Picture</span>
<a name="line-323"></a><span class='hs-definition'>rectangleWire</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sizeY</span>
<a name="line-324"></a>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>lineLoop</span> <span class='hs-varop'>$</span> <span class='hs-varid'>rectanglePath</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sizeY</span>
<a name="line-325"></a>
<a name="line-326"></a>
<a name="line-327"></a><a name="rectangleUpperWire"></a><span class='hs-comment'>-- | A wireframe rectangle in the y &gt; 0 half of the x-y plane.</span>
<a name="line-328"></a><span class='hs-definition'>rectangleUpperWire</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'>Picture</span>
<a name="line-329"></a><span class='hs-definition'>rectangleUpperWire</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sizeY</span>
<a name="line-330"></a>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>lineLoop</span> <span class='hs-varop'>$</span> <span class='hs-varid'>rectangleUpperPath</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sizeY</span>
<a name="line-331"></a>
<a name="line-332"></a>
<a name="line-333"></a><a name="rectangleUpperPath"></a><span class='hs-comment'>-- | A path representing a rectangle in the y &gt; 0 half of the x-y plane.</span>
<a name="line-334"></a><span class='hs-definition'>rectangleUpperPath</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'>Path</span>
<a name="line-335"></a><span class='hs-definition'>rectangleUpperPath</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sy</span>
<a name="line-336"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span> 	<span class='hs-varid'>sx</span>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>sizeX</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-337"></a>   <span class='hs-keyword'>in</span>  	<span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-comment'>-</span><span class='hs-varid'>sx</span><span class='hs-layout'>,</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-comment'>-</span><span class='hs-varid'>sx</span><span class='hs-layout'>,</span> <span class='hs-varid'>sy</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varid'>sx</span><span class='hs-layout'>,</span> <span class='hs-varid'>sy</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varid'>sx</span><span class='hs-layout'>,</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-338"></a>
<a name="line-339"></a>
<a name="line-340"></a><a name="rectangleSolid"></a><span class='hs-comment'>-- | A solid rectangle centered about the origin.</span>
<a name="line-341"></a><span class='hs-definition'>rectangleSolid</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'>Picture</span>
<a name="line-342"></a><span class='hs-definition'>rectangleSolid</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sizeY</span>
<a name="line-343"></a>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Polygon</span> <span class='hs-varop'>$</span> <span class='hs-varid'>rectanglePath</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sizeY</span>
<a name="line-344"></a>
<a name="line-345"></a>
<a name="line-346"></a><a name="rectangleUpperSolid"></a><span class='hs-comment'>-- | A solid rectangle in the y &gt; 0 half of the x-y plane.</span>
<a name="line-347"></a><span class='hs-definition'>rectangleUpperSolid</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'>Picture</span>
<a name="line-348"></a><span class='hs-definition'>rectangleUpperSolid</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sizeY</span>
<a name="line-349"></a>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Polygon</span>  <span class='hs-varop'>$</span> <span class='hs-varid'>rectangleUpperPath</span> <span class='hs-varid'>sizeX</span> <span class='hs-varid'>sizeY</span>
<a name="line-350"></a>
</pre></body>
</html>