<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>allegro gui</title>
		<link>http://www.allegro.cc/forums/view/590091</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 22 Feb 2007 09:01:00 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can anyone tell me if this is even near right?</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="k1">int</span> button::logic<span class="k2">(</span><span class="k1">int</span> msg<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">if</span><span class="k2">(</span>is_mouse_over<span class="k2">)</span></td></tr><tr><td class="number">4</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">switch</span><span class="k2">(</span>msg<span class="k2">)</span></td></tr><tr><td class="number">6</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">7</td><td>      <span class="k1">case</span> MSG_LPRESS:</td></tr><tr><td class="number">8</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</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="k3">&amp;</span><span class="k3">&amp;</span> mouse_status <span class="k3">!</span><span class="k3">=</span> NOT_ON_FOCUS<span class="k2">)</span></td></tr><tr><td class="number">11</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>          mouse_status <span class="k3">=</span> MOUSE_STATUS_DOWN<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>          draw_frame <span class="k3">=</span> DRAW_FRAME_DOWN<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>          play_sound <span class="k3">=</span> PLAY_SOUND_DOWN<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><span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    </td></tr><tr><td class="number">18</td><td>      <span class="k1">case</span> MSG_LRELEASE:</td></tr><tr><td class="number">19</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>        <span class="k1">if</span><span class="k2">(</span><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="k3">&amp;</span><span class="k3">&amp;</span> mouse_status <span class="k3">=</span><span class="k3">=</span> MOUSE_STATUS_DOWN<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>          mouse_status <span class="k3">=</span> MOUSE_STATUS_UP<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>          draw_frame <span class="k3">=</span> DRAW_FRAME_ON<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>          play_sound <span class="k3">=</span> PLAY_SOUND_ON<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>      </td></tr><tr><td class="number">26</td><td>          <span class="k1">return</span> TRUE<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">28</td><td>      <span class="k2">}</span><span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">30</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">31</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Edit:</p><p>I&#39;m guessing I&#39;ll also need to throw MSG_IDLE in there, somewhere.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Fri, 16 Feb 2007 01:33:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, for the most part. You don&#39;t need to check mouse_b in MSG_LRELEASE, because you wouldn&#39;t have gotten the message otherwise.</p><p>Also, make sure you get <b>both</b> a MSG_LPRESS and a MSG_LRELEASE. Otherwise, I can hold down the mouse button over nothing, drag to over the button, and release the mouse button, and the button would feel it had been pressed.</p><p>[append]<br />I am too tired. I see that you already do that <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Fri, 16 Feb 2007 01:57:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How about 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="k1">int</span> button::logic<span class="k2">(</span><span class="k1">int</span> msg<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">switch</span><span class="k2">(</span>msg<span class="k2">)</span></td></tr><tr><td class="number">4</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">if</span><span class="k2">(</span>is_mouse_over<span class="k2">)</span></td></tr><tr><td class="number">6</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">7</td><td>      <span class="k1">case</span> MSG_LPRESS:</td></tr><tr><td class="number">8</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">9</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="k3">&amp;</span><span class="k3">&amp;</span> mouse_status <span class="k3">!</span><span class="k3">=</span> NOT_ON_FOCUS<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>          mouse_status <span class="k3">=</span> MOUSE_STATUS_DOWN<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>          draw_frame <span class="k3">=</span> DRAW_FRAME_DOWN<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>          play_sound <span class="k3">=</span> PLAY_SOUND_DOWN<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>      <span class="k2">}</span><span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    </td></tr><tr><td class="number">17</td><td>      <span class="k1">case</span> MSG_LRELEASE:</td></tr><tr><td class="number">18</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">19</td><td>        <span class="k1">if</span><span class="k2">(</span>mouse_status <span class="k3">=</span><span class="k3">=</span> NOT_ON_FOCUS<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>          mouse_status <span class="k3">=</span> MOUSE_STATUS_UP<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>          draw_frame <span class="k3">=</span> DRAW_FRAME_ON<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>          play_sound <span class="k3">=</span> PLAY_SOUND_ON<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">25</td><td>                </td></tr><tr><td class="number">26</td><td>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>mouse_status <span class="k3">=</span><span class="k3">=</span> MOUSE_STATUS_DOWN<span class="k2">)</span></td></tr><tr><td class="number">27</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">28</td><td>          mouse_status <span class="k3">=</span> MOUSE_STATUS_UP<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>          draw_frame <span class="k3">=</span> DRAW_FRAME_ON<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>          play_sound <span class="k3">=</span> PLAY_SOUND_ON<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>    </td></tr><tr><td class="number">32</td><td>          <span class="k1">return</span> TRUE<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">34</td><td>      <span class="k2">}</span><span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    <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">case</span> MSG_IDLE:</td></tr><tr><td class="number">38</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">39</td><td>      mouse_status <span class="k3">=</span> NOT_ON_FOCUS<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>      draw_frame <span class="k3">=</span> DRAW_FRAME_OFF<span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">42</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">43</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

And what did you mean by &quot;Also, make sure you get <b>both</b> a MSG_LPRESS and a MSG_LRELEASE&quot;?..  I still don&#39;t understand how I&#39;m suppose to use this function, like this (exit-&gt;logic(MSG_LPRESS))?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Fri, 16 Feb 2007 02:16:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
How about this:
</p></div></div><p>Good, do the same for the MSG_LPRESS... and remove that crazy, invalid if statement.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I still don&#39;t understand how I&#39;m suppose to use this function, like this (exit-&gt;logic(MSG_LPRESS))?
</p></div></div><p>Err, you pass it to an Allegro dialog in the <tt>proc</tt> field.<br /><span class="source-code"><a href="http://www.allegro.cc/manual/DIALOG" target="_blank"><span class="a">DIALOG</span></a></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Fri, 16 Feb 2007 02:37:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Proc field eh.  And which crazy invalid if statement?  <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Fri, 16 Feb 2007 08:12:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
and remove that crazy, invalid if statement.
</p></div></div><p>If you mean the one I think you mean, its not invalid. It is crazy though <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> just move it outside the switch...</p><p>You can mix statements in with a switch iirc. its used with loop unrolling lots.</p><p>edit, maybe I&#39;m wrong, since <a href="http://en.wikipedia.org/wiki/Duff&#39;s_device">Duff&#39;s Device</a> seems to start after the first label.. Meh.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 16 Feb 2007 11:19:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The if(is_mouse_over) you mean?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Sat, 17 Feb 2007 02:48:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes. Besides, you won&#39;t get a MSG_LPRESS if the mouse is over a different control.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Sat, 17 Feb 2007 02:53:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If I move it outside the switch how can I draw the button graphics when the user isn&#39;t touching it?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Sat, 17 Feb 2007 04:52:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think you should remove the if statement entirely. Why would you get a MSG_LPRESS if the mouse wasn&#39;t over the object?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Sat, 17 Feb 2007 06:21:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well I just don&#39;t understand how it knows.  So more need of the &quot;mouse_status&quot; stuff?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Sat, 17 Feb 2007 06:52:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro only calls your update function with MSG_LPRESS when the current control receives a click.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Sat, 17 Feb 2007 07:24:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes but how does it know what the user is clicking on, is there some kinda bounds checking already made?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Sat, 17 Feb 2007 09:56:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, the Allegro GUI automatically handles that. It wouldn&#39;t be very useful if it didn&#39;t lessen your work load, would it? <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Sat, 17 Feb 2007 22:21:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s sweet <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />  so then it SHOULD look something 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="k1">int</span> button::logic<span class="k2">(</span><span class="k1">int</span> msg<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">switch</span><span class="k2">(</span>msg<span class="k2">)</span></td></tr><tr><td class="number">4</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">case</span> MSG_LPRESS:</td></tr><tr><td class="number">6</td><td>      draw_frame <span class="k3">=</span> DRAW_FRAME_DOWN<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>      play_sound <span class="k3">=</span> PLAY_SOUND_DOWN<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    </td></tr><tr><td class="number">10</td><td>    <span class="k1">case</span> MSG_LRELEASE:</td></tr><tr><td class="number">11</td><td>      draw_frame <span class="k3">=</span> DRAW_FRAME_ON<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      play_sound <span class="k3">=</span> PLAY_SOUND_ON<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    </td></tr><tr><td class="number">15</td><td>    <span class="k1">case</span> MSG_IDLE:</td></tr><tr><td class="number">16</td><td>      draw_frame <span class="k3">=</span> DRAW_FRAME_OFF<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Why does this look too simple/good to be true?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Sun, 18 Feb 2007 00:15:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not quite. MSG_IDLE will happen regardless of the mouse button&#39;s state. So that means that for 1 frame your button will have the DRAW_FRAME_DOWN image, then it will switch back to DRAW_FRAME_OFF. You need to check that !(mouse_b &amp; 1) in the MSG_IDLE handler <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Sun, 18 Feb 2007 00:20:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>coding doesn&#39;t have to be complicated, most great programs are written elegantly such that it is coherent and easy to understand even if you didn&#39;t code it.  One step further would be to register a callback in your button so that when you click you set your variables.  This makes it more flexible and not hard coded to your sound player.  Then you can reuse your button for anything you need.  It&#39;s really very simple as:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k2">(</span><span class="k3">*</span><span class="k2">(</span>button_callback<span class="k2">)</span><span class="k2">)</span><span class="k2">(</span>params<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Sun, 18 Feb 2007 00:23:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s not so bad.  Will I have to make different messange handlers for different objects or can I just have one..  To rule them all.</p><p>Not really sure what you mean about the callback thing..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Sun, 18 Feb 2007 00:26:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> Foo <span class="k2">{</span></td></tr><tr><td class="number">2</td><td>public:</td></tr><tr><td class="number">3</td><td>  <span class="k1">typedef</span> <span class="k2">(</span><span class="k3">*</span>ButtonCallback<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td>  ButtonCallback callback<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>  <span class="k1">void</span> foo<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> callback<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">8</td><td><span class="k2">}</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="k1">bool</span> shit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="k1">void</span> awShit<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">13</td><td><span class="k2">{</span></td></tr><tr><td class="number">14</td><td>  shit <span class="k3">=</span> <span class="k1">true</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>&#160;</td></tr><tr><td class="number">17</td><td>main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">18</td><td><span class="k2">{</span></td></tr><tr><td class="number">19</td><td>  Foo f<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  f.callback <span class="k3">=</span> awShit<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  f.foo<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>  shit <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span></td></tr><tr><td class="number">23</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Sun, 18 Feb 2007 05:56:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> hmm..  Could someone whip up a quick example of how this should look using the dialog handler?  I get the impression I&#39;m probably not going to need as many classes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Sun, 18 Feb 2007 07:58:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Another way to handle callbacks with C++ is to have a virtual method inside your main button widget that is called on button press.  This can be overloaded in a new button class which is derived from the main button widget.  Then inside the overloaded method you do what you need to do.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
bool <span class="cuss"><span><span class="cuss"><span>shit</span></span></span></span>;
</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> that&#39;s funny man.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Sun, 18 Feb 2007 08:24:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>[url <a href="http://www.google.com/search?hl=en&amp;q=allegro+gui+tutorial&amp;btnG=Google+Search][/url">http://www.google.com/search?hl=en&amp;q=allegro+gui+tutorial&amp;btnG=Google+Search][/url</a>]</p><p>Specifically:</p><p>[url <a href="http://agdn.netfirms.com/main/gui/][/url">http://agdn.netfirms.com/main/gui/][/url</a>]
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (nonnus29)</author>
		<pubDate>Sun, 18 Feb 2007 20:51:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was actually reading that awhile ago.  So I&#39;ll need something like this?</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// Copied from a random example</span>

<a href="http://www.allegro.cc/manual/DIALOG" target="_blank"><span class="a">DIALOG</span></a> the_dialog<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>
<span class="k2">{</span>
   <span class="c">/* (dialog proc)     (x)   (y)   (w)   (h) (fg)(bg) (key) (flags)     (d1) (d2)    (dp)                   (dp2) (dp3) */</span>
   <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_clear_proc" target="_blank"><span class="a">d_clear_proc</span></a>,        <span class="n">0</span>,   <span class="n">0</span>,    <span class="n">0</span>,    <span class="n">0</span>,   <span class="n">0</span>,  <span class="n">0</span>,    <span class="n">0</span>,      <span class="n">0</span>,       <span class="n">0</span>,   <span class="n">0</span>,    NULL,                   NULL, NULL  <span class="k2">}</span>,
   <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_text_proc" target="_blank"><span class="a">d_text_proc</span></a>,         <span class="n">0</span>,  <span class="n">10</span>,    <span class="n">0</span>,    <span class="n">0</span>,   <span class="n">0</span>,  <span class="n">0</span>,    <span class="n">0</span>,      <span class="n">0</span>,       <span class="n">0</span>,   <span class="n">0</span>,    <span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span><span class="s">"enter number"</span>,  NULL, NULL  <span class="k2">}</span>,
   <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_edit_proc" target="_blank"><span class="a">d_edit_proc</span></a>,       <span class="n">160</span>,  <span class="n">10</span>,  <span class="n">160</span>,    <span class="n">8</span>,   <span class="n">0</span>,  <span class="n">0</span>,    <span class="n">0</span>, D_EXIT,      <span class="n">64</span>,   <span class="n">0</span>,    <span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span>the_string,      NULL, NULL  <span class="k2">}</span>,
   <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_button_proc" target="_blank"><span class="a">d_button_proc</span></a>,     <span class="n">328</span>,   <span class="n">6</span>,  <span class="n">160</span>,   <span class="n">16</span>,   <span class="n">0</span>,  <span class="n">0</span>,    <span class="n">0</span>, D_EXIT,       <span class="n">0</span>,   <span class="n">0</span>,    <span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span><span class="s">"OK"</span>,            NULL, NULL  <span class="k2">}</span>,
   <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_yield_proc" target="_blank"><span class="a">d_yield_proc</span></a>,        <span class="n">0</span>,   <span class="n">0</span>,    <span class="n">0</span>,    <span class="n">0</span>,   <span class="n">0</span>,  <span class="n">0</span>,    <span class="n">0</span>,      <span class="n">0</span>,       <span class="n">0</span>,   <span class="n">0</span>,    NULL,                   NULL, NULL  <span class="k2">}</span>,
   <span class="k2">{</span> NULL,                <span class="n">0</span>,   <span class="n">0</span>,    <span class="n">0</span>,    <span class="n">0</span>,   <span class="n">0</span>,  <span class="n">0</span>,    <span class="n">0</span>,      <span class="n">0</span>,       <span class="n">0</span>,   <span class="n">0</span>,    NULL,                   NULL, NULL  <span class="k2">}</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

I still don&#39;t understand how this works exactly, and how it will work with the graphics I want to use..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Mon, 19 Feb 2007 04:28:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;ll have to make your own widgets if you want to use custom graphics.  This is a lot of work.  If you&#39;re looking to take the next step and use custom graphics I would recommend the <a href="http://agup.sourceforge.net/">agup library</a>.  While we&#39;re at I might as well throw in a plug for the unfinished <a href="http://wipproject.zapto.org/cgi-bin/get?p=XUI">XUI</a> gui scripting project.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Mon, 19 Feb 2007 09:55:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I already have my own widget classes made.  I just wanted to find a cleaner way to handle them without using someone elses library.  Is there any way to handle my classes with the Allegro gui or do I HAVE to scrap it and use their ugly buttons?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Mon, 19 Feb 2007 10:03:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, there are many ways.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Mon, 19 Feb 2007 10:05:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Is there any way to handle my classes with the Allegro gui or do I HAVE to scrap it and use their ugly buttons?
</p></div></div><p>Of course you can do it with Allegro. What&#39;s the problem?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Mon, 19 Feb 2007 10:05:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The problem is I don&#39;t know how.  <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />  Well I have a vague idea..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Mon, 19 Feb 2007 10:07:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well try, fail, and post your code when you get stuck! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Mon, 19 Feb 2007 10:08:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The trick is to look at the extra parameter the callback gets.  In that parameter pass a pointer to your class object.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Mon, 19 Feb 2007 10:09:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I did post code, and when am I not stuck? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>How is this to work with the switch(msg)?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Mon, 19 Feb 2007 10:12:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You skipped the first two steps:
</p><div class="quote_container"><div class="title">Ryan said:</div><div class="quote"><p>

Well try, fail, ...
</p></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Mon, 19 Feb 2007 10:34:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Very well <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> thanks for the help everyone and you&#39;ll be sure to hear back from me very shortly <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Tue, 20 Feb 2007 02:50:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
or do I HAVE to scrap it and use their ugly buttons?
</p></div></div><p>
Well, Allegro has some ugly buttons, but you can always use d_icon_proc() which is a button with three bitmaps, one for each state of the button (up, down, inactive). If that is still ugly, you suck with graphics.</p><p>I once made a class that created these three buttons on the fly. It took a string, a pattern bitmap and a font as parameters. Very simple. Every button looked a bit different. The pattern was seamless and the tiling started at a random point on each button.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Tue, 20 Feb 2007 04:34:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>MASkinG and NAS both use themed buttons using 9 bitmaps per button like so:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k3">+</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">+</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">+</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">+</span>
<span class="k3">|</span>   <span class="k3">|</span>             <span class="k3">|</span>   <span class="k3">|</span>
<span class="k3">+</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">+</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">+</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">+</span>
<span class="k3">|</span>   <span class="k3">|</span>I<span class="s">'M A BUTTON!|   |</span>
<span class="s">+---+-------------+---+</span>
<span class="s">|   |             |   |</span>
<span class="s">+---+-------------+---+</span>
</pre></div></div><p>
You have four corners, a top, bottom, left, right, and middle image.  Text goes in the middle, and you can stretch or tile the other bitmaps to make the button any size.  This is a much better way than a single bitmap.  You can write your own Allegro Button widget by overloading the MSG draw portion of the allegro button with your own widget proc.  It&#39;s not hard to do and the other messages are left alone so you won&#39;t have to recode that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Tue, 20 Feb 2007 06:16:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
You can write your own Allegro Button widget by overloading the MSG draw portion of the allegro button with your own widget proc. It&#39;s not hard to do and the other messages are left alone so you won&#39;t have to recode that.
</p></div></div><p>

Yes! This is what I want to do <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> but how? (example?)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Tue, 20 Feb 2007 08:01:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> my_button_proc<span class="k2">(</span><span class="k1">int</span> msg, <a href="http://www.allegro.cc/manual/DIALOG" target="_blank"><span class="a">DIALOG</span></a> <span class="k3">*</span>d, <span class="k1">int</span> c<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">if</span><span class="k2">(</span>msg <span class="k3">=</span><span class="k3">=</span> MSG_DRAW<span class="k2">)</span>
   <span class="k2">{</span>
      <span class="c">// Draw the button</span>
   <span class="k2">}</span>
   <span class="k1">else</span>
      <span class="k1">return</span> <a href="http://www.allegro.cc/manual/d_button_proc" target="_blank"><span class="a">d_button_proc</span></a><span class="k2">(</span>msg, d, c<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Tue, 20 Feb 2007 08:23:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I sorta understand that..  But I don&#39;t understand how it&#39;s suppose to work with the switch statement, or how I&#39;m suppose to use the function in a game state, like is_clicked().
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Tue, 20 Feb 2007 08:30:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What switch statement?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Tue, 20 Feb 2007 08:33:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It was on the previous page:</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="k1">int</span> button::logic<span class="k2">(</span><span class="k1">int</span> msg<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">switch</span><span class="k2">(</span>msg<span class="k2">)</span></td></tr><tr><td class="number">4</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">case</span> MSG_LPRESS:</td></tr><tr><td class="number">6</td><td>      draw_frame <span class="k3">=</span> DRAW_FRAME_DOWN<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>      play_sound <span class="k3">=</span> PLAY_SOUND_DOWN<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    </td></tr><tr><td class="number">10</td><td>    <span class="k1">case</span> MSG_LRELEASE:</td></tr><tr><td class="number">11</td><td>      draw_frame <span class="k3">=</span> DRAW_FRAME_ON<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      play_sound <span class="k3">=</span> PLAY_SOUND_ON<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    </td></tr><tr><td class="number">15</td><td>    <span class="k1">case</span> MSG_IDLE:</td></tr><tr><td class="number">16</td><td>      draw_frame <span class="k3">=</span> DRAW_FRAME_OFF<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Something like that anyway.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Tue, 20 Feb 2007 08:33:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Uhm, you don&#39;t need that to overload MSG_DRAW because you aren&#39;t checking for all those messages.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Tue, 20 Feb 2007 08:36:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I wish I could understand.  What&#39;s the point of using this MSG_DRAW when I could use this instead?  I need to draw different frames of the button if it&#39;s down, up, or whatever.</p><p>Er wait a sec, how about this?</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">case</span> MSG_DRAW
<span class="k2">{</span>
  <span class="k1">if</span><span class="k2">(</span>MSG_LPRESS<span class="k2">)</span>
  <span class="k2">{</span>
    draw_frame <span class="k3">=</span> DRAW_FRAME_DOWN<span class="k2">;</span>
  <span class="k2">}</span>
<span class="k2">}</span><span class="k1">break</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Tue, 20 Feb 2007 09:10:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The DIALOG object has a flags field.  You can get the state of the button through the flags and draw accordingly.  Here is code from NAS that does just that:
</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="k1">if</span><span class="k2">(</span>d-&gt;flags <span class="k3">&amp;</span> D_DISABLED<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>        box <span class="k3">=</span> NAS_BUTTON_DISABLED<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>        col <span class="k3">=</span> NAS_TEXT_DISABLED<span class="k2">;</span></td></tr><tr><td class="number">5</td><td><span class="k2">}</span></td></tr><tr><td class="number">6</td><td><span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>d-&gt;flags <span class="k3">&amp;</span> D_SELECTED<span class="k2">)</span></td></tr><tr><td class="number">7</td><td><span class="k2">{</span></td></tr><tr><td class="number">8</td><td>  box <span class="k3">=</span> NAS_BUTTON_PRESSED<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  col <span class="k3">=</span> NAS_TEXT_PRESSED<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><span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>d-&gt;flags <span class="k3">&amp;</span> D_GOTMOUSE<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>  box <span class="k3">=</span> NAS_BUTTON_HIGHLIGHTED<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        col <span class="k3">=</span> NAS_TEXT_HIGHLIGHTED<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="k1">else</span> <span class="k1">if</span><span class="k2">(</span>d-&gt;flags <span class="k3">&amp;</span> D_GOTFOCUS<span class="k2">)</span></td></tr><tr><td class="number">17</td><td><span class="k2">{</span></td></tr><tr><td class="number">18</td><td>  box <span class="k3">=</span> NAS_BUTTON_FOCUSED<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  col <span class="k3">=</span> NAS_TEXT_FOCUSED<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">else</span></td></tr><tr><td class="number">22</td><td><span class="k2">{</span></td></tr><tr><td class="number">23</td><td>  box <span class="k3">=</span> NAS_BUTTON_UNSELECTED<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>  col <span class="k3">=</span> NAS_TEXT_UNSELECTED<span class="k2">;</span></td></tr><tr><td class="number">25</td><td><span class="k2">}</span>  </td></tr><tr><td class="number">26</td><td>drawskinnedrect<span class="k2">(</span>wnd, <span class="k3">&amp;</span>buttons.rect<span class="k2">[</span>box<span class="k2">]</span>, d-&gt;x, d-&gt;y, d-&gt;x <span class="k3">+</span> d-&gt;w, d-&gt;y <span class="k3">+</span> d-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

[edit]<br />DON&#39;T mix MSG_DRAW with other messages ...<br />[/edit]
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Tue, 20 Feb 2007 09:16:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Uhm, a switch/case setup is the same as a whole bunch of nested if/else ifs. There is no reason to use a switch, case, or anything else in your case. What Steve posted <a href="http://www.allegro.cc/forums/thread/590091/651918#target">here</a> will work fine for you. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Tue, 20 Feb 2007 09:32:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm..  I&#39;ll try it out, but what is NAS_BUTTON/NAS_TEXT?..  And box and col?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Tue, 20 Feb 2007 09:34:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Those are NAS GUI defines but you can use whatever you want... they are just indexes into an array of button images so that when I pass in buttons.rect into draw_skinned_rect I get the proper image to display.  col IIRC is the color index of the text to display since each state of the button can have different text color.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Tue, 20 Feb 2007 09:38:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ohh okay, so I could just use my draw_frame instead? (my text is already on the graphics)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Tue, 20 Feb 2007 09:41:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Right-o
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Tue, 20 Feb 2007 09:45:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Awesome <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> Thanks a ton..  One last thing, what is d?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Tue, 20 Feb 2007 10:03:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">DIALOG struct said:</div><div class="quote"><p>

int (*proc)(int, DIALOG *, int); - dialog procedure<br />				      (message handler)<br />   int x, y, w, h;       - position and size of the object<br />   int fg, bg;           - foreground and background colors<br />   int key;              - ASCII keyboard shortcut<br />   int flags;            - flags about the status of the object<br />   int d1, d2;           - whatever you want to use them for<br />   void *dp, *dp2, *dp3; - pointers to more object-specific data
</p></div></div><p>

d is a pointer to this structure, you have flags... which you can use to get the state of the widget.  Positional and size values are x, y, w, h.  dpX are pointers to any kind of data you wish (can include a callback function for your button).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Tue, 20 Feb 2007 10:06:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How&#39;s this!  And will I be able to use the same function for any kinda widget, like radio buttons or text fields?</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="k1">int</span> button::is_clicked<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">if</span><span class="k2">(</span>d-&gt;flags <span class="k3">&amp;</span> D_DISABLED<span class="k2">)</span></td></tr><tr><td class="number">4</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    draw_frame <span class="k3">=</span> DRAW_FRAME_DISABLED</td></tr><tr><td class="number">6</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>d-&gt;flags <span class="k3">&amp;</span> D_SELECTED<span class="k2">)</span></td></tr><tr><td class="number">9</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>    draw_frame <span class="k3">=</span> DRAW_FRAME_DOWN<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    play_sound <span class="k3">=</span> PLAY_SOUND_DOWN<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>    <span class="k1">return</span> TRUE<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>&#160;</td></tr><tr><td class="number">16</td><td>  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>d-&gt;flags <span class="k3">&amp;</span> D_GOTMOUSE<span class="k2">)</span></td></tr><tr><td class="number">17</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">18</td><td>    draw_frame <span class="k3">=</span> DRAW_FRAME_ON<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    play_sound <span class="k3">=</span> PLAY_SOUND_ON<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>&#160;</td></tr><tr><td class="number">22</td><td>  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>d-&gt;flags <span class="k3">&amp;</span> D_GOTFOCUS<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>    <span class="c">// ??</span></td></tr><tr><td class="number">25</td><td>  <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">else</span></td></tr><tr><td class="number">28</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">29</td><td>    draw_frame <span class="k3">=</span> DRAW_FRAME_OFF<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">31</td><td>&#160;</td></tr><tr><td class="number">32</td><td>  <span class="k1">return</span> FALSE<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>  <span class="c">// what the hell is this</span></td></tr><tr><td class="number">35</td><td>  drawskinnedrect<span class="k2">(</span>wnd, <span class="k3">&amp;</span>buttons.rect<span class="k2">[</span>box<span class="k2">]</span>, d-&gt;x, d-&gt;y, d-&gt;x <span class="k3">+</span> d-&gt;w, d-&gt;y <span class="k3">+</span> d-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Wed, 21 Feb 2007 04:12:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>... is that valid code???
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Wed, 21 Feb 2007 05:57:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>/bawl..  What am I doing wrong?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Wed, 21 Feb 2007 06:00:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok what the hell is your button class?  It keeps changing but it still makes no sense.  You basically copied my code I gave you and pasted it into your is_clicked method but the code I gave you was for my GUI as a demonstration on how you should handle things.  It was not to be taken literally.  Your button has an is_clicked method but the code you have inside it has nothing to do with it being clicked.. it&#39;s more of a draw method and yet you still use play_sound inside of it which also makes no sense.  You keep hanging onto your class, we&#39;re just trying to show you how you can make pretty buttons using the Allegro built in GUI.  You can pretty much take the Allegro GUI and extend the procs to make pretty nice looking GUI elements.  NAS does pretty much that and it extends all the procs to have more functionality.  It&#39;s up to you how you want to your buttons but the thread is labeled Allegro GUI so I assumed you wanted to use the Allegro GUI in which case your class is irrelevant and your code will need to be rewritten.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Wed, 21 Feb 2007 06:51:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is just getting depressing..  All I wanted was something to handle the different states for my widgets so I wouldn&#39;t have to keep rewriting the (near) same logic in each widget class, while keeping my own graphics and not using libraries other then Allegro to do it.  I thought the Allegro GUI could do that, well it seems like it could.  My class hasn&#39;t changed yet, I just copied the code given to me and rewrote it to the way I <b>thought</b> it works, then reposted it to see if I was even on the right track.  <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>This is what I&#39;m using now:</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="k1">int</span> button::is_clicked<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>       <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>is_active<span class="k2">)</span></td></tr><tr><td class="number">4</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>      <span class="k1">return</span> FALSE<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">7</td><td>    </td></tr><tr><td class="number">8</td><td>    <span class="k1">if</span><span class="k2">(</span>is_mouse_over<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>      <span class="k1">if</span><span class="k2">(</span><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="k3">&amp;</span><span class="k3">&amp;</span> mouse_status <span class="k3">=</span><span class="k3">=</span> NOT_ON_FOCUS<span class="k2">)</span></td></tr><tr><td class="number">11</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>        mouse_status <span class="k3">=</span> MOUSE_STATUS_UP<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        draw_frame <span class="k3">=</span> DRAW_FRAME_ON<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        play_sound <span class="k3">=</span> PLAY_SOUND_ON<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>&#160;</td></tr><tr><td class="number">17</td><td>      <span class="k1">else</span> <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="k3">&amp;</span><span class="k3">&amp;</span> mouse_status <span class="k3">!</span><span class="k3">=</span> NOT_ON_FOCUS<span class="k2">)</span></td></tr><tr><td class="number">18</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">19</td><td>        mouse_status <span class="k3">=</span> MOUSE_STATUS_DOWN<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>        draw_frame <span class="k3">=</span> DRAW_FRAME_DOWN<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>        play_sound <span class="k3">=</span> PLAY_SOUND_DOWN<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">23</td><td>    </td></tr><tr><td class="number">24</td><td>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><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="k3">&amp;</span><span class="k3">&amp;</span> mouse_status <span class="k3">=</span><span class="k3">=</span> MOUSE_STATUS_DOWN<span class="k2">)</span></td></tr><tr><td class="number">25</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>        mouse_status <span class="k3">=</span> MOUSE_STATUS_UP<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>        draw_frame <span class="k3">=</span> DRAW_FRAME_ON<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>        play_sound <span class="k3">=</span> PLAY_SOUND_ON<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>      </td></tr><tr><td class="number">30</td><td>        <span class="k1">return</span> TRUE<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>    <span class="k2">}</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span><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></td></tr><tr><td class="number">35</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">36</td><td>       mouse_status <span class="k3">=</span> NOT_ON_FOCUS<span class="k2">;</span></td></tr><tr><td class="number">37</td><td>       draw_frame <span class="k3">=</span> DRAW_FRAME_OFF<span class="k2">;</span></td></tr><tr><td class="number">38</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">39</td><td>&#160;</td></tr><tr><td class="number">40</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">41</td><td>    <span class="k2">{</span>  </td></tr><tr><td class="number">42</td><td>      draw_frame <span class="k3">=</span> DRAW_FRAME_OFF<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>    </td></tr><tr><td class="number">45</td><td>    <span class="k1">return</span> FALSE<span class="k2">;</span>  </td></tr><tr><td class="number">46</td><td>  <span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Wed, 21 Feb 2007 06:59:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok you can use your button class but it&#39;s not that flexible, I mean you can&#39;t use your button for anything else than playing a sound because that&#39;s the variable it&#39;s setting.  You couldn&#39;t, for example, use your button to change the color of a box or something.  You could also use the Allegro GUI which has the functionality you need but it&#39;s a bit ugly but I showed you ways to make it less ugly.  Unfortunately to use the Allegro GUI you would have to rewrite your code.  That said I would stick with what you have at the moment, you just need to break out your methods a bit and possibly use callbacks or overloaded methods to drive your play_sound variable.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Wed, 21 Feb 2007 07:24:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s all I want it to do, just draw and play a sound, or return TRUE if I want to use the function outside the class for other things.  Before, everyone kept saying that I needed some kinda event handler for all my widgets and since then I&#39;ve been trying to do that without much luck.</p><p>I suppose I could just try to write things like WIDGET_FOCUSED, WIDGET_PRESSED, etc myself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Wed, 21 Feb 2007 07:33:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A GUI is a pretty advanced and complicated project.  Maybe make your user interface a bit simpler this time around and improve with your next game?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Wed, 21 Feb 2007 07:36:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Because I&#39;d just rather start learning it now while I&#39;m at it since I already know how the code I&#39;m using works throughout.</p><p>And yeah it can be complicated, depending on how versatile you want it to be.  I want it to be pretty specific though, for the most part.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Wed, 21 Feb 2007 07:41:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hang on I&#39;ll whip up a simple widget and button class... I was doing so but accidentally hit the wrong keyboard button and lost my friggin post &gt;:E
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Wed, 21 Feb 2007 08:03:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> Thanks a bunch, hehe I&#39;ve done that a lot before, which is why I started just writing it in a text file instead of the actual post, then just copy and paste it over.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Wed, 21 Feb 2007 08:22:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><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">#define W_SELECTED 1</span></td></tr><tr><td class="number">2</td><td><span class="p">#define W_DISABLED 2</span></td></tr><tr><td class="number">3</td><td><span class="p">#define W_GOTMOUSE 4</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="k1">class</span> widget</td></tr><tr><td class="number">6</td><td><span class="k2">{</span></td></tr><tr><td class="number">7</td><td>    public:</td></tr><tr><td class="number">8</td><td>        <span class="k1">int</span> x, y, w, h<span class="k2">;</span>                              <span class="c">// dimensions</span></td></tr><tr><td class="number">9</td><td>        <span class="k1">unsigned</span> <span class="k1">int</span> flags<span class="k2">;</span>                          <span class="c">// flags</span></td></tr><tr><td class="number">10</td><td>        <span class="k1">void</span> widget<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> w, <span class="k1">int</span> h<span class="k2">)</span><span class="k2">;</span>     <span class="c">// default constructor</span></td></tr><tr><td class="number">11</td><td>  <span class="k1">virtual</span> <span class="k1">void</span> ~widget<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                      <span class="c">// virtual destructor</span></td></tr><tr><td class="number">12</td><td>        <span class="k1">bool</span> mouse_over<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                           <span class="c">// true if mouse_over</span></td></tr><tr><td class="number">13</td><td>        <span class="k1">void</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_289.html" target="_blank">enable</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                               <span class="c">// enables a widget</span></td></tr><tr><td class="number">14</td><td>        <span class="k1">void</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_133.html" target="_blank">disable</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                              <span class="c">// disables a widget</span></td></tr><tr><td class="number">15</td><td>        <span class="k1">virtual</span> <span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                         <span class="c">// method to do some initialization</span></td></tr><tr><td class="number">16</td><td>        <span class="k1">virtual</span> <span class="k1">void</span> draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b<span class="k2">)</span><span class="k2">;</span>                <span class="c">// method to draw</span></td></tr><tr><td class="number">17</td><td>        <span class="k1">virtual</span> <span class="k1">void</span> idle<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                         <span class="c">// method to do stuff during idle</span></td></tr><tr><td class="number">18</td><td>        virutal <span class="k1">bool</span> onKeyPressed<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>          <span class="c">// method to react to a key pressed (returns true if accepted key press)</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">void</span> widget::widget<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> w, <span class="k1">int</span> h<span class="k2">)</span></td></tr><tr><td class="number">22</td><td><span class="k2">{</span></td></tr><tr><td class="number">23</td><td>    this-&gt;x <span class="k3">=</span> x<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>    thix-&gt;y <span class="k3">=</span> y<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    this-&gt;w <span class="k3">=</span> w<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>    this-&gt;h <span class="k3">=</span> h<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>    this-&gt;flags <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td><span class="k2">}</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td><span class="k1">bool</span> widget::mouse_over<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">32</td><td><span class="k2">{</span></td></tr><tr><td class="number">33</td><td>    <span class="k1">return</span> flags <span class="k3">&amp;</span> W_GOTMOUSE<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>&#160;</td></tr><tr><td class="number">36</td><td><span class="k1">void</span> widget::idle<span class="k2">(</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">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a> <span class="k3">&gt;</span><span class="k3">=</span> 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> x <span class="k3">+</span> w <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">&gt;</span><span class="k3">=</span> y <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> y <span class="k3">+</span> h<span class="k2">)</span></td></tr><tr><td class="number">39</td><td>        flags <span class="k3">|</span><span class="k3">=</span> W_GOTMOUSE<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">41</td><td>        flags <span class="k3">&amp;</span><span class="k3">=</span> ~W_GOTMOUSE<span class="k2">;</span></td></tr><tr><td class="number">42</td><td><span class="k2">}</span></td></tr><tr><td class="number">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td><span class="k1">void</span> widget::enable<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>    flags <span class="k3">&amp;</span><span class="k3">=</span> ~W_DISABLED<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>&#160;</td></tr><tr><td class="number">49</td><td><span class="k1">void</span> widget::disable<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">50</td><td><span class="k2">{</span></td></tr><tr><td class="number">51</td><td>    flags <span class="k3">|</span><span class="k3">=</span> W_DISABLED<span class="k2">;</span></td></tr><tr><td class="number">52</td><td><span class="k2">}</span></td></tr><tr><td class="number">53</td><td>&#160;</td></tr><tr><td class="number">54</td><td><span class="k1">class</span> button <span class="k2">:</span> <span class="k1">public</span> widget</td></tr><tr><td class="number">55</td><td><span class="k2">{</span></td></tr><tr><td class="number">56</td><td>    public:</td></tr><tr><td class="number">57</td><td>        <span class="k1">void</span> button<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> w, <span class="k1">int</span> h<span class="k2">)</span><span class="k2">;</span>  <span class="c">// default constructor</span></td></tr><tr><td class="number">58</td><td>        <span class="k1">bool</span> clicked<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                           <span class="c">// clicked method</span></td></tr><tr><td class="number">59</td><td>        <span class="k1">virtual</span> <span class="k1">void</span> ~button<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                   <span class="c">// virtual destructor</span></td></tr><tr><td class="number">60</td><td>        <span class="k1">virtual</span> <span class="k1">void</span> onButtonClickedCallback<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>   <span class="c">// clicked callback</span></td></tr><tr><td class="number">61</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>&#160;</td></tr><tr><td class="number">63</td><td><span class="k1">void</span> button::button<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> w, <span class="k1">int</span> h<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>    widget::widget<span class="k2">(</span>x, y, w, h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td><span class="k2">}</span></td></tr><tr><td class="number">67</td><td>&#160;</td></tr><tr><td class="number">68</td><td><span class="k1">void</span> button::idle<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">69</td><td><span class="k2">{</span></td></tr><tr><td class="number">70</td><td>    <span class="c">// Do some idle stuff</span></td></tr><tr><td class="number">71</td><td><span class="k2">}</span></td></tr><tr><td class="number">72</td><td>&#160;</td></tr><tr><td class="number">73</td><td><span class="k1">void</span> button::draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b<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="k1">int</span> draw_frame<span class="k2">;</span></td></tr><tr><td class="number">76</td><td>    <span class="k1">if</span><span class="k2">(</span>flags <span class="k3">&amp;</span> W_DISABLED<span class="k2">)</span></td></tr><tr><td class="number">77</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">78</td><td>       draw_frame <span class="k3">=</span> DRAW_FRAME_DISABLED<span class="k2">;</span></td></tr><tr><td class="number">79</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">80</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">81</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">82</td><td>        <span class="k1">if</span><span class="k2">(</span>widget::mouse_over<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">83</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">84</td><td>           <span class="k1">if</span><span class="k2">(</span><span class="k3">!</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">85</td><td>              draw_frame <span class="k3">=</span> DRAW_FRAME_HIGHLIGHTED<span class="k2">;</span></td></tr><tr><td class="number">86</td><td>           <span class="k1">else</span> <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">87</td><td>              draw_frame <span class="k3">=</span> DRAW_FRAME_PRESSED<span class="k2">;</span></td></tr><tr><td class="number">88</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">89</td><td>        <span class="k1">else</span></td></tr><tr><td class="number">90</td><td>            draw_frame <span class="k3">=</span> DRAW_FRAME_OFF<span class="k2">;</span></td></tr><tr><td class="number">91</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">92</td><td>    <span class="c">// draw the button using draw_frame</span></td></tr><tr><td class="number">93</td><td><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="k1">bool</span> button::clicked<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">96</td><td><span class="k2">{</span></td></tr><tr><td class="number">97</td><td>    <span class="k1">if</span><span class="k2">(</span>flags <span class="k3">&amp;</span> D_DISABLED<span class="k2">)</span></td></tr><tr><td class="number">98</td><td>        <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">99</td><td>    <span class="k1">if</span><span class="k2">(</span>widget::mouse_over<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">100</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">101</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">102</td><td>       <span class="k2">{</span></td></tr><tr><td class="number">103</td><td>          onButtonClickedCallback<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>          <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td>       <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>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td><span class="k2">}</span></td></tr><tr><td class="number">109</td><td>&#160;</td></tr><tr><td class="number">110</td><td><span class="k1">class</span> mySoundButton <span class="k2">:</span> button</td></tr><tr><td class="number">111</td><td><span class="k2">{</span></td></tr><tr><td class="number">112</td><td>    private:</td></tr><tr><td class="number">113</td><td>        SOUND <span class="k3">*</span>my_sound<span class="k2">;</span></td></tr><tr><td class="number">114</td><td>    public:</td></tr><tr><td class="number">115</td><td>        <span class="k1">void</span> mySoundButton<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> w, <span class="k1">int</span> h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">116</td><td>        <span class="k1">virtual</span> <span class="k1">void</span> ~mySoundButton<span class="k2">(</span><span class="k2">)</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>&#160;</td></tr><tr><td class="number">119</td><td><span class="k1">void</span> mySoundButton::mySoundButton<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">120</td><td><span class="k2">{</span></td></tr><tr><td class="number">121</td><td>    widget::widget<span class="k2">(</span>x, y, w, h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td>    my_sound <span class="k3">=</span> Load_Sound<span class="k2">(</span><span class="s">"my_sound.wav"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">123</td><td><span class="k2">}</span></td></tr><tr><td class="number">124</td><td>&#160;</td></tr><tr><td class="number">125</td><td><span class="k1">void</span> mySoundButton::~mySoundButton<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">126</td><td><span class="k2">{</span></td></tr><tr><td class="number">127</td><td>    <span class="k1">if</span><span class="k2">(</span>my_sound <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">128</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">129</td><td>        Unload_Sound<span class="k2">(</span>my_sound<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">130</td><td>        my_sound <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">131</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">132</td><td><span class="k2">}</span></td></tr><tr><td class="number">133</td><td>&#160;</td></tr><tr><td class="number">134</td><td><span class="k1">void</span> mySoundButton::onButtonClickedCallback<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">135</td><td><span class="k2">{</span></td></tr><tr><td class="number">136</td><td>    <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span>my_sound<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">137</td><td>    Play_Sound<span class="k2">(</span>my_sound<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">138</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I made three classes, one is the base widget class.  The widget class is what every other GUI object is derived from.  The next class is a base button class, all it is concerned about is doing a few methods essential to a button.  The third class is a class derived from button which overloads a few methods and utilizes the callback to play a sound when the button is pressed.  Please use this code only as a template, I have not compiled it and it probably won&#39;t work correctly but it should give you a direction.  If you notice all methods do what their names imply and nothing more.  They each do a small part.  This code is not optimized either but as I said it&#39;s just to give a general idea.</p><p>[edit]<br />Also note that this widget class doesn&#39;t use messages but instead virtual methods to do the drawing, idling, and whatnot.  You can have a message handler as part of the base widget I just did it the lazy way <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /><br />[/edit]
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Wed, 21 Feb 2007 08:41:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Looks very promising to me, going to look it over before bed (stupid work in the morning) <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>Thanks a million for all your help, and everyone elses help (again) hehe tomorrow whenever I get home I&#39;ll try to fool around with it for awhile and will certainly give a heads up if I run into any problems, but I understand this a lot more then the Allergo gui stuff. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Wed, 21 Feb 2007 08:55:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Why would you do that?  You are making confusing methods again.  set_enabled sets a variable wheras enable acts on that variable?  Why not just have a method called set_enable(bool enable) that takes true or false and enables or disables the widget there.  No need for an extra method that is seemingly pointless.</p><p>[edit]<br />aww you erased your post <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /><br />[/edit]
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Wed, 21 Feb 2007 09:06:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry hehe erased it after looking it over for a couple seconds.  Thanks again though. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Wed, 21 Feb 2007 09:12:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry I made some minor tweaks to the widget and button classes because I could <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Wed, 21 Feb 2007 09:47:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm..  The button is being displayed properly, but it doesn&#39;t seem to be doing the &quot;clicked&quot; logic.  Also, what does |= and &amp;= mean?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Thu, 22 Feb 2007 02:56:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve tried to read this thread some times, but can&#39;t figure out what you want to do. Do you want to create your own gui system? Or do you just want to have a button in your game? If the former, I guess it&#39;s a bit hard, if you still learn about &amp;= and |=. If the latter, Allegro gui should do the job. </p><p><span class="source-code">a <span class="k3">=</span> a <span class="k3">&amp;</span> b<span class="k2">;</span></span><br />is same as<br /><span class="source-code">a <span class="k3">&amp;</span><span class="k3">=</span> b<span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Thu, 22 Feb 2007 04:25:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I just wanted an event/message handler using only Allegro.  What is the difference between &amp; and &amp;&amp; anyway?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Thu, 22 Feb 2007 05:03:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&amp;&amp; is an AND comparison operator whereas &amp; is a binary AND operator.  For instance you would say if(someval == 2 &amp;&amp; someotherval &gt; 0) to only trigger the if statement only if both statements are true.  Binary operations are completely different:
</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">#define THIS  1</span></td></tr><tr><td class="number">2</td><td><span class="p">#define THAT  2</span></td></tr><tr><td class="number">3</td><td><span class="p">#define OTHER 4</span></td></tr><tr><td class="number">4</td><td><span class="k1">char</span> someval <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>someval <span class="k3">|</span><span class="k3">=</span> THIS<span class="k2">;</span>  <span class="c">// someval = 0x01  - sets bit 1</span></td></tr><tr><td class="number">6</td><td>someval <span class="k3">|</span><span class="k3">=</span> THAT<span class="k2">;</span>  <span class="c">// someval = 0x03  - sets bit 2</span></td></tr><tr><td class="number">7</td><td>someval <span class="k3">|</span><span class="k3">=</span> OTHER<span class="k2">;</span> <span class="c">// someval = 0x07  - sets bit 3</span></td></tr><tr><td class="number">8</td><td>someval <span class="k3">&amp;</span><span class="k3">=</span> ~THAT<span class="k2">;</span> <span class="c">// someval = 0x05  - unsets bit 2</span></td></tr><tr><td class="number">9</td><td>someval ^<span class="k3">=</span> THAT<span class="k2">;</span>  <span class="c">// someval = 0x07  - toggles bit 2</span></td></tr><tr><td class="number">10</td><td><span class="k1">if</span><span class="k2">(</span>someval <span class="k3">&amp;</span> THAT<span class="k2">)</span> <span class="c">// true if bit 2 is set</span></td></tr><tr><td class="number">11</td><td><span class="k2">{</span></td></tr><tr><td class="number">12</td><td>  <span class="c">// do something</span></td></tr><tr><td class="number">13</td><td><span class="k2">}</span></td></tr><tr><td class="number">14</td><td><span class="k1">if</span><span class="k2">(</span>someval <span class="k3">&amp;</span> <span class="k2">(</span>THIS <span class="k3">|</span> THAT<span class="k2">)</span><span class="k2">)</span> <span class="c">// true if bit 1 and bit 2 are set</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="c">// do something</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I&#39;m using the operations to toggle bits in the flags variable.  Which by posting this I realize a flaw in my W_* enumeration.  You need each state to be a power of two.  The changes would be:
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#define W_DISABLED   1</span>
<span class="p">#define W_GOTMOUSE   2</span>
<span class="p">#define W_SELECTED   4</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Thu, 22 Feb 2007 06:04:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Still no luck.  :/  No idea why it&#39;s not working for me, doesn&#39;t seem to like those W_&#39;s.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Thu, 22 Feb 2007 08:12:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro&#39;s defines are the same to mine, no reason it wouldn&#39;t work.  Again I never said the code would work right off the bat, it&#39;s just there as an example so you can understand how things work.  How are you using the class?  Just stating it doesn&#39;t work doesn&#39;t tell me you are doing something wrong elsewhere.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Thu, 22 Feb 2007 08:20:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I just took functions from the code you did and stuck it in my own classes, modifying them slightly.</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="k1">void</span> widget::logic<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>    <span class="k1">if</span><span class="k2">(</span>flag <span class="k3">&amp;</span>W_DISABLED<span class="k2">)</span></td></tr><tr><td class="number">4</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>      draw_frame <span class="k3">=</span> DRAW_FRAME_DISABLED</td></tr><tr><td class="number">6</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>        <span class="k1">if</span><span class="k2">(</span>flag <span class="k3">&amp;</span>W_GOTMOUSE<span class="k2">)</span></td></tr><tr><td class="number">11</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</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">13</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">14</td><td>          draw_frame <span class="k3">=</span> DRAW_FRAME_ON<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>&#160;</td></tr><tr><td class="number">17</td><td>        <span class="k1">else</span> <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">18</td><td>        <span class="k2">{</span>                  </td></tr><tr><td class="number">19</td><td>          play<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// plays a sound when widget is pressed</span></td></tr><tr><td class="number">20</td><td>          draw_frame <span class="k3">=</span> DRAW_FRAME_DOWN<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="k2">}</span></td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</td><td>      <span class="k1">else</span></td></tr><tr><td class="number">25</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>        draw_frame <span class="k3">=</span> DRAW_FRAME_OFF<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>      <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>  <span class="k2">}</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>  <span class="k1">void</span> widget::draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>dbuff<span class="k2">)</span></td></tr><tr><td class="number">32</td><td>  <span class="k2">{</span>        </td></tr><tr><td class="number">33</td><td>    <span class="k1">if</span><span class="k2">(</span>draw_frame <span class="k3">=</span><span class="k3">=</span> DRAW_FRAME_ON<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="k1">if</span><span class="k2">(</span>on_bitmap <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">36</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">37</td><td>        <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>        <a href="http://www.allegro.cc/manual/stretch_sprite" target="_blank"><span class="a">stretch_sprite</span></a><span class="k2">(</span>dbuff, on_bitmap, x_pos, y_pos, w_pos, h_pos<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>        <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">41</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">42</td><td>    </td></tr><tr><td class="number">43</td><td>    <span class="k1">if</span><span class="k2">(</span>draw_frame <span class="k3">=</span><span class="k3">=</span> DRAW_FRAME_OFF<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="k1">if</span><span class="k2">(</span>off_bitmap <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">46</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">47</td><td>        <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>        <a href="http://www.allegro.cc/manual/stretch_sprite" target="_blank"><span class="a">stretch_sprite</span></a><span class="k2">(</span>dbuff, off_bitmap, x_pos, y_pos, w_pos, h_pos<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>        <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">51</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">52</td><td>    </td></tr><tr><td class="number">53</td><td>    <span class="k1">if</span><span class="k2">(</span>draw_frame <span class="k3">=</span><span class="k3">=</span> DRAW_FRAME_DOWN<span class="k2">)</span></td></tr><tr><td class="number">54</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">55</td><td>      <span class="k1">if</span><span class="k2">(</span>down_bitmap <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">56</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">57</td><td>        <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>        <a href="http://www.allegro.cc/manual/stretch_sprite" target="_blank"><span class="a">stretch_sprite</span></a><span class="k2">(</span>dbuff, down_bitmap, x_pos, y_pos, w_pos, h_pos<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>        <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">61</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">62</td><td>&#160;</td></tr><tr><td class="number">63</td><td>    <span class="k1">if</span><span class="k2">(</span>draw_frame <span class="k3">=</span><span class="k3">=</span> DRAW_FRAME_DISABLED<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">if</span><span class="k2">(</span>disable_bitmap <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">66</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">67</td><td>        <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>        <a href="http://www.allegro.cc/manual/stretch_sprite" target="_blank"><span class="a">stretch_sprite</span></a><span class="k2">(</span>dbuff, disabled_bitmap, x_pos, y_pos, w_pos, h_pos<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">69</td><td>        <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">70</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">71</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">72</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">73</td><td>&#160;</td></tr><tr><td class="number">74</td><td><span class="c">//=================================================================</span></td></tr><tr><td class="number">75</td><td>&#160;</td></tr><tr><td class="number">76</td><td>  <span class="k1">bool</span> button::is_clicked<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">77</td><td>  <span class="k2">{</span>  </td></tr><tr><td class="number">78</td><td>    <span class="k1">if</span><span class="k2">(</span>flag <span class="k3">&amp;</span>W_DISABLED<span class="k2">)</span></td></tr><tr><td class="number">79</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">80</td><td>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">82</td><td>&#160;</td></tr><tr><td class="number">83</td><td>    <span class="k1">if</span><span class="k2">(</span>flag <span class="k3">&amp;</span>W_GOTMOUSE<span class="k2">)</span></td></tr><tr><td class="number">84</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">85</td><td>      <span class="k1">if</span><span class="k2">(</span>mouse_over<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="c">// i want this to be if(flag &amp;W_PRESSED)</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">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">89</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">90</td><td>&#160;</td></tr><tr><td class="number">91</td><td>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">92</td><td>  <span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Thu, 22 Feb 2007 08:27:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t know... you just aren&#39;t getting the picture here.  I&#39;m not sure if I can even help you.  Take a closer look at my code instead of copying and pasting and get a good grasp of the concepts first.  I give up.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Thu, 22 Feb 2007 08:34:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Will do..  I&#39;m sorry for bugging so much, going to just work with what you did until it works for me!  Thank you.  <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (julian_boolean)</author>
		<pubDate>Thu, 22 Feb 2007 09:01:00 +0000</pubDate>
	</item>
</rss>
