|
@@ -2187,27 +2187,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;
|
|
@@ -5525,7 +5536,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);
|
|
@@ -5539,6 +5553,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);
|