<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>al_set_new_window_position / al_get_window_position mismatch</title>
		<link>http://www.allegro.cc/forums/view/618393</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 11 Apr 2021 11:11:58 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I noticed a funny surprise with al_set_new_window_position / al_get_window_position. I wanted to make my program save the window position at exit, so the window can be restored at the same position again the next time.</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// at initialization</span>
<span class="c">// read x, y, w, h from a config file</span>
<a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_WINDOWED <span class="k3">|</span> ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_set_new_window_position"><span class="a">al_set_new_window_position</span></a><span class="k2">(</span>x, y<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>w, h<span class="k2">)</span><span class="k2">;</span>

<span class="c">// at shutdown</span>

<span class="k1">int</span> x, y
<a href="http://www.allegro.cc/manual/al_get_window_position"><span class="a">al_get_window_position</span></a><span class="k2">(</span>display, <span class="k3">&amp;</span>x, <span class="k3">&amp;</span>y<span class="k2">)</span><span class="k2">;</span>
w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="c">// write x, y, w, h to config file</span>
</pre></div></div><p>

Full code here: <a href="https://github.com/amarillion/ex_window_pos">https://github.com/amarillion/ex_window_pos</a></p><p>The surprising thing is that, even if I don&#39;t move or resize the window, the coordinates returned by al_get_window_position are not the same as the ones I pass into al_set_new_window_position. The effect is different on windows and linux. Here are repeated invocations of the program without moving the window:</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>On Linux:
<span class="number">  2</span>
<span class="number">  3</span>martijn@siepie:~<span class="k3">/</span>prg<span class="k3">/</span>alleg<span class="k3">/</span>bug-window-position$ .<span class="k3">/</span>ex_window_pos
<span class="number">  4</span>Reading <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">2147483647</span>,<span class="n">2147483647</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number">  5</span>Saving <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">630</span>,<span class="n">303</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number">  6</span>
<span class="number">  7</span>martijn@siepie:~<span class="k3">/</span>prg<span class="k3">/</span>alleg<span class="k3">/</span>bug-window-position$ .<span class="k3">/</span>ex_window_pos
<span class="number">  8</span>Reading <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">630</span>,<span class="n">303</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number">  9</span>Saving <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">630</span>,<span class="n">327</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 10</span>
<span class="number"> 11</span>martijn@siepie:~<span class="k3">/</span>prg<span class="k3">/</span>alleg<span class="k3">/</span>bug-window-position$ .<span class="k3">/</span>ex_window_pos
<span class="number"> 12</span>Reading <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">630</span>,<span class="n">327</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 13</span>Saving <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">630</span>,<span class="n">351</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 14</span>
<span class="number"> 15</span>martijn@siepie:~<span class="k3">/</span>prg<span class="k3">/</span>alleg<span class="k3">/</span>bug-window-position$ .<span class="k3">/</span>ex_window_pos
<span class="number"> 16</span>Reading <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">630</span>,<span class="n">351</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 17</span>Saving <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">630</span>,<span class="n">375</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 18</span>
<span class="number"> 19</span>On Windows:
<span class="number"> 20</span>
<span class="number"> 21</span>Martijn@Cheshire MINGW32 <span class="k3">/</span>z<span class="k3">/</span>prg<span class="k3">/</span>ex_window_pos
<span class="number"> 22</span>$ .<span class="k3">/</span>ex_window_pos.exe
<span class="number"> 23</span>Reading <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">2147483647</span>,<span class="n">2147483647</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 24</span>Saving <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">630</span>,<span class="n">267</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 25</span>
<span class="number"> 26</span>Martijn@Cheshire MINGW32 <span class="k3">/</span>z<span class="k3">/</span>prg<span class="k3">/</span>ex_window_pos
<span class="number"> 27</span>$ .<span class="k3">/</span>ex_window_pos.exe
<span class="number"> 28</span>Reading <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">630</span>,<span class="n">267</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 29</span>Saving <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">620</span>,<span class="n">234</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 30</span>
<span class="number"> 31</span>Martijn@Cheshire MINGW32 <span class="k3">/</span>z<span class="k3">/</span>prg<span class="k3">/</span>ex_window_pos
<span class="number"> 32</span>$ .<span class="k3">/</span>ex_window_pos.exe
<span class="number"> 33</span>Reading <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">620</span>,<span class="n">234</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 34</span>Saving <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">610</span>,<span class="n">201</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 35</span>
<span class="number"> 36</span>Martijn@Cheshire MINGW32 <span class="k3">/</span>z<span class="k3">/</span>prg<span class="k3">/</span>ex_window_pos
<span class="number"> 37</span>$ .<span class="k3">/</span>ex_window_pos.exe
<span class="number"> 38</span>Reading <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">610</span>,<span class="n">201</span><span class="k2">:</span> <span class="n">640x480</span>
<span class="number"> 39</span>Saving <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a> position: <span class="n">600</span>,<span class="n">168</span><span class="k2">:</span> <span class="n">640x480</span>
</div></div><p>

On windows, the window is shifted slightly up and left each time. After a while the window is created in negative territory, which is annoying because you can no longer reach the title bar to move the window. On linux, the window is shifted down each time.</p><p>I assume the problem is that al_set_window_position is not properly taking into account the title bar. Is there any way to account for this difference?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (amarillion)</author>
		<pubDate>Sat, 10 Apr 2021 21:01:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have used below code in my own project before, might fix the issue.</p><p><span class="source-code">height <span class="k3">+</span> GetSystemMetrics<span class="k2">(</span>SM_CYSIZE<span class="k2">)</span> <span class="k3">+</span> GetSystemMetrics<span class="k2">(</span>SM_CYFRAME<span class="k2">)</span><span class="k2">;</span></span></p><p><a href="https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics">https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aldrik)</author>
		<pubDate>Sat, 10 Apr 2021 22:20:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good suggestion, thanks! I just need something similar for linux too.</p><p>Wouldn&#39;t it be a good idea to build this into the al_set_new_window_position function itself? I could start working on a patch...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (amarillion)</author>
		<pubDate>Sun, 11 Apr 2021 02:27:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It would depend on what kind of window it was
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 11 Apr 2021 11:11:58 +0000</pubDate>
	</item>
</rss>
