/usr/share/doc/libghc-gloss-doc/html/src/Graphics-Gloss-Internals-Interface-Game.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 | <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>Graphics/Gloss/Internals/Interface/Game.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE RankNTypes #-}</span>
<a name="line-2"></a>
<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'>Internals</span><span class='hs-varop'>.</span><span class='hs-conid'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>Game</span>
<a name="line-4"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>playWithBackendIO</span>
<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Event</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-6"></a><span class='hs-keyword'>where</span>
<a name="line-7"></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-8"></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'>Picture</span>
<a name="line-9"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Internals</span><span class='hs-varop'>.</span><span class='hs-conid'>Render</span><span class='hs-varop'>.</span><span class='hs-conid'>Picture</span>
<a name="line-10"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Internals</span><span class='hs-varop'>.</span><span class='hs-conid'>Render</span><span class='hs-varop'>.</span><span class='hs-conid'>ViewPort</span>
<a name="line-11"></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'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>Backend</span>
<a name="line-12"></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'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>Window</span>
<a name="line-13"></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'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>Common</span><span class='hs-varop'>.</span><span class='hs-conid'>Exit</span>
<a name="line-14"></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'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>ViewPort</span>
<a name="line-15"></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'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>ViewPort</span><span class='hs-varop'>.</span><span class='hs-conid'>Reshape</span>
<a name="line-16"></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'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>Animate</span><span class='hs-varop'>.</span><span class='hs-conid'>Timing</span>
<a name="line-17"></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'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>Simulate</span><span class='hs-varop'>.</span><span class='hs-conid'>Idle</span>
<a name="line-18"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Internals</span><span class='hs-varop'>.</span><span class='hs-conid'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>Callback</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Callback</span>
<a name="line-19"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Internals</span><span class='hs-varop'>.</span><span class='hs-conid'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>Simulate</span><span class='hs-varop'>.</span><span class='hs-conid'>State</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>SM</span>
<a name="line-20"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>Gloss</span><span class='hs-varop'>.</span><span class='hs-conid'>Internals</span><span class='hs-varop'>.</span><span class='hs-conid'>Interface</span><span class='hs-varop'>.</span><span class='hs-conid'>Animate</span><span class='hs-varop'>.</span><span class='hs-conid'>State</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>AN</span>
<a name="line-21"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Graphics</span><span class='hs-varop'>.</span><span class='hs-conid'>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'>State</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>RS</span>
<a name="line-22"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>IORef</span>
<a name="line-23"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Mem</span>
<a name="line-24"></a>
<a name="line-25"></a><a name="Event"></a><span class='hs-comment'>-- | Possible input events.</span>
<a name="line-26"></a><a name="Event"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Event</span>
<a name="line-27"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>EventKey</span> <span class='hs-conid'>Key</span> <span class='hs-conid'>KeyState</span> <span class='hs-conid'>Modifiers</span> <span class='hs-layout'>(</span><span class='hs-conid'>Float</span><span class='hs-layout'>,</span> <span class='hs-conid'>Float</span><span class='hs-layout'>)</span>
<a name="line-28"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EventMotion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Float</span><span class='hs-layout'>,</span> <span class='hs-conid'>Float</span><span class='hs-layout'>)</span>
<a name="line-29"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span>
<a name="line-30"></a>
<a name="line-31"></a>
<a name="line-32"></a><a name="playWithBackendIO"></a><span class='hs-definition'>playWithBackendIO</span>
<a name="line-33"></a> <span class='hs-keyglyph'>::</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>world</span> <span class='hs-varid'>a</span>
<a name="line-34"></a> <span class='hs-varop'>.</span> <span class='hs-conid'>Backend</span> <span class='hs-varid'>a</span>
<a name="line-35"></a> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^ Initial state of the backend</span>
<a name="line-36"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Display</span> <span class='hs-comment'>-- ^ Display mode.</span>
<a name="line-37"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Color</span> <span class='hs-comment'>-- ^ Background color.</span>
<a name="line-38"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Int</span> <span class='hs-comment'>-- ^ Number of simulation steps to take for each second of real time.</span>
<a name="line-39"></a> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>world</span> <span class='hs-comment'>-- ^ The initial world.</span>
<a name="line-40"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>world</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Picture</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ A function to convert the world to a picture.</span>
<a name="line-41"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Event</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>world</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>world</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ A function to handle input events.</span>
<a name="line-42"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Float</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>world</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>world</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ A function to step the world one iteration.</span>
<a name="line-43"></a> <span class='hs-comment'>-- It is passed the period of time (in seconds) needing to be advanced.</span>
<a name="line-44"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-45"></a>
<a name="line-46"></a><span class='hs-definition'>playWithBackendIO</span>
<a name="line-47"></a> <span class='hs-varid'>backend</span>
<a name="line-48"></a> <span class='hs-varid'>display</span>
<a name="line-49"></a> <span class='hs-varid'>backgroundColor</span>
<a name="line-50"></a> <span class='hs-varid'>simResolution</span>
<a name="line-51"></a> <span class='hs-varid'>worldStart</span>
<a name="line-52"></a> <span class='hs-varid'>worldToPicture</span>
<a name="line-53"></a> <span class='hs-varid'>worldHandleEvent</span>
<a name="line-54"></a> <span class='hs-varid'>worldAdvance</span>
<a name="line-55"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-56"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>singleStepTime</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>1</span>
<a name="line-57"></a>
<a name="line-58"></a> <span class='hs-comment'>-- make the simulation state</span>
<a name="line-59"></a> <span class='hs-varid'>stateSR</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>newIORef</span> <span class='hs-varop'>$</span> <span class='hs-conid'>SM</span><span class='hs-varop'>.</span><span class='hs-varid'>stateInit</span> <span class='hs-varid'>simResolution</span>
<a name="line-60"></a>
<a name="line-61"></a> <span class='hs-comment'>-- make a reference to the initial world</span>
<a name="line-62"></a> <span class='hs-varid'>worldSR</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>newIORef</span> <span class='hs-varid'>worldStart</span>
<a name="line-63"></a>
<a name="line-64"></a> <span class='hs-comment'>-- make the initial GL view and render states</span>
<a name="line-65"></a> <span class='hs-varid'>viewSR</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>newIORef</span> <span class='hs-varid'>viewPortInit</span>
<a name="line-66"></a> <span class='hs-varid'>animateSR</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>newIORef</span> <span class='hs-conid'>AN</span><span class='hs-varop'>.</span><span class='hs-varid'>stateInit</span>
<a name="line-67"></a> <span class='hs-varid'>renderS_</span> <span class='hs-keyglyph'><-</span> <span class='hs-conid'>RS</span><span class='hs-varop'>.</span><span class='hs-varid'>stateInit</span>
<a name="line-68"></a> <span class='hs-varid'>renderSR</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>newIORef</span> <span class='hs-varid'>renderS_</span>
<a name="line-69"></a>
<a name="line-70"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>displayFun</span> <span class='hs-varid'>backendRef</span>
<a name="line-71"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-72"></a> <span class='hs-comment'>-- convert the world to a picture</span>
<a name="line-73"></a> <span class='hs-varid'>world</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>readIORef</span> <span class='hs-varid'>worldSR</span>
<a name="line-74"></a> <span class='hs-varid'>picture</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>worldToPicture</span> <span class='hs-varid'>world</span>
<a name="line-75"></a>
<a name="line-76"></a> <span class='hs-comment'>-- display the picture in the current view</span>
<a name="line-77"></a> <span class='hs-varid'>renderS</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>readIORef</span> <span class='hs-varid'>renderSR</span>
<a name="line-78"></a> <span class='hs-varid'>viewS</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>readIORef</span> <span class='hs-varid'>viewSR</span>
<a name="line-79"></a>
<a name="line-80"></a> <span class='hs-comment'>-- render the frame</span>
<a name="line-81"></a> <span class='hs-varid'>withViewPort</span>
<a name="line-82"></a> <span class='hs-varid'>backendRef</span>
<a name="line-83"></a> <span class='hs-varid'>viewS</span>
<a name="line-84"></a> <span class='hs-layout'>(</span><span class='hs-varid'>renderPicture</span> <span class='hs-varid'>backendRef</span> <span class='hs-varid'>renderS</span> <span class='hs-varid'>viewS</span> <span class='hs-varid'>picture</span><span class='hs-layout'>)</span>
<a name="line-85"></a>
<a name="line-86"></a> <span class='hs-comment'>-- perform garbage collection</span>
<a name="line-87"></a> <span class='hs-varid'>performGC</span>
<a name="line-88"></a>
<a name="line-89"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>callbacks</span>
<a name="line-90"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-conid'>Callback</span><span class='hs-varop'>.</span><span class='hs-conid'>Display</span> <span class='hs-layout'>(</span><span class='hs-varid'>animateBegin</span> <span class='hs-varid'>animateSR</span><span class='hs-layout'>)</span>
<a name="line-91"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Callback</span><span class='hs-varop'>.</span><span class='hs-conid'>Display</span> <span class='hs-varid'>displayFun</span>
<a name="line-92"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Callback</span><span class='hs-varop'>.</span><span class='hs-conid'>Display</span> <span class='hs-layout'>(</span><span class='hs-varid'>animateEnd</span> <span class='hs-varid'>animateSR</span><span class='hs-layout'>)</span>
<a name="line-93"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Callback</span><span class='hs-varop'>.</span><span class='hs-conid'>Idle</span> <span class='hs-layout'>(</span><span class='hs-varid'>callback_simulate_idle</span>
<a name="line-94"></a> <span class='hs-varid'>stateSR</span> <span class='hs-varid'>animateSR</span> <span class='hs-varid'>viewSR</span>
<a name="line-95"></a> <span class='hs-varid'>worldSR</span> <span class='hs-varid'>worldStart</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>worldAdvance</span><span class='hs-layout'>)</span>
<a name="line-96"></a> <span class='hs-varid'>singleStepTime</span><span class='hs-layout'>)</span>
<a name="line-97"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>callback_exit</span> <span class='hs-conid'>()</span>
<a name="line-98"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>callback_keyMouse</span> <span class='hs-varid'>worldSR</span> <span class='hs-varid'>viewSR</span> <span class='hs-varid'>worldHandleEvent</span>
<a name="line-99"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>callback_motion</span> <span class='hs-varid'>worldSR</span> <span class='hs-varid'>worldHandleEvent</span>
<a name="line-100"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>callback_viewPort_reshape</span> <span class='hs-keyglyph'>]</span>
<a name="line-101"></a>
<a name="line-102"></a> <span class='hs-varid'>createWindow</span> <span class='hs-varid'>backend</span> <span class='hs-varid'>display</span> <span class='hs-varid'>backgroundColor</span> <span class='hs-varid'>callbacks</span>
<a name="line-103"></a>
<a name="line-104"></a>
<a name="line-105"></a><a name="callback_keyMouse"></a><span class='hs-comment'>-- | Callback for KeyMouse events.</span>
<a name="line-106"></a><span class='hs-definition'>callback_keyMouse</span>
<a name="line-107"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IORef</span> <span class='hs-varid'>world</span> <span class='hs-comment'>-- ^ ref to world state</span>
<a name="line-108"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IORef</span> <span class='hs-conid'>ViewPort</span>
<a name="line-109"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Event</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>world</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>world</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ fn to handle input events</span>
<a name="line-110"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Callback</span>
<a name="line-111"></a>
<a name="line-112"></a><span class='hs-definition'>callback_keyMouse</span> <span class='hs-varid'>worldRef</span> <span class='hs-varid'>viewRef</span> <span class='hs-varid'>eventFn</span>
<a name="line-113"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>KeyMouse</span> <span class='hs-layout'>(</span><span class='hs-varid'>handle_keyMouse</span> <span class='hs-varid'>worldRef</span> <span class='hs-varid'>viewRef</span> <span class='hs-varid'>eventFn</span><span class='hs-layout'>)</span>
<a name="line-114"></a>
<a name="line-115"></a>
<a name="line-116"></a><a name="handle_keyMouse"></a><span class='hs-definition'>handle_keyMouse</span>
<a name="line-117"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IORef</span> <span class='hs-varid'>a</span>
<a name="line-118"></a> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>t</span>
<a name="line-119"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Event</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-120"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>KeyboardMouseCallback</span>
<a name="line-121"></a>
<a name="line-122"></a><span class='hs-definition'>handle_keyMouse</span> <span class='hs-varid'>worldRef</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>eventFn</span> <span class='hs-varid'>backendRef</span> <span class='hs-varid'>key</span> <span class='hs-varid'>keyState</span> <span class='hs-varid'>keyMods</span> <span class='hs-varid'>pos</span>
<a name="line-123"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>pos'</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>convertPoint</span> <span class='hs-varid'>backendRef</span> <span class='hs-varid'>pos</span>
<a name="line-124"></a> <span class='hs-varid'>world</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>readIORef</span> <span class='hs-varid'>worldRef</span>
<a name="line-125"></a> <span class='hs-varid'>world'</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>eventFn</span> <span class='hs-layout'>(</span><span class='hs-conid'>EventKey</span> <span class='hs-varid'>key</span> <span class='hs-varid'>keyState</span> <span class='hs-varid'>keyMods</span> <span class='hs-varid'>pos'</span><span class='hs-layout'>)</span> <span class='hs-varid'>world</span>
<a name="line-126"></a> <span class='hs-varid'>writeIORef</span> <span class='hs-varid'>worldRef</span> <span class='hs-varid'>world'</span>
<a name="line-127"></a>
<a name="line-128"></a>
<a name="line-129"></a><a name="callback_motion"></a><span class='hs-comment'>-- | Callback for Motion events.</span>
<a name="line-130"></a><span class='hs-definition'>callback_motion</span>
<a name="line-131"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IORef</span> <span class='hs-varid'>world</span> <span class='hs-comment'>-- ^ ref to world state</span>
<a name="line-132"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Event</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>world</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>world</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ fn to handle input events</span>
<a name="line-133"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Callback</span>
<a name="line-134"></a>
<a name="line-135"></a><span class='hs-definition'>callback_motion</span> <span class='hs-varid'>worldRef</span> <span class='hs-varid'>eventFn</span>
<a name="line-136"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Motion</span> <span class='hs-layout'>(</span><span class='hs-varid'>handle_motion</span> <span class='hs-varid'>worldRef</span> <span class='hs-varid'>eventFn</span><span class='hs-layout'>)</span>
<a name="line-137"></a>
<a name="line-138"></a>
<a name="line-139"></a><a name="handle_motion"></a><span class='hs-definition'>handle_motion</span>
<a name="line-140"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IORef</span> <span class='hs-varid'>a</span>
<a name="line-141"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Event</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-142"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>MotionCallback</span>
<a name="line-143"></a>
<a name="line-144"></a><span class='hs-definition'>handle_motion</span> <span class='hs-varid'>worldRef</span> <span class='hs-varid'>eventFn</span> <span class='hs-varid'>backendRef</span> <span class='hs-varid'>pos</span>
<a name="line-145"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>pos'</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>convertPoint</span> <span class='hs-varid'>backendRef</span> <span class='hs-varid'>pos</span>
<a name="line-146"></a> <span class='hs-varid'>world</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>readIORef</span> <span class='hs-varid'>worldRef</span>
<a name="line-147"></a> <span class='hs-varid'>world'</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>eventFn</span> <span class='hs-layout'>(</span><span class='hs-conid'>EventMotion</span> <span class='hs-varid'>pos'</span><span class='hs-layout'>)</span> <span class='hs-varid'>world</span>
<a name="line-148"></a> <span class='hs-varid'>writeIORef</span> <span class='hs-varid'>worldRef</span> <span class='hs-varid'>world'</span>
<a name="line-149"></a>
<a name="line-150"></a>
<a name="line-151"></a><a name="convertPoint"></a><span class='hs-definition'>convertPoint</span> <span class='hs-keyglyph'>::</span>
<a name="line-152"></a> <span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Backend</span> <span class='hs-varid'>a</span>
<a name="line-153"></a> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>IORef</span> <span class='hs-varid'>a</span>
<a name="line-154"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Int</span><span class='hs-layout'>,</span> <span class='hs-conid'>Int</span><span class='hs-layout'>)</span>
<a name="line-155"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Float</span><span class='hs-layout'>,</span><span class='hs-conid'>Float</span><span class='hs-layout'>)</span>
<a name="line-156"></a><span class='hs-definition'>convertPoint</span> <span class='hs-varid'>backendRef</span> <span class='hs-varid'>pos</span>
<a name="line-157"></a> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-layout'>(</span><span class='hs-varid'>sizeX_</span><span class='hs-layout'>,</span> <span class='hs-varid'>sizeY_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>getWindowDimensions</span> <span class='hs-varid'>backendRef</span>
<a name="line-158"></a> <span class='hs-keyword'>let</span> <span class='hs-layout'>(</span><span class='hs-varid'>sizeX</span><span class='hs-layout'>,</span> <span class='hs-varid'>sizeY</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>sizeX_</span><span class='hs-layout'>,</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>sizeY_</span><span class='hs-layout'>)</span>
<a name="line-159"></a>
<a name="line-160"></a> <span class='hs-keyword'>let</span> <span class='hs-layout'>(</span><span class='hs-varid'>px_</span><span class='hs-layout'>,</span> <span class='hs-varid'>py_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pos</span>
<a name="line-161"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>px</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>px_</span>
<a name="line-162"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>py</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sizeY</span> <span class='hs-comment'>-</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>py_</span>
<a name="line-163"></a>
<a name="line-164"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>px'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>px</span> <span class='hs-comment'>-</span> <span class='hs-varid'>sizeX</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-165"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>py'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>py</span> <span class='hs-comment'>-</span> <span class='hs-varid'>sizeY</span> <span class='hs-varop'>/</span> <span class='hs-num'>2</span>
<a name="line-166"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>pos'</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>px'</span><span class='hs-layout'>,</span> <span class='hs-varid'>py'</span><span class='hs-layout'>)</span>
<a name="line-167"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>pos'</span>
<a name="line-168"></a>
</pre></body>
</html>
|