<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[Open Layer] Creating a GUI</title>
		<link>http://www.allegro.cc/forums/view/591458</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 21 May 2007 22:05:54 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m working with Open Layer on an RPG. So, I want to integrate a GUI into my game but I don&#39;t exactly know how to do that.</p><p>Are there libraries that I could use or do I have to code everything by myself? Is it possible to use the GUI functions of Allegro?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Balinor)</author>
		<pubDate>Sat, 19 May 2007 19:52:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was thinking the exact same thing. I want to create a simple GUI for a game im making. Just a basic menu, start button, maybe some options and a quit button. But I dont know how to do it!</p><p>So im hoping someone will reply to this thread! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Vanneto)</author>
		<pubDate>Sat, 19 May 2007 20:20:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve had the same problem, but I solved it by using something similar to collision detection in a game. If you want any type of button, you will know the size of it say 64 wide x 32 deep. You also know where you&#39;re going to display it on the screen say 100,100. You can track where the x and y is of the mouse pointer on screen (you have to install the mouse first) and you can also check for the mouse button being clicked.</p><p>So using the numbers above, the top left co-ords of the button on the screen are 100,100 and the bottom right co-ords of the button on screen are 163,131 (screen x: 100 + button width 64 - 1 [cos the button starts at 100 not 101] , screen y: 100 + button height 32 - 1 [for same reason]).</p><p>So if the mouse buttom is clicked and mouse x&gt;=100 and mouse x&lt;=163 and mouse y&gt;=100 and mouse y&lt;=131 then the button on screen has been clicked and you can use that info to do what you want. </p><p>If you want more than one button on screen at once, just keep a track of what the button co-ords are to initiate the correct function.</p><p><img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>If you want a full code example let me know <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul Rowan)</author>
		<pubDate>Sat, 19 May 2007 22:22:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A code example would be nice. Anyway sounds pretty simple. Now... But when youre thinking how to do its a diffrent story! Ill try this! Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Vanneto)</author>
		<pubDate>Sun, 20 May 2007 04:14:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m using guichan as a UI library together with OpenLayer, works fine, if you manage to setup all libraries you need. That means allegro, allegrogl, lpng (optional) and lzip (used only for lpng).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (tobing)</author>
		<pubDate>Sun, 20 May 2007 12:57:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi, as promised here is my full code listing for my GUI. It&#39;s very basic and there may be other ways to do it better, but it worked for me <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="p">#define RED makecol(255,0,0)</span></td></tr><tr><td class="number">4</td><td><span class="p">#define GREEN makecol(0,255,0)</span></td></tr><tr><td class="number">5</td><td><span class="p">#define BLUE makecol(0,0,255)</span></td></tr><tr><td class="number">6</td><td><span class="p">#define WHITE makecol(255,255,255)</span></td></tr><tr><td class="number">7</td><td><span class="p">#define BLACK makecol(0,0,0)</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td><span class="c">//number of buttons on GUI interface</span></td></tr><tr><td class="number">10</td><td><span class="p">#define BUTTONS 2</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="c">//function prototypes</span></td></tr><tr><td class="number">13</td><td><span class="k1">void</span> create_buttons<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k1">int</span> check_click<span class="k2">(</span><span class="k1">int</span> mousex,<span class="k1">int</span> mousey<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="c">//set up an array of button bitmaps - use a loop to display them</span></td></tr><tr><td class="number">17</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buttons<span class="k2">[</span>BUTTONS<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td><span class="c">//set up an array for x,y cor-ords of each button on screen</span></td></tr><tr><td class="number">20</td><td><span class="c">//can loop through them when mouse button is clicked to see</span></td></tr><tr><td class="number">21</td><td><span class="c">//which button or not is clicked</span></td></tr><tr><td class="number">22</td><td><span class="k1">int</span> but_xy<span class="k2">[</span>BUTTONS<span class="k3">*</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</td><td><span class="c">//variables to keep track of mouse info</span></td></tr><tr><td class="number">25</td><td><span class="k1">int</span> mousex,mousey,mousebut<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> </td></tr><tr><td class="number">28</td><td><span class="k2">{</span> </td></tr><tr><td class="number">29</td><td> <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>      </td></tr><tr><td class="number">30</td><td> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td> text_mode<span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td> <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td> <a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td> <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td> <a href="http://www.allegro.cc/manual/show_mouse" target="_blank"><span class="a">show_mouse</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td> </td></tr><tr><td class="number">37</td><td> <span class="k1">int</span> x,but<span class="k2">;</span></td></tr><tr><td class="number">38</td><td> </td></tr><tr><td class="number">39</td><td> create_buttons<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>&#160;</td></tr><tr><td class="number">41</td><td><span class="c">//loop to display buttons on screen at proper co-ords</span></td></tr><tr><td class="number">42</td><td>  <span class="k1">for</span><span class="k2">(</span>x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>x<span class="k3">&lt;</span>BUTTONS<span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">43</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">44</td><td>   <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buttons<span class="k2">[</span>x<span class="k2">]</span>,<a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>,<span class="n">0</span>,<span class="n">0</span>,but_xy<span class="k2">[</span>x<span class="k3">*</span><span class="n">2</span><span class="k2">]</span>,but_xy<span class="k2">[</span>x<span class="k3">*</span><span class="n">2</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span>,buttons<span class="k2">[</span>x<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>w,buttons<span class="k2">[</span>x<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td> <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">48</td><td> <span class="k2">{</span></td></tr><tr><td class="number">49</td><td>  textprintf<span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">1</span>,<span class="n">1</span>,WHITE,<span class="s">"%s"</span>,<span class="s">"Press ESC KEY to Exit"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td><span class="c">//keeping track of mouse info</span></td></tr><tr><td class="number">51</td><td>  mousex<span class="k3">=</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>  mousey<span class="k3">=</span><a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">;</span></td></tr><tr><td class="number">53</td><td>  mousebut<span class="k3">=</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_b" target="_blank"><span class="a">mouse_b</span></a><span class="k3">&amp;</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// this only checks left mouse button</span></td></tr><tr><td class="number">54</td><td>  </td></tr><tr><td class="number">55</td><td><span class="c">//if left mouse button is clicked the mouse x,y co-ords are checked against</span></td></tr><tr><td class="number">56</td><td><span class="c">//button co-ords on screen held in array</span></td></tr><tr><td class="number">57</td><td>  <span class="k1">if</span><span class="k2">(</span>mousebut<span class="k3">=</span><span class="k3">=</span><span class="n">1</span><span class="k2">)</span> </td></tr><tr><td class="number">58</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">59</td><td>   but<span class="k3">=</span>check_click<span class="k2">(</span>mousex,mousey<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>   <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>,<span class="n">1</span>,<span class="n">11</span>,<span class="n">500</span>,<span class="n">21</span>,BLACK<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td><span class="c">//the button number clicked on will be returned and can be used in the switch statement</span></td></tr><tr><td class="number">62</td><td><span class="c">//to do the required thing it is designed to do in your game</span></td></tr><tr><td class="number">63</td><td>   <span class="k1">switch</span><span class="k2">(</span>but<span class="k2">)</span></td></tr><tr><td class="number">64</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">65</td><td>    <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span></td></tr><tr><td class="number">66</td><td>       textprintf<span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">1</span>,<span class="n">11</span>,RED,<span class="s">"Result of last mouse click: %s"</span>,<span class="s">"Play Button Clicked"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">67</td><td>       <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>    <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span></td></tr><tr><td class="number">69</td><td>       textprintf<span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">1</span>,<span class="n">11</span>,BLUE,<span class="s">"Result of last mouse click: %s"</span>,<span class="s">"Quit Button Clicked"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">70</td><td>       <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">71</td><td>    default:</td></tr><tr><td class="number">72</td><td>       textprintf<span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">1</span>,<span class="n">11</span>,WHITE,<span class="s">"Result of last mouse click: %s"</span>,<span class="s">"No Button Clicked"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">73</td><td>       <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">74</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">75</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">76</td><td> <span class="k2">}</span></td></tr><tr><td class="number">77</td><td>&#160;</td></tr><tr><td class="number">78</td><td> <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>     </td></tr><tr><td class="number">80</td><td><span class="k2">}</span>     </td></tr><tr><td class="number">81</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">82</td><td>&#160;</td></tr><tr><td class="number">83</td><td>&#160;</td></tr><tr><td class="number">84</td><td><span class="c">//creating bitmaps in memory, you can load your own nice looking buttons instead</span></td></tr><tr><td class="number">85</td><td><span class="k1">void</span> create_buttons<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">86</td><td><span class="k2">{</span></td></tr><tr><td class="number">87</td><td> <span class="k1">int</span> x<span class="k2">;</span></td></tr><tr><td class="number">88</td><td> </td></tr><tr><td class="number">89</td><td><span class="c">//set up all x,y co-ords of all buttons to display on screen here</span></td></tr><tr><td class="number">90</td><td> </td></tr><tr><td class="number">91</td><td><span class="c">//x,y co-ord of button 0</span></td></tr><tr><td class="number">92</td><td> but_xy<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">=</span><span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">93</td><td> but_xy<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">=</span><span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">94</td><td>&#160;</td></tr><tr><td class="number">95</td><td><span class="c">//x,y co-ord of button 1</span></td></tr><tr><td class="number">96</td><td> but_xy<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k3">=</span><span class="n">150</span><span class="k2">;</span></td></tr><tr><td class="number">97</td><td> but_xy<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k3">=</span><span class="n">200</span><span class="k2">;</span></td></tr><tr><td class="number">98</td><td> </td></tr><tr><td class="number">99</td><td><span class="c">//creating bitmaps in memory here, you can load them instead</span></td></tr><tr><td class="number">100</td><td> buttons<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">=</span><a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">64</span>,<span class="n">32</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td> <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>buttons<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>,RED<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">102</td><td> buttons<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">=</span><a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">40</span>,<span class="n">40</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td> <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>buttons<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>,BLUE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>  textprintf<span class="k2">(</span>buttons<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">14</span>,<span class="n">12</span>,WHITE,<span class="s">"%s"</span>,<span class="s">"PLAY"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td> textprintf<span class="k2">(</span>buttons<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">5</span>,<span class="n">17</span>,WHITE,<span class="s">"%s"</span>,<span class="s">"QUIT"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td><span class="k2">}</span></td></tr><tr><td class="number">107</td><td>&#160;</td></tr><tr><td class="number">108</td><td><span class="c">//checking if mouse pointer is over a button on screen when clicked</span></td></tr><tr><td class="number">109</td><td><span class="k1">int</span> check_click<span class="k2">(</span><span class="k1">int</span> mousex,<span class="k1">int</span> mousey<span class="k2">)</span></td></tr><tr><td class="number">110</td><td><span class="k2">{</span></td></tr><tr><td class="number">111</td><td> <span class="k1">int</span> x<span class="k2">;</span></td></tr><tr><td class="number">112</td><td> <span class="k1">int</span> x1,y1,x2,y2<span class="k2">;</span></td></tr><tr><td class="number">113</td><td> <span class="k1">int</span> b<span class="k3">=</span><span class="k3">-</span><span class="n">1</span><span class="k2">;</span> <span class="c">// this is used to record which button number is clicked - if none returns -1</span></td></tr><tr><td class="number">114</td><td> </td></tr><tr><td class="number">115</td><td><span class="c">//looping through all buttons on screen and checking if mouse pointer is inside button</span></td></tr><tr><td class="number">116</td><td> <span class="k1">for</span><span class="k2">(</span>x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>x<span class="k3">&lt;</span>BUTTONS<span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">117</td><td> <span class="k2">{</span></td></tr><tr><td class="number">118</td><td>  x1<span class="k3">=</span>but_xy<span class="k2">[</span>x<span class="k3">*</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span> <span class="c">//top left corner of button on screen - x</span></td></tr><tr><td class="number">119</td><td>  y1<span class="k3">=</span>but_xy<span class="k2">[</span>x<span class="k3">*</span><span class="n">2</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span> <span class="c">// top left corner of button on screen - y</span></td></tr><tr><td class="number">120</td><td>  x2<span class="k3">=</span>x1<span class="k3">+</span>buttons<span class="k2">[</span>x<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>w-1<span class="k2">;</span> <span class="c">// bottom right corner of button on screen - x</span></td></tr><tr><td class="number">121</td><td>  y2<span class="k3">=</span>y1<span class="k3">+</span>buttons<span class="k2">[</span>x<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>h-1<span class="k2">;</span> <span class="c">// bottom right corner of button on screen - y</span></td></tr><tr><td class="number">122</td><td>&#160;</td></tr><tr><td class="number">123</td><td><span class="c">// if mouse pointer is inside button co-ords the button number is stored in b  </span></td></tr><tr><td class="number">124</td><td>  <span class="k1">if</span><span class="k2">(</span>mousex&gt;<span class="k3">=</span>x1 <span class="k3">&amp;</span><span class="k3">&amp;</span> mousex<span class="k3">&lt;</span><span class="k3">=</span>x2 <span class="k3">&amp;</span><span class="k3">&amp;</span> mousey&gt;<span class="k3">=</span>y1 <span class="k3">&amp;</span><span class="k3">&amp;</span> mousey<span class="k3">&lt;</span><span class="k3">=</span>y2<span class="k2">)</span> b<span class="k3">=</span>x<span class="k2">;</span></td></tr><tr><td class="number">125</td><td> <span class="k2">}</span></td></tr><tr><td class="number">126</td><td><span class="c">//either returns a button number or -1 for no button clicked</span></td></tr><tr><td class="number">127</td><td> <span class="k1">return</span> <span class="k2">(</span>b<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">128</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Let me know if this helps or I&#39;d be interested if you find an easier/better way cos I&#39;m quite new to all this and still learning <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul Rowan)</author>
		<pubDate>Sun, 20 May 2007 16:51:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for your answers. Thanks for your code, Paul Rowan. That&#39;s the way I had done it before as I wrote a game with another library than Open Layer / Allegro. I think I will do it like that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Balinor)</author>
		<pubDate>Mon, 21 May 2007 19:10:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here is a class I made for the purpouse. Makes the process easier
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#ifndef _BUTTON_H_</span></td></tr><tr><td class="number">2</td><td><span class="p">#define _BUTTON_H_</span></td></tr><tr><td class="number">3</td><td><span class="c">/**</span></td></tr><tr><td class="number">4</td><td><span class="c">* Class for drawing button on the screen and using actions from it</span></td></tr><tr><td class="number">5</td><td><span class="c">**/</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k1">class</span> Button <span class="k2">{</span></td></tr><tr><td class="number">8</td><td>    public:</td></tr><tr><td class="number">9</td><td>        Button<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">10</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>            button_image <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">13</td><td>        ~Button<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">14</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>            button_image <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>        <span class="k1">void</span> set_bitmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bitmap_b<span class="k2">)</span></td></tr><tr><td class="number">19</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>            button_image <span class="k3">=</span> bitmap_b<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">22</td><td>        <span class="k1">void</span> set_coords<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span></td></tr><tr><td class="number">23</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">24</td><td>            button_x <span class="k3">=</span> x<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>            button_y <span class="k3">=</span> y<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">27</td><td>        <span class="k1">void</span> draw_button<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>to<span class="k2">)</span> <span class="k1">const</span></td></tr><tr><td class="number">28</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">29</td><td>            <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>button_image, to, <span class="n">0</span>, <span class="n">0</span>, button_x, button_y, button_image-&gt;w,</td></tr><tr><td class="number">30</td><td>            button_image-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td>        <span class="k1">int</span> button_clicked<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">34</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">35</td><td>            <span class="c">// Mouse must be clicked</span></td></tr><tr><td class="number">36</td><td>            <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_b" target="_blank"><span class="a">mouse_b</span></a> <span class="k3">&amp;</span> <span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">37</td><td>            <span class="k2">{</span></td></tr><tr><td class="number">38</td><td>                <span class="k1">int</span> real_x, real_y<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>                real_x <span class="k3">=</span> button_x <span class="k3">+</span> button_image-&gt;w <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>                real_y <span class="k3">=</span> button_y <span class="k3">+</span> button_image-&gt;h <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td>                <span class="k1">if</span><span class="k2">(</span>mouse_x&gt;<span class="k3">=</span>button_x <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k3">&lt;</span><span class="k3">=</span>real_x <span class="k3">&amp;</span><span class="k3">&amp;</span> mouse_y&gt;<span class="k3">=</span>button_y</td></tr><tr><td class="number">43</td><td>                <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a> <span class="k3">&lt;</span><span class="k3">=</span>real_y<span class="k2">)</span></td></tr><tr><td class="number">44</td><td>                <span class="k2">{</span></td></tr><tr><td class="number">45</td><td>                    <span class="c">// CLICKED</span></td></tr><tr><td class="number">46</td><td>                    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>                <span class="k2">}</span></td></tr><tr><td class="number">48</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">49</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">50</td><td>&#160;</td></tr><tr><td class="number">51</td><td>    private:</td></tr><tr><td class="number">52</td><td>        <span class="k1">int</span> button_x,button_y<span class="k2">;</span></td></tr><tr><td class="number">53</td><td>        <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>button_image<span class="k2">;</span></td></tr><tr><td class="number">54</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>&#160;</td></tr><tr><td class="number">56</td><td>&#160;</td></tr><tr><td class="number">57</td><td><span class="p">#endif</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Vanneto)</author>
		<pubDate>Mon, 21 May 2007 19:26:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Vanneto:<br />Just a small comment: Normally a button fires only if somebody presses and releases the mouse inside the boundaries of the button. Links work the same way.</p><p>Besides working like the user expects it, it also solves the problem that the click might be registered on the next page as well, if the page changes before the button was released.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Mon, 21 May 2007 21:32:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And how do I know if it was released? I will change the class appropriately. </p><p>Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Vanneto)</author>
		<pubDate>Mon, 21 May 2007 21:49:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, that&#39;s the point where it gets more complicated.<br />Let&#39;s say you have a function like this:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">// you will want to place these vars inside a class</span></td></tr><tr><td class="number">2</td><td>GUIItem lastItem <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">3</td><td><span class="k1">int</span> lastMouseButtonState<span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="k1">void</span> handleGUI<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">int</span> x<span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">int</span> y<span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">int</span> buttons <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_b" target="_blank"><span class="a">mouse_b</span></a><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    GUIItem item <span class="k3">=</span> findGUIItem<span class="k2">(</span>x, y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>    <span class="k1">if</span> <span class="k2">(</span>item <span class="k3">=</span><span class="k3">=</span> null<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>        <span class="c">// mouse is not inside an item.</span></td></tr><tr><td class="number">13</td><td>        <span class="k1">if</span> <span class="k2">(</span>lastItem <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">14</td><td>            lastItem <span class="k3">-</span><span class="k3">&gt;</span>handleMouseOut<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">16</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>    <span class="k1">if</span> <span class="k2">(</span>buttons <span class="k3">!</span><span class="k3">=</span> lastMouseButtonState<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">18</td><td>         <span class="k1">if</span> <span class="k2">(</span>lastItem <span class="k3">!</span><span class="k3">=</span> NULL <span class="k3">&amp;</span><span class="k3">&amp;</span> lastItem <span class="k3">!</span><span class="k3">=</span> item<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">19</td><td>             lastItem-&gt;handleMouseButton<span class="k2">(</span>buttons<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">21</td><td>         <span class="k1">if</span> <span class="k2">(</span>item <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>             item-&gt;handleMouseButton<span class="k2">(</span>buttons<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>         </td></tr><tr><td class="number">25</td><td>         lastMouseButtonState <span class="k3">=</span> buttons<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">27</td><td>    lastItem <span class="k3">=</span> item<span class="k2">;</span></td></tr><tr><td class="number">28</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

If you want even more flexibility, you could add the concept of a grabbed item, receiving all related events until it declares itself as no longer interested.</p><p>This way your button can grab the events as soon as the mouse button goes down inside his boundaries. It should release the grab as soon as the mouse button is no longer pressed.</p><p>The code above was written on the fly and will probably contain errors. I hope the example will be good enough to visualize the idea, though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (spellcaster)</author>
		<pubDate>Mon, 21 May 2007 22:05:54 +0000</pubDate>
	</item>
</rss>
