2
0
Эх сурвалжийг харах

Merge pull request #48579 from Calinou/tree-fix-bg-focus-section-overlap

Fix Tree's background focus outline displaying behind section headings
Rémi Verschelde 4 жил өмнө
parent
commit
726715b1e1
1 өөрчлөгдсөн 9 нэмэгдсэн , 6 устгасан
  1. 9 6
      scene/gui/tree.cpp

+ 9 - 6
scene/gui/tree.cpp

@@ -3178,7 +3178,6 @@ void Tree::_notification(int p_what) {
 		RID ci = get_canvas_item();
 
 		Ref<StyleBox> bg = cache.bg;
-		Ref<StyleBox> bg_focus = get_theme_stylebox("bg_focus");
 		Color font_outline_color = get_theme_color("font_outline_color");
 		int outline_size = get_theme_constant("outline_size");
 
@@ -3187,11 +3186,6 @@ void Tree::_notification(int p_what) {
 		Size2 draw_size = get_size() - bg->get_minimum_size();
 
 		bg->draw(ci, Rect2(Point2(), get_size()));
-		if (has_focus()) {
-			RenderingServer::get_singleton()->canvas_item_add_clip_ignore(ci, true);
-			bg_focus->draw(ci, Rect2(Point2(), get_size()));
-			RenderingServer::get_singleton()->canvas_item_add_clip_ignore(ci, false);
-		}
 
 		int tbh = _get_title_button_height();
 
@@ -3225,6 +3219,15 @@ void Tree::_notification(int p_what) {
 				columns[i].text_buf->draw(ci, text_pos, cache.title_button_color);
 			}
 		}
+
+		// Draw the background focus outline last, so that it is drawn in front of the section headings.
+		// Otherwise, section heading backgrounds can appear to be in front of the focus outline when scrolling.
+		if (has_focus()) {
+			RenderingServer::get_singleton()->canvas_item_add_clip_ignore(ci, true);
+			const Ref<StyleBox> bg_focus = get_theme_stylebox("bg_focus");
+			bg_focus->draw(ci, Rect2(Point2(), get_size()));
+			RenderingServer::get_singleton()->canvas_item_add_clip_ignore(ci, false);
+		}
 	}
 
 	if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) {