Skip to content

Commit 3bccdd2

Browse files
committed
Merge pull request #118733 from jinyangcruise/fix_custom_canvas_item_covers_
Fix custom canvas item covers text
2 parents e998e94 + 92ecfba commit 3bccdd2

2 files changed

Lines changed: 36 additions & 23 deletions

File tree

scene/gui/tree.cpp

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2444,22 +2444,22 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
24442444
if (p_item->cells[0].selected) {
24452445
if (is_row_hovered) {
24462446
if (has_focus(true)) {
2447-
theme_cache.hovered_selected_focus->draw(ci, row_rect);
2447+
theme_cache.hovered_selected_focus->draw(stylebox_ci, row_rect);
24482448
} else {
2449-
theme_cache.hovered_selected->draw(ci, row_rect);
2449+
theme_cache.hovered_selected->draw(stylebox_ci, row_rect);
24502450
}
24512451
} else {
24522452
if (has_focus(true)) {
2453-
theme_cache.selected_focus->draw(ci, row_rect);
2453+
theme_cache.selected_focus->draw(stylebox_ci, row_rect);
24542454
} else {
2455-
theme_cache.selected->draw(ci, row_rect);
2455+
theme_cache.selected->draw(stylebox_ci, row_rect);
24562456
}
24572457
}
24582458
} else if (!drop_mode_flags) {
24592459
if (is_cell_button_hovered) {
2460-
theme_cache.hovered_dimmed->draw(ci, row_rect);
2460+
theme_cache.hovered_dimmed->draw(stylebox_ci, row_rect);
24612461
} else {
2462-
theme_cache.hovered->draw(ci, row_rect);
2462+
theme_cache.hovered->draw(stylebox_ci, row_rect);
24632463
}
24642464
}
24652465
}
@@ -2471,9 +2471,9 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
24712471
// Cell hover.
24722472
if (is_cell_hovered && !p_item->cells[i].selected && !drop_mode_flags) {
24732473
if (is_cell_button_hovered) {
2474-
theme_cache.hovered_dimmed->draw(ci, r);
2474+
theme_cache.hovered_dimmed->draw(stylebox_ci, r);
24752475
} else {
2476-
theme_cache.hovered->draw(ci, r);
2476+
theme_cache.hovered->draw(stylebox_ci, r);
24772477
}
24782478
}
24792479
}
@@ -2487,15 +2487,15 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
24872487
if (p_item->cells[i].selected) {
24882488
if (is_cell_hovered) {
24892489
if (has_focus(true)) {
2490-
theme_cache.hovered_selected_focus->draw(ci, r);
2490+
theme_cache.hovered_selected_focus->draw(stylebox_ci, r);
24912491
} else {
2492-
theme_cache.hovered_selected->draw(ci, r);
2492+
theme_cache.hovered_selected->draw(stylebox_ci, r);
24932493
}
24942494
} else {
24952495
if (has_focus(true)) {
2496-
theme_cache.selected_focus->draw(ci, r);
2496+
theme_cache.selected_focus->draw(stylebox_ci, r);
24972497
} else {
2498-
theme_cache.selected->draw(ci, r);
2498+
theme_cache.selected->draw(stylebox_ci, r);
24992499
}
25002500
}
25012501
}
@@ -5231,6 +5231,14 @@ void Tree::_notification(int p_what) {
52315231
header_clip_rect.size.x = MAX(0.0f, v_scroll_rect.position.x - header_clip_rect.position.x);
52325232
}
52335233
}
5234+
rendering_server->canvas_item_clear(stylebox_ci);
5235+
rendering_server->canvas_item_set_custom_rect(stylebox_ci, !is_visibility_clip_disabled(), main_clip_rect);
5236+
rendering_server->canvas_item_set_clip(stylebox_ci, true);
5237+
5238+
rendering_server->canvas_item_clear(custom_ci);
5239+
rendering_server->canvas_item_set_custom_rect(custom_ci, !is_visibility_clip_disabled(), main_clip_rect);
5240+
rendering_server->canvas_item_set_clip(custom_ci, true);
5241+
52345242
rendering_server->canvas_item_clear(header_ci);
52355243
rendering_server->canvas_item_set_custom_rect(header_ci, !is_visibility_clip_disabled(), header_clip_rect);
52365244
rendering_server->canvas_item_set_clip(header_ci, true);
@@ -5239,10 +5247,6 @@ void Tree::_notification(int p_what) {
52395247
rendering_server->canvas_item_set_custom_rect(content_ci, !is_visibility_clip_disabled(), main_clip_rect);
52405248
rendering_server->canvas_item_set_clip(content_ci, true);
52415249

5242-
rendering_server->canvas_item_clear(custom_ci);
5243-
rendering_server->canvas_item_set_custom_rect(custom_ci, !is_visibility_clip_disabled(), main_clip_rect);
5244-
rendering_server->canvas_item_set_clip(custom_ci, true);
5245-
52465250
rendering_server->canvas_item_clear(drop_indicator_ci);
52475251
rendering_server->canvas_item_set_custom_rect(drop_indicator_ci, !is_visibility_clip_disabled(), main_clip_rect);
52485252
rendering_server->canvas_item_set_clip(drop_indicator_ci, true);
@@ -5558,6 +5562,8 @@ void Tree::set_self_modulate(const Color &p_self_modulate) {
55585562
CanvasItem::set_self_modulate(p_self_modulate);
55595563
RS::get_singleton()->canvas_item_set_self_modulate(header_ci, p_self_modulate);
55605564
RS::get_singleton()->canvas_item_set_self_modulate(content_ci, p_self_modulate);
5565+
RS::get_singleton()->canvas_item_set_self_modulate(custom_ci, p_self_modulate);
5566+
RS::get_singleton()->canvas_item_set_self_modulate(stylebox_ci, p_self_modulate);
55615567
}
55625568

55635569
void Tree::_update_all() {
@@ -7429,6 +7435,14 @@ Tree::Tree() {
74297435

74307436
RenderingServer *rs = RenderingServer::get_singleton();
74317437

7438+
stylebox_ci = rs->canvas_item_create();
7439+
rs->canvas_item_set_parent(stylebox_ci, get_canvas_item());
7440+
rs->canvas_item_set_use_parent_material(stylebox_ci, true);
7441+
7442+
custom_ci = rs->canvas_item_create();
7443+
rs->canvas_item_set_parent(custom_ci, get_canvas_item());
7444+
rs->canvas_item_set_use_parent_material(custom_ci, true);
7445+
74327446
content_ci = rs->canvas_item_create();
74337447
rs->canvas_item_set_parent(content_ci, get_canvas_item());
74347448
rs->canvas_item_set_use_parent_material(content_ci, true);
@@ -7437,10 +7451,6 @@ Tree::Tree() {
74377451
rs->canvas_item_set_parent(header_ci, get_canvas_item());
74387452
rs->canvas_item_set_use_parent_material(header_ci, true);
74397453

7440-
custom_ci = rs->canvas_item_create();
7441-
rs->canvas_item_set_parent(custom_ci, get_canvas_item());
7442-
rs->canvas_item_set_use_parent_material(custom_ci, true);
7443-
74447454
drop_indicator_ci = rs->canvas_item_create();
74457455
rs->canvas_item_set_parent(drop_indicator_ci, get_canvas_item());
74467456
rs->canvas_item_set_use_parent_material(drop_indicator_ci, true);
@@ -7500,4 +7510,6 @@ Tree::~Tree() {
75007510
RenderingServer::get_singleton()->free_rid(content_ci);
75017511
RenderingServer::get_singleton()->free_rid(custom_ci);
75027512
RenderingServer::get_singleton()->free_rid(header_ci);
7513+
RenderingServer::get_singleton()->free_rid(custom_ci);
7514+
RenderingServer::get_singleton()->free_rid(stylebox_ci);
75037515
}

scene/gui/tree.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -556,9 +556,10 @@ class Tree : public Control {
556556

557557
bool popup_edit_committed = true;
558558
RID accessibility_scroll_element;
559-
RID header_ci; // Separate canvas item for drawing column headers
560-
RID content_ci; // Separate canvas item for drawing tree rows
561-
RID custom_ci; // Separate canvas item for drawing custom content
559+
RID stylebox_ci; // Separate canvas item for drawing native styleboxes.
560+
RID custom_ci; // Separate canvas item for drawing custom content.
561+
RID header_ci; // Separate canvas item for drawing column headers.
562+
RID content_ci; // Separate canvas item for drawing tree rows.
562563
RID drop_indicator_ci;
563564

564565
VBoxContainer *popup_editor_vb = nullptr;

0 commit comments

Comments
 (0)