Fix slowness due to not clipping (#1014)
This commit is contained in:
parent
7f998bac60
commit
0291b48a73
@ -1144,11 +1144,34 @@ void Fl_Tree_Item::draw(int X, int &Y, int W, Fl_Tree_Item *itemfocus,
|
|||||||
Y += prefs.openchild_marginbottom(); // offset below open child tree
|
Y += prefs.openchild_marginbottom(); // offset below open child tree
|
||||||
}
|
}
|
||||||
if ( ! lastchild ) {
|
if ( ! lastchild ) {
|
||||||
// Special 'clipped' calculation. (intentional variable shadowing)
|
// Draw vertical connector between this item and the bottom of its children.
|
||||||
int is_clipped = ((child_y_start < tree_top) && (Y < tree_top)) ||
|
//
|
||||||
((child_y_start > tree_bot) && (Y > tree_bot));
|
// o Aaa <- Item we're drawing has >20k children.
|
||||||
if (render && !is_clipped )
|
// ytop → : :.. 0001
|
||||||
draw_vertical_connector(hconn_x, child_y_start, Y, prefs);
|
// : :.. 0002
|
||||||
|
// : : } ~20k items
|
||||||
|
// : :.. 19998
|
||||||
|
// ┌──:──:.. 19999 ──┐
|
||||||
|
// │ : :.. 20000 │
|
||||||
|
// │ : :.. 20001 │ <- visible screen
|
||||||
|
// │ : :.. 20002 │ area
|
||||||
|
// └──:──:.. 20003 ──┘
|
||||||
|
// : :.. 20004
|
||||||
|
// :
|
||||||
|
// ybot → : ← we're drawing this long vertical connector
|
||||||
|
// :
|
||||||
|
// o Bbb
|
||||||
|
//
|
||||||
|
int ytop = child_y_start;
|
||||||
|
int ybot = Y;
|
||||||
|
int is_clipped = ((ytop < tree_top) && (ybot < tree_top)) || // completely off top of scrn? clip
|
||||||
|
((ytop > tree_bot) && (ybot > tree_bot)); // completely off bot of scrn? clip
|
||||||
|
if (render && !is_clipped ) {
|
||||||
|
// Clip vert line to within screen area
|
||||||
|
ytop = (ytop < tree_top) ? tree_top : ytop;
|
||||||
|
ybot = (ybot > tree_bot) ? tree_bot : ybot;
|
||||||
|
draw_vertical_connector(hconn_x, ytop, ybot, prefs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user