Skip to content

Commit

Permalink
Merge pull request #81155 from garychia/separator_priority
Browse files Browse the repository at this point in the history
ItemList: Draw separators before selected style boxes
  • Loading branch information
akien-mga committed Aug 30, 2023
2 parents 56b13b6 + 749db00 commit bc88dca
Showing 1 changed file with 26 additions and 26 deletions.
52 changes: 26 additions & 26 deletions scene/gui/item_list.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1092,6 +1092,32 @@ void ItemList::_notification(int p_what) {
// Define a visible frame to check against and optimize drawing.
const Rect2 clip(-base_ofs, size);

// Do a binary search to find the first separator that is below clip_position.y.
int first_visible_separator = 0;
{
int lo = 0;
int hi = separators.size();
while (lo < hi) {
const int mid = (lo + hi) / 2;
if (separators[mid] < clip.position.y) {
lo = mid + 1;
} else {
hi = mid;
}
}
first_visible_separator = lo;
}

// Draw visible separators.
for (int i = first_visible_separator; i < separators.size(); i++) {
if (separators[i] > clip.position.y + clip.size.y) {
break; // done
}

const int y = base_ofs.y + separators[i];
draw_line(Vector2(theme_cache.panel_style->get_margin(SIDE_LEFT), y), Vector2(width, y), theme_cache.guide_color);
}

// Do a binary search to find the first item whose rect reaches below clip.position.y.
int first_item_visible;
{
Expand Down Expand Up @@ -1310,32 +1336,6 @@ void ItemList::_notification(int p_what) {
draw_style_box(cursor, r);
}
}

// Do a binary search to find the first separator that is below clip_position.y.
int first_visible_separator = 0;
{
int lo = 0;
int hi = separators.size();
while (lo < hi) {
const int mid = (lo + hi) / 2;
if (separators[mid] < clip.position.y) {
lo = mid + 1;
} else {
hi = mid;
}
}
first_visible_separator = lo;
}

// Draw visible separators.
for (int i = first_visible_separator; i < separators.size(); i++) {
if (separators[i] > clip.position.y + clip.size.y) {
break; // done
}

const int y = base_ofs.y + separators[i];
draw_line(Vector2(theme_cache.panel_style->get_margin(SIDE_LEFT), y), Vector2(width, y), theme_cache.guide_color);
}
} break;
}
}
Expand Down

0 comments on commit bc88dca

Please sign in to comment.