You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
6.0 KiB
HTML

<!menue>
//
//
//
<!h2a=llgfx_DrawText,llgfx_DrawText,llgfx_DrawText>
Zur Textausgabe gibt es eine Grundfunktion <wF>llgfx_DrawText() . Diese Funktionen schreibt einen String an die interne Text Position <wV>llgfx_text_xpos und <wV>llgfx_text_ypos . Nach jedem DrawText Aufruf sind <wV>llgfx_text_xpos und <wV>llgfx_text_ypos modifiziert, siehe weiter unten.
<wV>Methode: SRC_COLORKEY Blit*, jede beliebige Blitfunktion
<wV>Zielgrafik: Backbuffer*, jede beliebige Grafik
<wV>Zielposition: Beginnt mit <wV>llgfx_text_(xy)pos als linke obere Position für das erste Zeichen
<wV>Sourcegrafik: Fontgrafik gesetzt mit llgfx_SelectFont() oder interne 10px Schrift
<h3>Parameter:</h3>
<§t=Zielgrafik id §>: erzeugt durch llgfx_CreateGfx(), llgfx_LoadGfx(), 0=Backbuffer
<§t=Zeiger auf Textbuffer §>: Text muss 0 terminiert sein. Kann Returns und Tabs enthalten.
<§t=Optional: blitflag §>: Integer mit Blitterflags
<§t=Optional: Zeiger auf blitfx §>: Zeiger auf die eigene BlitFX Optionen.
<h3>Externe Referenzen</h3>
<pre>
<wT>int <wV>llgfx_text_xpos <- Start Position X setzen
<wT>int <wV>llgfx_text_ypos <- Start Position Y setzen
<wT>int <wV>llgfx_tab_pos[8] <- Tabpositionen setzen
<wT>int <wV>llgfx_tab_char[8] <- Füll Zeichen für Tabs setzen
<wT>int <wV>llgfx_text_format <- Ausrichtung: 0=links, 1=rechts, 2=Zentriert
<wT>bool <wV>llgfx_text_wrap <- true für textwrap modus An
<wT>float <wV>llgfx_text_xspacing <- default faktor ist 1.0f
<wT>float <wV>llgfx_text_yspacing <- default faktor ist 1.0f
<wT>s_rect <wV>llgfx_text_rect <- Ausgabebereich Breite und Höhe
</pre>
//
//
//
<!h2a=Positionierung,Positionierung,Positionierung>
<§t=<wF>llgfx_SetTextPos( <wT>int <wV>xpos, <wT>int <wV>ypos );§>
Alternativ können direkt die globalen Variablen gesetzt werden.
Die X/Y Textposition wird bei jedem DrawText Aufruf weitergeschoben. d.h. ein weiterer DrawText Aufruf hängt sich nach der letzten Stelle dazu.
Der Vorschub für X Positionen und für Y(nächste Zeile) bestimmt der Zeichensatz.
Diesen Vorschub kann man über zwei globale Variablen steuern: <wV>llgfx_text_xspacing und <wV>llgfx_text_yspacing.
//
//
//
<h2>Ausgabe Bereich und Textwrap</h2>
Standard Ausgabebereich ist der gesamte Bildschirm. Wie bei jeder anderen Grafikfunktion sind Positionierungen erlaubt die über den Bildschirm hinausgehen. Geht eine Textausgabe über den rechten Rand hinaus wird abgeschnitten.
Es gibt aber die Möglichkeit den Text für den rechten Rand umzubrechen, dazu setzt man die globale <§t=<wV>llgfx_text_wrap = <wT>true ;§>
<b>Rechten Rand setzen:</b>
Mit der globalen Variable llgfx_text_rect kann man die Breite für den text_wrap fixieren.
<§t=<wT>s_rect <wV>llgfx_text_rect§>
Beispiel:
<pre>
<wV>llgfx_text_rect.left = 0; ... \n oder Wrap kehrt zu dieser X-Position zurück
<wV>llgfx_text_rect.width = 100; ... Voreinstellung ist Inhalt von <wV>llgfx_displaywidth
<wV>llgfx_text_rect.height = 200; ... Voreinstellung ist Inhalt von <wV>llgfx_displayheight
</pre>
//
//
//
<h2>Tabulator Positionen</h2>
Für Tabulator Positionen gibt es ein Array aus 8 Integern für die Position relativ zu Start-X Position der Textausgabe.
Startet man die Textausgabe mit llgfx_test_xpos = 100, und das erste Array Element von llgfx_tab_pos ist 8, dann ist die Xposition für das nächste Zeichen nach einem TAB im Text <§t=StartX + ( 8 * Z<wS>(wdurschnittliche <wS>Zeichenbreite) * <wV>llgfx_text_xspacing )§>.
StartX ist der Inhalt von llgfx_text_xpos zum Zeitpunkt des Aufrufes.
Beim nächsten Tab wird auf das nächste Element vom llgfx_tab_pos Array zurückgegriffen.
Der interne Tab-Positions Zähler wird bei einem Return und bei einer neue DrawText Ausgabe zurückgesetzt.
<b>Rücksetzen des Tabulator Arrays:</b>
Array mit 0 löschen. <§t= <wF>memset( llgfx_tab_pos, 0, sizeof(llgfx_tab_pos)) §>.
//
//
//
<!h2a=Tabulator Beispiel,Tabulator Beispiel,Tabulator>
<div style="float:right"><!img1=DrawText_tab.gif,DrawText_tab_pos Screenshot></div><!rtf=DrawText_tab_pos>
//
//
//
<h2>Zeichensatz</h2>
Ein Zeichensatz in der LevelOne Engine ist eine Grafik mit den einzelnen Zeichen und einer zugehörigen Positionierungsdatei, die Map Datei. Die Zeichensatzgrafik wird über <wF>llgfx_LoadFont geladen.
Die Level One Engine benutzt eine <§t=<wT>s_font§> Struktur zur Verwaltung der Fontdateien. LoadFont erzeugt eine <wT>s_font struktur und liefert die Adresse zurück. Man kann beliebig viele Zeichensatz Grafiken laden.
Das Umschalten zwischen den Zeichensätzen erfolgt mit der Funktion <wF>llgfx_SelectFont().
<h2>Zeichensatz erzeugen</h2>
Das Windows Tool AsinDes erzeugt aus einem Systemfont eine Grafik mit zugehöriger Positionsliste. Die Zeichengröße und viele wichtige Parameter können in einem Wizzard eingestellt werden. Siehe Video DrawText_sample1.
Ein Font besteht aus zwei Teilen. Der Grafik selbst mit den Zeichen und die map Datei. Die Map Datei ist eine Liste von Rectangle Positionen der Zeichen.
Die Map Datei wird von AsinDes.exe erzeugt wenn man in der Positionlist auf den Button Save klickt.
Hier ein Video wie eine Fontgrafik mit Asindes erstellt wird: <!vid=CreateFont,Fontgrafik mit Asindes.exe erstellen>
Beispiel für ein 3-Zeichen Font um Rahmen zu zeichnen:
<!img1=CreateFont1.gif,Borderfont für das DrawText_sample1 Projekt>
//
//
//
<h2>Aufgelöste Sonderzeichen</h2>
<§t=<wH>'\n'§> ... llgfx_text_ypos wird um die Zeichensatz-Höhe aufaddiert, llgfx_text_xpos wird auf Startwert gesetzt
<§t=<wH>'\t'§> ... llgfx_text_xpos wird auf die nächste Tabulator Position gesetzt
<h2>Zeichen ausserhalb des Zeichensatzes</h2>
Zeichen die nicht in der Zeichensatz-Map definiert sind, werden ignoriert. Es passiert keine Änderung für die text_x-und yposition.
//
//
//
<!h2a=Hilfsfunktionen,Hilfsfunktionen,Hilfsfunktionen>
<!rtf=DrawText_functions>
<!h2a=llgfx_DrawText,llgfx_DrawText,llgfx_DrawText>
<!xml=llgfx_DrawText,function.xsl>
<!h2a=llgfx_LoadFont,llgfx_LoadFont,llgfx_LoadFont>
<!xml=llgfx_LoadFont,function.xsl>
<!h2a=llgfx_SelectFont,llgfx_SelectFont,llgfx_SelectFont>
<!xml=llgfx_SelectFont,function.xsl>