<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Glyph spacing</title>
		<link>http://www.allegro.cc/forums/view/617168</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 12 Dec 2017 18:53:42 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have a bitmap font and am wondering whether it&#39;s possible to get Allegro to add 1px spacing between the glyphs when rendering the font, rather than having to add 1px spacing to the right of each character in the source bitmap.</p><p>With an unkerned TTF font, I&#39;m aware that it&#39;d be possible to cycle through every glyph and alter its kerning value in order to achieve this.</p><p>Is this possible with the current API or will I need to render each glyph manually? In the case of the latter, could I request an <span class="source-code">al_set_bitmap_font_spacing</span>, or perhaps an even more generic function that can apply extra letter spacing to TTF fonts too?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dthompson)</author>
		<pubDate>Mon, 11 Dec 2017 18:27:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can have your cake and eat it too.</p><p>Have allegro do it for you.</p><p>Use <a href="http://liballeg.org/a5docs/trunk/font.html#al_get_glyph">al_get_glyph</a>. Although it takes a pair of codepoints, must be to do with the kerning. From an <a href="http://liballeg.org/a5docs/trunk/font.html#allegro_glyph">ALLEGRO_GLYPH*</a> you can get the font&#39;s bitmap source rectangle for that codepoint, and then you draw it yourself. I&#39;ll whip up a quick example for you.</p><p>Actually, all you need are these two functions here :</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="k1">int</span> GetTextWidth<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span> f , <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> s , <span class="k1">int</span> xspacing<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>   <span class="k1">int</span> prev <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  3</span>   <span class="k1">int</span> current <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span>   <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">int</span> w <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k2">(</span>current <span class="k3">=</span> s<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>      ALLEGRO_GLYPH g<span class="k2">;</span>
<span class="number">  8</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span><span class="k3">&amp;</span>g , <span class="n">0</span> , <span class="k1">sizeof</span><span class="k2">(</span>g<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>      <span class="k1">if</span> <span class="k2">(</span>al_get_glyph<span class="k2">(</span>f , prev , current , <span class="k3">&amp;</span>g<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>         <span class="k1">if</span> <span class="k2">(</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span>            w <span class="k3">+</span><span class="k3">=</span> xspacing<span class="k2">;</span>
<span class="number"> 12</span>         <span class="k2">}</span>
<span class="number"> 13</span>         w <span class="k3">+</span><span class="k3">=</span> g.advance<span class="k2">;</span>
<span class="number"> 14</span>      <span class="k2">}</span>
<span class="number"> 15</span>      prev <span class="k3">=</span> current<span class="k2">;</span>
<span class="number"> 16</span>      <span class="k3">+</span><span class="k3">+</span>i<span class="k2">;</span>
<span class="number"> 17</span>   <span class="k2">}</span>
<span class="number"> 18</span>   <span class="k1">return</span> w<span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span>
<span class="number"> 20</span>
<span class="number"> 21</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="k1">void</span> DrawSpacedText<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> , <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> str , <span class="k1">int</span> cx , <span class="k1">int</span> cy , <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> col , <span class="k1">int</span> xspacing<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>   <span class="k1">int</span> w <span class="k3">=</span> GetTextWidth<span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> , str , xspacing<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>   
<span class="number"> 26</span>   <span class="k1">int</span> x <span class="k3">=</span> cx <span class="k3">-</span> w<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 27</span>   <span class="k1">int</span> y <span class="k3">=</span> cy <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_font_line_height"><span class="a">al_get_font_line_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">)</span><span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 28</span>   <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 29</span>   <span class="k1">int</span> prev <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 30</span>   <span class="k1">int</span> current <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 31</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k2">(</span>current <span class="k3">=</span> str<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 32</span>      ALLEGRO_GLYPH g<span class="k2">;</span>
<span class="number"> 33</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span><span class="k3">&amp;</span>g , <span class="n">0</span> , <span class="k1">sizeof</span><span class="k2">(</span>g<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>      <span class="k1">if</span> <span class="k2">(</span>al_get_glyph<span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> , prev , current , <span class="k3">&amp;</span>g<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 35</span>         <span class="k1">if</span> <span class="k2">(</span>g.bitmap<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 36</span>            <a href="http://www.allegro.cc/manual/al_draw_tinted_bitmap_region"><span class="a">al_draw_tinted_bitmap_region</span></a><span class="k2">(</span>g.bitmap , col , g.x , g.y , g.w , g.h , x , y , <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>         <span class="k2">}</span>
<span class="number"> 38</span>         x <span class="k3">+</span><span class="k3">=</span> g.advance<span class="k2">;</span>
<span class="number"> 39</span>         x <span class="k3">+</span><span class="k3">=</span> xspacing<span class="k2">;</span>
<span class="number"> 40</span>      <span class="k2">}</span>
<span class="number"> 41</span>      prev <span class="k3">=</span> current<span class="k2">;</span>
<span class="number"> 42</span>      <span class="k3">+</span><span class="k3">+</span>i<span class="k2">;</span>
<span class="number"> 43</span>   <span class="k2">}</span>
<span class="number"> 44</span>   
<span class="number"> 45</span><span class="k2">}</span>
</div></div><p>

It took me about 10 minutes to add in horizontal spacing.</p><p>What you can do is take and load your bitmap font, then draw that font to a blank with the additional spacing, then save it and from now on reload the second one.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 11 Dec 2017 20:16:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In addition to the above, we&#39;re adding support for the <a href="http://www.angelcode.com/products/bmfont/">bmfont</a> format, which has this padding a little more explicit. Obviously it&#39;s a new format, but I think it&#39;s a superset of the current one.</p><p>Also, there&#39;s <span class="source-code">al_draw_glyph</span>, which might be preferable to drawing the bitmap yourself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 11 Dec 2017 22:09:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I came across a quirk in a ttf font I use. When I call al_get_glyph on the space character (ascii 32), it returns true, but the bitmap is null.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 11 Dec 2017 22:18:11 +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/617168/1033853#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> I came across a quirk in a ttf font I use. When I call al_get_glyph on the space character (ascii 32), it returns true, but the bitmap is null. </p></div></div><p>That&#39;s normal. I&#39;ve updated the documentation to mention this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Tue, 12 Dec 2017 09:01:26 +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/617168/1033844#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
You can have your cake and eat it too.
</p></div></div><p>

Nice <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> that works well for a single line of text; reimplementing all of A5&#39;s font routines with that extra parameter might be more of a pain though...</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617168/1033852#target">SiegeLord</a> said:</div><div class="quote"><p>
we&#39;re adding support for the bmfont format
</p></div></div><p>

This&#39;d probably be a better solution; looking forward to it.</p><p>I&#39;ll probably just go and alter the font&#39;s image file for now; it&#39;s just a 5x5 pixel font so won&#39;t require much effort.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dthompson)</author>
		<pubDate>Tue, 12 Dec 2017 18:53:42 +0000</pubDate>
	</item>
</rss>
