grundsätzliches zu Fl_Group



  • Hi
    Ich habe eine mehr oder weniger wichtige Frage bezüglich der Fl_Group(Fl_Scroll, Fl_Window...) aus der FLTK-Bibliothek.

    Wenn ich es richtig verstehe, verwaltet die Fl_Group ihre Member (Button usw.)
    in einem Fl_Widget* Array, auf die ich über Fl_Group::child(...) zugreifen kann...

    Wenn mein Programm nun die draw() Funktion einer Fl_Group-Klasse aufruft, müssen ja ihre "children" auch "gedrawt" werden, d.h. in der draw() Funktion werden die draw() Funktionen der children aufgerufen...Meine Frage ist nun folgende:
    In welcher Reihenfolge werden die children gezeichnet? In der Reihenfolge des Arrays oder umgekehrt oder per zufall oder evtl. ne andere Reihenfolge?
    Ich weiß, warum sollte das relevant sein, aber für manche Fälle brauch ich das, vllt kann mir jmd weiterhelfen oder weiß wo ich das nachlesen kann (In der Doku hab ich auf anhieb nichts gefunden)

    Danke!

    mfg

    Hlymur



  • Du kannst es selbstverstaendlich im Sourcecode nachlesen:

    /**
      Draws all children of the group.
    
      This is useful, if you derived a widget from Fl_Group and want to draw a special
      border or background. You can call draw_children() from the derived draw() method
      after drawing the box, border, or background.
    */
    void Fl_Group::draw_children() {
      Fl_Widget*const* a = array();
    
      if (clip_children()) {
        fl_push_clip(x() + Fl::box_dx(box()),
                     y() + Fl::box_dy(box()),
    		 w() - Fl::box_dw(box()),
    		 h() - Fl::box_dh(box()));
      }
    
      if (damage() & ~FL_DAMAGE_CHILD) { // redraw the entire thing:
        for (int i=children_; i--;) {
          Fl_Widget& o = **a++;
          draw_child(o);
          draw_outside_label(o);
        }
      } else {	// only redraw the children that need it:
        for (int i=children_; i--;) update_child(**a++);
      }
    
      if (clip_children()) fl_pop_clip();
    }
    
    void Fl_Group::draw() {
      if (damage() & ~FL_DAMAGE_CHILD) { // redraw the entire thing:
        draw_box();
        draw_label();
      }
      draw_children();
    }
    


  • Danke dir!

    Hab das mitm Source Code voll verpennt -.-


Anmelden zum Antworten