MeasureString und DrawString - GDI auf die harte Tour
-
hustbaer schrieb:
Ich glaube ich hab' schon geschrieben dass ich davon ausgehe dass Textverarbeitungen das ganze Layouting selbst machen, oder?
So, jetzt haben wir aber DirectWrite, und seit Deiner Bemerkung ist die Diskussion schon weiter fortgeschritten.
Schon sehr gut möglich, wahrscheinlich sogar vollkommen richtig, dass die Standard-Programme für Textverarbeitung das Layouting selber machen. Aber DirectWrite benutzen die sicher nicht, und deshalb müssen sie da schon selbst ran.DirectWrite enthält praktisch alle wichtigen Elemente einer Textlayout-Engine, nur eben die Implementierung von TABs, die über IncrementalTabStops hinausgeht (oder eine Beschreibung, wie das doch funktioniert), habe ich nicht finden können. Aber das habe ich ja schon geschrieben
-
WishfulThinking schrieb:
DirectWrite enthält praktisch alle wichtigen Elemente einer Textlayout-Engine
Glaube ich nicht. Eine Textverarbeitung kann ja nicht nur Fließtext. Und die anderen Features führen eben dazu, dass man alles komplett selber layouten muss. Denk mal an Tabellen, Fußnoten, Text der Bilder umfließt, Spalten usw. Das kann DirectWrite nicht und es würde auch keinen Sinn machen, es da zu implementieren. Wenn man sowas aber unterstützen will, muss man sich gleich um alles kümmern.
-
So weit gehen meine Ansprüche zum Glück nicht.
Dann werde ich mich jetzt daran machen, meine Layout-Engine auf der Basis von DirectWrite neu zu implementieren:
- Schriftwechsel (Schriftfamilie, Größe, Stil, Textfarbe und bei DirectWrite sogar mit Stretch)
- Zeilenabstand
- Sonderzeichen, die nicht zu einer Standard-Schrift gehören
- Zeilenumbruch mit optionalen Silbentrennungen
- TABs (mit Orientierung links, mitte, rechts)
- Horizontale Textabschnitt-Orientierung (links, rechts, mitte, verteilt), kann man wegen der fehlenden TAB implementierung nicht mit der DirectWrite-Funktion SetTextAlignment machen
- Vertikale Textabschnitt-Orientierung (oben, mitte, unten, verteilt)
Mit dieser Aufgabe werde ich mich jetzt zurückziehen und bedanke mich bei allen, die bei dieser Diskussion mitgemacht und auch den einen oder anderen Denkanstoß gegeben haben.