<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] Mouse clipping</title>
		<link>http://www.allegro.cc/forums/view/611103</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 22 Sep 2012 07:39:41 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Edit: using Allegro 5.0.7.  I would try a newer version but I would need a precompiled binary for MingW-TDM 4.6.1 <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p><p>I have been doing more work on my Deluxe Pacman 2 level editor and I decided to code it so it loads in the same config file the main game uses.  This way you can edit your levels in fullscreen mode etc as you prefer.</p><p>Anyhow, I use <span class="source-code">ALLEGRO_FULLSCREEN_WINDOW</span> and transforms/clipping to scale the screen size up with a black border.</p><p>I just realized today that when my editor uses the same function to scale the screen up, that although the drawing is clipped, the mouse isn&#39;t.  This has led my mouse code to not work, I have to click off to the left of where the buttons really are on screen to get them to work.</p><p>I can add code to adjust the mouse position if full screen, but... you never know what the resolution is that the person will be using.  I am wondering if you have considered adding in mouse clipping in the same way there is screen clipping?  I can move the mouse pointer into the black areas which looks a bit odd when the images displayed are clipped.  I&#39;m not entirely certain how to safe go about programming the mouse code for my buttons.  It currently checks the region the buttons were drawn in, but the mouse doesn&#39;t match the drawing co-ordinates and as I said, you never know what the resolution will be that the person will run this on. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><p>Any ideas, suggestion are welcome, thanks.</p><p>This isn&#39;t too important, but just so you know, I use the following code to fit my screen to the fullscreen mode mentioned;</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// Scale Screen:</span>
<span class="number">  2</span><span class="c">//    Sets up transforms in order to fit any resolution</span>
<span class="number">  3</span><span class="c">//    onto an ALLEGRO_FULLSCREEN_WINDOW.</span>
<span class="number">  4</span><span class="c">//</span>
<span class="number">  5</span><span class="c">// (Special thanks to Matthew Leverton for help with this!)</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="c">// usage: a5_scale_screen(BUFFER_WIDTH, BUFFER_HEIGHT, display_width, display_height);</span>
<span class="number"> 10</span><span class="k1">void</span> a5_scale_screen<span class="k2">(</span><span class="k1">int</span> bw, <span class="k1">int</span> bh, <span class="k1">int</span> dw, <span class="k1">int</span> dh<span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> t<span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <span class="c">// Calculate the horizontal and vertial aspect ratios</span>
<span class="number"> 15</span>  <span class="k1">const</span> <span class="k1">float</span> HAR <span class="k3">=</span> dw<span class="k3">/</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>bw<span class="k2">;</span>
<span class="number"> 16</span>  <span class="k1">const</span> <span class="k1">float</span> VAR <span class="k3">=</span> dh<span class="k3">/</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>bh<span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>  <span class="c">// The aspect ratio, x-offset and y-offset (in pixels)</span>
<span class="number"> 19</span>  <span class="k1">float</span> ar, ox, oy<span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>
<span class="number"> 22</span>  <span class="k1">if</span> <span class="k2">(</span>bw <span class="k3">=</span><span class="k3">=</span> dw <span class="k3">&amp;</span><span class="k3">&amp;</span> bh <span class="k3">=</span><span class="k3">=</span> dh<span class="k2">)</span>
<span class="number"> 23</span>  <span class="k2">{</span>
<span class="number"> 24</span>    <span class="c">// 1:1, just reset everything</span>
<span class="number"> 25</span>    <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>    <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>    <a href="http://www.allegro.cc/manual/al_set_clipping_rectangle"><span class="a">al_set_clipping_rectangle</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, bw, bh<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>  <span class="k2">}</span>
<span class="number"> 29</span>  <span class="k1">else</span>
<span class="number"> 30</span>  <span class="k2">{</span>
<span class="number"> 31</span>    <span class="c">// Choose the smaller aspect ratio</span>
<span class="number"> 32</span>    <span class="k1">if</span> <span class="k2">(</span>HAR <span class="k3">&lt;</span> VAR<span class="k2">)</span>
<span class="number"> 33</span>    <span class="k2">{</span>
<span class="number"> 34</span>      <span class="c">// horizontal bars on the top and bottom</span>
<span class="number"> 35</span>      ar <span class="k3">=</span> HAR<span class="k2">;</span>
<span class="number"> 36</span>      ox <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 37</span>      oy <span class="k3">=</span> <span class="k2">(</span>dh <span class="k3">-</span> <span class="k2">(</span>ar <span class="k3">*</span> bh<span class="k2">)</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 38</span>    <span class="k2">}</span>
<span class="number"> 39</span>    <span class="k1">else</span>
<span class="number"> 40</span>    <span class="k2">{</span>
<span class="number"> 41</span>      <span class="c">// vertical bars on the left and right</span>
<span class="number"> 42</span>      ar <span class="k3">=</span> VAR<span class="k2">;</span>
<span class="number"> 43</span>      ox <span class="k3">=</span> <span class="k2">(</span>dw <span class="k3">-</span> <span class="k2">(</span>ar <span class="k3">*</span> bw<span class="k2">)</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 44</span>      oy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 45</span>    <span class="k2">}</span>
<span class="number"> 46</span>
<span class="number"> 47</span>    <span class="c">// set up the transformation to scale and translate</span>
<span class="number"> 48</span>    <a href="http://www.allegro.cc/manual/al_build_transform"><span class="a">al_build_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t, ox, oy, ar, ar, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span>    <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>
<span class="number"> 51</span>    <span class="c">// make sure nothing is drawn into the black bars</span>
<span class="number"> 52</span>    <a href="http://www.allegro.cc/manual/al_set_clipping_rectangle"><span class="a">al_set_clipping_rectangle</span></a><span class="k2">(</span>ox, oy, ar <span class="k3">*</span> bw, ar <span class="k3">*</span> bh<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>  <span class="k2">}</span>
<span class="number"> 54</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sat, 22 Sep 2012 06:32:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You need to apply the inverse transformation to the mouse coordinates. For example:</p><p><a href="https://bitbucket.org/leverton/tsb-nes-helmet-editor/src/23c42e735f14/src/gfx.c#cl-103">https://bitbucket.org/leverton/tsb-nes-helmet-editor/src/23c42e735f14/src/gfx.c#cl-103</a></p><p><a href="https://bitbucket.org/leverton/tsb-nes-helmet-editor/src/23c42e735f14/src/gfx.c#cl-311">https://bitbucket.org/leverton/tsb-nes-helmet-editor/src/23c42e735f14/src/gfx.c#cl-311</a></p><p>This is the important bit:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">=</span> <span class="k2">(</span>event.mouse.x <span class="k3">-</span> offset_x<span class="k2">)</span> <span class="k3">/</span> scale_x<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">=</span> <span class="k2">(</span>event.mouse.y <span class="k3">-</span> offset_y<span class="k2">)</span> <span class="k3">/</span> scale_y<span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 22 Sep 2012 06:41:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Very nice, thanks for that.  I was sitting on the can thinking about how to do this, <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />... great place to think the bathroom is and was thinking along these lines but still wasn&#39;t 100% certain how I was going to go about it.</p><p><span class="source-code"><span class="k1">while</span> <span class="k2">(</span>status <span class="k3">!</span><span class="k3">=</span> <span class="n">666</span><span class="k2">)</span></span></p><p><img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> EVIL!!!  <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sat, 22 Sep 2012 07:21:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I wouldn&#39;t learn too much from the code. I wrote it in 8-bit Allegro 4 and converted it to Allegro 5. <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 22 Sep 2012 07:31:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I like looking over how other people do things, there&#39;s always something I can learn. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sat, 22 Sep 2012 07:39:41 +0000</pubDate>
	</item>
</rss>
