Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Organisatorisches Problem

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719

    Organisatorisches Problem

    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.

  2. #2
    Registrierter Benutzer
    Registriert seit
    21.01.2001
    Beiträge
    157
    Das klingt als ob deine Widgets ein int als ZOrder speichern.

    Währe es nicht geschickter die Baumhierarchie als implizite Zorder zu verwenden:
    - Kinder werden immer direkt nach dem Elternteil (parent) gezeichnet.
    - Das Elternteil speichert alle mögliche Kinder in einer Liste. Kinder werden in
    umgekehrteter Reihenfolge dieser Liste gezeichnet.

    Umstellungen in der ZOrder (raise(), lower()) resultieren dann im umhängen in der Baumhierarche.

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Das Problem ist nur, das die Widgets, die in der selben Baumstufe sind, in verschiedenen Reihenfolgen gerendert werden sollen. Ich hab als Root-Objekt einen sogenannten MDesktop, in diesen MDesktop kommen MWindow-Instanzen. Klickt nun ein Benutzer auf solch ein MWindow soll dieses in den Vordergrund gebracht werden. Das, was ganz oben ist, muß zuletzt gezeichnet werden, aber für das Event-Handling muß das, das ganz oben ist, zuerst gefragt werden ob es das Event will.

    Ich hab den Gedanken mit der Hashtable jetzt aufgegeben und mache Experimente mit einer Double-linked-List. Das ist schneller beim duchlaufen, und es ist wesentlich einfacher, Elemente in der Position zu verändern.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •