<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Determining if mouse is inside the Allegro window (for v4.20)</title>
		<link>http://www.allegro.cc/forums/view/585599</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 25 May 2006 19:35:12 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#039;m in a rush and very tired as I&#039;m writing this, please excuse typos.:P</p><p>I&#039;ve been messing around with finding a way to determine if the mouse is inside the window, using only functions provided by Allegro 4.20 to keep it system-independent.</p><p>Using windows api functions this test would be a five liner as AJ told me,<br />however, I clubbed together a small test application to demonstrate the purely Allegro dependant method, which uses the mouse mickeys reported by allegro to keep track of an absolute mouse position that can get negative or larger than the screen dimensions, thus providing the base for checking if the mouse is inside or outside the window.</p><p>Problems follow after the codebox...</p><p>mouseintest.cpp
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">   2</span>
<span class="number">   3</span><span class="c">// Runlevel IDs</span>
<span class="number">   4</span><span class="k1">enum</span> runlevels
<span class="number">   5</span><span class="k2">{</span>
<span class="number">   6</span>  RL_NOTHING_OK<span class="k3">=</span><span class="n">0</span>,
<span class="number">   7</span>  RL_ALLEGRO_OK,
<span class="number">   8</span>  RL_KEYBOARD_OK,
<span class="number">   9</span>  RL_MOUSE_OK,
<span class="number">  10</span>  RL_GFXMODE_OK,
<span class="number">  11</span>  RL_BACKBUFFER_OK,
<span class="number">  12</span>  RL_TIMER_OK
<span class="number">  13</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="c">// global runlevel</span>
<span class="number">  16</span><span class="k1">int</span> g_runlevel<span class="k2">;</span>
<span class="number">  17</span>
<span class="number">  18</span><span class="c">// backbuffers</span>
<span class="number">  19</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> g_back <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  20</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> g_msafe <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  21</span>
<span class="number">  22</span><span class="c">// for timing</span>
<span class="number">  23</span><span class="k1">volatile</span> <span class="k1">int</span> g_sp_counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  24</span><span class="k1">void</span> increment_sp_counter<span class="k2">(</span><span class="k2">)</span>
<span class="number">  25</span><span class="k2">{</span>
<span class="number">  26</span>  g_sp_counter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  27</span><span class="k2">}</span>
<span class="number">  28</span><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>increment_sp_counter<span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>
<span class="number">  30</span><span class="c">// for close button handling</span>
<span class="number">  31</span><span class="k1">volatile</span> <span class="k1">int</span> g_quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  32</span><span class="k1">void</span> close_bhandler<span class="k2">(</span><span class="k2">)</span>
<span class="number">  33</span><span class="k2">{</span>
<span class="number">  34</span>  g_quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  35</span><span class="k2">}</span>
<span class="number">  36</span><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>close_bhandler<span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="c">// START OF FUNCTIONS+VARS NEEDED FOR DETERMINING IF MOUSE IS OUTSIDE WINDOW</span>
<span class="number">  39</span><span class="c">// vars to be able to tell mouse movement and position(even if outside window)</span>
<span class="number">  40</span><span class="k1">int</span> g_abs_mx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  41</span><span class="k1">int</span> g_abs_my <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  42</span><span class="k1">int</span> g_mickx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  43</span><span class="k1">int</span> g_micky <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  44</span><span class="k1">bool</span> g_mouse_inside <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  45</span>
<span class="number">  46</span><span class="c">// replacement function for position_mouse to help with initializing and</span>
<span class="number">  47</span><span class="c">// maintaining a more flexible mouse_position determination</span>
<span class="number">  48</span><span class="k1">void</span> position_mouse_override<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number">  49</span><span class="k2">{</span>
<span class="number">  50</span>  <a href="http://www.allegro.cc/manual/position_mouse" target="_blank"><span class="a">position_mouse</span></a><span class="k2">(</span>x,y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>  g_abs_mx <span class="k3">=</span> x<span class="k2">;</span>
<span class="number">  52</span>  g_abs_my <span class="k3">=</span> y<span class="k2">;</span>
<span class="number">  53</span>  g_mickx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  54</span>  g_micky <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  55</span>  <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>g_abs_mx<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>g_abs_mx&gt;<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>g_abs_my<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>g_abs_my&gt;<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">)</span>
<span class="number">  56</span>    g_mouse_inside <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  57</span>  <span class="k1">else</span>
<span class="number">  58</span>    g_mouse_inside <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  59</span><span class="k2">}</span>
<span class="number">  60</span>
<span class="number">  61</span>
<span class="number">  62</span><span class="c">// updates the internal mouse postion according to the mickeys reported</span>
<span class="number">  63</span><span class="c">// sets a global variable report the "mouse is inside the window" status</span>
<span class="number">  64</span><span class="c">// (can get negative or larger than the dimensions of allegros "screen")</span>
<span class="number">  65</span><span class="c">// (in fullscreen mode g_mouse_inside is not trustable, so you have to</span>
<span class="number">  66</span><span class="c">//  use the usual mouse_x, mouse_y from allegro in fullscreen mode)</span>
<span class="number">  67</span><span class="k1">void</span> update_abs_mousepos<span class="k2">(</span><span class="k2">)</span>
<span class="number">  68</span><span class="k2">{</span>
<span class="number">  69</span>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_needs_poll" target="_blank"><span class="a">mouse_needs_poll</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  70</span>    <a href="http://www.allegro.cc/manual/poll_mouse" target="_blank"><span class="a">poll_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>    
<span class="number">  72</span>  <a href="http://www.allegro.cc/manual/get_mouse_mickeys" target="_blank"><span class="a">get_mouse_mickeys</span></a><span class="k2">(</span><span class="k3">&amp;</span>g_mickx,<span class="k3">&amp;</span>g_micky<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>  g_abs_mx <span class="k3">+</span><span class="k3">=</span> g_mickx<span class="k2">;</span>
<span class="number">  74</span>  g_abs_my <span class="k3">+</span><span class="k3">=</span> g_micky<span class="k2">;</span>
<span class="number">  75</span>  <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>g_abs_mx<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>g_abs_mx&gt;<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>g_abs_my<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>g_abs_my&gt;<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">)</span>
<span class="number">  76</span>    g_mouse_inside <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  77</span>  <span class="k1">else</span>
<span class="number">  78</span>    g_mouse_inside <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  79</span><span class="k2">}</span>
<span class="number">  80</span><span class="c">// END OF FUNCTIONS+VARS NEEDED FOR DETERMINING IF MOUSE IS OUTSIDE WINDOW</span>
<span class="number">  81</span>
<span class="number">  82</span>
<span class="number">  83</span><span class="k1">int</span> initialize<span class="k2">(</span><span class="k2">)</span>
<span class="number">  84</span><span class="k2">{</span>
<span class="number">  85</span>  g_runlevel <span class="k3">=</span> RL_NOTHING_OK<span class="k2">;</span>
<span class="number">  86</span>
<span class="number">  87</span>  <span class="c">// Set UNICODE Format</span>
<span class="number">  88</span>  <a href="http://www.allegro.cc/manual/set_uformat" target="_blank"><span class="a">set_uformat</span></a><span class="k2">(</span>U_ASCII<span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span>  <span class="c">// init allegro </span>
<span class="number">  91</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k3">!</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span>
<span class="number">  92</span>  <span class="k2">{</span>
<span class="number">  93</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  94</span>  <span class="k2">}</span>
<span class="number">  95</span>  g_runlevel <span class="k3">=</span> RL_ALLEGRO_OK<span class="k2">;</span>
<span class="number">  96</span>  
<span class="number">  97</span>  <span class="c">// init keyboard</span>
<span class="number">  98</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k3">!</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span> 
<span class="number">  99</span>  <span class="k2">{</span>
<span class="number"> 100</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 101</span>  <span class="k2">}</span>
<span class="number"> 102</span>  <a href="http://www.allegro.cc/manual/three_finger_flag" target="_blank"><span class="a">three_finger_flag</span></a> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span> <span class="c">// disable Allegros CTRL+ALT+END termination</span>
<span class="number"> 103</span>  g_runlevel <span class="k3">=</span> RL_KEYBOARD_OK<span class="k2">;</span>
<span class="number"> 104</span>
<span class="number"> 105</span>  <a href="http://www.allegro.cc/manual/disable_hardware_cursor" target="_blank"><span class="a">disable_hardware_cursor</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>  <span class="c">// init mouse</span>
<span class="number"> 107</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 108</span>  <span class="k2">{</span>
<span class="number"> 109</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">3</span><span class="k2">;</span>
<span class="number"> 110</span>  <span class="k2">}</span>
<span class="number"> 111</span>  g_runlevel <span class="k3">=</span> RL_MOUSE_OK<span class="k2">;</span>
<span class="number"> 112</span>
<span class="number"> 113</span>  <span class="c">// init gfx subsystem</span>
<span class="number"> 114</span>  <span class="c">// try windowed</span>
<span class="number"> 115</span>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/desktop_color_depth" target="_blank"><span class="a">desktop_color_depth</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED,<span class="n">640</span>,<span class="n">480</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k3">!</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span>
<span class="number"> 117</span>  <span class="k2">{</span>
<span class="number"> 118</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">4</span><span class="k2">;</span>
<span class="number"> 119</span>  <span class="k2">}</span>
<span class="number"> 120</span>  g_runlevel <span class="k3">=</span> RL_GFXMODE_OK<span class="k2">;</span>
<span class="number"> 121</span>  <a href="http://www.allegro.cc/manual/set_window_title" target="_blank"><span class="a">set_window_title</span></a><span class="k2">(</span><span class="s">"MouseInTest for Allegro 4.20"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>  <a href="http://www.allegro.cc/manual/set_display_switch_mode" target="_blank"><span class="a">set_display_switch_mode</span></a><span class="k2">(</span>SWITCH_BACKGROUND<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 123</span>
<span class="number"> 124</span>  <span class="c">// init backbuffer(s)</span>
<span class="number"> 125</span>  <span class="c">// large backbuffer for GUI</span>
<span class="number"> 126</span>  g_back <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>g_back<span class="k2">)</span>
<span class="number"> 128</span>  <span class="k2">{</span>
<span class="number"> 129</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">6</span><span class="k2">;</span> 
<span class="number"> 130</span>  <span class="k2">}</span>
<span class="number"> 131</span>  <span class="c">// small backbuffer for mouse</span>
<span class="number"> 132</span>  g_msafe <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span>mouse_sprite-&gt;w,mouse_sprite-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 133</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>g_msafe<span class="k2">)</span>
<span class="number"> 134</span>  <span class="k2">{</span>
<span class="number"> 135</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>g_back<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>    g_back<span class="k3">=</span>NULL<span class="k2">;</span>
<span class="number"> 137</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">6</span><span class="k2">;</span>
<span class="number"> 138</span>  <span class="k2">}</span>
<span class="number"> 139</span>  g_runlevel <span class="k3">=</span> RL_BACKBUFFER_OK<span class="k2">;</span>
<span class="number"> 140</span>  
<span class="number"> 141</span>  <span class="c">// init timer handler</span>
<span class="number"> 142</span>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k3">!</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span>
<span class="number"> 143</span>  <span class="k2">{</span>
<span class="number"> 144</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">7</span><span class="k2">;</span>
<span class="number"> 145</span>  <span class="k2">}</span>
<span class="number"> 146</span>  g_runlevel <span class="k3">=</span> RL_TIMER_OK<span class="k2">;</span>
<span class="number"> 147</span>  
<span class="number"> 148</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 149</span><span class="k2">}</span>
<span class="number"> 150</span>
<span class="number"> 151</span>
<span class="number"> 152</span><span class="c">// Free and close everything</span>
<span class="number"> 153</span><span class="k1">void</span> deinitialize<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 154</span><span class="k2">{</span>
<span class="number"> 155</span>  <span class="k1">if</span><span class="k2">(</span>g_runlevel <span class="k3">&gt;</span><span class="k3">=</span> RL_TIMER_OK<span class="k2">)</span>
<span class="number"> 156</span>  <span class="k2">{</span>
<span class="number"> 157</span>    <a href="http://www.allegro.cc/manual/remove_timer" target="_blank"><span class="a">remove_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</span>  <span class="k2">}</span>
<span class="number"> 159</span>  <span class="k1">if</span><span class="k2">(</span>g_runlevel <span class="k3">&gt;</span><span class="k3">=</span> RL_BACKBUFFER_OK<span class="k2">)</span>
<span class="number"> 160</span>  <span class="k2">{</span>
<span class="number"> 161</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>g_msafe<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>    g_msafe <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 163</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>g_back<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>    g_back <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 165</span>  <span class="k2">}</span>
<span class="number"> 166</span>  <span class="k1">if</span><span class="k2">(</span>g_runlevel <span class="k3">&gt;</span><span class="k3">=</span> RL_GFXMODE_OK<span class="k2">)</span>
<span class="number"> 167</span>  <span class="k2">{</span>
<span class="number"> 168</span>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>  <span class="k2">}</span>
<span class="number"> 170</span>  <span class="k1">if</span><span class="k2">(</span>g_runlevel <span class="k3">&gt;</span><span class="k3">=</span> RL_MOUSE_OK<span class="k2">)</span>
<span class="number"> 171</span>  <span class="k2">{</span>
<span class="number"> 172</span>    <a href="http://www.allegro.cc/manual/remove_mouse" target="_blank"><span class="a">remove_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 173</span>  <span class="k2">}</span>
<span class="number"> 174</span>  <span class="k1">if</span><span class="k2">(</span>g_runlevel <span class="k3">&gt;</span><span class="k3">=</span> RL_KEYBOARD_OK<span class="k2">)</span>
<span class="number"> 175</span>  <span class="k2">{</span>
<span class="number"> 176</span>    <a href="http://www.allegro.cc/manual/remove_keyboard" target="_blank"><span class="a">remove_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 177</span>  <span class="k2">}</span>
<span class="number"> 178</span>  <span class="k1">if</span><span class="k2">(</span>g_runlevel <span class="k3">&gt;</span><span class="k3">=</span> RL_ALLEGRO_OK<span class="k2">)</span>
<span class="number"> 179</span>  <span class="k2">{</span>
<span class="number"> 180</span>    <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</span>  <span class="k2">}</span>
<span class="number"> 182</span><span class="k2">}</span>
<span class="number"> 183</span>
<span class="number"> 184</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> arg_count, <span class="k1">char</span> <span class="k3">*</span>argument<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number"> 185</span><span class="k2">{</span>
<span class="number"> 186</span>  <span class="k1">int</span> m_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 187</span>  <span class="k1">int</span> m_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 188</span>
<span class="number"> 189</span>  <span class="k1">if</span><span class="k2">(</span>initialize<span class="k2">(</span><span class="k2">)</span><span class="k3">!</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span>
<span class="number"> 190</span>  <span class="k2">{</span>
<span class="number"> 191</span>    deinitialize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 193</span>  <span class="k2">}</span>
<span class="number"> 194</span>        
<span class="number"> 195</span>  <a href="http://www.allegro.cc/manual/show_mouse" target="_blank"><span class="a">show_mouse</span></a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 196</span>  position_mouse_override<span class="k2">(</span><span class="n">320</span>,<span class="n">240</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>g_back,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">200</span>,<span class="n">200</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 198</span>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>g_msafe,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">200</span>,<span class="n">200</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span> 
<span class="number"> 200</span>  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>g_quit<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>  <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>close_bhandler<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>  <a href="http://www.allegro.cc/manual/set_close_button_callback" target="_blank"><span class="a">set_close_button_callback</span></a><span class="k2">(</span>close_bhandler<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</span>  
<span class="number"> 204</span>  <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">500</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// not resting here seemed to cause trouble with timing</span>
<span class="number"> 205</span>             <span class="c">// and made the app respond very slowly after starting</span>
<span class="number"> 206</span>  
<span class="number"> 207</span>  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>g_sp_counter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 208</span>  <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>increment_sp_counter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 209</span>  <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>increment_sp_counter, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 210</span>  
<span class="number"> 211</span>  <span class="c">//Main loop      </span>
<span class="number"> 212</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>g_quit<span class="k2">)</span> 
<span class="number"> 213</span>  <span class="k2">{</span>
<span class="number"> 214</span>     <span class="k1">while</span> <span class="k2">(</span>g_sp_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> 
<span class="number"> 215</span>     <span class="k2">{</span>
<span class="number"> 216</span>       <span class="c">// get input</span>
<span class="number"> 217</span>       <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/keyboard_needs_poll" target="_blank"><span class="a">keyboard_needs_poll</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 218</span>         <a href="http://www.allegro.cc/manual/poll_keyboard" target="_blank"><span class="a">poll_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span>       <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_needs_poll" target="_blank"><span class="a">mouse_needs_poll</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 220</span>         <a href="http://www.allegro.cc/manual/poll_mouse" target="_blank"><span class="a">poll_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 221</span>         
<span class="number"> 222</span>       <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 223</span>         g_quit<span class="k3">=</span><span class="k1">true</span><span class="k2">;</span>
<span class="number"> 224</span>         
<span class="number"> 225</span>       update_abs_mousepos<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 226</span>       
<span class="number"> 227</span>       g_sp_counter--<span class="k2">;</span>
<span class="number"> 228</span>       <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>     <span class="k2">}</span>
<span class="number"> 230</span>     
<span class="number"> 231</span>     <span class="c">// redraw information</span>
<span class="number"> 232</span>     <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>g_back,<span class="n">0</span>,<span class="n">0</span>,g_back-&gt;w-1,<span class="n">40</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">200</span>,<span class="n">200</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>     <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>g_back, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>,  <span class="n">0</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>, <span class="s">"g_abs_mx: %i"</span>, g_abs_mx<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 234</span>     <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>g_back, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>, <span class="s">"g_abs_my: %i"</span>, g_abs_my<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 235</span>     <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span><span class="k3">!</span>g_mouse_inside<span class="k2">)</span><span class="k3">&amp;</span><span class="k3">&amp;</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/is_windowed_mode" target="_blank"><span class="a">is_windowed_mode</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 236</span>       <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>g_back,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">10</span>,<span class="n">30</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>,<span class="s">"Mouse is outside of window."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 237</span>     
<span class="number"> 238</span>     <span class="c">// save stuff under mouse cursor before displaying it</span>
<span class="number"> 239</span>     m_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">;</span>
<span class="number"> 240</span>     m_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">;</span>
<span class="number"> 241</span>     <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>g_back,g_msafe,m_x,m_y,<span class="n">0</span>,<span class="n">0</span>,g_msafe-&gt;w,g_msafe-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 242</span>     <span class="c">// draw mouse if inside of window</span>
<span class="number"> 243</span>     <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>g_mouse_inside<span class="k2">)</span><span class="k3">&amp;</span><span class="k3">&amp;</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/is_windowed_mode" target="_blank"><span class="a">is_windowed_mode</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 244</span>       <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>g_back,<a href="http://www.allegro.cc/manual/mouse_sprite" target="_blank"><span class="a">mouse_sprite</span></a>,m_x,m_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 245</span>     <span class="c">// show backbuffer to screen</span>
<span class="number"> 246</span>     <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>     <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>g_back,<a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,g_back-&gt;w,g_back-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 248</span>     <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 249</span>     <span class="c">// restore stuff under mouse</span>
<span class="number"> 250</span>     <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>g_msafe,g_back,<span class="n">0</span>,<span class="n">0</span>,m_x,m_y,g_msafe-&gt;w,g_msafe-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 251</span>  <span class="k2">}</span>
<span class="number"> 252</span>      
<span class="number"> 253</span>  <a href="http://www.allegro.cc/manual/remove_int" target="_blank"><span class="a">remove_int</span></a><span class="k2">(</span>increment_sp_counter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 254</span>        
<span class="number"> 255</span>  deinitialize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 256</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 257</span><span class="k2">}</span>
<span class="number"> 258</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span>
</div></div><p>

...now the problems here are:<br />This test app sometimes freezes and I can&#039;t seem to find why. Anyone have an idea?<br />(this especially likes to happen when the window is being moved around)<br />I don&#039;t think the freezing has got anything to do with the method of updating the global mouse variables here, as I&#039;m already using this method in another app, where it works fine and the only difference to that other app is that i&#039;m not using that usual &quot;timer logic to keep it running same speed everywhere&quot;(as mentioned in allegros docs) there. So I assume, I&#039;m doing something wrong about the timer.</p><p>The other problem is that this method so far has only been tested by me to report the mouse to be outside of the window correctly in Windows, since I don&#039;t have access to any other OSes, so it would be nice, if you could test it in the other OSes supported by Allegro, so we can see if it is a usable solution or just an ugly hack.<br />(Actually it would still be quite an ugly hack, even if it worked...)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dennis)</author>
		<pubDate>Thu, 25 May 2006 02:55:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I clubbed together a small test application to demonstrate the purely Allegro dependant method, which uses the mouse mickeys reported by allegro to keep track of an absolute mouse position that can get negative or larger than the screen dimensions, thus providing the base for checking if the mouse is inside or outside the window.
</p></div></div><p>
This is unreliable because it relies on the programme receiving mouse events after the mouse has left the client window. This is not true in X11, for instance (actually, the situation there is more complicated: if you use mouse mickeys under X11, the mouse is trapped inside the client window and cannot be pulled out of it, unless you use a hardware cursor, in which case the behavior is as I said above).</p><p>There is no reliable way of detecting wether or not the window has mouse focus using just Allegro.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Thu, 25 May 2006 03:03:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
There is no reliable way of detecting wether or not the window has mouse focus using just Allegro.
</p></div></div><p>
Is this in the plans for future allegro versions?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Onewing)</author>
		<pubDate>Thu, 25 May 2006 03:30:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
This is unreliable because it relies on the programme receiving mouse events after the mouse has left the client window. This is not true in X11, for instance[..]
</p></div></div><p>
Ok that makes this method practically useless.:(<br />Now I would also appreciate it, if a check for that would get included in a future version of Allegro, so i&#39;m posting the Windows specific solution here, which AJ gave me:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> win_mouse_in_window<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
  POINT mp<span class="k2">;</span>
  RECT wr<span class="k2">;</span>
  GetCursorPos<span class="k2">(</span><span class="k3">&amp;</span>mp<span class="k2">)</span><span class="k2">;</span>
  GetWindowRect<span class="k2">(</span><a href="http://www.allegro.cc/manual/win_get_window" target="_blank"><span class="a">win_get_window</span></a><span class="k2">(</span><span class="k2">)</span>,<span class="k3">&amp;</span>wr<span class="k2">)</span><span class="k2">;</span>
  <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span>mp.x<span class="k3">&lt;</span>wr.left<span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>mp.x&gt;wr.right<span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>mp.y<span class="k3">&lt;</span>wr.top<span class="k2">)</span><span class="k3">|</span><span class="k3">|</span><span class="k2">(</span>mp.y&gt;wr.bottom<span class="k2">)</span> <span class="k2">)</span>
    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
  <span class="k1">else</span>
    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dennis)</author>
		<pubDate>Thu, 25 May 2006 13:10:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think someone (Andrei?) already posted a patch for that several weeks ago.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Thu, 25 May 2006 13:25:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A patch that fixes the mouse trapping in X11 and corrects the mickey reporting or a patch that provides a function to check if the mouse is inside the window?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dennis)</author>
		<pubDate>Thu, 25 May 2006 15:05:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ummm... I never made such a patch <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> . Although I agree that it would be nice if there was a function for reporting if the mouse was inside or outside the window, or even better, if it was to the left/right/top/bottom of the window. Better still, there could be a second version of te mouse_x and mouse_y variables that store the mouse position relative to the <tt>screen</tt> bitmap&#39;s origin. These variables would be negative if left/top of the window. If the mouse is inside the window, these would be equal to mouse_[x|y]. However, these new variables should be separate from mouse_x and mouse_y in order to maintain backwards compatibility - there&#39;s plenty of code out there that assume that the values reurtned by mouse_[x|y] are on-screen, positive, etc.</p><p>AE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Thu, 25 May 2006 15:29:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I didn&#39;t actaully test that code i gave you Dennis, but am fairly confident it will work, i&#39;d test it before any final commits.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Thu, 25 May 2006 15:33:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I tested it AJ (after reading the WinAPI docs and changing GetClientRect to GetWindowRect <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />) and it works.<br />However, I don&#39;t know how to make patches for Allegro or how to commit anything and I also have no idea as to where in the code this should be inserted.<br />I&#39;m currently reading the SVN documentation on sourceforge...</p><p>That aside, this function is still useless if noone writes equivalent functions for the other OSes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dennis)</author>
		<pubDate>Thu, 25 May 2006 15:48:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It might need some fullscreen/windowed mode test also.</p><p>Im sure we can find someone to commit it for you, thats not a concern.</p><p>Surely there is someone that wants to make the linux equivalent ?<br />Anyone ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Thu, 25 May 2006 16:06:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro already has &quot;is_windowed_mode()&quot;.<br />In fullscreen mode the windowrectangle would be the full screen and the cursor position would be limited to the full screen anyway, so the function should only be used when is_windowed_mode reports true.</p><p>Considering what Andrei said though, maybe there should just be two other functions to allow for greater flexibility:<br />One that returns the window rectangle in screen(not allegros screen) coordinates and<br />One that returns the cursor position in screen(not allegros screen) coordinates.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dennis)</author>
		<pubDate>Thu, 25 May 2006 16:17:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
A patch that fixes the mouse trapping in X11 and corrects the mickey reporting
</p></div></div><p>
There&#39;s nothing to fix. It works as it does by design (to get an infinate range of mickeys).</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
a patch that provides a function to check if the mouse is inside the window?
</p></div></div><p>
This one. If it wasn&#39;t Andrei, I&#39;m sure it was someone else. </p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
One that returns the window rectangle in screen(not allegros screen) coordinates and<br />One that returns the cursor position in screen(not allegros screen) coordinates.
</p></div></div><p>
I don&#39;t think you can do this reliably everywhere. Having a function that tells you if your application has mouse focus should be enough.<br />However: if this requires vtable changes, it will not go into 4.2.1 and it&#39;s something for 4.3.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Thu, 25 May 2006 16:43:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My assumption would be that every windowingsystem has some way of retrieving the window position in screen coordinates and the mouse cursor as well, because otherwise I can&#39;t imagine how a windowingsystem would ever be able to tell which window is getting the focus.</p><p>For my current application I only need to know whether the mouse is in or not, but knowing those other values could be useful.(e.g. for a fun app like Xeyes, which is a small pair of eyes in a window that always looks at the mouse cursor)</p><p>For now I&#39;m going to use the windows specific solution with conditional compiling to not break the code for other platforms. Will wait for version 4.2.1 for a true solution.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dennis)</author>
		<pubDate>Thu, 25 May 2006 19:35:12 +0000</pubDate>
	</item>
</rss>
