diff options
Diffstat (limited to 'editor')
-rw-r--r-- | editor/SCsub | 83 | ||||
-rw-r--r-- | editor/code_editor.cpp | 6 | ||||
-rw-r--r-- | editor/gui/editor_file_dialog.cpp | 1 | ||||
-rw-r--r-- | editor/plugins/canvas_item_editor_plugin.cpp | 7 | ||||
-rw-r--r-- | editor/plugins/control_editor_plugin.cpp | 80 | ||||
-rw-r--r-- | editor/plugins/control_editor_plugin.h | 6 | ||||
-rw-r--r-- | editor/plugins/sprite_2d_editor_plugin.cpp | 4 | ||||
-rw-r--r-- | editor/scene_tree_dock.cpp | 29 | ||||
-rw-r--r-- | editor/themes/editor_color_map.cpp | 2 | ||||
-rw-r--r-- | editor/themes/editor_theme_manager.cpp | 14 |
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); |