[SDL] How to draw text in some determined area, doing auto wrap
nbs at sonic.net
Thu Sep 5 14:32:01 PDT 2002
On Thu, Sep 05, 2002 at 02:19:03PM -0700, Charles Wardlaw wrote:
> > PS: We use python+SDL and pygame. So solutions using them are
> > preferable :)
> Well, the only real way to do this is manually by calculating how many
> characters can fit into a rectangle. I'll tell you now: skip the TTF
> font stuff and use monospace bitmap fonts. Non-monospace fonts require
> a bit more calculation.
Well, kinda. If you use proportionally-spaced fonts, you can just use
SDL_TTF to render one word at a time:
For each word, examine whether we'll be going off the edge if we draw that
word at the current cursor position. If not, draw the word, and move
the cursor's X position over that far.
If it will, first reset the cursor's X position to the left edge,
and move the cursor's Y position down one line. THEN draw the word,
and move the cursor's X position over that far.
The one special case is when a SINGLE particular word is too long to
fit on one line:
supercalifragolisticexpialadocious [no idea how to spell that ;^) ]
In that case, you could have some 'special case' where it then draws the
word one letter at a time, and breaks it up when one of the LETTERS would
be past the right edge.
The difference between doing this 'one word at a time' word-wrap vs.
just blitting the entire word is how many times you blit.
(Once you've blit a word, you WILL end up using it, unless you've gone
below the _bottom_ boundary of where you want your text to go...
then you're just screwed! :) )
If you don't think your text will be longer than one line _most_ of the
time, you can just render it all as one sentence first:
The quick brown fox.
If that's too wide to fit, THEN you try doing it one.. word.. at.. a.. time.
More information about the SDL