Fix and optimize redundant scroll list drawing logic
This commit is contained in:
@@ -1448,7 +1448,8 @@ void LLScrollListCtrl::drawItems()
|
|||||||
highlight_color.mV[VALPHA] = clamp_rescale(mSearchTimer.getElapsedTimeF32(), type_ahead_timeout * 0.7f, type_ahead_timeout, 0.4f, 0.f);
|
highlight_color.mV[VALPHA] = clamp_rescale(mSearchTimer.getElapsedTimeF32(), type_ahead_timeout * 0.7f, type_ahead_timeout, 0.4f, 0.f);
|
||||||
|
|
||||||
S32 first_line = mScrollLines;
|
S32 first_line = mScrollLines;
|
||||||
S32 last_line = llmin((S32)mItemList.size() - 1, mScrollLines + getLinesPerPage());
|
S32 list_size = mItemList.size() - 1;
|
||||||
|
S32 last_line = llmin(list_size, mScrollLines + num_page_lines);
|
||||||
|
|
||||||
if ((item_list::size_type)first_line >= mItemList.size())
|
if ((item_list::size_type)first_line >= mItemList.size())
|
||||||
{
|
{
|
||||||
@@ -1459,7 +1460,7 @@ void LLScrollListCtrl::drawItems()
|
|||||||
{
|
{
|
||||||
bool should_continue = false; // False until all passes are done for all row cells.
|
bool should_continue = false; // False until all passes are done for all row cells.
|
||||||
S32 cur_y = y;
|
S32 cur_y = y;
|
||||||
for (S32 index = first_line, line = first_line; index <= last_line; ++index)
|
for (S32 index = first_line, line = first_line; index <= list_size; ++index)
|
||||||
{
|
{
|
||||||
LLScrollListItem* item = mItemList[index];
|
LLScrollListItem* item = mItemList[index];
|
||||||
if (item->getFiltered()) continue; // Skip filtered
|
if (item->getFiltered()) continue; // Skip filtered
|
||||||
@@ -1478,7 +1479,6 @@ void LLScrollListCtrl::drawItems()
|
|||||||
LLColor4 fg_color;
|
LLColor4 fg_color;
|
||||||
LLColor4 bg_color(LLColor4::transparent);
|
LLColor4 bg_color(LLColor4::transparent);
|
||||||
|
|
||||||
if (mScrollLines <= line && line < mScrollLines + num_page_lines)
|
|
||||||
{
|
{
|
||||||
cur_y -= mLineHeight;
|
cur_y -= mLineHeight;
|
||||||
|
|
||||||
@@ -1514,8 +1514,8 @@ void LLScrollListCtrl::drawItems()
|
|||||||
}
|
}
|
||||||
|
|
||||||
should_continue |= item->draw(pass, item_rect, fg_color, bg_color, highlight_color, mColumnPadding);
|
should_continue |= item->draw(pass, item_rect, fg_color, bg_color, highlight_color, mColumnPadding);
|
||||||
|
if (++line >= last_line) break; // Don't draw any more than needed.
|
||||||
}
|
}
|
||||||
++line;
|
|
||||||
}
|
}
|
||||||
done = !should_continue;
|
done = !should_continue;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user