<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>bug in &#39;d_menu_proc&#39;, area not getting completely  filled</title>
		<link>http://www.allegro.cc/forums/view/591107</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 21 Apr 2007 13:02:53 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>According to the manual for d_menu_proc</p><p>&quot;the color is taken from the gui_*_color variables, and the width and height are calculated automatically (the w and h fields from the DIALOG are only used as a minimum size.)&quot;</p><p>When the minimum size is set to be larger than the area that the menu bar will take up, it doesn&#39;t fill the area completely, it only fills the area that the menu words cover. Where the outline for the menu outlines the complete area.</p><p>This picture demonstrates the problem:</p><p><span class="remote-thumbnail"><span class="json">{"name":"591981","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/8\/d8695c54cdcc5aabcc43ffcdc3ab6a68.png","w":646,"h":165,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/8\/d8695c54cdcc5aabcc43ffcdc3ab6a68"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/d/8/d8695c54cdcc5aabcc43ffcdc3ab6a68-240.jpg" alt="591981" width="240" height="61" /></span></p><p>The black area to the right should be filled, but its not, the below code demonstrates the problem. (it is also attached)</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><a href="http://www.allegro.cc/manual/MENU" target="_blank"><span class="a">MENU</span></a> file_menu<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</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="c">/* { "Text\tsc",      (callback),  (Submenu), (flags),  (dp)  )*/</span></td></tr><tr><td class="number">6</td><td>   <span class="k2">{</span> <span class="s">"Pause"</span>,               NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">7</td><td>   <span class="k2">{</span> <span class="s">"New Game"</span>,            NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">8</td><td>   <span class="k2">{</span> <span class="s">"End Game"</span>,            NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">9</td><td>   <span class="k2">{</span> <span class="s">"Quit"</span>,                NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">10</td><td>   <span class="k2">{</span> NULL,                  NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</span></td></tr><tr><td class="number">11</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><a href="http://www.allegro.cc/manual/MENU" target="_blank"><span class="a">MENU</span></a> edit_menu<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</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="c">/* { "Text\tsc",      (callback),  (Submenu), (flags),  (dp)  )*/</span></td></tr><tr><td class="number">16</td><td>   <span class="k2">{</span> <span class="s">"Game Options"</span>,        NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">17</td><td>   <span class="k2">{</span> <span class="s">"Control Options"</span>,     NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">18</td><td>   <span class="k2">{</span> NULL,                  NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</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><a href="http://www.allegro.cc/manual/MENU" target="_blank"><span class="a">MENU</span></a> help_menu<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span></td></tr><tr><td class="number">22</td><td><span class="k2">{</span></td></tr><tr><td class="number">23</td><td><span class="c">/* { "Text\tsc",      (callback),  (Submenu), (flags),  (dp)  )*/</span></td></tr><tr><td class="number">24</td><td>   <span class="k2">{</span> <span class="s">"About"</span>,               NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">25</td><td>   <span class="k2">{</span> NULL,                  NULL,       NULL,       <span class="n">0</span>,  NULL  <span class="k2">}</span></td></tr><tr><td class="number">26</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td><a href="http://www.allegro.cc/manual/MENU" target="_blank"><span class="a">MENU</span></a> game_menu<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</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="c">/* { "Text\tsc",      (callback),  (Submenu), (flags),  (dp)  )*/</span></td></tr><tr><td class="number">31</td><td>   <span class="k2">{</span> <span class="s">"Game"</span>,                NULL,   file_menu,      <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">32</td><td>   <span class="k2">{</span> <span class="s">"Options"</span>,             NULL,   edit_menu,      <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">33</td><td>   <span class="k2">{</span> <span class="s">"&amp;Help"</span>,               NULL,   help_menu,      <span class="n">0</span>,  NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">34</td><td>   <span class="k2">{</span> NULL,                  NULL,        NULL,      <span class="n">0</span>,  NULL  <span class="k2">}</span></td></tr><tr><td class="number">35</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td><a href="http://www.allegro.cc/manual/DIALOG" target="_blank"><span class="a">DIALOG</span></a> game_dialog<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span></td></tr><tr><td class="number">38</td><td><span class="k2">{</span></td></tr><tr><td class="number">39</td><td>   <span class="c">/* (dialog proc)     (x)   (y)   (w)   (h) (fg)(bg) (key) (flags)     (d1) (d2)         (dp)     (dp2)  (dp3) */</span></td></tr><tr><td class="number">40</td><td>   <span class="k2">{</span> <a href="http://www.allegro.cc/manual/d_menu_proc" target="_blank"><span class="a">d_menu_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>,   game_menu,     NULL,   NULL  <span class="k2">}</span>,</td></tr><tr><td class="number">41</td><td>   <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></td></tr><tr><td class="number">42</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><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>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">48</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">49</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Unable to start allegro. :("</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>    <span class="k1">return</span> <span class="n">1</span><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>&#160;</td></tr><tr><td class="number">53</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">54</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">55</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Unable to install keyboard driver. :("</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">58</td><td>&#160;</td></tr><tr><td class="number">59</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">60</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">61</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Unable to install mouse driver. :("</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">64</td><td>&#160;</td></tr><tr><td class="number">65</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></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/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Unable to install interupt timers. :("</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>    <span class="k1">return</span> <span class="n">1</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>&#160;</td></tr><tr><td class="number">71</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">72</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">73</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">74</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">75</td><td>      <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Unable to setup a gfx mode: \"%s\". :("</span>, <a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>      <span class="k1">return</span> <span class="n">1</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="k2">}</span></td></tr><tr><td class="number">79</td><td>&#160;</td></tr><tr><td class="number">80</td><td>  <a href="http://www.allegro.cc/manual/gui_fg_color" target="_blank"><span class="a">gui_fg_color</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td>  <a href="http://www.allegro.cc/manual/gui_bg_color" target="_blank"><span class="a">gui_bg_color</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">82</td><td>&#160;</td></tr><tr><td class="number">83</td><td>  game_dialog<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span></td></tr><tr><td class="number">84</td><td>&#160;</td></tr><tr><td class="number">85</td><td>  <a href="http://www.allegro.cc/manual/do_dialog" target="_blank"><span class="a">do_dialog</span></a><span class="k2">(</span>game_dialog, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td>&#160;</td></tr><tr><td class="number">87</td><td>  <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td><span class="k2">}</span></td></tr><tr><td class="number">89</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

I will have a look at the allegro source and see if I can fix it, not sure of my chances though.</p><p>Edit:</p><p>I couldn&#39;t get 4.3 to build with mingw, so I had a ubuntu live cd floating about (6.2 edgy), getting allegro to build was painful, but after I got the right packages, I got it to compile.</p><p>The patch is for the latest 4.3 svn WiP, I named it gui.c.patch (it is also attached to this message)</p><div class="source-code snippet"><div class="inner"><pre><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> gui.c  <span class="n">2007</span><span class="k3">-</span><span class="n">04</span><span class="k3">-</span><span class="n">21</span> <span class="n">23</span><span class="k2">:</span><span class="n">18</span><span class="k2">:</span><span class="n">52</span>.<span class="n">609959750</span> <span class="k3">+</span><span class="n">0000</span>
<span class="k3">+</span><span class="k3">+</span><span class="k3">+</span> cgui.c  <span class="n">2007</span><span class="k3">-</span><span class="n">04</span><span class="k3">-</span><span class="n">21</span> <span class="n">23</span><span class="k2">:</span><span class="n">20</span><span class="k2">:</span><span class="n">22</span>.<span class="n">235561000</span> <span class="k3">+</span><span class="n">0000</span>
@@ <span class="k3">-</span><span class="n">1538</span>,<span class="n">6</span> <span class="k3">+</span><span class="n">1538</span>,<span class="n">7</span> @@ <span class="k1">static</span> <span class="k1">void</span> draw_menu<span class="k2">(</span><a href="http://www.allegro.cc/manual/MENU_PLAYER" target="_blank"><span class="a">MENU_PLAYER</span></a> <span class="k3">*</span>m<span class="k2">)</span>
       <a href="http://www.allegro.cc/manual/gui_menu_draw_menu" target="_blank"><span class="a">gui_menu_draw_menu</span></a><span class="k2">(</span>m-&gt;x, m-&gt;y, m-&gt;w, m-&gt;h<span class="k2">)</span><span class="k2">;</span>
    <span class="k1">else</span> <span class="k2">{</span>
       <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>gui_bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/gui_get_screen" target="_blank"><span class="a">gui_get_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k3">+</span>      <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>gui_bmp, m-&gt;x, m-&gt;y, m-&gt;x<span class="k3">+</span>m-&gt;w-2, m-&gt;y<span class="k3">+</span>m-&gt;h-2, <a href="http://www.allegro.cc/manual/gui_bg_color" target="_blank"><span class="a">gui_bg_color</span></a><span class="k2">)</span><span class="k2">;</span>
       <a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a><span class="k2">(</span>gui_bmp, m-&gt;x, m-&gt;y, m-&gt;x<span class="k3">+</span>m-&gt;w-2, m-&gt;y<span class="k3">+</span>m-&gt;h-2, <a href="http://www.allegro.cc/manual/gui_fg_color" target="_blank"><span class="a">gui_fg_color</span></a><span class="k2">)</span><span class="k2">;</span>
       <a href="http://www.allegro.cc/manual/vline" target="_blank"><span class="a">vline</span></a><span class="k2">(</span>gui_bmp, m-&gt;x<span class="k3">+</span>m-&gt;w-1, m-&gt;y<span class="k3">+</span><span class="n">1</span>, m-&gt;y<span class="k3">+</span>m-&gt;h-1, <a href="http://www.allegro.cc/manual/gui_fg_color" target="_blank"><span class="a">gui_fg_color</span></a><span class="k2">)</span><span class="k2">;</span>
       <a href="http://www.allegro.cc/manual/hline" target="_blank"><span class="a">hline</span></a><span class="k2">(</span>gui_bmp, m-&gt;x<span class="k3">+</span><span class="n">1</span>, m-&gt;y<span class="k3">+</span>m-&gt;h-1, m-&gt;x<span class="k3">+</span>m-&gt;w-1, <a href="http://www.allegro.cc/manual/gui_fg_color" target="_blank"><span class="a">gui_fg_color</span></a><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

This solved the problem, by &#39;rectfill&#39;ing the area, before the outline is drawn. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>I guess I should probably send this to the developers mailing list.</p><p>Edit:<br />Yep the patch for 4.2 will be the same, as the code is identical.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Sat, 21 Apr 2007 13:02:53 +0000</pubDate>
	</item>
</rss>
