summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
Diffstat (limited to 'scene')
-rw-r--r--scene/2d/gpu_particles_2d.cpp1
-rw-r--r--scene/3d/gpu_particles_3d.cpp1
-rw-r--r--scene/gui/line_edit.cpp39
-rw-r--r--scene/gui/line_edit.h5
-rw-r--r--scene/gui/rich_text_label.cpp7
-rw-r--r--scene/gui/tab_bar.cpp (renamed from scene/gui/tabs.cpp)217
-rw-r--r--scene/gui/tab_bar.h (renamed from scene/gui/tabs.h)18
-rw-r--r--scene/gui/text_edit.cpp49
-rw-r--r--scene/gui/text_edit.h7
-rw-r--r--scene/register_scene_types.cpp46
-rw-r--r--scene/resources/default_theme/default_theme.cpp48
-rw-r--r--scene/resources/navigation_mesh.h2
-rw-r--r--scene/resources/text_paragraph.cpp4
-rw-r--r--scene/resources/text_paragraph.h2
14 files changed, 278 insertions, 168 deletions
diff --git a/scene/2d/gpu_particles_2d.cpp b/scene/2d/gpu_particles_2d.cpp
index 3637594e1b..6950fefdbe 100644
--- a/scene/2d/gpu_particles_2d.cpp
+++ b/scene/2d/gpu_particles_2d.cpp
@@ -532,6 +532,7 @@ void GPUParticles2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_trail_section_subdivisions"), &GPUParticles2D::get_trail_section_subdivisions);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "emitting"), "set_emitting", "is_emitting");
+ ADD_PROPERTY_DEFAULT("emitting", true); // Workaround for doctool in headless mode, as dummy rasterizer always returns false.
ADD_PROPERTY(PropertyInfo(Variant::INT, "amount", PROPERTY_HINT_RANGE, "1,1000000,1,exp"), "set_amount", "get_amount");
ADD_GROUP("Time", "");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "lifetime", PROPERTY_HINT_RANGE, "0.01,600.0,0.01,or_greater"), "set_lifetime", "get_lifetime");
diff --git a/scene/3d/gpu_particles_3d.cpp b/scene/3d/gpu_particles_3d.cpp
index 32a62d8c7e..ea6242b669 100644
--- a/scene/3d/gpu_particles_3d.cpp
+++ b/scene/3d/gpu_particles_3d.cpp
@@ -562,6 +562,7 @@ void GPUParticles3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_transform_align"), &GPUParticles3D::get_transform_align);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "emitting"), "set_emitting", "is_emitting");
+ ADD_PROPERTY_DEFAULT("emitting", true); // Workaround for doctool in headless mode, as dummy rasterizer always returns false.
ADD_PROPERTY(PropertyInfo(Variant::INT, "amount", PROPERTY_HINT_RANGE, "1,1000000,1,exp"), "set_amount", "get_amount");
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "sub_emitter", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "GPUParticles3D"), "set_sub_emitter", "get_sub_emitter");
ADD_GROUP("Time", "");
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index 54e7d8f960..9ea98174c9 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -235,6 +235,25 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
return;
}
+ if (is_middle_mouse_paste_enabled() && b->is_pressed() && b->get_button_index() == MOUSE_BUTTON_MIDDLE && is_editable()) {
+ String paste_buffer = DisplayServer::get_singleton()->clipboard_get_primary().strip_escapes();
+
+ deselect();
+ set_caret_at_pixel_pos(b->get_position().x);
+ if (!paste_buffer.is_empty()) {
+ insert_text_at_caret(paste_buffer);
+
+ if (!text_changed_dirty) {
+ if (is_inside_tree()) {
+ MessageQueue::get_singleton()->push_call(this, "_text_changed");
+ }
+ text_changed_dirty = true;
+ }
+ }
+ grab_focus();
+ return;
+ }
+
if (b->get_button_index() != MOUSE_BUTTON_LEFT) {
return;
}
@@ -271,6 +290,9 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
selection.double_click = true;
last_dblclk = 0;
caret_column = selection.begin;
+ if (!pass) {
+ DisplayServer::get_singleton()->clipboard_set_primary(text);
+ }
} else if (b->is_double_click()) {
// Double-click select word.
last_dblclk = OS::get_singleton()->get_ticks_msec();
@@ -286,6 +308,9 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
break;
}
}
+ if (!pass) {
+ DisplayServer::get_singleton()->clipboard_set_primary(text.substr(selection.begin, selection.end - selection.begin));
+ }
}
}
@@ -303,6 +328,9 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
update();
} else {
+ if (selection.enabled && !pass && b->get_button_index() == MOUSE_BUTTON_LEFT) {
+ DisplayServer::get_singleton()->clipboard_set_primary(text.substr(selection.begin, selection.end - selection.begin));
+ }
if (!text.is_empty() && is_editable() && clear_button_enabled) {
bool press_attempt = clear_button_status.press_attempt;
clear_button_status.press_attempt = false;
@@ -1890,6 +1918,14 @@ bool LineEdit::is_virtual_keyboard_enabled() const {
return virtual_keyboard_enabled;
}
+void LineEdit::set_middle_mouse_paste_enabled(bool p_enabled) {
+ middle_mouse_paste_enabled = p_enabled;
+}
+
+bool LineEdit::is_middle_mouse_paste_enabled() const {
+ return middle_mouse_paste_enabled;
+}
+
void LineEdit::set_selecting_enabled(bool p_enabled) {
selecting_enabled = p_enabled;
@@ -2156,6 +2192,8 @@ void LineEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_clear_button_enabled"), &LineEdit::is_clear_button_enabled);
ClassDB::bind_method(D_METHOD("set_shortcut_keys_enabled", "enable"), &LineEdit::set_shortcut_keys_enabled);
ClassDB::bind_method(D_METHOD("is_shortcut_keys_enabled"), &LineEdit::is_shortcut_keys_enabled);
+ ClassDB::bind_method(D_METHOD("set_middle_mouse_paste_enabled", "enable"), &LineEdit::set_middle_mouse_paste_enabled);
+ ClassDB::bind_method(D_METHOD("is_middle_mouse_paste_enabled"), &LineEdit::is_middle_mouse_paste_enabled);
ClassDB::bind_method(D_METHOD("set_selecting_enabled", "enable"), &LineEdit::set_selecting_enabled);
ClassDB::bind_method(D_METHOD("is_selecting_enabled"), &LineEdit::is_selecting_enabled);
ClassDB::bind_method(D_METHOD("set_right_icon", "icon"), &LineEdit::set_right_icon);
@@ -2211,6 +2249,7 @@ void LineEdit::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "virtual_keyboard_enabled"), "set_virtual_keyboard_enabled", "is_virtual_keyboard_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clear_button_enabled"), "set_clear_button_enabled", "is_clear_button_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shortcut_keys_enabled"), "set_shortcut_keys_enabled", "is_shortcut_keys_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "middle_mouse_paste_enabled"), "set_middle_mouse_paste_enabled", "is_middle_mouse_paste_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "selecting_enabled"), "set_selecting_enabled", "is_selecting_enabled");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "right_icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_right_icon", "get_right_icon");
ADD_PROPERTY(PropertyInfo(Variant::INT, "text_direction", PROPERTY_HINT_ENUM, "Auto,Left-to-Right,Right-to-Left,Inherited"), "set_text_direction", "get_text_direction");
diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h
index 923024dd56..cd7737e5fe 100644
--- a/scene/gui/line_edit.h
+++ b/scene/gui/line_edit.h
@@ -126,6 +126,8 @@ private:
bool virtual_keyboard_enabled = true;
+ bool middle_mouse_paste_enabled = true;
+
Ref<Texture2D> right_icon;
struct Selection {
@@ -318,6 +320,9 @@ public:
void set_virtual_keyboard_enabled(bool p_enable);
bool is_virtual_keyboard_enabled() const;
+ void set_middle_mouse_paste_enabled(bool p_enabled);
+ bool is_middle_mouse_paste_enabled() const;
+
void set_selecting_enabled(bool p_enabled);
bool is_selecting_enabled() const;
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index 4588966d88..bc6552c208 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -486,7 +486,7 @@ void RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
remaining_characters -= cell_ch;
table->columns.write[column].min_width = MAX(table->columns[column].min_width, ceil(frame->lines[i].text_buf->get_size().x));
- table->columns.write[column].max_width = MAX(table->columns[column].max_width, ceil(frame->lines[i].text_buf->get_non_wraped_size().x));
+ table->columns.write[column].max_width = MAX(table->columns[column].max_width, ceil(frame->lines[i].text_buf->get_non_wrapped_size().x));
}
idx++;
}
@@ -1596,12 +1596,16 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) {
selection.to_char = words[i + 1];
selection.active = true;
+ DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
update();
break;
}
}
}
} else if (!b->is_pressed()) {
+ if (selection.enabled) {
+ DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+ }
selection.click_item = nullptr;
if (!b->is_double_click() && !scroll_updated) {
@@ -1719,6 +1723,7 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) {
swap = true;
} else if (selection.from_char == selection.to_char) {
selection.active = false;
+ update();
return;
}
}
diff --git a/scene/gui/tabs.cpp b/scene/gui/tab_bar.cpp
index 0755a79eee..78b58c773a 100644
--- a/scene/gui/tabs.cpp
+++ b/scene/gui/tab_bar.cpp
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* tabs.cpp */
+/* tab_bar.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,7 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#include "tabs.h"
+#include "tab_bar.h"
#include "core/object/message_queue.h"
#include "core/string/translation.h"
@@ -37,7 +37,7 @@
#include "scene/gui/label.h"
#include "scene/gui/texture_rect.h"
-Size2 Tabs::get_minimum_size() const {
+Size2 TabBar::get_minimum_size() const {
Ref<StyleBox> tab_unselected = get_theme_stylebox(SNAME("tab_unselected"));
Ref<StyleBox> tab_selected = get_theme_stylebox(SNAME("tab_selected"));
Ref<StyleBox> tab_disabled = get_theme_stylebox(SNAME("tab_disabled"));
@@ -90,7 +90,7 @@ Size2 Tabs::get_minimum_size() const {
return ms;
}
-void Tabs::gui_input(const Ref<InputEvent> &p_event) {
+void TabBar::gui_input(const Ref<InputEvent> &p_event) {
ERR_FAIL_COND(p_event.is_null());
Ref<InputEventMouseMotion> mm = p_event;
@@ -164,7 +164,7 @@ void Tabs::gui_input(const Ref<InputEvent> &p_event) {
if (rb_pressing && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
if (rb_hover != -1) {
- //pressed
+ // pressed
emit_signal(SNAME("tab_rmb_clicked"), rb_hover);
}
@@ -174,7 +174,7 @@ void Tabs::gui_input(const Ref<InputEvent> &p_event) {
if (cb_pressing && !mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) {
if (cb_hover != -1) {
- //pressed
+ // pressed
emit_signal(SNAME("tab_closed"), cb_hover);
}
@@ -222,6 +222,11 @@ void Tabs::gui_input(const Ref<InputEvent> &p_event) {
}
}
+ if (max_drawn_tab <= 0) {
+ // Return early if there are no actual tabs to handle input for.
+ return;
+ }
+
int found = -1;
for (int i = offset; i <= max_drawn_tab; i++) {
if (tabs[i].rb_rect.has_point(pos)) {
@@ -252,7 +257,7 @@ void Tabs::gui_input(const Ref<InputEvent> &p_event) {
}
}
-void Tabs::_shape(int p_tab) {
+void TabBar::_shape(int p_tab) {
Ref<Font> font = get_theme_font(SNAME("font"));
int font_size = get_theme_font_size(SNAME("font_size"));
@@ -268,7 +273,7 @@ void Tabs::_shape(int p_tab) {
tabs.write[p_tab].text_buf->add_string(tabs.write[p_tab].xl_text, font, font_size, tabs[p_tab].opentype_features, (tabs[p_tab].language != "") ? tabs[p_tab].language : TranslationServer::get_singleton()->get_tool_locale());
}
-void Tabs::_notification(int p_what) {
+void TabBar::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_LAYOUT_DIRECTION_CHANGED: {
_update_cache();
@@ -505,11 +510,11 @@ void Tabs::_notification(int p_what) {
}
}
-int Tabs::get_tab_count() const {
+int TabBar::get_tab_count() const {
return tabs.size();
}
-void Tabs::set_current_tab(int p_current) {
+void TabBar::set_current_tab(int p_current) {
if (current == p_current) {
return;
}
@@ -524,27 +529,27 @@ void Tabs::set_current_tab(int p_current) {
emit_signal(SNAME("tab_changed"), p_current);
}
-int Tabs::get_current_tab() const {
+int TabBar::get_current_tab() const {
return current;
}
-int Tabs::get_previous_tab() const {
+int TabBar::get_previous_tab() const {
return previous;
}
-int Tabs::get_hovered_tab() const {
+int TabBar::get_hovered_tab() const {
return hover;
}
-int Tabs::get_tab_offset() const {
+int TabBar::get_tab_offset() const {
return offset;
}
-bool Tabs::get_offset_buttons_visible() const {
+bool TabBar::get_offset_buttons_visible() const {
return buttons_visible;
}
-void Tabs::set_tab_title(int p_tab, const String &p_title) {
+void TabBar::set_tab_title(int p_tab, const String &p_title) {
ERR_FAIL_INDEX(p_tab, tabs.size());
tabs.write[p_tab].text = p_title;
_shape(p_tab);
@@ -552,12 +557,12 @@ void Tabs::set_tab_title(int p_tab, const String &p_title) {
minimum_size_changed();
}
-String Tabs::get_tab_title(int p_tab) const {
+String TabBar::get_tab_title(int p_tab) const {
ERR_FAIL_INDEX_V(p_tab, tabs.size(), "");
return tabs[p_tab].text;
}
-void Tabs::set_tab_text_direction(int p_tab, Control::TextDirection p_text_direction) {
+void TabBar::set_tab_text_direction(int p_tab, Control::TextDirection p_text_direction) {
ERR_FAIL_INDEX(p_tab, tabs.size());
ERR_FAIL_COND((int)p_text_direction < -1 || (int)p_text_direction > 3);
if (tabs[p_tab].text_direction != p_text_direction) {
@@ -567,19 +572,19 @@ void Tabs::set_tab_text_direction(int p_tab, Control::TextDirection p_text_direc
}
}
-Control::TextDirection Tabs::get_tab_text_direction(int p_tab) const {
+Control::TextDirection TabBar::get_tab_text_direction(int p_tab) const {
ERR_FAIL_INDEX_V(p_tab, tabs.size(), Control::TEXT_DIRECTION_INHERITED);
return tabs[p_tab].text_direction;
}
-void Tabs::clear_tab_opentype_features(int p_tab) {
+void TabBar::clear_tab_opentype_features(int p_tab) {
ERR_FAIL_INDEX(p_tab, tabs.size());
tabs.write[p_tab].opentype_features.clear();
_shape(p_tab);
update();
}
-void Tabs::set_tab_opentype_feature(int p_tab, const String &p_name, int p_value) {
+void TabBar::set_tab_opentype_feature(int p_tab, const String &p_name, int p_value) {
ERR_FAIL_INDEX(p_tab, tabs.size());
int32_t tag = TS->name_to_tag(p_name);
if (!tabs[p_tab].opentype_features.has(tag) || (int)tabs[p_tab].opentype_features[tag] != p_value) {
@@ -589,7 +594,7 @@ void Tabs::set_tab_opentype_feature(int p_tab, const String &p_name, int p_value
}
}
-int Tabs::get_tab_opentype_feature(int p_tab, const String &p_name) const {
+int TabBar::get_tab_opentype_feature(int p_tab, const String &p_name) const {
ERR_FAIL_INDEX_V(p_tab, tabs.size(), -1);
int32_t tag = TS->name_to_tag(p_name);
if (!tabs[p_tab].opentype_features.has(tag)) {
@@ -598,7 +603,7 @@ int Tabs::get_tab_opentype_feature(int p_tab, const String &p_name) const {
return tabs[p_tab].opentype_features[tag];
}
-void Tabs::set_tab_language(int p_tab, const String &p_language) {
+void TabBar::set_tab_language(int p_tab, const String &p_language) {
ERR_FAIL_INDEX(p_tab, tabs.size());
if (tabs[p_tab].language != p_language) {
tabs.write[p_tab].language = p_language;
@@ -607,35 +612,35 @@ void Tabs::set_tab_language(int p_tab, const String &p_language) {
}
}
-String Tabs::get_tab_language(int p_tab) const {
+String TabBar::get_tab_language(int p_tab) const {
ERR_FAIL_INDEX_V(p_tab, tabs.size(), "");
return tabs[p_tab].language;
}
-void Tabs::set_tab_icon(int p_tab, const Ref<Texture2D> &p_icon) {
+void TabBar::set_tab_icon(int p_tab, const Ref<Texture2D> &p_icon) {
ERR_FAIL_INDEX(p_tab, tabs.size());
tabs.write[p_tab].icon = p_icon;
update();
minimum_size_changed();
}
-Ref<Texture2D> Tabs::get_tab_icon(int p_tab) const {
+Ref<Texture2D> TabBar::get_tab_icon(int p_tab) const {
ERR_FAIL_INDEX_V(p_tab, tabs.size(), Ref<Texture2D>());
return tabs[p_tab].icon;
}
-void Tabs::set_tab_disabled(int p_tab, bool p_disabled) {
+void TabBar::set_tab_disabled(int p_tab, bool p_disabled) {
ERR_FAIL_INDEX(p_tab, tabs.size());
tabs.write[p_tab].disabled = p_disabled;
update();
}
-bool Tabs::get_tab_disabled(int p_tab) const {
+bool TabBar::get_tab_disabled(int p_tab) const {
ERR_FAIL_INDEX_V(p_tab, tabs.size(), false);
return tabs[p_tab].disabled;
}
-void Tabs::set_tab_right_button(int p_tab, const Ref<Texture2D> &p_right_button) {
+void TabBar::set_tab_right_button(int p_tab, const Ref<Texture2D> &p_right_button) {
ERR_FAIL_INDEX(p_tab, tabs.size());
tabs.write[p_tab].right_button = p_right_button;
_update_cache();
@@ -643,12 +648,12 @@ void Tabs::set_tab_right_button(int p_tab, const Ref<Texture2D> &p_right_button)
minimum_size_changed();
}
-Ref<Texture2D> Tabs::get_tab_right_button(int p_tab) const {
+Ref<Texture2D> TabBar::get_tab_right_button(int p_tab) const {
ERR_FAIL_INDEX_V(p_tab, tabs.size(), Ref<Texture2D>());
return tabs[p_tab].right_button;
}
-void Tabs::_update_hover() {
+void TabBar::_update_hover() {
if (!is_inside_tree()) {
return;
}
@@ -685,7 +690,7 @@ void Tabs::_update_hover() {
}
}
-void Tabs::_update_cache() {
+void TabBar::_update_cache() {
Ref<StyleBox> tab_disabled = get_theme_stylebox(SNAME("tab_disabled"));
Ref<StyleBox> tab_unselected = get_theme_stylebox(SNAME("tab_unselected"));
Ref<StyleBox> tab_selected = get_theme_stylebox(SNAME("tab_selected"));
@@ -748,7 +753,7 @@ void Tabs::_update_cache() {
}
}
-void Tabs::_on_mouse_exited() {
+void TabBar::_on_mouse_exited() {
rb_hover = -1;
cb_hover = -1;
hover = -1;
@@ -756,7 +761,7 @@ void Tabs::_on_mouse_exited() {
update();
}
-void Tabs::add_tab(const String &p_str, const Ref<Texture2D> &p_icon) {
+void TabBar::add_tab(const String &p_str, const Ref<Texture2D> &p_icon) {
Tab t;
t.text = p_str;
t.xl_text = atr(p_str);
@@ -775,7 +780,7 @@ void Tabs::add_tab(const String &p_str, const Ref<Texture2D> &p_icon) {
minimum_size_changed();
}
-void Tabs::clear_tabs() {
+void TabBar::clear_tabs() {
tabs.clear();
current = 0;
previous = 0;
@@ -783,7 +788,7 @@ void Tabs::clear_tabs() {
update();
}
-void Tabs::remove_tab(int p_idx) {
+void TabBar::remove_tab(int p_idx) {
ERR_FAIL_INDEX(p_idx, tabs.size());
tabs.remove(p_idx);
if (current >= p_idx) {
@@ -805,7 +810,7 @@ void Tabs::remove_tab(int p_idx) {
_ensure_no_over_offset();
}
-Variant Tabs::get_drag_data(const Point2 &p_point) {
+Variant TabBar::get_drag_data(const Point2 &p_point) {
if (!drag_to_rearrange_enabled) {
return Variant();
}
@@ -839,7 +844,7 @@ Variant Tabs::get_drag_data(const Point2 &p_point) {
return drag_data;
}
-bool Tabs::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
+bool TabBar::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
if (!drag_to_rearrange_enabled) {
return false;
}
@@ -855,9 +860,9 @@ bool Tabs::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
if (from_path == to_path) {
return true;
} else if (get_tabs_rearrange_group() != -1) {
- // drag and drop between other Tabs
+ // drag and drop between other TabBars
Node *from_node = get_node(from_path);
- Tabs *from_tabs = Object::cast_to<Tabs>(from_node);
+ TabBar *from_tabs = Object::cast_to<TabBar>(from_node);
if (from_tabs && from_tabs->get_tabs_rearrange_group() == get_tabs_rearrange_group()) {
return true;
}
@@ -866,7 +871,7 @@ bool Tabs::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
return false;
}
-void Tabs::drop_data(const Point2 &p_point, const Variant &p_data) {
+void TabBar::drop_data(const Point2 &p_point, const Variant &p_data) {
if (!drag_to_rearrange_enabled) {
return;
}
@@ -892,7 +897,7 @@ void Tabs::drop_data(const Point2 &p_point, const Variant &p_data) {
} else if (get_tabs_rearrange_group() != -1) {
// drag and drop between Tabs
Node *from_node = get_node(from_path);
- Tabs *from_tabs = Object::cast_to<Tabs>(from_node);
+ TabBar *from_tabs = Object::cast_to<TabBar>(from_node);
if (from_tabs && from_tabs->get_tabs_rearrange_group() == get_tabs_rearrange_group()) {
if (tab_from_id >= from_tabs->get_tab_count()) {
return;
@@ -912,7 +917,7 @@ void Tabs::drop_data(const Point2 &p_point, const Variant &p_data) {
update();
}
-int Tabs::get_tab_idx_at_point(const Point2 &p_point) const {
+int TabBar::get_tab_idx_at_point(const Point2 &p_point) const {
int hover_now = -1;
for (int i = offset; i <= max_drawn_tab; i++) {
Rect2 rect = get_tab_rect(i);
@@ -924,17 +929,17 @@ int Tabs::get_tab_idx_at_point(const Point2 &p_point) const {
return hover_now;
}
-void Tabs::set_tab_align(TabAlign p_align) {
+void TabBar::set_tab_align(TabAlign p_align) {
ERR_FAIL_INDEX(p_align, ALIGN_MAX);
tab_align = p_align;
update();
}
-Tabs::TabAlign Tabs::get_tab_align() const {
+TabBar::TabAlign TabBar::get_tab_align() const {
return tab_align;
}
-void Tabs::set_clip_tabs(bool p_clip_tabs) {
+void TabBar::set_clip_tabs(bool p_clip_tabs) {
if (clip_tabs == p_clip_tabs) {
return;
}
@@ -943,11 +948,11 @@ void Tabs::set_clip_tabs(bool p_clip_tabs) {
minimum_size_changed();
}
-bool Tabs::get_clip_tabs() const {
+bool TabBar::get_clip_tabs() const {
return clip_tabs;
}
-void Tabs::move_tab(int from, int to) {
+void TabBar::move_tab(int from, int to) {
if (from == to) {
return;
}
@@ -963,7 +968,7 @@ void Tabs::move_tab(int from, int to) {
update();
}
-int Tabs::get_tab_width(int p_idx) const {
+int TabBar::get_tab_width(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx, tabs.size(), 0);
Ref<StyleBox> tab_unselected = get_theme_stylebox(SNAME("tab_unselected"));
@@ -1005,7 +1010,7 @@ int Tabs::get_tab_width(int p_idx) const {
return x;
}
-void Tabs::_ensure_no_over_offset() {
+void TabBar::_ensure_no_over_offset() {
if (!is_inside_tree()) {
return;
}
@@ -1031,7 +1036,7 @@ void Tabs::_ensure_no_over_offset() {
}
}
-void Tabs::ensure_tab_visible(int p_idx) {
+void TabBar::ensure_tab_visible(int p_idx) {
if (!is_inside_tree()) {
return;
}
@@ -1068,7 +1073,7 @@ void Tabs::ensure_tab_visible(int p_idx) {
}
}
-Rect2 Tabs::get_tab_rect(int p_tab) const {
+Rect2 TabBar::get_tab_rect(int p_tab) const {
ERR_FAIL_INDEX_V(p_tab, tabs.size(), Rect2());
if (is_layout_rtl()) {
return Rect2(get_size().width - tabs[p_tab].ofs_cache - tabs[p_tab].size_cache, 0, tabs[p_tab].size_cache, get_size().height);
@@ -1077,93 +1082,93 @@ Rect2 Tabs::get_tab_rect(int p_tab) const {
}
}
-void Tabs::set_tab_close_display_policy(CloseButtonDisplayPolicy p_policy) {
+void TabBar::set_tab_close_display_policy(CloseButtonDisplayPolicy p_policy) {
ERR_FAIL_INDEX(p_policy, CLOSE_BUTTON_MAX);
cb_displaypolicy = p_policy;
update();
}
-Tabs::CloseButtonDisplayPolicy Tabs::get_tab_close_display_policy() const {
+TabBar::CloseButtonDisplayPolicy TabBar::get_tab_close_display_policy() const {
return cb_displaypolicy;
}
-void Tabs::set_min_width(int p_width) {
+void TabBar::set_min_width(int p_width) {
min_width = p_width;
}
-void Tabs::set_scrolling_enabled(bool p_enabled) {
+void TabBar::set_scrolling_enabled(bool p_enabled) {
scrolling_enabled = p_enabled;
}
-bool Tabs::get_scrolling_enabled() const {
+bool TabBar::get_scrolling_enabled() const {
return scrolling_enabled;
}
-void Tabs::set_drag_to_rearrange_enabled(bool p_enabled) {
+void TabBar::set_drag_to_rearrange_enabled(bool p_enabled) {
drag_to_rearrange_enabled = p_enabled;
}
-bool Tabs::get_drag_to_rearrange_enabled() const {
+bool TabBar::get_drag_to_rearrange_enabled() const {
return drag_to_rearrange_enabled;
}
-void Tabs::set_tabs_rearrange_group(int p_group_id) {
+void TabBar::set_tabs_rearrange_group(int p_group_id) {
tabs_rearrange_group = p_group_id;
}
-int Tabs::get_tabs_rearrange_group() const {
+int TabBar::get_tabs_rearrange_group() const {
return tabs_rearrange_group;
}
-void Tabs::set_select_with_rmb(bool p_enabled) {
+void TabBar::set_select_with_rmb(bool p_enabled) {
select_with_rmb = p_enabled;
}
-bool Tabs::get_select_with_rmb() const {
+bool TabBar::get_select_with_rmb() const {
return select_with_rmb;
}
-void Tabs::_bind_methods() {
- ClassDB::bind_method(D_METHOD("_update_hover"), &Tabs::_update_hover);
- ClassDB::bind_method(D_METHOD("get_tab_count"), &Tabs::get_tab_count);
- ClassDB::bind_method(D_METHOD("set_current_tab", "tab_idx"), &Tabs::set_current_tab);
- ClassDB::bind_method(D_METHOD("get_current_tab"), &Tabs::get_current_tab);
- ClassDB::bind_method(D_METHOD("get_previous_tab"), &Tabs::get_previous_tab);
- ClassDB::bind_method(D_METHOD("set_tab_title", "tab_idx", "title"), &Tabs::set_tab_title);
- ClassDB::bind_method(D_METHOD("get_tab_title", "tab_idx"), &Tabs::get_tab_title);
- ClassDB::bind_method(D_METHOD("set_tab_text_direction", "tab_idx", "direction"), &Tabs::set_tab_text_direction);
- ClassDB::bind_method(D_METHOD("get_tab_text_direction", "tab_idx"), &Tabs::get_tab_text_direction);
- ClassDB::bind_method(D_METHOD("set_tab_opentype_feature", "tab_idx", "tag", "values"), &Tabs::set_tab_opentype_feature);
- ClassDB::bind_method(D_METHOD("get_tab_opentype_feature", "tab_idx", "tag"), &Tabs::get_tab_opentype_feature);
- ClassDB::bind_method(D_METHOD("clear_tab_opentype_features", "tab_idx"), &Tabs::clear_tab_opentype_features);
- ClassDB::bind_method(D_METHOD("set_tab_language", "tab_idx", "language"), &Tabs::set_tab_language);
- ClassDB::bind_method(D_METHOD("get_tab_language", "tab_idx"), &Tabs::get_tab_language);
- ClassDB::bind_method(D_METHOD("set_tab_icon", "tab_idx", "icon"), &Tabs::set_tab_icon);
- ClassDB::bind_method(D_METHOD("get_tab_icon", "tab_idx"), &Tabs::get_tab_icon);
- ClassDB::bind_method(D_METHOD("set_tab_disabled", "tab_idx", "disabled"), &Tabs::set_tab_disabled);
- ClassDB::bind_method(D_METHOD("get_tab_disabled", "tab_idx"), &Tabs::get_tab_disabled);
- ClassDB::bind_method(D_METHOD("remove_tab", "tab_idx"), &Tabs::remove_tab);
- ClassDB::bind_method(D_METHOD("add_tab", "title", "icon"), &Tabs::add_tab, DEFVAL(""), DEFVAL(Ref<Texture2D>()));
- ClassDB::bind_method(D_METHOD("set_tab_align", "align"), &Tabs::set_tab_align);
- ClassDB::bind_method(D_METHOD("get_tab_align"), &Tabs::get_tab_align);
- ClassDB::bind_method(D_METHOD("set_clip_tabs", "clip_tabs"), &Tabs::set_clip_tabs);
- ClassDB::bind_method(D_METHOD("get_clip_tabs"), &Tabs::get_clip_tabs);
- ClassDB::bind_method(D_METHOD("get_tab_offset"), &Tabs::get_tab_offset);
- ClassDB::bind_method(D_METHOD("get_offset_buttons_visible"), &Tabs::get_offset_buttons_visible);
- ClassDB::bind_method(D_METHOD("ensure_tab_visible", "idx"), &Tabs::ensure_tab_visible);
- ClassDB::bind_method(D_METHOD("get_tab_rect", "tab_idx"), &Tabs::get_tab_rect);
- ClassDB::bind_method(D_METHOD("move_tab", "from", "to"), &Tabs::move_tab);
- ClassDB::bind_method(D_METHOD("set_tab_close_display_policy", "policy"), &Tabs::set_tab_close_display_policy);
- ClassDB::bind_method(D_METHOD("get_tab_close_display_policy"), &Tabs::get_tab_close_display_policy);
- ClassDB::bind_method(D_METHOD("set_scrolling_enabled", "enabled"), &Tabs::set_scrolling_enabled);
- ClassDB::bind_method(D_METHOD("get_scrolling_enabled"), &Tabs::get_scrolling_enabled);
- ClassDB::bind_method(D_METHOD("set_drag_to_rearrange_enabled", "enabled"), &Tabs::set_drag_to_rearrange_enabled);
- ClassDB::bind_method(D_METHOD("get_drag_to_rearrange_enabled"), &Tabs::get_drag_to_rearrange_enabled);
- ClassDB::bind_method(D_METHOD("set_tabs_rearrange_group", "group_id"), &Tabs::set_tabs_rearrange_group);
- ClassDB::bind_method(D_METHOD("get_tabs_rearrange_group"), &Tabs::get_tabs_rearrange_group);
-
- ClassDB::bind_method(D_METHOD("set_select_with_rmb", "enabled"), &Tabs::set_select_with_rmb);
- ClassDB::bind_method(D_METHOD("get_select_with_rmb"), &Tabs::get_select_with_rmb);
+void TabBar::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("_update_hover"), &TabBar::_update_hover);
+ ClassDB::bind_method(D_METHOD("get_tab_count"), &TabBar::get_tab_count);
+ ClassDB::bind_method(D_METHOD("set_current_tab", "tab_idx"), &TabBar::set_current_tab);
+ ClassDB::bind_method(D_METHOD("get_current_tab"), &TabBar::get_current_tab);
+ ClassDB::bind_method(D_METHOD("get_previous_tab"), &TabBar::get_previous_tab);
+ ClassDB::bind_method(D_METHOD("set_tab_title", "tab_idx", "title"), &TabBar::set_tab_title);
+ ClassDB::bind_method(D_METHOD("get_tab_title", "tab_idx"), &TabBar::get_tab_title);
+ ClassDB::bind_method(D_METHOD("set_tab_text_direction", "tab_idx", "direction"), &TabBar::set_tab_text_direction);
+ ClassDB::bind_method(D_METHOD("get_tab_text_direction", "tab_idx"), &TabBar::get_tab_text_direction);
+ ClassDB::bind_method(D_METHOD("set_tab_opentype_feature", "tab_idx", "tag", "values"), &TabBar::set_tab_opentype_feature);
+ ClassDB::bind_method(D_METHOD("get_tab_opentype_feature", "tab_idx", "tag"), &TabBar::get_tab_opentype_feature);
+ ClassDB::bind_method(D_METHOD("clear_tab_opentype_features", "tab_idx"), &TabBar::clear_tab_opentype_features);
+ ClassDB::bind_method(D_METHOD("set_tab_language", "tab_idx", "language"), &TabBar::set_tab_language);
+ ClassDB::bind_method(D_METHOD("get_tab_language", "tab_idx"), &TabBar::get_tab_language);
+ ClassDB::bind_method(D_METHOD("set_tab_icon", "tab_idx", "icon"), &TabBar::set_tab_icon);
+ ClassDB::bind_method(D_METHOD("get_tab_icon", "tab_idx"), &TabBar::get_tab_icon);
+ ClassDB::bind_method(D_METHOD("set_tab_disabled", "tab_idx", "disabled"), &TabBar::set_tab_disabled);
+ ClassDB::bind_method(D_METHOD("get_tab_disabled", "tab_idx"), &TabBar::get_tab_disabled);
+ ClassDB::bind_method(D_METHOD("remove_tab", "tab_idx"), &TabBar::remove_tab);
+ ClassDB::bind_method(D_METHOD("add_tab", "title", "icon"), &TabBar::add_tab, DEFVAL(""), DEFVAL(Ref<Texture2D>()));
+ ClassDB::bind_method(D_METHOD("set_tab_align", "align"), &TabBar::set_tab_align);
+ ClassDB::bind_method(D_METHOD("get_tab_align"), &TabBar::get_tab_align);
+ ClassDB::bind_method(D_METHOD("set_clip_tabs", "clip_tabs"), &TabBar::set_clip_tabs);
+ ClassDB::bind_method(D_METHOD("get_clip_tabs"), &TabBar::get_clip_tabs);
+ ClassDB::bind_method(D_METHOD("get_tab_offset"), &TabBar::get_tab_offset);
+ ClassDB::bind_method(D_METHOD("get_offset_buttons_visible"), &TabBar::get_offset_buttons_visible);
+ ClassDB::bind_method(D_METHOD("ensure_tab_visible", "idx"), &TabBar::ensure_tab_visible);
+ ClassDB::bind_method(D_METHOD("get_tab_rect", "tab_idx"), &TabBar::get_tab_rect);
+ ClassDB::bind_method(D_METHOD("move_tab", "from", "to"), &TabBar::move_tab);
+ ClassDB::bind_method(D_METHOD("set_tab_close_display_policy", "policy"), &TabBar::set_tab_close_display_policy);
+ ClassDB::bind_method(D_METHOD("get_tab_close_display_policy"), &TabBar::get_tab_close_display_policy);
+ ClassDB::bind_method(D_METHOD("set_scrolling_enabled", "enabled"), &TabBar::set_scrolling_enabled);
+ ClassDB::bind_method(D_METHOD("get_scrolling_enabled"), &TabBar::get_scrolling_enabled);
+ ClassDB::bind_method(D_METHOD("set_drag_to_rearrange_enabled", "enabled"), &TabBar::set_drag_to_rearrange_enabled);
+ ClassDB::bind_method(D_METHOD("get_drag_to_rearrange_enabled"), &TabBar::get_drag_to_rearrange_enabled);
+ ClassDB::bind_method(D_METHOD("set_tabs_rearrange_group", "group_id"), &TabBar::set_tabs_rearrange_group);
+ ClassDB::bind_method(D_METHOD("get_tabs_rearrange_group"), &TabBar::get_tabs_rearrange_group);
+
+ ClassDB::bind_method(D_METHOD("set_select_with_rmb", "enabled"), &TabBar::set_select_with_rmb);
+ ClassDB::bind_method(D_METHOD("get_select_with_rmb"), &TabBar::get_select_with_rmb);
ADD_SIGNAL(MethodInfo("tab_changed", PropertyInfo(Variant::INT, "tab")));
ADD_SIGNAL(MethodInfo("tab_rmb_clicked", PropertyInfo(Variant::INT, "tab")));
@@ -1190,6 +1195,6 @@ void Tabs::_bind_methods() {
BIND_ENUM_CONSTANT(CLOSE_BUTTON_MAX);
}
-Tabs::Tabs() {
- connect("mouse_exited", callable_mp(this, &Tabs::_on_mouse_exited));
+TabBar::TabBar() {
+ connect("mouse_exited", callable_mp(this, &TabBar::_on_mouse_exited));
}
diff --git a/scene/gui/tabs.h b/scene/gui/tab_bar.h
index b044453803..1d84d6dbc8 100644
--- a/scene/gui/tabs.h
+++ b/scene/gui/tab_bar.h
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* tabs.h */
+/* tab_bar.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,14 +28,14 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#ifndef TABS_H
-#define TABS_H
+#ifndef TAB_BAR_H
+#define TAB_BAR_H
#include "scene/gui/control.h"
#include "scene/resources/text_line.h"
-class Tabs : public Control {
- GDCLASS(Tabs, Control);
+class TabBar : public Control {
+ GDCLASS(TabBar, Control);
public:
enum TabAlign {
@@ -187,10 +187,10 @@ public:
Rect2 get_tab_rect(int p_tab) const;
Size2 get_minimum_size() const override;
- Tabs();
+ TabBar();
};
-VARIANT_ENUM_CAST(Tabs::TabAlign);
-VARIANT_ENUM_CAST(Tabs::CloseButtonDisplayPolicy);
+VARIANT_ENUM_CAST(TabBar::TabAlign);
+VARIANT_ENUM_CAST(TabBar::CloseButtonDisplayPolicy);
-#endif // TABS_H
+#endif // TAB_BAR_H
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index f03eebd543..9899b02dde 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -1534,6 +1534,10 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
update();
}
+ if (is_middle_mouse_paste_enabled() && mb->get_button_index() == MOUSE_BUTTON_MIDDLE) {
+ paste_primary_clipboard();
+ }
+
if (mb->get_button_index() == MOUSE_BUTTON_RIGHT && context_menu_enabled) {
_reset_caret_blink_timer();
@@ -1571,6 +1575,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
dragging_selection = false;
can_drag_minimap = false;
click_select_held->stop();
+ DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
}
// Notify to show soft keyboard.
@@ -2596,6 +2601,14 @@ bool TextEdit::is_virtual_keyboard_enabled() const {
return virtual_keyboard_enabled;
}
+void TextEdit::set_middle_mouse_paste_enabled(bool p_enabled) {
+ middle_mouse_paste_enabled = p_enabled;
+}
+
+bool TextEdit::is_middle_mouse_paste_enabled() const {
+ return middle_mouse_paste_enabled;
+}
+
// Text manipulation
void TextEdit::clear() {
setting_text = true;
@@ -2915,6 +2928,13 @@ void TextEdit::paste() {
_paste_internal();
}
+void TextEdit::paste_primary_clipboard() {
+ if (GDVIRTUAL_CALL(_paste_primary_clipboard)) {
+ return;
+ }
+ _paste_primary_clipboard_internal();
+}
+
// Context menu.
PopupMenu *TextEdit::get_menu() const {
const_cast<TextEdit *>(this)->_generate_context_menu();
@@ -4039,7 +4059,7 @@ int TextEdit::get_visible_line_count() const {
}
int TextEdit::get_total_visible_line_count() const {
- /* Returns the total number of (lines + wraped - hidden). */
+ /* Returns the total number of (lines + wrapped - hidden). */
if (!_is_hiding_enabled() && get_line_wrapping_mode() == LineWrappingMode::LINE_WRAPPING_NONE) {
return text.size();
}
@@ -4536,6 +4556,9 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_virtual_keyboard_enabled", "enabled"), &TextEdit::set_virtual_keyboard_enabled);
ClassDB::bind_method(D_METHOD("is_virtual_keyboard_enabled"), &TextEdit::is_virtual_keyboard_enabled);
+ ClassDB::bind_method(D_METHOD("set_middle_mouse_paste_enabled", "enabled"), &TextEdit::set_middle_mouse_paste_enabled);
+ ClassDB::bind_method(D_METHOD("is_middle_mouse_paste_enabled"), &TextEdit::is_middle_mouse_paste_enabled);
+
// Text manipulation
ClassDB::bind_method(D_METHOD("clear"), &TextEdit::clear);
@@ -4575,6 +4598,7 @@ void TextEdit::_bind_methods() {
GDVIRTUAL_BIND(_cut)
GDVIRTUAL_BIND(_copy)
GDVIRTUAL_BIND(_paste)
+ GDVIRTUAL_BIND(_paste_primary_clipboard)
// Context Menu
BIND_ENUM_CONSTANT(MENU_CUT);
@@ -4850,6 +4874,7 @@ void TextEdit::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shortcut_keys_enabled"), "set_shortcut_keys_enabled", "is_shortcut_keys_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "selecting_enabled"), "set_selecting_enabled", "is_selecting_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "virtual_keyboard_enabled"), "set_virtual_keyboard_enabled", "is_virtual_keyboard_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "middle_mouse_paste_enabled"), "set_middle_mouse_paste_enabled", "is_middle_mouse_paste_enabled");
ADD_PROPERTY(PropertyInfo(Variant::INT, "wrap_mode", PROPERTY_HINT_ENUM, "None,Boundary"), "set_line_wrapping_mode", "get_line_wrapping_mode");
@@ -5141,6 +5166,24 @@ void TextEdit::_paste_internal() {
end_complex_operation();
}
+void TextEdit::_paste_primary_clipboard_internal() {
+ if (!is_editable()) {
+ return;
+ }
+
+ String paste_buffer = DisplayServer::get_singleton()->clipboard_get_primary();
+
+ Point2i pos = get_line_column_at_pos(get_local_mouse_pos());
+ deselect();
+ set_caret_line(pos.y, true, false);
+ set_caret_column(pos.x);
+ if (!paste_buffer.is_empty()) {
+ insert_text_at_caret(paste_buffer);
+ }
+
+ grab_focus();
+}
+
/* Text. */
// Context menu.
void TextEdit::_generate_context_menu() {
@@ -5477,6 +5520,8 @@ void TextEdit::_update_selection_mode_word() {
}
}
+ DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+
update();
click_select_held->start();
@@ -5504,6 +5549,8 @@ void TextEdit::_update_selection_mode_line() {
set_caret_column(0);
select(selection.selecting_line, selection.selecting_column, line, col);
+ DisplayServer::get_singleton()->clipboard_set_primary(get_selected_text());
+
update();
click_select_held->start();
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index 16c1ee9ff9..8823e44c0d 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -269,6 +269,7 @@ private:
bool context_menu_enabled = true;
bool shortcut_keys_enabled = true;
bool virtual_keyboard_enabled = true;
+ bool middle_mouse_paste_enabled = true;
// Overridable actions
String cut_copy_line = "";
@@ -586,12 +587,14 @@ protected:
virtual void _cut_internal();
virtual void _copy_internal();
virtual void _paste_internal();
+ virtual void _paste_primary_clipboard_internal();
GDVIRTUAL1(_handle_unicode_input, int)
GDVIRTUAL0(_backspace)
GDVIRTUAL0(_cut)
GDVIRTUAL0(_copy)
GDVIRTUAL0(_paste)
+ GDVIRTUAL0(_paste_primary_clipboard)
public:
/* General overrides. */
@@ -640,6 +643,9 @@ public:
void set_virtual_keyboard_enabled(bool p_enabled);
bool is_virtual_keyboard_enabled() const;
+ void set_middle_mouse_paste_enabled(bool p_enabled);
+ bool is_middle_mouse_paste_enabled() const;
+
// Text manipulation
void clear();
@@ -674,6 +680,7 @@ public:
void cut();
void copy();
void paste();
+ void paste_primary_clipboard();
// Context menu.
PopupMenu *get_menu() const;
diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp
index 61c25ae9db..33e0e2cad7 100644
--- a/scene/register_scene_types.cpp
+++ b/scene/register_scene_types.cpp
@@ -115,8 +115,8 @@
#include "scene/gui/spin_box.h"
#include "scene/gui/split_container.h"
#include "scene/gui/subviewport_container.h"
+#include "scene/gui/tab_bar.h"
#include "scene/gui/tab_container.h"
-#include "scene/gui/tabs.h"
#include "scene/gui/text_edit.h"
#include "scene/gui/texture_button.h"
#include "scene/gui/texture_progress_bar.h"
@@ -262,7 +262,7 @@ static Ref<ResourceFormatLoaderShader> resource_loader_shader;
void register_scene_types() {
SceneStringNames::create();
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
Node::init_node_hrcr();
@@ -287,7 +287,7 @@ void register_scene_types() {
resource_loader_shader.instantiate();
ResourceLoader::add_resource_format_loader(resource_loader_shader, true);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_CLASS(Object);
@@ -309,7 +309,7 @@ void register_scene_types() {
GDREGISTER_CLASS(ButtonGroup);
GDREGISTER_VIRTUAL_CLASS(BaseButton);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_CLASS(Control);
GDREGISTER_CLASS(Button);
@@ -330,7 +330,7 @@ void register_scene_types() {
GDREGISTER_CLASS(Panel);
GDREGISTER_VIRTUAL_CLASS(Range);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_CLASS(TextureRect);
GDREGISTER_CLASS(ColorRect);
@@ -338,7 +338,7 @@ void register_scene_types() {
GDREGISTER_CLASS(ReferenceRect);
GDREGISTER_CLASS(AspectRatioContainer);
GDREGISTER_CLASS(TabContainer);
- GDREGISTER_CLASS(Tabs);
+ GDREGISTER_CLASS(TabBar);
GDREGISTER_VIRTUAL_CLASS(Separator);
GDREGISTER_CLASS(HSeparator);
GDREGISTER_CLASS(VSeparator);
@@ -352,7 +352,7 @@ void register_scene_types() {
GDREGISTER_CLASS(ScrollContainer);
GDREGISTER_CLASS(PanelContainer);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_CLASS(TextureProgressBar);
GDREGISTER_CLASS(ItemList);
@@ -391,7 +391,7 @@ void register_scene_types() {
GDREGISTER_CLASS(GraphNode);
GDREGISTER_CLASS(GraphEdit);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
bool swap_cancel_ok = false;
if (DisplayServer::get_singleton()) {
@@ -431,9 +431,9 @@ void register_scene_types() {
GDREGISTER_CLASS(AnimationNodeTimeSeek);
GDREGISTER_CLASS(AnimationNodeTransition);
- GDREGISTER_CLASS(ShaderGlobalsOverride); //can be used in any shader
+ GDREGISTER_CLASS(ShaderGlobalsOverride); // can be used in any shader
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
/* REGISTER 3D */
@@ -486,9 +486,9 @@ void register_scene_types() {
GDREGISTER_CLASS(Position3D);
GDREGISTER_CLASS(RootMotionView);
- ClassDB::set_class_enabled("RootMotionView", false); //disabled by default, enabled by editor
+ ClassDB::set_class_enabled("RootMotionView", false); // disabled by default, enabled by editor
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_VIRTUAL_CLASS(CollisionObject3D);
GDREGISTER_VIRTUAL_CLASS(PhysicsBody3D);
@@ -533,7 +533,7 @@ void register_scene_types() {
GDREGISTER_CLASS(NavigationAgent3D);
GDREGISTER_CLASS(NavigationObstacle3D);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
#endif
/* REGISTER SHADER */
@@ -673,7 +673,7 @@ void register_scene_types() {
GDREGISTER_CLASS(OccluderPolygon2D);
GDREGISTER_CLASS(BackBufferCopy);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_CLASS(Camera2D);
GDREGISTER_CLASS(AudioListener2D);
@@ -705,7 +705,7 @@ void register_scene_types() {
GDREGISTER_CLASS(PhysicalBone2D);
GDREGISTER_CLASS(SkeletonModification2DPhysicalBones);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
/* REGISTER RESOURCES */
@@ -746,7 +746,7 @@ void register_scene_types() {
GDREGISTER_CLASS(MeshLibrary);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_VIRTUAL_CLASS(Shape3D);
GDREGISTER_CLASS(SeparationRayShape3D);
@@ -768,7 +768,7 @@ void register_scene_types() {
ClassDB::register_class<SkeletonModification3DTwoBoneIK>();
ClassDB::register_class<SkeletonModification3DStackHolder>();
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_CLASS(VelocityTracker3D);
#endif
@@ -823,7 +823,7 @@ void register_scene_types() {
GDREGISTER_CLASS(BitMap);
GDREGISTER_CLASS(Gradient);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_CLASS(AudioStreamPlayer);
GDREGISTER_CLASS(AudioStreamPlayer2D);
@@ -833,7 +833,7 @@ void register_scene_types() {
GDREGISTER_VIRTUAL_CLASS(VideoStream);
GDREGISTER_CLASS(AudioStreamSample);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_VIRTUAL_CLASS(Shape2D);
GDREGISTER_CLASS(WorldBoundaryShape2D);
@@ -854,13 +854,13 @@ void register_scene_types() {
GDREGISTER_CLASS(NavigationAgent2D);
GDREGISTER_CLASS(NavigationObstacle2D);
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
GDREGISTER_VIRTUAL_CLASS(SceneState);
GDREGISTER_CLASS(PackedScene);
GDREGISTER_CLASS(SceneTree);
- GDREGISTER_VIRTUAL_CLASS(SceneTreeTimer); //sorry, you can't create it
+ GDREGISTER_VIRTUAL_CLASS(SceneTreeTimer); // sorry, you can't create it
#ifndef DISABLE_DEPRECATED
// Dropped in 4.0, near approximation.
@@ -1008,7 +1008,7 @@ void register_scene_types() {
#endif /* DISABLE_DEPRECATED */
- OS::get_singleton()->yield(); //may take time to init
+ OS::get_singleton()->yield(); // may take time to init
for (int i = 0; i < 20; i++) {
GLOBAL_DEF_BASIC(vformat("layer_names/2d_render/layer_%d", i + 1), "");
@@ -1086,7 +1086,7 @@ void unregister_scene_types() {
ResourceLoader::remove_resource_format_loader(resource_loader_shader);
resource_loader_shader.unref();
- //StandardMaterial3D is not initialised when 3D is disabled, so it shouldn't be cleaned up either
+ // StandardMaterial3D is not initialised when 3D is disabled, so it shouldn't be cleaned up either
#ifndef _3D_DISABLED
BaseMaterial3D::finish_shaders();
#endif // _3D_DISABLED
diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp
index 54bb7a82cf..9fdfd493c1 100644
--- a/scene/resources/default_theme/default_theme.cpp
+++ b/scene/resources/default_theme/default_theme.cpp
@@ -785,30 +785,30 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
theme->set_constant("icon_separation", "TabContainer", 4 * scale);
theme->set_constant("outline_size", "TabContainer", 0);
- // Tabs
-
- theme->set_stylebox("tab_selected", "Tabs", sb_expand(make_stylebox(tab_current_png, 4, 3, 4, 1, 16, 3, 16, 2), 2, 2, 2, 2));
- theme->set_stylebox("tab_unselected", "Tabs", sb_expand(make_stylebox(tab_behind_png, 5, 4, 5, 1, 16, 5, 16, 2), 3, 3, 3, 3));
- theme->set_stylebox("tab_disabled", "Tabs", sb_expand(make_stylebox(tab_disabled_png, 5, 5, 5, 1, 16, 6, 16, 4), 3, 0, 3, 3));
- theme->set_stylebox("close_bg_pressed", "Tabs", make_stylebox(button_pressed_png, 4, 4, 4, 4));
- theme->set_stylebox("close_bg_highlight", "Tabs", make_stylebox(button_normal_png, 4, 4, 4, 4));
-
- theme->set_icon("increment", "Tabs", make_icon(scroll_button_right_png));
- theme->set_icon("increment_highlight", "Tabs", make_icon(scroll_button_right_hl_png));
- theme->set_icon("decrement", "Tabs", make_icon(scroll_button_left_png));
- theme->set_icon("decrement_highlight", "Tabs", make_icon(scroll_button_left_hl_png));
- theme->set_icon("close", "Tabs", make_icon(tab_close_png));
-
- theme->set_font("font", "Tabs", Ref<Font>());
- theme->set_font_size("font_size", "Tabs", -1);
-
- theme->set_color("font_selected_color", "Tabs", control_font_hover_color);
- theme->set_color("font_unselected_color", "Tabs", control_font_low_color);
- theme->set_color("font_disabled_color", "Tabs", control_font_disabled_color);
- theme->set_color("font_outline_color", "Tabs", Color(1, 1, 1));
-
- theme->set_constant("hseparation", "Tabs", 4 * scale);
- theme->set_constant("outline_size", "Tabs", 0);
+ // TabBar
+
+ theme->set_stylebox("tab_selected", "TabBar", sb_expand(make_stylebox(tab_current_png, 4, 3, 4, 1, 16, 3, 16, 2), 2, 2, 2, 2));
+ theme->set_stylebox("tab_unselected", "TabBar", sb_expand(make_stylebox(tab_behind_png, 5, 4, 5, 1, 16, 5, 16, 2), 3, 3, 3, 3));
+ theme->set_stylebox("tab_disabled", "TabBar", sb_expand(make_stylebox(tab_disabled_png, 5, 5, 5, 1, 16, 6, 16, 4), 3, 0, 3, 3));
+ theme->set_stylebox("close_bg_pressed", "TabBar", make_stylebox(button_pressed_png, 4, 4, 4, 4));
+ theme->set_stylebox("close_bg_highlight", "TabBar", make_stylebox(button_normal_png, 4, 4, 4, 4));
+
+ theme->set_icon("increment", "TabBar", make_icon(scroll_button_right_png));
+ theme->set_icon("increment_highlight", "TabBar", make_icon(scroll_button_right_hl_png));
+ theme->set_icon("decrement", "TabBar", make_icon(scroll_button_left_png));
+ theme->set_icon("decrement_highlight", "TabBar", make_icon(scroll_button_left_hl_png));
+ theme->set_icon("close", "TabBar", make_icon(tab_close_png));
+
+ theme->set_font("font", "TabBar", Ref<Font>());
+ theme->set_font_size("font_size", "TabBar", -1);
+
+ theme->set_color("font_selected_color", "TabBar", control_font_hover_color);
+ theme->set_color("font_unselected_color", "TabBar", control_font_low_color);
+ theme->set_color("font_disabled_color", "TabBar", control_font_disabled_color);
+ theme->set_color("font_outline_color", "TabBar", Color(1, 1, 1));
+
+ theme->set_constant("hseparation", "TabBar", 4 * scale);
+ theme->set_constant("outline_size", "TabBar", 0);
// Separators
diff --git a/scene/resources/navigation_mesh.h b/scene/resources/navigation_mesh.h
index 1cdf7a07ed..009239838f 100644
--- a/scene/resources/navigation_mesh.h
+++ b/scene/resources/navigation_mesh.h
@@ -85,7 +85,7 @@ protected:
float cell_size = 0.3f;
float cell_height = 0.2f;
float agent_height = 2.0f;
- float agent_radius = 0.6f;
+ float agent_radius = 1.0f;
float agent_max_climb = 0.9f;
float agent_max_slope = 45.0f;
float region_min_size = 8.0f;
diff --git a/scene/resources/text_paragraph.cpp b/scene/resources/text_paragraph.cpp
index b2e18e2451..fae1de94d3 100644
--- a/scene/resources/text_paragraph.cpp
+++ b/scene/resources/text_paragraph.cpp
@@ -84,7 +84,7 @@ void TextParagraph::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "width"), "set_width", "get_width");
- ClassDB::bind_method(D_METHOD("get_non_wraped_size"), &TextParagraph::get_non_wraped_size);
+ ClassDB::bind_method(D_METHOD("get_non_wrapped_size"), &TextParagraph::get_non_wrapped_size);
ClassDB::bind_method(D_METHOD("get_size"), &TextParagraph::get_size);
ClassDB::bind_method(D_METHOD("get_rid"), &TextParagraph::get_rid);
@@ -417,7 +417,7 @@ float TextParagraph::get_width() const {
return width;
}
-Size2 TextParagraph::get_non_wraped_size() const {
+Size2 TextParagraph::get_non_wrapped_size() const {
const_cast<TextParagraph *>(this)->_shape_lines();
if (TS->shaped_text_get_orientation(rid) == TextServer::ORIENTATION_HORIZONTAL) {
return Size2(TS->shaped_text_get_size(rid).x, TS->shaped_text_get_size(rid).y + spacing_top + spacing_bottom);
diff --git a/scene/resources/text_paragraph.h b/scene/resources/text_paragraph.h
index 69c50559df..701c9a17cd 100644
--- a/scene/resources/text_paragraph.h
+++ b/scene/resources/text_paragraph.h
@@ -120,7 +120,7 @@ public:
void set_max_lines_visible(int p_lines);
int get_max_lines_visible() const;
- Size2 get_non_wraped_size() const;
+ Size2 get_non_wrapped_size() const;
Size2 get_size() const;