diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index 5c1660d318f..05f6201dc9c 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -1521,6 +1521,9 @@ The script editor's color for user-defined types (using [code]class_name[/code]). + + The script editor's background color for lines with warnings. This should be set to a translucent color so that it can display on top of other line color modifiers such as [member text_editor/theme/highlighting/current_line_color]. + The script editor's color for words highlighted by selecting them. Only visible if [member text_editor/appearance/caret/highlight_all_occurrences] is [code]true[/code]. diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index d6677f43dae..bc1cd247f0b 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -1083,6 +1083,7 @@ void EditorSettings::_load_godot2_text_editor_theme() { _initial_set("text_editor/theme/highlighting/function_color", Color(0.4, 0.64, 0.81), true); _initial_set("text_editor/theme/highlighting/member_variable_color", Color(0.9, 0.31, 0.35), true); _initial_set("text_editor/theme/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4), true); + _initial_set("text_editor/theme/highlighting/warning_color", Color(1.0, 0.8, 0.4, 0.1), true); _initial_set("text_editor/theme/highlighting/bookmark_color", Color(0.08, 0.49, 0.98)); _initial_set("text_editor/theme/highlighting/breakpoint_color", Color(0.9, 0.29, 0.3)); _initial_set("text_editor/theme/highlighting/executing_line_color", Color(0.98, 0.89, 0.27)); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 4929ec72795..47154281e86 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -184,16 +184,22 @@ void ScriptTextEditor::enable_editor(Control *p_shortcut_context) { void ScriptTextEditor::_load_theme_settings() { CodeEdit *text_edit = code_editor->get_text_editor(); + Color updated_warning_line_color = EDITOR_GET("text_editor/theme/highlighting/warning_color"); Color updated_marked_line_color = EDITOR_GET("text_editor/theme/highlighting/mark_color"); Color updated_safe_line_number_color = EDITOR_GET("text_editor/theme/highlighting/safe_line_number_color"); Color updated_folded_code_region_color = EDITOR_GET("text_editor/theme/highlighting/folded_code_region_color"); - bool safe_line_number_color_updated = updated_safe_line_number_color != safe_line_number_color; + bool warning_line_color_updated = updated_warning_line_color != warning_line_color; bool marked_line_color_updated = updated_marked_line_color != marked_line_color; + bool safe_line_number_color_updated = updated_safe_line_number_color != safe_line_number_color; bool folded_code_region_color_updated = updated_folded_code_region_color != folded_code_region_color; - if (safe_line_number_color_updated || marked_line_color_updated || folded_code_region_color_updated) { + if (safe_line_number_color_updated || warning_line_color_updated || marked_line_color_updated || folded_code_region_color_updated) { safe_line_number_color = updated_safe_line_number_color; for (int i = 0; i < text_edit->get_line_count(); i++) { + if (warning_line_color_updated && text_edit->get_line_background_color(i) == warning_line_color) { + text_edit->set_line_background_color(i, updated_warning_line_color); + } + if (marked_line_color_updated && text_edit->get_line_background_color(i) == marked_line_color) { text_edit->set_line_background_color(i, updated_marked_line_color); } @@ -206,6 +212,7 @@ void ScriptTextEditor::_load_theme_settings() { text_edit->set_line_background_color(i, updated_folded_code_region_color); } } + warning_line_color = updated_warning_line_color; marked_line_color = updated_marked_line_color; folded_code_region_color = updated_folded_code_region_color; } @@ -567,8 +574,8 @@ void ScriptTextEditor::_validate_script() { script_is_valid = true; } _update_connected_methods(); - _update_warnings(); _update_errors(); + _update_warnings(); emit_signal(SNAME("name_changed")); emit_signal(SNAME("edited_script_changed")); @@ -637,6 +644,17 @@ void ScriptTextEditor::_update_warnings() { warnings_panel->pop(); // Cell. } warnings_panel->pop(); // Table. + if (warning_line_color.a != 0.0) { + CodeEdit *te = code_editor->get_text_editor(); + for (int i = 0; i < te->get_line_count(); i++) { + for (const ScriptLanguage::Warning &W : warnings) { + if (i >= W.start_line - 1 && i < W.end_line) { + te->set_line_background_color(i, warning_line_color); + break; + } + } + } + } } void ScriptTextEditor::_update_errors() { @@ -706,7 +724,7 @@ void ScriptTextEditor::_update_errors() { if (errors.is_empty()) { bool is_folded_code_region = te->is_line_code_region_start(i) && te->is_line_folded(i); te->set_line_background_color(i, is_folded_code_region ? folded_code_region_color : Color(0, 0, 0, 0)); - } else { + } else if (marked_line_color.a != 0) { for (const ScriptLanguage::ScriptError &E : errors) { bool error_line = i == E.line - 1; te->set_line_background_color(i, error_line ? marked_line_color : Color(0, 0, 0, 0)); @@ -1806,8 +1824,8 @@ void ScriptTextEditor::_notification(int p_what) { break; } if (is_visible_in_tree()) { - _update_warnings(); _update_errors(); + _update_warnings(); } [[fallthrough]]; case NOTIFICATION_ENTER_TREE: { diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h index 0cf9af210ca..1a3df02189d 100644 --- a/editor/plugins/script_text_editor.h +++ b/editor/plugins/script_text_editor.h @@ -97,6 +97,7 @@ class ScriptTextEditor : public ScriptEditorBase { Color safe_line_number_color = Color(1, 1, 1); Color marked_line_color = Color(1, 1, 1); + Color warning_line_color = Color(1, 1, 1); Color folded_code_region_color = Color(1, 1, 1); int previous_line = 0; diff --git a/editor/themes/editor_theme_manager.cpp b/editor/themes/editor_theme_manager.cpp index 0699c58c1fc..1a2dc486fc5 100644 --- a/editor/themes/editor_theme_manager.cpp +++ b/editor/themes/editor_theme_manager.cpp @@ -2609,6 +2609,7 @@ void EditorThemeManager::_generate_text_editor_defaults(ThemeConfiguration &p_co const Color function_color = p_config.dark_theme ? Color(0.34, 0.7, 1.0) : Color(0, 0.225, 0.9, 1); const Color member_variable_color = p_config.dark_theme ? Color(0.34, 0.7, 1.0).lerp(p_config.mono_color, 0.6) : Color(0, 0.4, 0.68, 1); const Color mark_color = Color(p_config.error_color.r, p_config.error_color.g, p_config.error_color.b, 0.3); + const Color warning_color = Color(p_config.warning_color.r, p_config.warning_color.g, p_config.warning_color.b, 0.15); const Color bookmark_color = Color(0.08, 0.49, 0.98); const Color breakpoint_color = p_config.dark_theme ? p_config.error_color : Color(1, 0.27, 0.2, 1); const Color executing_line_color = Color(0.98, 0.89, 0.27); @@ -2652,6 +2653,7 @@ void EditorThemeManager::_generate_text_editor_defaults(ThemeConfiguration &p_co setting->set_initial_value("text_editor/theme/highlighting/function_color", function_color, true); setting->set_initial_value("text_editor/theme/highlighting/member_variable_color", member_variable_color, true); setting->set_initial_value("text_editor/theme/highlighting/mark_color", mark_color, true); + setting->set_initial_value("text_editor/theme/highlighting/warning_color", warning_color, true); setting->set_initial_value("text_editor/theme/highlighting/bookmark_color", bookmark_color, true); setting->set_initial_value("text_editor/theme/highlighting/breakpoint_color", breakpoint_color, true); setting->set_initial_value("text_editor/theme/highlighting/executing_line_color", executing_line_color, true);