What is the best way to wrap text?
Monkey Forums/Monkey Programming/What is the best way to wrap text?
| ||
Hi monkey community. I was wondering if there was an easy way to wrap text to a certain width with CreateText? Thanks |
| ||
Split your text into words, after that you loop all words and increase the x-position that changes with the TextWidth() of the word. [monkeycode] splittedText:String[] = yourText.Split (" ") Local xpos:Float Local line:Int For Local i:Int = 0 Until splittedText.Length xpos += TextWidth (splittedText[i]) If xpos > YOUR_SPECIFIED_LINE_WIDTH xpos = 0 'Reset the xpos to 0 line += 1 'Go to next line End DrawText (splittedText[i], xpos, line*YOUR_LINE_HEIGHT) Next [/monkeycode] That's untested but I hope you get the idea. |
| ||
Or use Fontmachine. |
| ||
I downloaded fontmachine but I don't see any properties or funtions to wrap text. |
| ||
I have looked for about a day trying to find an easy way to wrap text with fontmachine. Do I need to calculate things myself, and insert a new line, or is there an easiesr way? |
| ||
For word wrapping when using FontMachine, Taiphoz added an overloaded method here to do it: http://www.monkeycoder.co.nz/Community/posts.php?topic=3207#33908 Also check out his extended BitMap class here: http://code.google.com/p/monkey-touch/source/browse/trunk/main.monkey [monkeycode]#Rem summary: Extension of Font Machine's BitmapFont Created so that others dont need to hack their font machine module. Should be removed soon once Ziggy writes his own more efficiant version. #END Class BitmapFont2 extends BitmapFont[/monkeycode] |
| ||
Thanks, I'll try it out |
| ||
Coming back to this, I realized that if you add a new line, it breaks the code and the text backs up on itself. Any solutions (besides not using ~n :)? |
| ||
Hey, I figured out a nice solution to make wrapping work with "~n". My change to the code adds two small lines. Just replace the SplitLines Method with below. Hope this helps someone: Method SplitLines:String[] (_text:String, _width:Int) 'new addition _text = _text.Replace("~n", "~n ") Local Tai_textdata:String[] = _text.Split(" ") 'temp vars for building lines. Local Tai_tmptext:String="" Local Tai_words:Int=Tai_textdata.Length() Local Tai_textlines:String[Tai_words] 'its a fudge. but number of lines will possibly match number of words. Local Tai_line:Int = 0 For Local Tai_word:Int = 0 To Tai_words-1 Tai_tmptext+=Tai_textdata[Tai_word]+" " If Self.GetTxtWidth(Tai_tmptext) < _width And Tai_tmptext.Contains("~n") = False 'added new condition Tai_textlines[Tai_line]=Tai_tmptext Else Tai_line+=1 Tai_tmptext=(Tai_textdata[Tai_word]+" ") End If Next Return Tai_textlines End Method |
| ||
ondesic, you mentioned "CreateText". Are you talking about fantomEngine here? Mojo does not have a CreateText command. If it is about fE, then look at the MultilineText example. |
| ||
My original post started that way a while ago, but I am using FontMachine in the example above. |
| ||
Sorry, i should have paid more attention to the timestamp. |
| ||
Darn, what I would really like is to be able to use AngelFont with it's DrawHTML() method BUT alow the text to have "~n" in it. Right now even if I use the SimpleTextBox(), if I have a newline anywhere,the text is just drawn on one line over and over again overlapping itself and making the text a muttle. Any help would sure be appreciated. |
| ||
Maybe contact Ziggy directly regarding Fontmachine. |
| ||
ondesic - have you tried the latest version of AngelFont? http://www.monkeycoder.co.nz/Community/posts.php?topic=141 |
| ||
Thank you. I saw that the first post was a year ago so I thought it was older. It seems to work now. Perfect!!! |