Fixing STR #2786; clipping problem with child FLTK widgets.
Replication: Run 'tree' demo, open '500 items' subtree, change 'connector width' to 100.. the "D2" and "ccc" buttons would overdraw the scrollbar. (Not the regular tree items) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9197 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
d250e21542
commit
272475dde4
@ -199,6 +199,8 @@ class FL_EXPORT Fl_Tree : public Fl_Group {
|
||||
Fl_Tree_Prefs _prefs; // all the tree's settings
|
||||
int _scrollbar_size; // size of scrollbar trough
|
||||
|
||||
void fix_scrollbar_order();
|
||||
|
||||
protected:
|
||||
Fl_Scrollbar *_vscroll; ///< Vertical scrollbar
|
||||
void item_clicked(Fl_Tree_Item* val);
|
||||
|
@ -329,6 +329,7 @@ int Fl_Tree::handle(int e) {
|
||||
|
||||
/// Standard FLTK draw() method, handles draws the tree widget.
|
||||
void Fl_Tree::draw() {
|
||||
fix_scrollbar_order();
|
||||
// Let group draw box+label but *NOT* children.
|
||||
// We handle drawing children ourselves by calling each item's draw()
|
||||
//
|
||||
@ -381,9 +382,11 @@ void Fl_Tree::draw() {
|
||||
_vscroll->hide();
|
||||
}
|
||||
}
|
||||
fl_push_clip(cx,cy,cw,ch);
|
||||
// Draw children
|
||||
fl_push_clip(cx,cy,cw-(_vscroll->visible()?_vscroll->w():0),ch);
|
||||
Fl_Group::draw_children(); // draws any FLTK children set via Fl_Tree::widget()
|
||||
fl_pop_clip();
|
||||
draw_child(*_vscroll); // draw scroll last
|
||||
}
|
||||
|
||||
/// Print the tree as 'ascii art' to stdout.
|
||||
@ -1758,6 +1761,18 @@ void Fl_Tree::load(Fl_Preferences &prefs)
|
||||
}
|
||||
}
|
||||
|
||||
/// Ensure the scrollbars are the last children
|
||||
void Fl_Tree::fix_scrollbar_order() {
|
||||
Fl_Widget** a = (Fl_Widget**)array();
|
||||
if (a[children()-1] != _vscroll) {
|
||||
int i,j;
|
||||
for (i = j = 0; j < children(); j++) {
|
||||
if (a[j] != _vscroll) a[i++] = a[j];
|
||||
}
|
||||
a[i++] = _vscroll;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user