DGL
https://delphigl.com/forum/

TextSuite
https://delphigl.com/forum/viewtopic.php?f=14&t=8104
Seite 11 von 12

Autor:  Bergmann89 [ So Apr 22, 2012 22:19 ]
Betreff des Beitrags:  Re: TextSuite

Hey,

ich hab nen kleinen Bug. Und zwar werden bei mir bei Unicode-Strings die führenden Leerzeichen nicht mit gerendert. Bei tsTextGetWidthW werden sie aber mitberechnet. Der Fehler tritt mit Lazarus 32- und 64-bit auf.

MfG Bergmann.

Autor:  Lossy eX [ Mo Apr 23, 2012 10:30 ]
Betreff des Beitrags:  Re: TextSuite

Bergmann89 hat geschrieben:
ich hab nen kleinen Bug.
Nun. Das muss erst noch bewiesen werden. Nicht Alles was sich nicht so verhält wie man das erwartet muss ein Fehler sein.

Leider fehlen mir da ein bisschen die Randbedingungen um zu erkennen wie du die TextSuite benutzt. Aber ich vermute mal, dass du den Text im Blockmodus ausgibst. Und bei dem ist es so gewollt, dass Leerzeichen am Anfang und Ende einer jeden Zeile unterdrückt werden. Denn in diesem Modus nützt dir eigentlich die Information über die Breite des Textes nicht sonderlich viel. Bzw. ist eine Anforderung dieses Modies eben solche Sachen nicht wissen zu müssen.

Zum Erfragen der aktuellen Position innerhalb eines Blockes müsstest du tsTextGetWidth/Height mit nil als Parameter aufrufen. Dann wird die aktuelle berechnete Größe zurückgeliefert. Natürlich wird nur der Text berücksichtigt der aktuell schon übergeben wurde. Wobei ich gerade nicht genau weiß, ob das mit eine Ausrichtung anders als Oben/Links auch so richtig funktioniert.

PS: Neben den normalen Leerzeichen gibt es auch noch das No-Break Space (Dauerleerzeichen) innerhalb des Zeichensatzes. Ist auch Bestandteil des Ansizeichensatzes. Das wird natürlich nicht umgebrochen oder weggeschnitten.

Autor:  Bergmann89 [ Mo Apr 23, 2012 15:13 ]
Betreff des Beitrags:  Re: TextSuite

Ah, OK.
Wenn ich die führenden Leerzeichen durch 0xA0 ersetze, dann gehts. Danke :)

Autor:  Lossy eX [ Mo Apr 23, 2012 15:50 ]
Betreff des Beitrags:  Re: TextSuite

Ich wollte mit meiner Erklärung jetzt auch nicht sagen, dass du stumpf die Leerzeichen ersetzen sollst. Sondern schon, dass du dir Gedanken machen solltest was du damit bezwecken willst. Wenn das eine Einrückung am Absatzanfang werden soll. Okay. Genau dafür ist es gedacht. Die vorherige Verwendung von tsTextGetWidthW erzeugt bei mir aber dennoch eine leichte Verwirrung. Denn da Frage ich mich was du damit bezwecken wolltest. Da vermute ich, dass du einzeiligen Text ausgeben wolltest. Wofür wiederrum der Blockmodus nicht ausgelegt ist. Du verstehst mein Dilema?

Autor:  Bergmann89 [ Mo Apr 23, 2012 17:35 ]
Betreff des Beitrags:  Re: TextSuite

Hey,

das ganze ist für das Edit bei unserer GUI. Wenn man da paar Leerzeichen und dann erst Text eingibt, dann rendert er das falsch. Das ist zwar dort nur ein einzeiliger Text, aber ich hab trotzdem nen Block genommen, weil ich dann nich mehr viel rechnen muss. So sag ich einfach, das der Block so groß wie das Edit sein soll un der Text vertical zentriert gerendert werden soll. Fertig. Warum selber rechnen, wenn's schon implementiert ist? :mrgreen:
Das tsTextGetWidthW spielt nur eine Rolle, um die Position des Cursors zu ermitteln.

MfG Bergmann.

Autor:  Lossy eX [ Mo Apr 23, 2012 18:11 ]
Betreff des Beitrags:  Re: TextSuite

Na ja. Schön ist das sicherlich nicht gelöst. Wenn es nur einzeilig bleiben soll wäre das Sauberste wohl wirklich den Text nur einzeilig auszugeben. Da finden intern auch weniger Berechnungen statt und Leerzeichen bleiben erhalten ohne Manipulationen durchführen zu müssen. Sollte der Text abgespeichert werden muss der ja auch wieder zurück gerechnet werden.
Wenn es später auch mehrzeilig werden soll bliebe da nix anderes übrig. Wobei du dann eh Probleme bekommen würdest, denn da stößt du an die Grenzen des Blockmoduses. Der ist halt eher nur auf Ausgabe ausgelegt anstelle auf Berechnungen innerhalb. Da würde man sich wohl weniger Verrenkungen aufhalsen, wenn man die Zeilen selber zerlegen würde und die Zeilen einzeln im SingleLine ausgibt. Mache da intern auch nix Anderes. + immer die gleichen Berechnungen.

Autor:  Bergmann89 [ Di Jul 31, 2012 00:03 ]
Betreff des Beitrags:  Re: TextSuite

Hey,

ich hab mal wieder ein kleines Problem mit der TextSuite, wo ich nicht so recht weiter weiß. Und zwar wird der Text auf hellem Untergrund sehr ausgefranst (siehe Anhang; erste Zeile). Wenn ich den Text mehrmals übereinandern render sieht alles 1a aus (siehe Anhang; zweite Zeile). Aber alles doppelt und dreifach rendern ist nicht wirklich ne schöne Lösung. Ich hab auch schonma in die Doku geguckt, aber da find ich auch nich wirklich was, was mir weiter hilft. Gibts da ne Möglichkeit das Problem eleganter zu lösen?

MfG & Thx Bergmann.

Dateianhänge:
text.png
text.png [ 12.89 KiB | 11828-mal betrachtet ]

Autor:  Lossy eX [ Di Jul 31, 2012 09:18 ]
Betreff des Beitrags:  Re: TextSuite

Also ich würde mal spontan sagen, dass es entweder am Font oder am Renderer liegt, der die Glyphen für die TextSuite erzeugt. Man kann ja recht gut erkennen, dass gerade Linien klar zu erkennen sind und keine Transparenz aufweisen. Nur bei Rundungen wird die Transparenz so übermäßig stark, dass die Pixel kaum noch zu erkennen sind. Von daher denke ich, dass der Renderer die Fonts sehr genau abzubilden versucht oder die Stärke der Fonts scheinbar extrem dünn ist. Dadurch werden wohl bei den Rundungen die Pixel nur 1/10tel des Pixel belegen wodurch es kaum noch sichtbar ist. Die GDI hat spezielle Technicken eingebaut mit denen solche Fälle vermieden werden sollen. Also überprüfe mal ob das Font zu dünn ist, ob es bei anderen Fonts auch auftritt. Und wenn alles nix nützt könntest du da wohl eventuell was mit einem PostProcessor machen. Durch alle Pixel gehen und entsprechend den Alphakanal manipulieren damit dessen transparenz nicht mehr so stark ist. Es sei denn es ist komplett transparent. Das wäre dann vom Effekt her wie doppelt zeichnen. Nur passiert das dann nur einmalig beim Erstellen der Fonts. Aber ich würde erst mal die anderen Sachen versuchen rauszufinden. Denn irgendeinen Grund muss es ja schließlich haben.

Autor:  Lord Horazont [ Di Jul 31, 2012 11:10 ]
Betreff des Beitrags:  Re: TextSuite

Sieht aus wie falscher Blending-Modus. Versuch mal GL_ONE, GL_ONE_MINUS_SRC_ALPHA.

grüße

Autor:  Lossy eX [ Di Jul 31, 2012 12:17 ]
Betreff des Beitrags:  Re: TextSuite

Für mich sieht das bereits nach GL_ONE, GL_ONE_MINUS_SRC_ALPHA aus. Denn es ist ja nicht die gesammte Schrift davon betroffen sondern nur einzelne Pixel. Bei den Pixeln ist zwar auch zu erwarten das die transparenter sind. Nur sollte das nicht so extrem sein. Dürfte im Übrigen mit schwarzer Schrift auf weißem Grund auch ähnlich sein.

Autor:  Bergmann89 [ Di Jul 31, 2012 12:54 ]
Betreff des Beitrags:  Re: TextSuite

Hey,

blending Mode ist (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA). Bei schwarzer Schrift auf weißem Hintergrund tritt der Effekt auch auf, aber da ist es nicht ganz so schlimm. Ich hab zum Test mal das AA der TextSuite deaktiviert. Bis jetzt sieht es gut aus. Mal sehen ob sich da noch irgendwo Nachteile ergeben...

MfG Bergmann.

Autor:  Lossy eX [ Di Jul 31, 2012 15:24 ]
Betreff des Beitrags:  Re: TextSuite

Zitat:
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA

Stimmt. Das ist ja normal der "übliche" Blendmodus. Dann ziehe ich meine Aussage zurück und behaupte das Gegenteil. Ist schon ewig her, dass ich das letzte mal opengl programmiert habe.

AntiAliasing: Das ist nicht das AntiAliasing der TextSuite sondern das des FontRenderers. Die TextSuite macht eigentlich nix anderes als die Glyphen der einzelnen Schriften zu sammeln, zu verwalten und als Quads zu zeichnen. Wenn man von den Effekten absieht.

Nebeneffekte: Da stellt sich jetzt die Frage wie du das gemacht hast. Ob du das nur für das einzelne Font deaktiviert hast oder ob du es gleich Global deaktiviert hast.
- Global: Dann fehlt bei allen Schriften jegliche Kantenglättung. Was in der heutigen Zeit eigentlich nicht mehr Standard ist und weswegen man ja primär zu texturbasierten Schriften gegriffen hat. Und je nachdem wie empfindlich der Benutzer ist mag er das als störend empfinden. Besonders wenn die Schrift größer wird nimmt man das stärker war.
- Einzeln: Das betrifft dann zwar nur eine Schrift. Aber bedeutet auch, dass andere Schriften noch Kantenglättung haben. MIscht man diese Schriften in der gleichen Anwendung (noch schlimmer in der gleichen Szene oder Textblock), dann fällt das recht stark auf. Neben dem Effekt, dass so etwas verwirrend/verstörend wirken kann wirkt es aber laienhaft. Selbst, wenn die Codestruktur genial ist wirkt es zusammengeschustert. Denn die Benutzer sehen nicht den Code sondern nur das Ergebniss.
Weiterer Nebeneffekt: Bei sehr kleinen Buchstaben kann es sein, dass die Buchstaben etwas unförmig werden. Dadurch, dass bei Kantenglättung auch halbe Pixel als Schattierung möglich sind wirken Rundungen wesentlich länger rund als mit vollen Pixeln.

Autor:  Bergmann89 [ Di Jul 31, 2012 22:26 ]
Betreff des Beitrags:  Re: TextSuite

Hey,

ich hattes es global deaktiviert. Jetzt hab ich es aber beim erstellen des Fonts deaktiviert. Bei den kleinen Fonts sieht alles perfekt aus. Die von dir beschriebenen Nebeneffekte treten auch nicht auf (mal sehen ob das so bleibt). Sehr große Texte sehen aber - wie erwartet - unsauber aus. Deshalb hab ich mir den Font in ne Klasse gewrappt, sodass ich die Einstellungen relativ schön an und abschalten kann und der Font dann jedesmal neu erzeugt wird, wenn das nötig ist. Da kann ich dann das AA per Hand an oder abschalten.
Vlt findet sich ja dafür später noch ne bessere Lösung, aber so geht es erstmal und liefert die gewünschten Ergebnisse. Danke für die Hilfe :)

MfG Bergmann.

Autor:  Lossy eX [ Mi Aug 01, 2012 08:22 ]
Betreff des Beitrags:  Re: TextSuite

Nun ja. Ich habe maximal geholfen zu erkennen was da passiert. Du hast ja deine ganze eigene Problembeseitigung dafür gefunden... Die von mir beschriebenen Nebeneffekte hängen immer vom jeweiligen Betrachter ab. Und da gibt es halt empfindlichere und weniger empfindliche.

[edit] Die globale Einstellung wirkt sich im übrigen auch nur auf Fonts aus die im Anschluss erstellt wurden. Sollte bereits ein Font erzeugt worden sein so wird deren Einstellung natürlich nicht verändert.

Autor:  Lord Horazont [ Mi Aug 01, 2012 10:09 ]
Betreff des Beitrags:  Re: TextSuite

Dummdidumm, hast du GL_ONE, GL_ONE_MINUS_SRC_ALPHA probiert? ;)

grüße

Seite 11 von 12 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/