<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Getting Allegro to Play Nice with Windows Scaling Settings</title>
		<link>http://www.allegro.cc/forums/view/618454</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 08 Jul 2021 00:06:37 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="remote-thumbnail"><span class="json">{"name":"20200604-202909.jpg","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/e\/ee8b9a90829013b0549096c31ff2d512.jpg","w":600,"h":800,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/e\/ee8b9a90829013b0549096c31ff2d512"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/e/e/ee8b9a90829013b0549096c31ff2d512-240.jpg" alt="20200604-202909.jpg" width="240" height="320" /></span></p><p>I noticed this issue when demoing a program I wrote on another person&#39;s machine. Took me a while to figure out why seemingly everything was wrong with the size of the window/coordinates etc.</p><p>So Windows appears to scale everything with this setting and it makes my program go offscreen etc was wondering what the usual counter to this is.</p><p>Although I don&#39;t have access to a development environment right now I pulled this code off an archive of my project:</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="p">#include &lt;allegro5/allegro_native_dialog.h&gt;</span>
<span class="number">  2</span><span class="p">#include "../gamedata.h"</span>
<span class="number">  3</span><span class="p">#include "../../resources/resources.h"</span>
<span class="number">  4</span><span class="p">#include "../../defines/game_def.h"</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">bool</span> gamedata <span class="k2">:</span><span class="k2">:</span> init_screen<span class="k2">(</span><span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>    WindowWidth <span class="k3">=</span> GAME_WIDTH <span class="k3">*</span> WidthScale<span class="k2">;</span>
<span class="number">  9</span>    WindowHeight <span class="k3">=</span> GAME_HEIGHT <span class="k3">*</span> HeightScale<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>    <span class="c">/* Monitor info */</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/al_get_monitor_info"><span class="a">al_get_monitor_info</span></a><span class="k2">(</span><span class="n">0</span>, <span class="k3">&amp;</span>info<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    DeviceWidth <span class="k3">=</span> info.x2 <span class="k3">-</span> info.x1<span class="k2">;</span>
<span class="number"> 15</span>    DeviceHeight <span class="k3">=</span> info.y2 <span class="k3">-</span> info.y1<span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    Screen <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>WindowWidth, WindowHeight<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    <span class="k1">if</span><span class="k2">(</span>Screen <span class="k3">=</span><span class="k3">=</span> nullptr<span class="k2">)</span>
<span class="number"> 19</span>    <span class="k2">{</span>
<span class="number"> 20</span>        <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>Screen, <span class="s">"Error!"</span>, <span class="s">""</span>, <span class="s">"Failed to create the display."</span>, nullptr, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>        <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 22</span>    <span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>EventQueue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>Screen<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    Buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>GAME_WIDTH, GAME_HEIGHT<span class="k2">)</span><span class="k2">;</span> ResourceManager.attach_resource<span class="k2">(</span>Buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 29</span><span class="k2">}</span>
</div></div><p>

Currently I allow non-square pixels by scaling width and height by independent integer amounts.</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#define GAME_WIDTH 384 // undecided, 5x4 stretch ratio with rectangular pixels achieves 16:9 screen</span>
<span class="p">#define GAME_HEIGHT 270</span>
</pre></div></div><p>

So, <b>what can I do about this?</b>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felix-The-Ghost)</author>
		<pubDate>Tue, 06 Jul 2021 22:30:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can you describe what went wrong? The expected behavior is for Allegro to create windows with the specified pixel sizes, which means that Allegro will essentially ignore that scaling setting. Are you observing something else?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 07 Jul 2021 04:32:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, I think Allegro basically thought the device size was that much larger so when I tried to center the window it was offscreen and also the maximum size was bigger than the actual available screen size.</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="p">#include "gamedata.h"</span>
<span class="number">  2</span><span class="p">#include "../defines/game_def.h"</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">void</span> gamedata <span class="k2">:</span><span class="k2">:</span> resize_screen<span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">short</span> <span class="k1">int</span> wscale, <span class="k1">unsigned</span> <span class="k1">short</span> <span class="k1">int</span> hscale<span class="k2">)</span>
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>    WidthScale <span class="k3">=</span> wscale<span class="k2">;</span> HeightScale <span class="k3">=</span> hscale<span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>Fullscreen<span class="k2">)</span>
<span class="number">  9</span>    <span class="k2">{</span>
<span class="number"> 10</span>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_resize_display"><span class="a">al_resize_display</span></a><span class="k2">(</span>Screen, GAME_WIDTH <span class="k3">*</span> wscale, GAME_HEIGHT <span class="k3">*</span> hscale<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 11</span>        <span class="k2">{</span>
<span class="number"> 12</span>            WindowWidth <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>Screen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>            WindowHeight <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>Screen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>            <a href="http://www.allegro.cc/manual/al_set_window_position"><span class="a">al_set_window_position</span></a><span class="k2">(</span>Screen, DeviceWidth<span class="k3">/</span><span class="n">2</span> <span class="k3">-</span> WindowWidth<span class="k3">/</span><span class="n">2</span>, DeviceHeight<span class="k3">/</span><span class="n">2</span> <span class="k3">-</span> WindowHeight<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>        <span class="k2">}</span>
<span class="number"> 17</span>    <span class="k2">}</span>
<span class="number"> 18</span>    <span class="k1">else</span>
<span class="number"> 19</span>    <span class="k2">{</span>
<span class="number"> 20</span>        WindowWidth <span class="k3">=</span> DeviceWidth<span class="k2">;</span>
<span class="number"> 21</span>        WindowHeight <span class="k3">=</span> DeviceHeight<span class="k2">;</span>
<span class="number"> 22</span>    <span class="k2">}</span>
<span class="number"> 23</span><span class="k2">}</span>
<span class="number"> 24</span>
<span class="number"> 25</span><span class="k1">void</span> gamedata <span class="k2">:</span><span class="k2">:</span> resize_screen<span class="k2">(</span><span class="k1">bool</span> wh, <span class="k1">unsigned</span> <span class="k1">short</span> <span class="k1">int</span> newscale<span class="k2">)</span>
<span class="number"> 26</span><span class="k2">{</span>
<span class="number"> 27</span>    <span class="k1">if</span> <span class="k2">(</span>wh<span class="k2">)</span> resize_screen<span class="k2">(</span>WidthScale, newscale<span class="k2">)</span><span class="k2">;</span> <span class="c">// new height</span>
<span class="number"> 28</span>    <span class="k1">else</span> resize_screen<span class="k2">(</span>newscale, HeightScale<span class="k2">)</span><span class="k2">;</span> <span class="c">// new width</span>
<span class="number"> 29</span><span class="k2">}</span>
<span class="number"> 30</span>
<span class="number"> 31</span><span class="k1">void</span> gamedata <span class="k2">:</span><span class="k2">:</span> resize_to_max<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 32</span><span class="k2">{</span>
<span class="number"> 33</span>    menu_game_scaler<span class="k3">*</span> ws <span class="k3">=</span> WidthScaler<span class="k2">;</span>
<span class="number"> 34</span>    menu_game_scaler<span class="k3">*</span> hs <span class="k3">=</span> HeightScaler<span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>    <span class="k1">if</span> <span class="k2">(</span>Fullscreen<span class="k2">)</span> <span class="c">// set to max</span>
<span class="number"> 37</span>    <span class="k2">{</span>
<span class="number"> 38</span>        ws-&gt;Index <span class="k3">=</span> <span class="k2">(</span>ws-&gt;Factors.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>        hs-&gt;Index <span class="k3">=</span> <span class="k2">(</span>hs-&gt;Factors.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>    <span class="k2">}</span>
<span class="number"> 41</span>    <span class="k1">else</span> <span class="c">// less than max so window fits on desktop // TODO remove hard-coded windowed hack</span>
<span class="number"> 42</span>    <span class="k2">{</span>
<span class="number"> 43</span>        ws-&gt;Index <span class="k3">=</span> <span class="k2">(</span>ws-&gt;Factors.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>        hs-&gt;Index <span class="k3">=</span> <span class="k2">(</span>hs-&gt;Factors.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>    <span class="k2">}</span>
<span class="number"> 46</span>
<span class="number"> 47</span>    resize_screen<span class="k2">(</span>ws-&gt;Factors<span class="k2">[</span>ws-&gt;Index<span class="k2">]</span>, hs-&gt;Factors<span class="k2">[</span>hs-&gt;Index<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>    ws-&gt;update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> hs-&gt;update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span><span class="k2">}</span>
</div></div><p>

I can&#39;t remember the syntax for highlighting a line in code on here.</p><p>Because my calculations are relative to monitor size maybe I need to do something different here?</p><div class="source-code snippet"><div class="inner"><pre>    <span class="c">/* Monitor info */</span>

    <a href="http://www.allegro.cc/manual/al_get_monitor_info"><span class="a">al_get_monitor_info</span></a><span class="k2">(</span><span class="n">0</span>, <span class="k3">&amp;</span>info<span class="k2">)</span><span class="k2">;</span>
    DeviceWidth <span class="k3">=</span> info.x2 <span class="k3">-</span> info.x1<span class="k2">;</span>
    DeviceHeight <span class="k3">=</span> info.y2 <span class="k3">-</span> info.y1<span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felix-The-Ghost)</author>
		<pubDate>Wed, 07 Jul 2021 23:16:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you have the source available to this game? I&#39;m struggling to understand what you&#39;re trying to accomplish here. I checked, and <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_monitor_info"><span class="a">al_get_monitor_info</span></a></span> returns the correct values. I can believe <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_window_position"><span class="a">al_set_window_position</span></a></span> might be broken, I&#39;ll test that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 07 Jul 2021 23:57:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I authored it but been on hiatus since 2017. I have access to the code but no IDE at the moment</p><p>What I wanted (and had been working as expected until that Windows issue) was the ability to have automatic scaling options or manual scaling to change shape of pixels to preference (retro)</p><p><span class="remote-thumbnail"><span class="json">{"name":"scaling.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/a\/bafe35238a6aa826521a1792293a5d6d.png","w":397,"h":322,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/a\/bafe35238a6aa826521a1792293a5d6d"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/b/a/bafe35238a6aa826521a1792293a5d6d-240.jpg" alt="scaling.png" width="240" height="194" /></span></p><p>With automatic selected it detects the screen size and will make the game area as big as possible in integer scaled amounts without going offscreen. For 16:9 ratio this will not be square pixels so can manually adjust scale for square pixels, but less screen coverage.</p><p>When I resize a windowed screen I re-center it on the device</p><p>Admittedly I can&#39;t specifically remember if the game size itself was bigger due to the window scaling but I definitely know the centering was wrong (as though it thought the screen was bigger) but could&#39;ve been due to an oversight in my code or something.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felix-The-Ghost)</author>
		<pubDate>Thu, 08 Jul 2021 00:06:37 +0000</pubDate>
	</item>
</rss>
