FullCircle/LibFullCircle/FontRendering

Aus C3MAWiki
Zur Navigation springenZur Suche springen

Die FullCircle/LibFullCircle soll auch Tools anbieten, um Text in einen Frame einzublenden. Konzeptuell würde ich das so einfach wie möglich halten. Ein "FontRenderer" bekommt einen Frame und legt darauf einen Text. Auf diese Weise kann man z.B. zuerst eine Sequenz mit einer Animation erstellen und dann frameweise einen Text einblenden. Alternativ kann natürlich auch eine Sequenz und ein längerer Text an den FontRenderer gegeben werden - dieser scrollt dann den Text durch die Sequenz.

TODO: Eine Sequenz sollte an eine andere Sequenz anhängbar sein, quasi

 big_seq = seq1 + seq2;

(Operator overloading FTW!)

Der Text sollte ein einfacher, gut lesbarer 8x8-Pixelfont (kleiner?) sein, der idealerweise in einem Header abgelegt ist. Wenn ein Text nicht in den Frame passt, muss eine Exception geworfen werden.

[PixelFont-Generator] Dies ist am gescheitestens (imho --Ollo (Diskussion) 19:49, 4. Jun. 2012 (CEST)) eine einigermaßen passende Schriftart für die Boxen zu basteln. Ein Parser für dieses Dateiformat existiert bereits.

Beispiel:

 FontRenderer* font_renderer = new FontRenderer(10 /* width */, 5 /* height */ );
 font_renderer->loadFont("/usr/local/fontFile1.xbm");
 try {
   font_renderer->write_text(
                             sequence,
                             0, // startposition x
                             0, // startposition y
                             "foobar" // text
                        );
 } catch (const fullcircle::RenderException& ce) {
   ...
 }

Der Font kann einfach im XBM-Format direkt in einem Header gespeichert werden, siehe Links.

Idee: XBM-Bilder können auch direkt in Frames gerendert werden, d.h. eine Methode "add_xbm" könnte direkt ein Bild im XBM-Format einblenden.


Alpha

Es kann Text erzeugt werden :-) Im Moment zwar nur zwei Zeichen, da das mit dem Lauftext noch nicht funktioniert. Das ganze sieht dann wie folgt aus:

Folgender Quelltext (aus fc-simpledemo entnommen) erzeugt das ganze:

	fullcircle::Sequence::Ptr seq(new fullcircle::Sequence(25,10,5));
	
	fullcircle::RGB_t color;
	color.red = color.green = color.blue = 0; 
	color.blue = 255; // now its blue ;-)
	
	fullcircle::FontRenderer::Ptr fr(new fullcircle::FontRenderer(10, 5));
	fr->load_font("font1.xbm"); // This file describes how to display each character
	fr->write_text(seq, 0, 0, "C3",color);


Setup

Aktueller Inhalt der oben genannten Datei font1.xbm. (Ich bin mir bewusst das es kein korrektes XBM-Format ist, aber vom Prinzip her das gleiche Speicherformat)

# KEIN Zeilenumbruch am Ende -> sonst hauts es auf die Nase!
{"65":[30,18,30,18,18,0,0,0,0,0,0,0,0,0,0,0],"66":[14,18,30,18,14,0,0,0,0,0,0,0,0,0,0,0],"67":[30,2,2,2,30,0,0,0,0,0,0,0,0,0,0,0],"68":[14,18,18,18,14,0,0,0,0,0,0,0,0,0,0,0],"77":[27,21,17,17,0,0,0,0,0,0,0,0,0,0,0,0],"51":[14,8,12,8,14,0,0,0,0,0,0,0,0,0,0,0],"name":"","copy":"","letterspace":"64"}

Links zum Thema