<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Custom Canvas Optimization</title>
		<link>http://www.allegro.cc/forums/view/613281</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 23 Sep 2013 03:07:40 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello all,</p><p>I&#39;m looking for advice/comments for a canvas class I created.</p><p>Back story: I was playing a game on my phone and during the game you could zoom in/out and could wrap the viewing portion. I thought about creating a class that could do the same.</p><p>Here is the result:
</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">#ifndef dLibraryCanvasHeader</span>
<span class="number">   2</span><span class="p">#define dLibraryCanvasHeader</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="p">#define dMin( x, y )    ((x)&lt;(y)?(x):(y))</span>
<span class="number">   7</span><span class="p">#define dMax( x, y )    ((x)&gt;(y)?(x):(y))</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="k1">namespace</span> dLibrary
<span class="number">  10</span><span class="k2">{</span>
<span class="number">  11</span>  <span class="k1">class</span> dCanvas
<span class="number">  12</span>  <span class="k2">{</span>
<span class="number">  13</span>  public:
<span class="number">  14</span>    <span class="k1">enum</span> dDistinguishers
<span class="number">  15</span>    <span class="k2">{</span>
<span class="number">  16</span>      dWidth,
<span class="number">  17</span>      dHeight,
<span class="number">  18</span>      dXPos,
<span class="number">  19</span>      dYPos,
<span class="number">  20</span>    <span class="k2">}</span><span class="k2">;</span>
<span class="number">  21</span>
<span class="number">  22</span>    dCanvas<span class="k2">(</span><span class="k2">)</span>
<span class="number">  23</span>    <span class="k2">{</span>
<span class="number">  24</span>      this-&gt;mDelete <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  25</span>      this-&gt;mZoom <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  26</span>      this-&gt;mWrap <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  27</span>      this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  28</span>      this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  29</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  30</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  31</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  32</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  33</span>      this-&gt;mBitmap <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  34</span>      this-&gt;mDrawBitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">;</span>
<span class="number">  35</span>    <span class="k2">}</span>
<span class="number">  36</span>
<span class="number">  37</span>    dCanvas<span class="k2">(</span> <span class="k1">const</span> <span class="k1">int</span> width, <span class="k1">const</span> <span class="k1">int</span> height <span class="k2">)</span>
<span class="number">  38</span>    <span class="k2">{</span>
<span class="number">  39</span>      this-&gt;mDelete <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  40</span>      this-&gt;mZoom <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  41</span>      this-&gt;mWrap <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  42</span>      this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  43</span>      this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  44</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  45</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  46</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  47</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</span>      <span class="k1">int</span> flags <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_new_bitmap_flags"><span class="a">al_get_new_bitmap_flags</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>      
<span class="number">  51</span>      <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span> ALLEGRO_VIDEO_BITMAP <span class="k3">|</span> ALLEGRO_MAG_LINEAR <span class="k3">|</span> ALLEGRO_MIN_LINEAR <span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>
<span class="number">  53</span>      this-&gt;mBitmap <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> width, height <span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>      <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span> flags <span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>
<span class="number">  57</span>      this-&gt;mDrawBitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">;</span>
<span class="number">  58</span>
<span class="number">  59</span>      <span class="k1">if</span> <span class="k2">(</span> this-&gt;mBitmap <span class="k2">)</span>
<span class="number">  60</span>      <span class="k2">{</span>
<span class="number">  61</span>        this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> width<span class="k2">;</span>
<span class="number">  62</span>        this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> height<span class="k2">;</span>
<span class="number">  63</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  64</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  65</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span><span class="k2">;</span>
<span class="number">  66</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span><span class="k2">;</span>
<span class="number">  67</span>        this-&gt;mZoom <span class="k3">=</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  68</span>        this-&gt;mDelete <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  69</span>      <span class="k2">}</span>
<span class="number">  70</span>    <span class="k2">}</span>
<span class="number">  71</span>
<span class="number">  72</span>    dCanvas<span class="k2">(</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap, <span class="k1">bool</span> doDelete <span class="k3">=</span> <span class="k1">false</span> <span class="k2">)</span>
<span class="number">  73</span>    <span class="k2">{</span>
<span class="number">  74</span>      this-&gt;mDelete <span class="k3">=</span> doDelete<span class="k2">;</span>
<span class="number">  75</span>      this-&gt;mZoom <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  76</span>      this-&gt;mWrap <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  77</span>      this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  78</span>      this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  79</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  80</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  81</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  82</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  83</span>      this-&gt;mBitmap <span class="k3">=</span> bitmap<span class="k2">;</span>
<span class="number">  84</span>      this-&gt;mDrawBitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>      <span class="k1">if</span> <span class="k2">(</span> this-&gt;mBitmap <span class="k2">)</span>
<span class="number">  87</span>      <span class="k2">{</span>
<span class="number">  88</span>        this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span> this-&gt;mBitmap <span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>        this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span> this-&gt;mBitmap <span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  91</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  92</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span><span class="k2">;</span>
<span class="number">  93</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span><span class="k2">;</span>
<span class="number">  94</span>        this-&gt;mZoom <span class="k3">=</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  95</span>        this-&gt;mDelete <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  96</span>      <span class="k2">}</span>
<span class="number">  97</span>    <span class="k2">}</span>
<span class="number">  98</span>
<span class="number">  99</span>    ~dCanvas<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 100</span>    <span class="k2">{</span>
<span class="number"> 101</span>      <span class="k1">if</span> <span class="k2">(</span> this-&gt;mBitmap <span class="k3">&amp;</span><span class="k3">&amp;</span> this-&gt;mDelete <span class="k2">)</span>
<span class="number"> 102</span>      <span class="k2">{</span>
<span class="number"> 103</span>        <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span> this-&gt;mBitmap <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>      <span class="k2">}</span>
<span class="number"> 105</span>    <span class="k2">}</span>
<span class="number"> 106</span>
<span class="number"> 107</span>    <span class="k1">void</span> beginDrawing<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 108</span>    <span class="k2">{</span>
<span class="number"> 109</span>      <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span> this-&gt;mBitmap <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>    <span class="k2">}</span>
<span class="number"> 111</span>
<span class="number"> 112</span>    <span class="k1">void</span> flipToDisplay<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="k2">)</span>
<span class="number"> 113</span>    <span class="k2">{</span>
<span class="number"> 114</span>      <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span> display <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>
<span class="number"> 116</span>      <span class="k1">int</span> targetBitmapSize<span class="k2">[</span> <span class="n">2</span> <span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</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>, <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="k2">;</span>
<span class="number"> 117</span>
<span class="number"> 118</span>      <span class="k1">if</span> <span class="k2">(</span> this-&gt;mWrap <span class="k2">)</span>
<span class="number"> 119</span>      <span class="k2">{</span>
<span class="number"> 120</span>        <span class="k1">if</span> <span class="k2">(</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> 
<span class="number"> 121</span>           this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 122</span>        <span class="k2">{</span>
<span class="number"> 123</span>          <span class="k1">if</span> <span class="k2">(</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 124</span>             this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 125</span>          <span class="k2">{</span>
<span class="number"> 126</span>            this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 127</span>                         this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span>,
<span class="number"> 128</span>                         <span class="n">0</span>, <span class="n">0</span>, targetBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span>, targetBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span>,       
<span class="number"> 129</span>                         <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>      
<span class="number"> 130</span>          <span class="k2">}</span>
<span class="number"> 131</span>          <span class="k1">else</span>
<span class="number"> 132</span>          <span class="k2">{</span>
<span class="number"> 133</span>            <span class="k1">int</span> h1 <span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 134</span>            <span class="k1">int</span> h2 <span class="k3">=</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> h1<span class="k2">;</span>
<span class="number"> 135</span>            <span class="k1">int</span> y2 <span class="k3">=</span> <span class="k2">(</span> targetBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">*</span> h1 <span class="k2">)</span> <span class="k3">/</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 136</span>
<span class="number"> 137</span>
<span class="number"> 138</span>            this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 139</span>                         this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span>, h1,
<span class="number"> 140</span>                         <span class="n">0</span>, <span class="n">0</span>, targetBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span>, y2,       
<span class="number"> 141</span>                         <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 142</span>
<span class="number"> 143</span>            this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 144</span>                         this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span>, <span class="n">0</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span>, h2,
<span class="number"> 145</span>                         <span class="n">0</span>, y2, targetBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span>, targetBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> y2,
<span class="number"> 146</span>                         <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 147</span>          <span class="k2">}</span>  
<span class="number"> 148</span>        <span class="k2">}</span>
<span class="number"> 149</span>        <span class="k1">else</span>
<span class="number"> 150</span>        <span class="k2">{</span>
<span class="number"> 151</span>          <span class="k1">if</span> <span class="k2">(</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 152</span>             this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 153</span>          <span class="k2">{</span>
<span class="number"> 154</span>            <span class="k1">int</span> w1 <span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 155</span>            <span class="k1">int</span> w2 <span class="k3">=</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> w1<span class="k2">;</span>
<span class="number"> 156</span>
<span class="number"> 157</span>            <span class="k1">int</span> x2 <span class="k3">=</span> <span class="k2">(</span> targetBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">*</span> w1 <span class="k2">)</span> <span class="k3">/</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 158</span>
<span class="number"> 159</span>
<span class="number"> 160</span>            this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 161</span>                         this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span>, w1, this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span>,
<span class="number"> 162</span>                         <span class="n">0</span>, <span class="n">0</span>, x2, targetBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span>,
<span class="number"> 163</span>                         <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 164</span>
<span class="number"> 165</span>            this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 166</span>                         <span class="n">0</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span>, w2, this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span>,
<span class="number"> 167</span>                         x2, <span class="n">0</span>, targetBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> x2, targetBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span>,
<span class="number"> 168</span>                         <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 169</span>          <span class="k2">}</span>
<span class="number"> 170</span>          <span class="k1">else</span>
<span class="number"> 171</span>          <span class="k2">{</span>
<span class="number"> 172</span>            <span class="k1">int</span> w1 <span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 173</span>            <span class="k1">int</span> w2 <span class="k3">=</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> w1<span class="k2">;</span>
<span class="number"> 174</span>            <span class="k1">int</span> h1 <span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 175</span>            <span class="k1">int</span> h2 <span class="k3">=</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> h1<span class="k2">;</span>
<span class="number"> 176</span>
<span class="number"> 177</span>            <span class="k1">int</span> y2 <span class="k3">=</span> <span class="k2">(</span> targetBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">*</span> h1 <span class="k2">)</span> <span class="k3">/</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 178</span>            <span class="k1">int</span> x2 <span class="k3">=</span> <span class="k2">(</span> targetBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">*</span> w1 <span class="k2">)</span> <span class="k3">/</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 179</span>
<span class="number"> 180</span>
<span class="number"> 181</span>            this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 182</span>                         this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span>, w1, h1,
<span class="number"> 183</span>                         <span class="n">0</span>, <span class="n">0</span>, x2, y2,
<span class="number"> 184</span>                         <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 185</span>
<span class="number"> 186</span>            this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 187</span>                         this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span>, <span class="n">0</span>, w1, h2,
<span class="number"> 188</span>                         <span class="n">0</span>, y2, x2, targetBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> y2,
<span class="number"> 189</span>                         <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 190</span>
<span class="number"> 191</span>            this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 192</span>                         <span class="n">0</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span>, w2, h1,
<span class="number"> 193</span>                         x2, <span class="n">0</span>, targetBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> x2, y2,
<span class="number"> 194</span>                         <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 195</span>
<span class="number"> 196</span>            this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 197</span>                         <span class="n">0</span>, <span class="n">0</span>, w2, h2,
<span class="number"> 198</span>                         x2, y2, targetBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> x2, targetBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> y2,
<span class="number"> 199</span>                         <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 200</span>          <span class="k2">}</span>
<span class="number"> 201</span>        <span class="k2">}</span>
<span class="number"> 202</span>      <span class="k2">}</span>
<span class="number"> 203</span>      <span class="k1">else</span>
<span class="number"> 204</span>      <span class="k2">{</span>
<span class="number"> 205</span>        this-&gt;mDrawBitmap<span class="k2">(</span> this-&gt;mBitmap, 
<span class="number"> 206</span>                   this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span>, this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span>,
<span class="number"> 207</span>                   <span class="n">0</span>, <span class="n">0</span>, targetBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span>, targetBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span>, 
<span class="number"> 208</span>                   <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 209</span>      <span class="k2">}</span>
<span class="number"> 210</span>
<span class="number"> 211</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 212</span>    <span class="k2">}</span>
<span class="number"> 213</span>
<span class="number"> 214</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>getBitmap<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 215</span>    <span class="k2">{</span>
<span class="number"> 216</span>      <span class="k1">return</span> this-&gt;mBitmap<span class="k2">;</span>
<span class="number"> 217</span>    <span class="k2">}</span>
<span class="number"> 218</span>
<span class="number"> 219</span>    <span class="k1">void</span> setZoom<span class="k2">(</span> <span class="k1">float</span> zoom <span class="k2">)</span>
<span class="number"> 220</span>    <span class="k2">{</span>
<span class="number"> 221</span>      this-&gt;mZoom <span class="k3">=</span> dMax<span class="k2">(</span> <span class="n">1</span>.<span class="n">0f</span>, zoom <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span>
<span class="number"> 223</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 224</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 225</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span> <span class="k1">float</span><span class="k2">(</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k2">)</span> <span class="k3">/</span> this-&gt;mZoom <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 226</span>      this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span> <span class="k1">float</span><span class="k2">(</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k2">)</span> <span class="k3">/</span> this-&gt;mZoom <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span>    <span class="k2">}</span>
<span class="number"> 228</span>
<span class="number"> 229</span>    <span class="k1">void</span> setWrap<span class="k2">(</span> <span class="k1">bool</span> wrap <span class="k2">)</span>
<span class="number"> 230</span>    <span class="k2">{</span>
<span class="number"> 231</span>      this-&gt;mWrap <span class="k3">=</span> wrap<span class="k2">;</span>
<span class="number"> 232</span>    <span class="k2">}</span>
<span class="number"> 233</span>
<span class="number"> 234</span>    <span class="k1">void</span> doScroll<span class="k2">(</span> <span class="k1">int</span> dx, <span class="k1">int</span> dy <span class="k2">)</span>
<span class="number"> 235</span>    <span class="k2">{</span>
<span class="number"> 236</span>      <span class="k1">if</span> <span class="k2">(</span> dx <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 237</span>      <span class="k2">{</span>
<span class="number"> 238</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">+</span><span class="k3">=</span> dx<span class="k2">;</span>
<span class="number"> 239</span>
<span class="number"> 240</span>        <span class="k1">if</span> <span class="k2">(</span> this-&gt;mWrap <span class="k2">)</span>
<span class="number"> 241</span>        <span class="k2">{</span>
<span class="number"> 242</span>          <span class="k1">if</span> <span class="k2">(</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 243</span>          <span class="k2">{</span>
<span class="number"> 244</span>            this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">+</span><span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 245</span>          <span class="k2">}</span>
<span class="number"> 246</span>
<span class="number"> 247</span>          <span class="k1">if</span> <span class="k2">(</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">&gt;</span><span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k2">)</span>
<span class="number"> 248</span>          <span class="k2">{</span>
<span class="number"> 249</span>            this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">-</span><span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 250</span>          <span class="k2">}</span>
<span class="number"> 251</span>        <span class="k2">}</span>
<span class="number"> 252</span>        <span class="k1">else</span>
<span class="number"> 253</span>        <span class="k2">{</span>
<span class="number"> 254</span>          this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k3">=</span> dMax<span class="k2">(</span> <span class="n">0</span>, dMin<span class="k2">(</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span>, this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 255</span>        <span class="k2">}</span>
<span class="number"> 256</span>      <span class="k2">}</span>
<span class="number"> 257</span>
<span class="number"> 258</span>      <span class="k1">if</span> <span class="k2">(</span> dy <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 259</span>      <span class="k2">{</span>
<span class="number"> 260</span>        this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">+</span><span class="k3">=</span> dy<span class="k2">;</span>
<span class="number"> 261</span>
<span class="number"> 262</span>        <span class="k1">if</span> <span class="k2">(</span> this-&gt;mWrap <span class="k2">)</span>
<span class="number"> 263</span>        <span class="k2">{</span>
<span class="number"> 264</span>          <span class="k1">if</span> <span class="k2">(</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 265</span>          <span class="k2">{</span>
<span class="number"> 266</span>            this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">+</span><span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 267</span>          <span class="k2">}</span>
<span class="number"> 268</span>
<span class="number"> 269</span>          <span class="k1">if</span> <span class="k2">(</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">&gt;</span><span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k2">)</span>
<span class="number"> 270</span>          <span class="k2">{</span>
<span class="number"> 271</span>            this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">-</span><span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 272</span>          <span class="k2">}</span>
<span class="number"> 273</span>        <span class="k2">}</span>
<span class="number"> 274</span>        <span class="k1">else</span>
<span class="number"> 275</span>        <span class="k2">{</span>
<span class="number"> 276</span>          this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k3">=</span> dMax<span class="k2">(</span> <span class="n">0</span>, dMin<span class="k2">(</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span>, this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 277</span>        <span class="k2">}</span>
<span class="number"> 278</span>      <span class="k2">}</span>
<span class="number"> 279</span>    <span class="k2">}</span>
<span class="number"> 280</span>
<span class="number"> 281</span>    <span class="k1">void</span> convertMouseCoordinates<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="k1">int</span> <span class="k3">&amp;</span>x, <span class="k1">int</span> <span class="k3">&amp;</span>y <span class="k2">)</span>
<span class="number"> 282</span>    <span class="k2">{</span>
<span class="number"> 283</span>      x <span class="k3">=</span> <span class="k2">(</span> x <span class="k3">*</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k2">)</span> <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>
<span class="number"> 284</span>      y <span class="k3">=</span> <span class="k2">(</span> y <span class="k3">*</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k2">)</span> <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="number"> 285</span>
<span class="number"> 286</span>      <span class="k1">if</span> <span class="k2">(</span> <span class="k2">(</span> this-&gt;mZoom <span class="k3">-</span> <span class="n">1</span>.<span class="n">0f</span> <span class="k2">)</span> <span class="k3">&lt;</span> <span class="n">0</span>.<span class="n">0000001f</span> <span class="k2">)</span>
<span class="number"> 287</span>      <span class="k2">{</span>
<span class="number"> 288</span>        x <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 289</span>        y <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span> <span class="k3">-</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 290</span>      <span class="k2">}</span>
<span class="number"> 291</span>      <span class="k1">else</span>
<span class="number"> 292</span>      <span class="k2">{</span>
<span class="number"> 293</span>        x <span class="k3">=</span> <span class="k2">(</span> <span class="k1">int</span><span class="k2">(</span> <span class="k1">float</span><span class="k2">(</span> x <span class="k2">)</span> <span class="k3">/</span> this-&gt;mZoom <span class="k2">)</span> <span class="k2">)</span> <span class="k3">+</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dXPos <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 294</span>        y <span class="k3">=</span> <span class="k2">(</span> <span class="k1">int</span><span class="k2">(</span> <span class="k1">float</span><span class="k2">(</span> y <span class="k2">)</span> <span class="k3">/</span> this-&gt;mZoom <span class="k2">)</span> <span class="k2">)</span> <span class="k3">+</span> this-&gt;mCamera<span class="k2">[</span> dCanvas::dYPos <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 295</span>      <span class="k2">}</span>
<span class="number"> 296</span>
<span class="number"> 297</span>      x %<span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 298</span>      y %<span class="k3">=</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 299</span>    <span class="k2">}</span> 
<span class="number"> 300</span>
<span class="number"> 301</span>    <span class="k1">void</span> setDrawScaledBitmapFunction<span class="k2">(</span> <span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span>drawfunc<span class="k2">)</span><span class="k2">(</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap, <span class="k1">float</span> sx, <span class="k1">float</span> sy, <span class="k1">float</span> sw, <span class="k1">float</span> sh, <span class="k1">float</span> dx, <span class="k1">float</span> dy, <span class="k1">float</span> dw, <span class="k1">float</span> dh, <span class="k1">int</span> flags <span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 302</span>    <span class="k2">{</span>
<span class="number"> 303</span>      this-&gt;mDrawBitmap <span class="k3">=</span> drawfunc<span class="k2">;</span>
<span class="number"> 304</span>    <span class="k2">}</span>
<span class="number"> 305</span>
<span class="number"> 306</span>    <span class="k1">int</span> getWidth<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 307</span>    <span class="k2">{</span>
<span class="number"> 308</span>      <span class="k1">return</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dWidth <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 309</span>    <span class="k2">}</span>
<span class="number"> 310</span>
<span class="number"> 311</span>    <span class="k1">int</span> getHeight<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 312</span>    <span class="k2">{</span>
<span class="number"> 313</span>      <span class="k1">return</span> this-&gt;mBitmapSize<span class="k2">[</span> dCanvas::dHeight <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 314</span>    <span class="k2">}</span>
<span class="number"> 315</span>
<span class="number"> 316</span>  private:
<span class="number"> 317</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>mBitmap<span class="k2">;</span>
<span class="number"> 318</span>    <span class="k1">bool</span> mDelete<span class="k2">;</span>
<span class="number"> 319</span>    <span class="k1">int</span> mBitmapSize<span class="k2">[</span> <span class="n">2</span> <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 320</span>    <span class="k1">int</span> mCamera<span class="k2">[</span> <span class="n">4</span> <span class="k2">]</span><span class="k2">;</span>
<span class="number"> 321</span>    <span class="k1">float</span> mZoom<span class="k2">;</span>
<span class="number"> 322</span>    <span class="k1">bool</span> mWrap<span class="k2">;</span>
<span class="number"> 323</span>    <span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span>mDrawBitmap<span class="k2">)</span><span class="k2">(</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap, <span class="k1">float</span> sx, <span class="k1">float</span> sy, <span class="k1">float</span> sw, <span class="k1">float</span> sh, <span class="k1">float</span> dx, <span class="k1">float</span> dy, <span class="k1">float</span> dw, <span class="k1">float</span> dh, <span class="k1">int</span> flags <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 324</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 325</span><span class="k2">}</span>
<span class="number"> 326</span>
<span class="number"> 327</span><span class="p">#endif</span>
</div></div><p>

There is also a function to convert mouse display coordinates to corresponding position of canvas.</p><p>Example:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> dGameView::draw<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="k2">)</span>
<span class="k2">{</span>
  this-&gt;mCanvas-&gt;beginDrawing<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

  <span class="c">// TODO: do all drawing here</span>

  this-&gt;mCanvas-&gt;flipToDisplay<span class="k2">(</span> display <span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

The advice I&#39;m looking for is if there are any optimizations that I could do to speed things up.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Sun, 22 Sep 2013 02:29:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Any particular reason you don&#39;t use the graphics card to do your transformations?<br /><a href="https://www.allegro.cc/manual/5/transformations.html">https://www.allegro.cc/manual/5/transformations.html</a></p><p>And this for the mouse: <a href="http://alleg.sourceforge.net/a5docs/refman/transformations.html#al_transform_coordinates">http://alleg.sourceforge.net/a5docs/refman/transformations.html#al_transform_coordinates</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sun, 22 Sep 2013 22:16:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was reading this <a href="http://wiki.allegro.cc/index.php?title=Achieving_Resolution_Independence">article</a> about resolution independence. It said that &quot;using a stretched buffer&quot; ... &quot;is preferred if your game is using a lot of bitmaps.&quot;</p><p>Still trying to wrap my head about the whole resolution independence idea.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Sun, 22 Sep 2013 23:21:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I wonder where that conclusion came from.</p><p>If you use transformations, everything you draw is sent to the graphics card, then the graphics card multiplies the view matrix by your transformation matrix to figure out where the fragments will be in screen space.</p><p>Using a stretched buffer I would fear would drive a game closer to being fill limited. Graphics cards have a limit to the number of pixels they can fill. So first you &#39;fill&#39; your buffer, then you blit that, effectivly doing tripple buffering amd filling a lot more pixels.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sun, 22 Sep 2013 23:31:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613281/990294#target">jmasterx</a> said:</div><div class="quote"><p>Using a stretched buffer I would fear would drive a game closer to being fill limited. Graphics cards have a limit to the number of pixels they can fill. So first you &#39;fill&#39; your buffer, then you blit that, effectivly doing tripple buffering amd filling a lot more pixels.</p></div></div><p>
Allegro 5 uses geometry and tex coords to stretch bitmaps to the display or textures (most bitmaps) afaik. So I don&#39;t think it&#39;s much different than using transforms.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 23 Sep 2013 03:07:40 +0000</pubDate>
	</item>
</rss>
