diff options
-rw-r--r-- | doc/classes/DisplayServer.xml | 4 | ||||
-rw-r--r-- | doc/classes/KinematicBody3D.xml | 16 | ||||
-rw-r--r-- | doc/classes/OS.xml | 2 | ||||
-rw-r--r-- | doc/classes/PopupMenu.xml | 2 | ||||
-rw-r--r-- | doc/classes/ProjectSettings.xml | 2 | ||||
-rw-r--r-- | drivers/dummy/rasterizer_dummy.h | 7 | ||||
-rw-r--r-- | editor/doc_data.h | 18 | ||||
-rw-r--r-- | modules/gdscript/gdscript_parser.cpp | 51 | ||||
-rw-r--r-- | servers/display_server.cpp | 4 | ||||
-rw-r--r-- | servers/display_server.h | 2 |
10 files changed, 86 insertions, 22 deletions
diff --git a/doc/classes/DisplayServer.xml b/doc/classes/DisplayServer.xml index 90828089f9..7fe712753c 100644 --- a/doc/classes/DisplayServer.xml +++ b/doc/classes/DisplayServer.xml @@ -592,6 +592,10 @@ </argument> <argument index="2" name="max_length" type="int" default="-1"> </argument> + <argument index="3" name="cursor_start" type="int" default="-1"> + </argument> + <argument index="4" name="cursor_end" type="int" default="-1"> + </argument> <description> </description> </method> diff --git a/doc/classes/KinematicBody3D.xml b/doc/classes/KinematicBody3D.xml index 830d63ed11..5477c6bab6 100644 --- a/doc/classes/KinematicBody3D.xml +++ b/doc/classes/KinematicBody3D.xml @@ -18,7 +18,7 @@ <argument index="0" name="axis" type="int" enum="PhysicsServer3D.BodyAxis"> </argument> <description> - Returns [code]true[/code] if the specified [code]axis[/code] is locked. See also [member move_lock_x], [member move_lock_y] and [member move_lock_z]. + Returns [code]true[/code] if the specified [code]axis[/code] is locked. See also [member axis_lock_motion_x], [member axis_lock_motion_y] and [member axis_lock_motion_z]. </description> </method> <method name="get_floor_normal" qualifiers="const"> @@ -145,7 +145,7 @@ <argument index="1" name="lock" type="bool"> </argument> <description> - Locks or unlocks the specified [code]axis[/code] depending on the value of [code]lock[/code]. See also [member move_lock_x], [member move_lock_y] and [member move_lock_z]. + Locks or unlocks the specified [code]axis[/code] depending on the value of [code]lock[/code]. See also [member axis_lock_motion_x], [member axis_lock_motion_y] and [member axis_lock_motion_z]. </description> </method> <method name="test_move"> @@ -163,18 +163,18 @@ </method> </methods> <members> - <member name="collision/safe_margin" type="float" setter="set_safe_margin" getter="get_safe_margin" default="0.001"> - If the body is at least this close to another body, this body will consider them to be colliding. - </member> - <member name="move_lock_x" type="bool" setter="set_axis_lock" getter="get_axis_lock" default="false"> + <member name="axis_lock_motion_x" type="bool" setter="set_axis_lock" getter="get_axis_lock" default="false"> Lock the body's X axis movement. </member> - <member name="move_lock_y" type="bool" setter="set_axis_lock" getter="get_axis_lock" default="false"> + <member name="axis_lock_motion_y" type="bool" setter="set_axis_lock" getter="get_axis_lock" default="false"> Lock the body's Y axis movement. </member> - <member name="move_lock_z" type="bool" setter="set_axis_lock" getter="get_axis_lock" default="false"> + <member name="axis_lock_motion_z" type="bool" setter="set_axis_lock" getter="get_axis_lock" default="false"> Lock the body's Z axis movement. </member> + <member name="collision/safe_margin" type="float" setter="set_safe_margin" getter="get_safe_margin" default="0.001"> + If the body is at least this close to another body, this body will consider them to be colliding. + </member> </members> <constants> </constants> diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index f13671ca96..03203e2ebb 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -518,7 +518,7 @@ <member name="low_processor_usage_mode_sleep_usec" type="int" setter="set_low_processor_usage_mode_sleep_usec" getter="get_low_processor_usage_mode_sleep_usec" default="6900"> The amount of sleeping between frames when the low-processor usage mode is enabled (in microseconds). Higher values will result in lower CPU usage. </member> - <member name="tablet_driver" type="String" setter="set_current_tablet_driver" getter="get_current_tablet_driver" default=""wintab""> + <member name="tablet_driver" type="String" setter="set_current_tablet_driver" getter="get_current_tablet_driver" default=""""> The current tablet drvier in use. </member> </members> diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml index 59450b7ea2..ce55c90c68 100644 --- a/doc/classes/PopupMenu.xml +++ b/doc/classes/PopupMenu.xml @@ -591,7 +591,7 @@ </method> </methods> <members> - <member name="allow_search" type="bool" setter="set_allow_search" getter="get_allow_search" default="false"> + <member name="allow_search" type="bool" setter="set_allow_search" getter="get_allow_search" default="true"> If [code]true[/code], allows to navigate [PopupMenu] with letter keys. </member> <member name="hide_on_checkable_item_selection" type="bool" setter="set_hide_on_checkable_item_selection" getter="is_hide_on_checkable_item_selection" default="true"> diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 7c07875ffb..daf8cb1d2f 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -450,7 +450,7 @@ <member name="display/window/size/width" type="int" setter="" getter="" default="1024"> Sets the game's main viewport width. On desktop platforms, this is the default window size. Stretch mode settings also use this as a reference when enabled. </member> - <member name="display/window/tablet_driver" type="String" setter="" getter="" default=""wintab""> + <member name="display/window/tablet_driver" type="String" setter="" getter="" default=""""> Specifies the tablet driver to use. If left empty, the default driver will be used. </member> <member name="display/window/vsync/use_vsync" type="bool" setter="" getter="" default="true"> diff --git a/drivers/dummy/rasterizer_dummy.h b/drivers/dummy/rasterizer_dummy.h index d619a20745..7af7678f63 100644 --- a/drivers/dummy/rasterizer_dummy.h +++ b/drivers/dummy/rasterizer_dummy.h @@ -861,6 +861,13 @@ public: texture_owner.free(p_rid); memdelete(texture); } + + if (mesh_owner.owns(p_rid)) { + // delete the mesh + DummyMesh *mesh = mesh_owner.getornull(p_rid); + mesh_owner.free(p_rid); + memdelete(mesh); + } return true; } diff --git a/editor/doc_data.h b/editor/doc_data.h index 06d0889af6..8c93bfa597 100644 --- a/editor/doc_data.h +++ b/editor/doc_data.h @@ -42,6 +42,9 @@ public: String type; String enumeration; String default_value; + bool operator<(const ArgumentDoc &p_arg) const { + return name < p_arg.name; + } }; struct MethodDoc { @@ -51,8 +54,8 @@ public: String qualifiers; String description; Vector<ArgumentDoc> arguments; - bool operator<(const MethodDoc &p_md) const { - return name < p_md.name; + bool operator<(const MethodDoc &p_method) const { + return name < p_method.name; } }; @@ -61,6 +64,9 @@ public: String value; String enumeration; String description; + bool operator<(const ConstantDoc &p_const) const { + return name < p_const.name; + } }; struct PropertyDoc { @@ -70,13 +76,10 @@ public: String description; String setter, getter; String default_value; - bool overridden; + bool overridden = false; bool operator<(const PropertyDoc &p_prop) const { return name < p_prop.name; } - PropertyDoc() { - overridden = false; - } }; struct ClassDoc { @@ -91,6 +94,9 @@ public: Vector<ConstantDoc> constants; Vector<PropertyDoc> properties; Vector<PropertyDoc> theme_properties; + bool operator<(const ClassDoc &p_class) const { + return name < p_class.name; + } }; String version; diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index fbb5f91139..0e498f6895 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -3167,7 +3167,6 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { if (error_set) { return; } - p_block->has_return = cf_while->body->has_return; p_block->statements.push_back(cf_while); } break; case GDScriptTokenizer::TK_CF_FOR: { @@ -3308,7 +3307,6 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { if (error_set) { return; } - p_block->has_return = cf_for->body->has_return; p_block->statements.push_back(cf_for); } break; case GDScriptTokenizer::TK_CF_CONTINUE: { @@ -4123,6 +4121,14 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { sig.name = tokenizer->get_token_identifier(); sig.emissions = 0; sig.line = tokenizer->get_token_line(); + + for (int i = 0; i < current_class->_signals.size(); i++) { + if (current_class->_signals[i].name == sig.name) { + _set_error("The signal \"" + sig.name + "\" already exists in this class (at line: " + itos(current_class->_signals[i].line) + ")."); + return; + } + } + tokenizer->advance(); if (tokenizer->get_token() == GDScriptTokenizer::TK_PARENTHESIS_OPEN) { @@ -7948,6 +7954,47 @@ void GDScriptParser::_check_class_level_types(ClassNode *p_class) { } } + // Signals + DataType base = p_class->base_type; + + while (base.kind == DataType::CLASS) { + ClassNode *base_class = base.class_type; + for (int i = 0; i < p_class->_signals.size(); i++) { + for (int j = 0; j < base_class->_signals.size(); j++) { + if (p_class->_signals[i].name == base_class->_signals[j].name) { + _set_error("The signal \"" + p_class->_signals[i].name + "\" already exists in a parent class.", p_class->_signals[i].line); + return; + } + } + } + base = base_class->base_type; + } + + StringName native; + if (base.kind == DataType::GDSCRIPT || base.kind == DataType::SCRIPT) { + Ref<Script> scr = base.script_type; + if (scr.is_valid() && scr->is_valid()) { + native = scr->get_instance_base_type(); + for (int i = 0; i < p_class->_signals.size(); i++) { + if (scr->has_script_signal(p_class->_signals[i].name)) { + _set_error("The signal \"" + p_class->_signals[i].name + "\" already exists in a parent class.", p_class->_signals[i].line); + return; + } + } + } + } else if (base.kind == DataType::NATIVE) { + native = base.native_type; + } + + if (native != StringName()) { + for (int i = 0; i < p_class->_signals.size(); i++) { + if (ClassDB::has_signal(native, p_class->_signals[i].name)) { + _set_error("The signal \"" + p_class->_signals[i].name + "\" already exists in a parent class.", p_class->_signals[i].line); + return; + } + } + } + // Inner classes for (int i = 0; i < p_class->subclasses.size(); i++) { current_class = p_class->subclasses[i]; diff --git a/servers/display_server.cpp b/servers/display_server.cpp index bd9da6156f..cc818cbe04 100644 --- a/servers/display_server.cpp +++ b/servers/display_server.cpp @@ -213,7 +213,7 @@ bool DisplayServer::is_console_visible() const { return false; } -void DisplayServer::virtual_keyboard_show(const String &p_existing_text, const Rect2 &p_screen_rect, int p_max_legth, int p_cursor_start, int p_cursor_end) { +void DisplayServer::virtual_keyboard_show(const String &p_existing_text, const Rect2 &p_screen_rect, int p_max_length, int p_cursor_start, int p_cursor_end) { WARN_PRINT("Virtual keyboard not supported by this display server."); } @@ -439,7 +439,7 @@ void DisplayServer::_bind_methods() { ClassDB::bind_method(D_METHOD("console_set_visible", "console_visible"), &DisplayServer::console_set_visible); ClassDB::bind_method(D_METHOD("is_console_visible"), &DisplayServer::is_console_visible); - ClassDB::bind_method(D_METHOD("virtual_keyboard_show", "existing_text", "position", "max_length"), &DisplayServer::virtual_keyboard_show, DEFVAL(Rect2i()), DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("virtual_keyboard_show", "existing_text", "position", "max_length", "cursor_start", "cursor_end"), &DisplayServer::virtual_keyboard_show, DEFVAL(Rect2i()), DEFVAL(-1), DEFVAL(-1), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("virtual_keyboard_hide"), &DisplayServer::virtual_keyboard_hide); ClassDB::bind_method(D_METHOD("virtual_keyboard_get_height"), &DisplayServer::virtual_keyboard_get_height); diff --git a/servers/display_server.h b/servers/display_server.h index be1014736f..b25b1931c8 100644 --- a/servers/display_server.h +++ b/servers/display_server.h @@ -280,7 +280,7 @@ public: virtual void console_set_visible(bool p_enabled); virtual bool is_console_visible() const; - virtual void virtual_keyboard_show(const String &p_existing_text, const Rect2 &p_screen_rect = Rect2(), int p_max_legth = -1, int p_cursor_start = -1, int p_cursor_end = -1); + virtual void virtual_keyboard_show(const String &p_existing_text, const Rect2 &p_screen_rect = Rect2(), int p_max_length = -1, int p_cursor_start = -1, int p_cursor_end = -1); virtual void virtual_keyboard_hide(); // returns height of the currently shown virtual keyboard (0 if keyboard is hidden) |