diff options
Diffstat (limited to 'editor')
28 files changed, 348 insertions, 147 deletions
diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp index 14ea18f885..6728f60e06 100644 --- a/editor/animation_bezier_editor.cpp +++ b/editor/animation_bezier_editor.cpp @@ -354,10 +354,12 @@ void AnimationBezierTrackEdit::_notification(int p_what) { { //guides float min_left_scale = font->get_height() + vsep; - float scale = 1; + float scale = (min_left_scale * 2) * v_zoom; + float step = Math::pow(10.0, Math::round(Math::log(scale / 5.0) / Math::log(10.0))) * 5.0; + scale = Math::stepify(scale, step); while (scale / v_zoom < min_left_scale * 2) { - scale *= 5; + scale += step; } bool first = true; @@ -378,7 +380,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) { draw_line(Point2(limit, i), Point2(right_limit, i), lc); Color c = color; c.a *= 0.5; - draw_string(font, Point2(limit + 8, i - 2), itos((iv + 1) * scale), c); + draw_string(font, Point2(limit + 8, i - 2), rtos(Math::stepify((iv + 1) * scale, step)), c); } first = false; @@ -628,24 +630,28 @@ void AnimationBezierTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> mb = p_event; if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_WHEEL_DOWN) { + float v_zoom_orig = v_zoom; if (mb->get_command()) { timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() * 1.05); } else { - if (v_zoom < 1000) { + if (v_zoom < 100000) { v_zoom *= 1.2; } } + v_scroll = v_scroll + (mb->get_position().y - get_size().y / 2) * (v_zoom - v_zoom_orig); update(); } if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_WHEEL_UP) { + float v_zoom_orig = v_zoom; if (mb->get_command()) { timeline->get_zoom()->set_value(timeline->get_zoom()->get_value() / 1.05); } else { - if (v_zoom > 0.01) { + if (v_zoom > 0.000001) { v_zoom /= 1.2; } } + v_scroll = v_scroll + (mb->get_position().y - get_size().y / 2) * (v_zoom - v_zoom_orig); update(); } diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 61adff7c9c..b6cd69c3cd 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -366,14 +366,12 @@ bool FindReplaceBar::search_prev() { if (text_edit->is_selection_active()) col--; // Skip currently selected word. - if (line == result_line && col == result_col) { - col -= text.length(); - if (col < 0) { - line -= 1; - if (line < 0) - line = text_edit->get_line_count() - 1; - col = text_edit->get_line(line).length(); - } + col -= text.length(); + if (col < 0) { + line -= 1; + if (line < 0) + line = text_edit->get_line_count() - 1; + col = text_edit->get_line(line).length(); } return _search(flags, line, col); @@ -887,33 +885,33 @@ bool CodeTextEditor::_add_font_size(int p_delta) { void CodeTextEditor::update_editor_settings() { - text_editor->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/completion/auto_brace_complete")); - text_editor->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/cursor/scroll_past_end_of_file")); + text_editor->set_syntax_coloring(EditorSettings::get_singleton()->get("text_editor/highlighting/syntax_highlighting")); + text_editor->set_highlight_all_occurrences(EditorSettings::get_singleton()->get("text_editor/highlighting/highlight_all_occurrences")); + text_editor->set_highlight_current_line(EditorSettings::get_singleton()->get("text_editor/highlighting/highlight_current_line")); text_editor->set_indent_using_spaces(EditorSettings::get_singleton()->get("text_editor/indent/type")); text_editor->set_indent_size(EditorSettings::get_singleton()->get("text_editor/indent/size")); text_editor->set_auto_indent(EditorSettings::get_singleton()->get("text_editor/indent/auto_indent")); text_editor->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/indent/draw_tabs")); text_editor->set_draw_spaces(EditorSettings::get_singleton()->get("text_editor/indent/draw_spaces")); - text_editor->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_line_numbers")); - text_editor->set_line_numbers_zero_padded(EditorSettings::get_singleton()->get("text_editor/line_numbers/line_numbers_zero_padded")); - text_editor->set_show_line_length_guideline(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_line_length_guideline")); - text_editor->set_line_length_guideline_column(EditorSettings::get_singleton()->get("text_editor/line_numbers/line_length_guideline_column")); - text_editor->set_syntax_coloring(EditorSettings::get_singleton()->get("text_editor/highlighting/syntax_highlighting")); - text_editor->set_highlight_all_occurrences(EditorSettings::get_singleton()->get("text_editor/highlighting/highlight_all_occurrences")); - text_editor->set_highlight_current_line(EditorSettings::get_singleton()->get("text_editor/highlighting/highlight_current_line")); + text_editor->set_smooth_scroll_enabled(EditorSettings::get_singleton()->get("text_editor/navigation/smooth_scrolling")); + text_editor->set_v_scroll_speed(EditorSettings::get_singleton()->get("text_editor/navigation/v_scroll_speed")); + text_editor->set_draw_minimap(EditorSettings::get_singleton()->get("text_editor/navigation/show_minimap")); + text_editor->set_minimap_width(EditorSettings::get_singleton()->get("text_editor/navigation/minimap_width")); + text_editor->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/appearance/show_line_numbers")); + text_editor->set_line_numbers_zero_padded(EditorSettings::get_singleton()->get("text_editor/appearance/line_numbers_zero_padded")); + text_editor->set_bookmark_gutter_enabled(EditorSettings::get_singleton()->get("text_editor/appearance/show_bookmark_gutter")); + text_editor->set_breakpoint_gutter_enabled(EditorSettings::get_singleton()->get("text_editor/appearance/show_breakpoint_gutter")); + text_editor->set_draw_info_gutter(EditorSettings::get_singleton()->get("text_editor/appearance/show_info_gutter")); + text_editor->set_hiding_enabled(EditorSettings::get_singleton()->get("text_editor/appearance/code_folding")); + text_editor->set_draw_fold_gutter(EditorSettings::get_singleton()->get("text_editor/appearance/code_folding")); + text_editor->set_wrap_enabled(EditorSettings::get_singleton()->get("text_editor/appearance/word_wrap")); + text_editor->set_show_line_length_guideline(EditorSettings::get_singleton()->get("text_editor/appearance/show_line_length_guideline")); + text_editor->set_line_length_guideline_column(EditorSettings::get_singleton()->get("text_editor/appearance/line_length_guideline_column")); + text_editor->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/cursor/scroll_past_end_of_file")); + text_editor->cursor_set_block_mode(EditorSettings::get_singleton()->get("text_editor/cursor/block_caret")); text_editor->cursor_set_blink_enabled(EditorSettings::get_singleton()->get("text_editor/cursor/caret_blink")); text_editor->cursor_set_blink_speed(EditorSettings::get_singleton()->get("text_editor/cursor/caret_blink_speed")); - text_editor->set_bookmark_gutter_enabled(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_bookmark_gutter")); - text_editor->set_breakpoint_gutter_enabled(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_breakpoint_gutter")); - text_editor->set_hiding_enabled(EditorSettings::get_singleton()->get("text_editor/line_numbers/code_folding")); - text_editor->set_draw_fold_gutter(EditorSettings::get_singleton()->get("text_editor/line_numbers/code_folding")); - text_editor->set_wrap_enabled(EditorSettings::get_singleton()->get("text_editor/line_numbers/word_wrap")); - text_editor->set_draw_minimap(EditorSettings::get_singleton()->get("text_editor/line_numbers/draw_minimap")); - text_editor->set_minimap_width(EditorSettings::get_singleton()->get("text_editor/line_numbers/minimap_width")); - text_editor->set_draw_info_gutter(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_info_gutter")); - text_editor->cursor_set_block_mode(EditorSettings::get_singleton()->get("text_editor/cursor/block_caret")); - text_editor->set_smooth_scroll_enabled(EditorSettings::get_singleton()->get("text_editor/open_scripts/smooth_scrolling")); - text_editor->set_v_scroll_speed(EditorSettings::get_singleton()->get("text_editor/open_scripts/v_scroll_speed")); + text_editor->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/completion/auto_brace_complete")); } void CodeTextEditor::trim_trailing_whitespace() { diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 8ed6cec779..98f5fcbeec 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -5637,6 +5637,8 @@ EditorNode::EditorNode() { EDITOR_DEF("interface/inspector/horizontal_vector_types_editing", true); EDITOR_DEF("interface/inspector/open_resources_in_current_inspector", true); EDITOR_DEF("interface/inspector/resources_to_open_in_new_inspector", "SpatialMaterial,Script,MeshLibrary,TileSet"); + EDITOR_DEF("interface/inspector/default_color_picker_mode", 0); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "interface/inspector/default_color_picker_mode", PROPERTY_HINT_ENUM, "RGB,HSV,RAW", PROPERTY_USAGE_DEFAULT)); EDITOR_DEF("run/auto_save/save_before_running", true); theme_base = memnew(Control); diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp index e27f1ab9eb..310a107ca9 100644 --- a/editor/editor_plugin.cpp +++ b/editor/editor_plugin.cpp @@ -211,6 +211,10 @@ String EditorInterface::get_selected_path() const { return EditorNode::get_singleton()->get_filesystem_dock()->get_selected_path(); } +String EditorInterface::get_current_path() const { + return EditorNode::get_singleton()->get_filesystem_dock()->get_current_path(); +} + void EditorInterface::inspect_object(Object *p_obj, const String &p_for_property) { EditorNode::get_singleton()->push_item(p_obj, p_for_property); @@ -238,7 +242,7 @@ Control *EditorInterface::get_base_control() { } void EditorInterface::set_plugin_enabled(const String &p_plugin, bool p_enabled) { - EditorNode::get_singleton()->set_addon_plugin_enabled(p_plugin, p_enabled); + EditorNode::get_singleton()->set_addon_plugin_enabled(p_plugin, p_enabled, true); } bool EditorInterface::is_plugin_enabled(const String &p_plugin) const { @@ -288,6 +292,7 @@ void EditorInterface::_bind_methods() { ClassDB::bind_method(D_METHOD("make_mesh_previews", "meshes", "preview_size"), &EditorInterface::_make_mesh_previews); ClassDB::bind_method(D_METHOD("select_file", "file"), &EditorInterface::select_file); ClassDB::bind_method(D_METHOD("get_selected_path"), &EditorInterface::get_selected_path); + ClassDB::bind_method(D_METHOD("get_current_path"), &EditorInterface::get_current_path); ClassDB::bind_method(D_METHOD("set_plugin_enabled", "plugin", "enabled"), &EditorInterface::set_plugin_enabled); ClassDB::bind_method(D_METHOD("is_plugin_enabled", "plugin"), &EditorInterface::is_plugin_enabled); diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h index 8941dfa28c..63f5a4f87a 100644 --- a/editor/editor_plugin.h +++ b/editor/editor_plugin.h @@ -78,6 +78,7 @@ public: void select_file(const String &p_file); String get_selected_path() const; + String get_current_path() const; void inspect_object(Object *p_obj, const String &p_for_property = String()); diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index d7b3c7733b..30fb561fbe 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -1842,10 +1842,20 @@ void EditorPropertyColor::_popup_closed() { emit_changed(get_edited_property(), picker->get_pick_color(), "", false); } +void EditorPropertyColor::_picker_created() { + // get default color picker mode from editor settings + int default_color_mode = EDITOR_GET("interface/inspector/default_color_picker_mode"); + if (default_color_mode == 1) + picker->get_picker()->set_hsv_mode(true); + else if (default_color_mode == 2) + picker->get_picker()->set_raw_mode(true); +} + void EditorPropertyColor::_bind_methods() { ClassDB::bind_method(D_METHOD("_color_changed"), &EditorPropertyColor::_color_changed); ClassDB::bind_method(D_METHOD("_popup_closed"), &EditorPropertyColor::_popup_closed); + ClassDB::bind_method(D_METHOD("_picker_created"), &EditorPropertyColor::_picker_created); } void EditorPropertyColor::update_property() { @@ -1864,6 +1874,7 @@ EditorPropertyColor::EditorPropertyColor() { picker->set_flat(true); picker->connect("color_changed", this, "_color_changed"); picker->connect("popup_closed", this, "_popup_closed"); + picker->connect("picker_created", this, "_picker_created"); } ////////////// NODE PATH ////////////////////// diff --git a/editor/editor_properties.h b/editor/editor_properties.h index 0a4a07cdc0..adf7779dc4 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -493,6 +493,7 @@ class EditorPropertyColor : public EditorProperty { ColorPickerButton *picker; void _color_changed(const Color &p_color); void _popup_closed(); + void _picker_created(); protected: static void _bind_methods(); diff --git a/editor/editor_sectioned_inspector.cpp b/editor/editor_sectioned_inspector.cpp index ad6b280b6d..abff8190af 100644 --- a/editor/editor_sectioned_inspector.cpp +++ b/editor/editor_sectioned_inspector.cpp @@ -316,7 +316,7 @@ SectionedInspector::SectionedInspector() : add_constant_override("autohide", 1); // Fixes the dragger always showing up VBoxContainer *left_vb = memnew(VBoxContainer); - left_vb->set_custom_minimum_size(Size2(170, 0) * EDSCALE); + left_vb->set_custom_minimum_size(Size2(190, 0) * EDSCALE); add_child(left_vb); sections->set_v_size_flags(SIZE_EXPAND_FILL); diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index ea6361665c..479fe5f0cb 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -440,25 +440,27 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("text_editor/indent/draw_tabs", true); _initial_set("text_editor/indent/draw_spaces", false); - // Line numbers - _initial_set("text_editor/line_numbers/show_line_numbers", true); - _initial_set("text_editor/line_numbers/line_numbers_zero_padded", false); - _initial_set("text_editor/line_numbers/show_bookmark_gutter", true); - _initial_set("text_editor/line_numbers/show_breakpoint_gutter", true); - _initial_set("text_editor/line_numbers/show_info_gutter", true); - _initial_set("text_editor/line_numbers/code_folding", true); - _initial_set("text_editor/line_numbers/word_wrap", false); - _initial_set("text_editor/line_numbers/draw_minimap", true); - _initial_set("text_editor/line_numbers/minimap_width", 80); - hints["text_editor/line_numbers/minimap_width"] = PropertyInfo(Variant::INT, "text_editor/line_numbers/minimap_width", PROPERTY_HINT_RANGE, "50,250,1"); - _initial_set("text_editor/line_numbers/show_line_length_guideline", false); - _initial_set("text_editor/line_numbers/line_length_guideline_column", 80); - hints["text_editor/line_numbers/line_length_guideline_column"] = PropertyInfo(Variant::INT, "text_editor/line_numbers/line_length_guideline_column", PROPERTY_HINT_RANGE, "20, 160, 1"); - - // Open scripts - _initial_set("text_editor/open_scripts/smooth_scrolling", true); - _initial_set("text_editor/open_scripts/v_scroll_speed", 80); - _initial_set("text_editor/open_scripts/show_members_overview", true); + // Navigation + _initial_set("text_editor/navigation/smooth_scrolling", true); + _initial_set("text_editor/navigation/v_scroll_speed", 80); + _initial_set("text_editor/navigation/show_minimap", true); + _initial_set("text_editor/navigation/minimap_width", 80); + hints["text_editor/navigation/minimap_width"] = PropertyInfo(Variant::INT, "text_editor/navigation/minimap_width", PROPERTY_HINT_RANGE, "50,250,1"); + + // Appearance + _initial_set("text_editor/appearance/show_line_numbers", true); + _initial_set("text_editor/appearance/line_numbers_zero_padded", false); + _initial_set("text_editor/appearance/show_bookmark_gutter", true); + _initial_set("text_editor/appearance/show_breakpoint_gutter", true); + _initial_set("text_editor/appearance/show_info_gutter", true); + _initial_set("text_editor/appearance/code_folding", true); + _initial_set("text_editor/appearance/word_wrap", false); + _initial_set("text_editor/appearance/show_line_length_guideline", false); + _initial_set("text_editor/appearance/line_length_guideline_column", 80); + hints["text_editor/appearance/line_length_guideline_column"] = PropertyInfo(Variant::INT, "text_editor/appearance/line_length_guideline_column", PROPERTY_HINT_RANGE, "20, 160, 1"); + + // Script list + _initial_set("text_editor/script_list/show_members_overview", true); // Files _initial_set("text_editor/files/trim_trailing_whitespace_on_save", false); diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index 46a30b7554..35fe366526 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -138,20 +138,39 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { void EditorSpinSlider::_grabber_gui_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> mb = p_event; + + if (grabbing_grabber) { + if (mb.is_valid()) { + + if (mb->get_button_index() == BUTTON_WHEEL_UP) { + set_value(get_value() + get_step()); + mousewheel_over_grabber = true; + } else if (mb->get_button_index() == BUTTON_WHEEL_DOWN) { + set_value(get_value() - get_step()); + mousewheel_over_grabber = true; + } + } + } + if (mb.is_valid() && mb->get_button_index() == BUTTON_LEFT) { if (mb->is_pressed()) { grabbing_grabber = true; - grabbing_ratio = get_as_ratio(); - grabbing_from = grabber->get_transform().xform(mb->get_position()).x; + if (!mousewheel_over_grabber) { + grabbing_ratio = get_as_ratio(); + grabbing_from = grabber->get_transform().xform(mb->get_position()).x; + } } else { grabbing_grabber = false; + mousewheel_over_grabber = false; } } Ref<InputEventMouseMotion> mm = p_event; if (mm.is_valid() && grabbing_grabber) { + if (mousewheel_over_grabber) + return; float grabbing_ofs = (grabber->get_transform().xform(mm->get_position()).x - grabbing_from) / float(grabber_range); set_as_ratio(grabbing_ratio + grabbing_ofs); @@ -267,6 +286,11 @@ void EditorSpinSlider::_notification(int p_what) { grabber->set_size(Size2(0, 0)); grabber->set_position(get_global_position() + grabber_rect.position + grabber_rect.size * 0.5 - grabber->get_size() * 0.5); + + if (mousewheel_over_grabber) { + Input::get_singleton()->warp_mouse_position(grabber->get_position() + grabber_rect.size); + } + grabber_range = width; } } @@ -462,6 +486,7 @@ EditorSpinSlider::EditorSpinSlider() { grabber->connect("gui_input", this, "_grabber_gui_input"); mouse_over_spin = false; mouse_over_grabber = false; + mousewheel_over_grabber = false; grabbing_grabber = false; grabber_range = 1; value_input = memnew(LineEdit); diff --git a/editor/editor_spin_slider.h b/editor/editor_spin_slider.h index d91380e175..2dc6e2c2f2 100644 --- a/editor/editor_spin_slider.h +++ b/editor/editor_spin_slider.h @@ -48,6 +48,7 @@ class EditorSpinSlider : public Range { bool mouse_over_spin; bool mouse_over_grabber; + bool mousewheel_over_grabber; bool grabbing_grabber; int grabbing_from; diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index c15d24719f..e29e44caa2 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -1066,6 +1066,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("title_color", "GraphNode", default_node_color); default_node_color.a = 0.7; theme->set_color("close_color", "GraphNode", default_node_color); + theme->set_color("resizer_color", "GraphNode", default_node_color); theme->set_constant("port_offset", "GraphNode", 14 * EDSCALE); theme->set_constant("title_h_offset", "GraphNode", -16 * EDSCALE); diff --git a/editor/icons/icon_auto_key.svg b/editor/icons/icon_auto_key.svg index cbafe1ac38..3d5569397f 100644 --- a/editor/icons/icon_auto_key.svg +++ b/editor/icons/icon_auto_key.svg @@ -1,56 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_auto_key.svg" - inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1854" - inkscape:window-height="1016" - id="namedview8" - showgrid="false" - inkscape:zoom="10.429825" - inkscape:cx="10.199345" - inkscape:cy="-4.0344119" - inkscape:window-x="66" - inkscape:window-y="27" - inkscape:window-maximized="1" - inkscape:current-layer="svg6" /> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke-width:0.0333107" - d="M 3.5469681,13.426786 C 2.7965829,13.263778 2.2774312,12.503915 2.4037297,11.753472 c 0.1081234,-0.642451 0.6006808,-1.135008 1.2431317,-1.243131 0.9667125,-0.162696 1.8555225,0.726112 1.6928259,1.692826 -0.103766,0.616558 -0.5592173,1.098057 -1.1588427,1.225117 -0.2719576,0.05763 -0.3626872,0.05741 -0.6338765,-0.0014 z m 8.0861339,-0.08275 c -0.746862,-0.13829 -1.23937,-0.720718 -1.23937,-1.465649 0,-0.527377 0.244831,-0.978806 0.679757,-1.253362 0.471386,-0.297574 1.114188,-0.297574 1.585574,0 0.682727,0.430986 0.892336,1.362194 0.460575,2.046149 -0.307786,0.487563 -0.940521,0.773963 -1.486536,0.672862 z M 0.60726032,9.8305658 V 7.7161233 L 1.1770842,7.7070075 1.7469079,7.6978939 3.1889882,5.1995916 4.6310686,2.7012893 h 3.1726318 3.1726316 l 1.442755,2.4983023 1.442755,2.4983023 0.651097,0.00903 0.651096,0.00903 v 2.1145264 2.1145257 h -0.566282 -0.566281 v -0.161225 c 0,-0.234927 -0.113135,-0.639704 -0.255664,-0.914727 -0.16895,-0.326004 -0.574198,-0.731251 -0.900202,-0.9002019 -0.656732,-0.3403483 -1.428549,-0.3403483 -2.085281,0 -0.326004,0.1689519 -0.731252,0.5741989 -0.9002019,0.9002029 -0.1425297,0.275023 -0.2556639,0.6798 -0.2556639,0.914727 v 0.161225 H 7.8570969 6.0797346 L 6.0617736,11.686851 C 6.006289,10.889347 5.447548,10.170679 4.6603773,9.884336 4.4466221,9.8065798 4.3737631,9.797427 3.9716406,9.7978134 3.5871254,9.7981885 3.4905638,9.809405 3.3054265,9.8752358 2.5067319,10.159236 1.9362359,10.884501 1.8813215,11.68568 l -0.017772,0.259329 H 1.2354063 0.60726287 Z M 12.399247,7.7466889 c 0,-0.037287 -0.02623,-0.1073444 -0.0583,-0.1556843 -0.03206,-0.04834 -0.561225,-0.958444 -1.17592,-2.0224529 L 10.047407,3.6339894 7.6977565,3.6254406 C 5.4917229,3.6174174 5.3450379,3.6204563 5.2979001,3.6754094 5.1898818,3.8013046 2.9723198,7.6840061 2.9723198,7.7472381 c 0,0.067139 0.00758,0.067247 4.7134636,0.067247 h 4.7134636 z" - id="path6243" - inkscape:connector-curvature="0" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m5 3-3 5h-1v4h1.0507812a2.5 2.5 0 0 1 2.4492188-2 2.5 2.5 0 0 1 2.4453125 2h2.1054687a2.5 2.5 0 0 1 2.4492188-2 2.5 2.5 0 0 1 2.445312 2h1.054688v-4h-1l-4-5zm1 1h3l3 4h-8z" stroke-width=".033311"/><circle cx="4.5" cy="12.5" r="1.5"/><circle cx="11.5" cy="12.5" r="1.5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_ruler.svg b/editor/icons/icon_ruler.svg new file mode 100644 index 0000000000..a16eda000b --- /dev/null +++ b/editor/icons/icon_ruler.svg @@ -0,0 +1,5 @@ +<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333 4.2333" xmlns="http://www.w3.org/2000/svg"> +<g transform="translate(0 -292.77)"> +<path transform="matrix(.26458 0 0 .26458 0 292.77)" d="m1 1v7.5 6.5h14l-14-14zm3 7 4 4h-4v-4z" fill="#e0e0e0"/> +</g> +</svg> diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp index 574f906cfa..235c204265 100644 --- a/editor/plugins/animation_blend_tree_editor_plugin.cpp +++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp @@ -249,6 +249,7 @@ void AnimationNodeBlendTreeEditor::_update_graph() { node->add_color_override("title_color", c); c.a = 0.7; node->add_color_override("close_color", c); + node->add_color_override("resizer_color", c); } } diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index f42716c827..173079b6de 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -477,6 +477,19 @@ void AnimationPlayerEditor::_select_anim_by_name(const String &p_anim) { _animation_selected(idx); } +double AnimationPlayerEditor::_get_editor_step() const { + + // Returns the effective snapping value depending on snapping modifiers, or 0 if snapping is disabled. + if (track_editor->is_snap_enabled()) { + const String current = player->get_assigned_animation(); + const Ref<Animation> anim = player->get_animation(current); + // Use more precise snapping when holding Shift + return Input::get_singleton()->is_key_pressed(KEY_SHIFT) ? anim->get_step() * 0.25 : anim->get_step(); + } + + return 0.0; +} + void AnimationPlayerEditor::_animation_name_edited() { player->stop(); @@ -1017,7 +1030,7 @@ void AnimationPlayerEditor::_seek_value_changed(float p_value, bool p_set) { float pos = CLAMP(anim->get_length() * (p_value / frame->get_max()), 0, anim->get_length()); if (track_editor->is_snap_enabled()) { - pos = Math::stepify(pos, anim->get_step()); + pos = Math::stepify(pos, _get_editor_step()); } if (player->is_valid() && !p_set) { @@ -1068,7 +1081,7 @@ void AnimationPlayerEditor::_animation_key_editor_seek(float p_pos, bool p_drag) Ref<Animation> anim = player->get_animation(player->get_assigned_animation()); updating = true; - frame->set_value(Math::stepify(p_pos, track_editor->is_snap_enabled() ? anim->get_step() : 0)); + frame->set_value(Math::stepify(p_pos, _get_editor_step())); updating = false; _seek_value_changed(p_pos, !p_drag); diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h index 2ab2df68e6..4ad30675ec 100644 --- a/editor/plugins/animation_player_editor_plugin.h +++ b/editor/plugins/animation_player_editor_plugin.h @@ -161,6 +161,7 @@ class AnimationPlayerEditor : public VBoxContainer { } onion; void _select_anim_by_name(const String &p_anim); + double _get_editor_step() const; void _play_pressed(); void _play_from_pressed(); void _play_bw_pressed(); diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 894e5c7298..60b5f017d2 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -586,7 +586,7 @@ void EditorAssetLibrary::_notification(int p_what) { } break; case NOTIFICATION_VISIBILITY_CHANGED: { - if (is_visible()) { + if (is_visible() && initial_loading) { _repository_changed(0); // Update when shown for the first time. } } break; @@ -1133,6 +1133,8 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const } break; case REQUESTING_SEARCH: { + initial_loading = false; + // The loading text only needs to be displayed before the first page is loaded library_loading->hide(); @@ -1328,6 +1330,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { requesting = REQUESTING_NONE; templates_only = p_templates_only; + initial_loading = true; VBoxContainer *library_main = memnew(VBoxContainer); diff --git a/editor/plugins/asset_library_editor_plugin.h b/editor/plugins/asset_library_editor_plugin.h index b17a6dfe54..6a3158889e 100644 --- a/editor/plugins/asset_library_editor_plugin.h +++ b/editor/plugins/asset_library_editor_plugin.h @@ -206,6 +206,7 @@ class EditorAssetLibrary : public PanelContainer { HTTPRequest *request; bool templates_only; + bool initial_loading; enum Support { SUPPORT_OFFICIAL, diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 2daee70474..e4cd71fec0 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -2246,6 +2246,40 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) { return false; } +bool CanvasItemEditor::_gui_input_ruler_tool(const Ref<InputEvent> &p_event) { + + if (tool != TOOL_RULER) + return false; + + Ref<InputEventMouseButton> b = p_event; + Ref<InputEventMouseMotion> m = p_event; + + Point2 previous_origin = ruler_tool_origin; + if (!ruler_tool_active) + ruler_tool_origin = snap_point(viewport->get_local_mouse_position() / zoom + view_offset) * zoom; + + if (b.is_valid() && b->get_button_index() == BUTTON_LEFT) { + if (b->is_pressed()) { + ruler_tool_active = true; + } else { + ruler_tool_active = false; + } + + viewport->update(); + return true; + } + + bool is_snap_active = snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL); + + if (m.is_valid() && (ruler_tool_active || (is_snap_active && previous_origin != ruler_tool_origin))) { + + viewport->update(); + return true; + } + + return false; +} + bool CanvasItemEditor::_gui_input_hover(const Ref<InputEvent> &p_event) { Ref<InputEventMouseMotion> m = p_event; @@ -2323,6 +2357,8 @@ void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) { //printf("Anchors\n"); } else if ((accepted = _gui_input_select(p_event))) { //printf("Selection\n"); + } else if ((accepted = _gui_input_ruler_tool(p_event))) { + //printf("Measure\n"); } else { //printf("Not accepted\n"); } @@ -2350,6 +2386,9 @@ void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) { case TOOL_PAN: c = CURSOR_DRAG; break; + case TOOL_RULER: + c = CURSOR_CROSS; + break; default: break; } @@ -2626,6 +2665,83 @@ void CanvasItemEditor::_draw_grid() { } } +void CanvasItemEditor::_draw_ruler_tool() { + + if (tool != TOOL_RULER) + return; + + bool is_snap_active = snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL); + + if (ruler_tool_active) { + Color ruler_primary_color = get_color("accent_color", "Editor"); + Color ruler_secondary_color = ruler_primary_color; + ruler_secondary_color.a = 0.5; + + Point2 begin = ruler_tool_origin - view_offset * zoom; + Point2 end = snap_point(viewport->get_local_mouse_position() / zoom + view_offset) * zoom - view_offset * zoom; + Point2 corner = Point2(begin.x, end.y); + Vector2 length_vector = (begin - end).abs() / zoom; + + bool draw_secondary_lines = (begin.y != corner.y && end.x != corner.x); + + viewport->draw_line(begin, end, ruler_primary_color, Math::round(EDSCALE * 3), true); + if (draw_secondary_lines) { + viewport->draw_line(begin, corner, ruler_secondary_color, Math::round(EDSCALE)); + viewport->draw_line(corner, end, ruler_secondary_color, Math::round(EDSCALE)); + } + + Ref<Font> font = get_font("bold", "EditorFonts"); + Color font_color = get_color("font_color", "Editor"); + Color font_secondary_color = font_color; + font_secondary_color.a = 0.5; + float text_height = font->get_height(); + const float text_width = 76; + + Point2 text_pos = (begin + end) / 2 - Vector2(text_width / 2, text_height / 2); + text_pos.x = CLAMP(text_pos.x, text_width / 2, viewport->get_rect().size.x - text_width * 1.5); + text_pos.y = CLAMP(text_pos.y, text_height * 1.5, viewport->get_rect().size.y - text_height * 1.5); + viewport->draw_string(font, text_pos, vformat("%.2f px", length_vector.length()), font_color); + + if (draw_secondary_lines) { + + Point2 text_pos2 = text_pos; + text_pos2.x = begin.x < text_pos.x ? MIN(text_pos.x - text_width, begin.x - text_width / 2) : MAX(text_pos.x + text_width, begin.x - text_width / 2); + viewport->draw_string(font, text_pos2, vformat("%.2f px", length_vector.y), font_secondary_color); + + text_pos2 = text_pos; + text_pos2.y = end.y < text_pos.y ? MIN(text_pos.y - text_height * 2, end.y - text_height / 2) : MAX(text_pos.y + text_height * 2, end.y - text_height / 2); + viewport->draw_string(font, text_pos2, vformat("%.2f px", length_vector.x), font_secondary_color); + } + + if (is_snap_active) { + + text_pos = (begin + end) / 2 + Vector2(-text_width / 2, text_height / 2); + text_pos.x = CLAMP(text_pos.x, text_width / 2, viewport->get_rect().size.x - text_width * 1.5); + text_pos.y = CLAMP(text_pos.y, text_height * 2.5, viewport->get_rect().size.y - text_height / 2); + + if (draw_secondary_lines) { + viewport->draw_string(font, text_pos, vformat("%.2f units", (length_vector / grid_step).length()), font_color); + + Point2 text_pos2 = text_pos; + text_pos2.x = begin.x < text_pos.x ? MIN(text_pos.x - text_width, begin.x - text_width / 2) : MAX(text_pos.x + text_width, begin.x - text_width / 2); + viewport->draw_string(font, text_pos2, vformat("%d units", (int)(length_vector.y / grid_step.y)), font_secondary_color); + + text_pos2 = text_pos; + text_pos2.y = end.y < text_pos.y ? MIN(text_pos.y - text_height * 2, end.y + text_height / 2) : MAX(text_pos.y + text_height * 2, end.y + text_height / 2); + viewport->draw_string(font, text_pos2, vformat("%d units", (int)(length_vector.x / grid_step.x)), font_secondary_color); + } else { + viewport->draw_string(font, text_pos, vformat("%d units", roundf((length_vector / grid_step).length())), font_color); + } + } + } else { + + if (is_snap_active) { + Ref<Texture> position_icon = get_icon("EditorPosition", "EditorIcons"); + viewport->draw_texture(get_icon("EditorPosition", "EditorIcons"), ruler_tool_origin - view_offset * zoom - position_icon->get_size() / 2); + } + } +} + void CanvasItemEditor::_draw_control_anchors(Control *control) { Transform2D xform = transform * control->get_global_transform_with_canvas(); RID ci = viewport->get_canvas_item(); @@ -3358,6 +3474,7 @@ void CanvasItemEditor::_draw_viewport() { info_overlay->set_margin(MARGIN_LEFT, (show_rulers ? RULER_WIDTH : 0) + 10); _draw_grid(); + _draw_ruler_tool(); _draw_selection(); _draw_axis(); if (editor->get_edited_scene()) { @@ -3546,6 +3663,7 @@ void CanvasItemEditor::_notification(int p_what) { snap_config_menu->set_icon(get_icon("GuiMiniTabMenu", "EditorIcons")); skeleton_menu->set_icon(get_icon("Bone", "EditorIcons")); pan_button->set_icon(get_icon("ToolPan", "EditorIcons")); + ruler_button->set_icon(get_icon("Ruler", "EditorIcons")); pivot_button->set_icon(get_icon("EditPivot", "EditorIcons")); select_handle = get_icon("EditorHandle", "EditorIcons"); anchor_handle = get_icon("EditorControlAnchor", "EditorIcons"); @@ -3940,13 +4058,13 @@ void CanvasItemEditor::_button_toggle_snap(bool p_status) { void CanvasItemEditor::_button_tool_select(int p_index) { - ToolButton *tb[TOOL_MAX] = { select_button, list_select_button, move_button, scale_button, rotate_button, pivot_button, pan_button }; + ToolButton *tb[TOOL_MAX] = { select_button, list_select_button, move_button, scale_button, rotate_button, pivot_button, pan_button, ruler_button }; for (int i = 0; i < TOOL_MAX; i++) { tb[i]->set_pressed(i == p_index); } - viewport->update(); tool = (Tool)p_index; + viewport->update(); } void CanvasItemEditor::_insert_animation_keys(bool p_location, bool p_rotation, bool p_scale, bool p_on_existing) { @@ -4926,6 +5044,9 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { panning = false; pan_pressed = false; + ruler_tool_active = false; + ruler_tool_origin = Point2(); + bone_last_frame = 0; bone_list_dirty = false; @@ -5079,6 +5200,13 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { pan_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_PAN)); pan_button->set_tooltip(TTR("Pan Mode")); + ruler_button = memnew(ToolButton); + hb->add_child(ruler_button); + ruler_button->set_toggle_mode(true); + ruler_button->connect("pressed", this, "_button_tool_select", make_binds(TOOL_RULER)); + ruler_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/ruler_mode", TTR("Ruler Mode"), KEY_R)); + ruler_button->set_tooltip(TTR("Ruler Mode")); + hb->add_child(memnew(VSeparator)); snap_button = memnew(ToolButton); @@ -5171,7 +5299,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->set_hide_on_checkable_item_selection(false); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Show Grid"), KEY_G), SHOW_GRID); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_helpers", TTR("Show Helpers"), KEY_H), SHOW_HELPERS); - p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_rulers", TTR("Show Rulers"), KEY_R), SHOW_RULERS); + p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_rulers", TTR("Show Rulers"), KEY_MASK_CMD | KEY_R), SHOW_RULERS); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show Guides"), KEY_Y), SHOW_GUIDES); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_origin", TTR("Show Origin")), SHOW_ORIGIN); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_viewport", TTR("Show Viewport")), SHOW_VIEWPORT); diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index ac7d612292..4e030c63da 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -80,6 +80,7 @@ public: TOOL_ROTATE, TOOL_EDIT_PIVOT, TOOL_PAN, + TOOL_RULER, TOOL_MAX }; @@ -276,6 +277,9 @@ private: bool panning; bool pan_pressed; + bool ruler_tool_active; + Point2 ruler_tool_origin; + MenuOption last_option; struct _SelectResult { @@ -341,6 +345,8 @@ private: ToolButton *pivot_button; ToolButton *pan_button; + ToolButton *ruler_button; + ToolButton *snap_button; MenuButton *snap_config_menu; PopupMenu *smartsnap_config_popup; @@ -457,6 +463,7 @@ private: void _draw_guides(); void _draw_focus(); void _draw_grid(); + void _draw_ruler_tool(); void _draw_control_anchors(Control *control); void _draw_control_helpers(Control *control); void _draw_selection(); @@ -476,6 +483,7 @@ private: bool _gui_input_resize(const Ref<InputEvent> &p_event); bool _gui_input_rotate(const Ref<InputEvent> &p_event); bool _gui_input_select(const Ref<InputEvent> &p_event); + bool _gui_input_ruler_tool(const Ref<InputEvent> &p_event); bool _gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bool p_already_accepted); bool _gui_input_rulers_and_guides(const Ref<InputEvent> &p_event); bool _gui_input_hover(const Ref<InputEvent> &p_event); diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp index 5d3cef4c34..c2b6031e60 100644 --- a/editor/plugins/curve_editor_plugin.cpp +++ b/editor/plugins/curve_editor_plugin.cpp @@ -167,10 +167,20 @@ void CurveEditor::on_gui_input(const Ref<InputEvent> &p_event) { _has_undo_data = true; } + const float curve_amplitude = curve.get_max_value() - curve.get_min_value(); + // Snap to "round" coordinates when holding Ctrl. + // Be more precise when holding Shift as well. + float snap_threshold; + if (mm.get_control()) { + snap_threshold = mm.get_shift() ? 0.025 : 0.1; + } else { + snap_threshold = 0.0; + } + if (_selected_tangent == TANGENT_NONE) { // Drag point - Vector2 point_pos = get_world_pos(mpos); + Vector2 point_pos = get_world_pos(mpos).snapped(Vector2(snap_threshold, snap_threshold * curve_amplitude)); int i = curve.set_point_offset(_selected_point, point_pos.x); // The index may change if the point is dragged across another one @@ -188,8 +198,8 @@ void CurveEditor::on_gui_input(const Ref<InputEvent> &p_event) { } else { // Drag tangent - Vector2 point_pos = curve.get_point_position(_selected_point); - Vector2 control_pos = get_world_pos(mpos); + const Vector2 point_pos = curve.get_point_position(_selected_point); + const Vector2 control_pos = get_world_pos(mpos).snapped(Vector2(snap_threshold, snap_threshold * curve_amplitude)); Vector2 dir = (control_pos - point_pos).normalized(); diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 76c7545874..413843d536 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -1741,10 +1741,10 @@ void ScriptEditor::_update_help_overview() { void ScriptEditor::_update_script_colors() { - bool script_temperature_enabled = EditorSettings::get_singleton()->get("text_editor/open_scripts/script_temperature_enabled"); - bool highlight_current = EditorSettings::get_singleton()->get("text_editor/open_scripts/highlight_current_script"); + bool script_temperature_enabled = EditorSettings::get_singleton()->get("text_editor/script_list/script_temperature_enabled"); + bool highlight_current = EditorSettings::get_singleton()->get("text_editor/script_list/highlight_current_script"); - int hist_size = EditorSettings::get_singleton()->get("text_editor/open_scripts/script_temperature_history_size"); + int hist_size = EditorSettings::get_singleton()->get("text_editor/script_list/script_temperature_history_size"); Color hot_color = get_color("accent_color", "Editor"); Color cold_color = get_color("font_color", "Editor"); @@ -1759,7 +1759,7 @@ void ScriptEditor::_update_script_colors() { bool current = tab_container->get_current_tab() == c; if (current && highlight_current) { - script_list->set_item_custom_bg_color(i, EditorSettings::get_singleton()->get("text_editor/open_scripts/current_script_background_color")); + script_list->set_item_custom_bg_color(i, EditorSettings::get_singleton()->get("text_editor/script_list/current_script_background_color")); } else if (script_temperature_enabled) { @@ -1792,9 +1792,9 @@ void ScriptEditor::_update_script_names() { } script_list->clear(); - bool split_script_help = EditorSettings::get_singleton()->get("text_editor/open_scripts/group_help_pages"); - ScriptSortBy sort_by = (ScriptSortBy)(int)EditorSettings::get_singleton()->get("text_editor/open_scripts/sort_scripts_by"); - ScriptListName display_as = (ScriptListName)(int)EditorSettings::get_singleton()->get("text_editor/open_scripts/list_script_names_as"); + bool split_script_help = EditorSettings::get_singleton()->get("text_editor/script_list/group_help_pages"); + ScriptSortBy sort_by = (ScriptSortBy)(int)EditorSettings::get_singleton()->get("text_editor/script_list/sort_scripts_by"); + ScriptListName display_as = (ScriptListName)(int)EditorSettings::get_singleton()->get("text_editor/script_list/list_script_names_as"); Vector<_ScriptEditorItemData> sedata; @@ -2318,7 +2318,7 @@ void ScriptEditor::_editor_settings_changed() { convert_indent_on_save = EditorSettings::get_singleton()->get("text_editor/indent/convert_indent_on_save"); use_space_indentation = EditorSettings::get_singleton()->get("text_editor/indent/type"); - members_overview_enabled = EditorSettings::get_singleton()->get("text_editor/open_scripts/show_members_overview"); + members_overview_enabled = EditorSettings::get_singleton()->get("text_editor/script_list/show_members_overview"); help_overview_enabled = EditorSettings::get_singleton()->get("text_editor/help/show_help_index"); _update_members_overview_visibility(); _update_help_overview_visibility(); @@ -3129,7 +3129,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { waiting_update_names = false; pending_auto_reload = false; auto_reload_running_scripts = true; - members_overview_enabled = EditorSettings::get_singleton()->get("text_editor/open_scripts/show_members_overview"); + members_overview_enabled = EditorSettings::get_singleton()->get("text_editor/script_list/show_members_overview"); help_overview_enabled = EditorSettings::get_singleton()->get("text_editor/help/show_help_index"); editor = p_editor; @@ -3554,15 +3554,15 @@ ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) { EDITOR_DEF("text_editor/files/open_dominant_script_on_scene_change", true); EDITOR_DEF("text_editor/external/use_external_editor", false); EDITOR_DEF("text_editor/external/exec_path", ""); - EDITOR_DEF("text_editor/open_scripts/script_temperature_enabled", true); - EDITOR_DEF("text_editor/open_scripts/highlight_current_script", true); - EDITOR_DEF("text_editor/open_scripts/script_temperature_history_size", 15); - EDITOR_DEF("text_editor/open_scripts/current_script_background_color", Color(1, 1, 1, 0.3)); - EDITOR_DEF("text_editor/open_scripts/group_help_pages", true); - EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "text_editor/open_scripts/sort_scripts_by", PROPERTY_HINT_ENUM, "Name,Path,None")); - EDITOR_DEF("text_editor/open_scripts/sort_scripts_by", 0); - EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "text_editor/open_scripts/list_script_names_as", PROPERTY_HINT_ENUM, "Name,Parent Directory And Name,Full Path")); - EDITOR_DEF("text_editor/open_scripts/list_script_names_as", 0); + EDITOR_DEF("text_editor/script_list/script_temperature_enabled", true); + EDITOR_DEF("text_editor/script_list/highlight_current_script", true); + EDITOR_DEF("text_editor/script_list/script_temperature_history_size", 15); + EDITOR_DEF("text_editor/script_list/current_script_background_color", Color(1, 1, 1, 0.3)); + EDITOR_DEF("text_editor/script_list/group_help_pages", true); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "text_editor/script_list/sort_scripts_by", PROPERTY_HINT_ENUM, "Name,Path,None")); + EDITOR_DEF("text_editor/script_list/sort_scripts_by", 0); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "text_editor/script_list/list_script_names_as", PROPERTY_HINT_ENUM, "Name,Parent Directory And Name,Full Path")); + EDITOR_DEF("text_editor/script_list/list_script_names_as", 0); EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "text_editor/external/exec_path", PROPERTY_HINT_GLOBAL_FILE)); EDITOR_DEF("text_editor/external/exec_flags", "{file}"); EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "text_editor/external/exec_flags", PROPERTY_HINT_PLACEHOLDER_TEXT, "Call flags with placeholders: {project}, {file}, {col}, {line}.")); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index edc454ad1c..3b300a7ad5 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -1741,6 +1741,13 @@ ScriptTextEditor::ScriptTextEditor() { color_panel->add_child(color_picker); color_picker->connect("color_changed", this, "_color_changed"); + // get default color picker mode from editor settings + int default_color_mode = EDITOR_GET("interface/inspector/default_color_picker_mode"); + if (default_color_mode == 1) + color_picker->set_hsv_mode(true); + else if (default_color_mode == 2) + color_picker->set_raw_mode(true); + edit_hb = memnew(HBoxContainer); edit_menu = memnew(MenuButton); diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index 938dc8a1e7..e81c97d5dd 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -372,7 +372,7 @@ void ShaderEditor::_editor_settings_changed() { shader_editor->get_text_edit()->set_indent_using_spaces(EditorSettings::get_singleton()->get("text_editor/indent/type")); shader_editor->get_text_edit()->set_auto_indent(EditorSettings::get_singleton()->get("text_editor/indent/auto_indent")); shader_editor->get_text_edit()->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/indent/draw_tabs")); - shader_editor->get_text_edit()->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_line_numbers")); + shader_editor->get_text_edit()->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/appearance/show_line_numbers")); shader_editor->get_text_edit()->set_syntax_coloring(EditorSettings::get_singleton()->get("text_editor/highlighting/syntax_highlighting")); shader_editor->get_text_edit()->set_highlight_all_occurrences(EditorSettings::get_singleton()->get("text_editor/highlighting/highlight_all_occurrences")); shader_editor->get_text_edit()->set_highlight_current_line(EditorSettings::get_singleton()->get("text_editor/highlighting/highlight_current_line")); @@ -380,8 +380,8 @@ void ShaderEditor::_editor_settings_changed() { shader_editor->get_text_edit()->cursor_set_blink_speed(EditorSettings::get_singleton()->get("text_editor/cursor/caret_blink_speed")); shader_editor->get_text_edit()->add_constant_override("line_spacing", EditorSettings::get_singleton()->get("text_editor/theme/line_spacing")); shader_editor->get_text_edit()->cursor_set_block_mode(EditorSettings::get_singleton()->get("text_editor/cursor/block_caret")); - shader_editor->get_text_edit()->set_smooth_scroll_enabled(EditorSettings::get_singleton()->get("text_editor/open_scripts/smooth_scrolling")); - shader_editor->get_text_edit()->set_v_scroll_speed(EditorSettings::get_singleton()->get("text_editor/open_scripts/v_scroll_speed")); + shader_editor->get_text_edit()->set_smooth_scroll_enabled(EditorSettings::get_singleton()->get("text_editor/navigation/smooth_scrolling")); + shader_editor->get_text_edit()->set_v_scroll_speed(EditorSettings::get_singleton()->get("text_editor/navigation/v_scroll_speed")); } void ShaderEditor::_bind_methods() { diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index 66fbc32b1c..6b338ca02b 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -410,6 +410,7 @@ void VisualShaderEditor::_update_created_node(GraphNode *node) { node->add_color_override("title_color", c); c.a = 0.7; node->add_color_override("close_color", c); + node->add_color_override("resizer_color", c); } } diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index 899343c0f8..ecb272876d 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -859,6 +859,13 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant:: add_child(color_picker); color_picker->hide(); color_picker->connect("color_changed", this, "_color_changed"); + + // get default color picker mode from editor settings + int default_color_mode = EDITOR_GET("interface/inspector/default_color_picker_mode"); + if (default_color_mode == 1) + color_picker->set_hsv_mode(true); + else if (default_color_mode == 2) + color_picker->set_raw_mode(true); } color_picker->show(); diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index 43f540e688..f1fc4eb950 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -299,16 +299,34 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (p_node == get_scene_node() && p_node->get_scene_inherited_state().is_valid()) { item->add_button(0, get_icon("InstanceOptions", "EditorIcons"), BUTTON_SUBSCENE, false, TTR("Open in Editor")); - item->set_tooltip(0, TTR("Inherits:") + " " + p_node->get_scene_inherited_state()->get_path() + "\n" + TTR("Type:") + " " + p_node->get_class()); - } else if (p_node != get_scene_node() && p_node->get_filename() != "" && can_open_instance) { + String tooltip = TTR("Inherits:") + " " + p_node->get_scene_inherited_state()->get_path() + "\n" + TTR("Type:") + " " + p_node->get_class(); + if (p_node->get_editor_description() != String()) { + tooltip += "\n\n" + p_node->get_editor_description(); + } + + item->set_tooltip(0, tooltip); + } else if (p_node != get_scene_node() && p_node->get_filename() != "" && can_open_instance) { item->add_button(0, get_icon("InstanceOptions", "EditorIcons"), BUTTON_SUBSCENE, false, TTR("Open in Editor")); - item->set_tooltip(0, TTR("Instance:") + " " + p_node->get_filename() + "\n" + TTR("Type:") + " " + p_node->get_class()); + + String tooltip = TTR("Instance:") + " " + p_node->get_filename() + "\n" + TTR("Type:") + " " + p_node->get_class(); + if (p_node->get_editor_description() != String()) { + tooltip += "\n\n" + p_node->get_editor_description(); + } + + item->set_tooltip(0, tooltip); } else { StringName type = EditorNode::get_singleton()->get_object_custom_type_name(p_node); - if (type == StringName()) + if (type == StringName()) { type = p_node->get_class(); - item->set_tooltip(0, String(p_node->get_name()) + "\n" + TTR("Type:") + " " + type); + } + + String tooltip = TTR("Type:") + " " + type; + if (p_node->get_editor_description() != String()) { + tooltip += "\n\n" + p_node->get_editor_description(); + } + + item->set_tooltip(0, tooltip); } if (can_open_instance && undo_redo) { //Show buttons only when necessary(SceneTreeDock) to avoid crashes |