mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 16:47:36 +00:00
LibGUI: Avoid a bunch of virtual calls during TreeView painting
The index of the tree column will not change while painting. Neither will the number of columsn. So avoid a whole bunch of virtual function calls by caching these two values at the start of painting.
This commit is contained in:
parent
594dfaadb9
commit
42b27d9f87
1 changed files with 6 additions and 4 deletions
|
@ -160,6 +160,7 @@ void TreeView::traverse_in_paint_order(Callback callback) const
|
||||||
{
|
{
|
||||||
VERIFY(model());
|
VERIFY(model());
|
||||||
auto& model = *this->model();
|
auto& model = *this->model();
|
||||||
|
auto tree_column = model.tree_column();
|
||||||
int indent_level = 1;
|
int indent_level = 1;
|
||||||
int y_offset = 0;
|
int y_offset = 0;
|
||||||
int tree_column_x_offset = this->tree_column_x_offset();
|
int tree_column_x_offset = this->tree_column_x_offset();
|
||||||
|
@ -194,7 +195,7 @@ void TreeView::traverse_in_paint_order(Callback callback) const
|
||||||
++indent_level;
|
++indent_level;
|
||||||
int row_count = model.row_count(index);
|
int row_count = model.row_count(index);
|
||||||
for (int i = 0; i < row_count; ++i) {
|
for (int i = 0; i < row_count; ++i) {
|
||||||
if (traverse_index(model.index(i, model.tree_column(), index)) == IterationDecision::Break)
|
if (traverse_index(model.index(i, tree_column, index)) == IterationDecision::Break)
|
||||||
return IterationDecision::Break;
|
return IterationDecision::Break;
|
||||||
}
|
}
|
||||||
--indent_level;
|
--indent_level;
|
||||||
|
@ -202,7 +203,7 @@ void TreeView::traverse_in_paint_order(Callback callback) const
|
||||||
};
|
};
|
||||||
int root_count = model.row_count();
|
int root_count = model.row_count();
|
||||||
for (int root_index = 0; root_index < root_count; ++root_index) {
|
for (int root_index = 0; root_index < root_count; ++root_index) {
|
||||||
if (traverse_index(model.index(root_index, model.tree_column(), ModelIndex())) == IterationDecision::Break)
|
if (traverse_index(model.index(root_index, tree_column, ModelIndex())) == IterationDecision::Break)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -225,6 +226,7 @@ void TreeView::paint_event(PaintEvent& event)
|
||||||
|
|
||||||
auto visible_content_rect = this->visible_content_rect();
|
auto visible_content_rect = this->visible_content_rect();
|
||||||
int tree_column = model.tree_column();
|
int tree_column = model.tree_column();
|
||||||
|
int column_count = model.column_count();
|
||||||
int tree_column_x_offset = this->tree_column_x_offset();
|
int tree_column_x_offset = this->tree_column_x_offset();
|
||||||
|
|
||||||
int y_offset = column_header().height();
|
int y_offset = column_header().height();
|
||||||
|
@ -263,7 +265,7 @@ void TreeView::paint_event(PaintEvent& event)
|
||||||
}
|
}
|
||||||
|
|
||||||
int row_width = 0;
|
int row_width = 0;
|
||||||
for (int column_index = 0; column_index < model.column_count(); ++column_index) {
|
for (int column_index = 0; column_index < column_count; ++column_index) {
|
||||||
if (!column_header().is_section_visible(column_index))
|
if (!column_header().is_section_visible(column_index))
|
||||||
continue;
|
continue;
|
||||||
row_width += this->column_width(column_index) + horizontal_padding() * 2;
|
row_width += this->column_width(column_index) + horizontal_padding() * 2;
|
||||||
|
@ -278,7 +280,7 @@ void TreeView::paint_event(PaintEvent& event)
|
||||||
painter.fill_rect(row_rect, background_color);
|
painter.fill_rect(row_rect, background_color);
|
||||||
|
|
||||||
int x_offset = 0;
|
int x_offset = 0;
|
||||||
for (int column_index = 0; column_index < model.column_count(); ++column_index) {
|
for (int column_index = 0; column_index < column_count; ++column_index) {
|
||||||
if (!column_header().is_section_visible(column_index))
|
if (!column_header().is_section_visible(column_index))
|
||||||
continue;
|
continue;
|
||||||
int column_width = this->column_width(column_index);
|
int column_width = this->column_width(column_index);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue