<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] New Line</title>
		<link>http://www.allegro.cc/forums/view/614257</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 26 May 2014 06:36:43 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>When I used al_draw_text, the text gives me squares or nothing when i use the \n character in the char * argument. Is there a way to get it to do line breaks without modifying the text string?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (tarlkea)</author>
		<pubDate>Thu, 15 May 2014 07:23:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sadly no. It does not do wrapping or support newlines. You will have to parse out each line and display it, potentially doing additional word wrapping if needed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 15 May 2014 07:25:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Since everyone and their dog is forced to implement this themselves with the current API, which is a waste of effort, I think an <span class="source-code">al_draw_multiline_text</span> function would be a &quot;nice to have&quot; feature for 5.2 or later. Ideally this would also inclue a way to limit the width of the text and allow for text blocks. So I added this functionality as &quot;nice to have&quot; to the roadmap on the wiki <a href="http://wiki.allegro.cc/index.php?title=Allegro_roadmap">http://wiki.allegro.cc/index.php?title=Allegro_roadmap</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Thu, 15 May 2014 10:47:59 +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/614257/1000771#target">beoran</a> said:</div><div class="quote"><p> Since everyone and their dog is forced to implement this themselves</p></div></div><p>I do not have a dog and I am not programming a GUI <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Thu, 15 May 2014 11:25:17 +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/614257/1000776#target">pkrcel</a> said:</div><div class="quote"><p>I do not have a dog and I am not programming a GUI <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p></div></div><p>You should think about getting a dog.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 15 May 2014 12:23:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And starting another GUI. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 15 May 2014 12:46:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>AH! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> I know you guys were over your heads but really hoped we could save you.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Thu, 15 May 2014 13:48:09 +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/614257/1000789#target">pkrcel</a> said:</div><div class="quote"><p> I know you guys were over your heads</p></div></div><p><div class="media-player youtube"><div style="margin: 1em 2em; background: url(/images/movie.png); width: 180px; height: 100px; text-align: center;"><a href="http://www.allegro.cc//www.youtube.com/watch?v=CediDrpOyeg" target="_blank"><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/object/f/e/fe3c5b000fee35ebedd31171d4ca4277.jpg" border="0" alt="video" title="Click to play video" /></a></div></div></p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">//note:  if you reuse a particular wordwrap struct, you have to free frame-&gt;wrapbox.bufferarray to avoid a memory leak,</span>
<span class="number">   2</span><span class="c">//and strictly speaking to free it before program exit.</span>
<span class="number">   3</span><span class="k1">static</span> <span class="k1">int</span> _zz_wordwrap<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span>src, <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">int</span> pixelwidth, ZZ_WRAPBOX <span class="k3">*</span>wrapbox<span class="k2">)</span>
<span class="number">   4</span><span class="k2">{</span>
<span class="number">   5</span>  <span class="k1">char</span> <span class="k3">*</span>current_line      <span class="k3">=</span> src<span class="k2">;</span>  <span class="c">//allow zero based indices within current line</span>
<span class="number">   6</span>  <span class="k1">char</span> <span class="k3">*</span>current_dst<span class="k2">;</span>
<span class="number">   7</span>  <span class="k1">char</span> <span class="k3">*</span>dst_resize<span class="k2">;</span>
<span class="number">   8</span>  <span class="k1">char</span> <span class="k3">*</span>wrapbuff<span class="k2">;</span>      <span class="c">//temp store for current line</span>
<span class="number">   9</span>  <span class="k1">int</span> dst_current_char    <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>  <span class="c">//index of current line in dest</span>
<span class="number">  10</span>  <span class="k1">int</span> src_prev_space      <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>  <span class="c">//marks last space in source (if we have to ignore part of a word at end of line)</span>
<span class="number">  11</span>  <span class="k1">int</span> dst_prev_space      <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>  <span class="c">//marks last space in dest</span>
<span class="number">  12</span>  <span class="k1">int</span> src_current_char    <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>  <span class="c">//how far within the current string we are</span>
<span class="number">  13</span>  <span class="k1">int</span> dst_lines_used      <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>  <span class="c">//check that we don't overrun the destination buffer</span>
<span class="number">  14</span>  <span class="k1">int</span> num_dst_lines<span class="k2">;</span>    <span class="c">//how many lines in dst available (chars_width * num_dest_lines = number of bytes in dst buffer)</span>
<span class="number">  15</span>  <span class="k1">int</span> num_src_bytes<span class="k2">;</span>
<span class="number">  16</span>  <span class="k1">char</span> c<span class="k2">;</span>
<span class="number">  17</span>
<span class="number">  18</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>wrapbox, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span>ZZ_WRAPBOX<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>  wrapbox-&gt;textfont <span class="k3">=</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">;</span>
<span class="number">  20</span>  wrapbox-&gt;fontheight <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="k2">;</span>
<span class="number">  21</span>  wrapbox-&gt;pixelwidth <span class="k3">=</span> pixelwidth<span class="k2">;</span>
<span class="number">  22</span>
<span class="number">  23</span>  wrapbox-&gt;chars_width <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_text_width"><span class="a">al_get_text_width</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, ten_narrowchars<span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>  wrapbox-&gt;chars_width <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</span><span class="n">10</span>.<span class="n">0</span> <span class="k3">/</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>wrapbox-&gt;chars_width <span class="k3">/</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>pixelwidth<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>
<span class="number">  26</span>  wrapbuff <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>wrapbox-&gt;chars_width <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>wrapbuff<span class="k2">)</span>
<span class="number">  28</span>  <span class="k2">{</span>
<span class="number">  29</span>    <span class="k1">return</span> ZZ_WRAP_NOMEM<span class="k2">;</span>
<span class="number">  30</span>  <span class="k2">}</span>
<span class="number">  31</span>
<span class="number">  32</span>  <span class="c">//valgrind complains about conditional jump on uninitialized values if this isn't here, remove if you like</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>wrapbuff,<span class="n">0</span>,wrapbox-&gt;chars_width <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span>  <span class="c">//allocating src_bytes worth of dst plus a WAG of 20% for slop</span>
<span class="number">  36</span>  num_src_bytes <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>src<span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>  num_dst_lines <span class="k3">=</span> num_src_bytes <span class="k3">/</span> wrapbox-&gt;chars_width<span class="k2">;</span>  <span class="c">//first approximation to how many lines</span>
<span class="number">  38</span>  num_dst_lines <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>num_dst_lines <span class="k3">*</span> <span class="n">1</span>.<span class="n">2</span><span class="k2">;</span>  <span class="c">//WAG of 20% guessing most lines waste that much on the end</span>
<span class="number">  39</span>  num_dst_lines <span class="k3">+</span><span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>  <span class="c">//for those one-liners ;)</span>
<span class="number">  40</span>  current_dst <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>num_dst_lines <span class="k3">*</span> wrapbox-&gt;chars_width<span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>current_dst<span class="k2">)</span>
<span class="number">  42</span>  <span class="k2">{</span>
<span class="number">  43</span>    <span class="k1">return</span> ZZ_WRAP_NOMEM<span class="k2">;</span>
<span class="number">  44</span>  <span class="k2">}</span>
<span class="number">  45</span>
<span class="number">  46</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>current_dst, <span class="n">0</span>, num_dst_lines <span class="k3">*</span> wrapbox-&gt;chars_width<span class="k2">)</span><span class="k2">;</span>  <span class="c">//zero them all out for asciiz terminators</span>
<span class="number">  47</span>
<span class="number">  48</span>  <span class="k1">while</span><span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number">  49</span>  <span class="k2">{</span>
<span class="number">  50</span>    c <span class="k3">=</span> current_line<span class="k2">[</span>src_current_char<span class="k2">]</span><span class="k2">;</span>  <span class="c">//grab next char from source</span>
<span class="number">  51</span>
<span class="number">  52</span>    <span class="k1">if</span><span class="k2">(</span>c <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>  <span class="c">//null terminator?  done</span>
<span class="number">  53</span>    <span class="k2">{</span>
<span class="number">  54</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span><span class="k3">&amp;</span>current_dst<span class="k2">[</span>dst_lines_used <span class="k3">*</span> wrapbox-&gt;chars_width<span class="k2">]</span>, wrapbuff<span class="k2">)</span><span class="k2">;</span>  <span class="c">//copy temp to dest buffer</span>
<span class="number">  55</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>wrapbuff<span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>      wrapbox-&gt;numdestlines <span class="k3">=</span> dst_lines_used<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>  <span class="c">//tell caller how many lines of wrapped text there are</span>
<span class="number">  57</span>
<span class="number">  58</span>      wrapbox-&gt;bufferarray <span class="k3">=</span> current_dst<span class="k2">;</span>
<span class="number">  59</span>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  60</span>    <span class="k2">}</span>
<span class="number">  61</span>
<span class="number">  62</span>    <span class="k1">if</span><span class="k2">(</span>c <span class="k3">=</span><span class="k3">=</span> <span class="s">'\n'</span><span class="k2">)</span>  <span class="c">//start a new line in dest buffer regardless of room remaining in this line</span>
<span class="number">  63</span>    <span class="k2">{</span>
<span class="number">  64</span>      wrapbox-&gt;linetoolong<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  65</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span><span class="k3">&amp;</span>current_dst<span class="k2">[</span>dst_lines_used <span class="k3">*</span> wrapbox-&gt;chars_width<span class="k2">]</span>, wrapbuff<span class="k2">)</span><span class="k2">;</span>  <span class="c">//copy temp to dest buffer</span>
<span class="number">  66</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>wrapbuff, <span class="n">0</span>, wrapbox-&gt;chars_width <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>        <span class="c">//zero out temp for asciiz terminators</span>
<span class="number">  67</span>      dst_lines_used<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  68</span>      <span class="k1">if</span><span class="k2">(</span>dst_lines_used <span class="k3">=</span><span class="k3">=</span> num_dst_lines<span class="k2">)</span>  <span class="c">//need destination buffer enlarged?</span>
<span class="number">  69</span>      <span class="k2">{</span>
<span class="number">  70</span>        <span class="c">/* trying out Peter Wang suggestion of doubling size every realloc()</span>
<span class="number">  71</span><span class="c">        static int lcount = 1;</span>
<span class="number">  72</span><span class="c">        printf("doubling line count %d times\n",lcount);</span>
<span class="number">  73</span><span class="c">        lcount++;</span>
<span class="number">  74</span><span class="c">        */</span>
<span class="number">  75</span>        num_dst_lines <span class="k3">*</span><span class="k3">=</span> <span class="n">2</span><span class="k2">;</span> <span class="c">//+= 50;    //add 50 more lines available</span>
<span class="number">  76</span>        dst_resize <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_648.html" target="_blank">realloc</a><span class="k2">(</span>current_dst,  num_dst_lines <span class="k3">*</span> wrapbox-&gt;chars_width<span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>dst_resize<span class="k2">)</span>
<span class="number">  78</span>        <span class="k2">{</span>
<span class="number">  79</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>wrapbuff<span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>current_dst<span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>          <span class="k1">return</span> ZZ_WRAP_NOMEM<span class="k2">;</span>
<span class="number">  82</span>        <span class="k2">}</span>
<span class="number">  83</span>        current_dst <span class="k3">=</span> dst_resize<span class="k2">;</span>
<span class="number">  84</span>      <span class="k2">}</span>
<span class="number">  85</span>      current_line <span class="k3">=</span> <span class="k3">&amp;</span>current_line<span class="k2">[</span>src_current_char <span class="k3">+</span> <span class="n">1</span><span class="k2">]</span><span class="k2">;</span>  <span class="c">//+1 to get past the '\n'</span>
<span class="number">  86</span>      src_current_char <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  87</span>      src_prev_space   <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number">  88</span>      dst_prev_space   <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number">  89</span>      dst_current_char <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number">  90</span>    <span class="k2">}</span>
<span class="number">  91</span>
<span class="number">  92</span>    <span class="k1">if</span><span class="k2">(</span>c <span class="k3">&lt;</span> <span class="s">' '</span><span class="k2">)</span>    <span class="c">//ignore backspaces, tabs, '\r's, control chars</span>
<span class="number">  93</span>    <span class="k2">{</span>
<span class="number">  94</span>      src_current_char<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>  <span class="c">//get past the '\r' or whatever</span>
<span class="number">  95</span>      <span class="k1">continue</span><span class="k2">;</span>  <span class="c">//since c is signed, all the "high" non-ASCII chars will be less than ' ' too</span>
<span class="number">  96</span>    <span class="k2">}</span>
<span class="number">  97</span>
<span class="number">  98</span>    <span class="k1">if</span><span class="k2">(</span>c <span class="k3">=</span><span class="k3">=</span> <span class="s">' '</span><span class="k2">)</span>  <span class="c">//keep track of possible line end (wrapbuff full part way through a word)</span>
<span class="number">  99</span>    <span class="k2">{</span>
<span class="number"> 100</span>      src_prev_space <span class="k3">=</span> src_current_char <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>  <span class="c">//+1 to ignore it next line</span>
<span class="number"> 101</span>      dst_prev_space <span class="k3">=</span> dst_current_char<span class="k2">;</span>
<span class="number"> 102</span>    <span class="k2">}</span>
<span class="number"> 103</span>
<span class="number"> 104</span>    <span class="c">//fall through to storing in wrapbuff</span>
<span class="number"> 105</span>    <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span>wrapbox-&gt;chars_width <span class="k3">=</span><span class="k3">=</span> <span class="k2">(</span>dst_current_char <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>wrapbox-&gt;pixelwidth <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_text_width"><span class="a">al_get_text_width</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, wrapbuff<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>  <span class="c">//run out of room in this line?</span>
<span class="number"> 106</span>    <span class="k2">{</span>
<span class="number"> 107</span>      <span class="k1">if</span><span class="k2">(</span>dst_prev_space <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>  <span class="c">//we found one single word that's too long for a line</span>
<span class="number"> 108</span>      <span class="k2">{</span>
<span class="number"> 109</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>wrapbuff<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>current_dst<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>        <span class="k1">return</span> ZZ_WRAP_TOOLONG<span class="k2">;</span>
<span class="number"> 112</span>      <span class="k2">}</span>
<span class="number"> 113</span>
<span class="number"> 114</span>      <span class="k1">if</span><span class="k2">(</span>c <span class="k3">!</span><span class="k3">=</span> <span class="s">' '</span><span class="k2">)</span>    <span class="c">//part way through a word?</span>
<span class="number"> 115</span>      <span class="k2">{</span>
<span class="number"> 116</span>        dst_current_char <span class="k3">=</span> dst_prev_space<span class="k2">;</span>
<span class="number"> 117</span>        src_current_char <span class="k3">=</span> src_prev_space<span class="k2">;</span>
<span class="number"> 118</span>        <span class="k1">while</span><span class="k2">(</span>wrapbuff<span class="k2">[</span>dst_current_char<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">' '</span><span class="k2">)</span>
<span class="number"> 119</span>        <span class="k2">{</span>
<span class="number"> 120</span>          wrapbuff<span class="k2">[</span>dst_current_char<span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 121</span>          dst_current_char--<span class="k2">;</span>
<span class="number"> 122</span>          <span class="k1">if</span><span class="k2">(</span>dst_current_char <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 123</span>          <span class="k2">{</span>
<span class="number"> 124</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 125</span>          <span class="k2">}</span>
<span class="number"> 126</span>        <span class="k2">}</span>
<span class="number"> 127</span>      <span class="k2">}</span>
<span class="number"> 128</span>
<span class="number"> 129</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_756.html" target="_blank">strcpy</a><span class="k2">(</span><span class="k3">&amp;</span>current_dst<span class="k2">[</span>dst_lines_used <span class="k3">*</span> wrapbox-&gt;chars_width<span class="k2">]</span>, wrapbuff<span class="k2">)</span><span class="k2">;</span>  <span class="c">//copy temp to dest buffer</span>
<span class="number"> 130</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>wrapbuff, <span class="n">0</span>, wrapbox-&gt;chars_width <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>        <span class="c">//zero out temp for asciiz terminators</span>
<span class="number"> 131</span>      dst_lines_used<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 132</span>      <span class="k1">if</span><span class="k2">(</span>dst_lines_used <span class="k3">=</span><span class="k3">=</span> num_dst_lines<span class="k2">)</span>  <span class="c">//need destination buffer enlarged?</span>
<span class="number"> 133</span>      <span class="k2">{</span>
<span class="number"> 134</span>        num_dst_lines <span class="k3">+</span><span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>    <span class="c">//add 50 more lines available</span>
<span class="number"> 135</span>        dst_resize <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_648.html" target="_blank">realloc</a><span class="k2">(</span>current_dst,  num_dst_lines <span class="k3">*</span> wrapbox-&gt;chars_width<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>dst_resize<span class="k2">)</span>
<span class="number"> 137</span>        <span class="k2">{</span>
<span class="number"> 138</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>wrapbuff<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>current_dst<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>          <span class="k1">return</span> ZZ_WRAP_NOMEM<span class="k2">;</span>
<span class="number"> 141</span>        <span class="k2">}</span>
<span class="number"> 142</span>        current_dst <span class="k3">=</span> dst_resize<span class="k2">;</span>
<span class="number"> 143</span>      <span class="k2">}</span>
<span class="number"> 144</span>      current_line <span class="k3">=</span> <span class="k3">&amp;</span>current_line<span class="k2">[</span>src_prev_space<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 145</span>      src_current_char   <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number"> 146</span>      dst_prev_space     <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number"> 147</span>      dst_current_char   <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number"> 148</span>      <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 149</span>    <span class="k2">}</span>
<span class="number"> 150</span>    wrapbuff<span class="k2">[</span>dst_current_char<span class="k2">]</span> <span class="k3">=</span> c<span class="k2">;</span>
<span class="number"> 151</span>    src_current_char<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 152</span>    dst_current_char<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 153</span>  <span class="k2">}</span>
<span class="number"> 154</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 155</span><span class="k2">}</span>
<span class="number"> 156</span>
<span class="number"> 157</span><span class="k1">static</span> <span class="k1">void</span> _zz_init_frame<span class="k2">(</span><span class="k1">int</span> left, <span class="k1">int</span> top, <span class="k1">int</span> right, <span class="k1">int</span> bottom,
<span class="number"> 158</span>    <span class="k1">char</span> <span class="k3">*</span>titletext, <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>titlefont,
<span class="number"> 159</span>    ZZ_TEXTBOX <span class="k3">*</span>frame, ZZ_WIN <span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a><span class="k2">)</span>
<span class="number"> 160</span><span class="k2">{</span>
<span class="number"> 161</span>  <span class="k1">int</span> height, width<span class="k2">;</span>
<span class="number"> 162</span>  frame-&gt;framerect.left   <span class="k3">=</span> left<span class="k2">;</span>
<span class="number"> 163</span>  frame-&gt;framerect.top    <span class="k3">=</span> top<span class="k2">;</span>
<span class="number"> 164</span>  frame-&gt;framerect.right  <span class="k3">=</span> right<span class="k2">;</span>
<span class="number"> 165</span>
<span class="number"> 166</span>  frame-&gt;textbox.left     <span class="k3">=</span> frame-&gt;framerect.left   <span class="k3">+</span> TEXTBOXMARGIN<span class="k2">;</span>
<span class="number"> 167</span>  frame-&gt;textbox.top      <span class="k3">=</span> frame-&gt;framerect.top    <span class="k3">+</span> TEXTBOXMARGIN<span class="k2">;</span>
<span class="number"> 168</span>  frame-&gt;textbox.right    <span class="k3">=</span> frame-&gt;framerect.right  <span class="k3">-</span> TEXTBOXMARGIN<span class="k2">;</span>
<span class="number"> 169</span>
<span class="number"> 170</span>  frame-&gt;titletext <span class="k3">=</span> titletext<span class="k2">;</span>
<span class="number"> 171</span>  frame-&gt;titlefont <span class="k3">=</span> titlefont<span class="k2">;</span>
<span class="number"> 172</span>  frame-&gt;window    <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a><span class="k2">;</span>
<span class="number"> 173</span>
<span class="number"> 174</span>  height <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>titlefont<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>  width <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_text_width"><span class="a">al_get_text_width</span></a><span class="k2">(</span>titlefont, titletext<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 176</span>
<span class="number"> 177</span>  frame-&gt;titlebox.top <span class="k3">=</span> frame-&gt;framerect.top <span class="k3">-</span> <span class="k2">(</span>height <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 178</span>  frame-&gt;titlebox.bottom <span class="k3">=</span> frame-&gt;titlebox.top <span class="k3">+</span> height<span class="k2">;</span>
<span class="number"> 179</span>  frame-&gt;titlebox.left <span class="k3">=</span> frame-&gt;framerect.left <span class="k3">+</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 180</span>  frame-&gt;titlebox.right <span class="k3">=</span> frame-&gt;titlebox.left <span class="k3">+</span> width <span class="k3">+</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 181</span>
<span class="number"> 182</span>  <span class="c">//leave zero in the "bottom" parameter to have bottom automagically</span>
<span class="number"> 183</span>  <span class="c">//align with bottom of text</span>
<span class="number"> 184</span>  <span class="k1">if</span><span class="k2">(</span>bottom <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 185</span>  <span class="k2">{</span>
<span class="number"> 186</span>    frame-&gt;framerect.bottom <span class="k3">=</span> bottom<span class="k2">;</span>
<span class="number"> 187</span>    frame-&gt;textbox.bottom   <span class="k3">=</span> frame-&gt;framerect.bottom <span class="k3">-</span> TEXTBOXMARGIN<span class="k2">;</span>
<span class="number"> 188</span>  <span class="k2">}</span>
<span class="number"> 189</span>  <span class="k1">else</span>
<span class="number"> 190</span>  <span class="k2">{</span>
<span class="number"> 191</span>    frame-&gt;textbox.bottom <span class="k3">=</span> frame-&gt;titlebox.bottom <span class="k3">+</span> <span class="k2">(</span>frame-&gt;wrapbox.numdestlines <span class="k3">*</span> frame-&gt;wrapbox.fontheight<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>    frame-&gt;framerect.bottom <span class="k3">=</span> frame-&gt;textbox.bottom <span class="k3">+</span> TEXTBOXMARGIN<span class="k2">;</span>
<span class="number"> 193</span>  <span class="k2">}</span>
<span class="number"> 194</span><span class="k2">}</span>
<span class="number"> 195</span>
<span class="number"> 196</span><span class="k1">int</span> zz_init_textbox<span class="k2">(</span>ZZ_TEXTBOX <span class="k3">*</span>textbox,    <span class="c">//textbox struct location</span>
<span class="number"> 197</span>        ZZ_WIN <span class="k3">*</span>parentwin,    <span class="c">//parent window struct location</span>
<span class="number"> 198</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>titlefont,  <span class="c">//font for title (may be 0 if no title desired)</span>
<span class="number"> 199</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>bodyfont,  <span class="c">//font for body of text (may be 0 if no body desired)</span>
<span class="number"> 200</span>        <span class="k1">char</span> <span class="k3">*</span>titletext,    <span class="c">//pointer to text for title (may be 0 if no title desired)</span>
<span class="number"> 201</span>        <span class="k1">char</span> <span class="k3">*</span>body_text_src,    <span class="c">//pointer to original cstring for body of text (may be 0 if no body desired)</span>
<span class="number"> 202</span>        <span class="k1">int</span> left,      <span class="c">//left edge on parent window</span>
<span class="number"> 203</span>        <span class="k1">int</span> top,      <span class="c">//top edge on parent window</span>
<span class="number"> 204</span>        <span class="k1">int</span> right,      <span class="c">//right edge on parent window</span>
<span class="number"> 205</span>        <span class="k1">int</span> bottom,      <span class="c">//bottom edge on parent window (may be 0 if you want bottom set to end of body of text)</span>
<span class="number"> 206</span>        <span class="k1">int</span> gray<span class="k2">)</span>
<span class="number"> 207</span><span class="k2">{</span>
<span class="number"> 208</span>  <span class="k1">int</span> err<span class="k2">;</span>
<span class="number"> 209</span>
<span class="number"> 210</span>  err <span class="k3">=</span> _zz_wordwrap<span class="k2">(</span>body_text_src, bodyfont, right-left-TEXTBOXMARGIN<span class="k3">*</span><span class="n">2</span>, <span class="k3">&amp;</span>textbox-&gt;wrapbox<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</span>  <span class="k1">if</span><span class="k2">(</span>err<span class="k2">)</span>
<span class="number"> 212</span>  <span class="k2">{</span>
<span class="number"> 213</span>    <span class="k1">return</span> err<span class="k2">;</span>
<span class="number"> 214</span>  <span class="k2">}</span>
<span class="number"> 215</span>
<span class="number"> 216</span>  _zz_init_frame<span class="k2">(</span>left, top,  right, bottom, <span class="c">//was _zz_init_textbox(?)</span>
<span class="number"> 217</span>    titletext, titlefont,
<span class="number"> 218</span>    textbox, parentwin<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span>  textbox-&gt;gray <span class="k3">=</span> gray<span class="k2">;</span>
<span class="number"> 220</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 221</span><span class="k2">}</span>
<span class="number"> 222</span>
<span class="number"> 223</span><span class="k1">void</span> zz_draw_textbox<span class="k2">(</span>ZZ_TEXTBOX <span class="k3">*</span>frame<span class="k2">)</span>
<span class="number"> 224</span><span class="k2">{</span>
<span class="number"> 225</span>  <span class="k1">int</span> x<span class="k2">;</span>
<span class="number"> 226</span>  <span class="k1">int</span> y<span class="k2">;</span>
<span class="number"> 227</span>  <span class="k1">int</span> width<span class="k2">;</span>
<span class="number"> 228</span>  <span class="k1">int</span> height<span class="k2">;</span>
<span class="number"> 229</span>
<span class="number"> 230</span>  <span class="k1">int</span> row<span class="k2">;</span>
<span class="number"> 231</span>  <span class="k1">int</span> limit<span class="k2">;</span>
<span class="number"> 232</span>  <span class="k1">int</span> indx<span class="k2">;</span>
<span class="number"> 233</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 234</span>  <span class="k1">int</span> gray<span class="k2">;</span>
<span class="number"> 235</span>
<span class="number"> 236</span>  <span class="k1">if</span><span class="k2">(</span>frame-&gt;gray <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>  <span class="c">//force default</span>
<span class="number"> 237</span>    gray <span class="k3">=</span> UNSELECTED<span class="k2">;</span>  <span class="c">//force washed out appearance</span>
<span class="number"> 238</span>  <span class="k1">else</span>
<span class="number"> 239</span>    gray <span class="k3">=</span> frame-&gt;window-&gt;grayout<span class="k2">;</span>
<span class="number"> 240</span>
<span class="number"> 241</span>  x <span class="k3">=</span> frame-&gt;framerect.left <span class="k3">+</span> frame-&gt;window-&gt;rect.left<span class="k2">;</span>
<span class="number"> 242</span>  y <span class="k3">=</span> frame-&gt;framerect.top <span class="k3">+</span> frame-&gt;window-&gt;rect.top<span class="k2">;</span>
<span class="number"> 243</span>  width <span class="k3">=</span> frame-&gt;framerect.right <span class="k3">-</span> frame-&gt;framerect.left<span class="k2">;</span>
<span class="number"> 244</span>  height <span class="k3">=</span> frame-&gt;framerect.bottom <span class="k3">-</span> frame-&gt;framerect.top<span class="k2">;</span>
<span class="number"> 245</span>
<span class="number"> 246</span>  <span class="c">//draw outline</span>
<span class="number"> 247</span>
<span class="number"> 248</span>  <span class="c">//top line (tapered at the ends)</span>
<span class="number"> 249</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 250</span>         y <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 251</span>         x <span class="k3">+</span> width <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 252</span>         y <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 253</span>         zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>DIMGRAY<span class="k2">]</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 254</span>
<span class="number"> 255</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 256</span>         y <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 257</span>         x <span class="k3">+</span> width <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 258</span>         y <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 259</span>               zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>BRIGHTGRAY<span class="k2">]</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 260</span>
<span class="number"> 261</span>  <span class="c">//bottom line</span>
<span class="number"> 262</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 263</span>         height <span class="k3">+</span> y <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 264</span>         x <span class="k3">+</span> width <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 265</span>         height <span class="k3">+</span> y <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 266</span>               zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>DIMGRAY<span class="k2">]</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 267</span>
<span class="number"> 268</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 269</span>         height <span class="k3">+</span> y <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 270</span>         x <span class="k3">+</span> width <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 271</span>         height <span class="k3">+</span> y <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 272</span>               zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>BRIGHTGRAY<span class="k2">]</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 273</span>
<span class="number"> 274</span>  <span class="c">//left line</span>
<span class="number"> 275</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 276</span>         y <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 277</span>         x <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 278</span>         y <span class="k3">+</span> height <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 279</span>               zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>DARKGRAY<span class="k2">]</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 280</span>
<span class="number"> 281</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 282</span>         y <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 283</span>         x <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 284</span>         y <span class="k3">+</span> height <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 285</span>               zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>LIGHTGRAY<span class="k2">]</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 286</span>
<span class="number"> 287</span>  <span class="c">//right line</span>
<span class="number"> 288</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x <span class="k3">+</span> width <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 289</span>         y <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 290</span>         x <span class="k3">+</span> width <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 291</span>         height <span class="k3">+</span> y <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 292</span>               zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>DARKGRAY<span class="k2">]</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 293</span>
<span class="number"> 294</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x <span class="k3">+</span> width <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 295</span>         y <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 296</span>         x <span class="k3">+</span> width <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 297</span>         height <span class="k3">+</span> y <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 298</span>               zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>LIGHTGRAY<span class="k2">]</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 299</span>
<span class="number"> 300</span>  <span class="k1">if</span><span class="k2">(</span>frame-&gt;titletext<span class="k2">)</span>
<span class="number"> 301</span>  <span class="k2">{</span>
<span class="number"> 302</span>    <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>frame-&gt;window-&gt;rect.left <span class="k3">+</span> frame-&gt;titlebox.left,
<span class="number"> 303</span>          frame-&gt;window-&gt;rect.top <span class="k3">+</span> frame-&gt;titlebox.top,
<span class="number"> 304</span>          frame-&gt;window-&gt;rect.left <span class="k3">+</span> frame-&gt;titlebox.right,
<span class="number"> 305</span>          frame-&gt;window-&gt;rect.top <span class="k3">+</span> frame-&gt;titlebox.bottom,
<span class="number"> 306</span>          zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>GRAY<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 307</span>
<span class="number"> 308</span>    <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>frame-&gt;titlefont, zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>BLACK<span class="k2">]</span>, <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span> frame-&gt;titlebox.left <span class="k3">+</span> frame-&gt;window-&gt;rect.left <span class="k3">+</span> <span class="n">5</span>,
<span class="number"> 309</span>      <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span> frame-&gt;titlebox.top <span class="k3">+</span> frame-&gt;window-&gt;rect.top, <span class="n">0</span>, frame-&gt;titletext<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 310</span>  <span class="k2">}</span>
<span class="number"> 311</span>
<span class="number"> 312</span>  <span class="k1">if</span><span class="k2">(</span>frame-&gt;wrapbox.bufferarray<span class="k2">)</span>
<span class="number"> 313</span>  <span class="k2">{</span>
<span class="number"> 314</span>    row <span class="k3">=</span> frame-&gt;window-&gt;rect.top <span class="k3">+</span> frame-&gt;textbox.top<span class="k2">;</span>
<span class="number"> 315</span>    width <span class="k3">=</span> frame-&gt;wrapbox.chars_width<span class="k2">;</span>
<span class="number"> 316</span>    limit <span class="k3">=</span> frame-&gt;wrapbox.numdestlines<span class="k2">;</span>
<span class="number"> 317</span>
<span class="number"> 318</span>    <span class="k1">for</span><span class="k2">(</span>indx <span class="k3">=</span> <span class="n">0</span>, i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> limit<span class="k2">;</span>indx<span class="k3">+</span><span class="k3">=</span>width,i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 319</span>    <span class="k2">{</span>
<span class="number"> 320</span>      <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>frame-&gt;wrapbox.textfont,
<span class="number"> 321</span>          zz_gui_colors<span class="k2">[</span>gray<span class="k2">]</span><span class="k2">[</span>BLACK<span class="k2">]</span>,
<span class="number"> 322</span>          frame-&gt;window-&gt;rect.left <span class="k3">+</span> frame-&gt;textbox.left,
<span class="number"> 323</span>          row,
<span class="number"> 324</span>          <span class="n">0</span>,
<span class="number"> 325</span>          <span class="k3">&amp;</span>frame-&gt;wrapbox.bufferarray<span class="k2">[</span>indx<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 326</span>      row<span class="k3">+</span><span class="k3">=</span>frame-&gt;wrapbox.fontheight<span class="k2">;</span>
<span class="number"> 327</span>    <span class="k2">}</span>
<span class="number"> 328</span>  <span class="k2">}</span>
<span class="number"> 329</span><span class="k2">}</span>
<span class="number"> 330</span>
<span class="number"> 331</span><span class="k1">int</span> zz_init_scrolltext<span class="k2">(</span>  ZZ_SCROLLTEXT <span class="k3">*</span>textbox,    <span class="c">//textbox struct location</span>
<span class="number"> 332</span>      ZZ_WIN <span class="k3">*</span>parentwin,    <span class="c">//parent window struct location</span>
<span class="number"> 333</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>scrollfont,  <span class="c">//font for body of text (may be 0 if no body desired)</span>
<span class="number"> 334</span>      <span class="k1">char</span> <span class="k3">*</span>body_text_src,    <span class="c">//pointer to original cstring for body of text (may be 0 if no body desired)</span>
<span class="number"> 335</span>      <span class="k1">int</span> left,      <span class="c">//left edge on parent window</span>
<span class="number"> 336</span>      <span class="k1">int</span> top,      <span class="c">//top edge on parent window</span>
<span class="number"> 337</span>      <span class="k1">int</span> right,      <span class="c">//right edge on parent window</span>
<span class="number"> 338</span>      <span class="k1">int</span> bottom,      <span class="c">//bottom edge on parent window (will be rounded from 0.5 lines of text to provide vertical alignment)</span>
<span class="number"> 339</span>      <span class="k1">int</span> scrollwidth,    <span class="c">//how wide the strings can be in pixels (horizontal scroll necessary if wider than right-left)</span>
<span class="number"> 340</span>      <span class="k1">int</span> gray<span class="k2">)</span>
<span class="number"> 341</span><span class="k2">{</span>
<span class="number"> 342</span>  <span class="k1">int</span> err<span class="k2">;</span>
<span class="number"> 343</span>  <span class="k1">float</span> rnder<span class="k2">;</span>
<span class="number"> 344</span>  err <span class="k3">=</span> _zz_wordwrap<span class="k2">(</span>body_text_src, scrollfont, scrollwidth, <span class="k3">&amp;</span>textbox-&gt;wrapbox<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 345</span>  <span class="k1">if</span><span class="k2">(</span>err<span class="k2">)</span>
<span class="number"> 346</span>  <span class="k2">{</span>
<span class="number"> 347</span>    <span class="k1">return</span> err<span class="k2">;</span>
<span class="number"> 348</span>  <span class="k2">}</span>
<span class="number"> 349</span>  textbox-&gt;parent <span class="k3">=</span> parentwin<span class="k2">;</span>
<span class="number"> 350</span>  textbox-&gt;boxwidth <span class="k3">=</span> right-left<span class="k2">;</span>
<span class="number"> 351</span>  textbox-&gt;scrollrect.parent <span class="k3">=</span> parentwin<span class="k2">;</span>
<span class="number"> 352</span>  textbox-&gt;scrollrect.rect.left <span class="k3">=</span> left<span class="k2">;</span>
<span class="number"> 353</span>  textbox-&gt;scrollrect.rect.top <span class="k3">=</span> top<span class="k2">;</span>
<span class="number"> 354</span>  textbox-&gt;scrollrect.rect.right <span class="k3">=</span> right<span class="k2">;</span>
<span class="number"> 355</span>  rnder <span class="k3">=</span> bottom <span class="k3">-</span> top<span class="k2">;</span>
<span class="number"> 356</span>  rnder <span class="k3">/</span><span class="k3">=</span> textbox-&gt;wrapbox.fontheight<span class="k2">;</span>
<span class="number"> 357</span>  textbox-&gt;scrollrect.rect.bottom <span class="k3">=</span> rnder<span class="k2">;</span>
<span class="number"> 358</span>  textbox-&gt;scrollrect.rect.bottom <span class="k3">*</span><span class="k3">=</span> textbox-&gt;wrapbox.fontheight<span class="k2">;</span>
<span class="number"> 359</span>  textbox-&gt;gray <span class="k3">=</span> gray<span class="k2">;</span>
<span class="number"> 360</span>  err <span class="k3">=</span> <span class="k2">(</span>textbox-&gt;scrollrect.rect.bottom <span class="k3">-</span> top<span class="k2">)</span><span class="k3">/</span>textbox-&gt;wrapbox.fontheight<span class="k2">;</span>
<span class="number"> 361</span>  zz_init_scrollbar<span class="k2">(</span><span class="k2">(</span>textbox-&gt;scrollrect.rect.bottom <span class="k3">-</span> top<span class="k2">)</span><span class="k3">/</span>textbox-&gt;wrapbox.fontheight,textbox-&gt;wrapbox.numdestlines,ZZ_VERTICAL,<span class="k3">&amp;</span>textbox-&gt;vscroll,<span class="k3">&amp;</span>textbox-&gt;scrollrect<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 362</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 363</span><span class="k2">}</span>
<span class="number"> 364</span>
<span class="number"> 365</span><span class="k1">void</span> zz_do_scrolltext<span class="k2">(</span>ZZ_SCROLLTEXT <span class="k3">*</span>textbox<span class="k2">)</span>
<span class="number"> 366</span><span class="k2">{</span>
<span class="number"> 367</span>  <span class="k1">int</span> top<span class="k2">;</span>
<span class="number"> 368</span>  <span class="k1">int</span> len<span class="k2">;</span>
<span class="number"> 369</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 370</span>  <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">;</span>
<span class="number"> 371</span>  <span class="k1">int</span> hgt<span class="k2">;</span>
<span class="number"> 372</span>  zz_do_scrollbar<span class="k2">(</span><span class="k3">&amp;</span>textbox-&gt;vscroll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 373</span>  top <span class="k3">=</span> textbox-&gt;vscroll.topline<span class="k2">;</span>
<span class="number"> 374</span>  len <span class="k3">=</span> textbox-&gt;vscroll.items_in_window <span class="k3">+</span> top<span class="k2">;</span>
<span class="number"> 375</span>  hgt <span class="k3">=</span> textbox-&gt;wrapbox.fontheight<span class="k2">;</span>
<span class="number"> 376</span>  <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> <span class="k3">=</span> textbox-&gt;scrollrect.rect.top<span class="k2">;</span>
<span class="number"> 377</span>  <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>textbox-&gt;scrollrect.rect.left,textbox-&gt;scrollrect.rect.top,textbox-&gt;scrollrect.rect.right,textbox-&gt;scrollrect.rect.bottom,zz_gui_colors<span class="k2">[</span>SELECTED<span class="k2">]</span><span class="k2">[</span>WHITE<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 378</span>  zz_bevel<span class="k2">(</span>textbox-&gt;scrollrect.rect.left,
<span class="number"> 379</span>     textbox-&gt;scrollrect.rect.top,
<span class="number"> 380</span>           textbox-&gt;scrollrect.rect.right,
<span class="number"> 381</span>           textbox-&gt;scrollrect.rect.bottom,
<span class="number"> 382</span>     <span class="n">1</span>,
<span class="number"> 383</span>           textbox-&gt;parent,
<span class="number"> 384</span>           <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 385</span>  <span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span>top<span class="k2">;</span>i<span class="k3">&lt;</span>len<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 386</span>  <span class="k2">{</span>
<span class="number"> 387</span>    <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>textbox-&gt;wrapbox.textfont,zz_gui_colors<span class="k2">[</span>SELECTED<span class="k2">]</span><span class="k2">[</span>BLACK<span class="k2">]</span>, textbox-&gt;scrollrect.rect.left, <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a>, <span class="n">0</span>,<span class="k3">&amp;</span>textbox-&gt;wrapbox.bufferarray<span class="k2">[</span>i <span class="k3">*</span> textbox-&gt;wrapbox.chars_width<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 388</span>    <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> <span class="k3">+</span><span class="k3">=</span> hgt<span class="k2">;</span>
<span class="number"> 389</span>  <span class="k2">}</span>
<span class="number"> 390</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Thu, 15 May 2014 14:58:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I would like that feature to be vanilla as well, I didn&#39;t know we couldn&#39;t do it in A5.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felix-The-Ghost)</author>
		<pubDate>Fri, 16 May 2014 00:49:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here is the Agui class that does resizable text. It includes:<br />-WordWrap (greedy algorithm)<br />-Break on \n<br />-Single line mode (in this mode, it will ensure the line does not exceed the maxWidth and append a nice ellipsis right before it does if you desire)<br />-It can paint the lines of text left aligned, center aligned, or right aligned.</p><p>I use this for Agui&#39;s Label class (and buttons and other widgets too). The Label was intended to be as feature-rich as the Label in .NET.</p><p><a href="https://github.com/jmasterx/Agui/blob/master/include/Agui/ResizableText.hpp">https://github.com/jmasterx/Agui/blob/master/include/Agui/ResizableText.hpp</a><br /><a href="https://github.com/jmasterx/Agui/blob/master/src/Agui/ResizableText.cpp">https://github.com/jmasterx/Agui/blob/master/src/Agui/ResizableText.cpp</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Fri, 16 May 2014 17:45:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My opinion on this (and the HTML parser in the other thread) is that it&#39;s hard to get this routine to have just enough features for people to actually be able to use it while at the same time not being out of place for a mid/low-level library that Allegro is trying to be.</p><p>If this was really desired, I&#39;d rather add a <span class="source-code">al_draw_tokens<span class="k2">(</span>..., <span class="k1">void</span> <span class="k2">(</span><span class="k3">*</span>cb<span class="k2">)</span><span class="k2">(</span><span class="k3">*</span>out_x, <span class="k3">*</span>out_y, <span class="k3">*</span>out_width, <span class="k3">*</span>out_color, ...<span class="k2">)</span></span> which would tokenize the text and call the callback in order to do the line switching etc. Of course it still wouldn&#39;t do the multi-line drawing out of the box but it&#39;d be simpler to implement.</p><p>Either way, this seems like a good topic for a wiki article or something so people can just be pointed to it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 19 May 2014 20:08:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Actually, a low level function that could be useful for composing higher level ones in a layout library would be </p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> al_draw_character<span class="k2">(</span><span class="k1">const</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>,
   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color, <span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">int</span> character<span class="k2">)</span>
</pre></div></div><p> to draw a single character / unicode code point. This function would arguably be faster when doing word by word or letter by letter text output (as in some RPG&#39;s ,etc), than <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a></span>, etc. It would also enable, for example, alternative layouts such as lright to left or top to down writing, by allowing us to implement our own output functions for those.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Mon, 19 May 2014 22:38:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The problem with a function like that is that it doesn&#39;t respect kerning of the font.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 19 May 2014 22:44:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>true, though arguably one should be able to query that as well somehow...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Mon, 19 May 2014 23:19:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code">al_get_kerning<span class="k2">(</span><span class="k1">const</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">int</span> char1 , <span class="k1">int</span> char2<span class="k2">)</span><span class="k2">;</span></span>?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 19 May 2014 23:21:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah. It could return 0 in case of no kerning and negative in case of kerning. Also a <span class="source-code">al_get_character_width<span class="k2">(</span><span class="k1">const</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">int</span> codepoint<span class="k2">)</span><span class="k2">;</span></span> should be added then to complete the API (we can already get height, etc ccrom font-specific functions).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Tue, 20 May 2014 00:05:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What I did was create a &quot;text&quot; structure witch will have word, font and spacing info for regular and justified drawing. That way it can be built and stored instead of a string, for (presumably)faster drawing. It doesn&#39;t support \n&#39;s yet, but I&#39;ll work on it.</p><p>Full code, for anyone interested.
</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">struct</span> word<span class="k2">{</span>
<span class="number">  2</span>    std::string value<span class="k2">;</span>
<span class="number">  3</span>    <span class="k1">int</span> width<span class="k2">;</span>
<span class="number">  4</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">struct</span> <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">{</span>
<span class="number">  7</span>    std::vector<span class="k3">&lt;</span>word&gt; words<span class="k2">;</span>
<span class="number">  8</span>    <span class="k1">int</span> size<span class="k2">;</span>
<span class="number">  9</span>    <span class="k1">float</span> jSpaceSize<span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">struct</span> text<span class="k2">{</span>
<span class="number"> 13</span>    std::vector<span class="k3">&lt;</span>line&gt; lines<span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">float</span> spaceSize<span class="k2">;</span>
<span class="number"> 15</span>    <span class="k1">int</span> maxSize<span class="k2">;</span>
<span class="number"> 16</span>    <span class="k1">int</span> height<span class="k2">;</span>
<span class="number"> 17</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="k2">;</span>
<span class="number"> 18</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k1">void</span> drawtext<span class="k2">(</span>text t, <span class="k1">float</span> x, <span class="k1">float</span> y, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color, <span class="k1">bool</span> justified<span class="k2">)</span>
<span class="number"> 21</span><span class="k2">{</span>
<span class="number"> 22</span>    std::vector<span class="k3">&lt;</span>word&gt;::iterator it<span class="k2">;</span>
<span class="number"> 23</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>i <span class="k3">&lt;</span> t.lines.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 24</span>        <span class="k1">float</span> curx <span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 25</span>        <span class="k1">for</span><span class="k2">(</span>it <span class="k3">=</span> t.lines<span class="k2">[</span>i<span class="k2">]</span>.words.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>it<span class="k3">!</span><span class="k3">=</span>t.lines<span class="k2">[</span>i<span class="k2">]</span>.words.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>it<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 26</span>            <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>t.font, color, curx, y <span class="k3">+</span> t.height<span class="k3">*</span>i,<span class="n">0</span>,it-&gt;value.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>            curx <span class="k3">+</span><span class="k3">=</span> it-&gt;width<span class="k2">;</span>
<span class="number"> 28</span>            curx <span class="k3">+</span><span class="k3">=</span> justified?t.lines<span class="k2">[</span>i<span class="k2">]</span>.jSpaceSize:t.spaceSize<span class="k2">;</span>
<span class="number"> 29</span>        <span class="k2">}</span>
<span class="number"> 30</span>    <span class="k2">}</span>
<span class="number"> 31</span><span class="k2">}</span>
<span class="number"> 32</span>
<span class="number"> 33</span>
<span class="number"> 34</span>text buildText<span class="k2">(</span><span class="k1">const</span> string <span class="k3">&amp;</span>s, <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">int</span> maxSize, <span class="k1">int</span> maxLines<span class="k2">)</span>
<span class="number"> 35</span><span class="k2">{</span>
<span class="number"> 36</span>    std::stringstream ss<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>    text result<span class="k2">;</span>
<span class="number"> 38</span>    result.lines.clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>
<span class="number"> 40</span>    <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> curline<span class="k2">;</span>
<span class="number"> 41</span>    curline.words.clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>    curline.size <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 43</span>
<span class="number"> 44</span>    word curword<span class="k2">;</span>
<span class="number"> 45</span>    <span class="k1">bool</span> firstword <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span>    result.spaceSize <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_text_width"><span class="a">al_get_text_width</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <span class="s">" "</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>    result.maxSize <span class="k3">=</span> maxSize<span class="k2">;</span>
<span class="number"> 49</span>    result.font <span class="k3">=</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">;</span>
<span class="number"> 50</span>    result.height <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="k2">;</span>
<span class="number"> 51</span>
<span class="number"> 52</span>    <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>ss.eof<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 53</span>        ss <span class="k3">&gt;</span><span class="k3">&gt;</span> curword.value<span class="k2">;</span>
<span class="number"> 54</span>        curword.width <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_text_width"><span class="a">al_get_text_width</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>,curword.value.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>        <span class="k1">if</span><span class="k2">(</span>firstword<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 56</span>            curline.words.push_back<span class="k2">(</span>curword<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>            curline.size <span class="k3">+</span><span class="k3">=</span> curword.width<span class="k2">;</span>
<span class="number"> 58</span>            firstword <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 59</span>        <span class="k2">}</span>
<span class="number"> 60</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>curline.size <span class="k3">+</span> curword.width <span class="k3">+</span> result.spaceSize <span class="k3">&lt;</span> maxSize<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 61</span>            curline.words.push_back<span class="k2">(</span>curword<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 62</span>            curline.size <span class="k3">+</span><span class="k3">=</span> curword.width <span class="k3">+</span> result.spaceSize<span class="k2">;</span>
<span class="number"> 63</span>        <span class="k2">}</span>
<span class="number"> 64</span>        <span class="k1">else</span><span class="k2">{</span>
<span class="number"> 65</span>            curline.jSpaceSize <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 66</span>            <span class="k1">for</span><span class="k2">(</span>std::vector<span class="k3">&lt;</span>word&gt;::iterator it <span class="k3">=</span> curline.words.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>it<span class="k3">!</span><span class="k3">=</span> curline.words.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>it<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 67</span>                curline.jSpaceSize <span class="k3">+</span><span class="k3">=</span> it-&gt;width<span class="k2">;</span>
<span class="number"> 68</span>            <span class="k2">}</span>
<span class="number"> 69</span>            curline.jSpaceSize <span class="k3">=</span> maxSize <span class="k3">-</span> curline.jSpaceSize<span class="k2">;</span>
<span class="number"> 70</span>            curline.jSpaceSize <span class="k3">/</span><span class="k3">=</span> curline.words.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 71</span>
<span class="number"> 72</span>            result.lines.push_back<span class="k2">(</span>curline<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 73</span>            curline.size <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 74</span>            curline.words.clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 75</span>            curline.words.push_back<span class="k2">(</span>curword<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 76</span>            curline.size <span class="k3">+</span><span class="k3">=</span> curword.width<span class="k2">;</span>
<span class="number"> 77</span>        <span class="k2">}</span>
<span class="number"> 78</span>    <span class="k2">}</span>
<span class="number"> 79</span>    <span class="k1">if</span><span class="k2">(</span>curline.size<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 80</span>        result.lines.push_back<span class="k2">(</span>curline<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 81</span>    <span class="k2">}</span>
<span class="number"> 82</span>    <span class="k1">while</span><span class="k2">(</span>result.lines.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span> maxLines<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 83</span>        result.lines.pop_back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 84</span>    <span class="k2">}</span>
<span class="number"> 85</span>    <span class="k1">return</span> result<span class="k2">;</span>
<span class="number"> 86</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Cassio Renan)</author>
		<pubDate>Mon, 26 May 2014 06:36:43 +0000</pubDate>
	</item>
</rss>
