Tree Fix line rendering when drag and dropping TreeItem

This commit is contained in:
kleonc 2021-08-25 12:03:16 +02:00
parent c334989e00
commit d35ef5fab0

View file

@ -1696,25 +1696,31 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
} }
} }
if (drop_mode_flags && drop_mode_over == p_item) { if (drop_mode_flags && drop_mode_over) {
Rect2 r = cell_rect; Rect2 r = cell_rect;
bool has_parent = p_item->get_first_child() != nullptr;
if (rtl) { if (rtl) {
r.position.x = get_size().width - r.position.x - r.size.x; r.position.x = get_size().width - r.position.x - r.size.x;
} }
if (drop_mode_over == p_item) {
if (drop_mode_section == -1 || has_parent || drop_mode_section == 0) { if (drop_mode_section == 0 || drop_mode_section == -1) {
// Line above.
RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(r.position.x, r.position.y, r.size.x, 1), cache.drop_position_color); RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(r.position.x, r.position.y, r.size.x, 1), cache.drop_position_color);
} }
if (drop_mode_section == 0) { if (drop_mode_section == 0) {
// Side lines.
RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(r.position.x, r.position.y, 1, r.size.y), cache.drop_position_color); RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(r.position.x, r.position.y, 1, r.size.y), cache.drop_position_color);
RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(r.position.x + r.size.x - 1, r.position.y, 1, r.size.y), cache.drop_position_color); RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(r.position.x + r.size.x - 1, r.position.y, 1, r.size.y), cache.drop_position_color);
} }
if (drop_mode_section == 0 || (drop_mode_section == 1 && (!p_item->get_first_child() || p_item->is_collapsed()))) {
if ((drop_mode_section == 1 && !has_parent) || drop_mode_section == 0) { // Line below.
RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(r.position.x, r.position.y + r.size.y, r.size.x, 1), cache.drop_position_color); RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(r.position.x, r.position.y + r.size.y, r.size.x, 1), cache.drop_position_color);
} }
} else if (drop_mode_over == p_item->get_parent()) {
if (drop_mode_section == 1 && !p_item->get_prev() /* && !drop_mode_over->is_collapsed() */) { // The drop_mode_over shouldn't ever be collapsed in here, otherwise we would be drawing a child of a collapsed item.
// Line above.
RenderingServer::get_singleton()->canvas_item_add_rect(ci, Rect2(r.position.x, r.position.y, r.size.x, 1), cache.drop_position_color);
}
}
} }
Color col = p_item->cells[i].custom_color ? p_item->cells[i].color : get_theme_color(p_item->cells[i].selected ? "font_selected_color" : "font_color"); Color col = p_item->cells[i].custom_color ? p_item->cells[i].color : get_theme_color(p_item->cells[i].selected ? "font_selected_color" : "font_color");