DGL https://delphigl.com/forum/ |
|
TextSuite https://delphigl.com/forum/viewtopic.php?f=13&t=8103 |
Seite 1 von 1 |
Autor: | Lossy eX [ Do Jan 25, 2007 10:11 ] |
Betreff des Beitrags: | TextSuite |
Lang lang ist es her. Und wie in der Software Entwicklung so üblich hat alles eine andere Wendung genommen als zu Anfang vermutet oder geplannt war. Sehr zur Freude der Platformunabhängigkeit hat alles einen gehörigen Schlag SDL bekommen. Da die Projekte immer noch nicht tot sind will ich mal ein kleines Update bringen. TextSuite Das dürfte wohl das Interessanteste von Allem werden. Von dem Ursprünglich vorgestelltem externen Programm habe ich mich recht weit verabschiedet und einen neuen Weg gewählt. Der Grund dafür ist recht einfach. Kurz nachdem ich dieses Tool vorgestellt habe ist mir klar geworden, dass ich eine Sache nicht bedacht habe. Und zwar die Fehlende UNICODE Unterstützung. Wenn ich schon etwas von Grund auf neu mache, dann sollte ich dies wenigstens so machen, dass ich es in einem Jahr nicht wieder neu schreiben muss. Und da könnte die Unterstützung von bis zu 65536 Buchstaben (das 256 Fache) durchaus ein geringes Problem darstellen. Da es normal keinen Sinn macht alle Buchstaben von Hause aus zu erstellen werden die Buchstaben erst dann erstellt sobald sie benötigt werden. Um Verzögerungen wärend des Zeichnen zu vermeiden kann man aber zu Begin auch schon einzelne Buchstaben oder Buchstabenbereiche erstellen lassen. Derzeit basiert die Erstellung der Buchstaben noch vollständig auf SDL. Aber dort eine windowsspezifische Erstellung zu ermöglichen sollte sich recht einfach und unkompliziert gestalten. Etwas worauf ich recht viel Wert lege und wodurch das alles erst richtig Sinn macht ist das Post Processing der erstellten Buchstaben. Dieses PostProcessing wird direkt nach dem Erstellen eines Fonts definiert und bleibt so lange gültig bis es verändert wird. Durch die Verwendung einer sehr sehr einfachen Klassenstruktur steht es jedem Frei sein eigenes PostProcessing zu schreiben und diese Willenlos miteinander zu kombinieren. Über die Geschwindigkeit des Erstellens kann ich so noch keine Aussage treffen, da ich die Zeit noch nicht gemessen habe. Ich habe bei meinen Codes vorrangig auch erst einmal auf Funktionalität gesetzt anstelle auf geschwindigkeit zu setzten. Wobei die SDL Funktion zum Erstellen des geblendeten Textes außerhalb meines Wirkungskreises liegt. Aber bei meinen Codes besteht durchaus noch die Möglichkeit etwas zu optimieren. Folgender Code beinhaltet die Erstellung der Fonts des unten angehangenen Bildes. Das Bild ist aufgrund der Weiterentwicklung der Bibliothek nicht mehr existent oder relevant. Der nachfolgende Code ist nehr mehr aktuell oder funktionsfähig. Er dient lediglich nur noch zur Verdeulichung der Entwicklung, die der Bibliothek wiederfahren ist. Code:
Was mir persönlich noch nicht so gut gefällt ist das Schriftbild. Derzeit stütze ich mich nur auf den Advancewert den ich von SDL bekomme. Aber in meinen Augen sind die Abstände zwischen einigen Zeichen sehr ungünstig. Dafür hatte ich aber schon mal eine Testanwednung geschrieben die dies zu mindest verbessern sollte. Aber das muss ich erst noch im "großen Stil" implementieren und schauen ob mein Plan aufgeht. Aber ich bin recht zuversichtlich. Aber auch wenn das Ergebniss schon recht brauchbar aussieht ist leider noch sehr viel zu tun um auch ein sinnvolles und brauchbares Handling der Fonts zu ermöglichen. Meinungsthema und Anregungen etc. Beispielbilder Dokumentation Download der Bibliothek und der Beispiele |
Autor: | Lossy eX [ Mi Mär 28, 2007 22:21 ] |
Betreff des Beitrags: | |
Um einmal den Updatezyklus von einem Jahr zu durchbrechen gibt es jetzt einmal ein bisschen was zum Anschauen. In erster Linie habe ich sehr viel an der Schnittstelle gefeilt und da ich die Fonts nun mal der breiten Öffentlichkeit zur Verfügung stellen möchte habe ich mich von meinen Klassen weitestgehend verabschiedet. Zu mindest was die Schnittstelle für den Prgrammierer angeht. Intern verwende ich diese immer noch. Aber nach außen hin ist die komplette Schnittstelle Procedural gehalten. Für mich als OOP Fanatiker eine wirklich schwere Entscheidung. Aber wenn dies zur Verbreitung beiträgt soll es mir recht sein. Alles was irgendwie Delphispezifisch ist wurde durch universelleres ersetzt aber ohne den Programmieraufwand/die Schwierigkeit zu erhöhen. Desweiteren musste ich alle von mir verwendeten Schnittstellen dynamisch laden. Das was der Smartlinker von Delphi erledigt hat funktioniert in einer DLL aber nicht. Und so kann ich nicht alles mögliche zwingend vorraussetzen. Also müssen zu Begin erst einmal alle benötigten Teile initialisiert werden. Außerdem habe ich sehr viel Zeit in die Schriftsetzung investiert. Dort unterscheide ich zwei Modis. Die einfache Textausgabe und die Textausgabe in einem Block. Die einfache Textausgabe kann logischerweise nicht Ansatzweise so viel wie die Ausgabe im Block. Aber für kleine einfache Texte ist das vollkommen ausreichend. In diesem Modus ist es möglich einen Text auszugeben. Dieser wird weder umgebrochen noch kann dieser unterschiedliche Stilelemente beinhalten. Man kann vor der Ausgabe eine Ausrichtung/Farbe/Font festlegen. Die Ausrichtung beeinflusst die Textausgabe anhand der gerade aktuell gesetzten Position. Die Ausgabe im Block ist etwas komplexer. Aber das Prinzip ist recht. Als erstes teilt man der TextSuite mit, dass man einen Block darstellen möchte, der folgende Ausmaße annehmen darf. Anschließend verhält sich die Ausgabe wie bei der Einfachen nur mit dem Unterschied, dass man beliebig die Fonts/Farben wechseln darf. Und anschließend einen Absatz, ein Wort oder einen Buchstaben in die Ausgabe schickt. Die Ausrichtung allerdings darf man nicht innerhalb eines Blockes ändern. Intern wird der Text dann zerlegt und verteilt. Je nach Modus werden vollständige Zeilen sofort ausgegeben oder erst dann wenn der Text abgeschlossen ist. Der Text wird automatisch oder durch manuelle Zeilenumbrüche umgebrochen. Die Zeilenhöhe pass sich automatisch an die verwendeten Fonts an. Als horizontale Ausrichtung stehen Links, Rechts, Zentriert oder Blocksatz zur Verfügung. Code:
Die Textausgabe auf den Bildern Code:
Folgendes werde ich in der nächsten Zeit noch umsetzen. Es sind meistens eher Kleinigkeiten oder aber features die im Verborgenen liegen. - Vertikale Ausrichtung (Top, Center, Bottom) - Einzeilige Blockausgabe mit Endellipsis, Abschneiden etc - Zeilen/Zeichenabstand plus X Pixel - Einstellbare feste Zeilenhöhe (Inklusive Baseline) - Generelles Offset innerhalb des Rechteckes um Skrollen zu ermöglichen - Einrückung des ersten Wortes - Zeilenhöhe von Leerzeilen (verringerte Höhe wie im Firefox) - Hoch/Unterstellen von Texten Und alles was sonst noch Sinn macht/machen könnte. |
Autor: | Lossy eX [ Fr Apr 20, 2007 08:29 ] |
Betreff des Beitrags: | |
Eigentlich hat sich nicht allzuviel getan was man unbedingt anpreisen müsste aber ich möchte euch das trotzdem nicht vorenthalten. Ich habe implementiert, dass man Fonts über die Windows GDI erstellen lassen kann. Dabei gibt es 2 Möglichkeiten. Entweder über den Fontnamen also "Tahoma" oder über die Möglichkeit direkt eine Datei angeben zu können. Wie man das bei SDL gewohnt ist. Leider bin ich dazu gezwungen eine undokumentierte Funktion von der GDI benutzen zu müssen, da ich sonst keine andere Wahl habe mir den Namen einer TTF Datei geben zu lassen. Außer ich habe das dringende Bedürftniss direkt die Datei zu parsen. Das habe ich aber nicht. Evtl später noch zusätzlich als Fallback. Ansonsten habe ich recht viel Zeit in die Textsetzung investiert. Und damit bin ich derzeit auf einem Stand der sich durchaus sehen lassen kann. Bei den Abständen zwischen den Buchstaben gibt es mittlerweile kaum noch Ausreißer. Das Schriftbild wirkt harmonisch und lässt sich selbst bei kleinen Fonts ohne Anstrengungen gut lesen. Auf dem Bild enthalten ist vor allem eine Gegenüberstellung von SDL und GDI. Dort habe ich 5 verschiedene Schrift/Stil-kombinationen ausgewählt. Besonders spannend ist das Tahoma (4te Gruppe). Wärend bei Arial ein direktes kursives Font existiert ist das bei Tahoma nicht der Fall. In diesem Falle muss SDL (FreeType) oder die GDI das Font selber neigen. Bei SDL sieht man in solch einem Fall sehr schön, dass immer wieder Buchstaben dabei sind die etwas aus dem Rahmen fallen. Das ist leider auch der Fall, wenn ich einen Text direkt mit SDL rendern lasse. In diesem Beispiel geht es aber noch. Habe ich schon schlimmer gesehen. Der GDI scheint so etwas nichts auszumachen. Denke aber das liegt an SDL_ttf. Ich möchte aber FreeType2 auch in echt unterstützen. Sonst haben sich nur kleinere Sachen oder interne Veränderungen ergeben. Texte können automatisch Vertikal ausgerichtet werden. Die Buchstabenbilder werden alle an einer zentralen Stelle auf die Texturen verteilt und dort habe ich es jetzt so gemacht, dass sich alle Fonts die gleiche Textur(en) teilen. 4-8 Fonts der Größe wie auf dem Bild sollten dabei problemlos in eine 512x512 große Textur passen. Selbst dann noch wenn man den kompletten Ansischriftsatz (255 Zeichen) erstellt. |
Autor: | Lossy eX [ Di Mai 29, 2007 09:39 ] |
Betreff des Beitrags: | |
Als erstes einmal vorweg. Dieses mal gibt es kein Bild sondern nur harte Fakten. Der Support für Windows 9x Betriebssystem wird irgendwann mal dafür sorgen, dass ich graue Haare bekomme. Auf der anderen Seite möchte ich auch nur ungern auf die Unterstützung der GDI verzichten. Ein Teufelskreis sozusagen.
Sollte interesse an der Speicherverwaltungsdemo bestehen kann ich diese später auch mal hochladen. Unter Umständen auch mit Code. |
Autor: | Lossy eX [ Sa Jun 23, 2007 21:04 ] |
Betreff des Beitrags: | |
Es ist mal wieder Zeit für das monatliche Update.
[edit] Link entfernt [/edit] Was für die Meisten wohl wesentlich interessanter sein dürfte. Ich denke wenn ich das nächste Mal etwas dazu veröffentliche, dann wird eine Betaversion enthalten sein. |
Autor: | Lossy eX [ So Jul 22, 2007 21:24 ] |
Betreff des Beitrags: | |
Wie ich im letztem Post angekündigt habe gibt es beim nächsten Mal Code. Also jetzt. Ein paar Anmerkungen zur Bibliothek. Es handelt sich dabei um eine Betaversion. Allerdings hat das Ganze noch keine Version. Und das aus gutem Grund. Denn falls die Struktur oder die Namen auf breite Ablehnung stoßen sollten dann kann ich das noch entsprechend anpassen. Und ein paar Stellen sind auch noch nicht ganz fertig. Diese Stellen aber keine große Einschränkung dar. Folgende Dinge müssen für die Version 0.8 noch getan werden. - Qualitätsverbesserung des Shadow und Border PostProcessors - tsImageBlur muss noch implementiert werden - Header für C/C++ - vollständige Hilfe der bestehenden Quellen (englisch) - Bugfixing?? (Neeeeee ) Ein paar Worte zum generellen Aufbau. Es ist eine OpenGL ähnliche Schnittstelle und auch der Aufbau könnte selbiges Vermuten. Als Allererstes müssen externe Biblioheken initialisiert/geladen werden. Das geschiet mit dem Aufruf von tsInit. Danach wird in jedem Fall ein Kontext benötigt. Dieser muss erstellt und gebunden werden. Ein Kontext ist wie bei OpenGL an einen Thread gebunden. Anschließen muss ein Renderer eingestellt werden. Es stehen TS_RENDERER_OPENGL und TS_RENDERER_NULL zur Verfügung. Das Ändern eines Renderers wärend Fonts existieren ist nicht zulässig. Danach muss derzeit ein Creator angegeben werden. Also SDL, GDI oder GDI mit dem Schriftnamen. Code:
Ist das alles erfolgreich gewesen, dann steht der Textausgabe nichts mehr im Wege. Dann muss ein Font erstellt werden und gebunden werden. Ein Font ist aber zwingend an einen Kontext gebunden. Alles Andere ergibt sich hoffentlich von alleine. Aber dafür biete ich auch reichlich Beispiele an. Ich verzichte derzeit auch bewusst auf mehr Dokumentation um zu sehen wo entstehen Probleme wenn das erste Mal damit zu tun hat. Feedback ist ausdrücklich erwünscht. Besonders wenn es um die Handhabung, Ungereimtheiten oder einfach irgendwelche seltsame Verhalten geht. Denn ich habe versucht die Schittstelle so einfach wie möglich zu gestalten. Und ich weiß nicht ob mir das überall gelungen ist. Positives Feedback ist aber auch gerne willkommen. Downloadlink im ersten Post. Roadmap Version 0.9 - Unicodekomplatiber Textparser - Right to Left Schriften - Flags für Blockausgabe - Tabulatoren Version 1.0 - Verschiedene Texturformate - Kerning - Große Buchstaben zerlegen - Streaming von Fonts |
Autor: | Lossy eX [ So Sep 02, 2007 14:41 ] |
Betreff des Beitrags: | |
Leider bin ich mit der Hilfe noch nicht so weit wie ich es gerne hätte aber dafür habe ich den Code jetzt auf einem Stand den ich so als 0.8 freigeben kann. Von möglichen Bugfixen mal abgesehen. Dadurch, dass die Hilfe noch nicht so weit ist bleibt die Versionsnummer 0.0.0 aber weiterhin erhalten. Änderungen an der Schnittstelle.
Donwloadlinks im ersten Post. |
Autor: | Lossy eX [ So Jan 27, 2008 11:57 ] |
Betreff des Beitrags: | |
Laut meiner Planung hatte ich knapp 3-4 Wochen für die Dokumentation angesetzt. Nun ja. Das Ende ist bereits vor knapp 3 Monaten verstrichen und die Dokumentation ist leider immer noch nicht fertig. Ich wollte eigentlich erst wieder Quellen veröffentlichen, wenn die Dokumentation auch fertig ist. Allerdings da in den existierenden Quellen einige teils gravierende Fehler enhalten sind gibt es doch noch mal eine Zwischenversion. Außerdem sind doch noch ein paar notwendige Features hinzugekommen. Features
Zusätzlich habe ich einige Fehler beseitigt. Eine vollständige Liste davon findet sich im Change Log meines Bugtrackers. Die Issues laufen allerdings bereits unter Version 0.8. Aber es war eigentlich nicht geplannt das da noch eine Zwischenversion erscheint deswegen wird sich das Log nur erweitern, was unter umständen später etwas verwirrend wirkt. Downloadlink im ersten Post. Die Dokumentation habe ich soweit auch schon online gestellt. Auf der Downloadseite befinden sich auch 2 Pakete die einmal die version enthalten die online zur Verfügung steht und ein Mal eine chm version der Dokumentation. Aber bitte nicht zu genau nehmen. Die Dokumentation befindet sich noch im Aufbau. Einige Artikel sind noch nicht fertig und andere will ich noch mal überarbeiten. Bzw muss das ganze noch korrektur gelesen werden und auf Sinn überprüft werden. |
Autor: | Lossy eX [ Mo Jan 05, 2009 11:40 ] |
Betreff des Beitrags: | |
Ich habe alle Beiträge über die TextSuite vom ursprünglichen Thema abgetrennt und daraus ein neues Thema gemacht. Im gleichen Atemzug habe ich das Meinungsthema getrennt und alle Links in den Beiträgen angepasst. Die Links auf die Bilder und die Downloads wurden entfernt. Der einzige gültige Downloadlink befindet sich im ersten Thema. Ebeneso ein Link auf eine Gallery. Diese ist aber noch ziemlich leer und besteht nur aus einem weiteren Link auf eine Verzeichnissansicht. Das werde ich aber noch anpassen und eine vernünftige Gallery mit Bildbeschreibungen erstellen. Außerdem habe ich beschlossen, dass die Arbeiten an der Version 0.8 abgeschlossen sind und ich diese gestern freigegeben hat. Entgegen meiner Ankündigen hat sich aber doch noch einiges geändert.
Der Downloadlink ist ab sofort immer im ersten Post zu finden. Genauso wie auch der Link auf die Beispielbilder. Außerdem habe ich die Dokumentation soweit fertig gestellt. Diese kann Online betrachtet werden bzw sie ist auch als CHM oder einzelne HTML Dateien downloadbar. Das f.a.q. Kapitel wird mit der Zeit erweitert bzw sollten vermehrt Fragen auftauchen werde ich die einzelnen Artikel entsprechend erweitern. |
Autor: | Lossy eX [ Do Feb 26, 2009 09:16 ] |
Betreff des Beitrags: | |
Ich habe gestern eine Entwicklerversion der TextSuite auf meinen Server geladen. Obwohl als Version dort schon 0.9.1 dev1 angegeben ist bestehen die Änderungen im Vergleich zur stabilen 0.8 einzig und allein in nur einem Feature. Dieses Feature soll es dem Entwickler ermöglichen die Texte ohne Tricks und ohne Fehler skaliert ausgeben zu können. Das Einzige was man zum Aktivieren tun muss ist den Parameter TS_CREATOR_ADD_RESIZING_BORDER der Creator zu setzen. Wenn dieser Parameter gesetzt ist, dann werden die Texturen alle zukünftig erstellten Buchstaben erweitert und optimiert. Beim Zeichnen wird dann auch speziell darauf reagiert. Dieser Parameter hat keinerlei Auswirkungen auf bereits erstellte Buchstaben. Entsprechend ist es wichtig diesen Parameter frühzeitig zu setzen. Im Idealfall direkt nach der Erstellung. Wenn man die Schriften nicht skalieren möchte sollte man den Parameter nicht setzen, da diese Anpassungen mehr Platz in der Textur benötigen. Code:
Downloads gibt es im Downloadverzeichniss meiner Seite. Die Version "0.9.1 dev1" ist die Gesuchte. Sollte interesse an einem Paketen bestehen in dem die Linux Bibliothek in Binärform enthalten ist kann ich diese noch nachreichen. Die "windows" codes funktionieren aber auch so direkt unter Linux (fpc). |
Autor: | Lossy eX [ So Sep 27, 2009 19:28 ] |
Betreff des Beitrags: | TextSuite Version 0.8.1 |
Nachdem jetzt schon seit ein paar Monaten die "0.9.2 dev1" auf meinem Server lag und ich eine Ankündigung vergessen habe werde ich das jetzt mal nachholen. Der eigentliche Inhalt der Entwicklerversion bestand überwiegend nur aus der Erweiterung um Fonts in 3D vernünftig darstellen zu können. Da das nicht so weltbewegend ist habe ich diese in den Stand 0.8 mit einfließen lassen. Aktuelle Version ist jetzt die 0.8.1. Die 0.9 dev ist somit von meinem Server wieder verwschwunden.
Downloads gibt es im Downloadverzeichniss meiner Seite. Updates/Aktualisierungen von meiner Seite/Bucktracker werden im Laufe des morgigen Tages folgen. |
Autor: | Lossy eX [ Mo Sep 28, 2009 11:22 ] |
Betreff des Beitrags: | |
Da habe ich wohl gestern beim Mergen eine Datei vergessen. Nun ja. Ich habe gerade noch mal die Pakete aktualisiert und jetzt sollte Delphi 2009/2010 wirklich gehen. Alles Andere war davon nicht betroffen. |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |