Thread Tk::Font::measure ist zu langsam (9 answers)
Opened by betterworld at 2005-07-24 17:03

betterworld
 2005-07-24 17:03
#44243 #44243
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Hallo.

Ich moechte mit Tk einen HTML-Renderer schreiben, und dazu wollte ich von jedem einzelnen Wort die Breite (abhängig von der Schriftart) bestimmen.

In der Doku habe ich dazu die Funktion "measure" in Tk::Font gefunden. Nun habe ich aber widerfahren müssen, dass sie verdammt langsam ist. Und was mich sehr wundert, ist:
1) Es dauert zwar sehr lange, viele Worte auszumessen, aber das Zeichnen der Wörter in ein Canvas passiert fast instantan, also schnell.
2) Auch dauert es nicht lange, wenn man statt der einzelnen Woerter die Verkettung ausmisst.
3) esskar sagt, auf Windows geht es schneller... (ich habe Linux, und einen amd600)

Hier ist ein Script, das das Problem illustriert:
Code: (dl )
1
2
3
4
5
use Tk;
use Tk::Font;
my $w=MainWindow->new;
my $f=$w->Font;
$f->measure("hallo") for 0..399
Für diese 400 Mal rendern brauche ich ca. eine halbe Minute.

Hier ein Beispiel zu Punkt (2) oben:
Code: (dl )
1
2
3
4
5
use Tk;
use Tk::Font;
$w=MainWindow->new;
$f=$w->Font;
$f->measure("hallo" x 400)
(Sekundenbruchteil)

Weiß jemand eine Erklärung, oder sogar eine bessere Lösung?
Ich habe überlegt, alle Buchstaben einzeln auszumessen und die Ergebnisse zu speichern, aber das ist unschön und könnte Probleme mit Kerning geben.

Noch eine Frage: Warum braucht man ein Widget, um eine Font zu erzeugen oder auszumessen?

Danke.\n\n

<!--EDIT|betterworld|1122211071-->

View full thread Tk::Font::measure ist zu langsam