axeljaeger
24-08-2002, 11:17
Ich programmiere gerade ein Widgetset für OpenGL, dabei bin ich auf folgendes Problem
gestößen: Ich weis nicht, wie ich die Widgets entsprechend ihrer ZOrder-Eigenschaft
in der richtigen Reihenfolge rendern soll. Die Widgets sind in einer Baumhierarchie
organisiert. Jedes Widget kann Unterwidgets haben. Diese sind in einer Hashtable
gespeichert, um sie mithilfe ihres Names wiederfinden zu können. Ich wollte jetzt
ein Array aus diesen Widgets generieren, dieses mit qSort sortieren und dann während
des renderns anstatt über die Hashtable zu iterieren, einfach eine For-Schleife die
Widgets aus dem Array zeichnen lassen. Die währen dann ja schon in der richtigen Reihenfolge.
(Ich hab das nie zum Laufen gekriegt, nur Segfaults)
Dabei sind mir ein paar Probleme aufgefallen:
Wenn ich jetzt ein Widget aus der Childhashtable entferne, habe ich da eine Lücke, die muß
geschlossen werden, soll heißen, alle Widgets mit einer höheren ZOrder müssen um eins
ernidrigt werden.
Wenn ein Widget seine Position wechselt, muss es erst entfernt werden, alle niedriegeren
Widgets (höhere ZOrder) müssen nachrücken, dann müssen alle Widgets mit einer niedrigeren
ZOrder als die neue ZOrder eins nach hinten rücken, so das eine Lücke entsteht, in die dann
das wechselnde Widget geschoben werden kann.
Kompliziert oder? Ich suche jetzt nach einer einfacheren Möglichkeit, so etwas zu
organisieren, das es möglichst einfach(robust) läuft.
gestößen: Ich weis nicht, wie ich die Widgets entsprechend ihrer ZOrder-Eigenschaft
in der richtigen Reihenfolge rendern soll. Die Widgets sind in einer Baumhierarchie
organisiert. Jedes Widget kann Unterwidgets haben. Diese sind in einer Hashtable
gespeichert, um sie mithilfe ihres Names wiederfinden zu können. Ich wollte jetzt
ein Array aus diesen Widgets generieren, dieses mit qSort sortieren und dann während
des renderns anstatt über die Hashtable zu iterieren, einfach eine For-Schleife die
Widgets aus dem Array zeichnen lassen. Die währen dann ja schon in der richtigen Reihenfolge.
(Ich hab das nie zum Laufen gekriegt, nur Segfaults)
Dabei sind mir ein paar Probleme aufgefallen:
Wenn ich jetzt ein Widget aus der Childhashtable entferne, habe ich da eine Lücke, die muß
geschlossen werden, soll heißen, alle Widgets mit einer höheren ZOrder müssen um eins
ernidrigt werden.
Wenn ein Widget seine Position wechselt, muss es erst entfernt werden, alle niedriegeren
Widgets (höhere ZOrder) müssen nachrücken, dann müssen alle Widgets mit einer niedrigeren
ZOrder als die neue ZOrder eins nach hinten rücken, so das eine Lücke entsteht, in die dann
das wechselnde Widget geschoben werden kann.
Kompliziert oder? Ich suche jetzt nach einer einfacheren Möglichkeit, so etwas zu
organisieren, das es möglichst einfach(robust) läuft.