2013-07-25 15 views
6

Ho appena iniziato a utilizzare SDL2_ttf. Ho capito come ottenere un testo sullo schermo con TTF_RenderText_Blended, ma come faccio a farlo per fare interruzioni di riga e avvolgimento automatico?Come fare line-break e line-wrapping con SDL-TTF?

  1. Non sembra supportare \n; crea semplicemente uno spazio invece di scendere una linea. C'è un modo per aggiungere supporto per questo? In particolare, utilizzando l'altezza della riga corretta del testo, non più chiamate a RenderText con coordinate Y diverse.
  2. Dato una coordinata X, Y e una larghezza, come posso farla scendere automaticamente una linea ogni volta che viene raggiunta tale larghezza (rottura tra le parole)?

risposta

18

Invece di utilizzare TTF_RenderText_Blended, utilizzare TTF_RenderText_Blended_Wrapped. Prende parametro addizionale: larghezza in pixel dopo il quale il testo si romperà nella riga successiva.

+0

È quella parte della libreria standard? Non riesco a trovare alcuna documentazione su di esso. Se esiste, è dolce. – mpen

+0

È all'interno dell'ultima SDL_ttf. Non riesco a trovare la documentazione corretta (non so perché non ci sia alcun riferimento a questo), ma posso assicurarti che funziona. – Mars

+0

Deve essere in VCS quindi ..... non esiste nelle fonti 2.0.11. Hrm ... Ho appena scaricato 2.0.12 ed è lì. Eccezionale. – mpen

2

SDL_TTF non esegue il wrapping, è necessario scrivere il proprio.

TTF_Font* ttf; 
TTF_SizeText(ttf, "Hello World", &w, &h); 

fornisce la larghezza e l'altezza di una stringa.

+0

Speravo in qualcosa di un po 'più approfondito, ma credo di poter scrivere la mia classe di font manager. – mpen

+0

Posso provarlo con un po 'di codice, se vuoi. C o C++? Ho sempre diviso i messaggi lunghi in alcuni brevi. – parkydr

+0

C#, in realtà. Sto scrivendo un wrapper su SDL2. Non è necessario scrivere alcun codice, volevo solo essere a conoscenza di eventuali insidie. L'unica cosa che non riesco a capire come fare adesso è il kerning. – mpen