summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
Diffstat (limited to 'editor')
-rw-r--r--editor/editor_audio_buses.cpp173
-rw-r--r--editor/editor_audio_buses.h57
-rw-r--r--editor/editor_builders.py2
-rw-r--r--editor/editor_node.cpp2
-rw-r--r--editor/editor_themes.cpp60
-rw-r--r--editor/filesystem_dock.cpp4
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.cpp2
-rw-r--r--editor/plugins/texture_region_editor_plugin.cpp8
-rw-r--r--editor/plugins/tile_set_editor_plugin.cpp8
-rw-r--r--editor/plugins/visual_shader_editor_plugin.cpp2
10 files changed, 262 insertions, 56 deletions
diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp
index 29e9cd01c5..d7838a2df8 100644
--- a/editor/editor_audio_buses.cpp
+++ b/editor/editor_audio_buses.cpp
@@ -34,6 +34,7 @@
#include "core/os/keyboard.h"
#include "editor_node.h"
#include "filesystem_dock.h"
+#include "scene/resources/font.h"
#include "servers/audio_server.h"
void EditorAudioBus::_update_visible_channels() {
@@ -71,7 +72,6 @@ void EditorAudioBus::_notification(int p_what) {
channel[i].vu_r->set_progress_texture(get_icon("BusVuFull", "EditorIcons"));
channel[i].prev_active = true;
}
- scale->set_texture(get_icon("BusVuDb", "EditorIcons"));
disabled_vu = get_icon("BusVuFrozen", "EditorIcons");
@@ -167,7 +167,6 @@ void EditorAudioBus::_notification(int p_what) {
channel[i].vu_r->set_progress_texture(get_icon("BusVuFull", "EditorIcons"));
channel[i].prev_active = true;
}
- scale->set_texture(get_icon("BusVuDb", "EditorIcons"));
disabled_vu = get_icon("BusVuFrozen", "EditorIcons");
@@ -211,7 +210,8 @@ void EditorAudioBus::update_bus() {
int index = get_index();
- slider->set_value(AudioServer::get_singleton()->get_bus_volume_db(index));
+ float db_value = AudioServer::get_singleton()->get_bus_volume_db(index);
+ slider->set_value(_scaled_db_to_normalized_volume(db_value));
track_name->set_text(AudioServer::get_singleton()->get_bus_name(index));
if (is_master)
track_name->set_editable(false);
@@ -300,13 +300,15 @@ void EditorAudioBus::_name_changed(const String &p_new_name) {
track_name->release_focus();
}
-void EditorAudioBus::_volume_db_changed(float p_db) {
+void EditorAudioBus::_volume_changed(float p_normalized) {
if (updating_bus)
return;
updating_bus = true;
+ float p_db = this->_normalized_volume_to_scaled_db(p_normalized);
+
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
ur->create_action(TTR("Change Audio Bus Volume"), UndoRedo::MERGE_ENDS);
ur->add_do_method(AudioServer::get_singleton(), "set_bus_volume_db", get_index(), p_db);
@@ -317,6 +319,69 @@ void EditorAudioBus::_volume_db_changed(float p_db) {
updating_bus = false;
}
+
+float EditorAudioBus::_normalized_volume_to_scaled_db(float normalized) {
+ /* There are three different formulas for the conversion from normalized
+ * values to relative decibal values.
+ * One formula is an exponential graph which intends to counteract
+ * the logorithmic nature of human hearing. This is an approximation
+ * of the behaviour of a 'logarithmic potentiometer' found on most
+ * musical instruments and also emulated in popular software.
+ * The other two equations are hand-tuned linear tapers that intend to
+ * try to ease the exponential equation in areas where it makes sense.*/
+
+ if (normalized > 0.6f) {
+ return 22.22f * normalized - 16.2f;
+ } else if (normalized < 0.05f) {
+ return 830.72 * normalized - 80.0f;
+ } else {
+ return 45.0f * Math::pow(normalized - 1.0, 3);
+ }
+}
+
+float EditorAudioBus::_scaled_db_to_normalized_volume(float db) {
+ /* Inversion of equations found in _normalized_volume_to_scaled_db.
+ * IMPORTANT: If one function changes, the other much change to reflect it. */
+ if (db > -2.88) {
+ return (db + 16.2f) / 22.22f;
+ } else if (db < -38.602f) {
+ return (db + 80.00f) / 830.72f;
+ } else {
+ if (db < 0.0) {
+ /* To acommodate for NaN on negative numbers for root, we will mirror the
+ * results of the postive db range in order to get the desired numerical
+ * value on the negative side. */
+ float positive_x = Math::pow(Math::abs(db) / 45.0f, 1.0f / 3.0f) + 1.0f;
+ Vector2 translation = Vector2(1.0f, 0.0f) - Vector2(positive_x, Math::abs(db));
+ Vector2 reflected_position = Vector2(1.0, 0.0f) + translation;
+ return reflected_position.x;
+ } else {
+ return Math::pow(db / 45.0f, 1.0f / 3.0f) + 1.0f;
+ }
+ }
+}
+
+void EditorAudioBus::_show_value(float slider_value) {
+ String text = vformat("%10.1f dB", _normalized_volume_to_scaled_db(slider_value));
+
+ audio_value_preview_label->set_text(text);
+ Vector2 slider_size = slider->get_size();
+ Vector2 slider_position = slider->get_global_position();
+ float left_padding = 5.0f;
+ float vert_padding = 10.0f;
+ Vector2 box_position = Vector2(slider_size.x + left_padding, (slider_size.y - vert_padding) * (1.0f - slider_value) - vert_padding);
+ audio_value_preview_box->set_position(slider_position + box_position);
+ audio_value_preview_box->set_size(audio_value_preview_label->get_size());
+ if (slider->has_focus() && !audio_value_preview_box->is_visible()) {
+ audio_value_preview_box->show();
+ }
+ preview_timer->start();
+}
+
+void EditorAudioBus::_hide_value_preview() {
+ audio_value_preview_box->hide();
+}
+
void EditorAudioBus::_solo_toggled() {
updating_bus = true;
@@ -653,7 +718,9 @@ void EditorAudioBus::_bind_methods() {
ClassDB::bind_method("update_bus", &EditorAudioBus::update_bus);
ClassDB::bind_method("update_send", &EditorAudioBus::update_send);
ClassDB::bind_method("_name_changed", &EditorAudioBus::_name_changed);
- ClassDB::bind_method("_volume_db_changed", &EditorAudioBus::_volume_db_changed);
+ ClassDB::bind_method("_volume_changed", &EditorAudioBus::_volume_changed);
+ ClassDB::bind_method("_show_value", &EditorAudioBus::_show_value);
+ ClassDB::bind_method("_hide_value_preview", &EditorAudioBus::_hide_value_preview);
ClassDB::bind_method("_solo_toggled", &EditorAudioBus::_solo_toggled);
ClassDB::bind_method("_mute_toggled", &EditorAudioBus::_mute_toggled);
ClassDB::bind_method("_bypass_toggled", &EditorAudioBus::_bypass_toggled);
@@ -738,11 +805,42 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) {
HBoxContainer *hb = memnew(HBoxContainer);
vb->add_child(hb);
slider = memnew(VSlider);
- slider->set_min(-80);
- slider->set_max(24);
- slider->set_step(0.1);
-
- slider->connect("value_changed", this, "_volume_db_changed");
+ slider->set_min(0.0);
+ slider->set_max(1.0);
+ slider->set_step(0.0001);
+ slider->set_clip_contents(false);
+
+ audio_value_preview_box = memnew(Panel);
+ {
+ HBoxContainer *audioprev_hbc = memnew(HBoxContainer);
+ audioprev_hbc->set_v_size_flags(SIZE_EXPAND_FILL);
+ audioprev_hbc->set_h_size_flags(SIZE_EXPAND_FILL);
+ audioprev_hbc->set_mouse_filter(MOUSE_FILTER_PASS);
+ audio_value_preview_box->add_child(audioprev_hbc);
+
+ audio_value_preview_label = memnew(Label);
+ audio_value_preview_label->set_v_size_flags(SIZE_EXPAND_FILL);
+ audio_value_preview_label->set_h_size_flags(SIZE_EXPAND_FILL);
+ audio_value_preview_label->set_mouse_filter(MOUSE_FILTER_PASS);
+
+ audioprev_hbc->add_child(audio_value_preview_label);
+ }
+ slider->add_child(audio_value_preview_box);
+ audio_value_preview_box->set_as_toplevel(true);
+ Ref<StyleBoxFlat> panel_style = memnew(StyleBoxFlat);
+ panel_style->set_bg_color(Color(0.0f, 0.0f, 0.0f, 0.8f));
+ audio_value_preview_box->add_style_override("panel", panel_style);
+ audio_value_preview_box->set_mouse_filter(MOUSE_FILTER_PASS);
+ audio_value_preview_box->hide();
+
+ preview_timer = memnew(Timer);
+ preview_timer->set_wait_time(0.8f);
+ preview_timer->set_one_shot(true);
+ add_child(preview_timer);
+
+ slider->connect("value_changed", this, "_volume_changed");
+ slider->connect("value_changed", this, "_show_value");
+ preview_timer->connect("timeout", this, "_hide_value_preview");
hb->add_child(slider);
cc = 0;
@@ -765,7 +863,12 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) {
channel[i].peak_r = 0.0f;
}
- scale = memnew(TextureRect);
+ scale = memnew(EditorAudioMeterNotches);
+
+ for (float db = 6.0f; db >= -80.0f; db -= 6.0f) {
+ bool renderNotch = (db >= -6.0f || db == -24.0f || db == -72.0f);
+ scale->add_notch(_scaled_db_to_normalized_volume(db), db, renderNotch);
+ }
hb->add_child(scale);
effects = memnew(Tree);
@@ -1226,6 +1329,7 @@ EditorAudioBuses::EditorAudioBuses() {
set_process(true);
}
+
void EditorAudioBuses::open_layout(const String &p_path) {
EditorNode::get_singleton()->make_bottom_panel_item_visible(this);
@@ -1270,3 +1374,50 @@ AudioBusesEditorPlugin::AudioBusesEditorPlugin(EditorAudioBuses *p_node) {
AudioBusesEditorPlugin::~AudioBusesEditorPlugin() {
}
+
+void EditorAudioMeterNotches::add_notch(float normalized_offset, float db_value, bool render_value) {
+ notches.push_back(AudioNotch(normalized_offset, db_value, render_value));
+}
+
+void EditorAudioMeterNotches::_bind_methods() {
+ ClassDB::bind_method("add_notch", &EditorAudioMeterNotches::add_notch);
+ ClassDB::bind_method("_draw_audio_notches", &EditorAudioMeterNotches::_draw_audio_notches);
+}
+
+void EditorAudioMeterNotches::_notification(int p_what) {
+ if (p_what == NOTIFICATION_DRAW) {
+ notch_color = EditorSettings::get_singleton()->is_dark_theme() ? Color(1.0f, 1.0f, 1.0f, 0.8f) : Color(0.0f, 0.0f, 0.0f, 0.8f);
+ _draw_audio_notches();
+ }
+}
+
+void EditorAudioMeterNotches::_draw_audio_notches() {
+ Ref<Font> font = get_font("source", "EditorFonts");
+ float font_height = font->get_height();
+
+ for (uint8_t i = 0; i < notches.size(); i++) {
+ AudioNotch n = notches[i];
+ draw_line(Vector2(0.0f, (1.0f - n.relative_position) * (get_size().y - btm_padding - top_padding) + top_padding),
+ Vector2(line_length, (1.0f - n.relative_position) * (get_size().y - btm_padding - top_padding) + top_padding),
+ notch_color,
+ 1.0f);
+
+ if (n.render_db_value) {
+ draw_string(font,
+ Vector2(line_length + label_space,
+ (1.0f - n.relative_position) * (get_size().y - btm_padding - top_padding) + (font_height / 4) + top_padding),
+ String("{0}dB").format(varray(Math::abs(n.db_value))),
+ notch_color);
+ }
+ }
+}
+
+EditorAudioMeterNotches::EditorAudioMeterNotches() :
+ line_length(5.0f),
+ label_space(2.0f),
+ btm_padding(9.0f),
+ top_padding(5.0f) {
+ this->set_v_size_flags(SIZE_EXPAND_FILL);
+ this->set_h_size_flags(SIZE_EXPAND_FILL);
+ notch_color = EditorSettings::get_singleton()->is_dark_theme() ? Color(1.0f, 1.0f, 1.0f, 0.8f) : Color(0.0f, 0.0f, 0.0f, 0.8f);
+}
diff --git a/editor/editor_audio_buses.h b/editor/editor_audio_buses.h
index 37ff9b28dc..50f2101fd8 100644
--- a/editor/editor_audio_buses.h
+++ b/editor/editor_audio_buses.h
@@ -35,6 +35,7 @@
#include "editor_plugin.h"
#include "scene/gui/box_container.h"
#include "scene/gui/button.h"
+#include "scene/gui/control.h"
#include "scene/gui/line_edit.h"
#include "scene/gui/menu_button.h"
#include "scene/gui/option_button.h"
@@ -71,13 +72,17 @@ class EditorAudioBus : public PanelContainer {
TextureProgress *vu_r;
} channel[CHANNELS_MAX];
- TextureRect *scale;
+ class EditorAudioMeterNotches *scale;
OptionButton *send;
PopupMenu *effect_options;
PopupMenu *bus_popup;
PopupMenu *delete_effect_popup;
+ Panel *audio_value_preview_box;
+ Label *audio_value_preview_label;
+ Timer *preview_timer;
+
Button *solo;
Button *mute;
Button *bypass;
@@ -93,7 +98,11 @@ class EditorAudioBus : public PanelContainer {
void _name_changed(const String &p_new_name);
void _name_focus_exit() { _name_changed(track_name->get_text()); }
- void _volume_db_changed(float p_db);
+ void _volume_changed(float p_normalized);
+ float _normalized_volume_to_scaled_db(float normalized);
+ float _scaled_db_to_normalized_volume(float db);
+ void _show_value(float slider_value);
+ void _hide_value_preview();
void _solo_toggled();
void _mute_toggled();
void _bypass_toggled();
@@ -200,6 +209,50 @@ public:
EditorAudioBuses();
};
+class EditorAudioMeterNotches : public Control {
+ GDCLASS(EditorAudioMeterNotches, Control);
+
+private:
+ struct AudioNotch {
+ float relative_position;
+ float db_value;
+ bool render_db_value;
+
+ _FORCE_INLINE_ AudioNotch(float r_pos, float db_v, bool rndr_val) {
+ relative_position = r_pos;
+ db_value = db_v;
+ render_db_value = rndr_val;
+ }
+
+ _FORCE_INLINE_ AudioNotch(const AudioNotch &n) {
+ relative_position = n.relative_position;
+ db_value = n.db_value;
+ render_db_value = n.render_db_value;
+ }
+
+ _FORCE_INLINE_ AudioNotch() {}
+ };
+
+ List<AudioNotch> notches;
+
+public:
+ float line_length;
+ float label_space;
+ float btm_padding;
+ float top_padding;
+ Color notch_color;
+
+ void add_notch(float normalized_offset, float db_value, bool render_value = false);
+
+private:
+ static void _bind_methods();
+ void _notification(int p_what);
+ void _draw_audio_notches();
+
+public:
+ EditorAudioMeterNotches();
+};
+
class AudioBusesEditorPlugin : public EditorPlugin {
GDCLASS(AudioBusesEditorPlugin, EditorPlugin);
diff --git a/editor/editor_builders.py b/editor/editor_builders.py
index 9e9fe752b4..19c5e0b924 100644
--- a/editor/editor_builders.py
+++ b/editor/editor_builders.py
@@ -6,7 +6,7 @@ All such functions are invoked in a subprocess on Windows to prevent build flaki
import os
import os.path
from platform_methods import subprocess_main
-from compat import encode_utf8, byte_to_str, open_utf8, escape_string
+from compat import encode_utf8, byte_to_str, open_utf8
def make_doc_header(target, source, env):
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 6c629c1869..c1d2a67e36 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -5567,7 +5567,7 @@ EditorNode::EditorNode() {
p = help_menu->get_popup();
p->set_hide_on_window_lose_focus(true);
p->connect("id_pressed", this, "_menu_option");
- p->add_icon_shortcut(gui_base->get_icon("HelpSearch", "EditorIcons"), ED_SHORTCUT("editor/editor_help", TTR("Search"), KEY_F4), HELP_SEARCH);
+ p->add_icon_shortcut(gui_base->get_icon("HelpSearch", "EditorIcons"), ED_SHORTCUT("editor/editor_help", TTR("Search"), KEY_MASK_SHIFT | KEY_F1), HELP_SEARCH);
p->add_separator();
p->add_icon_item(gui_base->get_icon("Instance", "EditorIcons"), TTR("Online Docs"), HELP_DOCS);
p->add_icon_item(gui_base->get_icon("Instance", "EditorIcons"), TTR("Q&A"), HELP_QA);
diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp
index c930824b98..0df932cd62 100644
--- a/editor/editor_themes.cpp
+++ b/editor/editor_themes.cpp
@@ -403,7 +403,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// this is the most commonly used stylebox, variations should be made as duplicate of this
Ref<StyleBoxFlat> style_default = make_flat_stylebox(base_color, default_margin_size, default_margin_size, default_margin_size, default_margin_size);
style_default->set_border_width_all(border_width);
- style_default->set_border_color_all(base_color);
+ style_default->set_border_color(base_color);
style_default->set_draw_center(true);
// Button and widgets
@@ -415,20 +415,20 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
style_widget->set_default_margin(MARGIN_RIGHT, (extra_spacing + 6) * EDSCALE);
style_widget->set_default_margin(MARGIN_BOTTOM, (extra_spacing + default_margin_size) * EDSCALE);
style_widget->set_bg_color(dark_color_1);
- style_widget->set_border_color_all(dark_color_2);
+ style_widget->set_border_color(dark_color_2);
Ref<StyleBoxFlat> style_widget_disabled = style_widget->duplicate();
- style_widget_disabled->set_border_color_all(color_disabled);
+ style_widget_disabled->set_border_color(color_disabled);
style_widget_disabled->set_bg_color(color_disabled_bg);
Ref<StyleBoxFlat> style_widget_focus = style_widget->duplicate();
- style_widget_focus->set_border_color_all(accent_color);
+ style_widget_focus->set_border_color(accent_color);
Ref<StyleBoxFlat> style_widget_pressed = style_widget->duplicate();
- style_widget_pressed->set_border_color_all(accent_color);
+ style_widget_pressed->set_border_color(accent_color);
Ref<StyleBoxFlat> style_widget_hover = style_widget->duplicate();
- style_widget_hover->set_border_color_all(contrast_color_1);
+ style_widget_hover->set_border_color(contrast_color_1);
// style for windows, popups, etc..
Ref<StyleBoxFlat> style_popup = style_default->duplicate();
@@ -437,7 +437,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
style_popup->set_default_margin(MARGIN_TOP, popup_margin_size);
style_popup->set_default_margin(MARGIN_RIGHT, popup_margin_size);
style_popup->set_default_margin(MARGIN_BOTTOM, popup_margin_size);
- style_popup->set_border_color_all(contrast_color_1);
+ style_popup->set_border_color(contrast_color_1);
style_popup->set_border_width_all(MAX(EDSCALE, border_width));
const Color shadow_color = Color(0, 0, 0, dark_theme ? 0.3 : 0.1);
style_popup->set_shadow_color(shadow_color);
@@ -470,7 +470,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
style_tab_selected->set_border_width_all(border_width);
style_tab_selected->set_border_width(MARGIN_BOTTOM, 0);
- style_tab_selected->set_border_color_all(dark_color_3);
+ style_tab_selected->set_border_color(dark_color_3);
style_tab_selected->set_expand_margin_size(MARGIN_BOTTOM, border_width);
style_tab_selected->set_default_margin(MARGIN_LEFT, tab_default_margin_side);
style_tab_selected->set_default_margin(MARGIN_RIGHT, tab_default_margin_side);
@@ -480,11 +480,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
Ref<StyleBoxFlat> style_tab_unselected = style_tab_selected->duplicate();
style_tab_unselected->set_bg_color(dark_color_1);
- style_tab_unselected->set_border_color_all(dark_color_2);
+ style_tab_unselected->set_border_color(dark_color_2);
Ref<StyleBoxFlat> style_tab_disabled = style_tab_selected->duplicate();
style_tab_disabled->set_bg_color(color_disabled_bg);
- style_tab_disabled->set_border_color_all(color_disabled);
+ style_tab_disabled->set_border_color(color_disabled);
// Editor background
theme->set_stylebox("Background", "EditorStyles", make_flat_stylebox(background_color, default_margin_size, default_margin_size, default_margin_size, default_margin_size));
@@ -492,7 +492,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// Focus
Ref<StyleBoxFlat> style_focus = style_default->duplicate();
style_focus->set_draw_center(false);
- style_focus->set_border_color_all(contrast_color_2);
+ style_focus->set_border_color(contrast_color_2);
theme->set_stylebox("Focus", "EditorStyles", style_focus);
// Menu
@@ -514,7 +514,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
style_menu_hover_border->set_draw_center(false);
style_menu_hover_border->set_border_width_all(0);
style_menu_hover_border->set_border_width(MARGIN_BOTTOM, border_width);
- style_menu_hover_border->set_border_color_all(accent_color);
+ style_menu_hover_border->set_border_color(accent_color);
Ref<StyleBoxFlat> style_menu_hover_bg = style_widget->duplicate();
style_menu_hover_bg->set_border_width_all(0);
@@ -644,11 +644,9 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
Ref<StyleBoxFlat> sub_inspector_bg = make_flat_stylebox(dark_color_1.linear_interpolate(accent_color, 0.08), 2, 0, 2, 2);
sub_inspector_bg->set_border_width(MARGIN_LEFT, 2);
- sub_inspector_bg->set_border_color(MARGIN_LEFT, accent_color * Color(1, 1, 1, 0.3));
sub_inspector_bg->set_border_width(MARGIN_RIGHT, 2);
- sub_inspector_bg->set_border_color(MARGIN_RIGHT, accent_color * Color(1, 1, 1, 0.3));
sub_inspector_bg->set_border_width(MARGIN_BOTTOM, 2);
- sub_inspector_bg->set_border_color(MARGIN_BOTTOM, accent_color * Color(1, 1, 1, 0.3));
+ sub_inspector_bg->set_border_color(accent_color * Color(1, 1, 1, 0.3));
sub_inspector_bg->set_draw_center(true);
theme->set_stylebox("sub_inspector_bg", "Editor", sub_inspector_bg);
@@ -657,7 +655,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// Tree & ItemList background
Ref<StyleBoxFlat> style_tree_bg = style_default->duplicate();
style_tree_bg->set_bg_color(dark_color_1);
- style_tree_bg->set_border_color_all(dark_color_3);
+ style_tree_bg->set_border_color(dark_color_3);
theme->set_stylebox("bg", "Tree", style_tree_bg);
const Color guide_color = Color(mono_color.r, mono_color.g, mono_color.b, 0.05);
@@ -708,7 +706,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
Ref<StyleBoxFlat> style_tree_cursor = style_default->duplicate();
style_tree_cursor->set_draw_center(false);
style_tree_cursor->set_border_width_all(border_width);
- style_tree_cursor->set_border_color_all(contrast_color_1);
+ style_tree_cursor->set_border_color(contrast_color_1);
Ref<StyleBoxFlat> style_tree_title = style_default->duplicate();
style_tree_title->set_bg_color(dark_color_3);
@@ -731,12 +729,12 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
Ref<StyleBoxFlat> style_itemlist_bg = style_default->duplicate();
style_itemlist_bg->set_bg_color(dark_color_1);
style_itemlist_bg->set_border_width_all(border_width);
- style_itemlist_bg->set_border_color_all(dark_color_3);
+ style_itemlist_bg->set_border_color(dark_color_3);
Ref<StyleBoxFlat> style_itemlist_cursor = style_default->duplicate();
style_itemlist_cursor->set_draw_center(false);
style_itemlist_cursor->set_border_width_all(border_width);
- style_itemlist_cursor->set_border_color_all(highlight_color);
+ style_itemlist_cursor->set_border_color(highlight_color);
theme->set_stylebox("cursor", "ItemList", style_itemlist_cursor);
theme->set_stylebox("cursor_unfocused", "ItemList", style_itemlist_cursor);
theme->set_stylebox("selected_focus", "ItemList", style_tree_focus);
@@ -781,7 +779,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// Content of each tab
Ref<StyleBoxFlat> style_content_panel = style_default->duplicate();
- style_content_panel->set_border_color_all(dark_color_3);
+ style_content_panel->set_border_color(dark_color_3);
style_content_panel->set_border_width_all(border_width);
// compensate the border
style_content_panel->set_default_margin(MARGIN_TOP, margin_size_extra * EDSCALE);
@@ -860,7 +858,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// WindowDialog
Ref<StyleBoxFlat> style_window = style_popup->duplicate();
- style_window->set_border_color_all(tab_color);
+ style_window->set_border_color(tab_color);
style_window->set_border_width(MARGIN_TOP, 24 * EDSCALE);
style_window->set_expand_margin_size(MARGIN_TOP, 24 * EDSCALE);
theme->set_stylebox("panel", "WindowDialog", style_window);
@@ -875,7 +873,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// complex window, for now only Editor settings and Project settings
Ref<StyleBoxFlat> style_complex_window = style_window->duplicate();
style_complex_window->set_bg_color(dark_color_2);
- style_complex_window->set_border_color_all(highlight_tabs ? tab_color : dark_color_2);
+ style_complex_window->set_border_color(highlight_tabs ? tab_color : dark_color_2);
theme->set_stylebox("panel", "EditorSettingsDialog", style_complex_window);
theme->set_stylebox("panel", "ProjectSettingsEditor", style_complex_window);
theme->set_stylebox("panel", "EditorAbout", style_complex_window);
@@ -954,7 +952,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
style_tooltip->set_default_margin(MARGIN_BOTTOM, v);
style_tooltip->set_bg_color(Color(mono_color.r, mono_color.g, mono_color.b, 0.9));
style_tooltip->set_border_width_all(border_width);
- style_tooltip->set_border_color_all(mono_color);
+ style_tooltip->set_border_color(mono_color);
theme->set_color("font_color", "TooltipLabel", font_color.inverted());
theme->set_color("font_color_shadow", "TooltipLabel", mono_color.inverted() * Color(1, 1, 1, 0.1));
theme->set_stylebox("panel", "TooltipPanel", style_tooltip);
@@ -989,32 +987,32 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
const int gn_margin_side = 28;
Ref<StyleBoxFlat> graphsb = make_flat_stylebox(Color(mv, mv, mv, 0.7), gn_margin_side, 24, gn_margin_side, 5);
graphsb->set_border_width_all(border_width);
- graphsb->set_border_color_all(Color(mv2, mv2, mv2, 0.9));
+ graphsb->set_border_color(Color(mv2, mv2, mv2, 0.9));
Ref<StyleBoxFlat> graphsbselected = make_flat_stylebox(Color(mv, mv, mv, 0.9), gn_margin_side, 24, gn_margin_side, 5);
graphsbselected->set_border_width_all(border_width);
- graphsbselected->set_border_color_all(Color(accent_color.r, accent_color.g, accent_color.b, 0.9));
+ graphsbselected->set_border_color(Color(accent_color.r, accent_color.g, accent_color.b, 0.9));
graphsbselected->set_shadow_size(8 * EDSCALE);
graphsbselected->set_shadow_color(shadow_color);
Ref<StyleBoxFlat> graphsbcomment = make_flat_stylebox(Color(mv, mv, mv, 0.3), gn_margin_side, 24, gn_margin_side, 5);
graphsbcomment->set_border_width_all(border_width);
- graphsbcomment->set_border_color_all(Color(mv2, mv2, mv2, 0.9));
+ graphsbcomment->set_border_color(Color(mv2, mv2, mv2, 0.9));
Ref<StyleBoxFlat> graphsbcommentselected = make_flat_stylebox(Color(mv, mv, mv, 0.4), gn_margin_side, 24, gn_margin_side, 5);
graphsbcommentselected->set_border_width_all(border_width);
- graphsbcommentselected->set_border_color_all(Color(mv2, mv2, mv2, 0.9));
+ graphsbcommentselected->set_border_color(Color(mv2, mv2, mv2, 0.9));
Ref<StyleBoxFlat> graphsbbreakpoint = graphsbselected->duplicate();
graphsbbreakpoint->set_draw_center(false);
- graphsbbreakpoint->set_border_color_all(warning_color);
+ graphsbbreakpoint->set_border_color(warning_color);
graphsbbreakpoint->set_shadow_color(warning_color * Color(1.0, 1.0, 1.0, 0.1));
Ref<StyleBoxFlat> graphsbposition = graphsbselected->duplicate();
graphsbposition->set_draw_center(false);
- graphsbposition->set_border_color_all(error_color);
+ graphsbposition->set_border_color(error_color);
graphsbposition->set_shadow_color(error_color * Color(1.0, 1.0, 1.0, 0.2));
Ref<StyleBoxFlat> smgraphsb = make_flat_stylebox(Color(mv, mv, mv, 0.7), gn_margin_side, 24, gn_margin_side, 5);
smgraphsb->set_border_width_all(border_width);
- smgraphsb->set_border_color_all(Color(mv2, mv2, mv2, 0.9));
+ smgraphsb->set_border_color(Color(mv2, mv2, mv2, 0.9));
Ref<StyleBoxFlat> smgraphsbselected = make_flat_stylebox(Color(mv, mv, mv, 0.9), gn_margin_side, 24, gn_margin_side, 5);
smgraphsbselected->set_border_width_all(border_width);
- smgraphsbselected->set_border_color_all(Color(accent_color.r, accent_color.g, accent_color.b, 0.9));
+ smgraphsbselected->set_border_color(Color(accent_color.r, accent_color.g, accent_color.b, 0.9));
smgraphsbselected->set_shadow_size(8 * EDSCALE);
smgraphsbselected->set_shadow_color(shadow_color);
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index bd69fa7cdf..b637148f2d 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -1429,6 +1429,10 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> p_selected)
case FILE_SHOW_IN_EXPLORER: {
// Show the file / folder in the OS explorer
String fpath = path;
+ if (path == "Favorites") {
+ fpath = p_selected[0];
+ }
+
if (!fpath.ends_with("/")) {
fpath = fpath.get_base_dir();
}
diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp
index afe2573898..c5dfba6b06 100644
--- a/editor/plugins/animation_blend_tree_editor_plugin.cpp
+++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp
@@ -240,7 +240,7 @@ void AnimationNodeBlendTreeEditor::_update_graph() {
if (EditorSettings::get_singleton()->get("interface/theme/use_graph_node_headers")) {
Ref<StyleBoxFlat> sb = node->get_stylebox("frame", "GraphNode");
- Color c = sb->get_border_color(MARGIN_TOP);
+ Color c = sb->get_border_color();
Color mono_color = ((c.r + c.g + c.b) / 3) < 0.7 ? Color(1.0, 1.0, 1.0) : Color(0.0, 0.0, 0.0);
mono_color.a = 0.85;
c = mono_color;
diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp
index 0a59fc69e3..f741040fa8 100644
--- a/editor/plugins/texture_region_editor_plugin.cpp
+++ b/editor/plugins/texture_region_editor_plugin.cpp
@@ -205,10 +205,10 @@ void TextureRegionEditor::_region_draw() {
margins[3] = obj_styleBox->get_margin_size(MARGIN_RIGHT);
}
Vector2 pos[4] = {
- mtx.basis_xform(Vector2(0, margins[0])) + Vector2(0, endpoints[0].y - draw_ofs.y),
- -mtx.basis_xform(Vector2(0, margins[1])) + Vector2(0, endpoints[2].y - draw_ofs.y),
- mtx.basis_xform(Vector2(margins[2], 0)) + Vector2(endpoints[0].x - draw_ofs.x, 0),
- -mtx.basis_xform(Vector2(margins[3], 0)) + Vector2(endpoints[2].x - draw_ofs.x, 0)
+ mtx.basis_xform(Vector2(0, margins[0])) + Vector2(0, endpoints[0].y - draw_ofs.y * draw_zoom),
+ -mtx.basis_xform(Vector2(0, margins[1])) + Vector2(0, endpoints[2].y - draw_ofs.y * draw_zoom),
+ mtx.basis_xform(Vector2(margins[2], 0)) + Vector2(endpoints[0].x - draw_ofs.x * draw_zoom, 0),
+ -mtx.basis_xform(Vector2(margins[3], 0)) + Vector2(endpoints[2].x - draw_ofs.x * draw_zoom, 0)
};
draw_margin_line(edit_draw, pos[0], pos[0] + Vector2(edit_draw->get_size().x, 0));
diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp
index 8fc080c819..54e6e5b154 100644
--- a/editor/plugins/tile_set_editor_plugin.cpp
+++ b/editor/plugins/tile_set_editor_plugin.cpp
@@ -2417,11 +2417,11 @@ void TileSetEditor::draw_polygon_shapes() {
colors.push_back(c_bg);
}
}
- if (polygon.size() == 0)
+
+ if (polygon.size() < 3)
continue;
- if (polygon.size() > 2) {
- workspace->draw_polygon(polygon, colors);
- }
+
+ workspace->draw_polygon(polygon, colors);
if (coord == edited_shape_coord || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) {
if (!creating_shape) {
diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp
index 7bd26de092..4d8d81fb01 100644
--- a/editor/plugins/visual_shader_editor_plugin.cpp
+++ b/editor/plugins/visual_shader_editor_plugin.cpp
@@ -344,7 +344,7 @@ void VisualShaderEditor::_update_graph() {
if (EditorSettings::get_singleton()->get("interface/theme/use_graph_node_headers")) {
Ref<StyleBoxFlat> sb = node->get_stylebox("frame", "GraphNode");
- Color c = sb->get_border_color(MARGIN_TOP);
+ Color c = sb->get_border_color();
Color mono_color = ((c.r + c.g + c.b) / 3) < 0.7 ? Color(1.0, 1.0, 1.0) : Color(0.0, 0.0, 0.0);
mono_color.a = 0.85;
c = mono_color;