summaryrefslogtreecommitdiffstats
path: root/scene/gui/tree.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/gui/tree.cpp')
-rw-r--r--scene/gui/tree.cpp35
1 files changed, 25 insertions, 10 deletions
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index 8a243fd68f..18ee39aeec 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -2195,27 +2195,38 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
draw_item_rect(p_item->cells.write[i], item_rect, cell_color, icon_col, outline_size, font_outline_color);
} break;
case TreeItem::CELL_MODE_CHECK: {
- Ref<Texture2D> checked = theme_cache.checked;
- Ref<Texture2D> unchecked = theme_cache.unchecked;
- Ref<Texture2D> indeterminate = theme_cache.indeterminate;
Point2i check_ofs = item_rect.position;
- check_ofs.y += Math::floor((real_t)(item_rect.size.y - checked->get_height()) / 2);
+ check_ofs.y += Math::floor((real_t)(item_rect.size.y - theme_cache.checked->get_height()) / 2);
- if (p_item->cells[i].indeterminate) {
- indeterminate->draw(ci, check_ofs);
- } else if (p_item->cells[i].checked) {
- checked->draw(ci, check_ofs);
+ if (p_item->cells[i].editable) {
+ if (p_item->cells[i].indeterminate) {
+ theme_cache.indeterminate->draw(ci, check_ofs);
+ } else if (p_item->cells[i].checked) {
+ theme_cache.checked->draw(ci, check_ofs);
+ } else {
+ theme_cache.unchecked->draw(ci, check_ofs);
+ }
} else {
- unchecked->draw(ci, check_ofs);
+ if (p_item->cells[i].indeterminate) {
+ theme_cache.indeterminate_disabled->draw(ci, check_ofs);
+ } else if (p_item->cells[i].checked) {
+ theme_cache.checked_disabled->draw(ci, check_ofs);
+ } else {
+ theme_cache.unchecked_disabled->draw(ci, check_ofs);
+ }
}
- int check_w = checked->get_width() + theme_cache.h_separation;
+ int check_w = theme_cache.checked->get_width() + theme_cache.h_separation;
text_pos.x += check_w;
item_rect.size.x -= check_w;
item_rect.position.x += check_w;
+ if (!p_item->cells[i].editable) {
+ cell_color = theme_cache.font_disabled_color;
+ }
+
draw_item_rect(p_item->cells.write[i], item_rect, cell_color, icon_col, outline_size, font_outline_color);
} break;
@@ -5535,7 +5546,10 @@ void Tree::_bind_methods() {
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, Tree, checked);
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, Tree, unchecked);
+ BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, Tree, checked_disabled);
+ BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, Tree, unchecked_disabled);
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, Tree, indeterminate);
+ BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, Tree, indeterminate_disabled);
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, Tree, arrow);
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, Tree, arrow_collapsed);
BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, Tree, arrow_collapsed_mirrored);
@@ -5549,6 +5563,7 @@ void Tree::_bind_methods() {
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, Tree, font_color);
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, Tree, font_selected_color);
+ BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, Tree, font_disabled_color);
BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, Tree, drop_position_color);
BIND_THEME_ITEM(Theme::DATA_TYPE_CONSTANT, Tree, h_separation);
BIND_THEME_ITEM(Theme::DATA_TYPE_CONSTANT, Tree, v_separation);