/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 <svenpanne@gmail.com></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'>=></span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></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'>=></span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></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'>=></span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></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'>=></span> <span class='hs-conid'>BitmapFont</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></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'><-</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'>-></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'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>CInt</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></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'>=></span> <span class='hs-conid'>StrokeFont</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></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'><-</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'>-></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'>=></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'>-></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'>-></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'><-</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'>=></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'>-></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'>-></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'><-</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'>=></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'>-></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'><-</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'>=></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'>-></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'>=<<</span> <span class='hs-varid'>marshalStrokeFont</span> <span class='hs-varid'>f</span>
</pre></body>
</html>
|