This file is indexed.

/usr/share/doc/libghc-glut-doc/html/src/Graphics-UI-GLUT-Fonts.html is in libghc-glut-doc 2.7.0.10-4.

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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>src/Graphics/UI/GLUT/Fonts.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-2"></a><span class='hs-comment'>-- |</span>
<a name="line-3"></a><span class='hs-comment'>-- Module      :  Graphics.UI.GLUT.Fonts</span>
<a name="line-4"></a><span class='hs-comment'>-- Copyright   :  (c) Sven Panne 2002-2013</span>
<a name="line-5"></a><span class='hs-comment'>-- License     :  BSD3</span>
<a name="line-6"></a><span class='hs-comment'>--</span>
<a name="line-7"></a><span class='hs-comment'>-- Maintainer  :  Sven Panne &lt;svenpanne@gmail.com&gt;</span>
<a name="line-8"></a><span class='hs-comment'>-- Stability   :  stable</span>
<a name="line-9"></a><span class='hs-comment'>-- Portability :  portable</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- GLUT supports two types of font rendering: stroke fonts, meaning each</span>
<a name="line-12"></a><span class='hs-comment'>-- character is rendered as a set of line segments; and bitmap fonts, where each</span>
<a name="line-13"></a><span class='hs-comment'>-- character is a bitmap generated with</span>
<a name="line-14"></a><span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.Bitmaps.bitmap'. Stroke fonts have the</span>
<a name="line-15"></a><span class='hs-comment'>-- advantage that because they are geometry, they can be arbitrarily scale and</span>
<a name="line-16"></a><span class='hs-comment'>-- rendered. Bitmap fonts are less flexible since they are rendered as bitmaps</span>
<a name="line-17"></a><span class='hs-comment'>-- but are usually faster than stroke fonts.</span>
<a name="line-18"></a><span class='hs-comment'>--</span>
<a name="line-19"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-20"></a>
<a name="line-21"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>GLUT</span><span class='hs-varop'>.</span><span class='hs-conid'>Fonts</span> <span class='hs-layout'>(</span>
<a name="line-22"></a>   <span class='hs-conid'>Font</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>BitmapFont</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>StrokeFont</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-23"></a><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-24"></a>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Class</span> <span class='hs-layout'>(</span> <span class='hs-conid'>MonadIO</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span> <span class='hs-layout'>)</span>
<a name="line-26"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Char</span> <span class='hs-layout'>(</span> <span class='hs-varid'>ord</span> <span class='hs-layout'>)</span>
<a name="line-27"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>String</span> <span class='hs-layout'>(</span> <span class='hs-varid'>withCString</span> <span class='hs-layout'>)</span>
<a name="line-28"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span> <span class='hs-layout'>(</span> <span class='hs-conid'>CInt</span> <span class='hs-layout'>)</span>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>Ptr</span> <span class='hs-layout'>(</span> <span class='hs-varid'>castPtr</span> <span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Rendering</span><span class='hs-varop'>.</span><span class='hs-conid'>OpenGL</span> <span class='hs-layout'>(</span> <span class='hs-conid'>GLint</span><span class='hs-layout'>,</span> <span class='hs-conid'>GLfloat</span> <span class='hs-layout'>)</span>
<a name="line-31"></a>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>UI</span><span class='hs-varop'>.</span><span class='hs-conid'>GLUT</span><span class='hs-varop'>.</span><span class='hs-conid'>Raw</span>
<a name="line-33"></a>
<a name="line-34"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-35"></a>
<a name="line-36"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>Font</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>where</span>
<a name="line-37"></a>   <span class='hs-comment'>-- | Render the string in the named font, without using any display lists.</span>
<a name="line-38"></a>   <span class='hs-comment'>-- Rendering a nonexistent character has no effect.</span>
<a name="line-39"></a>   <span class='hs-comment'>--</span>
<a name="line-40"></a>   <span class='hs-comment'>-- If the font is a bitmap font, 'renderString' automatically sets the OpenGL</span>
<a name="line-41"></a>   <span class='hs-comment'>-- unpack pixel storage modes it needs appropriately and saves and restores</span>
<a name="line-42"></a>   <span class='hs-comment'>-- the previous modes before returning. The generated call to</span>
<a name="line-43"></a>   <span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.bitmap' will adjust the current raster</span>
<a name="line-44"></a>   <span class='hs-comment'>-- position based on the width of the string.</span>
<a name="line-45"></a>   <span class='hs-comment'>-- If the font is a stroke font,</span>
<a name="line-46"></a>   <span class='hs-comment'>-- 'Graphics.Rendering.OpenGL.GL.CoordTrans.translate' is used to translate</span>
<a name="line-47"></a>   <span class='hs-comment'>-- the current model view matrix to advance the width of the string.</span>
<a name="line-48"></a>
<a name="line-49"></a>   <span class='hs-varid'>renderString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-50"></a>
<a name="line-51"></a>   <span class='hs-comment'>-- | For a bitmap font, return the width in pixels of a string. For a stroke</span>
<a name="line-52"></a>   <span class='hs-comment'>-- font, return the width in units. While the width of characters in a font</span>
<a name="line-53"></a>   <span class='hs-comment'>-- may vary (though fixed width fonts do not vary), the maximum height</span>
<a name="line-54"></a>   <span class='hs-comment'>-- characteristics of a particular font are fixed.</span>
<a name="line-55"></a>
<a name="line-56"></a>   <span class='hs-varid'>stringWidth</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>GLint</span>
<a name="line-57"></a>
<a name="line-58"></a>   <span class='hs-comment'>-- | (/freeglut only/) For a bitmap font, return the maximum height of the</span>
<a name="line-59"></a>   <span class='hs-comment'>-- characters in the given font measured in pixels. For a stroke font,</span>
<a name="line-60"></a>   <span class='hs-comment'>-- return the width in units.</span>
<a name="line-61"></a>
<a name="line-62"></a>   <span class='hs-varid'>fontHeight</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>GLfloat</span>
<a name="line-63"></a>
<a name="line-64"></a><a name="instance%20Font%20BitmapFont"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Font</span> <span class='hs-conid'>BitmapFont</span> <span class='hs-keyword'>where</span>
<a name="line-65"></a>   <span class='hs-varid'>renderString</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bitmapString</span>
<a name="line-66"></a>   <span class='hs-varid'>stringWidth</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bitmapLength</span>
<a name="line-67"></a>   <span class='hs-varid'>fontHeight</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bitmapHeight</span>
<a name="line-68"></a>
<a name="line-69"></a>
<a name="line-70"></a><a name="instance%20Font%20StrokeFont"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Font</span> <span class='hs-conid'>StrokeFont</span> <span class='hs-keyword'>where</span>
<a name="line-71"></a>   <span class='hs-varid'>renderString</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>strokeString</span>
<a name="line-72"></a>   <span class='hs-varid'>stringWidth</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>strokeLength</span>
<a name="line-73"></a>   <span class='hs-varid'>fontHeight</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>strokeHeight</span>
<a name="line-74"></a>
<a name="line-75"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-76"></a>
<a name="line-77"></a><a name="bitmapString"></a><span class='hs-definition'>bitmapString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>BitmapFont</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-78"></a><span class='hs-definition'>bitmapString</span> <span class='hs-varid'>f</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-79"></a>   <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>marshalBitmapFont</span> <span class='hs-varid'>f</span>
<a name="line-80"></a>   <span class='hs-varid'>mapM_</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withChar</span> <span class='hs-varid'>c</span> <span class='hs-layout'>(</span><span class='hs-varid'>glutBitmapCharacter</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span>
<a name="line-81"></a>
<a name="line-82"></a><a name="withChar"></a><span class='hs-definition'>withChar</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Char</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>CInt</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-83"></a><span class='hs-definition'>withChar</span> <span class='hs-varid'>c</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varop'>.</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ord</span> <span class='hs-varop'>$</span> <span class='hs-varid'>c</span>
<a name="line-84"></a>
<a name="line-85"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-86"></a>
<a name="line-87"></a><a name="strokeString"></a><span class='hs-definition'>strokeString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>StrokeFont</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>()</span>
<a name="line-88"></a><span class='hs-definition'>strokeString</span> <span class='hs-varid'>f</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-89"></a>   <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>marshalStrokeFont</span> <span class='hs-varid'>f</span>
<a name="line-90"></a>   <span class='hs-varid'>mapM_</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withChar</span> <span class='hs-varid'>c</span> <span class='hs-layout'>(</span><span class='hs-varid'>glutStrokeCharacter</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span>
<a name="line-91"></a>
<a name="line-92"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-93"></a>
<a name="line-94"></a><a name="bitmapLength"></a><span class='hs-definition'>bitmapLength</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span>
<a name="line-95"></a>             <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>BitmapFont</span> <span class='hs-comment'>-- ^ Bitmap font to use.</span>
<a name="line-96"></a>             <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>     <span class='hs-comment'>-- ^ String to return width of (not confined to 8</span>
<a name="line-97"></a>                           <span class='hs-comment'>--   bits).</span>
<a name="line-98"></a>             <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>GLint</span>    <span class='hs-comment'>-- ^ Width in pixels.</span>
<a name="line-99"></a><span class='hs-definition'>bitmapLength</span> <span class='hs-varid'>f</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftIO</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-100"></a>   <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>marshalBitmapFont</span> <span class='hs-varid'>f</span>
<a name="line-101"></a>   <span class='hs-varid'>fmap</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>withCString</span> <span class='hs-varid'>s</span> <span class='hs-layout'>(</span><span class='hs-varid'>glutBitmapLength</span> <span class='hs-varid'>i</span> <span class='hs-varop'>.</span> <span class='hs-varid'>castPtr</span><span class='hs-layout'>)</span>
<a name="line-102"></a>
<a name="line-103"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-104"></a>
<a name="line-105"></a><a name="strokeLength"></a><span class='hs-definition'>strokeLength</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span>
<a name="line-106"></a>             <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>StrokeFont</span> <span class='hs-comment'>-- ^ Stroke font to use.</span>
<a name="line-107"></a>             <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>     <span class='hs-comment'>-- ^ String to return width of (not confined to 8</span>
<a name="line-108"></a>                           <span class='hs-comment'>--   bits).</span>
<a name="line-109"></a>             <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>GLint</span>    <span class='hs-comment'>-- ^ Width in units.</span>
<a name="line-110"></a><span class='hs-definition'>strokeLength</span> <span class='hs-varid'>f</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftIO</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-111"></a>   <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>marshalStrokeFont</span> <span class='hs-varid'>f</span>
<a name="line-112"></a>   <span class='hs-varid'>fmap</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>withCString</span> <span class='hs-varid'>s</span> <span class='hs-layout'>(</span><span class='hs-varid'>glutStrokeLength</span> <span class='hs-varid'>i</span> <span class='hs-varop'>.</span> <span class='hs-varid'>castPtr</span><span class='hs-layout'>)</span>
<a name="line-113"></a>
<a name="line-114"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-115"></a>
<a name="line-116"></a><a name="bitmapHeight"></a><span class='hs-definition'>bitmapHeight</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span>
<a name="line-117"></a>             <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>BitmapFont</span> <span class='hs-comment'>-- ^ Bitmap font to use.</span>
<a name="line-118"></a>             <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>GLfloat</span>  <span class='hs-comment'>-- ^ Height in pixels.</span>
<a name="line-119"></a><span class='hs-definition'>bitmapHeight</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftIO</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-120"></a>  <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>marshalBitmapFont</span> <span class='hs-varid'>f</span>
<a name="line-121"></a>  <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>`fmap`</span> <span class='hs-varid'>glutBitmapHeight</span>  <span class='hs-varid'>i</span>
<a name="line-122"></a>
<a name="line-123"></a><span class='hs-comment'>--------------------------------------------------------------------------------</span>
<a name="line-124"></a>
<a name="line-125"></a><a name="strokeHeight"></a><span class='hs-definition'>strokeHeight</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span>
<a name="line-126"></a>             <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>StrokeFont</span> <span class='hs-comment'>-- ^ Stroke font to use.</span>
<a name="line-127"></a>             <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>m</span> <span class='hs-conid'>GLfloat</span>  <span class='hs-comment'>-- ^ Height in units.</span>
<a name="line-128"></a><span class='hs-definition'>strokeHeight</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>glutStrokeHeight</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>marshalStrokeFont</span> <span class='hs-varid'>f</span>
</pre></body>
</html>