summaryrefslogtreecommitdiffstats
path: root/editor
diff options
context:
space:
mode:
Diffstat (limited to 'editor')
-rw-r--r--editor/SCsub83
-rw-r--r--editor/code_editor.cpp6
-rw-r--r--editor/gui/editor_file_dialog.cpp1
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp7
-rw-r--r--editor/plugins/control_editor_plugin.cpp80
-rw-r--r--editor/plugins/control_editor_plugin.h6
-rw-r--r--editor/plugins/sprite_2d_editor_plugin.cpp4
-rw-r--r--editor/scene_tree_dock.cpp29
-rw-r--r--editor/themes/editor_color_map.cpp2
-rw-r--r--editor/themes/editor_theme_manager.cpp14
10 files changed, 171 insertions, 61 deletions
diff --git a/editor/SCsub b/editor/SCsub
index e3b17b83f8..e613a71238 100644
--- a/editor/SCsub
+++ b/editor/SCsub
@@ -10,40 +10,59 @@ import editor_builders
import methods
-def _make_doc_data_class_path(to_path):
- file_path = os.path.join(to_path, "doc_data_class_path.gen.h")
-
- class_path_data = ""
- class_path_data += "static const int _doc_data_class_path_count = " + str(len(env.doc_class_path)) + ";\n"
- class_path_data += "struct _DocDataClassPath { const char* name; const char* path; };\n"
- class_path_data += (
- "static const _DocDataClassPath _doc_data_class_paths[" + str(len(env.doc_class_path) + 1) + "] = {\n"
- )
- for c in sorted(env.doc_class_path):
- class_path_data += '\t{"' + c + '", "' + env.doc_class_path[c] + '"},\n'
- class_path_data += "\t{nullptr, nullptr}\n"
- class_path_data += "};\n"
-
- methods.write_file_if_needed(file_path, class_path_data)
-
-
if env.editor_build:
+ # Generate doc data paths
+ def doc_data_class_path_builder(target, source, env):
+ paths = dict(sorted(source[0].read().items()))
+ data = "\n".join([f'\t{{"{key}", "{value}"}},' for key, value in paths.items()])
+ with methods.generated_wrapper(target) as file:
+ file.write(
+ f"""\
+static const int _doc_data_class_path_count = {len(paths)};
+
+struct _DocDataClassPath {{
+ const char *name;
+ const char *path;
+}};
+
+static const _DocDataClassPath _doc_data_class_paths[{len(env.doc_class_path) + 1}] = {{
+{data}
+ {{nullptr, nullptr}},
+}};
+"""
+ )
+
+ env.CommandNoCache("doc_data_class_path.gen.h", env.Value(env.doc_class_path), env.Run(doc_data_class_path_builder))
+
# Register exporters
- reg_exporters_inc = '#include "register_exporters.h"\n\n'
- reg_exporters = "void register_exporters() {\n"
+ def register_exporters_builder(target, source, env):
+ platforms = source[0].read()
+ exp_inc = "\n".join([f'#include "platform/{p}/export/export.h"' for p in platforms])
+ exp_reg = "\n".join([f"\tregister_{p}_exporter();" for p in platforms])
+ exp_type = "\n".join([f"\tregister_{p}_exporter_types();" for p in platforms])
+ with methods.generated_wrapper(target) as file:
+ file.write(
+ f"""\
+#include "register_exporters.h"
+
+{exp_inc}
+
+void register_exporters() {{
+{exp_reg}
+}}
+
+void register_exporter_types() {{
+{exp_type}
+}}
+"""
+ )
+
+ gen_exporters = env.CommandNoCache(
+ "register_exporters.gen.cpp", env.Value(env.platform_exporters), env.Run(register_exporters_builder)
+ )
for e in env.platform_exporters:
# Add all .cpp files in export folder
- env.add_source_files(env.editor_sources, "../platform/" + e + "/export/" + "*.cpp")
-
- reg_exporters += "\tregister_" + e + "_exporter();\n"
- reg_exporters_inc += '#include "platform/' + e + '/export/export.h"\n'
- reg_exporters += "}\n\n"
- reg_exporters += "void register_exporter_types() {\n"
- for e in env.platform_exporters:
- reg_exporters += "\tregister_" + e + "_exporter_types();\n"
- reg_exporters += "}\n"
-
- methods.write_file_if_needed("register_exporters.gen.cpp", reg_exporters_inc + reg_exporters)
+ env.add_source_files(env.editor_sources, f"../platform/{e}/export/*.cpp")
# Core API documentation.
docs = []
@@ -61,8 +80,6 @@ if env.editor_build:
else:
docs += Glob(d + "/*.xml") # Custom.
- _make_doc_data_class_path(env.Dir("#editor").abspath)
-
docs = sorted(docs)
env.Depends("#editor/doc_data_compressed.gen.h", docs)
env.CommandNoCache(
@@ -115,7 +132,7 @@ if env.editor_build:
)
env.add_source_files(env.editor_sources, "*.cpp")
- env.add_source_files(env.editor_sources, "register_exporters.gen.cpp")
+ env.add_source_files(env.editor_sources, gen_exporters)
SConscript("debugger/SCsub")
SConscript("export/SCsub")
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index cfeb495690..9755ff5a5e 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -199,6 +199,7 @@ bool FindReplaceBar::_search(uint32_t p_flags, int p_from_line, int p_from_col)
}
void FindReplaceBar::_replace() {
+ text_editor->begin_complex_operation();
text_editor->remove_secondary_carets();
bool selection_enabled = text_editor->has_selection(0);
Point2i selection_begin, selection_end;
@@ -210,7 +211,6 @@ void FindReplaceBar::_replace() {
String repl_text = get_replace_text();
int search_text_len = get_search_text().length();
- text_editor->begin_complex_operation();
if (selection_enabled && is_selection_only()) {
// Restrict search_current() to selected region.
text_editor->set_caret_line(selection_begin.width, false, true, -1, 0);
@@ -249,6 +249,7 @@ void FindReplaceBar::_replace() {
}
void FindReplaceBar::_replace_all() {
+ text_editor->begin_complex_operation();
text_editor->remove_secondary_carets();
text_editor->disconnect("text_changed", callable_mp(this, &FindReplaceBar::_editor_text_changed));
// Line as x so it gets priority in comparison, column as y.
@@ -279,8 +280,6 @@ void FindReplaceBar::_replace_all() {
replace_all_mode = true;
- text_editor->begin_complex_operation();
-
if (selection_enabled && is_selection_only()) {
text_editor->set_caret_line(selection_begin.width, false, true, -1, 0);
text_editor->set_caret_column(selection_begin.height, true, 0);
@@ -619,6 +618,7 @@ void FindReplaceBar::_replace_text_submitted(const String &p_text) {
search_prev();
} else {
_replace();
+ search_next();
}
}
diff --git a/editor/gui/editor_file_dialog.cpp b/editor/gui/editor_file_dialog.cpp
index 7d26cb21fb..08e75ee812 100644
--- a/editor/gui/editor_file_dialog.cpp
+++ b/editor/gui/editor_file_dialog.cpp
@@ -1964,6 +1964,7 @@ void EditorFileDialog::_bind_methods() {
Option defaults;
base_property_helper.set_prefix("option_");
+ base_property_helper.set_array_length_getter(&EditorFileDialog::get_option_count);
base_property_helper.register_property(PropertyInfo(Variant::STRING, "name"), defaults.name, &EditorFileDialog::set_option_name, &EditorFileDialog::get_option_name);
base_property_helper.register_property(PropertyInfo(Variant::PACKED_STRING_ARRAY, "values"), defaults.values, &EditorFileDialog::set_option_values, &EditorFileDialog::get_option_values);
base_property_helper.register_property(PropertyInfo(Variant::INT, "default"), defaults.default_idx, &EditorFileDialog::set_option_default, &EditorFileDialog::get_option_default);
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index e2ef7c08ac..8f58a6a6f9 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -4073,6 +4073,13 @@ void CanvasItemEditor::_notification(int p_what) {
override_camera_button->set_pressed(false);
}
} break;
+
+ case NOTIFICATION_APPLICATION_FOCUS_OUT: {
+ if (drag_type != DRAG_NONE) {
+ _reset_drag();
+ viewport->queue_redraw();
+ }
+ } break;
}
}
diff --git a/editor/plugins/control_editor_plugin.cpp b/editor/plugins/control_editor_plugin.cpp
index 939527b56f..80446e48e8 100644
--- a/editor/plugins/control_editor_plugin.cpp
+++ b/editor/plugins/control_editor_plugin.cpp
@@ -36,6 +36,7 @@
#include "editor/editor_undo_redo_manager.h"
#include "editor/plugins/canvas_item_editor_plugin.h"
#include "editor/themes/editor_scale.h"
+#include "scene/gui/check_button.h"
#include "scene/gui/grid_container.h"
#include "scene/gui/separator.h"
@@ -660,6 +661,10 @@ void SizeFlagPresetPicker::_preset_button_pressed(const int p_preset) {
emit_signal("size_flags_selected", flags);
}
+void SizeFlagPresetPicker::_expand_button_pressed() {
+ emit_signal("expand_flag_toggled", expand_button->is_pressed());
+}
+
void SizeFlagPresetPicker::set_allowed_flags(Vector<SizeFlags> &p_flags) {
preset_buttons[SIZE_SHRINK_BEGIN]->set_disabled(!p_flags.has(SIZE_SHRINK_BEGIN));
preset_buttons[SIZE_SHRINK_CENTER]->set_disabled(!p_flags.has(SIZE_SHRINK_CENTER));
@@ -675,6 +680,10 @@ void SizeFlagPresetPicker::set_allowed_flags(Vector<SizeFlags> &p_flags) {
}
}
+void SizeFlagPresetPicker::set_expand_flag(bool p_expand) {
+ expand_button->set_pressed(p_expand);
+}
+
void SizeFlagPresetPicker::_notification(int p_notification) {
switch (p_notification) {
case NOTIFICATION_ENTER_TREE:
@@ -698,6 +707,7 @@ void SizeFlagPresetPicker::_notification(int p_notification) {
void SizeFlagPresetPicker::_bind_methods() {
ADD_SIGNAL(MethodInfo("size_flags_selected", PropertyInfo(Variant::INT, "size_flags")));
+ ADD_SIGNAL(MethodInfo("expand_flag_toggled", PropertyInfo(Variant::BOOL, "expand_flag")));
}
SizeFlagPresetPicker::SizeFlagPresetPicker(bool p_vertical) {
@@ -717,10 +727,11 @@ SizeFlagPresetPicker::SizeFlagPresetPicker(bool p_vertical) {
_add_separator(main_row, memnew(VSeparator));
_add_row_button(main_row, SIZE_FILL, TTR("Fill"));
- expand_button = memnew(CheckBox);
+ expand_button = memnew(CheckButton);
expand_button->set_flat(true);
- expand_button->set_text(TTR("Align with Expand"));
+ expand_button->set_text(TTR("Expand"));
expand_button->set_tooltip_text(TTR("Enable to also set the Expand flag.\nDisable to only set Shrink/Fill flags."));
+ expand_button->connect("pressed", callable_mp(this, &SizeFlagPresetPicker::_expand_button_pressed));
main_vb->add_child(expand_button);
}
@@ -812,12 +823,49 @@ void ControlEditorToolbar::_container_flags_selected(int p_flags, bool p_vertica
for (Node *E : selection) {
Control *control = Object::cast_to<Control>(E);
if (control) {
+ int old_flags = p_vertical ? control->get_v_size_flags() : control->get_h_size_flags();
if (p_vertical) {
undo_redo->add_do_method(control, "set_v_size_flags", p_flags);
+ undo_redo->add_undo_method(control, "set_v_size_flags", old_flags);
} else {
undo_redo->add_do_method(control, "set_h_size_flags", p_flags);
+ undo_redo->add_undo_method(control, "set_h_size_flags", old_flags);
+ }
+ }
+ }
+
+ undo_redo->commit_action();
+}
+
+void ControlEditorToolbar::_expand_flag_toggled(bool p_expand, bool p_vertical) {
+ List<Node *> selection = editor_selection->get_selected_node_list();
+
+ EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
+ if (p_vertical) {
+ undo_redo->create_action(TTR("Change Vertical Expand Flag"));
+ } else {
+ undo_redo->create_action(TTR("Change Horizontal Expand Flag"));
+ }
+
+ for (Node *E : selection) {
+ Control *control = Object::cast_to<Control>(E);
+ if (control) {
+ int old_flags = p_vertical ? control->get_v_size_flags() : control->get_h_size_flags();
+ int new_flags = old_flags;
+
+ if (p_expand) {
+ new_flags |= Control::SIZE_EXPAND;
+ } else {
+ new_flags &= ~Control::SIZE_EXPAND;
+ }
+
+ if (p_vertical) {
+ undo_redo->add_do_method(control, "set_v_size_flags", new_flags);
+ undo_redo->add_undo_method(control, "set_v_size_flags", old_flags);
+ } else {
+ undo_redo->add_do_method(control, "set_h_size_flags", new_flags);
+ undo_redo->add_undo_method(control, "set_h_size_flags", old_flags);
}
- undo_redo->add_undo_method(control, "_edit_set_state", control->_edit_get_state());
}
}
@@ -968,6 +1016,30 @@ void ControlEditorToolbar::_selection_changed() {
container_h_picker->set_allowed_flags(allowed_all_flags);
container_v_picker->set_allowed_flags(allowed_all_flags);
}
+
+ // Update expand toggles.
+ int nb_valid_controls = 0;
+ int nb_h_expand = 0;
+ int nb_v_expand = 0;
+
+ List<Node *> selection = editor_selection->get_selected_node_list();
+ for (Node *E : selection) {
+ Control *control = Object::cast_to<Control>(E);
+ if (!control) {
+ continue;
+ }
+
+ nb_valid_controls++;
+ if (control->get_h_size_flags() & Control::SIZE_EXPAND) {
+ nb_h_expand++;
+ }
+ if (control->get_v_size_flags() & Control::SIZE_EXPAND) {
+ nb_v_expand++;
+ }
+ }
+
+ container_h_picker->set_expand_flag(nb_valid_controls == nb_h_expand);
+ container_v_picker->set_expand_flag(nb_valid_controls == nb_v_expand);
} else {
containers_button->set_visible(false);
}
@@ -1025,6 +1097,7 @@ ControlEditorToolbar::ControlEditorToolbar() {
container_h_picker = memnew(SizeFlagPresetPicker(false));
containers_button->get_popup_hbox()->add_child(container_h_picker);
container_h_picker->connect("size_flags_selected", callable_mp(this, &ControlEditorToolbar::_container_flags_selected).bind(false));
+ container_h_picker->connect("expand_flag_toggled", callable_mp(this, &ControlEditorToolbar::_expand_flag_toggled).bind(false));
containers_button->get_popup_hbox()->add_child(memnew(HSeparator));
@@ -1034,6 +1107,7 @@ ControlEditorToolbar::ControlEditorToolbar() {
container_v_picker = memnew(SizeFlagPresetPicker(true));
containers_button->get_popup_hbox()->add_child(container_v_picker);
container_v_picker->connect("size_flags_selected", callable_mp(this, &ControlEditorToolbar::_container_flags_selected).bind(true));
+ container_v_picker->connect("expand_flag_toggled", callable_mp(this, &ControlEditorToolbar::_expand_flag_toggled).bind(true));
// Editor connections.
editor_selection = EditorNode::get_singleton()->get_editor_selection();
diff --git a/editor/plugins/control_editor_plugin.h b/editor/plugins/control_editor_plugin.h
index be52187cd3..2672e8ef97 100644
--- a/editor/plugins/control_editor_plugin.h
+++ b/editor/plugins/control_editor_plugin.h
@@ -45,6 +45,7 @@
#include "scene/gui/separator.h"
#include "scene/gui/texture_rect.h"
+class CheckButton;
class EditorSelection;
class GridContainer;
@@ -191,11 +192,12 @@ public:
class SizeFlagPresetPicker : public ControlEditorPresetPicker {
GDCLASS(SizeFlagPresetPicker, ControlEditorPresetPicker);
- CheckBox *expand_button = nullptr;
+ CheckButton *expand_button = nullptr;
bool vertical = false;
virtual void _preset_button_pressed(const int p_preset) override;
+ void _expand_button_pressed();
protected:
void _notification(int p_notification);
@@ -203,6 +205,7 @@ protected:
public:
void set_allowed_flags(Vector<SizeFlags> &p_flags);
+ void set_expand_flag(bool p_expand);
SizeFlagPresetPicker(bool p_vertical);
};
@@ -225,6 +228,7 @@ class ControlEditorToolbar : public HBoxContainer {
void _anchors_to_current_ratio();
void _anchor_mode_toggled(bool p_status);
void _container_flags_selected(int p_flags, bool p_vertical);
+ void _expand_flag_toggled(bool p_expand, bool p_vertical);
Vector2 _position_to_anchor(const Control *p_control, Vector2 position);
bool _is_node_locked(const Node *p_node);
diff --git a/editor/plugins/sprite_2d_editor_plugin.cpp b/editor/plugins/sprite_2d_editor_plugin.cpp
index 34a0df5906..557594b2a9 100644
--- a/editor/plugins/sprite_2d_editor_plugin.cpp
+++ b/editor/plugins/sprite_2d_editor_plugin.cpp
@@ -396,7 +396,7 @@ void Sprite2DEditor::_create_collision_polygon_2d_node() {
collision_polygon_2d_instance->set_polygon(outline);
EditorUndoRedoManager *ur = EditorUndoRedoManager::get_singleton();
- ur->create_action(TTR("Create CollisionPolygon2D Sibling"));
+ ur->create_action(TTR("Create CollisionPolygon2D Sibling"), UndoRedo::MERGE_DISABLE, node);
ur->add_do_method(this, "_add_as_sibling_or_child", node, collision_polygon_2d_instance);
ur->add_do_reference(collision_polygon_2d_instance);
ur->add_undo_method(node != get_tree()->get_edited_scene_root() ? node->get_parent() : get_tree()->get_edited_scene_root(), "remove_child", collision_polygon_2d_instance);
@@ -429,7 +429,7 @@ void Sprite2DEditor::_create_light_occluder_2d_node() {
light_occluder_2d_instance->set_occluder_polygon(polygon);
EditorUndoRedoManager *ur = EditorUndoRedoManager::get_singleton();
- ur->create_action(TTR("Create LightOccluder2D Sibling"));
+ ur->create_action(TTR("Create LightOccluder2D Sibling"), UndoRedo::MERGE_DISABLE, node);
ur->add_do_method(this, "_add_as_sibling_or_child", node, light_occluder_2d_instance);
ur->add_do_reference(light_occluder_2d_instance);
ur->add_undo_method(node != get_tree()->get_edited_scene_root() ? node->get_parent() : get_tree()->get_edited_scene_root(), "remove_child", light_occluder_2d_instance);
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index 3a1de937e2..6f0a8bc909 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -2865,21 +2865,24 @@ void SceneTreeDock::replace_node(Node *p_node, Node *p_by_node) {
void SceneTreeDock::_replace_node(Node *p_node, Node *p_by_node, bool p_keep_properties, bool p_remove_old) {
ERR_FAIL_COND_MSG(!p_node->is_inside_tree(), "_replace_node() can't be called on a node outside of tree. You might have called it twice.");
- Node *n = p_node;
+ Node *oldnode = p_node;
Node *newnode = p_by_node;
if (p_keep_properties) {
- Node *default_oldnode = Object::cast_to<Node>(ClassDB::instantiate(n->get_class()));
+ Node *default_oldnode = Object::cast_to<Node>(ClassDB::instantiate(oldnode->get_class()));
+
List<PropertyInfo> pinfo;
- n->get_property_list(&pinfo);
+ oldnode->get_property_list(&pinfo);
for (const PropertyInfo &E : pinfo) {
if (!(E.usage & PROPERTY_USAGE_STORAGE)) {
continue;
}
- if (default_oldnode->get(E.name) != n->get(E.name)) {
- newnode->set(E.name, n->get(E.name));
+ bool valid;
+ const Variant &default_val = default_oldnode->get(E.name, &valid);
+ if (!valid || default_val != oldnode->get(E.name)) {
+ newnode->set(E.name, oldnode->get(E.name));
}
}
@@ -2891,10 +2894,10 @@ void SceneTreeDock::_replace_node(Node *p_node, Node *p_by_node, bool p_keep_pro
//reconnect signals
List<MethodInfo> sl;
- n->get_signal_list(&sl);
+ oldnode->get_signal_list(&sl);
for (const MethodInfo &E : sl) {
List<Object::Connection> cl;
- n->get_signal_connection_list(E.name, &cl);
+ oldnode->get_signal_connection_list(E.name, &cl);
for (const Object::Connection &c : cl) {
if (!(c.flags & Object::CONNECT_PERSIST)) {
@@ -2904,15 +2907,15 @@ void SceneTreeDock::_replace_node(Node *p_node, Node *p_by_node, bool p_keep_pro
}
}
- String newname = n->get_name();
+ String newname = oldnode->get_name();
List<Node *> to_erase;
- for (int i = 0; i < n->get_child_count(); i++) {
- if (n->get_child(i)->get_owner() == nullptr && n->is_owned_by_parent()) {
- to_erase.push_back(n->get_child(i));
+ for (int i = 0; i < oldnode->get_child_count(); i++) {
+ if (oldnode->get_child(i)->get_owner() == nullptr && oldnode->is_owned_by_parent()) {
+ to_erase.push_back(oldnode->get_child(i));
}
}
- n->replace_by(newnode, true);
+ oldnode->replace_by(newnode, true);
//small hack to make collisionshapes and other kind of nodes to work
for (int i = 0; i < newnode->get_child_count(); i++) {
@@ -2928,7 +2931,7 @@ void SceneTreeDock::_replace_node(Node *p_node, Node *p_by_node, bool p_keep_pro
_push_item(newnode);
if (p_remove_old) {
- memdelete(n);
+ memdelete(oldnode);
while (to_erase.front()) {
memdelete(to_erase.front()->get());
diff --git a/editor/themes/editor_color_map.cpp b/editor/themes/editor_color_map.cpp
index 99bcf109d0..9046a8b688 100644
--- a/editor/themes/editor_color_map.cpp
+++ b/editor/themes/editor_color_map.cpp
@@ -169,9 +169,7 @@ void EditorColorMap::create() {
add_conversion_exception("ZoomReset");
add_conversion_exception("LockViewport");
add_conversion_exception("GroupViewport");
- add_conversion_exception("StatusError");
add_conversion_exception("StatusSuccess");
- add_conversion_exception("StatusWarning");
add_conversion_exception("OverbrightIndicator");
add_conversion_exception("MaterialPreviewCube");
add_conversion_exception("MaterialPreviewSphere");
diff --git a/editor/themes/editor_theme_manager.cpp b/editor/themes/editor_theme_manager.cpp
index ee008e5636..2ef62c60a2 100644
--- a/editor/themes/editor_theme_manager.cpp
+++ b/editor/themes/editor_theme_manager.cpp
@@ -436,8 +436,8 @@ void EditorThemeManager::_create_shared_styles(const Ref<EditorTheme> &p_theme,
if (!p_config.dark_theme) {
// Darken some colors to be readable on a light background.
p_config.success_color = p_config.success_color.lerp(p_config.mono_color, 0.35);
- p_config.warning_color = p_config.warning_color.lerp(p_config.mono_color, 0.35);
- p_config.error_color = p_config.error_color.lerp(p_config.mono_color, 0.25);
+ p_config.warning_color = Color(0.82, 0.56, 0.1);
+ p_config.error_color = Color(0.8, 0.22, 0.22);
}
p_theme->set_color("mono_color", EditorStringName(Editor), p_config.mono_color);
@@ -1901,14 +1901,20 @@ void EditorThemeManager::_populate_editor_styles(const Ref<EditorTheme> &p_theme
// When pressed, don't tint the icons with the accent color, just leave them normal.
p_theme->set_color("icon_pressed_color", "EditorLogFilterButton", p_config.icon_normal_color);
// When unpressed, dim the icons.
- p_theme->set_color("icon_normal_color", "EditorLogFilterButton", p_config.icon_disabled_color);
+ Color icon_normal_color = Color(p_config.icon_normal_color, (p_config.dark_theme ? 0.4 : 0.8));
+ p_theme->set_color("icon_normal_color", "EditorLogFilterButton", icon_normal_color);
+ Color icon_hover_color = p_config.icon_normal_color * (p_config.dark_theme ? 1.15 : 1.0);
+ icon_hover_color.a = 1.0;
+ p_theme->set_color("icon_hover_color", "EditorLogFilterButton", icon_hover_color);
// When pressed, add a small bottom border to the buttons to better show their active state,
// similar to active tabs.
Ref<StyleBoxFlat> editor_log_button_pressed = style_flat_button_pressed->duplicate();
editor_log_button_pressed->set_border_width(SIDE_BOTTOM, 2 * EDSCALE);
editor_log_button_pressed->set_border_color(p_config.accent_color);
-
+ if (!p_config.dark_theme) {
+ editor_log_button_pressed->set_bg_color(flat_pressed_color.lightened(0.5));
+ }
p_theme->set_stylebox("normal", "EditorLogFilterButton", style_flat_button);
p_theme->set_stylebox("hover", "EditorLogFilterButton", style_flat_button_hover);
p_theme->set_stylebox("pressed", "EditorLogFilterButton", editor_log_button_pressed);