From 272475dde48e43c4b19799847c5ca3937eeceae3 Mon Sep 17 00:00:00 2001 From: Greg Ercolano Date: Tue, 6 Dec 2011 21:08:07 +0000 Subject: 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 --- src/Fl_Tree.cxx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Fl_Tree.cxx b/src/Fl_Tree.cxx index fa78940a1..d70b5539f 100644 --- a/src/Fl_Tree.cxx +++ b/src/Fl_Tree.cxx @@ -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$". // -- cgit v1.2.3