<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY fired outside edge of display</title>
		<link>http://www.allegro.cc/forums/view/616965</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 14 Jul 2017 22:43:20 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Setup: Allegro 5.2.2.1 installed into Visual Studio 2015 via NuGet: <a href="https://www.nuget.org/packages/Allegro/">https://www.nuget.org/packages/Allegro/</a> an a 64-bit Windows 7.</p><p>TL;DR I believe that <span class="source-code">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span> is being incorrectly fired while the mouse is outside the window but is moving over its edge.</p><p>I extended the tutorial code from <a href="https://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Input">https://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Input</a> to include both mouse-enter and mouse-leave functionality. Essentially, the bouncer will bounce from wall to wall while no mouse is over the window:<br /><span class="remote-thumbnail"><span class="json">{"name":"610949","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/e\/7eac12146bffadc87b1e2153871c9572.png","w":816,"h":638,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/e\/7eac12146bffadc87b1e2153871c9572"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/7/e/7eac12146bffadc87b1e2153871c9572-240.jpg" alt="610949" width="240" height="187" /></span></p><p>When the mouse is inside the window, the <span class="source-code">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span> event is called, and the bouncer follows the mouse and its position is displayed on the 2nd line:<br /><span class="remote-thumbnail"><span class="json">{"name":"610952","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/f\/4ff62701ca38ec2fa14e2b1be8d5c7b7.png","w":816,"h":638,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/f\/4ff62701ca38ec2fa14e2b1be8d5c7b7"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/4/f/4ff62701ca38ec2fa14e2b1be8d5c7b7-240.jpg" alt="610952" width="240" height="187" /></span></p><p>Moving the mouse back off the window fires the <span class="source-code">ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY</span> event, which allows the bouncer to wall-bounce again.</p><p>Around the edge of the window is a 5-pixel &quot;resize&quot; edge. My screen is 800x600, and if my mouse is exactly x=800, <span class="source-code">ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY</span> is fired. If my mouse moves anywhere between x=801 to x=805, the <span class="source-code">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span> event is fired a second time. But moving my mouse totally off the window (x=806 and further), no <span class="source-code">ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY</span> is called a second time, meaning that my mouse is still &quot;holding&quot; the bouncer in place.<br /><span class="remote-thumbnail"><span class="json">{"name":"610953","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/3\/0\/305a0d92a3b8480d840274f7a694e4f2.png","w":816,"h":638,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/3\/0\/305a0d92a3b8480d840274f7a694e4f2"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/3/0/305a0d92a3b8480d840274f7a694e4f2-240.jpg" alt="610953" width="240" height="187" /></span></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;allegro5/allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;string&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;sstream&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="k1">int</span> InitializeAllegro<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span><span class="k3">&amp;</span>, <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span><span class="k3">&amp;</span>, <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span><span class="k3">&amp;</span>, <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span><span class="k3">&amp;</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="k1">const</span> <span class="k1">double</span> FPS <span class="k3">=</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  10</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">=</span> <span class="n">800</span><span class="k2">;</span>
<span class="number">  11</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T&gt;
<span class="number">  14</span><span class="k1">class</span> TVector2
<span class="number">  15</span><span class="k2">{</span>
<span class="number">  16</span>public:
<span class="number">  17</span>  TVector2<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> x<span class="k2">(</span>T<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>, y<span class="k2">(</span>T<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  18</span>  TVector2<span class="k2">(</span>T InX, T InY<span class="k2">)</span> <span class="k2">:</span> x<span class="k2">(</span>InX<span class="k2">)</span>, y<span class="k2">(</span>InY<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  19</span>
<span class="number">  20</span>  TVector2 <span class="k1">operator</span><span class="k3">+</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> TVector2<span class="k3">&amp;</span> other<span class="k2">)</span>
<span class="number">  21</span>  <span class="k2">{</span>
<span class="number">  22</span>    x <span class="k3">+</span><span class="k3">=</span> other.x<span class="k2">;</span>
<span class="number">  23</span>    y <span class="k3">+</span><span class="k3">=</span> other.y<span class="k2">;</span>
<span class="number">  24</span>    <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number">  25</span>  <span class="k2">}</span>
<span class="number">  26</span>
<span class="number">  27</span>  T x<span class="k2">;</span>
<span class="number">  28</span>  T y<span class="k2">;</span>
<span class="number">  29</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  30</span>
<span class="number">  31</span><span class="k1">class</span> FBouncer
<span class="number">  32</span><span class="k2">{</span>
<span class="number">  33</span>public:
<span class="number">  34</span>  FBouncer<span class="k2">(</span><span class="k1">const</span> <span class="k1">int</span> Width, <span class="k1">const</span> <span class="k1">int</span> Height, <span class="k1">const</span> <span class="k1">float</span> StartingX, <span class="k1">const</span> <span class="k1">float</span> StartingY<span class="k2">)</span>
<span class="number">  35</span>    <span class="k2">:</span> _size<span class="k2">(</span>TVector2<span class="k3">&lt;</span>int&gt;<span class="k2">(</span>Width, Height<span class="k2">)</span><span class="k2">)</span>
<span class="number">  36</span>    , _position<span class="k2">(</span>TVector2<span class="k3">&lt;</span>float&gt;<span class="k2">(</span>StartingX <span class="k3">-</span> Width<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span>, StartingY <span class="k3">-</span> Height<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  37</span>    , _bitmap<span class="k2">(</span>nullptr<span class="k2">)</span>
<span class="number">  38</span>    , _bIsControlled<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span>
<span class="number">  39</span>  <span class="k2">{</span> <span class="k2">}</span>
<span class="number">  40</span>
<span class="number">  41</span>  ~FBouncer<span class="k2">(</span><span class="k2">)</span>
<span class="number">  42</span>  <span class="k2">{</span>
<span class="number">  43</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>_bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>    _bitmap <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number">  45</span>  <span class="k2">}</span>
<span class="number">  46</span>
<span class="number">  47</span>  TVector2<span class="k3">&lt;</span>int&gt; GetSize<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> _size<span class="k2">;</span> <span class="k2">}</span>
<span class="number">  48</span>  TVector2<span class="k3">&lt;</span>float&gt; GetPosition<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> _position<span class="k2">;</span> <span class="k2">}</span>
<span class="number">  49</span>  TVector2<span class="k3">&lt;</span>float&gt; GetDirection<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> _direction<span class="k2">;</span> <span class="k2">}</span>
<span class="number">  50</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> GetBitmap<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> _bitmap<span class="k2">;</span> <span class="k2">}</span>
<span class="number">  51</span>
<span class="number">  52</span>  <span class="k1">void</span> SetPosition<span class="k2">(</span><span class="k1">const</span> TVector2<span class="k3">&lt;</span>float&gt;<span class="k3">&amp;</span> InPosition<span class="k2">)</span>
<span class="number">  53</span>  <span class="k2">{</span>
<span class="number">  54</span>    _position.x <span class="k3">=</span> InPosition.x<span class="k2">;</span>
<span class="number">  55</span>    _position.y <span class="k3">=</span> InPosition.y<span class="k2">;</span>
<span class="number">  56</span>  <span class="k2">}</span>
<span class="number">  57</span>
<span class="number">  58</span>  <span class="k1">void</span> SetPositionCentered<span class="k2">(</span><span class="k1">const</span> TVector2<span class="k3">&lt;</span>float&gt;<span class="k3">&amp;</span> InPosition<span class="k2">)</span>
<span class="number">  59</span>  <span class="k2">{</span>
<span class="number">  60</span>    _position.x <span class="k3">=</span> InPosition.x <span class="k3">-</span> _size.x <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  61</span>    _position.y <span class="k3">=</span> InPosition.y <span class="k3">-</span> _size.y <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  62</span>  <span class="k2">}</span>
<span class="number">  63</span>
<span class="number">  64</span>  <span class="k1">void</span> SetDirection<span class="k2">(</span><span class="k1">const</span> TVector2<span class="k3">&lt;</span>float&gt;<span class="k3">&amp;</span> InDirection<span class="k2">)</span>
<span class="number">  65</span>  <span class="k2">{</span>
<span class="number">  66</span>    _direction.x <span class="k3">=</span> InDirection.x<span class="k2">;</span>
<span class="number">  67</span>    _direction.y <span class="k3">=</span> InDirection.y<span class="k2">;</span>
<span class="number">  68</span>  <span class="k2">}</span>
<span class="number">  69</span>
<span class="number">  70</span>  <span class="k1">void</span> SetControlled<span class="k2">(</span><span class="k1">bool</span> bIsControlled<span class="k2">)</span>
<span class="number">  71</span>  <span class="k2">{</span>
<span class="number">  72</span>    <span class="k1">if</span> <span class="k2">(</span>_bIsControlled <span class="k3">!</span><span class="k3">=</span> bIsControlled<span class="k2">)</span>
<span class="number">  73</span>    <span class="k2">{</span>
<span class="number">  74</span>      _bIsControlled <span class="k3">=</span> bIsControlled<span class="k2">;</span>
<span class="number">  75</span>    <span class="k2">}</span>
<span class="number">  76</span>  <span class="k2">}</span>
<span class="number">  77</span>
<span class="number">  78</span>  <span class="k1">void</span> Move<span class="k2">(</span><span class="k2">)</span>
<span class="number">  79</span>  <span class="k2">{</span>
<span class="number">  80</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>_bIsControlled<span class="k2">)</span>
<span class="number">  81</span>    <span class="k2">{</span>
<span class="number">  82</span>      _position.x <span class="k3">+</span><span class="k3">=</span> _direction.x<span class="k2">;</span>
<span class="number">  83</span>      _position.y <span class="k3">+</span><span class="k3">=</span> _direction.y<span class="k2">;</span>
<span class="number">  84</span>    <span class="k2">}</span>
<span class="number">  85</span>  <span class="k2">}</span>
<span class="number">  86</span>
<span class="number">  87</span>  <span class="k1">int</span> Init<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> CurrentTargetBitmap<span class="k2">)</span>
<span class="number">  88</span>  <span class="k2">{</span>
<span class="number">  89</span>    _bitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span><span class="n">32</span>, <span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>    <span class="k1">if</span> <span class="k2">(</span>_bitmap <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number">  91</span>    <span class="k2">{</span>
<span class="number">  92</span>      std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"FBouncer is unable to create ALLEGRO_BITMAP."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number">  93</span>      <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  94</span>    <span class="k2">}</span>
<span class="number">  95</span>
<span class="number">  96</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>_bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>    <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>CurrentTargetBitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>
<span class="number"> 100</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 101</span>  <span class="k2">}</span>
<span class="number"> 102</span>
<span class="number"> 103</span>protected:
<span class="number"> 104</span>  TVector2<span class="k3">&lt;</span>int&gt; _size<span class="k2">;</span>
<span class="number"> 105</span>  TVector2<span class="k3">&lt;</span>float&gt; _position<span class="k2">;</span>
<span class="number"> 106</span>  TVector2<span class="k3">&lt;</span>float&gt; _direction<span class="k2">;</span>
<span class="number"> 107</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> _bitmap<span class="k2">;</span>
<span class="number"> 108</span>  <span class="k1">bool</span> _bIsControlled<span class="k2">;</span>
<span class="number"> 109</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 110</span>
<span class="number"> 111</span>
<span class="number"> 112</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span>
<span class="number"> 113</span><span class="k2">{</span>
<span class="number"> 114</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> display <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 115</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 116</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> timer <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 117</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> event_queue <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 118</span>  
<span class="number"> 119</span>  <span class="k1">int</span> init_error <span class="k3">=</span> InitializeAllegro<span class="k2">(</span>display, <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, timer, event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>  <span class="k1">if</span> <span class="k2">(</span>init_error <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 121</span>  <span class="k2">{</span>
<span class="number"> 122</span>    <span class="k1">if</span> <span class="k2">(</span>init_error <span class="k3">&lt;</span><span class="k3">=</span> <span class="k3">-</span><span class="n">3</span><span class="k2">)</span>
<span class="number"> 123</span>    <span class="k2">{</span>
<span class="number"> 124</span>      <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>    <span class="k2">}</span>
<span class="number"> 126</span>    <span class="k1">if</span> <span class="k2">(</span>init_error <span class="k3">&lt;</span><span class="k3">=</span> <span class="k3">-</span><span class="n">4</span><span class="k2">)</span>
<span class="number"> 127</span>    <span class="k2">{</span>
<span class="number"> 128</span>      <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</span>    <span class="k2">}</span>
<span class="number"> 130</span>    <span class="k1">if</span> <span class="k2">(</span>init_error <span class="k3">&lt;</span><span class="k3">=</span> <span class="k3">-</span><span class="n">5</span><span class="k2">)</span>
<span class="number"> 131</span>    <span class="k2">{</span>
<span class="number"> 132</span>      <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 133</span>    <span class="k2">}</span>
<span class="number"> 134</span>    <span class="k1">if</span> <span class="k2">(</span>init_error <span class="k3">&lt;</span><span class="k3">=</span> <span class="k3">-</span><span class="n">6</span><span class="k2">)</span>
<span class="number"> 135</span>    <span class="k2">{</span>
<span class="number"> 136</span>      <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>    <span class="k2">}</span>
<span class="number"> 138</span>    <span class="k1">return</span> init_error<span class="k2">;</span>
<span class="number"> 139</span>  <span class="k2">}</span>
<span class="number"> 140</span>
<span class="number"> 141</span>  FBouncer bouncer<span class="k2">(</span><span class="n">32</span>, <span class="n">32</span>, <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">/</span> <span class="n">2</span>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>  bouncer.SetDirection<span class="k2">(</span>TVector2<span class="k3">&lt;</span>float&gt;<span class="k2">(</span><span class="k3">-</span><span class="n">4</span>.<span class="n">0</span>, <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>  bouncer.Init<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 144</span>
<span class="number"> 145</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 146</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>
<span class="number"> 149</span>  <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</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="k2">)</span><span class="k2">;</span>
<span class="number"> 150</span>  <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>
<span class="number"> 152</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>
<span class="number"> 154</span>  std::string mouse_pos_msg<span class="k2">(</span><span class="s">""</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span>
<span class="number"> 156</span>  <span class="k1">bool</span> b_needs_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 157</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 158</span>  <span class="k2">{</span>
<span class="number"> 159</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number"> 160</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>
<span class="number"> 162</span>    <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 163</span>    <span class="k2">{</span>
<span class="number"> 164</span>      <span class="c">// Game logic goes in here</span>
<span class="number"> 165</span>
<span class="number"> 166</span>      TVector2<span class="k3">&lt;</span>float&gt; direction <span class="k3">=</span> bouncer.GetDirection<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 167</span>      TVector2<span class="k3">&lt;</span>float&gt; current_pos <span class="k3">=</span> bouncer.GetPosition<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 168</span>
<span class="number"> 169</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>current_pos.x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> direction.x <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 170</span>          <span class="k2">(</span>current_pos.x <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">-</span> bouncer.GetSize<span class="k2">(</span><span class="k2">)</span>.x <span class="k3">&amp;</span><span class="k3">&amp;</span> direction.x <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 171</span>      <span class="k2">{</span>
<span class="number"> 172</span>        direction.x <span class="k3">=</span> <span class="k3">-</span>direction.x<span class="k2">;</span>
<span class="number"> 173</span>      <span class="k2">}</span>
<span class="number"> 174</span>
<span class="number"> 175</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>current_pos.y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> direction.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 176</span>          <span class="k2">(</span>current_pos.y <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">-</span> bouncer.GetSize<span class="k2">(</span><span class="k2">)</span>.y <span class="k3">&amp;</span><span class="k3">&amp;</span> direction.y <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 177</span>      <span class="k2">{</span>
<span class="number"> 178</span>        direction.y <span class="k3">=</span> <span class="k3">-</span>direction.y<span class="k2">;</span>
<span class="number"> 179</span>      <span class="k2">}</span>
<span class="number"> 180</span>
<span class="number"> 181</span>      bouncer.SetDirection<span class="k2">(</span>direction<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 182</span>      bouncer.Move<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 183</span>      b_needs_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 184</span>    <span class="k2">}</span>
<span class="number"> 185</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number"> 186</span>    <span class="k2">{</span>
<span class="number"> 187</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 188</span>    <span class="k2">}</span>
<span class="number"> 189</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 190</span>             event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY<span class="k2">)</span>
<span class="number"> 191</span>    <span class="k2">{</span>
<span class="number"> 192</span>      bouncer.SetControlled<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 193</span>      TVector2<span class="k3">&lt;</span>float&gt; <a href="http://www.allegro.cc/manual/mouse_pos"><span class="a">mouse_pos</span></a><span class="k2">(</span>event.mouse.x, event.mouse.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 194</span>      bouncer.SetPositionCentered<span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_pos"><span class="a">mouse_pos</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>      std::stringstream ss<span class="k2">(</span><span class="s">"Pos: "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 196</span>      ss <span class="k3">&lt;</span><span class="k3">&lt;</span> event.mouse.x <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">","</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> event.mouse.y<span class="k2">;</span>
<span class="number"> 197</span>      mouse_pos_msg <span class="k3">=</span> ss.str<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 198</span>    <span class="k2">}</span>
<span class="number"> 199</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY<span class="k2">)</span>
<span class="number"> 200</span>    <span class="k2">{</span>
<span class="number"> 201</span>      bouncer.SetControlled<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>      mouse_pos_msg <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 203</span>    <span class="k2">}</span>
<span class="number"> 204</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span>
<span class="number"> 205</span>    <span class="k2">{</span>
<span class="number"> 206</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 207</span>    <span class="k2">}</span>
<span class="number"> 208</span>
<span class="number"> 209</span>    <span class="k1">if</span> <span class="k2">(</span>b_needs_redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 210</span>    <span class="k2">{</span>
<span class="number"> 211</span>      <span class="c">// Redraw logic goes in here</span>
<span class="number"> 212</span>
<span class="number"> 213</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</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="k2">)</span><span class="k2">;</span>
<span class="number"> 214</span>
<span class="number"> 215</span>      <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="n">400</span>, <span class="n">300</span>, ALLEGRO_ALIGN_CENTER, <span class="s">"Welcome to Allegro 5!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</span>      <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="n">400</span>, <span class="n">300</span> <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_font_line_height"><span class="a">al_get_font_line_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span>, ALLEGRO_ALIGN_CENTER, mouse_pos_msg.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 217</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> i <span class="k3">&lt;</span> argc<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 218</span>      <span class="k2">{</span>
<span class="number"> 219</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"argv["</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> i <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"] = "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> argv<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 220</span>        <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="n">400</span>, <span class="n">300</span> <span class="k3">+</span> i <span class="k3">*</span> <a href="http://www.allegro.cc/manual/al_get_font_line_height"><span class="a">al_get_font_line_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span>, ALLEGRO_ALIGN_CENTER, argv<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 221</span>      <span class="k2">}</span>
<span class="number"> 222</span>
<span class="number"> 223</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bouncer.GetBitmap<span class="k2">(</span><span class="k2">)</span>, bouncer.GetPosition<span class="k2">(</span><span class="k2">)</span>.x, bouncer.GetPosition<span class="k2">(</span><span class="k2">)</span>.y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 224</span>
<span class="number"> 225</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 226</span>
<span class="number"> 227</span>      b_needs_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 228</span>    <span class="k2">}</span>
<span class="number"> 229</span>  <span class="k2">}</span>
<span class="number"> 230</span>
<span class="number"> 231</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>  <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>  <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 234</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 235</span>
<span class="number"> 236</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 237</span><span class="k2">}</span>
<span class="number"> 238</span>
<span class="number"> 239</span>
<span class="number"> 240</span><span class="k1">int</span> InitializeAllegro<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span><span class="k3">&amp;</span> display, <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span><span class="k3">&amp;</span> timer, <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span><span class="k3">&amp;</span> queue<span class="k2">)</span>
<span class="number"> 241</span><span class="k2">{</span>
<span class="number"> 242</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 243</span>  <span class="k2">{</span>
<span class="number"> 244</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to initialize Allegro 5. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 245</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 246</span>  <span class="k2">}</span>
<span class="number"> 247</span>
<span class="number"> 248</span>  <span class="c">// Call all al_init_*_addon() before other functions.</span>
<span class="number"> 249</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 250</span>
<span class="number"> 251</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 252</span>  <span class="k2">{</span>
<span class="number"> 253</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to install the mouse. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 254</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 255</span>  <span class="k2">}</span>
<span class="number"> 256</span>
<span class="number"> 257</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 258</span>  <span class="k1">if</span> <span class="k2">(</span>display <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 259</span>  <span class="k2">{</span>
<span class="number"> 260</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to create ALLEGRO_DISPLAY. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 261</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">3</span><span class="k2">;</span>
<span class="number"> 262</span>  <span class="k2">}</span>
<span class="number"> 263</span>
<span class="number"> 264</span>  <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> al_create_builtin_font<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 265</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 266</span>  <span class="k2">{</span>
<span class="number"> 267</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to create ALLEGRO_FONT. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 268</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">4</span><span class="k2">;</span>
<span class="number"> 269</span>  <span class="k2">}</span>
<span class="number"> 270</span>
<span class="number"> 271</span>  timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> FPS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 272</span>  <span class="k1">if</span> <span class="k2">(</span>timer <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 273</span>  <span class="k2">{</span>
<span class="number"> 274</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to create ALLEGRO_TIMER. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 275</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">5</span><span class="k2">;</span>
<span class="number"> 276</span>  <span class="k2">}</span>
<span class="number"> 277</span>
<span class="number"> 278</span>  queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 279</span>  <span class="k1">if</span> <span class="k2">(</span>queue <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 280</span>  <span class="k2">{</span>
<span class="number"> 281</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to create ALLEGRO_EVENT_QUEUE. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 282</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">6</span><span class="k2">;</span>
<span class="number"> 283</span>  <span class="k2">}</span>
<span class="number"> 284</span>
<span class="number"> 285</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 286</span><span class="k2">}</span>
</div></div><p>

Is this an engine issue, or should I deal with this in code and &quot;simulate&quot; a second <span class="source-code">ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY</span> event by detecting the actual mouse position in relation to the screen&#39;s dimensions?</p><p><b>EDIT:</b><br />A fix is to just programmatically ignore invalid mouse positions:
</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"> 189</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 190</span>             event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY<span class="k2">)</span>
<span class="number"> 191</span>    <span class="k2">{</span>
<span class="number"> 192</span>      <span class="k1">if</span> <span class="k2">(</span>event.mouse.x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> event.mouse.x <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 193</span>          event.mouse.y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> event.mouse.y <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k2">)</span>
<span class="number"> 194</span>      <span class="k2">{</span>
<span class="number"> 195</span>        <span class="c">// Ignore it</span>
<span class="number"> 196</span>        <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 197</span>      <span class="k2">}</span>
<span class="number"> 198</span>      bouncer.SetControlled<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>      TVector2<span class="k3">&lt;</span>float&gt; <a href="http://www.allegro.cc/manual/mouse_pos"><span class="a">mouse_pos</span></a><span class="k2">(</span>event.mouse.x, event.mouse.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>      bouncer.SetPositionCentered<span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_pos"><span class="a">mouse_pos</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>      std::stringstream ss<span class="k2">(</span><span class="s">"Pos: "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>      ss <span class="k3">&lt;</span><span class="k3">&lt;</span> event.mouse.x <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">","</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> event.mouse.y<span class="k2">;</span>
<span class="number"> 203</span>      mouse_pos_msg <span class="k3">=</span> ss.str<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 204</span>    <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Tue, 04 Jul 2017 09:32:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Bumping so it doesn&#39;t get locked. Haven&#39;t had time to look at this yet.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 10 Jul 2017 10:12:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Part of the problem I see is this code <span class="source-code">current_pos.x <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a></span>.  The right edge of the screen is SCREEN_W-1, not SCREEN_W.  You should have something like <span class="source-code">current_pos.x <span class="k3">&gt;</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a></span>.</p><p>I haven&#39;t examined your code too thuroughly, but that stood out for me.  The screen goes from zero to SCREEN_W-1 in the X direction and zero to SCREEN_H-1 in the Y.  In this case your screen goes from zero to 799 in the X, and zero to 599 in the Y.  If you&#39;re testing to see if it is greater than 800, than what happens if it is on 800 in the X, or on 600 in the Y?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Thu, 13 Jul 2017 22:05:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Changing <span class="source-code"><span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a></span> to <span class="source-code"><span class="k3">&gt;</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a></span> changes nothing about the issue with the allegro event being fired: all it does is make the cube bounce one pixel sooner.</p><p>The mouse still fires off the <span class="source-code">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span> event when it moves over the window edge.</p><p>Under the Windows 7 Control Panel: <span class="source-code">Control Panel\All Control Panel Items\Personalization</span> I changed to another theme which had about a 2-pixel-thick window border. This event is NOT fired when I move around that border.</p><p>The default Windows 7 theme (Aero), however, does have this 5-pixel-thick border.</p><p>I tried to write this sample code above as platform-agnostic as possible so it could be tested on other systems (Linux, OS X, ...) to rule out whether this was platform and/or theme specific.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Fri, 14 Jul 2017 02:40:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/616965/1031507#target">OnlineCop</a> said:</div><div class="quote"><p>The mouse still fires off the ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY event when it moves over the window edge.</p></div></div><p>

Have you tried the example programs to see if they do the same thing?  <span class="source-code">ex_mouse_focus.exe</span> is a good test, it reports when the mouse goes outside the display and seems to work no problem for me.  It only reports when the mouse is over the actual display and not the border.</p><p>Also <span class="source-code">ex_mouse_events.exe</span> also accurately reports the mouse outside the display.</p><p>Edit: I noticed in this section of code a potential problem...</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES <span class="k3">|</span><span class="k3">|</span>  event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY<span class="k2">)</span> <span class="k2">{</span>
</pre></div></div><p>

...the ball will be mouse controlled under two conditions, entering the display OR ALLEGRO_EVENT_MOUSE_AXES triggers.  So, is the mouse axes still firing while the mouse is outside the display?  I would think so.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 14 Jul 2017 04:20:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code">ex_mouse_focus.exe</span> turns from black to red when the mouse is over it. When the mouse is over that 5-pixel window edge, it displays &quot;Outside either display&quot;, which is repeated as I drag my mouse around it. When I move completely off the window, all text output stops; when I move into the window, it becomes red and the console shows the &quot;In display 1, x = ..., y = ...&quot; properly.</p><p><span class="source-code">ex_mouse_events.exe</span> only updates the mouse coordinates while over the window: it doesn&#39;t update anything while I drag over the window edges.</p><p>I <i>can</i> separate the <span class="source-code">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span> from the <span class="source-code">ALLEGRO_EVENT_MOUSE_AXES</span> events, although I probably need to detect on launch whether the mouse is already over the window, else the <span class="source-code">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span> event will not get initially fired.</p><p><b>EDIT:</b></p><p>I wasn&#39;t able to properly detect whether the mouse was over the window when the display is created, so a work-around had to be used instead. I introduced a <span class="source-code">b_mouse_in_window</span> and check it, as well as whether the bouncer is controlled, when <span class="source-code">event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES</span>. I update that value when either <span class="source-code">event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span> or <span class="source-code">event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY</span>.</p><p>That seems to get rid of the problem with the window borders. Code below if anyone wanted to see the changes to the events.</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;allegro5/allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;string&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;sstream&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span><span class="k2">;</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="c">/** Initialize all Allegro 5 stuff. Returns 0 on success, or a negative value on error. */</span>
<span class="number">  10</span><span class="k1">int</span> AllegroInit<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span><span class="k3">&amp;</span> display, <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span><span class="k3">&amp;</span> timer, <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span><span class="k3">&amp;</span> queue<span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span><span class="c">/** Shut down all Allegro 5 stuff. Usually, destroy them in opposite order they were initialized. */</span>
<span class="number">  12</span><span class="k1">void</span> AllegroDeinit<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span><span class="k3">&amp;</span> display, <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span><span class="k3">&amp;</span> timer, <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span><span class="k3">&amp;</span> queue<span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span>
<span class="number">  14</span><span class="k1">const</span> <span class="k1">double</span> FPS <span class="k3">=</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  15</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">=</span> <span class="n">800</span><span class="k2">;</span>
<span class="number">  16</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span>
<span class="number">  17</span>
<span class="number">  18</span>
<span class="number">  19</span><span class="k1">template</span><span class="k3">&lt;</span><span class="k1">typename</span> T&gt;
<span class="number">  20</span><span class="k1">class</span> TVector2
<span class="number">  21</span><span class="k2">{</span>
<span class="number">  22</span>public:
<span class="number">  23</span>  TVector2<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> x<span class="k2">(</span>T<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>, y<span class="k2">(</span>T<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  24</span>  TVector2<span class="k2">(</span>T InX, T InY<span class="k2">)</span> <span class="k2">:</span> x<span class="k2">(</span>InX<span class="k2">)</span>, y<span class="k2">(</span>InY<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>
<span class="number">  25</span>  TVector2<span class="k2">(</span><span class="k1">const</span> TVector2<span class="k3">&lt;</span>T&gt;<span class="k3">&amp;</span> other<span class="k2">)</span>
<span class="number">  26</span>  <span class="k2">{</span>
<span class="number">  27</span>    x <span class="k3">=</span> other.x<span class="k2">;</span>
<span class="number">  28</span>    y <span class="k3">=</span> other.y<span class="k2">;</span>
<span class="number">  29</span>  <span class="k2">}</span>
<span class="number">  30</span>
<span class="number">  31</span>  TVector2<span class="k3">&lt;</span>T&gt;<span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> TVector2<span class="k3">&lt;</span>T&gt;<span class="k3">&amp;</span> other<span class="k2">)</span>
<span class="number">  32</span>  <span class="k2">{</span>
<span class="number">  33</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k1">this</span> <span class="k3">!</span><span class="k3">=</span> <span class="k3">&amp;</span>other<span class="k2">)</span>
<span class="number">  34</span>    <span class="k2">{</span>
<span class="number">  35</span>      x <span class="k3">=</span> other.x<span class="k2">;</span>
<span class="number">  36</span>      y <span class="k3">=</span> other.y<span class="k2">;</span>
<span class="number">  37</span>    <span class="k2">}</span>
<span class="number">  38</span>    <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number">  39</span>  <span class="k2">}</span>
<span class="number">  40</span>
<span class="number">  41</span>  TVector2<span class="k3">&lt;</span>T&gt; <span class="k1">operator</span><span class="k3">+</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> TVector2<span class="k3">&amp;</span> other<span class="k2">)</span>
<span class="number">  42</span>  <span class="k2">{</span>
<span class="number">  43</span>    x <span class="k3">+</span><span class="k3">=</span> other.x<span class="k2">;</span>
<span class="number">  44</span>    y <span class="k3">+</span><span class="k3">=</span> other.y<span class="k2">;</span>
<span class="number">  45</span>    <span class="k1">return</span> <span class="k3">*</span><span class="k1">this</span><span class="k2">;</span>
<span class="number">  46</span>  <span class="k2">}</span>
<span class="number">  47</span>
<span class="number">  48</span>  TVector2<span class="k3">&lt;</span>T&gt; <span class="k1">operator</span><span class="k3">*</span><span class="k2">(</span><span class="k1">const</span> <span class="k1">float</span> scalar<span class="k2">)</span> <span class="k1">const</span>
<span class="number">  49</span>  <span class="k2">{</span>
<span class="number">  50</span>    TVector2 VectorScalar<span class="k2">(</span>this-&gt;x <span class="k3">*</span> scalar, this-&gt;y <span class="k3">*</span> scalar<span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>    <span class="k1">return</span> VectorScalar<span class="k2">;</span>
<span class="number">  52</span>  <span class="k2">}</span>
<span class="number">  53</span>
<span class="number">  54</span>  TVector2<span class="k3">&lt;</span>T&gt; <span class="k1">operator</span><span class="k3">+</span><span class="k2">(</span><span class="k1">const</span> <span class="k1">float</span> scalar<span class="k2">)</span> <span class="k1">const</span>
<span class="number">  55</span>  <span class="k2">{</span>
<span class="number">  56</span>    TVector2<span class="k3">&lt;</span>T&gt; VectorScalar<span class="k2">(</span>this-&gt;x <span class="k3">+</span> scalar, this-&gt;y <span class="k3">+</span> scalar<span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>    <span class="k1">return</span> VectorScalar<span class="k2">;</span>
<span class="number">  58</span>  <span class="k2">}</span>
<span class="number">  59</span>
<span class="number">  60</span>  TVector2<span class="k3">&lt;</span>T&gt; operator-<span class="k2">(</span><span class="k1">const</span> <span class="k1">float</span> scalar<span class="k2">)</span> <span class="k1">const</span>
<span class="number">  61</span>  <span class="k2">{</span>
<span class="number">  62</span>    TVector2<span class="k3">&lt;</span>T&gt; VectorScalar<span class="k2">(</span>this-&gt;x <span class="k3">-</span> scalar, this-&gt;y <span class="k3">-</span> scalar<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>    <span class="k1">return</span> VectorScalar<span class="k2">;</span>
<span class="number">  64</span>  <span class="k2">}</span>
<span class="number">  65</span>
<span class="number">  66</span>  TVector2<span class="k3">&lt;</span>T&gt; <span class="k1">operator</span><span class="k3">+</span><span class="k2">(</span><span class="k1">const</span> TVector2<span class="k3">&lt;</span>T&gt;<span class="k3">&amp;</span> other<span class="k2">)</span> <span class="k1">const</span>
<span class="number">  67</span>  <span class="k2">{</span>
<span class="number">  68</span>    TVector2<span class="k3">&lt;</span>T&gt; Vector<span class="k2">(</span>this-&gt;x <span class="k3">+</span> other.x, this-&gt;y <span class="k3">+</span> other.y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>    <span class="k1">return</span> Vector<span class="k2">;</span>
<span class="number">  70</span>  <span class="k2">}</span>
<span class="number">  71</span>
<span class="number">  72</span>  TVector2<span class="k3">&lt;</span>T&gt; operator-<span class="k2">(</span><span class="k1">const</span> TVector2<span class="k3">&lt;</span>T&gt;<span class="k3">&amp;</span> other<span class="k2">)</span> <span class="k1">const</span>
<span class="number">  73</span>  <span class="k2">{</span>
<span class="number">  74</span>    TVector2<span class="k3">&lt;</span>T&gt; Vector<span class="k2">(</span>this-&gt;x <span class="k3">-</span> other.x, this-&gt;y <span class="k3">-</span> other.y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>    <span class="k1">return</span> Vector<span class="k2">;</span>
<span class="number">  76</span>  <span class="k2">}</span>
<span class="number">  77</span>
<span class="number">  78</span>  T x<span class="k2">;</span>
<span class="number">  79</span>  T y<span class="k2">;</span>
<span class="number">  80</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  81</span>
<span class="number">  82</span>
<span class="number">  83</span><span class="k1">typedef</span> TVector2<span class="k3">&lt;</span>float&gt; FVector2<span class="k2">;</span>
<span class="number">  84</span>
<span class="number">  85</span>
<span class="number">  86</span><span class="k1">class</span> FBouncer
<span class="number">  87</span><span class="k2">{</span>
<span class="number">  88</span>public:
<span class="number">  89</span>  FBouncer<span class="k2">(</span><span class="k1">const</span> FVector2<span class="k3">&amp;</span> Size, <span class="k1">const</span> FVector2<span class="k3">&amp;</span> StartingPosition<span class="k2">)</span>
<span class="number">  90</span>    <span class="k2">:</span> _size<span class="k2">(</span>Size <span class="k3">*</span> <span class="n">0</span>.<span class="n">5f</span><span class="k2">)</span>
<span class="number">  91</span>    , _position<span class="k2">(</span>StartingPosition<span class="k2">)</span>
<span class="number">  92</span>    , _bitmap<span class="k2">(</span>nullptr<span class="k2">)</span>
<span class="number">  93</span>    , _bIsControlled<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span>
<span class="number">  94</span>  <span class="k2">{</span> <span class="k2">}</span>
<span class="number">  95</span>
<span class="number">  96</span>  ~FBouncer<span class="k2">(</span><span class="k2">)</span>
<span class="number">  97</span>  <span class="k2">{</span>
<span class="number">  98</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>_bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>    _bitmap <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 100</span>  <span class="k2">}</span>
<span class="number"> 101</span>
<span class="number"> 102</span>  FVector2 GetSize<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> _size <span class="k3">*</span> <span class="n">2</span>.<span class="n">0f</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 103</span>  FVector2 GetPosition<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> _position<span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 104</span>  FVector2 GetDirection<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> _direction<span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 105</span>  <span class="k1">bool</span> GetControlled<span class="k2">(</span><span class="k2">)</span> <span class="k1">const</span> <span class="k2">{</span> <span class="k1">return</span> _bIsControlled<span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 106</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> GetBitmap<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> _bitmap<span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 107</span>
<span class="number"> 108</span>  <span class="k1">void</span> SetPosition<span class="k2">(</span><span class="k1">const</span> FVector2<span class="k3">&amp;</span> InPosition<span class="k2">)</span>
<span class="number"> 109</span>  <span class="k2">{</span>
<span class="number"> 110</span>    _position <span class="k3">=</span> InPosition<span class="k2">;</span>
<span class="number"> 111</span>  <span class="k2">}</span>
<span class="number"> 112</span>
<span class="number"> 113</span>  <span class="k1">void</span> SetDirection<span class="k2">(</span><span class="k1">const</span> FVector2<span class="k3">&amp;</span> InDirection<span class="k2">)</span>
<span class="number"> 114</span>  <span class="k2">{</span>
<span class="number"> 115</span>    _direction.x <span class="k3">=</span> InDirection.x<span class="k2">;</span>
<span class="number"> 116</span>    _direction.y <span class="k3">=</span> InDirection.y<span class="k2">;</span>
<span class="number"> 117</span>  <span class="k2">}</span>
<span class="number"> 118</span>
<span class="number"> 119</span>  <span class="k1">void</span> SetControlled<span class="k2">(</span><span class="k1">bool</span> bIsControlled<span class="k2">)</span>
<span class="number"> 120</span>  <span class="k2">{</span>
<span class="number"> 121</span>    <span class="k1">if</span> <span class="k2">(</span>_bIsControlled <span class="k3">!</span><span class="k3">=</span> bIsControlled<span class="k2">)</span>
<span class="number"> 122</span>    <span class="k2">{</span>
<span class="number"> 123</span>      _bIsControlled <span class="k3">=</span> bIsControlled<span class="k2">;</span>
<span class="number"> 124</span>    <span class="k2">}</span>
<span class="number"> 125</span>  <span class="k2">}</span>
<span class="number"> 126</span>
<span class="number"> 127</span>  <span class="k1">void</span> Move<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 128</span>  <span class="k2">{</span>
<span class="number"> 129</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>_bIsControlled<span class="k2">)</span>
<span class="number"> 130</span>    <span class="k2">{</span>
<span class="number"> 131</span>      _position.x <span class="k3">+</span><span class="k3">=</span> _direction.x<span class="k2">;</span>
<span class="number"> 132</span>      _position.y <span class="k3">+</span><span class="k3">=</span> _direction.y<span class="k2">;</span>
<span class="number"> 133</span>
<span class="number"> 134</span>      <span class="c">// Check whether we need to bounce off the walls.</span>
<span class="number"> 135</span>      <span class="k1">if</span> <span class="k2">(</span>_position.x <span class="k3">&lt;</span> _top_left_bounds.x<span class="k2">)</span>
<span class="number"> 136</span>      <span class="k2">{</span>
<span class="number"> 137</span>        _direction.x <span class="k3">=</span> <span class="k3">-</span>_direction.x<span class="k2">;</span>
<span class="number"> 138</span>        _position.x <span class="k3">+</span><span class="k3">=</span> _top_left_bounds.x <span class="k3">-</span> _position.x<span class="k2">;</span>
<span class="number"> 139</span>      <span class="k2">}</span>
<span class="number"> 140</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>_position.x <span class="k3">&gt;</span> _bottom_right_bounds.x<span class="k2">)</span>
<span class="number"> 141</span>      <span class="k2">{</span>
<span class="number"> 142</span>        _direction.x <span class="k3">=</span> <span class="k3">-</span>_direction.x<span class="k2">;</span>
<span class="number"> 143</span>        _position.x <span class="k3">+</span><span class="k3">=</span> _bottom_right_bounds.x <span class="k3">-</span> _position.x<span class="k2">;</span>
<span class="number"> 144</span>      <span class="k2">}</span>
<span class="number"> 145</span>
<span class="number"> 146</span>      <span class="k1">if</span> <span class="k2">(</span>_position.y <span class="k3">&lt;</span> _top_left_bounds.y<span class="k2">)</span>
<span class="number"> 147</span>      <span class="k2">{</span>
<span class="number"> 148</span>        _direction.y <span class="k3">=</span> <span class="k3">-</span>_direction.y<span class="k2">;</span>
<span class="number"> 149</span>        _position.y <span class="k3">+</span><span class="k3">=</span> _top_left_bounds.y <span class="k3">-</span> _position.y<span class="k2">;</span>
<span class="number"> 150</span>      <span class="k2">}</span>
<span class="number"> 151</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>_position.y <span class="k3">&gt;</span> _bottom_right_bounds.y<span class="k2">)</span>
<span class="number"> 152</span>      <span class="k2">{</span>
<span class="number"> 153</span>        _direction.y <span class="k3">=</span> <span class="k3">-</span>_direction.y<span class="k2">;</span>
<span class="number"> 154</span>        _position.y <span class="k3">+</span><span class="k3">=</span> _bottom_right_bounds.y <span class="k3">-</span> _position.y<span class="k2">;</span>
<span class="number"> 155</span>      <span class="k2">}</span>
<span class="number"> 156</span>    <span class="k2">}</span>
<span class="number"> 157</span>  <span class="k2">}</span>
<span class="number"> 158</span>
<span class="number"> 159</span>  <span class="k1">int</span> Init<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> CurrentTargetBitmap, <span class="k1">const</span> FVector2<span class="k3">&amp;</span> TopLeftBounds, <span class="k1">const</span> FVector2<span class="k3">&amp;</span> BottomRightBounds<span class="k2">)</span>
<span class="number"> 160</span>  <span class="k2">{</span>
<span class="number"> 161</span>    _bitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>_size.x <span class="k3">*</span> <span class="n">2</span>.<span class="n">0f</span>, _size.y <span class="k3">*</span> <span class="n">2</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>    <span class="k1">if</span> <span class="k2">(</span>_bitmap <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 163</span>    <span class="k2">{</span>
<span class="number"> 164</span>      std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"FBouncer is unable to create ALLEGRO_BITMAP."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 165</span>      <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 166</span>    <span class="k2">}</span>
<span class="number"> 167</span>
<span class="number"> 168</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>_bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>    <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 170</span>    <a href="http://www.allegro.cc/manual/al_draw_pixel"><span class="a">al_draw_pixel</span></a><span class="k2">(</span><span class="n">3</span>.<span class="n">0f</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span>, <span class="n">3</span>.<span class="n">0f</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 171</span>    <a href="http://www.allegro.cc/manual/al_draw_pixel"><span class="a">al_draw_pixel</span></a><span class="k2">(</span><span class="n">3</span>.<span class="n">0f</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span>, <span class="n">4</span>.<span class="n">0f</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 172</span>    <a href="http://www.allegro.cc/manual/al_draw_pixel"><span class="a">al_draw_pixel</span></a><span class="k2">(</span><span class="n">28</span>.<span class="n">0f</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span>, <span class="n">3</span>.<span class="n">0f</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 173</span>    <a href="http://www.allegro.cc/manual/al_draw_pixel"><span class="a">al_draw_pixel</span></a><span class="k2">(</span><span class="n">28</span>.<span class="n">0f</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span>, <span class="n">4</span>.<span class="n">0f</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5f</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 174</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>CurrentTargetBitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>
<span class="number"> 176</span>    <span class="c">// Adjusting the bounds instead of calculating x/y offsets from the center</span>
<span class="number"> 177</span>    <span class="c">// simplifies the math.</span>
<span class="number"> 178</span>    _top_left_bounds <span class="k3">=</span> TopLeftBounds <span class="k3">+</span> _size<span class="k2">;</span>
<span class="number"> 179</span>    _bottom_right_bounds <span class="k3">=</span> BottomRightBounds <span class="k3">-</span> _size<span class="k2">;</span>
<span class="number"> 180</span>
<span class="number"> 181</span>    <span class="k1">return</span> <span class="n">0</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">void</span> Draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 185</span>  <span class="k2">{</span>
<span class="number"> 186</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>_bitmap, _position.x <span class="k3">-</span> _size.x, _position.y <span class="k3">-</span> _size.y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>  <span class="k2">}</span>
<span class="number"> 188</span>
<span class="number"> 189</span>protected:
<span class="number"> 190</span>  <span class="c">/* Size is actually 1/2 the size requested, since object origin is the center, not upper-left corner. */</span>
<span class="number"> 191</span>  FVector2 _size<span class="k2">;</span>
<span class="number"> 192</span>  FVector2 _top_left_bounds<span class="k2">;</span>
<span class="number"> 193</span>  FVector2 _bottom_right_bounds<span class="k2">;</span>
<span class="number"> 194</span>  FVector2 _position<span class="k2">;</span>
<span class="number"> 195</span>  FVector2 _direction<span class="k2">;</span>
<span class="number"> 196</span>  <span class="k1">bool</span> _bIsControlled<span class="k2">;</span>
<span class="number"> 197</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> _bitmap<span class="k2">;</span>
<span class="number"> 198</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 199</span>
<span class="number"> 200</span>
<span class="number"> 201</span><span class="c">/** Returns &lt; 0 on Allegro init errors, &gt; 0 on gameplay errors, or 0 on success. */</span>
<span class="number"> 202</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span>
<span class="number"> 203</span><span class="k2">{</span>
<span class="number"> 204</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> display <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 205</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 206</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> timer <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 207</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> event_queue <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 208</span>
<span class="number"> 209</span>  <span class="k1">int</span> init_error <span class="k3">=</span> AllegroInit<span class="k2">(</span>display, <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, timer, event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 210</span>  <span class="k1">if</span> <span class="k2">(</span>init_error <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 211</span>  <span class="k2">{</span>
<span class="number"> 212</span>    AllegroDeinit<span class="k2">(</span>display, <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, timer, event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 213</span>    <span class="k1">return</span> init_error<span class="k2">;</span>
<span class="number"> 214</span>  <span class="k2">}</span>
<span class="number"> 215</span>
<span class="number"> 216</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 217</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 218</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span>
<span class="number"> 220</span>  <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</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="k2">)</span><span class="k2">;</span>
<span class="number"> 221</span>  <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span>
<span class="number"> 223</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 224</span>
<span class="number"> 225</span>  FBouncer<span class="k3">*</span> bouncer <span class="k3">=</span> <span class="k1">new</span> FBouncer<span class="k2">(</span>FVector2<span class="k2">(</span><span class="n">32</span>.<span class="n">0f</span>, <span class="n">32</span>.<span class="n">0f</span><span class="k2">)</span>, FVector2<span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">/</span> <span class="n">2</span>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 226</span>  <span class="k1">if</span> <span class="k2">(</span>bouncer <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 227</span>  <span class="k2">{</span>
<span class="number"> 228</span>    AllegroDeinit<span class="k2">(</span>display, <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, timer, event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to create Bouncer. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 230</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 231</span>  <span class="k2">}</span>
<span class="number"> 232</span>  bouncer-&gt;SetDirection<span class="k2">(</span>FVector2<span class="k2">(</span><span class="k3">-</span><span class="n">4</span>.<span class="n">0</span>, <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>  bouncer-&gt;Init<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span>, FVector2<span class="k2">(</span><span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, FVector2<span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 234</span>
<span class="number"> 235</span>  std::string mouse_pos_msg<span class="k2">(</span><span class="s">""</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 236</span>
<span class="number"> 237</span>  <span class="c">// HACK! Eww, eww, eww.</span>
<span class="number"> 238</span>  <span class="k1">bool</span> b_mouse_in_window <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 239</span>  <span class="k1">bool</span> b_needs_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 240</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 241</span>  <span class="k2">{</span>
<span class="number"> 242</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number"> 243</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 244</span>
<span class="number"> 245</span>    <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 246</span>    <span class="k2">{</span>
<span class="number"> 247</span>      b_needs_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 248</span>
<span class="number"> 249</span>      <span class="c">// Game logic goes here...</span>
<span class="number"> 250</span>      bouncer-&gt;Move<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 251</span>    <span class="k2">}</span>
<span class="number"> 252</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number"> 253</span>    <span class="k2">{</span>
<span class="number"> 254</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 255</span>    <span class="k2">}</span>
<span class="number"> 256</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES<span class="k2">)</span>
<span class="number"> 257</span>    <span class="k2">{</span>
<span class="number"> 258</span>      <span class="k1">if</span> <span class="k2">(</span>b_mouse_in_window <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>bouncer-&gt;GetControlled<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 259</span>      <span class="k2">{</span>
<span class="number"> 260</span>        bouncer-&gt;SetControlled<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 261</span>      <span class="k2">}</span>
<span class="number"> 262</span>      <span class="k1">if</span> <span class="k2">(</span>bouncer-&gt;GetControlled<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 263</span>      <span class="k2">{</span>
<span class="number"> 264</span>        FVector2 <a href="http://www.allegro.cc/manual/mouse_pos"><span class="a">mouse_pos</span></a><span class="k2">(</span>event.mouse.x, event.mouse.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 265</span>        bouncer-&gt;SetPosition<span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_pos"><span class="a">mouse_pos</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 266</span>        std::stringstream ss<span class="k2">(</span><span class="s">"Pos: "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 267</span>        ss <span class="k3">&lt;</span><span class="k3">&lt;</span> event.mouse.x <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">","</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> event.mouse.y<span class="k2">;</span>
<span class="number"> 268</span>        mouse_pos_msg <span class="k3">=</span> ss.str<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 269</span>      <span class="k2">}</span>
<span class="number"> 270</span>    <span class="k2">}</span>
<span class="number"> 271</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY<span class="k2">)</span>
<span class="number"> 272</span>    <span class="k2">{</span>
<span class="number"> 273</span>      b_mouse_in_window <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 274</span>      bouncer-&gt;SetControlled<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 275</span>      mouse_pos_msg <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 276</span>    <span class="k2">}</span>
<span class="number"> 277</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_LEAVE_DISPLAY<span class="k2">)</span>
<span class="number"> 278</span>    <span class="k2">{</span>
<span class="number"> 279</span>      b_mouse_in_window <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 280</span>      bouncer-&gt;SetControlled<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 281</span>      mouse_pos_msg <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 282</span>    <span class="k2">}</span>
<span class="number"> 283</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span>
<span class="number"> 284</span>    <span class="k2">{</span>
<span class="number"> 285</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 286</span>    <span class="k2">}</span>
<span class="number"> 287</span>
<span class="number"> 288</span>    <span class="k1">if</span> <span class="k2">(</span>b_needs_redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 289</span>    <span class="k2">{</span>
<span class="number"> 290</span>      <span class="c">// Redraw logic goes in here</span>
<span class="number"> 291</span>
<span class="number"> 292</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</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="k2">)</span><span class="k2">;</span>
<span class="number"> 293</span>
<span class="number"> 294</span>      <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="n">400</span>, <span class="n">300</span>, ALLEGRO_ALIGN_CENTER, <span class="s">"Welcome to Allegro 5!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 295</span>      <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="n">400</span>, <span class="n">300</span> <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_font_line_height"><span class="a">al_get_font_line_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span>, ALLEGRO_ALIGN_CENTER, mouse_pos_msg.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 296</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> i <span class="k3">&lt;</span> argc<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 297</span>      <span class="k2">{</span>
<span class="number"> 298</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"argv["</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> i <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"] = "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> argv<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 299</span>        <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="n">400</span>, <span class="n">300</span> <span class="k3">+</span> i <span class="k3">*</span> <a href="http://www.allegro.cc/manual/al_get_font_line_height"><span class="a">al_get_font_line_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span>, ALLEGRO_ALIGN_CENTER, argv<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 300</span>      <span class="k2">}</span>
<span class="number"> 301</span>
<span class="number"> 302</span>      bouncer-&gt;Draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 303</span>
<span class="number"> 304</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 305</span>
<span class="number"> 306</span>      b_needs_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 307</span>    <span class="k2">}</span>
<span class="number"> 308</span>  <span class="k2">}</span>
<span class="number"> 309</span>
<span class="number"> 310</span>  <span class="k1">delete</span> bouncer<span class="k2">;</span>
<span class="number"> 311</span>  bouncer <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number"> 312</span>
<span class="number"> 313</span>  AllegroDeinit<span class="k2">(</span>display, <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, timer, event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 314</span>
<span class="number"> 315</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 316</span><span class="k2">}</span>
<span class="number"> 317</span>
<span class="number"> 318</span>
<span class="number"> 319</span><span class="k1">int</span> AllegroInit<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span><span class="k3">&amp;</span> display, <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span><span class="k3">&amp;</span> timer, <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span><span class="k3">&amp;</span> queue<span class="k2">)</span>
<span class="number"> 320</span><span class="k2">{</span>
<span class="number"> 321</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 322</span>  <span class="k2">{</span>
<span class="number"> 323</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to initialize Allegro 5. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 324</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 325</span>  <span class="k2">}</span>
<span class="number"> 326</span>
<span class="number"> 327</span>  <span class="c">// Call all al_init_*_addon() before other functions.</span>
<span class="number"> 328</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 329</span>
<span class="number"> 330</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 331</span>  <span class="k2">{</span>
<span class="number"> 332</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to install the mouse. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 333</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 334</span>  <span class="k2">}</span>
<span class="number"> 335</span>
<span class="number"> 336</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 337</span>  <span class="k1">if</span> <span class="k2">(</span>display <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 338</span>  <span class="k2">{</span>
<span class="number"> 339</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to create ALLEGRO_DISPLAY. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 340</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">3</span><span class="k2">;</span>
<span class="number"> 341</span>  <span class="k2">}</span>
<span class="number"> 342</span>
<span class="number"> 343</span>  <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> al_create_builtin_font<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 344</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 345</span>  <span class="k2">{</span>
<span class="number"> 346</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to create ALLEGRO_FONT. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 347</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">4</span><span class="k2">;</span>
<span class="number"> 348</span>  <span class="k2">}</span>
<span class="number"> 349</span>
<span class="number"> 350</span>  timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> FPS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 351</span>  <span class="k1">if</span> <span class="k2">(</span>timer <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 352</span>  <span class="k2">{</span>
<span class="number"> 353</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to create ALLEGRO_TIMER. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 354</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">5</span><span class="k2">;</span>
<span class="number"> 355</span>  <span class="k2">}</span>
<span class="number"> 356</span>
<span class="number"> 357</span>  queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 358</span>  <span class="k1">if</span> <span class="k2">(</span>queue <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 359</span>  <span class="k2">{</span>
<span class="number"> 360</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unable to create ALLEGRO_EVENT_QUEUE. Shutting down."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 361</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">6</span><span class="k2">;</span>
<span class="number"> 362</span>  <span class="k2">}</span>
<span class="number"> 363</span>
<span class="number"> 364</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 365</span><span class="k2">}</span>
<span class="number"> 366</span>
<span class="number"> 367</span><span class="k1">void</span> AllegroDeinit<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span><span class="k3">&amp;</span> display, <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span><span class="k3">&amp;</span> timer, <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span><span class="k3">&amp;</span> queue<span class="k2">)</span>
<span class="number"> 368</span><span class="k2">{</span>
<span class="number"> 369</span>  <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 370</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 371</span>  <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 372</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 373</span>
<span class="number"> 374</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_is_mouse_installed"><span class="a">al_is_mouse_installed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 375</span>  <span class="k2">{</span>
<span class="number"> 376</span>    <a href="http://www.allegro.cc/manual/al_uninstall_mouse"><span class="a">al_uninstall_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 377</span>  <span class="k2">}</span>
<span class="number"> 378</span><span class="k2">}</span>
</div></div><p>

I just wish that I could get rid of that nasty <span class="source-code">b_mouse_in_window</span> check within the loop. Like just check the mouse position before I enter `while (1) { ... }` and set the <span class="source-code">bouncer-&gt;SetControlled<span class="k2">(</span><span class="k2">)</span></span> value there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Fri, 14 Jul 2017 22:43:20 +0000</pubDate>
	</item>
</rss>
