diff options
250 files changed, 4494 insertions, 4623 deletions
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index 894cd1a53a..2a1fe20477 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -382,7 +382,7 @@ License: Expat Files: ./thirdparty/tinyexr/ Comment: TinyEXR -Copyright: 2014-2017, Syoyo Fujita +Copyright: 2014-2018, Syoyo Fujita 2002, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC License: BSD-3-clause @@ -22,23 +22,30 @@ generous deed immortalized in the next stable release of Godot Engine. ## Mini sponsors + Alan Beauchamp Andrew Dunai + Arda Erol Brandon Lamb Christian Uldall Pedersen Christoph Woinke - David Graham GameDev.net Hein-Pieter van Braam - iDev.Network Studios Jamal Alyafei + Javary Games + Jay Sistar + Justin Arnold + Kyle Szklenski Leona Eden Matthieu Huvé + Maxim Karsten Mike King Nathan Warden Neal Gompa (Conan Kudo) Patrick Aarstad + "Rainway " Ruslan Mustakov Slobodan Milnovic + StarFlare Software Stephan Lanfermann Stoney Meyerhoeffer thechris @@ -49,11 +56,14 @@ generous deed immortalized in the next stable release of Godot Engine. Asdf cheese65536 + David Gehrig K9Kraken Manuele Finocchiaro Nathanael Beisiegel Officine Pixel S.n.c. Retro Village + Valorware + Zashi Zaven Muradyan 13MHz @@ -61,18 +71,18 @@ generous deed immortalized in the next stable release of Godot Engine. Andreas Schüle Austen McRae Daniel Lynn - David Gehrig Florian Breisch Gary Oberbrunner Jay Horton Johannes Wuensch + Jon Woodward Joshua Lesperance + Justo Delgado Baudà Krzysztof Dluzniewski - Kyle Szklenski - Mohammad Taleb Moonwards + Mored1984 + paul gruenbacher Paul LaMotte - Ranoller Sergey Svenne Krap Xananax @@ -87,11 +97,11 @@ generous deed immortalized in the next stable release of Godot Engine. David Churchill Dean Harmon John - Justo Delgado Baudà + Krzysztof Jankowski KTL Laurence Bannister Markus Wiesner - paul gruenbacher + Nathan Lundquist Rami Robert Willes Robin Arys @@ -105,16 +115,21 @@ generous deed immortalized in the next stable release of Godot Engine. Alessandra Pereyra Alexey Dyadchenko Amanda Haldy + Benjamin W Flint Chau Siu Hung Chris Brown Chris Petrich + Christian Leth Jeppesen + Christopher Cody Parker + ComicSads D Deadly Lampshade E.G. Eric Eric Monson Ethan Bennis + Eugenio Hugo Salgüero Jáñez Fidget Sinner flesk G Barnes @@ -122,24 +137,23 @@ generous deed immortalized in the next stable release of Godot Engine. GGGames.org Giovanni Solimeno Guilherme Felipe de C. G. da Silva - Hasen Judy Heath Hayes Jeppe Zapp joe513 + Jose Malheiro Juraj Móza - Justin Arnold + Klavdij Voncina Leandro Voltolino Marius Kamm Marvin - Nahuel Sacchetti Nick Nikitin - Pablo Cholaky + oziatek Pete Goodwin + Ranoller ray-tracer Ruben Soares Luis Sofox Stoned Xander - Trent McPheron WytRabbit Zachariah Gibbons @@ -152,9 +166,8 @@ generous deed immortalized in the next stable release of Godot Engine. Alder Stefano Alessandro Senese Alexander Koppe - Anders Jensen-Urstad + Andreas Krampitz Anthony Bongiovanni - Arda Erol Arthur S. Muszynski Artur Barichello Aubrey Falconer @@ -163,9 +176,11 @@ generous deed immortalized in the next stable release of Godot Engine. Bastian Böhm Benedikt Ben Vercammen + Bernd Jänichen Blair Allen Brandon Bryan Stevenson + bugcaptor Carl Winder Carwyn Edwards Casey Foote @@ -176,42 +191,45 @@ generous deed immortalized in the next stable release of Godot Engine. Daniel Johnson Daniel Kaplan DanielMaximiano - David David Cravens David May - Disktra Dominik Wetzel Duy Kevin Nguyen Edward Herbert Elias Nykrem Eric Martini + Eric McCarthy Eric Williams - Eugenio Hugo Salgüero Jáñez Fabian Becker fengjiongmax + Florian Richer Foomf G3Dev sà rl George Lesica Gerrit Großkopf Gilberto K. Otubo + Grant Clarke Greg Olson Guldoman Heribert Hirth Hunter Jones ialex32x + Igor Buzatovic Jahn Johansen Jaime Ruiz-Borau Vizárraga Jako Danar Jeff Hungerford + Joan Fons Joel Fivat Johan Lindberg Jonas Rudlang Jonas Yamazaki + Jonathan G Jonathan Martin Jonathan Nieto + Jonathon Jon Bonazza Jon Sully - Jose Malheiro Josh 'Cheeseness' Bush Juanfran Juan Negrier @@ -220,16 +238,17 @@ generous deed immortalized in the next stable release of Godot Engine. Justin Luk KC Chan Kevin Boyer - Kevin Kamper Meejach Petersen - Klavdij Voncina - Krzysztof Jankowski - Krzysztof Sierszecki + Kevin van Rooijen + Klagsam KsyTek Games + Kuan Cheang + kycho Linus Lind Lundgren Loreshaper Games Luis Moraes Macil magodev + Major Haul Malcolm Martin Eigel Matt Welke @@ -251,10 +270,9 @@ generous deed immortalized in the next stable release of Godot Engine. Niclas Eriksen Nicolás Montaña Nicolas SAN AGUSTIN - Nik - Noi Sek Pan Ip Pascal Grüter + Pat LaBine Patrick Nafarrete Paul E Hansen Paul Gieske @@ -265,12 +283,17 @@ generous deed immortalized in the next stable release of Godot Engine. Pietro Vertechi Piotr Kaczmarski Prokhorenko Leonid + Psyagnostic + rayos Rémi Verschelde + Ricardo Alcantara Richman Stewart Roger Burgess Roger Smith Roman Tinkov Sasori Olkof + Sebastian Michailidis + Shane Spoor Sootstone Theo Cranmore Thibault Barbaroux @@ -279,15 +302,18 @@ generous deed immortalized in the next stable release of Godot Engine. Thomas Kurz tiansheng li Tim + Tim Drumheller Tom Larrow + Troy Austin Trym Nilsen - Tyggve Sollid + Tryggve Sollid Tyler Stafos UltyX Vaiktorg Victor Viktor Ferenczi waka nya + William Hogben Wout Standaert ## Bronze donors diff --git a/core/image.cpp b/core/image.cpp index 698a0b0b98..dca8aedb8f 100644 --- a/core/image.cpp +++ b/core/image.cpp @@ -1931,7 +1931,8 @@ void Image::blit_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Po if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) return; - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest, clipped_src_rect.size)); + Point2 src_underscan = Point2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); PoolVector<uint8_t>::Write wp = data.write(); uint8_t *dst_data_ptr = wp.ptr(); @@ -1985,7 +1986,8 @@ void Image::blit_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, co if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) return; - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest, clipped_src_rect.size)); + Point2 src_underscan = Point2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); PoolVector<uint8_t>::Write wp = data.write(); uint8_t *dst_data_ptr = wp.ptr(); @@ -2042,7 +2044,8 @@ void Image::blend_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const P if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) return; - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest, clipped_src_rect.size)); + Point2 src_underscan = Point2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); lock(); Ref<Image> img = p_src; @@ -2096,7 +2099,8 @@ void Image::blend_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, c if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) return; - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest, clipped_src_rect.size)); + Point2 src_underscan = Point2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); lock(); Ref<Image> img = p_src; diff --git a/core/message_queue.cpp b/core/message_queue.cpp index abfc73407a..2952593798 100644 --- a/core/message_queue.cpp +++ b/core/message_queue.cpp @@ -209,9 +209,9 @@ void MessageQueue::statistics() { } break; } + } else { //object was deleted print_line("Object was deleted while awaiting a callback"); - } else { null_count++; } diff --git a/core/os/dir_access.cpp b/core/os/dir_access.cpp index daa3eacd5f..ce70b859eb 100644 --- a/core/os/dir_access.cpp +++ b/core/os/dir_access.cpp @@ -431,8 +431,12 @@ Error DirAccess::copy_dir(String p_from, String p_to, int p_chmod_flags) { ERR_FAIL_COND_V(err, err); } + if (!p_to.ends_with("/")) { + p_to = p_to + "/"; + } + DirChanger dir_changer(this, p_from); - Error err = _copy_dir(target_da, p_to + "/", p_chmod_flags); + Error err = _copy_dir(target_da, p_to, p_chmod_flags); memdelete(target_da); return err; diff --git a/core/os/os.h b/core/os/os.h index 7786ffb26e..53a5ebde01 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -480,6 +480,7 @@ public: enum EngineContext { CONTEXT_EDITOR, CONTEXT_PROJECTMAN, + CONTEXT_ENGINE, }; virtual void set_context(int p_context); diff --git a/doc/classes/@GDScript.xml b/doc/classes/@GDScript.xml index 20ec9141c6..349daae6d9 100644 --- a/doc/classes/@GDScript.xml +++ b/doc/classes/@GDScript.xml @@ -751,6 +751,10 @@ <argument index="0" name="message" type="String"> </argument> <description> + Pushes an error message to Godot's built-in debugger and to the OS terminal. + [codeblock] + push_error("test error") # prints "test error" to debugger and terminal as error call + [/codeblock] </description> </method> <method name="push_warning"> @@ -759,6 +763,10 @@ <argument index="0" name="message" type="String"> </argument> <description> + Pushes a warning message to Godot's built-in debugger and to the OS terminal. + [codeblock] + push_warning("test warning") # prints "test warning" to debugger and terminal as warning call + [/codeblock] </description> </method> <method name="rad2deg"> diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml index 3b3638a4f3..499da4b8a3 100644 --- a/doc/classes/AnimationPlayer.xml +++ b/doc/classes/AnimationPlayer.xml @@ -110,6 +110,12 @@ Get the actual playing speed of current animation or 0 if not playing. This speed is the [code]playback_speed[/code] property multiplied by [code]custom_speed[/code] argument specified when calling the [code]play[/code] method. </description> </method> + <method name="get_queue"> + <return type="PoolStringArray"> + </return> + <description> + </description> + </method> <method name="has_animation" qualifiers="const"> <return type="bool"> </return> diff --git a/doc/classes/CPUParticles.xml b/doc/classes/CPUParticles.xml index c778cd56b3..2073ca0664 100644 --- a/doc/classes/CPUParticles.xml +++ b/doc/classes/CPUParticles.xml @@ -127,11 +127,11 @@ </member> <member name="randomness" type="float" setter="set_randomness_ratio" getter="get_randomness_ratio"> </member> - <member name="scale" type="float" setter="set_param" getter="get_param"> + <member name="scale_amount" type="float" setter="set_param" getter="get_param"> </member> - <member name="scale_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> + <member name="scale_amount_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> </member> - <member name="scale_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + <member name="scale_amount_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> </member> <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale"> </member> diff --git a/doc/classes/CPUParticles2D.xml b/doc/classes/CPUParticles2D.xml index bae725d47c..12a176589c 100644 --- a/doc/classes/CPUParticles2D.xml +++ b/doc/classes/CPUParticles2D.xml @@ -123,11 +123,11 @@ </member> <member name="randomness" type="float" setter="set_randomness_ratio" getter="get_randomness_ratio"> </member> - <member name="scale" type="float" setter="set_param" getter="get_param"> + <member name="scale_amount" type="float" setter="set_param" getter="get_param"> </member> - <member name="scale_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> + <member name="scale_amount_curve" type="Curve" setter="set_param_curve" getter="get_param_curve"> </member> - <member name="scale_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> + <member name="scale_amount_random" type="float" setter="set_param_randomness" getter="get_param_randomness"> </member> <member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale"> </member> diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml index 4bae656740..63f82fe2bd 100644 --- a/doc/classes/CanvasItem.xml +++ b/doc/classes/CanvasItem.xml @@ -135,7 +135,7 @@ <method name="draw_multimesh"> <return type="void"> </return> - <argument index="0" name="mesh" type="Mesh"> + <argument index="0" name="mesh" type="MultiMesh"> </argument> <argument index="1" name="texture" type="Texture"> </argument> diff --git a/doc/classes/ColorPicker.xml b/doc/classes/ColorPicker.xml index 554e6b5632..2659fd8a39 100644 --- a/doc/classes/ColorPicker.xml +++ b/doc/classes/ColorPicker.xml @@ -20,6 +20,22 @@ Adds the given color to a list of color presets. The presets are displayed in the color picker and the user will be able to select them. Note: the presets list is only for [i]this[/i] color picker. </description> </method> + <method name="erase_preset"> + <return type="void"> + </return> + <argument index="0" name="color" type="Color"> + </argument> + <description> + Remove the given color from the list of color presets of this color picker. + </description> + </method> + <method name="get_presets"> + <return type="PoolColorArray"> + </return> + <description> + Return the list of colors in the presets of the color picker. + </description> + </method> </methods> <members> <member name="color" type="Color" setter="set_pick_color" getter="get_pick_color"> @@ -44,6 +60,24 @@ </description> </signal> </signals> + <signals> + <signal name="preset_added"> + <argument index="0" name="color" type="Color"> + </argument> + <description> + Emitted when a preset is added. + </description> + </signal> + </signals> + <signals> + <signal name="preset_removed"> + <argument index="0" name="color" type="Color"> + </argument> + <description> + Emitted when a preset is removed. + </description> + </signal> + </signals> <constants> </constants> <theme_items> diff --git a/doc/classes/ConvexPolygonShape2D.xml b/doc/classes/ConvexPolygonShape2D.xml index 6b31149c2f..8210e7dc9c 100644 --- a/doc/classes/ConvexPolygonShape2D.xml +++ b/doc/classes/ConvexPolygonShape2D.xml @@ -18,7 +18,7 @@ <argument index="0" name="point_cloud" type="PoolVector2Array"> </argument> <description> - Currently, this method does nothing. + Based on the set of points provided, this creates and assigns the [member points] property using the convex hull algorithm. Removing all unneeded points. See [method Geometry.convex_hull_2d] for details. </description> </method> </methods> diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml index 949c93761e..80281a603a 100644 --- a/doc/classes/Environment.xml +++ b/doc/classes/Environment.xml @@ -159,6 +159,8 @@ <member name="glow_enabled" type="bool" setter="set_glow_enabled" getter="is_glow_enabled"> Enables glow rendering. </member> + <member name="glow_hdr_luminance_cap" type="float" setter="set_glow_hdr_luminance_cap" getter="get_glow_hdr_luminance_cap"> + </member> <member name="glow_hdr_scale" type="float" setter="set_glow_hdr_bleed_scale" getter="get_glow_hdr_bleed_scale"> Bleed scale of the HDR glow. </member> diff --git a/doc/classes/Generic6DOFJoint.xml b/doc/classes/Generic6DOFJoint.xml index e1046e282a..b6ac69e257 100644 --- a/doc/classes/Generic6DOFJoint.xml +++ b/doc/classes/Generic6DOFJoint.xml @@ -242,6 +242,8 @@ </member> <member name="linear_spring_z/stiffness" type="float" setter="set_param_z" getter="get_param_z"> </member> + <member name="precision" type="int" setter="set_precision" getter="get_precision"> + </member> </members> <constants> <constant name="PARAM_LINEAR_LOWER_LIMIT" value="0" enum="Param"> diff --git a/doc/classes/MenuButton.xml b/doc/classes/MenuButton.xml index c9a8d3ce7a..636edd504b 100644 --- a/doc/classes/MenuButton.xml +++ b/doc/classes/MenuButton.xml @@ -27,6 +27,11 @@ </description> </method> </methods> + <members> + <member name="switch_on_hover" type="bool" setter="set_switch_on_hover" getter="is_switch_on_hover"> + If [code]true[/code], when the cursor hovers above another MenuButton within the same parent which also has [code]switch_on_hover[/code] enabled, it will close the current MenuButton and open the other one. + </member> + </members> <signals> <signal name="about_to_show"> <description> diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml index a958c3fcfa..b2e3885ff2 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -467,7 +467,9 @@ <constant name="MENU_UNDO" value="5" enum="MenuItems"> Undoes the previous action. </constant> - <constant name="MENU_MAX" value="6" enum="MenuItems"> + <constant name="MENU_REDO" value="6" enum="MenuItems"> + </constant> + <constant name="MENU_MAX" value="7" enum="MenuItems"> </constant> </constants> <theme_items> diff --git a/doc/classes/Theme.xml b/doc/classes/Theme.xml index fe43b54d5e..8c6acd2c51 100644 --- a/doc/classes/Theme.xml +++ b/doc/classes/Theme.xml @@ -12,6 +12,12 @@ <demos> </demos> <methods> + <method name="clear"> + <return type="void"> + </return> + <description> + </description> + </method> <method name="clear_color"> <return type="void"> </return> diff --git a/doc/classes/VisualServer.xml b/doc/classes/VisualServer.xml index b24eeaa112..d2bc56001c 100644 --- a/doc/classes/VisualServer.xml +++ b/doc/classes/VisualServer.xml @@ -1161,7 +1161,9 @@ </argument> <argument index="8" name="hdr_bleed_scale" type="float"> </argument> - <argument index="9" name="bicubic_upscale" type="bool"> + <argument index="9" name="hdr_luminance_cap" type="float"> + </argument> + <argument index="10" name="bicubic_upscale" type="bool"> </argument> <description> </description> diff --git a/doc/tools/makerst.py b/doc/tools/makerst.py index 7b7cc52547..9e83dfb55e 100755 --- a/doc/tools/makerst.py +++ b/doc/tools/makerst.py @@ -280,7 +280,7 @@ def rstize_text(text, cclass): escape_post = True # Properly escape things like `[Node]s` - if escape_post and post_text and post_text[0].isalnum(): # not punctuation, escape + if escape_post and post_text and (post_text[0].isalnum() or post_text[0] == "("): # not punctuation, escape post_text = '\ ' + post_text next_brac_pos = post_text.find('[', 0) diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index a0a8e9459d..a7a51cb93d 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -768,6 +768,7 @@ void CodeTextEditor::update_editor_settings() { text_editor->set_indent_using_spaces(EditorSettings::get_singleton()->get("text_editor/indent/type")); text_editor->set_indent_size(EditorSettings::get_singleton()->get("text_editor/indent/size")); text_editor->set_auto_indent(EditorSettings::get_singleton()->get("text_editor/indent/auto_indent")); + text_editor->set_draw_indent_guides(EditorSettings::get_singleton()->get("text_editor/indent/draw_indent_guides")); text_editor->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/indent/draw_tabs")); text_editor->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_line_numbers")); text_editor->set_line_numbers_zero_padded(EditorSettings::get_singleton()->get("text_editor/line_numbers/line_numbers_zero_padded")); diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 926fa37040..9f1082ecc4 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -89,8 +89,9 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode) { _save_and_update_favorite_list(); // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has_setting("interface/dialogs/create_new_node_bounds")) { - popup(EditorSettings::get_singleton()->get("interface/dialogs/create_new_node_bounds")); + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "create_new_node", Rect2()); + if (saved_size != Rect2()) { + popup(saved_size); } else { Size2 popup_size = Size2(900, 700) * editor_get_scale(); @@ -415,7 +416,7 @@ void CreateDialog::_notification(int p_what) { } } break; case NOTIFICATION_POPUP_HIDE: { - EditorSettings::get_singleton()->set("interface/dialogs/create_new_node_bounds", get_rect()); + EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "create_new_node", get_rect()); } break; } } diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index 99b6955160..aa9125915c 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -495,11 +495,19 @@ void DependencyRemoveDialog::ok_pressed() { Resource *res = ResourceCache::get(files_to_delete[i]); res->set_path(""); } + + // If the file we are deleting is the main scene, clear its definition. + if (files_to_delete[i] == ProjectSettings::get_singleton()->get("application/run/main_scene")) { + ProjectSettings::get_singleton()->set("application/run/main_scene", ""); + } + String path = OS::get_singleton()->get_resource_dir() + files_to_delete[i].replace_first("res://", "/"); print_verbose("Moving to trash: " + path); Error err = OS::get_singleton()->move_to_trash(path); if (err != OK) { EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + files_to_delete[i] + "\n"); + } else { + emit_signal("file_removed", files_to_delete[i]); } } @@ -515,6 +523,8 @@ void DependencyRemoveDialog::ok_pressed() { Error err = OS::get_singleton()->move_to_trash(path); if (err != OK) { EditorNode::get_singleton()->add_io_error(TTR("Cannot remove:") + "\n" + dirs_to_delete[i] + "\n"); + } else { + emit_signal("folder_removed", dirs_to_delete[i]); } } @@ -540,6 +550,11 @@ void DependencyRemoveDialog::ok_pressed() { } } +void DependencyRemoveDialog::_bind_methods() { + ADD_SIGNAL(MethodInfo("file_removed", PropertyInfo(Variant::STRING, "file"))); + ADD_SIGNAL(MethodInfo("folder_removed", PropertyInfo(Variant::STRING, "folder"))); +} + DependencyRemoveDialog::DependencyRemoveDialog() { VBoxContainer *vb = memnew(VBoxContainer); diff --git a/editor/dependency_editor.h b/editor/dependency_editor.h index e46df4c837..5f1074764b 100644 --- a/editor/dependency_editor.h +++ b/editor/dependency_editor.h @@ -126,6 +126,8 @@ class DependencyRemoveDialog : public ConfirmationDialog { void ok_pressed(); + static void _bind_methods(); + public: void show(const Vector<String> &p_folders, const Vector<String> &p_files); DependencyRemoveDialog(); diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index 209a006a06..9df0f30ca4 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -546,6 +546,13 @@ void EditorExportPlugin::_export_begin_script(const PoolVector<String> &p_featur } } +void EditorExportPlugin::_export_end_script() { + + if (get_script_instance()) { + get_script_instance()->call("_export_end"); + } +} + void EditorExportPlugin::_export_file(const String &p_path, const String &p_type, const Set<String> &p_features) { } @@ -587,6 +594,20 @@ EditorExportPlatform::FeatureContainers EditorExportPlatform::get_feature_contai result.features.insert(E->get()); result.features_pv.push_back(E->get()); } + + if (p_preset->get_custom_features() != String()) { + + Vector<String> tmp_custom_list = p_preset->get_custom_features().split(","); + + for (int i = 0; i < tmp_custom_list.size(); i++) { + String f = tmp_custom_list[i].strip_edges(); + if (f != String()) { + result.features.insert(f); + result.features_pv.push_back(f); + } + } + } + return result; } @@ -606,6 +627,9 @@ EditorExportPlatform::ExportNotifier::ExportNotifier(EditorExportPlatform &p_pla EditorExportPlatform::ExportNotifier::~ExportNotifier() { Vector<Ref<EditorExportPlugin> > export_plugins = EditorExport::get_singleton()->get_export_plugins(); for (int i = 0; i < export_plugins.size(); i++) { + if (export_plugins[i]->get_script_instance()) { + export_plugins.write[i]->_export_end_script(); + } export_plugins.write[i]->_export_end(); } } diff --git a/editor/editor_export.h b/editor/editor_export.h index 380b33cd17..483af489a3 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -291,6 +291,7 @@ class EditorExportPlugin : public Reference { void _export_file_script(const String &p_path, const String &p_type, const PoolVector<String> &p_features); void _export_begin_script(const PoolVector<String> &p_features, bool p_debug, const String &p_path, int p_flags); + void _export_end_script(); protected: void add_file(const String &p_path, const Vector<uint8_t> &p_file, bool p_remap); diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index b39f910182..81d9442656 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -830,11 +830,12 @@ void EditorFileDialog::update_file_list() { d["name"] = files.front()->get(); d["dir"] = false; String fullpath = cdir.plus_file(files.front()->get()); + d["path"] = fullpath; + item_list->set_item_metadata(item_list->get_item_count() - 1, d); + if (display_mode == DISPLAY_THUMBNAILS) { EditorResourcePreview::get_singleton()->queue_resource_preview(fullpath, this, "_thumbnail_result", fullpath); } - d["path"] = fullpath; - item_list->set_item_metadata(item_list->get_item_count() - 1, d); if (file->get_text() == files.front()->get()) item_list->set_current(item_list->get_item_count() - 1); diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp index 8676dac921..d6dc812d38 100644 --- a/editor/editor_help_search.cpp +++ b/editor/editor_help_search.cpp @@ -130,9 +130,9 @@ void EditorHelpSearch::_notification(int p_what) { } break; case NOTIFICATION_POPUP_HIDE: { - results_tree->clear(); + results_tree->call_deferred("clear"); // Wait for the Tree's mouse event propagation. get_ok()->set_disabled(true); - EditorSettings::get_singleton()->set("interface/dialogs/search_help_bounds", get_rect()); + EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "search_help", get_rect()); } break; case NOTIFICATION_PROCESS: { @@ -177,8 +177,9 @@ void EditorHelpSearch::popup_dialog() { void EditorHelpSearch::popup_dialog(const String &p_term) { // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has_setting("interface/dialogs/search_help_bounds")) - popup(EditorSettings::get_singleton()->get("interface/dialogs/search_help_bounds")); + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "search_help", Rect2()); + if (saved_size != Rect2()) + popup(saved_size); else popup_centered_ratio(0.5F); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index d009ed61b5..d100d7f618 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -3645,6 +3645,7 @@ void EditorNode::_load_docks() { _load_docks_from_config(config, "docks"); _load_open_scenes_from_config(config, "EditorNode"); + editor_data.set_plugin_window_layout(config); } @@ -3839,6 +3840,23 @@ void EditorNode::_load_open_scenes_from_config(Ref<ConfigFile> p_layout, const S restoring_scenes = false; } +bool EditorNode::has_scenes_in_session() { + if (!bool(EDITOR_GET("interface/scene_tabs/restore_scenes_on_load"))) { + return false; + } + Ref<ConfigFile> config; + config.instance(); + Error err = config->load(EditorSettings::get_singleton()->get_project_settings_dir().plus_file("editor_layout.cfg")); + if (err != OK) { + return false; + } + if (!config->has_section("EditorNode") || !config->has_section_key("EditorNode", "open_scenes")) { + return false; + } + Array scenes = config->get_value("EditorNode", "open_scenes"); + return !scenes.empty(); +} + void EditorNode::_update_layouts_menu() { editor_layouts->clear(); @@ -5169,14 +5187,9 @@ EditorNode::EditorNode() { top_region->add_child(left_menu_hb); menu_hb->add_child(top_region); - { - Control *sp = memnew(Control); - sp->set_custom_minimum_size(Size2(30, 0) * EDSCALE); - menu_hb->add_child(sp); - } - file_menu = memnew(MenuButton); file_menu->set_flat(false); + file_menu->set_switch_on_hover(true); file_menu->set_text(TTR("Scene")); file_menu->add_style_override("hover", gui_base->get_stylebox("MenuHover", "EditorStyles")); left_menu_hb->add_child(file_menu); @@ -5268,6 +5281,7 @@ EditorNode::EditorNode() { project_menu = memnew(MenuButton); project_menu->set_flat(false); + project_menu->set_switch_on_hover(true); project_menu->set_tooltip(TTR("Miscellaneous project or scene-wide tools.")); project_menu->set_text(TTR("Project")); project_menu->add_style_override("hover", gui_base->get_stylebox("MenuHover", "EditorStyles")); @@ -5309,6 +5323,7 @@ EditorNode::EditorNode() { debug_menu = memnew(MenuButton); debug_menu->set_flat(false); + debug_menu->set_switch_on_hover(true); debug_menu->set_text(TTR("Debug")); debug_menu->add_style_override("hover", gui_base->get_stylebox("MenuHover", "EditorStyles")); left_menu_hb->add_child(debug_menu); @@ -5339,6 +5354,7 @@ EditorNode::EditorNode() { settings_menu = memnew(MenuButton); settings_menu->set_flat(false); + settings_menu->set_switch_on_hover(true); settings_menu->set_text(TTR("Editor")); settings_menu->add_style_override("hover", gui_base->get_stylebox("MenuHover", "EditorStyles")); left_menu_hb->add_child(settings_menu); @@ -5375,6 +5391,7 @@ EditorNode::EditorNode() { // Help Menu help_menu = memnew(MenuButton); help_menu->set_flat(false); + help_menu->set_switch_on_hover(true); help_menu->set_text(TTR("Help")); help_menu->add_style_override("hover", gui_base->get_stylebox("MenuHover", "EditorStyles")); left_menu_hb->add_child(help_menu); @@ -5391,12 +5408,8 @@ EditorNode::EditorNode() { p->add_separator(); p->add_icon_item(gui_base->get_icon("Godot", "EditorIcons"), TTR("About"), HELP_ABOUT); - play_cc = memnew(CenterContainer); - play_cc->set_mouse_filter(Control::MOUSE_FILTER_IGNORE); - menu_hb->add_child(play_cc); - play_button_panel = memnew(PanelContainer); - play_cc->add_child(play_button_panel); + menu_hb->add_child(play_button_panel); HBoxContainer *play_hb = memnew(HBoxContainer); play_button_panel->add_child(play_hb); @@ -5442,11 +5455,6 @@ EditorNode::EditorNode() { run_native = memnew(EditorRunNative); play_hb->add_child(run_native); - native_play_button = memnew(MenuButton); - native_play_button->set_text("NTV"); - menu_hb->add_child(native_play_button); - native_play_button->hide(); - native_play_button->get_popup()->connect("id_pressed", this, "_run_in_device"); run_native->connect("native_run", this, "_menu_option", varray(RUN_PLAY_NATIVE)); play_scene_button = memnew(ToolButton); @@ -5475,6 +5483,9 @@ EditorNode::EditorNode() { play_custom_scene_button->set_shortcut(ED_SHORTCUT("editor/play_custom_scene", TTR("Play Custom Scene"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F5)); #endif + HBoxContainer *right_menu_hb = memnew(HBoxContainer); + menu_hb->add_child(right_menu_hb); + // Toggle for video driver video_driver = memnew(OptionButton); video_driver->set_flat(true); @@ -5482,7 +5493,7 @@ EditorNode::EditorNode() { video_driver->set_v_size_flags(Control::SIZE_SHRINK_CENTER); video_driver->connect("item_selected", this, "_video_driver_selected"); video_driver->add_font_override("font", gui_base->get_font("bold", "EditorFonts")); - menu_hb->add_child(video_driver); + right_menu_hb->add_child(video_driver); String video_drivers = ProjectSettings::get_singleton()->get_custom_property_info()["rendering/quality/driver/driver_name"].hint_string; String current_video_driver = OS::get_singleton()->get_video_driver_name(OS::get_singleton()->get_current_video_driver()); @@ -5508,9 +5519,6 @@ EditorNode::EditorNode() { progress_hb = memnew(BackgroundProgress); - HBoxContainer *right_menu_hb = memnew(HBoxContainer); - menu_hb->add_child(right_menu_hb); - layout_dialog = memnew(EditorNameDialog); gui_base->add_child(layout_dialog); layout_dialog->set_hide_on_ok(false); diff --git a/editor/editor_node.h b/editor/editor_node.h index 4d89d1f956..e5670e5e7c 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -243,7 +243,6 @@ private: Control *vp_base; PaneDrag *pd; - CenterContainer *play_cc; HBoxContainer *menu_hb; Control *viewport; MenuButton *file_menu; @@ -255,7 +254,6 @@ private: ToolButton *export_button; ToolButton *prev_scene; ToolButton *play_button; - MenuButton *native_play_button; ToolButton *pause_button; ToolButton *stop_button; ToolButton *run_settings_button; @@ -789,6 +787,7 @@ public: void edit_current() { _edit_current(); }; void update_keying() const { inspector_dock->update_keying(); }; + bool has_scenes_in_session(); EditorNode(); ~EditorNode(); diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 9c9302e7cd..ff7ab051b5 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -233,7 +233,7 @@ void EditorPropertyPath::_path_pressed() { dialog->set_mode(EditorFileDialog::MODE_OPEN_DIR); dialog->set_current_dir(full_path); } else { - dialog->set_mode(EditorFileDialog::MODE_OPEN_FILE); + dialog->set_mode(save_mode ? EditorFileDialog::MODE_SAVE_FILE : EditorFileDialog::MODE_OPEN_FILE); for (int i = 0; i < extensions.size(); i++) { String e = extensions[i].strip_edges(); if (e != String()) { @@ -260,6 +260,11 @@ void EditorPropertyPath::setup(const Vector<String> &p_extensions, bool p_folder global = p_global; } +void EditorPropertyPath::set_save_mode() { + + save_mode = true; +} + void EditorPropertyPath::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { @@ -296,6 +301,7 @@ EditorPropertyPath::EditorPropertyPath() { path_edit->connect("pressed", this, "_path_pressed"); folder = false; global = false; + save_mode = false; } ///////////////////// CLASS NAME ///////////////////////// @@ -1090,6 +1096,8 @@ void EditorPropertyVector2::setup(double p_min, double p_max, double p_step, boo spin[i]->set_max(p_max); spin[i]->set_step(p_step); spin[i]->set_hide_slider(p_no_slider); + spin[i]->set_allow_greater(true); + spin[i]->set_allow_lesser(true); } } @@ -1171,6 +1179,8 @@ void EditorPropertyRect2::setup(double p_min, double p_max, double p_step, bool spin[i]->set_max(p_max); spin[i]->set_step(p_step); spin[i]->set_hide_slider(p_no_slider); + spin[i]->set_allow_greater(true); + spin[i]->set_allow_lesser(true); } } @@ -1251,6 +1261,8 @@ void EditorPropertyVector3::setup(double p_min, double p_max, double p_step, boo spin[i]->set_max(p_max); spin[i]->set_step(p_step); spin[i]->set_hide_slider(p_no_slider); + spin[i]->set_allow_greater(true); + spin[i]->set_allow_lesser(true); } } @@ -1331,6 +1343,8 @@ void EditorPropertyPlane::setup(double p_min, double p_max, double p_step, bool spin[i]->set_max(p_max); spin[i]->set_step(p_step); spin[i]->set_hide_slider(p_no_slider); + spin[i]->set_allow_greater(true); + spin[i]->set_allow_lesser(true); } } @@ -1413,6 +1427,8 @@ void EditorPropertyQuat::setup(double p_min, double p_max, double p_step, bool p spin[i]->set_max(p_max); spin[i]->set_step(p_step); spin[i]->set_hide_slider(p_no_slider); + spin[i]->set_allow_greater(true); + spin[i]->set_allow_lesser(true); } } @@ -1500,6 +1516,8 @@ void EditorPropertyAABB::setup(double p_min, double p_max, double p_step, bool p spin[i]->set_max(p_max); spin[i]->set_step(p_step); spin[i]->set_hide_slider(p_no_slider); + spin[i]->set_allow_greater(true); + spin[i]->set_allow_lesser(true); } } @@ -1574,6 +1592,8 @@ void EditorPropertyTransform2D::setup(double p_min, double p_max, double p_step, spin[i]->set_max(p_max); spin[i]->set_step(p_step); spin[i]->set_hide_slider(p_no_slider); + spin[i]->set_allow_greater(true); + spin[i]->set_allow_lesser(true); } } @@ -1653,6 +1673,8 @@ void EditorPropertyBasis::setup(double p_min, double p_max, double p_step, bool spin[i]->set_max(p_max); spin[i]->set_step(p_step); spin[i]->set_hide_slider(p_no_slider); + spin[i]->set_allow_greater(true); + spin[i]->set_allow_lesser(true); } } @@ -1738,6 +1760,8 @@ void EditorPropertyTransform::setup(double p_min, double p_max, double p_step, b spin[i]->set_max(p_max); spin[i]->set_step(p_step); spin[i]->set_hide_slider(p_no_slider); + spin[i]->set_allow_greater(true); + spin[i]->set_allow_lesser(true); } } @@ -1932,6 +1956,20 @@ EditorPropertyNodePath::EditorPropertyNodePath() { void EditorPropertyResource::_file_selected(const String &p_path) { RES res = ResourceLoader::load(p_path); + + List<PropertyInfo> prop_list; + get_edited_object()->get_property_list(&prop_list); + String type; + + for (List<PropertyInfo>::Element *E = prop_list.front(); E; E = E->next()) { + if (E->get().name == get_edited_property() && (E->get().hint & PROPERTY_HINT_RESOURCE_TYPE)) { + type = E->get().hint_string; + } + } + + if (!type.empty() && !res->is_class(type)) + EditorNode::get_singleton()->show_warning(vformat(TTR("The selected resource (%s) does not match the type expected for this property (%s)."), res->get_class(), type)); + emit_signal("property_changed", get_edited_property(), res); update_property(); } diff --git a/editor/editor_properties.h b/editor/editor_properties.h index b82ef977ef..05716408f3 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -106,6 +106,7 @@ class EditorPropertyPath : public EditorProperty { Vector<String> extensions; bool folder; bool global; + bool save_mode; EditorFileDialog *dialog; LineEdit *path; Button *path_edit; @@ -120,6 +121,7 @@ protected: public: void setup(const Vector<String> &p_extensions, bool p_folder, bool p_global); + void set_save_mode(); virtual void update_property(); EditorPropertyPath(); }; diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index 310c3b3a52..71e9aced7e 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -326,7 +326,7 @@ void EditorResourcePreview::queue_edited_resource_preview(const Ref<Resource> &p if (cache.has(path_id) && cache[path_id].last_hash == p_res->hash_edited_version()) { cache[path_id].order = order++; - p_receiver->call_deferred(p_receiver_func, path_id, cache[path_id].preview, cache[path_id].small_preview, p_userdata); + p_receiver->call(p_receiver_func, path_id, cache[path_id].preview, cache[path_id].small_preview, p_userdata); preview_mutex->unlock(); return; } @@ -351,7 +351,7 @@ void EditorResourcePreview::queue_resource_preview(const String &p_path, Object preview_mutex->lock(); if (cache.has(p_path)) { cache[p_path].order = order++; - p_receiver->call_deferred(p_receiver_func, p_path, cache[p_path].preview, cache[p_path].small_preview, p_userdata); + p_receiver->call(p_receiver_func, p_path, cache[p_path].preview, cache[p_path].small_preview, p_userdata); preview_mutex->unlock(); return; } diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index fdfa094ba2..4a373aafd9 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -377,6 +377,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { hints["text_editor/indent/size"] = PropertyInfo(Variant::INT, "text_editor/indent/size", PROPERTY_HINT_RANGE, "1, 64, 1"); // size of 0 crashes. _initial_set("text_editor/indent/auto_indent", true); _initial_set("text_editor/indent/convert_indent_on_save", false); + _initial_set("text_editor/indent/draw_indent_guides", true); _initial_set("text_editor/indent/draw_tabs", true); _initial_set("text_editor/line_numbers/show_line_numbers", true); @@ -592,8 +593,8 @@ void EditorSettings::_load_default_text_editor_theme() { _initial_set("text_editor/highlighting/engine_type_color", Color::html("83d3ff")); _initial_set("text_editor/highlighting/comment_color", Color::html("676767")); _initial_set("text_editor/highlighting/string_color", Color::html("ef6ebe")); - _initial_set("text_editor/highlighting/background_color", dark_theme ? Color::html("3b000000") : Color::html("#323b4f")); - _initial_set("text_editor/highlighting/completion_background_color", Color::html("2C2A32")); + _initial_set("text_editor/highlighting/background_color", dark_theme ? Color::html("3b000000") : Color::html("323b4f")); + _initial_set("text_editor/highlighting/completion_background_color", Color::html("2c2a32")); _initial_set("text_editor/highlighting/completion_selected_color", Color::html("434244")); _initial_set("text_editor/highlighting/completion_existing_color", Color::html("21dfdfdf")); _initial_set("text_editor/highlighting/completion_scroll_color", Color::html("ffffff")); @@ -603,13 +604,14 @@ void EditorSettings::_load_default_text_editor_theme() { _initial_set("text_editor/highlighting/safe_line_number_color", Color::html("99aac8aa")); _initial_set("text_editor/highlighting/caret_color", Color::html("aaaaaa")); _initial_set("text_editor/highlighting/caret_background_color", Color::html("000000")); + _initial_set("text_editor/highlighting/indent_guide_color", Color::html("50808080")); _initial_set("text_editor/highlighting/text_selected_color", Color::html("000000")); _initial_set("text_editor/highlighting/selection_color", Color::html("6ca9c2")); _initial_set("text_editor/highlighting/brace_mismatch_color", Color(1, 0.2, 0.2)); _initial_set("text_editor/highlighting/current_line_color", Color(0.3, 0.5, 0.8, 0.15)); _initial_set("text_editor/highlighting/line_length_guideline_color", Color(0.3, 0.5, 0.8, 0.1)); _initial_set("text_editor/highlighting/word_highlighted_color", Color(0.8, 0.9, 0.9, 0.15)); - _initial_set("text_editor/highlighting/number_color", Color::html("EB9532")); + _initial_set("text_editor/highlighting/number_color", Color::html("eb9532")); _initial_set("text_editor/highlighting/function_color", Color::html("66a2ce")); _initial_set("text_editor/highlighting/member_variable_color", Color::html("e64e59")); _initial_set("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4)); diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index 8ea56b8578..1b7322fd13 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -63,6 +63,7 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { grabbing_spinner_attempt = true; grabbing_spinner_dist_cache = 0; + pre_grab_value = get_value(); grabbing_spinner = false; grabbing_spinner_mouse_pos = Input::get_singleton()->get_mouse_position(); } @@ -107,10 +108,10 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { if (ABS(grabbing_spinner_dist_cache) > 6) { set_value(get_value() + SGN(grabbing_spinner_dist_cache)); grabbing_spinner_dist_cache = 0; + pre_grab_value = get_value(); } } else { - set_value(get_value() + get_step() * grabbing_spinner_dist_cache * 10); - grabbing_spinner_dist_cache = 0; + set_value(pre_grab_value + get_step() * grabbing_spinner_dist_cache * 10); } } } else if (updown_offset != -1) { @@ -434,6 +435,7 @@ EditorSpinSlider::EditorSpinSlider() { grabbing_spinner_attempt = false; grabbing_spinner = false; grabbing_spinner_dist_cache = 0; + pre_grab_value = 0; set_focus_mode(FOCUS_ALL); updown_offset = -1; hover_updown = false; diff --git a/editor/editor_spin_slider.h b/editor/editor_spin_slider.h index e48eb171b8..9d43bd2884 100644 --- a/editor/editor_spin_slider.h +++ b/editor/editor_spin_slider.h @@ -59,6 +59,7 @@ class EditorSpinSlider : public Range { bool read_only; float grabbing_spinner_dist_cache; Vector2 grabbing_spinner_mouse_pos; + double pre_grab_value; LineEdit *value_input; bool value_input_just_closed; diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 36053d7534..3dfc49583c 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -1080,6 +1080,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { const Color safe_line_number_color = dim_color * Color(1, 1.2, 1, 1.5); const Color caret_color = mono_color; const Color caret_background_color = mono_color.inverted(); + const Color indent_guide_color = alpha2; const Color text_selected_color = dark_color_3; const Color selection_color = alpha2; const Color brace_mismatch_color = error_color; @@ -1115,6 +1116,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { setting->set_initial_value("text_editor/highlighting/safe_line_number_color", safe_line_number_color, true); setting->set_initial_value("text_editor/highlighting/caret_color", caret_color, true); setting->set_initial_value("text_editor/highlighting/caret_background_color", caret_background_color, true); + setting->set_initial_value("text_editor/highlighting/indent_guide_color", indent_guide_color, true); setting->set_initial_value("text_editor/highlighting/text_selected_color", text_selected_color, true); setting->set_initial_value("text_editor/highlighting/selection_color", selection_color, true); setting->set_initial_value("text_editor/highlighting/brace_mismatch_color", brace_mismatch_color, true); diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 828e608fa4..b2368fff6b 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -951,7 +951,7 @@ void FileSystemDock::_find_remaps(EditorFileSystemDirectory *efsd, const Map<Str } void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_new_path, - Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames) const { + Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames) { //Ensure folder paths end with "/" String old_path = (p_item.is_file || p_item.path.ends_with("/")) ? p_item.path : (p_item.path + "/"); String new_path = (p_item.is_file || p_new_path.ends_with("/")) ? p_new_path : (p_new_path + "/"); @@ -981,6 +981,7 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_ print_verbose("Moving " + old_path + " -> " + new_path); Error err = da->rename(old_path, new_path); if (err == OK) { + //Move/Rename any corresponding import settings too if (p_item.is_file && FileAccess::exists(old_path + ".import")) { err = da->rename(old_path + ".import", new_path + ".import"); @@ -1007,9 +1008,11 @@ void FileSystemDock::_try_move_item(const FileOrFolder &p_item, const String &p_ for (int i = 0; i < file_changed_paths.size(); ++i) { p_file_renames[file_changed_paths[i]] = file_changed_paths[i].replace_first(old_path, new_path); print_verbose(" Remap: " + file_changed_paths[i] + " -> " + p_file_renames[file_changed_paths[i]]); + emit_signal("files_moved", file_changed_paths[i], p_file_renames[file_changed_paths[i]]); } for (int i = 0; i < folder_changed_paths.size(); ++i) { p_folder_renames[folder_changed_paths[i]] = folder_changed_paths[i].replace_first(old_path, new_path); + emit_signal("folder_moved", folder_changed_paths[i], p_folder_renames[folder_changed_paths[i]].substr(0, p_folder_renames[folder_changed_paths[i]].length() - 1)); } } else { EditorNode::get_singleton()->add_io_error(TTR("Error moving:") + "\n" + old_path + "\n"); @@ -1205,6 +1208,14 @@ void FileSystemDock::_make_dir_confirm() { } } +void FileSystemDock::_file_deleted(String p_file) { + emit_signal("file_deleted", p_file); +} + +void FileSystemDock::_folder_deleted(String p_folder) { + emit_signal("folder_deleted", p_folder); +} + void FileSystemDock::_rename_operation_confirm() { String new_name = rename_dialog_text->get_text().strip_edges(); @@ -2273,6 +2284,9 @@ void FileSystemDock::_bind_methods() { ClassDB::bind_method(D_METHOD("_file_list_rmb_select"), &FileSystemDock::_file_list_rmb_select); ClassDB::bind_method(D_METHOD("_file_list_rmb_pressed"), &FileSystemDock::_file_list_rmb_pressed); + ClassDB::bind_method(D_METHOD("_file_deleted"), &FileSystemDock::_file_deleted); + ClassDB::bind_method(D_METHOD("_folder_deleted"), &FileSystemDock::_folder_deleted); + ClassDB::bind_method(D_METHOD("_file_list_thumbnail_done"), &FileSystemDock::_file_list_thumbnail_done); ClassDB::bind_method(D_METHOD("_tree_thumbnail_done"), &FileSystemDock::_tree_thumbnail_done); ClassDB::bind_method(D_METHOD("_file_list_activate_file"), &FileSystemDock::_file_list_activate_file); @@ -2303,6 +2317,11 @@ void FileSystemDock::_bind_methods() { ADD_SIGNAL(MethodInfo("instance", PropertyInfo(Variant::POOL_STRING_ARRAY, "files"))); ADD_SIGNAL(MethodInfo("open")); + + ADD_SIGNAL(MethodInfo("file_removed", PropertyInfo(Variant::STRING, "file"))); + ADD_SIGNAL(MethodInfo("folder_removed", PropertyInfo(Variant::STRING, "folder"))); + ADD_SIGNAL(MethodInfo("files_moved", PropertyInfo(Variant::STRING, "old_file"), PropertyInfo(Variant::STRING, "new_file"))); + ADD_SIGNAL(MethodInfo("folder_moved", PropertyInfo(Variant::STRING, "old_folder"), PropertyInfo(Variant::STRING, "new_file"))); } FileSystemDock::FileSystemDock(EditorNode *p_editor) { @@ -2464,6 +2483,8 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { add_child(owners_editor); remove_dialog = memnew(DependencyRemoveDialog); + remove_dialog->connect("file_removed", this, "_file_deleted"); + remove_dialog->connect("folder_removed", this, "_folder_deleted"); add_child(remove_dialog); move_dialog = memnew(EditorDirDialog); diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index df6fa5f9d2..7692566c0b 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -202,13 +202,18 @@ private: void _get_all_items_in_dir(EditorFileSystemDirectory *efsd, Vector<String> &files, Vector<String> &folders) const; void _find_remaps(EditorFileSystemDirectory *efsd, const Map<String, String> &renames, Vector<String> &to_remaps) const; - void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames) const; + void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_file_renames, Map<String, String> &p_folder_renames); void _try_duplicate_item(const FileOrFolder &p_item, const String &p_new_path) const; void _update_dependencies_after_move(const Map<String, String> &p_renames) const; void _update_resource_paths_after_move(const Map<String, String> &p_renames) const; void _update_favorites_list_after_move(const Map<String, String> &p_files_renames, const Map<String, String> &p_folders_renames) const; void _update_project_settings_after_move(const Map<String, String> &p_folders_renames) const; + void _file_deleted(String p_file); + void _folder_deleted(String p_folder); + void _files_moved(String p_old_file, String p_new_file); + void _folder_moved(String p_old_folder, String p_new_folder); + void _resource_created() const; void _make_dir_confirm(); void _rename_operation_confirm(); diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index 705bb1d9c5..6ebe8cfe2c 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -44,8 +44,6 @@ #include "scene/gui/progress_bar.h" #include "scene/gui/tree.h" -#define ROOT_PREFIX "res://" - const char *FindInFiles::SIGNAL_RESULT_FOUND = "result_found"; const char *FindInFiles::SIGNAL_FINISHED = "finished"; @@ -89,7 +87,6 @@ static bool find_next(const String &line, String pattern, int from, bool match_c //-------------------------------------------------------------------------------- FindInFiles::FindInFiles() { - _root_prefix = ROOT_PREFIX; _searching = false; _whole_words = true; _match_case = true; @@ -182,7 +179,7 @@ void FindInFiles::_iterate() { _current_dir = _current_dir.plus_file(folder_name); PoolStringArray sub_dirs; - _scan_dir(_root_prefix + _current_dir, sub_dirs); + _scan_dir("res://" + _current_dir, sub_dirs); _folders_stack.push_back(sub_dirs); @@ -348,7 +345,7 @@ FindInFilesDialog::FindInFilesDialog() { HBoxContainer *hbc = memnew(HBoxContainer); Label *prefix_label = memnew(Label); - prefix_label->set_text(ROOT_PREFIX); + prefix_label->set_text("res://"); hbc->add_child(prefix_label); _folder_line_edit = memnew(LineEdit); @@ -375,10 +372,12 @@ FindInFilesDialog::FindInFilesDialog() { { HBoxContainer *hbc = memnew(HBoxContainer); + // TODO: Unhardcode this. Vector<String> exts; exts.push_back("gd"); if (Engine::get_singleton()->has_singleton("GodotSharp")) exts.push_back("cs"); + exts.push_back("shader"); for (int i = 0; i < exts.size(); ++i) { CheckBox *cb = memnew(CheckBox); diff --git a/editor/find_in_files.h b/editor/find_in_files.h index 7f37123430..9705c4796c 100644 --- a/editor/find_in_files.h +++ b/editor/find_in_files.h @@ -73,7 +73,6 @@ private: // Config String _pattern; Set<String> _extension_filter; - String _root_prefix; String _root_dir; bool _whole_words; bool _match_case; diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index 8e69090da3..93c462f747 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -771,7 +771,7 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_me int binormal_pos = (binormal_src->stride ? binormal_src->stride : 3) * p.indices[src + binormal_ofs]; ERR_FAIL_INDEX_V(binormal_pos, binormal_src->array.size(), ERR_INVALID_DATA); - Vector3 binormal = Vector3(-binormal_src->array[binormal_pos + 0], -binormal_src->array[binormal_pos + 1], -binormal_src->array[binormal_pos + 2]); // Due to Godots face order it seems we need to flip our binormal! + Vector3 binormal = Vector3(binormal_src->array[binormal_pos + 0], binormal_src->array[binormal_pos + 1], binormal_src->array[binormal_pos + 2]); int tangent_pos = (tangent_src->stride ? tangent_src->stride : 3) * p.indices[src + tangent_ofs]; ERR_FAIL_INDEX_V(tangent_pos, tangent_src->array.size(), ERR_INVALID_DATA); diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index 00ca86a43b..b5d646d5d4 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -899,16 +899,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { array[Mesh::ARRAY_NORMAL] = _decode_accessor_as_vec3(state, a["NORMAL"], true); } if (a.has("TANGENT")) { - PoolVector<float> tans = _decode_accessor_as_floats(state, a["TANGENT"], true); - { // we need our binormals inversed, so flip our w component. - int ts = tans.size(); - PoolVector<float>::Write w = tans.write(); - - for (int j = 3; j < ts; j += 4) { - w[j] *= -1.0; - } - } - array[Mesh::ARRAY_TANGENT] = tans; + array[Mesh::ARRAY_TANGENT] = _decode_accessor_as_floats(state, a["TANGENT"], true); } if (a.has("TEXCOORD_0")) { array[Mesh::ARRAY_TEX_UV] = _decode_accessor_as_vec2(state, a["TEXCOORD_0"], true); diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp index 16423decc4..a85f4456f7 100644 --- a/editor/plugins/abstract_polygon_2d_editor.cpp +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -103,6 +103,11 @@ bool AbstractPolygon2DEditor::_is_line() const { return false; } +bool AbstractPolygon2DEditor::_has_uv() const { + + return false; +} + int AbstractPolygon2DEditor::_get_polygon_count() const { return 1; @@ -202,12 +207,7 @@ void AbstractPolygon2DEditor::_notification(int p_what) { button_edit->set_pressed(true); get_tree()->connect("node_removed", this, "_node_removed"); - create_resource->connect("confirmed", this, "_create_resource"); - - } break; - case NOTIFICATION_PHYSICS_PROCESS: { - } break; } } @@ -250,8 +250,12 @@ void AbstractPolygon2DEditor::_wip_close() { _set_polygon(0, wip); } else if (wip.size() >= (_is_line() ? 2 : 3)) { - undo_redo->create_action(TTR("Create Poly")); + undo_redo->create_action(TTR("Create Polygon")); _action_add_polygon(wip); + if (_has_uv()) { + undo_redo->add_do_method(_get_node(), "set_uv", PoolVector<Vector2>()); + undo_redo->add_undo_method(_get_node(), "set_uv", _get_node()->get("uv")); + } _commit_action(); } else { @@ -313,7 +317,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) if (vertices.size() < (_is_line() ? 2 : 3)) { vertices.push_back(cpoint); - undo_redo->create_action(TTR("Edit Poly")); + undo_redo->create_action(TTR("Edit Polygon")); selected_point = Vertex(insert.polygon, vertices.size()); _action_set_polygon(insert.polygon, vertices); _commit_action(); @@ -331,7 +335,6 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) undo_redo->create_action(TTR("Insert Point")); _action_set_polygon(insert.polygon, vertices); _commit_action(); - return true; } } else { @@ -363,7 +366,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) ERR_FAIL_INDEX_V(edited_point.vertex, vertices.size(), false); vertices.write[edited_point.vertex] = edited_point.pos - _get_offset(edited_point.polygon); - undo_redo->create_action(TTR("Edit Poly")); + undo_redo->create_action(TTR("Edit Polygon")); _action_set_polygon(edited_point.polygon, pre_move_edit, vertices); _commit_action(); @@ -531,6 +534,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) } void AbstractPolygon2DEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { + if (!_get_node()) return; @@ -631,9 +635,11 @@ void AbstractPolygon2DEditor::edit(Node *p_polygon) { _set_node(p_polygon); - //Enable the pencil tool if the polygon is empty + // Enable the pencil tool if the polygon is empty. if (_is_empty()) _menu_option(MODE_CREATE); + else + _menu_option(MODE_EDIT); wip.clear(); wip_active = false; @@ -664,12 +670,12 @@ void AbstractPolygon2DEditor::remove_point(const Vertex &p_vertex) { vertices.remove(p_vertex.vertex); - undo_redo->create_action(TTR("Edit Poly (Remove Point)")); + undo_redo->create_action(TTR("Edit Polygon (Remove Point)")); _action_set_polygon(p_vertex.polygon, vertices); _commit_action(); } else { - undo_redo->create_action(TTR("Remove Poly And Point")); + undo_redo->create_action(TTR("Remove Polygon And Point")); _action_remove_polygon(p_vertex.polygon); _commit_action(); } @@ -777,19 +783,19 @@ AbstractPolygon2DEditor::AbstractPolygon2DEditor(EditorNode *p_editor, bool p_wi add_child(button_create); button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); button_create->set_toggle_mode(true); - button_create->set_tooltip(TTR("Create a new polygon from scratch")); + button_create->set_tooltip(TTR("Create points.")); button_edit = memnew(ToolButton); add_child(button_edit); button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); button_edit->set_toggle_mode(true); - button_edit->set_tooltip(TTR("Edit existing polygon:\nLMB: Move Point.\nCtrl+LMB: Split Segment.\nRMB: Erase Point.")); + button_edit->set_tooltip(TTR("Edit points.\nLMB: Move Point\nRMB: Erase Point")); button_delete = memnew(ToolButton); add_child(button_delete); button_delete->connect("pressed", this, "_menu_option", varray(MODE_DELETE)); button_delete->set_toggle_mode(true); - button_delete->set_tooltip(TTR("Delete points")); + button_delete->set_tooltip(TTR("Erase points.")); create_resource = memnew(ConfirmationDialog); add_child(create_resource); diff --git a/editor/plugins/abstract_polygon_2d_editor.h b/editor/plugins/abstract_polygon_2d_editor.h index c03670f254..046e8540e7 100644 --- a/editor/plugins/abstract_polygon_2d_editor.h +++ b/editor/plugins/abstract_polygon_2d_editor.h @@ -88,12 +88,10 @@ class AbstractPolygon2DEditor : public HBoxContainer { protected: enum { - MODE_CREATE, MODE_EDIT, MODE_DELETE, MODE_CONT, - }; int mode; @@ -116,13 +114,12 @@ protected: PosVertex closest_edge_point(const Vector2 &p_pos) const; bool _is_empty() const; - void _commit_action(); -protected: virtual Node2D *_get_node() const = 0; virtual void _set_node(Node *p_polygon) = 0; virtual bool _is_line() const; + virtual bool _has_uv() const; virtual int _get_polygon_count() const; virtual Vector2 _get_offset(int p_idx) const; virtual Variant _get_polygon(int p_idx) const; @@ -132,6 +129,7 @@ protected: virtual void _action_remove_polygon(int p_idx); virtual void _action_set_polygon(int p_idx, const Variant &p_polygon); virtual void _action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon); + virtual void _commit_action(); virtual bool _has_resource() const; virtual void _create_resource(); diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index ee2283a035..8d9872236c 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -4606,7 +4606,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { warning_child_of_container = memnew(Label); warning_child_of_container->hide(); - warning_child_of_container->set_text("Warning: Children of a container get their position and size determined only by their parent"); + warning_child_of_container->set_text(TTR("Warning: Children of a container get their position and size determined only by their parent")); add_control_to_info_overlay(warning_child_of_container); h_scroll = memnew(HScrollBar); @@ -4626,19 +4626,19 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { zoom_minus = memnew(ToolButton); zoom_hb->add_child(zoom_minus); zoom_minus->connect("pressed", this, "_button_zoom_minus"); - zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom out"), KEY_MASK_CMD | KEY_MINUS)); + zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom Out"), KEY_MASK_CMD | KEY_MINUS)); zoom_minus->set_focus_mode(FOCUS_NONE); zoom_reset = memnew(ToolButton); zoom_hb->add_child(zoom_reset); zoom_reset->connect("pressed", this, "_button_zoom_reset"); - zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom reset"), KEY_MASK_CMD | KEY_0)); + zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom Reset"), KEY_MASK_CMD | KEY_0)); zoom_reset->set_focus_mode(FOCUS_NONE); zoom_plus = memnew(ToolButton); zoom_hb->add_child(zoom_plus); zoom_plus->connect("pressed", this, "_button_zoom_plus"); - zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom in"), KEY_MASK_CMD | KEY_EQUAL)); // Usually direct access key for PLUS + zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom In"), KEY_MASK_CMD | KEY_EQUAL)); // Usually direct access key for PLUS zoom_plus->set_focus_mode(FOCUS_NONE); updating_scroll = false; diff --git a/editor/plugins/collision_polygon_editor_plugin.cpp b/editor/plugins/collision_polygon_editor_plugin.cpp index 805a7d3835..e92a91db7c 100644 --- a/editor/plugins/collision_polygon_editor_plugin.cpp +++ b/editor/plugins/collision_polygon_editor_plugin.cpp @@ -95,7 +95,7 @@ void Polygon3DEditor::_menu_option(int p_option) { void Polygon3DEditor::_wip_close() { - undo_redo->create_action(TTR("Create Poly3D")); + undo_redo->create_action(TTR("Create Polygon3D")); undo_redo->add_undo_method(node, "set_polygon", node->call("get_polygon")); undo_redo->add_do_method(node, "set_polygon", wip); undo_redo->add_do_method(this, "_polygon_draw"); diff --git a/editor/plugins/light_occluder_2d_editor_plugin.cpp b/editor/plugins/light_occluder_2d_editor_plugin.cpp index 6a16cf0989..646883fbda 100644 --- a/editor/plugins/light_occluder_2d_editor_plugin.cpp +++ b/editor/plugins/light_occluder_2d_editor_plugin.cpp @@ -30,425 +30,91 @@ #include "light_occluder_2d_editor_plugin.h" -#include "canvas_item_editor_plugin.h" -#include "core/os/file_access.h" -#include "editor/editor_settings.h" +Ref<OccluderPolygon2D> LightOccluder2DEditor::_ensure_occluder() const { -void LightOccluder2DEditor::_notification(int p_what) { + Ref<OccluderPolygon2D> occluder = node->get_occluder_polygon(); + if (!occluder.is_valid()) { - switch (p_what) { - - case NOTIFICATION_READY: { - - button_create->set_icon(get_icon("Edit", "EditorIcons")); - button_edit->set_icon(get_icon("MovePoint", "EditorIcons")); - button_edit->set_pressed(true); - get_tree()->connect("node_removed", this, "_node_removed"); - create_poly->connect("confirmed", this, "_create_poly"); - - } break; - case NOTIFICATION_PHYSICS_PROCESS: { - - } break; - } -} -void LightOccluder2DEditor::_node_removed(Node *p_node) { - - if (p_node == node) { - node = NULL; - hide(); - canvas_item_editor->update_viewport(); + occluder = Ref<OccluderPolygon2D>(memnew(OccluderPolygon2D)); + node->set_occluder_polygon(occluder); } + return occluder; } -void LightOccluder2DEditor::_menu_option(int p_option) { +Node2D *LightOccluder2DEditor::_get_node() const { - switch (p_option) { - - case MODE_CREATE: { - - mode = MODE_CREATE; - button_create->set_pressed(true); - button_edit->set_pressed(false); - } break; - case MODE_EDIT: { - - mode = MODE_EDIT; - button_create->set_pressed(false); - button_edit->set_pressed(true); - } break; - } + return node; } -void LightOccluder2DEditor::_wip_close(bool p_closed) { - - undo_redo->create_action(TTR("Create Poly")); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_polygon", node->get_occluder_polygon()->get_polygon()); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_polygon", wip); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_closed", node->get_occluder_polygon()->is_closed()); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_closed", p_closed); +void LightOccluder2DEditor::_set_node(Node *p_polygon) { - undo_redo->add_do_method(canvas_item_editor, "update_viewport"); - undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); - undo_redo->commit_action(); - wip.clear(); - wip_active = false; - mode = MODE_EDIT; - button_edit->set_pressed(true); - button_create->set_pressed(false); - edited_point = -1; + node = Object::cast_to<LightOccluder2D>(p_polygon); } -bool LightOccluder2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) { +bool LightOccluder2DEditor::_is_line() const { - if (!node) + Ref<OccluderPolygon2D> occluder = node->get_occluder_polygon(); + if (occluder.is_valid()) + return !occluder->is_closed(); + else return false; - - if (node->get_occluder_polygon().is_null()) { - Ref<InputEventMouseButton> mb = p_event; - if (mb.is_valid() && mb->get_button_index() == 1 && mb->is_pressed()) { - create_poly->set_text(TTR("No OccluderPolygon2D resource on this node.\nCreate and assign one?")); - create_poly->popup_centered_minsize(); - } - return (mb.is_valid() && mb->get_button_index() == 1); - } - - Ref<InputEventMouseButton> mb = p_event; - - if (mb.is_valid()) { - - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - - Vector2 gpoint = mb->get_position(); - Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mb->get_position()))); - - Vector<Vector2> poly = Variant(node->get_occluder_polygon()->get_polygon()); - - //first check if a point is to be added (segment split) - real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8); - - switch (mode) { - - case MODE_CREATE: { - - if (mb->get_button_index() == BUTTON_LEFT && mb->is_pressed()) { - - if (!wip_active) { - - wip.clear(); - wip.push_back(cpoint); - wip_active = true; - edited_point_pos = cpoint; - canvas_item_editor->update_viewport(); - edited_point = 1; - return true; - } else { - - if (wip.size() > 1 && xform.xform(wip[0]).distance_to(gpoint) < grab_threshold) { - //wip closed - _wip_close(true); - - return true; - } else if (wip.size() > 1 && xform.xform(wip[wip.size() - 1]).distance_to(gpoint) < grab_threshold) { - //wip closed - _wip_close(false); - return true; - - } else { - - wip.push_back(cpoint); - edited_point = wip.size(); - canvas_item_editor->update_viewport(); - return true; - - //add wip point - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && wip_active) { - _wip_close(true); - } - - } break; - - case MODE_EDIT: { - - if (mb->get_button_index() == BUTTON_LEFT) { - if (mb->is_pressed()) { - - if (mb->get_control()) { - - if (poly.size() < 3) { - - undo_redo->create_action(TTR("Edit Poly")); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - poly.push_back(cpoint); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - undo_redo->add_do_method(canvas_item_editor, "update_viewport"); - undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); - undo_redo->commit_action(); - return true; - } - - //search edges - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 points[2] = { xform.xform(poly[i]), - xform.xform(poly[(i + 1) % poly.size()]) }; - - Vector2 cp = Geometry::get_closest_point_to_segment_2d(gpoint, points); - if (cp.distance_squared_to(points[0]) < CMP_EPSILON2 || cp.distance_squared_to(points[1]) < CMP_EPSILON2) - continue; //not valid to reuse point - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - pre_move_edit = poly; - poly.insert(closest_idx + 1, xform.affine_inverse().xform(closest_pos)); - edited_point = closest_idx + 1; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - node->get_occluder_polygon()->set_polygon(Variant(poly)); - canvas_item_editor->update_viewport(); - return true; - } - } else { - - //look for points to move - - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 cp = xform.xform(poly[i]); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - pre_move_edit = poly; - edited_point = closest_idx; - edited_point_pos = xform.affine_inverse().xform(closest_pos); - canvas_item_editor->update_viewport(); - return true; - } - } - } else { - - if (edited_point != -1) { - - //apply - - ERR_FAIL_INDEX_V(edited_point, poly.size(), false); - poly.write[edited_point] = edited_point_pos; - undo_redo->create_action(TTR("Edit Poly")); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_polygon", pre_move_edit); - undo_redo->add_do_method(canvas_item_editor, "update_viewport"); - undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); - undo_redo->commit_action(); - - edited_point = -1; - return true; - } - } - } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed() && edited_point == -1) { - - int closest_idx = -1; - Vector2 closest_pos; - real_t closest_dist = 1e10; - for (int i = 0; i < poly.size(); i++) { - - Vector2 cp = xform.xform(poly[i]); - - real_t d = cp.distance_to(gpoint); - if (d < closest_dist && d < grab_threshold) { - closest_dist = d; - closest_pos = cp; - closest_idx = i; - } - } - - if (closest_idx >= 0) { - - undo_redo->create_action(TTR("Edit Poly (Remove Point)")); - undo_redo->add_undo_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - poly.remove(closest_idx); - undo_redo->add_do_method(node->get_occluder_polygon().ptr(), "set_polygon", poly); - undo_redo->add_do_method(canvas_item_editor, "update_viewport"); - undo_redo->add_undo_method(canvas_item_editor, "update_viewport"); - undo_redo->commit_action(); - return true; - } - } - - } break; - } - } - - Ref<InputEventMouseMotion> mm = p_event; - - if (mm.is_valid()) { - - if (edited_point != -1 && (wip_active || mm->get_button_mask() & BUTTON_MASK_LEFT)) { - - Vector2 gpoint = mm->get_position(); - Vector2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint); - cpoint = canvas_item_editor->snap_point(cpoint); - edited_point_pos = node->get_global_transform().affine_inverse().xform(cpoint); - - canvas_item_editor->update_viewport(); - } - } - - return false; } -void LightOccluder2DEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { - - if (!node || !node->get_occluder_polygon().is_valid()) - return; - - Vector<Vector2> poly; +int LightOccluder2DEditor::_get_polygon_count() const { - if (wip_active) - poly = wip; + Ref<OccluderPolygon2D> occluder = node->get_occluder_polygon(); + if (occluder.is_valid()) + return occluder->get_polygon().size(); else - poly = Variant(node->get_occluder_polygon()->get_polygon()); - - Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform(); - Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); - - for (int i = 0; i < poly.size(); i++) { - - Vector2 p, p2; - p = i == edited_point ? edited_point_pos : poly[i]; - if ((wip_active && i == poly.size() - 1) || (((i + 1) % poly.size()) == edited_point)) - p2 = edited_point_pos; - else - p2 = poly[(i + 1) % poly.size()]; + return 0; +} - Vector2 point = xform.xform(p); - Vector2 next_point = xform.xform(p2); +Variant LightOccluder2DEditor::_get_polygon(int p_idx) const { - Color col = Color(1, 0.3, 0.1, 0.8); + Ref<OccluderPolygon2D> occluder = node->get_occluder_polygon(); + if (occluder.is_valid()) + return occluder->get_polygon(); + else + return Variant(Vector<Vector2>()); +} - if (i == poly.size() - 1 && (!node->get_occluder_polygon()->is_closed() || wip_active)) { +void LightOccluder2DEditor::_set_polygon(int p_idx, const Variant &p_polygon) const { - } else { - p_overlay->draw_line(point, next_point, col, 2); - } - p_overlay->draw_texture(handle, point - handle->get_size() * 0.5); - } + Ref<OccluderPolygon2D> occluder = _ensure_occluder(); + occluder->set_polygon(p_polygon); } -void LightOccluder2DEditor::edit(Node *p_collision_polygon) { +void LightOccluder2DEditor::_action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon) { - if (!canvas_item_editor) { - canvas_item_editor = CanvasItemEditor::get_singleton(); - } + Ref<OccluderPolygon2D> occluder = _ensure_occluder(); + undo_redo->add_do_method(occluder.ptr(), "set_polygon", p_polygon); + undo_redo->add_undo_method(occluder.ptr(), "set_polygon", p_previous); +} - if (p_collision_polygon) { +bool LightOccluder2DEditor::_has_resource() const { - node = Object::cast_to<LightOccluder2D>(p_collision_polygon); - wip.clear(); - wip_active = false; - edited_point = -1; - canvas_item_editor->update_viewport(); - } else { - node = NULL; - } + return node && node->get_occluder_polygon().is_valid(); } -void LightOccluder2DEditor::_create_poly() { +void LightOccluder2DEditor::_create_resource() { if (!node) return; + undo_redo->create_action(TTR("Create Occluder Polygon")); undo_redo->add_do_method(node, "set_occluder_polygon", Ref<OccluderPolygon2D>(memnew(OccluderPolygon2D))); undo_redo->add_undo_method(node, "set_occluder_polygon", Variant(REF())); undo_redo->commit_action(); -} - -void LightOccluder2DEditor::_bind_methods() { - ClassDB::bind_method(D_METHOD("_menu_option"), &LightOccluder2DEditor::_menu_option); - ClassDB::bind_method(D_METHOD("_node_removed"), &LightOccluder2DEditor::_node_removed); - ClassDB::bind_method(D_METHOD("_create_poly"), &LightOccluder2DEditor::_create_poly); + _menu_option(MODE_CREATE); } -LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) { +LightOccluder2DEditor::LightOccluder2DEditor(EditorNode *p_editor) : + AbstractPolygon2DEditor(p_editor) { node = NULL; - canvas_item_editor = NULL; - editor = p_editor; - undo_redo = editor->get_undo_redo(); - - add_child(memnew(VSeparator)); - button_create = memnew(ToolButton); - add_child(button_create); - button_create->connect("pressed", this, "_menu_option", varray(MODE_CREATE)); - button_create->set_toggle_mode(true); - button_create->set_tooltip(TTR("Create a new polygon from scratch.")); - - button_edit = memnew(ToolButton); - add_child(button_edit); - button_edit->connect("pressed", this, "_menu_option", varray(MODE_EDIT)); - button_edit->set_toggle_mode(true); - button_edit->set_tooltip(TTR("Edit existing polygon:") + "\n" + TTR("LMB: Move Point.") + "\n" + TTR("Ctrl+LMB: Split Segment.") + "\n" + TTR("RMB: Erase Point.")); - - create_poly = memnew(ConfirmationDialog); - add_child(create_poly); - create_poly->get_ok()->set_text(TTR("Create")); - - mode = MODE_EDIT; - wip_active = false; -} - -void LightOccluder2DEditorPlugin::edit(Object *p_object) { - - light_occluder_editor->edit(Object::cast_to<Node>(p_object)); -} - -bool LightOccluder2DEditorPlugin::handles(Object *p_object) const { - - return p_object->is_class("LightOccluder2D"); -} - -void LightOccluder2DEditorPlugin::make_visible(bool p_visible) { - - if (p_visible) { - light_occluder_editor->show(); - } else { - - light_occluder_editor->hide(); - light_occluder_editor->edit(NULL); - } -} - -LightOccluder2DEditorPlugin::LightOccluder2DEditorPlugin(EditorNode *p_node) { - - editor = p_node; - light_occluder_editor = memnew(LightOccluder2DEditor(p_node)); - CanvasItemEditor::get_singleton()->add_control_to_menu_panel(light_occluder_editor); - - light_occluder_editor->hide(); } -LightOccluder2DEditorPlugin::~LightOccluder2DEditorPlugin() { +LightOccluder2DEditorPlugin::LightOccluder2DEditorPlugin(EditorNode *p_node) : + AbstractPolygon2DEditorPlugin(p_node, memnew(LightOccluder2DEditor(p_node)), "LightOccluder2D") { } diff --git a/editor/plugins/light_occluder_2d_editor_plugin.h b/editor/plugins/light_occluder_2d_editor_plugin.h index a1962892ee..6117d50e89 100644 --- a/editor/plugins/light_occluder_2d_editor_plugin.h +++ b/editor/plugins/light_occluder_2d_editor_plugin.h @@ -31,83 +31,44 @@ #ifndef LIGHT_OCCLUDER_2D_EDITOR_PLUGIN_H #define LIGHT_OCCLUDER_2D_EDITOR_PLUGIN_H -#include "editor/editor_node.h" -#include "editor/editor_plugin.h" +#include "editor/plugins/abstract_polygon_2d_editor.h" #include "scene/2d/light_occluder_2d.h" -#include "scene/gui/tool_button.h" /** @author Juan Linietsky <reduzio@gmail.com> */ -class CanvasItemEditor; +class LightOccluder2DEditor : public AbstractPolygon2DEditor { -class LightOccluder2DEditor : public HBoxContainer { + GDCLASS(LightOccluder2DEditor, AbstractPolygon2DEditor); - GDCLASS(LightOccluder2DEditor, HBoxContainer); - - UndoRedo *undo_redo; - enum Mode { - - MODE_CREATE, - MODE_EDIT, - - }; - - Mode mode; - - ToolButton *button_create; - ToolButton *button_edit; - - CanvasItemEditor *canvas_item_editor; - EditorNode *editor; - Panel *panel; LightOccluder2D *node; - MenuButton *options; - int edited_point; - Vector2 edited_point_pos; - Vector<Vector2> pre_move_edit; - Vector<Vector2> wip; - bool wip_active; + Ref<OccluderPolygon2D> _ensure_occluder() const; - ConfirmationDialog *create_poly; +protected: + virtual Node2D *_get_node() const; + virtual void _set_node(Node *p_polygon); - void _wip_close(bool p_closed); - void _menu_option(int p_option); - void _create_poly(); + virtual bool _is_line() const; + virtual int _get_polygon_count() const; + virtual Variant _get_polygon(int p_idx) const; + virtual void _set_polygon(int p_idx, const Variant &p_polygon) const; -protected: - void _notification(int p_what); - void _node_removed(Node *p_node); - static void _bind_methods(); + virtual void _action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon); + + virtual bool _has_resource() const; + virtual void _create_resource(); public: - Vector2 snap_point(const Vector2 &p_point) const; - void forward_canvas_draw_over_viewport(Control *p_overlay); - bool forward_gui_input(const Ref<InputEvent> &p_event); - void edit(Node *p_collision_polygon); LightOccluder2DEditor(EditorNode *p_editor); }; -class LightOccluder2DEditorPlugin : public EditorPlugin { +class LightOccluder2DEditorPlugin : public AbstractPolygon2DEditorPlugin { - GDCLASS(LightOccluder2DEditorPlugin, EditorPlugin); - - LightOccluder2DEditor *light_occluder_editor; - EditorNode *editor; + GDCLASS(LightOccluder2DEditorPlugin, AbstractPolygon2DEditorPlugin); public: - virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) { return light_occluder_editor->forward_gui_input(p_event); } - virtual void forward_canvas_draw_over_viewport(Control *p_overlay) { return light_occluder_editor->forward_canvas_draw_over_viewport(p_overlay); } - - virtual String get_name() const { return "LightOccluder2D"; } - bool has_main_screen() const { return false; } - virtual void edit(Object *p_object); - virtual bool handles(Object *p_object) const; - virtual void make_visible(bool p_visible); - LightOccluder2DEditorPlugin(EditorNode *p_node); - ~LightOccluder2DEditorPlugin(); }; #endif // LIGHT_OCCLUDER_2D_EDITOR_PLUGIN_H diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp index 45268d8c8d..97448f3f88 100644 --- a/editor/plugins/polygon_2d_editor_plugin.cpp +++ b/editor/plugins/polygon_2d_editor_plugin.cpp @@ -56,6 +56,12 @@ void Polygon2DEditor::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_ENTER_TREE: + case NOTIFICATION_THEME_CHANGED: { + + uv_edit_draw->add_style_override("panel", get_stylebox("bg", "Tree")); + bone_scroll->add_style_override("bg", get_stylebox("bg", "Tree")); + } break; case NOTIFICATION_READY: { button_uv->set_icon(get_icon("Uv", "EditorIcons")); @@ -73,66 +79,68 @@ void Polygon2DEditor::_notification(int p_what) { b_snap_grid->set_icon(get_icon("Grid", "EditorIcons")); b_snap_enable->set_icon(get_icon("SnapGrid", "EditorIcons")); uv_icon_zoom->set_texture(get_icon("Zoom", "EditorIcons")); - } break; - case NOTIFICATION_PHYSICS_PROCESS: { + case NOTIFICATION_VISIBILITY_CHANGED: { + if (!is_visible()) { + uv_edit->hide(); + } } break; } } void Polygon2DEditor::_sync_bones() { + Skeleton2D *skeleton; if (!node->has_node(node->get_skeleton())) { error->set_text(TTR("The skeleton property of the Polygon2D does not point to a Skeleton2D node")); error->popup_centered_minsize(); - return; + } else { + Node *sn = node->get_node(node->get_skeleton()); + skeleton = Object::cast_to<Skeleton2D>(sn); } - Node *sn = node->get_node(node->get_skeleton()); - Skeleton2D *skeleton = Object::cast_to<Skeleton2D>(sn); + Array prev_bones = node->call("_get_bones"); + node->clear_bones(); if (!skeleton) { error->set_text(TTR("The skeleton property of the Polygon2D does not point to a Skeleton2D node")); error->popup_centered_minsize(); - return; - } - - Array prev_bones = node->call("_get_bones"); - node->clear_bones(); - - for (int i = 0; i < skeleton->get_bone_count(); i++) { - NodePath path = skeleton->get_path_to(skeleton->get_bone(i)); - PoolVector<float> weights; - int wc = node->get_polygon().size(); - - for (int j = 0; j < prev_bones.size(); j += 2) { - NodePath pvp = prev_bones[j]; - PoolVector<float> pv = prev_bones[j + 1]; - if (pvp == path && pv.size() == wc) { - weights = pv; + } else { + for (int i = 0; i < skeleton->get_bone_count(); i++) { + NodePath path = skeleton->get_path_to(skeleton->get_bone(i)); + PoolVector<float> weights; + int wc = node->get_polygon().size(); + + for (int j = 0; j < prev_bones.size(); j += 2) { + NodePath pvp = prev_bones[j]; + PoolVector<float> pv = prev_bones[j + 1]; + if (pvp == path && pv.size() == wc) { + weights = pv; + } } - } - if (weights.size() == 0) { //create them - weights.resize(node->get_polygon().size()); - PoolVector<float>::Write w = weights.write(); - for (int j = 0; j < wc; j++) { - w[j] = 0.0; + if (weights.size() == 0) { //create them + weights.resize(node->get_polygon().size()); + PoolVector<float>::Write w = weights.write(); + for (int j = 0; j < wc; j++) { + w[j] = 0.0; + } } - } - node->add_bone(path, weights); + node->add_bone(path, weights); + } } + Array new_bones = node->call("_get_bones"); - undo_redo->create_action(TTR("Sync bones")); + undo_redo->create_action(TTR("Sync Bones")); undo_redo->add_do_method(node, "_set_bones", new_bones); undo_redo->add_undo_method(node, "_set_bones", prev_bones); - undo_redo->add_do_method(uv_edit_draw, "update"); - undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->add_do_method(this, "_update_bone_list"); undo_redo->add_undo_method(this, "_update_bone_list"); + undo_redo->add_do_method(uv_edit_draw, "update"); + undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); } @@ -162,9 +170,10 @@ void Polygon2DEditor::_update_bone_list() { cb->set_text(name); cb->set_button_group(bg); cb->set_meta("bone_path", np); + cb->set_focus_mode(FOCUS_NONE); bone_scroll_vb->add_child(cb); - if (np == selected) + if (np == selected || bone_scroll_vb->get_child_count() < 2) cb->set_pressed(true); cb->connect("pressed", this, "_bone_paint_selected", varray(i)); @@ -180,6 +189,7 @@ void Polygon2DEditor::_bone_paint_selected(int p_index) { void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { if (p_mode == 0) { //uv + uv_button[UV_MODE_CREATE]->hide(); for (int i = UV_MODE_MOVE; i <= UV_MODE_SCALE; i++) { uv_button[i]->show(); @@ -194,8 +204,8 @@ void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { bone_paint_strength->hide(); bone_paint_radius->hide(); bone_paint_radius_label->hide(); - } else if (p_mode == 1) { //poly + for (int i = 0; i <= UV_MODE_SCALE; i++) { uv_button[i]->show(); } @@ -209,8 +219,8 @@ void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { bone_paint_strength->hide(); bone_paint_radius->hide(); bone_paint_radius_label->hide(); - } else if (p_mode == 2) { //splits + for (int i = 0; i <= UV_MODE_SCALE; i++) { uv_button[i]->hide(); } @@ -224,8 +234,8 @@ void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { bone_paint_strength->hide(); bone_paint_radius->hide(); bone_paint_radius_label->hide(); - } else if (p_mode == 3) { //bones´ + for (int i = 0; i <= UV_MODE_REMOVE_SPLIT; i++) { uv_button[i]->hide(); } @@ -241,9 +251,17 @@ void Polygon2DEditor::_uv_edit_mode_select(int p_mode) { bone_paint_pos = Vector2(-100000, -100000); //send brush away when switching } + uv_edit->set_size(uv_edit->get_size()); // Necessary readjustment of the popup window. uv_edit_draw->update(); } +void Polygon2DEditor::_uv_edit_popup_hide() { + + EditorSettings::get_singleton()->set("interface/dialogs/uv_editor_bounds", uv_edit->get_rect()); + + _cancel_editing(); +} + void Polygon2DEditor::_menu_option(int p_option) { switch (p_option) { @@ -252,7 +270,7 @@ void Polygon2DEditor::_menu_option(int p_option) { if (node->get_texture().is_null()) { - error->set_text("No texture in this polygon.\nSet a texture to be able to edit UV."); + error->set_text(TTR("No texture in this polygon.\nSet a texture to be able to edit UV.")); error->popup_centered_minsize(); return; } @@ -268,7 +286,10 @@ void Polygon2DEditor::_menu_option(int p_option) { undo_redo->commit_action(); } - uv_edit->popup_centered_ratio(0.85); + if (EditorSettings::get_singleton()->has_setting("interface/dialogs/uv_editor_bounds")) + uv_edit->popup(EditorSettings::get_singleton()->get("interface/dialogs/uv_editor_bounds")); + else + uv_edit->popup_centered_ratio(0.85); } break; case UVEDIT_POLYGON_TO_UV: { @@ -282,7 +303,6 @@ void Polygon2DEditor::_menu_option(int p_option) { undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); - } break; case UVEDIT_UV_TO_POLYGON: { @@ -291,13 +311,12 @@ void Polygon2DEditor::_menu_option(int p_option) { if (uvs.size() == 0) break; - undo_redo->create_action(TTR("Create UV Map")); + undo_redo->create_action(TTR("Create Polygon")); undo_redo->add_do_method(node, "set_polygon", uvs); undo_redo->add_undo_method(node, "set_polygon", points); undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); - } break; case UVEDIT_UV_CLEAR: { @@ -310,43 +329,81 @@ void Polygon2DEditor::_menu_option(int p_option) { undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); - } break; case UVEDIT_GRID_SETTINGS: { + grid_settings->popup_centered_minsize(); } break; default: { + AbstractPolygon2DEditor::_menu_option(p_option); } break; } } +void Polygon2DEditor::_cancel_editing() { + + if (uv_create) { + uv_drag = false; + uv_create = false; + node->set_uv(uv_create_uv_prev); + node->set_polygon(uv_create_poly_prev); + node->call("_set_bones", uv_create_bones_prev); + node->set_splits(splits_prev); + } else if (uv_drag) { + uv_drag = false; + if (uv_edit_mode[0]->is_pressed()) { // Edit UV. + node->set_uv(points_prev); + } else if (uv_edit_mode[1]->is_pressed()) { // Edit polygon. + node->set_polygon(points_prev); + } + } else if (split_create) { + split_create = false; + } +} + +void Polygon2DEditor::_commit_action() { + + // Makes that undo/redoing actions made outside of the UV editor still affects its polygon. + undo_redo->add_do_method(uv_edit_draw, "update"); + undo_redo->add_undo_method(uv_edit_draw, "update"); + undo_redo->add_do_method(CanvasItemEditor::get_singleton(), "update_viewport"); + undo_redo->add_undo_method(CanvasItemEditor::get_singleton(), "update_viewport"); + undo_redo->commit_action(); +} + void Polygon2DEditor::_set_use_snap(bool p_use) { use_snap = p_use; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_enabled", p_use); } void Polygon2DEditor::_set_show_grid(bool p_show) { snap_show_grid = p_show; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "show_grid", p_show); uv_edit_draw->update(); } void Polygon2DEditor::_set_snap_off_x(float p_val) { snap_offset.x = p_val; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_offset", snap_offset); uv_edit_draw->update(); } void Polygon2DEditor::_set_snap_off_y(float p_val) { snap_offset.y = p_val; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_offset", snap_offset); uv_edit_draw->update(); } void Polygon2DEditor::_set_snap_step_x(float p_val) { snap_step.x = p_val; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_step", snap_step); uv_edit_draw->update(); } void Polygon2DEditor::_set_snap_step_y(float p_val) { snap_step.y = p_val; + EditorSettings::get_singleton()->set_project_metadata("polygon_2d_uv_editor", "snap_step", snap_step); uv_edit_draw->update(); } @@ -364,6 +421,9 @@ void Polygon2DEditor::_uv_mode(int p_mode) { void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { + if (!_get_node()) + return; + Transform2D mtx; mtx.elements[2] = -uv_draw_ofs; mtx.scale_basis(Vector2(uv_draw_zoom, uv_draw_zoom)); @@ -376,7 +436,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { if (mb->is_pressed()) { - uv_drag_from = Vector2(mb->get_position().x, mb->get_position().y); + uv_drag_from = snap_point(Vector2(mb->get_position().x, mb->get_position().y)); uv_drag = true; points_prev = node->get_uv(); @@ -390,8 +450,9 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { if (uv_move_current == UV_MODE_CREATE) { if (!uv_create) { + points_prev.resize(0); - Vector2 tuv = mtx.affine_inverse().xform(Vector2(mb->get_position().x, mb->get_position().y)); + Vector2 tuv = mtx.affine_inverse().xform(snap_point(Vector2(mb->get_position().x, mb->get_position().y))); points_prev.push_back(tuv); uv_create_to = tuv; point_drag_index = 0; @@ -405,23 +466,27 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { node->set_polygon(points_prev); node->set_uv(points_prev); + uv_edit_draw->update(); } else { - Vector2 tuv = mtx.affine_inverse().xform(Vector2(mb->get_position().x, mb->get_position().y)); - if (points_prev.size() > 3 && tuv.distance_to(points_prev[0]) < 8) { + Vector2 tuv = mtx.affine_inverse().xform(snap_point(Vector2(mb->get_position().x, mb->get_position().y))); + + if (points_prev.size() > 2 && tuv.distance_to(points_prev[0]) < 8) { undo_redo->create_action(TTR("Create Polygon & UV")); undo_redo->add_do_method(node, "set_uv", node->get_uv()); - undo_redo->add_undo_method(node, "set_uv", points_prev); + undo_redo->add_undo_method(node, "set_uv", uv_create_uv_prev); undo_redo->add_do_method(node, "set_polygon", node->get_polygon()); - undo_redo->add_undo_method(node, "set_polygon", points_prev); + undo_redo->add_undo_method(node, "set_polygon", uv_create_poly_prev); undo_redo->add_do_method(node, "clear_bones"); - undo_redo->add_undo_method(node, "_set_bones", node->call("_get_bones")); + undo_redo->add_undo_method(node, "_set_bones", uv_create_bones_prev); undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); uv_drag = false; uv_create = false; + _uv_mode(UV_MODE_EDIT_POINT); + _menu_option(MODE_EDIT); } else { points_prev.push_back(tuv); point_drag_index = points_prev.size() - 1; @@ -430,6 +495,8 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { node->set_polygon(points_prev); node->set_uv(points_prev); } + + CanvasItemEditor::get_singleton()->update_viewport(); } if (uv_move_current == UV_MODE_EDIT_POINT) { @@ -540,7 +607,6 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { splits_prev.push_back(split_to_index); undo_redo->create_action(TTR("Add Split")); - undo_redo->add_do_method(node, "set_splits", splits_prev); undo_redo->add_undo_method(node, "set_splits", node->get_splits()); undo_redo->add_do_method(uv_edit_draw, "update"); @@ -575,13 +641,11 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { splits_prev.remove(i); undo_redo->create_action(TTR("Remove Split")); - undo_redo->add_do_method(node, "set_splits", splits_prev); undo_redo->add_undo_method(node, "set_splits", node->get_splits()); undo_redo->add_do_method(uv_edit_draw, "update"); undo_redo->add_undo_method(uv_edit_draw, "update"); undo_redo->commit_action(); - break; } } @@ -608,12 +672,12 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (uv_drag && !uv_create) { - undo_redo->create_action(TTR("Transform UV Map")); - if (uv_edit_mode[0]->is_pressed()) { //edit uv + undo_redo->create_action(TTR("Transform UV Map")); undo_redo->add_do_method(node, "set_uv", node->get_uv()); undo_redo->add_undo_method(node, "set_uv", points_prev); } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon + undo_redo->create_action(TTR("Transform Polygon")); undo_redo->add_do_method(node, "set_polygon", node->get_polygon()); undo_redo->add_undo_method(node, "set_polygon", points_prev); } @@ -624,7 +688,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { uv_drag = false; } else if (bone_painting) { - undo_redo->create_action(TTR("Paint bone weights")); + undo_redo->create_action(TTR("Paint Bone Weights")); undo_redo->add_do_method(node, "set_bone_weights", bone_painting_bone, node->get_bone_weights(bone_painting_bone)); undo_redo->add_undo_method(node, "set_bone_weights", bone_painting_bone, prev_weights); undo_redo->add_do_method(uv_edit_draw, "update"); @@ -635,30 +699,12 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) { - if (uv_create) { - - uv_drag = false; - uv_create = false; - node->set_uv(uv_create_uv_prev); - node->set_polygon(uv_create_poly_prev); - node->call("_set_bones", uv_create_bones_prev); - node->set_splits(splits_prev); - uv_edit_draw->update(); - } else if (uv_drag) { + _cancel_editing(); - uv_drag = false; - if (uv_edit_mode[0]->is_pressed()) { //edit uv - node->set_uv(points_prev); - } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon - node->set_polygon(points_prev); - } - uv_edit_draw->update(); - } else if (split_create) { - split_create = false; - uv_edit_draw->update(); - } else if (bone_painting) { + if (bone_painting) node->set_bone_weights(bone_painting_bone, prev_weights); - } + + uv_edit_draw->update(); } else if (mb->get_button_index() == BUTTON_WHEEL_UP && mb->is_pressed()) { @@ -682,13 +728,15 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (uv_drag) { Vector2 uv_drag_to = mm->get_position(); + uv_drag_to = snap_point(uv_drag_to); // FIXME: Only works correctly with 'UV_MODE_EDIT_POINT', it's imprecise with the rest. Vector2 drag = mtx.affine_inverse().xform(uv_drag_to) - mtx.affine_inverse().xform(uv_drag_from); switch (uv_move_current) { case UV_MODE_CREATE: { + if (uv_create) { - uv_create_to = mtx.affine_inverse().xform(Vector2(mm->get_position().x, mm->get_position().y)); + uv_create_to = mtx.affine_inverse().xform(snap_point(Vector2(mm->get_position().x, mm->get_position().y))); } } break; case UV_MODE_EDIT_POINT: { @@ -713,7 +761,6 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon node->set_polygon(uv_new); } - } break; case UV_MODE_ROTATE: { @@ -737,7 +784,6 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { } else if (uv_edit_mode[1]->is_pressed()) { //edit polygon node->set_polygon(uv_new); } - } break; case UV_MODE_SCALE: { @@ -767,11 +813,15 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { node->set_polygon(uv_new); } } break; + case UV_MODE_PAINT_WEIGHT: + case UV_MODE_CLEAR_WEIGHT: { + + bone_paint_pos = Vector2(mm->get_position().x, mm->get_position().y); + } break; default: {} } if (bone_painting) { - bone_paint_pos = Vector2(mm->get_position().x, mm->get_position().y); PoolVector<float> painted_weights = node->get_bone_weights(bone_painting_bone); { @@ -796,7 +846,9 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) { node->set_bone_weights(bone_painting_bone, painted_weights); } + uv_edit_draw->update(); + CanvasItemEditor::get_singleton()->update_viewport(); } else if (split_create) { uv_create_to = mtx.affine_inverse().xform(Vector2(mm->get_position().x, mm->get_position().y)); uv_edit_draw->update(); @@ -833,6 +885,9 @@ void Polygon2DEditor::_uv_scroll_changed(float) { void Polygon2DEditor::_uv_draw() { + if (!uv_edit->is_visible() || !_get_node()) + return; + Ref<Texture> base_tex = node->get_texture(); if (base_tex.is_null()) return; @@ -848,6 +903,7 @@ void Polygon2DEditor::_uv_draw() { VS::get_singleton()->canvas_item_add_set_transform(uv_edit_draw->get_canvas_item(), Transform2D()); if (snap_show_grid) { + Color grid_color = Color(1.0, 1.0, 1.0, 0.15); Size2 s = uv_edit_draw->get_size(); int last_cell = 0; @@ -857,7 +913,7 @@ void Polygon2DEditor::_uv_draw() { if (i == 0) last_cell = cell; if (last_cell != cell) - uv_edit_draw->draw_line(Point2(i, 0), Point2(i, s.height), Color(0.3, 0.7, 1, 0.3)); + uv_edit_draw->draw_line(Point2(i, 0), Point2(i, s.height), grid_color); last_cell = cell; } } @@ -868,7 +924,7 @@ void Polygon2DEditor::_uv_draw() { if (i == 0) last_cell = cell; if (last_cell != cell) - uv_edit_draw->draw_line(Point2(0, i), Point2(s.width, i), Color(0.3, 0.7, 1, 0.3)); + uv_edit_draw->draw_line(Point2(0, i), Point2(s.width, i), grid_color); last_cell = cell; } } @@ -901,19 +957,26 @@ void Polygon2DEditor::_uv_draw() { Ref<Texture> handle = get_icon("EditorHandle", "EditorIcons"); + Color poly_line_color = Color(0.9, 0.5, 0.5); + Color prev_color = Color(0.5, 0.5, 0.5); Rect2 rect(Point2(), mtx.basis_xform(base_tex->get_size())); rect.expand_to(mtx.basis_xform(uv_edit_draw->get_size())); for (int i = 0; i < uvs.size(); i++) { int next = (i + 1) % uvs.size(); + + if (uv_drag && uv_move_current == UV_MODE_EDIT_POINT && EDITOR_DEF("editors/poly_editor/show_previous_outline", true)) { + uv_edit_draw->draw_line(mtx.xform(points_prev[i]), mtx.xform(points_prev[next]), prev_color, 2 * EDSCALE); + } + Vector2 next_point = uvs[next]; if (uv_create && i == uvs.size() - 1) { next_point = uv_create_to; } - uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), Color(0.9, 0.5, 0.5), 2); - if (weight_r.ptr()) { + uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), poly_line_color, 2 * EDSCALE); + if (weight_r.ptr()) { Vector2 draw_pos = mtx.xform(uvs[i]); float weight = weight_r[i]; uv_edit_draw->draw_rect(Rect2(draw_pos - Vector2(2, 2) * EDSCALE, Vector2(5, 5) * EDSCALE), Color(weight, weight, weight, 1.0)); @@ -926,7 +989,7 @@ void Polygon2DEditor::_uv_draw() { if (split_create) { Vector2 from = uvs[point_drag_index]; Vector2 to = uv_create_to; - uv_edit_draw->draw_line(mtx.xform(from), mtx.xform(to), Color(0.9, 0.5, 0.5), 2); + uv_edit_draw->draw_line(mtx.xform(from), mtx.xform(to), poly_line_color, 2); } PoolVector<int> splits = node->get_splits(); @@ -936,7 +999,7 @@ void Polygon2DEditor::_uv_draw() { int idx_to = splits[i + 1]; if (idx_from < 0 || idx_to >= uvs.size()) continue; - uv_edit_draw->draw_line(mtx.xform(uvs[idx_from]), mtx.xform(uvs[idx_to]), Color(0.9, 0.5, 0.5), 2); + uv_edit_draw->draw_line(mtx.xform(uvs[idx_from]), mtx.xform(uvs[idx_to]), poly_line_color, 2); } if (uv_mode == UV_MODE_PAINT_WEIGHT || uv_mode == UV_MODE_CLEAR_WEIGHT) { @@ -1002,15 +1065,23 @@ void Polygon2DEditor::_uv_draw() { updating_uv_scroll = true; uv_hscroll->set_min(rect.position.x); uv_hscroll->set_max(rect.position.x + rect.size.x); - uv_hscroll->set_page(uv_edit_draw->get_size().x); - uv_hscroll->set_value(uv_draw_ofs.x); - uv_hscroll->set_step(0.001); + if (ABS(rect.position.x - (rect.position.x + rect.size.x)) <= uv_edit_draw->get_size().x) { + uv_hscroll->hide(); + } else { + uv_hscroll->show(); + uv_hscroll->set_page(uv_edit_draw->get_size().x); + uv_hscroll->set_value(uv_draw_ofs.x); + } uv_vscroll->set_min(rect.position.y); uv_vscroll->set_max(rect.position.y + rect.size.y); - uv_vscroll->set_page(uv_edit_draw->get_size().y); - uv_vscroll->set_value(uv_draw_ofs.y); - uv_vscroll->set_step(0.001); + if (ABS(rect.position.y - (rect.position.y + rect.size.y)) <= uv_edit_draw->get_size().y) { + uv_vscroll->hide(); + } else { + uv_vscroll->show(); + uv_vscroll->set_page(uv_edit_draw->get_size().y); + uv_vscroll->set_value(uv_draw_ofs.y); + } updating_uv_scroll = false; } @@ -1027,9 +1098,9 @@ void Polygon2DEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_set_snap_step_x"), &Polygon2DEditor::_set_snap_step_x); ClassDB::bind_method(D_METHOD("_set_snap_step_y"), &Polygon2DEditor::_set_snap_step_y); ClassDB::bind_method(D_METHOD("_uv_edit_mode_select"), &Polygon2DEditor::_uv_edit_mode_select); + ClassDB::bind_method(D_METHOD("_uv_edit_popup_hide"), &Polygon2DEditor::_uv_edit_popup_hide); ClassDB::bind_method(D_METHOD("_sync_bones"), &Polygon2DEditor::_sync_bones); ClassDB::bind_method(D_METHOD("_update_bone_list"), &Polygon2DEditor::_update_bone_list); - ClassDB::bind_method(D_METHOD("_bone_paint_selected"), &Polygon2DEditor::_bone_paint_selected); } @@ -1046,23 +1117,25 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : AbstractPolygon2DEditor(p_editor) { node = NULL; - snap_step = Vector2(10, 10); - use_snap = false; - snap_show_grid = false; + snap_offset = EditorSettings::get_singleton()->get_project_metadata("polygon_2d_uv_editor", "snap_offset", Vector2()); + snap_step = EditorSettings::get_singleton()->get_project_metadata("polygon_2d_uv_editor", "snap_step", Vector2(10, 10)); + use_snap = EditorSettings::get_singleton()->get_project_metadata("polygon_2d_uv_editor", "snap_enabled", false); + snap_show_grid = EditorSettings::get_singleton()->get_project_metadata("polygon_2d_uv_editor", "show_grid", false); button_uv = memnew(ToolButton); add_child(button_uv); + button_uv->set_tooltip(TTR("Open Polygon 2D UV editor.")); button_uv->connect("pressed", this, "_menu_option", varray(MODE_EDIT_UV)); uv_mode = UV_MODE_EDIT_POINT; uv_edit = memnew(AcceptDialog); add_child(uv_edit); uv_edit->set_title(TTR("Polygon 2D UV Editor")); - uv_edit->set_self_modulate(Color(1, 1, 1, 0.9)); + uv_edit->set_resizable(true); + uv_edit->connect("popup_hide", this, "_uv_edit_popup_hide"); VBoxContainer *uv_main_vb = memnew(VBoxContainer); uv_edit->add_child(uv_main_vb); - //uv_edit->set_child_rect(uv_main_vb); HBoxContainer *uv_mode_hb = memnew(HBoxContainer); uv_edit_group.instance(); @@ -1109,14 +1182,14 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : } uv_button[0]->set_tooltip(TTR("Create Polygon")); - uv_button[1]->set_tooltip(TTR("Move Point") + "\n" + TTR("Ctrl: Rotate") + "\n" + TTR("Shift: Move All") + "\n" + TTR("Shift+Ctrl: Scale")); + uv_button[1]->set_tooltip(TTR("Move Points") + "\n" + TTR("Ctrl: Rotate") + "\n" + TTR("Shift: Move All") + "\n" + TTR("Shift+Ctrl: Scale")); uv_button[2]->set_tooltip(TTR("Move Polygon")); uv_button[3]->set_tooltip(TTR("Rotate Polygon")); uv_button[4]->set_tooltip(TTR("Scale Polygon")); - uv_button[5]->set_tooltip(TTR("Connect two points to make a split")); - uv_button[6]->set_tooltip(TTR("Select a split to erase it")); - uv_button[7]->set_tooltip(TTR("Paint weights with specified intensity")); - uv_button[8]->set_tooltip(TTR("UnPaint weights with specified intensity")); + uv_button[5]->set_tooltip(TTR("Connect two points to make a split.")); + uv_button[6]->set_tooltip(TTR("Select a split to erase it.")); + uv_button[7]->set_tooltip(TTR("Paint weights with specified intensity.")); + uv_button[8]->set_tooltip(TTR("Unpaint weights with specified intensity.")); uv_button[0]->hide(); uv_button[5]->hide(); @@ -1134,7 +1207,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : bone_paint_strength->set_step(0.01); bone_paint_strength->set_value(0.5); - bone_paint_radius_label = memnew(Label(" " + TTR("Radius:") + " ")); + bone_paint_radius_label = memnew(Label(TTR("Radius:"))); uv_mode_hb->add_child(bone_paint_radius_label); bone_paint_radius = memnew(SpinBox); uv_mode_hb->add_child(bone_paint_radius); @@ -1147,12 +1220,13 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : bone_paint_radius->set_step(1); bone_paint_radius->set_value(32); - HBoxContainer *uv_main_hb = memnew(HBoxContainer); - uv_main_vb->add_child(uv_main_hb); - uv_edit_draw = memnew(Control); - uv_main_hb->add_child(uv_edit_draw); - uv_main_hb->set_v_size_flags(SIZE_EXPAND_FILL); + HSplitContainer *uv_main_hsc = memnew(HSplitContainer); + uv_main_vb->add_child(uv_main_hsc); + uv_main_hsc->set_v_size_flags(SIZE_EXPAND_FILL); + uv_edit_draw = memnew(Panel); + uv_main_hsc->add_child(uv_edit_draw); uv_edit_draw->set_h_size_flags(SIZE_EXPAND_FILL); + uv_edit_draw->set_custom_minimum_size(Size2(200, 200) * EDSCALE); uv_menu = memnew(MenuButton); uv_mode_hb->add_child(uv_menu); uv_menu->set_text(TTR("Edit")); @@ -1228,6 +1302,7 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_mode_hb->add_child(memnew(VSeparator)); uv_icon_zoom = memnew(TextureRect); + uv_icon_zoom->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); uv_mode_hb->add_child(uv_icon_zoom); uv_zoom = memnew(HSlider); uv_zoom->set_min(0.01); @@ -1245,17 +1320,25 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : uv_zoom->connect("value_changed", this, "_uv_scroll_changed"); uv_vscroll = memnew(VScrollBar); - uv_main_hb->add_child(uv_vscroll); + uv_vscroll->set_step(0.001); + uv_edit_draw->add_child(uv_vscroll); + uv_vscroll->set_anchors_and_margins_preset(PRESET_RIGHT_WIDE); uv_vscroll->connect("value_changed", this, "_uv_scroll_changed"); uv_hscroll = memnew(HScrollBar); - uv_main_vb->add_child(uv_hscroll); + uv_hscroll->set_step(0.001); + uv_edit_draw->add_child(uv_hscroll); + uv_hscroll->set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE); + uv_hscroll->set_margin(MARGIN_RIGHT, -uv_vscroll->get_size().x * EDSCALE); uv_hscroll->connect("value_changed", this, "_uv_scroll_changed"); bone_scroll_main_vb = memnew(VBoxContainer); bone_scroll_main_vb->hide(); + bone_scroll_main_vb->set_custom_minimum_size(Size2(150 * EDSCALE, 0)); sync_bones = memnew(Button(TTR("Sync Bones to Polygon"))); bone_scroll_main_vb->add_child(sync_bones); - uv_main_hb->add_child(bone_scroll_main_vb); + sync_bones->set_h_size_flags(0); + sync_bones->connect("pressed", this, "_sync_bones"); + uv_main_hsc->add_child(bone_scroll_main_vb); bone_scroll = memnew(ScrollContainer); bone_scroll->set_v_scroll(true); bone_scroll->set_h_scroll(false); @@ -1263,7 +1346,6 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) : bone_scroll->set_v_size_flags(SIZE_EXPAND_FILL); bone_scroll_vb = memnew(VBoxContainer); bone_scroll->add_child(bone_scroll_vb); - sync_bones->connect("pressed", this, "_sync_bones"); uv_edit_draw->connect("draw", this, "_uv_draw"); uv_edit_draw->connect("gui_input", this, "_uv_input"); diff --git a/editor/plugins/polygon_2d_editor_plugin.h b/editor/plugins/polygon_2d_editor_plugin.h index f9b42a21c2..935f1cfff0 100644 --- a/editor/plugins/polygon_2d_editor_plugin.h +++ b/editor/plugins/polygon_2d_editor_plugin.h @@ -41,13 +41,11 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { GDCLASS(Polygon2DEditor, AbstractPolygon2DEditor); enum Mode { - MODE_EDIT_UV = MODE_CONT, UVEDIT_POLYGON_TO_UV, UVEDIT_UV_TO_POLYGON, UVEDIT_UV_CLEAR, UVEDIT_GRID_SETTINGS - }; enum UVMode { @@ -73,7 +71,7 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { ToolButton *uv_button[UV_MODE_MAX]; ToolButton *b_snap_enable; ToolButton *b_snap_grid; - Control *uv_edit_draw; + Panel *uv_edit_draw; HSlider *uv_zoom; SpinBox *uv_zoom_value; HScrollBar *uv_hscroll; @@ -125,6 +123,8 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { virtual void _menu_option(int p_option); + void _cancel_editing(); + void _uv_scroll_changed(float); void _uv_input(const Ref<InputEvent> &p_input); void _uv_draw(); @@ -138,6 +138,7 @@ class Polygon2DEditor : public AbstractPolygon2DEditor { void _set_snap_step_y(float p_val); void _uv_edit_mode_select(int p_mode); + void _uv_edit_popup_hide(); void _bone_paint_selected(int p_index); protected: @@ -146,6 +147,9 @@ protected: virtual Vector2 _get_offset(int p_idx) const; + virtual bool _has_uv() const { return true; }; + virtual void _commit_action(); + void _notification(int p_what); static void _bind_methods(); diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 0bbe08821a..44f1625d06 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -40,6 +40,7 @@ #include "editor/editor_settings.h" #include "editor/find_in_files.h" #include "editor/node_dock.h" +#include "editor/plugins/shader_editor_plugin.h" #include "editor/script_editor_debugger.h" #include "scene/main/viewport.h" #include "script_text_editor.h" @@ -896,12 +897,12 @@ void ScriptEditor::_file_dialog_action(String p_file) { } break; case THEME_SAVE_AS: { if (!EditorSettings::get_singleton()->save_text_editor_theme_as(p_file)) { - editor->show_warning(TTR("Error while saving theme"), TTR("Error saving")); + editor->show_warning(TTR("Error while saving theme."), TTR("Error Saving")); } } break; case THEME_IMPORT: { if (!EditorSettings::get_singleton()->import_text_editor_theme(p_file)) { - editor->show_warning(TTR("Error importing theme"), TTR("Error importing")); + editor->show_warning(TTR("Error importing theme."), TTR("Error Importing")); } } break; } @@ -1089,7 +1090,7 @@ void ScriptEditor::_menu_option(int p_option) { Ref<Script> scr = current->get_edited_resource(); if (scr == NULL || scr.is_null()) { - EditorNode::get_singleton()->show_warning("Can't obtain the script for running"); + EditorNode::get_singleton()->show_warning("Can't obtain the script for running."); break; } @@ -1102,13 +1103,13 @@ void ScriptEditor::_menu_option(int p_option) { } if (!scr->is_tool()) { - EditorNode::get_singleton()->show_warning("Script is not in tool mode, will not be able to run"); + EditorNode::get_singleton()->show_warning("Script is not in tool mode, will not be able to run."); return; } if (!ClassDB::is_parent_class(scr->get_instance_base_type(), "EditorScript")) { - EditorNode::get_singleton()->show_warning("To run this script, it must inherit EditorScript and be set to tool mode"); + EditorNode::get_singleton()->show_warning("To run this script, it must inherit EditorScript and be set to tool mode."); return; } @@ -2778,13 +2779,18 @@ void ScriptEditor::_on_find_in_files_requested(String text) { void ScriptEditor::_on_find_in_files_result_selected(String fpath, int line_number, int begin, int end) { RES res = ResourceLoader::load(fpath); - edit(res); - - ScriptEditorBase *seb = _get_current_editor(); + if (fpath.get_extension() == "shader") { + ShaderEditorPlugin *shader_editor = Object::cast_to<ShaderEditorPlugin>(EditorNode::get_singleton()->get_editor_data().get_editor("Shader")); + shader_editor->edit(res.ptr()); + shader_editor->make_visible(true); + shader_editor->get_shader_editor()->goto_line_selection(line_number - 1, begin, end); + } else { + edit(res); - ScriptTextEditor *ste = Object::cast_to<ScriptTextEditor>(seb); - if (ste) { - ste->goto_line_selection(line_number - 1, begin, end); + ScriptTextEditor *ste = Object::cast_to<ScriptTextEditor>(_get_current_editor()); + if (ste) { + ste->goto_line_selection(line_number - 1, begin, end); + } } } @@ -2971,10 +2977,11 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu = memnew(MenuButton); menu_hb->add_child(file_menu); file_menu->set_text(TTR("File")); + file_menu->set_switch_on_hover(true); file_menu->get_popup()->set_hide_on_window_lose_focus(true); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new", TTR("New Script")), FILE_NEW); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new_textfile", TTR("New TextFile")), FILE_NEW_TEXTFILE); - file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/open", TTR("Open")), FILE_OPEN); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new", TTR("New Script...")), FILE_NEW); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new_textfile", TTR("New TextFile...")), FILE_NEW_TEXTFILE); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/open", TTR("Open...")), FILE_OPEN); file_menu->get_popup()->add_submenu_item(TTR("Open Recent"), "RecentScripts", FILE_OPEN_RECENT); recent_scripts = memnew(PopupMenu); @@ -3003,10 +3010,11 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { theme_submenu->set_name("Theme"); file_menu->get_popup()->add_child(theme_submenu); theme_submenu->connect("id_pressed", this, "_theme_option"); - theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/import_theme", TTR("Import Theme")), THEME_IMPORT); + theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/import_theme", TTR("Import Theme...")), THEME_IMPORT); theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/reload_theme", TTR("Reload Theme")), THEME_RELOAD); + theme_submenu->add_separator(); theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/save_theme", TTR("Save Theme")), THEME_SAVE); - theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/save_theme_as", TTR("Save Theme As")), THEME_SAVE_AS); + theme_submenu->add_shortcut(ED_SHORTCUT("script_editor/save_theme_as", TTR("Save Theme As...")), THEME_SAVE_AS); file_menu->get_popup()->add_separator(); file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_docs", TTR("Close Docs")), CLOSE_DOCS); @@ -3022,6 +3030,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { script_search_menu = memnew(MenuButton); menu_hb->add_child(script_search_menu); script_search_menu->set_text(TTR("Search")); + script_search_menu->set_switch_on_hover(true); script_search_menu->get_popup()->set_hide_on_window_lose_focus(true); script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F), HELP_SEARCH_FIND); script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), HELP_SEARCH_FIND_NEXT); @@ -3031,6 +3040,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { debug_menu = memnew(MenuButton); menu_hb->add_child(debug_menu); debug_menu->set_text(TTR("Debug")); + debug_menu->set_switch_on_hover(true); debug_menu->get_popup()->set_hide_on_window_lose_focus(true); debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10), DEBUG_NEXT); debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_into", TTR("Step Into"), KEY_F11), DEBUG_STEP); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index e6bb8b24a9..6d4b1d1b9c 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -131,6 +131,7 @@ void ScriptTextEditor::_load_theme_settings() { Color safe_line_number_color = EDITOR_GET("text_editor/highlighting/safe_line_number_color"); Color caret_color = EDITOR_GET("text_editor/highlighting/caret_color"); Color caret_background_color = EDITOR_GET("text_editor/highlighting/caret_background_color"); + Color indent_guide_color = EDITOR_GET("text_editor/highlighting/indent_guide_color"); Color text_selected_color = EDITOR_GET("text_editor/highlighting/text_selected_color"); Color selection_color = EDITOR_GET("text_editor/highlighting/selection_color"); Color brace_mismatch_color = EDITOR_GET("text_editor/highlighting/brace_mismatch_color"); @@ -163,6 +164,7 @@ void ScriptTextEditor::_load_theme_settings() { text_edit->add_color_override("safe_line_number_color", safe_line_number_color); text_edit->add_color_override("caret_color", caret_color); text_edit->add_color_override("caret_background_color", caret_background_color); + text_edit->add_color_override("indent_guide_color", indent_guide_color); text_edit->add_color_override("font_selected_color", text_selected_color); text_edit->add_color_override("selection_color", selection_color); text_edit->add_color_override("brace_mismatch_color", brace_mismatch_color); @@ -1076,7 +1078,7 @@ void ScriptTextEditor::set_syntax_highlighter(SyntaxHighlighter *p_highlighter) if (p_highlighter != NULL) highlighter_menu->set_item_checked(highlighter_menu->get_item_idx_from_text(p_highlighter->get_name()), true); else - highlighter_menu->set_item_checked(highlighter_menu->get_item_idx_from_text("Standard"), true); + highlighter_menu->set_item_checked(highlighter_menu->get_item_idx_from_text(TTR("Standard")), true); } void ScriptTextEditor::_change_syntax_highlighter(int p_idx) { @@ -1466,6 +1468,7 @@ ScriptTextEditor::ScriptTextEditor() { edit_menu = memnew(MenuButton); edit_menu->set_text(TTR("Edit")); + edit_menu->set_switch_on_hover(true); edit_menu->get_popup()->set_hide_on_window_lose_focus(true); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/undo"), EDIT_UNDO); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/redo"), EDIT_REDO); @@ -1509,7 +1512,7 @@ ScriptTextEditor::ScriptTextEditor() { convert_case->add_shortcut(ED_SHORTCUT("script_text_editor/capitalize", TTR("Capitalize"), KEY_MASK_SHIFT | KEY_F6), EDIT_CAPITALIZE); convert_case->connect("id_pressed", this, "_edit_option"); - highlighters["Standard"] = NULL; + highlighters[TTR("Standard")] = NULL; highlighter_menu = memnew(PopupMenu); highlighter_menu->set_name("highlighter_menu"); edit_menu->get_popup()->add_child(highlighter_menu); @@ -1520,6 +1523,7 @@ ScriptTextEditor::ScriptTextEditor() { search_menu = memnew(MenuButton); edit_hb->add_child(search_menu); search_menu->set_text(TTR("Search")); + search_menu->set_switch_on_hover(true); search_menu->get_popup()->set_hide_on_window_lose_focus(true); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find"), SEARCH_FIND); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_next"), SEARCH_FIND_NEXT); diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index 6bc5c77df2..e3389f25cf 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -70,6 +70,7 @@ void ShaderTextEditor::_load_theme_settings() { Color line_number_color = EDITOR_GET("text_editor/highlighting/line_number_color"); Color caret_color = EDITOR_GET("text_editor/highlighting/caret_color"); Color caret_background_color = EDITOR_GET("text_editor/highlighting/caret_background_color"); + Color indent_guide_color = EDITOR_GET("text_editor/highlighting/indent_guide_color"); Color text_selected_color = EDITOR_GET("text_editor/highlighting/text_selected_color"); Color selection_color = EDITOR_GET("text_editor/highlighting/selection_color"); Color brace_mismatch_color = EDITOR_GET("text_editor/highlighting/brace_mismatch_color"); @@ -98,6 +99,7 @@ void ShaderTextEditor::_load_theme_settings() { get_text_edit()->add_color_override("line_number_color", line_number_color); get_text_edit()->add_color_override("caret_color", caret_color); get_text_edit()->add_color_override("caret_background_color", caret_background_color); + get_text_edit()->add_color_override("indent_guide_color", indent_guide_color); get_text_edit()->add_color_override("font_selected_color", text_selected_color); get_text_edit()->add_color_override("selection_color", selection_color); get_text_edit()->add_color_override("brace_mismatch_color", brace_mismatch_color); @@ -350,9 +352,9 @@ void ShaderEditor::_menu_option(int p_option) { void ShaderEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { - } - if (p_what == NOTIFICATION_DRAW) { + if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { + if (is_visible_in_tree()) + shader_editor->get_text_edit()->grab_focus(); } } @@ -368,6 +370,7 @@ void ShaderEditor::_editor_settings_changed() { shader_editor->get_text_edit()->set_indent_size(EditorSettings::get_singleton()->get("text_editor/indent/size")); shader_editor->get_text_edit()->set_indent_using_spaces(EditorSettings::get_singleton()->get("text_editor/indent/type")); shader_editor->get_text_edit()->set_auto_indent(EditorSettings::get_singleton()->get("text_editor/indent/auto_indent")); + shader_editor->get_text_edit()->set_draw_indent_guides(EditorSettings::get_singleton()->get("text_editor/indent/draw_indent_guides")); shader_editor->get_text_edit()->set_draw_tabs(EditorSettings::get_singleton()->get("text_editor/indent/draw_tabs")); shader_editor->get_text_edit()->set_show_line_numbers(EditorSettings::get_singleton()->get("text_editor/line_numbers/show_line_numbers")); shader_editor->get_text_edit()->set_syntax_coloring(EditorSettings::get_singleton()->get("text_editor/highlighting/syntax_highlighting")); @@ -389,7 +392,6 @@ void ShaderEditor::_bind_methods() { ClassDB::bind_method("_menu_option", &ShaderEditor::_menu_option); ClassDB::bind_method("_params_changed", &ShaderEditor::_params_changed); ClassDB::bind_method("apply_shaders", &ShaderEditor::apply_shaders); - //ClassDB::bind_method("_close_current_tab",&ShaderEditor::_close_current_tab); } void ShaderEditor::ensure_select_current() { @@ -405,6 +407,11 @@ void ShaderEditor::ensure_select_current() { }*/ } +void ShaderEditor::goto_line_selection(int p_line, int p_begin, int p_end) { + + shader_editor->goto_line_selection(p_line, p_begin, p_end); +} + void ShaderEditor::edit(const Ref<Shader> &p_shader) { if (p_shader.is_null() || !p_shader->is_text_shader()) @@ -527,9 +534,8 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { HBoxContainer *hbc = memnew(HBoxContainer); edit_menu = memnew(MenuButton); - //edit_menu->set_position(Point2(5, -1)); edit_menu->set_text(TTR("Edit")); - + edit_menu->set_switch_on_hover(true); edit_menu->get_popup()->set_hide_on_window_lose_focus(true); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/undo"), EDIT_UNDO); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/redo"), EDIT_REDO); @@ -549,12 +555,11 @@ ShaderEditor::ShaderEditor(EditorNode *p_node) { edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/clone_down"), EDIT_CLONE_DOWN); edit_menu->get_popup()->add_separator(); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/complete_symbol"), EDIT_COMPLETE); - edit_menu->get_popup()->connect("id_pressed", this, "_menu_option"); search_menu = memnew(MenuButton); - //search_menu->set_position(Point2(38, -1)); search_menu->set_text(TTR("Search")); + search_menu->set_switch_on_hover(true); search_menu->get_popup()->set_hide_on_window_lose_focus(true); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find"), SEARCH_FIND); search_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("script_text_editor/find_next"), SEARCH_FIND_NEXT); diff --git a/editor/plugins/shader_editor_plugin.h b/editor/plugins/shader_editor_plugin.h index 2ea1562310..46e3dffdd5 100644 --- a/editor/plugins/shader_editor_plugin.h +++ b/editor/plugins/shader_editor_plugin.h @@ -120,6 +120,8 @@ public: void ensure_select_current(); void edit(const Ref<Shader> &p_shader); + void goto_line_selection(int p_line, int p_begin, int p_end); + virtual Size2 get_minimum_size() const { return Size2(0, 200); } void save_external_data(); @@ -143,6 +145,8 @@ public: virtual void make_visible(bool p_visible); virtual void selected_notify(); + ShaderEditor *get_shader_editor() const { return shader_editor; } + virtual void save_external_data(); virtual void apply_changes(); diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index cc5f50a834..4fe278d005 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -5475,6 +5475,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { transform_menu = memnew(MenuButton); transform_menu->set_text(TTR("Transform")); + transform_menu->set_switch_on_hover(true); hbc_menu->add_child(transform_menu); p = transform_menu->get_popup(); @@ -5487,6 +5488,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) { view_menu = memnew(MenuButton); view_menu->set_text(TTR("View")); + view_menu->set_switch_on_hover(true); hbc_menu->add_child(view_menu); p = view_menu->get_popup(); diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp index 4a8eae1ba4..52dd115b3e 100644 --- a/editor/plugins/text_editor.cpp +++ b/editor/plugins/text_editor.cpp @@ -84,6 +84,7 @@ void TextEditor::_load_theme_settings() { Color line_number_color = EDITOR_GET("text_editor/highlighting/line_number_color"); Color caret_color = EDITOR_GET("text_editor/highlighting/caret_color"); Color caret_background_color = EDITOR_GET("text_editor/highlighting/caret_background_color"); + Color indent_guide_color = EDITOR_GET("text_editor/highlighting/indent_guide_color"); Color text_selected_color = EDITOR_GET("text_editor/highlighting/text_selected_color"); Color selection_color = EDITOR_GET("text_editor/highlighting/selection_color"); Color brace_mismatch_color = EDITOR_GET("text_editor/highlighting/brace_mismatch_color"); @@ -115,6 +116,7 @@ void TextEditor::_load_theme_settings() { text_edit->add_color_override("line_number_color", line_number_color); text_edit->add_color_override("caret_color", caret_color); text_edit->add_color_override("caret_background_color", caret_background_color); + text_edit->add_color_override("indent_guide_color", indent_guide_color); text_edit->add_color_override("font_selected_color", text_selected_color); text_edit->add_color_override("selection_color", selection_color); text_edit->add_color_override("brace_mismatch_color", brace_mismatch_color); diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp index 7c3e524d89..aed3a7d503 100644 --- a/editor/plugins/texture_region_editor_plugin.cpp +++ b/editor/plugins/texture_region_editor_plugin.cpp @@ -169,15 +169,24 @@ void TextureRegionEditor::_region_draw() { updating_scroll = true; hscroll->set_min(scroll_rect.position.x); hscroll->set_max(scroll_rect.position.x + scroll_rect.size.x); - hscroll->set_page(edit_draw->get_size().x); - hscroll->set_value(draw_ofs.x); - hscroll->set_step(0.001); + if (ABS(scroll_rect.position.x - (scroll_rect.position.x + scroll_rect.size.x)) <= edit_draw->get_size().x) { + hscroll->hide(); + } else { + hscroll->show(); + hscroll->set_page(edit_draw->get_size().x); + hscroll->set_value(draw_ofs.x); + } vscroll->set_min(scroll_rect.position.y); vscroll->set_max(scroll_rect.position.y + scroll_rect.size.y); - vscroll->set_page(edit_draw->get_size().y); - vscroll->set_value(draw_ofs.y); - vscroll->set_step(0.001); + if (ABS(scroll_rect.position.y - (scroll_rect.position.y + scroll_rect.size.y)) <= edit_draw->get_size().y) { + vscroll->hide(); + draw_ofs.y = scroll_rect.position.y; + } else { + vscroll->show(); + vscroll->set_page(edit_draw->get_size().y); + vscroll->set_value(draw_ofs.y); + } updating_scroll = false; float margins[4]; @@ -299,6 +308,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { undo_redo->add_do_method(atlas_tex.ptr(), "set_region", rect); undo_redo->add_undo_method(atlas_tex.ptr(), "set_region", atlas_tex->get_region()); } + undo_redo->add_do_method(this, "_update_rect"); + undo_redo->add_undo_method(this, "_update_rect"); undo_redo->add_do_method(edit_draw, "update"); undo_redo->add_undo_method(edit_draw, "update"); undo_redo->commit_action(); @@ -336,7 +347,7 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { } else if (drag) { if (edited_margin >= 0) { - undo_redo->create_action("Set Margin"); + undo_redo->create_action(TTR("Set Margin")); static Margin m[4] = { MARGIN_TOP, MARGIN_BOTTOM, MARGIN_LEFT, MARGIN_RIGHT }; if (node_ninepatch) { undo_redo->add_do_method(node_ninepatch, "set_patch_margin", m[edited_margin], node_ninepatch->get_patch_margin(m[edited_margin])); @@ -348,7 +359,7 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { } edited_margin = -1; } else { - undo_redo->create_action("Set Region Rect"); + undo_redo->create_action(TTR("Set Region Rect")); if (node_sprite) { undo_redo->add_do_method(node_sprite, "set_region_rect", node_sprite->get_region_rect()); undo_redo->add_undo_method(node_sprite, "set_region_rect", rect_prev); @@ -364,6 +375,8 @@ void TextureRegionEditor::_region_input(const Ref<InputEvent> &p_input) { } drag_index = -1; } + undo_redo->add_do_method(this, "_update_rect"); + undo_redo->add_undo_method(this, "_update_rect"); undo_redo->add_do_method(edit_draw, "update"); undo_redo->add_undo_method(edit_draw, "update"); undo_redo->commit_action(); @@ -509,10 +522,7 @@ void TextureRegionEditor::_scroll_changed(float) { } void TextureRegionEditor::_set_snap_mode(int p_mode) { - snap_mode_button->get_popup()->set_item_checked(snap_mode, false); snap_mode = p_mode; - snap_mode_button->set_text(snap_mode_button->get_popup()->get_item_text(p_mode)); - snap_mode_button->get_popup()->set_item_checked(snap_mode, true); if (snap_mode == SNAP_GRID) hb_grid->show(); @@ -577,15 +587,26 @@ void TextureRegionEditor::_zoom_out() { } } -void TextureRegionEditor::apply_rect(const Rect2 &rect) { +void TextureRegionEditor::apply_rect(const Rect2 &p_rect) { + if (node_sprite) + node_sprite->set_region_rect(p_rect); + else if (node_ninepatch) + node_ninepatch->set_region_rect(p_rect); + else if (obj_styleBox.is_valid()) + obj_styleBox->set_region_rect(p_rect); + else if (atlas_tex.is_valid()) + atlas_tex->set_region(p_rect); +} + +void TextureRegionEditor::_update_rect() { if (node_sprite) - node_sprite->set_region_rect(rect); + rect = node_sprite->get_region_rect(); else if (node_ninepatch) - node_ninepatch->set_region_rect(rect); + rect = node_ninepatch->get_region_rect(); else if (obj_styleBox.is_valid()) - obj_styleBox->set_region_rect(rect); + rect = obj_styleBox->get_region_rect(); else if (atlas_tex.is_valid()) - atlas_tex->set_region(rect); + rect = atlas_tex->get_region(); } void TextureRegionEditor::_update_autoslice() { @@ -657,6 +678,10 @@ void TextureRegionEditor::_update_autoslice() { void TextureRegionEditor::_notification(int p_what) { switch (p_what) { + case NOTIFICATION_ENTER_TREE: + case NOTIFICATION_THEME_CHANGED: { + edit_draw->add_style_override("panel", get_stylebox("bg", "Tree")); + } break; case NOTIFICATION_READY: { zoom_out->set_icon(get_icon("ZoomLess", "EditorIcons")); zoom_reset->set_icon(get_icon("ZoomReset", "EditorIcons")); @@ -669,7 +694,7 @@ void TextureRegionEditor::_notification(int p_what) { } break; case MainLoop::NOTIFICATION_WM_FOCUS_IN: { // This happens when the user leaves the Editor and returns, - // he/she could have changed the textures, so the cache is cleared + // they could have changed the textures, so the cache is cleared. cache_map.clear(); _edit_region(); } break; @@ -702,6 +727,7 @@ void TextureRegionEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_zoom_in"), &TextureRegionEditor::_zoom_in); ClassDB::bind_method(D_METHOD("_zoom_reset"), &TextureRegionEditor::_zoom_reset); ClassDB::bind_method(D_METHOD("_zoom_out"), &TextureRegionEditor::_zoom_out); + ClassDB::bind_method(D_METHOD("_update_rect"), &TextureRegionEditor::_update_rect); } bool TextureRegionEditor::is_stylebox() { @@ -774,6 +800,9 @@ void TextureRegionEditor::_edit_region() { texture = atlas_tex->get_atlas(); if (texture.is_null()) { + _zoom_reset(); + hscroll->hide(); + vscroll->hide(); edit_draw->update(); return; } @@ -790,15 +819,7 @@ void TextureRegionEditor::_edit_region() { } } - if (node_sprite) - rect = node_sprite->get_region_rect(); - else if (node_ninepatch) - rect = node_ninepatch->get_region_rect(); - else if (obj_styleBox.is_valid()) - rect = obj_styleBox->get_region_rect(); - else if (atlas_tex.is_valid()) - rect = atlas_tex->get_region(); - + _update_rect(); edit_draw->update(); } @@ -826,30 +847,23 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { drag_index = -1; drag = false; - VBoxContainer *main_vb = memnew(VBoxContainer); - add_child(main_vb); - main_vb->set_anchors_and_margins_preset(Control::PRESET_WIDE); HBoxContainer *hb_tools = memnew(HBoxContainer); - main_vb->add_child(hb_tools); - + add_child(hb_tools); hb_tools->add_child(memnew(Label(TTR("Snap Mode:")))); - snap_mode_button = memnew(MenuButton); + snap_mode_button = memnew(OptionButton); hb_tools->add_child(snap_mode_button); - snap_mode_button->set_text(TTR("<None>")); - PopupMenu *p = snap_mode_button->get_popup(); - p->set_hide_on_checkable_item_selection(false); - p->add_radio_check_item(TTR("<None>"), 0); - p->add_radio_check_item(TTR("Pixel Snap"), 1); - p->add_radio_check_item(TTR("Grid Snap"), 2); - p->add_radio_check_item(TTR("Auto Slice"), 3); - p->set_item_checked(0, true); - p->connect("id_pressed", this, "_set_snap_mode"); + snap_mode_button->add_item(TTR("None"), 0); + snap_mode_button->add_item(TTR("Pixel Snap"), 1); + snap_mode_button->add_item(TTR("Grid Snap"), 2); + snap_mode_button->add_item(TTR("Auto Slice"), 3); + snap_mode_button->select(0); + snap_mode_button->connect("item_selected", this, "_set_snap_mode"); + hb_grid = memnew(HBoxContainer); - //hb_tools->add_child(hb_grid); - main_vb->add_child(hb_grid); - hb_grid->add_child(memnew(VSeparator)); + hb_tools->add_child(hb_grid); + hb_grid->add_child(memnew(VSeparator)); hb_grid->add_child(memnew(Label(TTR("Offset:")))); sb_off_x = memnew(SpinBox); @@ -914,42 +928,47 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) { hb_grid->hide(); - HBoxContainer *main_hb = memnew(HBoxContainer); - main_vb->add_child(main_hb); - edit_draw = memnew(Control); - main_hb->add_child(edit_draw); - main_hb->set_v_size_flags(SIZE_EXPAND_FILL); - edit_draw->set_h_size_flags(SIZE_EXPAND_FILL); + edit_draw = memnew(Panel); + add_child(edit_draw); + edit_draw->set_v_size_flags(SIZE_EXPAND_FILL); + edit_draw->connect("draw", this, "_region_draw"); + edit_draw->connect("gui_input", this, "_region_input"); + + draw_zoom = 1.0; + edit_draw->set_clip_contents(true); - Control *separator = memnew(Control); - separator->set_h_size_flags(Control::SIZE_EXPAND_FILL); - hb_tools->add_child(separator); + HBoxContainer *zoom_hb = memnew(HBoxContainer); + edit_draw->add_child(zoom_hb); + zoom_hb->set_begin(Point2(5, 5)); zoom_out = memnew(ToolButton); + zoom_out->set_tooltip(TTR("Zoom Out")); zoom_out->connect("pressed", this, "_zoom_out"); - hb_tools->add_child(zoom_out); + zoom_hb->add_child(zoom_out); zoom_reset = memnew(ToolButton); + zoom_out->set_tooltip(TTR("Zoom Reset")); zoom_reset->connect("pressed", this, "_zoom_reset"); - hb_tools->add_child(zoom_reset); + zoom_hb->add_child(zoom_reset); zoom_in = memnew(ToolButton); + zoom_out->set_tooltip(TTR("Zoom In")); zoom_in->connect("pressed", this, "_zoom_in"); - hb_tools->add_child(zoom_in); + zoom_hb->add_child(zoom_in); vscroll = memnew(VScrollBar); - main_hb->add_child(vscroll); + vscroll->set_step(0.001); + edit_draw->add_child(vscroll); + vscroll->set_anchors_and_margins_preset(PRESET_RIGHT_WIDE); vscroll->connect("value_changed", this, "_scroll_changed"); hscroll = memnew(HScrollBar); - main_vb->add_child(hscroll); + hscroll->set_step(0.001); + edit_draw->add_child(hscroll); + hscroll->set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE); + hscroll->set_margin(MARGIN_RIGHT, -vscroll->get_size().x * EDSCALE); hscroll->connect("value_changed", this, "_scroll_changed"); - edit_draw->connect("draw", this, "_region_draw"); - edit_draw->connect("gui_input", this, "_region_input"); - draw_zoom = 1.0; updating_scroll = false; - - edit_draw->set_clip_contents(true); } void TextureRegionEditorPlugin::edit(Object *p_object) { @@ -978,7 +997,6 @@ void TextureRegionEditorPlugin::make_visible(bool p_visible) { Dictionary TextureRegionEditorPlugin::get_state() const { Dictionary state; - state["zoom"] = region_editor->draw_zoom; state["snap_offset"] = region_editor->snap_offset; state["snap_step"] = region_editor->snap_step; state["snap_separation"] = region_editor->snap_separation; @@ -989,10 +1007,6 @@ Dictionary TextureRegionEditorPlugin::get_state() const { void TextureRegionEditorPlugin::set_state(const Dictionary &p_state) { Dictionary state = p_state; - if (state.has("zoom")) { - region_editor->draw_zoom = p_state["zoom"]; - } - if (state.has("snap_step")) { Vector2 s = state["snap_step"]; region_editor->sb_step_x->set_value(s.x); @@ -1016,6 +1030,7 @@ void TextureRegionEditorPlugin::set_state(const Dictionary &p_state) { if (state.has("snap_mode")) { region_editor->_set_snap_mode(state["snap_mode"]); + region_editor->snap_mode_button->select(state["snap_mode"]); } } diff --git a/editor/plugins/texture_region_editor_plugin.h b/editor/plugins/texture_region_editor_plugin.h index 61ef769f89..4f301ea916 100644 --- a/editor/plugins/texture_region_editor_plugin.h +++ b/editor/plugins/texture_region_editor_plugin.h @@ -43,9 +43,9 @@ @author Mariano Suligoy */ -class TextureRegionEditor : public Control { +class TextureRegionEditor : public VBoxContainer { - GDCLASS(TextureRegionEditor, Control); + GDCLASS(TextureRegionEditor, VBoxContainer); enum SnapMode { SNAP_NONE, @@ -55,7 +55,7 @@ class TextureRegionEditor : public Control { }; friend class TextureRegionEditorPlugin; - MenuButton *snap_mode_button; + OptionButton *snap_mode_button; ToolButton *zoom_in; ToolButton *zoom_reset; ToolButton *zoom_out; @@ -66,7 +66,7 @@ class TextureRegionEditor : public Control { SpinBox *sb_off_x; SpinBox *sb_sep_y; SpinBox *sb_sep_x; - Control *edit_draw; + Panel *edit_draw; VScrollBar *vscroll; HScrollBar *hscroll; @@ -111,7 +111,8 @@ class TextureRegionEditor : public Control { void _zoom_in(); void _zoom_reset(); void _zoom_out(); - void apply_rect(const Rect2 &rect); + void apply_rect(const Rect2 &p_rect); + void _update_rect(); void _update_autoslice(); protected: diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index 213cd2ce1a..1d8a80d3f3 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -1862,7 +1862,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { toolbar->add_child(tile_info); options = memnew(MenuButton); - options->set_text("Tile Map"); + options->set_text("TileMap"); options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("TileMap", "EditorIcons")); options->set_process_unhandled_key_input(false); diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index d0e0b3e006..cab9a4297d 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -172,6 +172,7 @@ Error TileSetEditor::update_library_file(Node *p_base_scene, Ref<TileSet> ml, bo } void TileSetEditor::_bind_methods() { + ClassDB::bind_method("_on_tileset_toolbar_button_pressed", &TileSetEditor::_on_tileset_toolbar_button_pressed); ClassDB::bind_method("_on_textures_added", &TileSetEditor::_on_textures_added); ClassDB::bind_method("_on_tileset_toolbar_confirm", &TileSetEditor::_on_tileset_toolbar_confirm); @@ -184,58 +185,69 @@ void TileSetEditor::_bind_methods() { ClassDB::bind_method("_on_workspace_input", &TileSetEditor::_on_workspace_input); ClassDB::bind_method("_on_tool_clicked", &TileSetEditor::_on_tool_clicked); ClassDB::bind_method("_on_priority_changed", &TileSetEditor::_on_priority_changed); + ClassDB::bind_method("_on_z_index_changed", &TileSetEditor::_on_z_index_changed); ClassDB::bind_method("_on_grid_snap_toggled", &TileSetEditor::_on_grid_snap_toggled); ClassDB::bind_method("_set_snap_step", &TileSetEditor::_set_snap_step); ClassDB::bind_method("_set_snap_off", &TileSetEditor::_set_snap_off); ClassDB::bind_method("_set_snap_sep", &TileSetEditor::_set_snap_sep); + ClassDB::bind_method("_zoom_in", &TileSetEditor::_zoom_in); + ClassDB::bind_method("_zoom_out", &TileSetEditor::_zoom_out); + ClassDB::bind_method("_zoom_reset", &TileSetEditor::_zoom_reset); } void TileSetEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { - - tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_icon(get_icon("ToolAddNode", "EditorIcons")); - tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->set_icon(get_icon("Remove", "EditorIcons")); - tileset_toolbar_tools->set_icon(get_icon("Tools", "EditorIcons")); - - tool_workspacemode[WORKSPACE_EDIT]->set_icon(get_icon("Edit", "EditorIcons")); - tool_workspacemode[WORKSPACE_CREATE_SINGLE]->set_icon(get_icon("AddSingleTile", "EditorIcons")); - tool_workspacemode[WORKSPACE_CREATE_AUTOTILE]->set_icon(get_icon("AddAutotile", "EditorIcons")); - tool_workspacemode[WORKSPACE_CREATE_ATLAS]->set_icon(get_icon("AddAtlasTile", "EditorIcons")); - - tools[TOOL_SELECT]->set_icon(get_icon("ToolSelect", "EditorIcons")); - tools[BITMASK_COPY]->set_icon(get_icon("Duplicate", "EditorIcons")); - tools[BITMASK_PASTE]->set_icon(get_icon("Override", "EditorIcons")); - tools[BITMASK_CLEAR]->set_icon(get_icon("Clear", "EditorIcons")); - tools[SHAPE_NEW_POLYGON]->set_icon(get_icon("CollisionPolygon2D", "EditorIcons")); - tools[SHAPE_DELETE]->set_icon(get_icon("Remove", "EditorIcons")); - tools[SHAPE_KEEP_INSIDE_TILE]->set_icon(get_icon("Snap", "EditorIcons")); - tools[TOOL_GRID_SNAP]->set_icon(get_icon("SnapGrid", "EditorIcons")); - tools[ZOOM_OUT]->set_icon(get_icon("ZoomLess", "EditorIcons")); - tools[ZOOM_1]->set_icon(get_icon("ZoomReset", "EditorIcons")); - tools[ZOOM_IN]->set_icon(get_icon("ZoomMore", "EditorIcons")); - tools[VISIBLE_INFO]->set_icon(get_icon("InformationSign", "EditorIcons")); - - tool_editmode[EDITMODE_REGION]->set_icon(get_icon("RegionEdit", "EditorIcons")); - tool_editmode[EDITMODE_COLLISION]->set_icon(get_icon("StaticBody2D", "EditorIcons")); - tool_editmode[EDITMODE_OCCLUSION]->set_icon(get_icon("LightOccluder2D", "EditorIcons")); - tool_editmode[EDITMODE_NAVIGATION]->set_icon(get_icon("Navigation2D", "EditorIcons")); - tool_editmode[EDITMODE_BITMASK]->set_icon(get_icon("PackedDataContainer", "EditorIcons")); - tool_editmode[EDITMODE_PRIORITY]->set_icon(get_icon("MaterialPreviewLight1", "EditorIcons")); - tool_editmode[EDITMODE_ICON]->set_icon(get_icon("LargeTexture", "EditorIcons")); + + switch (p_what) { + case NOTIFICATION_READY: { + + add_constant_override("autohide", 1); // Fixes the dragger always showing up. + } break; + case NOTIFICATION_ENTER_TREE: + case NOTIFICATION_THEME_CHANGED: { + + tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_icon(get_icon("ToolAddNode", "EditorIcons")); + tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->set_icon(get_icon("Remove", "EditorIcons")); + tileset_toolbar_tools->set_icon(get_icon("Tools", "EditorIcons")); + + tool_workspacemode[WORKSPACE_EDIT]->set_icon(get_icon("Edit", "EditorIcons")); + tool_workspacemode[WORKSPACE_CREATE_SINGLE]->set_icon(get_icon("AddSingleTile", "EditorIcons")); + tool_workspacemode[WORKSPACE_CREATE_AUTOTILE]->set_icon(get_icon("AddAutotile", "EditorIcons")); + tool_workspacemode[WORKSPACE_CREATE_ATLAS]->set_icon(get_icon("AddAtlasTile", "EditorIcons")); + + tools[TOOL_SELECT]->set_icon(get_icon("ToolSelect", "EditorIcons")); + tools[BITMASK_COPY]->set_icon(get_icon("Duplicate", "EditorIcons")); + tools[BITMASK_PASTE]->set_icon(get_icon("Override", "EditorIcons")); + tools[BITMASK_CLEAR]->set_icon(get_icon("Clear", "EditorIcons")); + tools[SHAPE_NEW_POLYGON]->set_icon(get_icon("CollisionPolygon2D", "EditorIcons")); + tools[SHAPE_DELETE]->set_icon(get_icon("Remove", "EditorIcons")); + tools[SHAPE_KEEP_INSIDE_TILE]->set_icon(get_icon("Snap", "EditorIcons")); + tools[TOOL_GRID_SNAP]->set_icon(get_icon("SnapGrid", "EditorIcons")); + tools[ZOOM_OUT]->set_icon(get_icon("ZoomLess", "EditorIcons")); + tools[ZOOM_1]->set_icon(get_icon("ZoomReset", "EditorIcons")); + tools[ZOOM_IN]->set_icon(get_icon("ZoomMore", "EditorIcons")); + tools[VISIBLE_INFO]->set_icon(get_icon("InformationSign", "EditorIcons")); + + tool_editmode[EDITMODE_REGION]->set_icon(get_icon("RegionEdit", "EditorIcons")); + tool_editmode[EDITMODE_COLLISION]->set_icon(get_icon("StaticBody2D", "EditorIcons")); + tool_editmode[EDITMODE_OCCLUSION]->set_icon(get_icon("LightOccluder2D", "EditorIcons")); + tool_editmode[EDITMODE_NAVIGATION]->set_icon(get_icon("Navigation2D", "EditorIcons")); + tool_editmode[EDITMODE_BITMASK]->set_icon(get_icon("PackedDataContainer", "EditorIcons")); + tool_editmode[EDITMODE_PRIORITY]->set_icon(get_icon("MaterialPreviewLight1", "EditorIcons")); + tool_editmode[EDITMODE_ICON]->set_icon(get_icon("LargeTexture", "EditorIcons")); + tool_editmode[EDITMODE_Z_INDEX]->set_icon(get_icon("Sort", "EditorIcons")); + + scroll->add_style_override("bg", get_stylebox("bg", "Tree")); + } break; } } TileSetEditor::TileSetEditor(EditorNode *p_editor) { editor = p_editor; - set_name("Tile Set Bottom Editor"); - - HSplitContainer *split = memnew(HSplitContainer); - split->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_MINSIZE, 10); - add_child(split); + current_tile = -1; VBoxContainer *left_container = memnew(VBoxContainer); - split->add_child(left_container); + add_child(left_container); texture_list = memnew(ItemList); left_container->add_child(texture_list); @@ -247,30 +259,22 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { left_container->add_child(tileset_toolbar_container); tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE] = memnew(ToolButton); - Vector<Variant> p; - p.push_back((int)TOOL_TILESET_ADD_TEXTURE); - tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", p); + tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", varray(TOOL_TILESET_ADD_TEXTURE)); tileset_toolbar_container->add_child(tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]); - tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_tooltip(TTR("Add Texture(s) to TileSet")); + tileset_toolbar_buttons[TOOL_TILESET_ADD_TEXTURE]->set_tooltip(TTR("Add Texture(s) to TileSet.")); tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)TOOL_TILESET_REMOVE_TEXTURE); - tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", p); + tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->connect("pressed", this, "_on_tileset_toolbar_button_pressed", varray(TOOL_TILESET_REMOVE_TEXTURE)); tileset_toolbar_container->add_child(tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]); - tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->set_tooltip(TTR("Remove current Texture from TileSet")); + tileset_toolbar_buttons[TOOL_TILESET_REMOVE_TEXTURE]->set_tooltip(TTR("Remove selected Texture from TileSet.")); Control *toolbar_separator = memnew(Control); toolbar_separator->set_h_size_flags(Control::SIZE_EXPAND_FILL); tileset_toolbar_container->add_child(toolbar_separator); tileset_toolbar_tools = memnew(MenuButton); - tileset_toolbar_tools->set_text("Tools"); - p = Vector<Variant>(); - p.push_back((int)TOOL_TILESET_CREATE_SCENE); + tileset_toolbar_tools->set_text(TTR("Tools")); tileset_toolbar_tools->get_popup()->add_item(TTR("Create from Scene"), TOOL_TILESET_CREATE_SCENE); - p = Vector<Variant>(); - p.push_back((int)TOOL_TILESET_MERGE_SCENE); tileset_toolbar_tools->get_popup()->add_item(TTR("Merge from Scene"), TOOL_TILESET_MERGE_SCENE); tileset_toolbar_tools->get_popup()->connect("id_pressed", this, "_on_tileset_toolbar_button_pressed"); @@ -279,7 +283,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { //--------------- VBoxContainer *right_container = memnew(VBoxContainer); right_container->set_v_size_flags(SIZE_EXPAND_FILL); - split->add_child(right_container); + add_child(right_container); dragging_point = -1; creating_shape = false; @@ -296,21 +300,18 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { Ref<ButtonGroup> g(memnew(ButtonGroup)); String workspace_label[WORKSPACE_MODE_MAX] = { "Edit", "New Single Tile", "New Autotile", "New Atlas" }; - for (int i = 0; i < (int)WORKSPACE_MODE_MAX; i++) { tool_workspacemode[i] = memnew(Button); - tool_workspacemode[i]->set_text(workspace_label[i]); + tool_workspacemode[i]->set_text(TTR(workspace_label[i])); tool_workspacemode[i]->set_toggle_mode(true); tool_workspacemode[i]->set_button_group(g); - Vector<Variant> p; - p.push_back(i); - tool_workspacemode[i]->connect("pressed", this, "_on_workspace_mode_changed", p); + tool_workspacemode[i]->connect("pressed", this, "_on_workspace_mode_changed", varray(i)); tool_hb->add_child(tool_workspacemode[i]); } Control *spacer = memnew(Control); spacer->set_h_size_flags(Control::SIZE_EXPAND_FILL); tool_hb->add_child(spacer); - tool_hb->move_child(spacer, (int)WORKSPACE_CREATE_SINGLE); + tool_hb->move_child(spacer, WORKSPACE_CREATE_SINGLE); tool_workspacemode[WORKSPACE_EDIT]->set_pressed(true); workspace_mode = WORKSPACE_EDIT; @@ -321,16 +322,13 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tool_hb = memnew(HBoxContainer); g = Ref<ButtonGroup>(memnew(ButtonGroup)); - String label[EDITMODE_MAX] = { "Region", "Collision", "Occlusion", "Navigation", "Bitmask", "Priority", "Icon" }; - + String label[EDITMODE_MAX] = { "Region", "Collision", "Occlusion", "Navigation", "Bitmask", "Priority", "Icon", "Z Index" }; for (int i = 0; i < (int)EDITMODE_MAX; i++) { tool_editmode[i] = memnew(Button); tool_editmode[i]->set_text(label[i]); tool_editmode[i]->set_toggle_mode(true); tool_editmode[i]->set_button_group(g); - Vector<Variant> p; - p.push_back(i); - tool_editmode[i]->connect("pressed", this, "_on_edit_mode_changed", p); + tool_editmode[i]->connect("pressed", this, "_on_edit_mode_changed", varray(i)); tool_hb->add_child(tool_editmode[i]); } tool_editmode[EDITMODE_COLLISION]->set_pressed(true); @@ -343,42 +341,38 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { toolbar = memnew(HBoxContainer); Ref<ButtonGroup> tg(memnew(ButtonGroup)); - p = Vector<Variant>(); tools[TOOL_SELECT] = memnew(ToolButton); toolbar->add_child(tools[TOOL_SELECT]); - tools[TOOL_SELECT]->set_tooltip(TTR("Select sub-tile to use as icon, this will be also used on invalid autotile bindings.")); tools[TOOL_SELECT]->set_toggle_mode(true); tools[TOOL_SELECT]->set_button_group(tg); tools[TOOL_SELECT]->set_pressed(true); - p.push_back((int)TOOL_SELECT); - tools[TOOL_SELECT]->connect("pressed", this, "_on_tool_clicked", p); + tools[TOOL_SELECT]->connect("pressed", this, "_on_tool_clicked", varray(TOOL_SELECT)); + separator_bitmask = memnew(VSeparator); + toolbar->add_child(separator_bitmask); tools[BITMASK_COPY] = memnew(ToolButton); - p.push_back((int)BITMASK_COPY); - tools[BITMASK_COPY]->connect("pressed", this, "_on_tool_clicked", p); + tools[BITMASK_COPY]->set_tooltip(TTR("Copy bitmask.")); + tools[BITMASK_COPY]->connect("pressed", this, "_on_tool_clicked", varray(BITMASK_COPY)); toolbar->add_child(tools[BITMASK_COPY]); tools[BITMASK_PASTE] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)BITMASK_PASTE); - tools[BITMASK_PASTE]->connect("pressed", this, "_on_tool_clicked", p); + tools[BITMASK_PASTE]->set_tooltip(TTR("Paste bitmask.")); + tools[BITMASK_PASTE]->connect("pressed", this, "_on_tool_clicked", varray(BITMASK_PASTE)); toolbar->add_child(tools[BITMASK_PASTE]); tools[BITMASK_CLEAR] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)BITMASK_CLEAR); - tools[BITMASK_CLEAR]->connect("pressed", this, "_on_tool_clicked", p); + tools[BITMASK_CLEAR]->set_tooltip(TTR("Erase bitmask.")); + tools[BITMASK_CLEAR]->connect("pressed", this, "_on_tool_clicked", varray(BITMASK_CLEAR)); toolbar->add_child(tools[BITMASK_CLEAR]); tools[SHAPE_NEW_POLYGON] = memnew(ToolButton); toolbar->add_child(tools[SHAPE_NEW_POLYGON]); tools[SHAPE_NEW_POLYGON]->set_toggle_mode(true); tools[SHAPE_NEW_POLYGON]->set_button_group(tg); + tools[SHAPE_NEW_POLYGON]->set_tooltip(TTR("Create a new polygon.")); separator_delete = memnew(VSeparator); toolbar->add_child(separator_delete); tools[SHAPE_DELETE] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)SHAPE_DELETE); - tools[SHAPE_DELETE]->connect("pressed", this, "_on_tool_clicked", p); + tools[SHAPE_DELETE]->connect("pressed", this, "_on_tool_clicked", varray(SHAPE_DELETE)); toolbar->add_child(tools[SHAPE_DELETE]); separator_grid = memnew(VSeparator); @@ -386,9 +380,11 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { tools[SHAPE_KEEP_INSIDE_TILE] = memnew(ToolButton); tools[SHAPE_KEEP_INSIDE_TILE]->set_toggle_mode(true); tools[SHAPE_KEEP_INSIDE_TILE]->set_pressed(true); + tools[SHAPE_KEEP_INSIDE_TILE]->set_tooltip(TTR("Keep polygon inside region Rect.")); toolbar->add_child(tools[SHAPE_KEEP_INSIDE_TILE]); tools[TOOL_GRID_SNAP] = memnew(ToolButton); tools[TOOL_GRID_SNAP]->set_toggle_mode(true); + tools[TOOL_GRID_SNAP]->set_tooltip(TTR("Enable snap and show grid (configurable via the Inspector).")); tools[TOOL_GRID_SNAP]->connect("toggled", this, "_on_grid_snap_toggled"); toolbar->add_child(tools[TOOL_GRID_SNAP]); @@ -401,32 +397,35 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { spin_priority->hide(); toolbar->add_child(spin_priority); + spin_z_index = memnew(SpinBox); + spin_z_index->set_min(VS::CANVAS_ITEM_Z_MIN); + spin_z_index->set_max(VS::CANVAS_ITEM_Z_MAX); + spin_z_index->set_step(1); + spin_z_index->set_custom_minimum_size(Size2(100, 0)); + spin_z_index->connect("value_changed", this, "_on_z_index_changed"); + spin_z_index->hide(); + toolbar->add_child(spin_z_index); + Control *separator = memnew(Control); separator->set_h_size_flags(SIZE_EXPAND_FILL); toolbar->add_child(separator); tools[ZOOM_OUT] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)ZOOM_OUT); - tools[ZOOM_OUT]->connect("pressed", this, "_on_tool_clicked", p); + tools[ZOOM_OUT]->connect("pressed", this, "_zoom_out"); toolbar->add_child(tools[ZOOM_OUT]); tools[ZOOM_OUT]->set_tooltip(TTR("Zoom Out")); tools[ZOOM_1] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)ZOOM_1); - tools[ZOOM_1]->connect("pressed", this, "_on_tool_clicked", p); + tools[ZOOM_1]->connect("pressed", this, "_zoom_reset"); toolbar->add_child(tools[ZOOM_1]); - tools[ZOOM_1]->set_tooltip(TTR("Reset Zoom")); + tools[ZOOM_1]->set_tooltip(TTR("Zoom Reset")); tools[ZOOM_IN] = memnew(ToolButton); - p = Vector<Variant>(); - p.push_back((int)ZOOM_IN); - tools[ZOOM_IN]->connect("pressed", this, "_on_tool_clicked", p); + tools[ZOOM_IN]->connect("pressed", this, "_zoom_in"); toolbar->add_child(tools[ZOOM_IN]); tools[ZOOM_IN]->set_tooltip(TTR("Zoom In")); tools[VISIBLE_INFO] = memnew(ToolButton); tools[VISIBLE_INFO]->set_toggle_mode(true); - tools[VISIBLE_INFO]->set_tooltip(TTR("Display tile's names (hold Alt Key)")); + tools[VISIBLE_INFO]->set_tooltip(TTR("Display Tile Names (Hold Alt Key)")); toolbar->add_child(tools[VISIBLE_INFO]); main_vb->add_child(toolbar); @@ -600,10 +599,14 @@ void TileSetEditor::_on_textures_added(const PoolStringArray &p_paths) { } void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { + draw_handles = false; + creating_shape = false; edit_mode = (EditMode)p_edit_mode; switch (edit_mode) { case EDITMODE_REGION: { tools[TOOL_SELECT]->show(); + + separator_bitmask->hide(); tools[BITMASK_COPY]->hide(); tools[BITMASK_PASTE]->hide(); tools[BITMASK_CLEAR]->hide(); @@ -623,30 +626,16 @@ void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { tools[TOOL_SELECT]->set_pressed(true); tools[TOOL_SELECT]->set_tooltip(TTR("Drag handles to edit Rect.\nClick on another Tile to edit it.")); + tools[SHAPE_DELETE]->set_tooltip(TTR("Delete selected Rect.")); spin_priority->hide(); - } break; - case EDITMODE_BITMASK: { - tools[TOOL_SELECT]->show(); - tools[BITMASK_COPY]->show(); - tools[BITMASK_PASTE]->show(); - tools[BITMASK_CLEAR]->show(); - tools[SHAPE_NEW_POLYGON]->hide(); - - separator_delete->hide(); - tools[SHAPE_DELETE]->hide(); - - separator_grid->hide(); - tools[SHAPE_KEEP_INSIDE_TILE]->hide(); - tools[TOOL_GRID_SNAP]->hide(); - - tools[TOOL_SELECT]->set_pressed(true); - tools[TOOL_SELECT]->set_tooltip(TTR("LMB: set bit on.\nRMB: set bit off.\nClick on another Tile to edit it.")); - spin_priority->hide(); + spin_z_index->hide(); } break; case EDITMODE_COLLISION: case EDITMODE_NAVIGATION: case EDITMODE_OCCLUSION: { tools[TOOL_SELECT]->show(); + + separator_bitmask->hide(); tools[BITMASK_COPY]->hide(); tools[BITMASK_PASTE]->hide(); tools[BITMASK_CLEAR]->hide(); @@ -660,11 +649,38 @@ void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { tools[TOOL_GRID_SNAP]->show(); tools[TOOL_SELECT]->set_tooltip(TTR("Select current edited sub-tile.\nClick on another Tile to edit it.")); + tools[SHAPE_DELETE]->set_tooltip(TTR("Delete polygon.")); spin_priority->hide(); + spin_z_index->hide(); + select_coord(edited_shape_coord); } break; - default: { + case EDITMODE_BITMASK: { tools[TOOL_SELECT]->show(); + + separator_bitmask->show(); + tools[BITMASK_COPY]->show(); + tools[BITMASK_PASTE]->show(); + tools[BITMASK_CLEAR]->show(); + tools[SHAPE_NEW_POLYGON]->hide(); + + separator_delete->hide(); + tools[SHAPE_DELETE]->hide(); + + separator_grid->hide(); + tools[SHAPE_KEEP_INSIDE_TILE]->hide(); + tools[TOOL_GRID_SNAP]->hide(); + + tools[TOOL_SELECT]->set_pressed(true); + tools[TOOL_SELECT]->set_tooltip(TTR("LMB: Set bit on.\nRMB: Set bit off.\nClick on another Tile to edit it.")); + spin_priority->hide(); + } break; + case EDITMODE_Z_INDEX: + case EDITMODE_PRIORITY: + case EDITMODE_ICON: { + tools[TOOL_SELECT]->show(); + + separator_bitmask->hide(); tools[BITMASK_COPY]->hide(); tools[BITMASK_PASTE]->hide(); tools[BITMASK_CLEAR]->hide(); @@ -680,11 +696,18 @@ void TileSetEditor::_on_edit_mode_changed(int p_edit_mode) { if (edit_mode == EDITMODE_ICON) { tools[TOOL_SELECT]->set_tooltip(TTR("Select sub-tile to use as icon, this will be also used on invalid autotile bindings.\nClick on another Tile to edit it.")); spin_priority->hide(); - } else { + spin_z_index->hide(); + } else if (edit_mode == EDITMODE_PRIORITY) { tools[TOOL_SELECT]->set_tooltip(TTR("Select sub-tile to change its priority.\nClick on another Tile to edit it.")); spin_priority->show(); + spin_z_index->hide(); + } else { + tools[TOOL_SELECT]->set_tooltip(TTR("Select sub-tile to change its z index.\nClick on another Tile to edit it.")); + spin_priority->hide(); + spin_z_index->show(); } } break; + default: {} } workspace->update(); } @@ -706,15 +729,16 @@ void TileSetEditor::_on_workspace_mode_changed(int p_workspace_mode) { void TileSetEditor::_on_workspace_draw() { - const Color COLOR_AUTOTILE = Color(0.266373, 0.565288, 0.988281); - const Color COLOR_SINGLE = Color(0.988281, 0.909323, 0.266373); - const Color COLOR_ATLAS = Color(0.78653, 0.812835, 0.832031); - - if (tileset.is_null()) - return; - if (!get_current_texture().is_valid()) + if (tileset.is_null() || !get_current_texture().is_valid()) return; + const Color COLOR_AUTOTILE = Color(0.3, 0.6, 1); + const Color COLOR_SINGLE = Color(1, 1, 0.3); + const Color COLOR_ATLAS = Color(0.8, 0.8, 0.8); + const Color COLOR_SUBDIVISION = Color(0.3, 0.7, 0.6); + + draw_handles = false; + draw_highlight_current_tile(); draw_grid_snap(); @@ -808,10 +832,12 @@ void TileSetEditor::_on_workspace_draw() { spin_priority->set_suffix(" / " + String::num(total, 0)); draw_highlight_subtile(edited_shape_coord, queue_others); } break; + case EDITMODE_Z_INDEX: { + spin_z_index->set_value(tileset->autotile_get_z_index(get_current_tile(), edited_shape_coord)); + draw_highlight_subtile(edited_shape_coord); + } break; default: {} } - - draw_tile_subdivision(get_current_tile(), Color(0.347214, 0.722656, 0.617063)); } RID current_texture_rid = get_current_texture()->get_rid(); @@ -819,7 +845,7 @@ void TileSetEditor::_on_workspace_draw() { tileset->get_tile_list(tiles); for (List<int>::Element *E = tiles->front(); E; E = E->next()) { int t_id = E->get(); - if (tileset->tile_get_texture(t_id)->get_rid() == current_texture_rid && (t_id != get_current_tile() || edit_mode != EDITMODE_REGION)) { + if (tileset->tile_get_texture(t_id)->get_rid() == current_texture_rid && (t_id != get_current_tile() || edit_mode != EDITMODE_REGION || workspace_mode != WORKSPACE_EDIT)) { Rect2i region = tileset->tile_get_region(t_id); region.position += WORKSPACE_MARGIN; Color c; @@ -829,10 +855,11 @@ void TileSetEditor::_on_workspace_draw() { c = COLOR_AUTOTILE; else if (tileset->tile_get_tile_mode(t_id) == TileSet::ATLAS_TILE) c = COLOR_ATLAS; - draw_tile_subdivision(t_id, Color(0.347214, 0.722656, 0.617063, 0.5)); + draw_tile_subdivision(t_id, COLOR_SUBDIVISION); workspace->draw_rect(region, c, false); } } + if (edit_mode == EDITMODE_REGION) { if (workspace_mode != WORKSPACE_EDIT) { Rect2i region = edited_region; @@ -854,6 +881,12 @@ void TileSetEditor::_on_workspace_draw() { region = tileset->tile_get_region(t_id); region.position += WORKSPACE_MARGIN; } + + if (draw_edited_region) + draw_edited_region_subdivision(); + else + draw_tile_subdivision(t_id, COLOR_SUBDIVISION); + Color c; if (tileset->tile_get_tile_mode(t_id) == TileSet::SINGLE_TILE) c = COLOR_SINGLE; @@ -861,13 +894,10 @@ void TileSetEditor::_on_workspace_draw() { c = COLOR_AUTOTILE; else if (tileset->tile_get_tile_mode(t_id) == TileSet::ATLAS_TILE) c = COLOR_ATLAS; - if (draw_edited_region) - draw_edited_region_subdivision(); - else - draw_tile_subdivision(t_id, Color(0.347214, 0.722656, 0.617063, 1)); workspace->draw_rect(region, c, false); } } + workspace_overlay->update(); } @@ -887,9 +917,7 @@ void TileSetEditor::_on_workspace_process() { void TileSetEditor::_on_workspace_overlay_draw() { - if (!tileset.is_valid()) - return; - if (!get_current_texture().is_valid()) + if (!tileset.is_valid() || !get_current_texture().is_valid()) return; const Color COLOR_AUTOTILE = Color(0.266373, 0.565288, 0.988281); @@ -939,9 +967,8 @@ void TileSetEditor::_on_workspace_overlay_draw() { #define MIN_DISTANCE_SQUARED 6 void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { - if (tileset.is_null()) - return; - if (!get_current_texture().is_valid()) + + if (tileset.is_null() || !get_current_texture().is_valid()) return; static bool dragging; @@ -979,11 +1006,9 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } // Mouse Wheel Event - const int _mouse_button_index = mb->get_button_index(); - if (_mouse_button_index == BUTTON_WHEEL_UP && mb->get_control()) { + if (mb->get_button_index() == BUTTON_WHEEL_UP && mb->is_pressed() && mb->get_control()) { _zoom_in(); - - } else if (_mouse_button_index == BUTTON_WHEEL_DOWN && mb->get_control()) { + } else if (mb->get_button_index() == BUTTON_WHEEL_DOWN && mb->is_pressed() && mb->get_control()) { _zoom_out(); } } @@ -1032,10 +1057,14 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { tileset->tile_set_tile_mode(t_id, workspace_mode == WORKSPACE_CREATE_AUTOTILE ? TileSet::AUTO_TILE : TileSet::ATLAS_TILE); } set_current_tile(t_id); + tool_workspacemode[WORKSPACE_EDIT]->set_pressed(true); + tool_editmode[EDITMODE_COLLISION]->set_pressed(true); + edit_mode = EDITMODE_COLLISION; _on_workspace_mode_changed(WORKSPACE_EDIT); } } + edited_region = Rect2(); workspace->update(); workspace_overlay->update(); return; @@ -1201,7 +1230,8 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { case EDITMODE_COLLISION: case EDITMODE_OCCLUSION: case EDITMODE_NAVIGATION: - case EDITMODE_PRIORITY: { + case EDITMODE_PRIORITY: + case EDITMODE_Z_INDEX: { Vector2 shape_anchor = Vector2(0, 0); if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::ATLAS_TILE) { shape_anchor = edited_shape_coord; @@ -1416,6 +1446,7 @@ void TileSetEditor::_on_tool_clicked(int p_tool) { case EDITMODE_REGION: { if (workspace_mode == WORKSPACE_EDIT && get_current_tile() >= 0) { tileset->remove_tile(get_current_tile()); + set_current_tile(-1); workspace->update(); workspace_overlay->update(); } @@ -1461,12 +1492,6 @@ void TileSetEditor::_on_tool_clicked(int p_tool) { default: {} } } - } else if (p_tool == ZOOM_OUT) { - _zoom_out(); - } else if (p_tool == ZOOM_1) { - _reset_zoom(); - } else if (p_tool == ZOOM_IN) { - _zoom_in(); } else if (p_tool == TOOL_SELECT) { if (creating_shape) { // Cancel Creation @@ -1482,6 +1507,11 @@ void TileSetEditor::_on_priority_changed(float val) { workspace->update(); } +void TileSetEditor::_on_z_index_changed(float val) { + tileset->autotile_set_z_index(get_current_tile(), edited_shape_coord, (int)val); + workspace->update(); +} + void TileSetEditor::_on_grid_snap_toggled(bool p_val) { helper->set_snap_options_visible(p_val); workspace->update(); @@ -1524,7 +1554,7 @@ void TileSetEditor::_zoom_out() { workspace_overlay->set_custom_minimum_size(workspace->get_rect().size * scale); } } -void TileSetEditor::_reset_zoom() { +void TileSetEditor::_zoom_reset() { workspace->set_scale(Vector2(1, 1)); workspace_container->set_custom_minimum_size(workspace->get_rect().size); workspace_overlay->set_custom_minimum_size(workspace->get_rect().size); @@ -1532,20 +1562,32 @@ void TileSetEditor::_reset_zoom() { void TileSetEditor::draw_highlight_current_tile() { - if (get_current_tile() >= 0) { - Rect2 region = tileset->tile_get_region(get_current_tile()); - region.position += WORKSPACE_MARGIN; - workspace->draw_rect(Rect2(0, 0, workspace->get_rect().size.x, region.position.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(0, region.position.y, region.position.x, region.size.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(region.position.x + region.size.x, region.position.y, workspace->get_rect().size.x - region.position.x - region.size.x, region.size.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(0, region.position.y + region.size.y, workspace->get_rect().size.x, workspace->get_rect().size.y - region.size.y - region.position.y), Color(0.3, 0.3, 0.3, 0.3)); + Color shadow_color = Color(0.3, 0.3, 0.3, 0.3); + if ((workspace_mode == WORKSPACE_EDIT && get_current_tile() >= 0) || !edited_region.has_no_area()) { + Rect2 region; + if (edited_region.has_no_area()) { + region = tileset->tile_get_region(get_current_tile()); + region.position += WORKSPACE_MARGIN; + } else { + region = edited_region; + } + + if (region.position.y >= 0) + workspace->draw_rect(Rect2(0, 0, workspace->get_rect().size.x, region.position.y), shadow_color); + if (region.position.x >= 0) + workspace->draw_rect(Rect2(0, MAX(0, region.position.y), region.position.x, MIN(workspace->get_rect().size.y - region.position.y, MIN(region.size.y, region.position.y + region.size.y))), shadow_color); + if (region.position.x + region.size.x <= workspace->get_rect().size.x) + workspace->draw_rect(Rect2(region.position.x + region.size.x, MAX(0, region.position.y), workspace->get_rect().size.x - region.position.x - region.size.x, MIN(workspace->get_rect().size.y - region.position.y, MIN(region.size.y, region.position.y + region.size.y))), shadow_color); + if (region.position.y + region.size.y <= workspace->get_rect().size.y) + workspace->draw_rect(Rect2(0, region.position.y + region.size.y, workspace->get_rect().size.x, workspace->get_rect().size.y - region.size.y - region.position.y), shadow_color); } else { - workspace->draw_rect(Rect2(Point2(0, 0), workspace->get_rect().size), Color(0.3, 0.3, 0.3, 0.3)); + workspace->draw_rect(Rect2(Point2(0, 0), workspace->get_rect().size), shadow_color); } } void TileSetEditor::draw_highlight_subtile(Vector2 coord, const Vector<Vector2> &other_highlighted) { + Color shadow_color = Color(0.3, 0.3, 0.3, 0.3); Vector2 size = tileset->autotile_get_size(get_current_tile()); int spacing = tileset->autotile_get_spacing(get_current_tile()); Rect2 region = tileset->tile_get_region(get_current_tile()); @@ -1553,10 +1595,16 @@ void TileSetEditor::draw_highlight_subtile(Vector2 coord, const Vector<Vector2> coord.y *= (size.y + spacing); coord += region.position; coord += WORKSPACE_MARGIN; - workspace->draw_rect(Rect2(0, 0, workspace->get_rect().size.x, coord.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(0, coord.y, coord.x, size.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(coord.x + size.x, coord.y, workspace->get_rect().size.x - coord.x - size.x, size.y), Color(0.3, 0.3, 0.3, 0.3)); - workspace->draw_rect(Rect2(0, coord.y + size.y, workspace->get_rect().size.x, workspace->get_rect().size.y - size.y - coord.y), Color(0.3, 0.3, 0.3, 0.3)); + + if (coord.y >= 0) + workspace->draw_rect(Rect2(0, 0, workspace->get_rect().size.x, coord.y), shadow_color); + if (coord.x >= 0) + workspace->draw_rect(Rect2(0, MAX(0, coord.y), coord.x, MIN(workspace->get_rect().size.y - coord.y, MIN(size.y, coord.y + size.y))), shadow_color); + if (coord.x + size.x <= workspace->get_rect().size.x) + workspace->draw_rect(Rect2(coord.x + size.x, MAX(0, coord.y), workspace->get_rect().size.x - coord.x - size.x, MIN(workspace->get_rect().size.y - coord.y, MIN(size.y, coord.y + size.y))), shadow_color); + if (coord.y + size.y <= workspace->get_rect().size.y) + workspace->draw_rect(Rect2(0, coord.y + size.y, workspace->get_rect().size.x, workspace->get_rect().size.y - size.y - coord.y), shadow_color); + coord += Vector2(1, 1) / workspace->get_scale().x; workspace->draw_rect(Rect2(coord, size - Vector2(2, 2) / workspace->get_scale().x), Color(1, 0, 0), false); for (int i = 0; i < other_highlighted.size(); i++) { @@ -1576,35 +1624,35 @@ void TileSetEditor::draw_tile_subdivision(int p_id, Color p_color) const { Rect2 region = tileset->tile_get_region(p_id); Size2 size = tileset->autotile_get_size(p_id); int spacing = tileset->autotile_get_spacing(p_id); - float j = 0; + float j = size.x; + while (j < region.size.x) { - j += size.x; if (spacing <= 0) { workspace->draw_line(region.position + WORKSPACE_MARGIN + Point2(j, 0), region.position + WORKSPACE_MARGIN + Point2(j, region.size.y), c); } else { workspace->draw_rect(Rect2(region.position + WORKSPACE_MARGIN + Point2(j, 0), Size2(spacing, region.size.y)), c); } - j += spacing; + j += spacing + size.x; } - j = 0; + j = size.y; while (j < region.size.y) { - j += size.y; if (spacing <= 0) { workspace->draw_line(region.position + WORKSPACE_MARGIN + Point2(0, j), region.position + WORKSPACE_MARGIN + Point2(region.size.x, j), c); } else { workspace->draw_rect(Rect2(region.position + WORKSPACE_MARGIN + Point2(0, j), Size2(region.size.x, spacing)), c); } - j += spacing; + j += spacing + size.y; } } } void TileSetEditor::draw_edited_region_subdivision() const { - Color c = Color(0.347214, 0.722656, 0.617063, 1); + Color c = Color(0.3, 0.7, 0.6); Rect2 region = edited_region; Size2 size; int spacing; bool draw; + if (workspace_mode == WORKSPACE_EDIT) { int p_id = get_current_tile(); size = tileset->autotile_get_size(p_id); @@ -1615,66 +1663,72 @@ void TileSetEditor::draw_edited_region_subdivision() const { spacing = snap_separation.x; draw = workspace_mode != WORKSPACE_CREATE_SINGLE; } - if (draw) { - float j = 0; + if (draw) { + float j = size.x; while (j < region.size.x) { - j += size.x; if (spacing <= 0) { workspace->draw_line(region.position + Point2(j, 0), region.position + Point2(j, region.size.y), c); } else { workspace->draw_rect(Rect2(region.position + Point2(j, 0), Size2(spacing, region.size.y)), c); } - j += spacing; + j += spacing + size.x; } - j = 0; + j = size.y; while (j < region.size.y) { - j += size.y; if (spacing <= 0) { workspace->draw_line(region.position + Point2(0, j), region.position + Point2(region.size.x, j), c); } else { workspace->draw_rect(Rect2(region.position + Point2(0, j), Size2(region.size.x, spacing)), c); } - j += spacing; + j += spacing + size.y; } } } void TileSetEditor::draw_grid_snap() { if (tools[TOOL_GRID_SNAP]->is_pressed()) { - Color grid_color = Color(0.39, 0, 1, 0.2f); + Color grid_color = Color(0.4, 0, 1); Size2 s = workspace->get_size(); - int width_count = (int)(s.width / (snap_step.x + snap_separation.x)); - int height_count = (int)(s.height / (snap_step.y + snap_separation.y)); + int width_count = Math::floor((s.width - WORKSPACE_MARGIN.x) / (snap_step.x + snap_separation.x)); + int height_count = Math::floor((s.height - WORKSPACE_MARGIN.y) / (snap_step.y + snap_separation.y)); + int last_p = 0; if (snap_step.x != 0) { - int last_p = 0; for (int i = 0; i <= width_count; i++) { if (i == 0 && snap_offset.x != 0) { last_p = snap_offset.x; } - if (snap_separation.x != 0 && i != 0) { - workspace->draw_rect(Rect2(last_p, 0, snap_separation.x, s.height), grid_color); - last_p += snap_separation.x; - } else + if (snap_separation.x != 0) { + if (i != 0) { + workspace->draw_rect(Rect2(last_p, 0, snap_separation.x, s.height), grid_color); + last_p += snap_separation.x; + } else { + workspace->draw_rect(Rect2(last_p, 0, -snap_separation.x, s.height), grid_color); + } + } else { workspace->draw_line(Point2(last_p, 0), Point2(last_p, s.height), grid_color); - + } last_p += snap_step.x; } } - + last_p = 0; if (snap_step.y != 0) { - int last_p = 0; for (int i = 0; i <= height_count; i++) { if (i == 0 && snap_offset.y != 0) { last_p = snap_offset.y; } - if (snap_separation.x != 0 && i != 0) { - workspace->draw_rect(Rect2(0, last_p, s.width, snap_separation.y), grid_color); - last_p += snap_separation.y; - } else + if (snap_separation.x != 0) { + if (i != 0) { + workspace->draw_rect(Rect2(0, last_p, s.width, snap_separation.y), grid_color); + last_p += snap_separation.y; + } else { + workspace->draw_rect(Rect2(0, last_p, s.width, -snap_separation.y), grid_color); + } + } else { workspace->draw_line(Point2(0, last_p), Point2(s.width, last_p), grid_color); + } last_p += snap_step.y; } } @@ -1687,8 +1741,6 @@ void TileSetEditor::draw_polygon_shapes() { if (t_id < 0) return; - draw_handles = false; - switch (edit_mode) { case EDITMODE_COLLISION: { Vector<TileSet::ShapeData> sd = tileset->tile_get_shapes(t_id); @@ -2154,6 +2206,18 @@ void TileSetEditor::update_texture_list_icon() { void TileSetEditor::update_workspace_tile_mode() { + if (!get_current_texture().is_valid()) { + tool_workspacemode[WORKSPACE_EDIT]->set_pressed(true); + workspace_mode = WORKSPACE_EDIT; + for (int i = 1; i < WORKSPACE_MODE_MAX; i++) { + tool_workspacemode[i]->set_disabled(true); + } + } else { + for (int i = 1; i < WORKSPACE_MODE_MAX; i++) { + tool_workspacemode[i]->set_disabled(false); + } + } + if (workspace_mode != WORKSPACE_EDIT) { for (int i = 0; i < EDITMODE_MAX; i++) { tool_editmode[i]->hide(); @@ -2172,7 +2236,9 @@ void TileSetEditor::update_workspace_tile_mode() { for (int i = 0; i < ZOOM_OUT; i++) { tools[i]->hide(); } + separator_editmode->hide(); + separator_bitmask->hide(); separator_delete->hide(); separator_grid->hide(); return; @@ -2184,7 +2250,7 @@ void TileSetEditor::update_workspace_tile_mode() { separator_editmode->show(); if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) { - if (tool_editmode[EDITMODE_ICON]->is_pressed() || tool_editmode[EDITMODE_PRIORITY]->is_pressed() || tool_editmode[EDITMODE_BITMASK]->is_pressed()) { + if (tool_editmode[EDITMODE_ICON]->is_pressed() || tool_editmode[EDITMODE_PRIORITY]->is_pressed() || tool_editmode[EDITMODE_BITMASK]->is_pressed() || tool_editmode[EDITMODE_Z_INDEX]->is_pressed()) { tool_editmode[EDITMODE_COLLISION]->set_pressed(true); edit_mode = EDITMODE_COLLISION; } @@ -2193,6 +2259,7 @@ void TileSetEditor::update_workspace_tile_mode() { tool_editmode[EDITMODE_ICON]->hide(); tool_editmode[EDITMODE_BITMASK]->hide(); tool_editmode[EDITMODE_PRIORITY]->hide(); + tool_editmode[EDITMODE_Z_INDEX]->hide(); } else if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::ATLAS_TILE) { if (edit_mode == EDITMODE_ICON) select_coord(tileset->autotile_get_icon_coordinate(get_current_tile())); @@ -2218,25 +2285,18 @@ void TileSetEditor::update_edited_region(const Vector2 &end_point) { edited_region = Rect2(region_from, Size2()); if (tools[TOOL_GRID_SNAP]->is_pressed()) { Vector2 grid_coord; - grid_coord.x = Math::floor((region_from.x - snap_offset.x) / (snap_step.x + snap_separation.x)); - grid_coord.y = Math::floor((region_from.y - snap_offset.y) / (snap_step.y + snap_separation.y)); - grid_coord.x *= (snap_step.x + snap_separation.x); - grid_coord.y *= (snap_step.y + snap_separation.y); + grid_coord = ((region_from - snap_offset) / (snap_step + snap_separation)).floor(); + grid_coord *= (snap_step + snap_separation); grid_coord += snap_offset; edited_region.expand_to(grid_coord); - grid_coord += snap_step; + grid_coord += snap_step + snap_separation; edited_region.expand_to(grid_coord); - grid_coord.x = Math::floor((end_point.x - snap_offset.x) / (snap_step.x + snap_separation.x)); - grid_coord.y = Math::floor((end_point.y - snap_offset.y) / (snap_step.y + snap_separation.y)); - grid_coord.x *= (snap_step.x + snap_separation.x); - grid_coord.y *= (snap_step.y + snap_separation.y); + + grid_coord = ((end_point - snap_offset) / (snap_step + snap_separation)).floor(); + grid_coord *= (snap_step + snap_separation); grid_coord += snap_offset; edited_region.expand_to(grid_coord); - grid_coord += snap_step; - if (grid_coord.x < end_point.x) - grid_coord.x += snap_separation.x; - if (grid_coord.y < end_point.y) - grid_coord.y += snap_separation.y; + grid_coord += snap_step + snap_separation; edited_region.expand_to(grid_coord); } else { edited_region.expand_to(end_point); @@ -2414,7 +2474,13 @@ void TilesetEditorContext::_get_property_list(List<PropertyInfo> *p_list) const } } +void TilesetEditorContext::_bind_methods() { + + ClassDB::bind_method("_hide_script_from_inspector", &TilesetEditorContext::_hide_script_from_inspector); +} + TilesetEditorContext::TilesetEditorContext(TileSetEditor *p_tileset_editor) { + tileset_editor = p_tileset_editor; } @@ -2428,8 +2494,7 @@ void TileSetEditorPlugin::edit(Object *p_node) { bool TileSetEditorPlugin::handles(Object *p_node) const { - return p_node->is_class("TileSet") || - p_node->is_class("TilesetEditorContext"); + return p_node->is_class("TileSet") || p_node->is_class("TilesetEditorContext"); } void TileSetEditorPlugin::make_visible(bool p_visible) { @@ -2444,6 +2509,41 @@ void TileSetEditorPlugin::make_visible(bool p_visible) { } } +Dictionary TileSetEditorPlugin::get_state() const { + + Dictionary state; + state["snap_offset"] = tileset_editor->snap_offset; + state["snap_step"] = tileset_editor->snap_step; + state["snap_separation"] = tileset_editor->snap_separation; + state["snap_enabled"] = tileset_editor->tools[TileSetEditor::TOOL_GRID_SNAP]->is_pressed(); + state["keep_inside_tile"] = tileset_editor->tools[TileSetEditor::SHAPE_KEEP_INSIDE_TILE]->is_pressed(); + return state; +} + +void TileSetEditorPlugin::set_state(const Dictionary &p_state) { + + Dictionary state = p_state; + if (state.has("snap_step")) { + tileset_editor->_set_snap_step(state["snap_step"]); + } + + if (state.has("snap_offset")) { + tileset_editor->_set_snap_off(state["snap_offset"]); + } + + if (state.has("snap_separation")) { + tileset_editor->_set_snap_sep(state["snap_separation"]); + } + + if (state.has("snap_enabled")) { + tileset_editor->tools[TileSetEditor::TOOL_GRID_SNAP]->set_pressed(state["snap_enabled"]); + } + + if (state.has("keep_inside_tile")) { + tileset_editor->tools[TileSetEditor::SHAPE_KEEP_INSIDE_TILE]->set_pressed(state["keep_inside_tile"]); + } +} + TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) { editor = p_node; tileset_editor = memnew(TileSetEditor(p_node)); @@ -2451,6 +2551,6 @@ TileSetEditorPlugin::TileSetEditorPlugin(EditorNode *p_node) { tileset_editor->set_custom_minimum_size(Size2(0, 200) * EDSCALE); tileset_editor->hide(); - tileset_editor_button = p_node->add_bottom_panel_item(TTR("Tile Set"), tileset_editor); + tileset_editor_button = p_node->add_bottom_panel_item(TTR("TileSet"), tileset_editor); tileset_editor_button->hide(); } diff --git a/editor/plugins/tile_set_editor_plugin.h b/editor/plugins/tile_set_editor_plugin.h index bd8a2ddb98..276e23f9ee 100644 --- a/editor/plugins/tile_set_editor_plugin.h +++ b/editor/plugins/tile_set_editor_plugin.h @@ -40,12 +40,12 @@ #define WORKSPACE_MARGIN Vector2(10, 10) class TilesetEditorContext; -class TileSetEditor : public Control { +class TileSetEditor : public HSplitContainer { friend class TileSetEditorPlugin; friend class TilesetEditorContext; - GDCLASS(TileSetEditor, Control) + GDCLASS(TileSetEditor, HSplitContainer) enum TextureToolButtons { TOOL_TILESET_ADD_TEXTURE, @@ -71,6 +71,7 @@ class TileSetEditor : public Control { EDITMODE_BITMASK, EDITMODE_PRIORITY, EDITMODE_ICON, + EDITMODE_Z_INDEX, EDITMODE_MAX }; @@ -134,9 +135,11 @@ class TileSetEditor : public Control { HSeparator *separator_editmode; HBoxContainer *toolbar; ToolButton *tools[TOOL_MAX]; + VSeparator *separator_bitmask; VSeparator *separator_delete; VSeparator *separator_grid; SpinBox *spin_priority; + SpinBox *spin_z_index; WorkspaceMode workspace_mode; EditMode edit_mode; int current_tile; @@ -177,6 +180,7 @@ private: void _on_workspace_input(const Ref<InputEvent> &p_ie); void _on_tool_clicked(int p_tool); void _on_priority_changed(float val); + void _on_z_index_changed(float val); void _on_grid_snap_toggled(bool p_val); void _set_snap_step(Vector2 p_val); void _set_snap_off(Vector2 p_val); @@ -184,7 +188,7 @@ private: void _zoom_in(); void _zoom_out(); - void _reset_zoom(); + void _zoom_reset(); void draw_highlight_current_tile(); void draw_highlight_subtile(Vector2 coord, const Vector<Vector2> &other_highlighted = Vector<Vector2>()); @@ -212,6 +216,7 @@ class TilesetEditorContext : public Object { bool snap_options_visible; public: + bool _hide_script_from_inspector() { return true; } void set_tileset(const Ref<TileSet> &p_tileset); private: @@ -221,6 +226,7 @@ protected: bool _set(const StringName &p_name, const Variant &p_value); bool _get(const StringName &p_name, Variant &r_ret) const; void _get_property_list(List<PropertyInfo> *p_list) const; + static void _bind_methods(); public: TilesetEditorContext(TileSetEditor *p_tileset_editor); @@ -240,6 +246,8 @@ public: virtual void edit(Object *p_node); virtual bool handles(Object *p_node) const; virtual void make_visible(bool p_visible); + void set_state(const Dictionary &p_state); + Dictionary get_state() const; TileSetEditorPlugin(EditorNode *p_node); }; diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index 39e50ec7f8..d3295c0f51 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -633,18 +633,23 @@ void VisualShaderEditor::_duplicate_nodes() { VisualShader::Type type = VisualShader::Type(edit_type->get_selected()); List<int> nodes; + Set<int> excluded; for (int i = 0; i < graph->get_child_count(); i++) { - if (Object::cast_to<GraphNode>(graph->get_child(i))) { - int id = String(graph->get_child(i)->get_name()).to_int(); + GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i)); + if (gn) { + int id = String(gn->get_name()).to_int(); Ref<VisualShaderNode> node = visual_shader->get_node(type, id); Ref<VisualShaderNodeOutput> output = node; - if (output.is_valid()) //can't duplicate output + if (output.is_valid()) { // can't duplicate output + excluded.insert(id); continue; - if (node.is_valid()) { + } + if (node.is_valid() && gn->is_selected()) { nodes.push_back(id); } + excluded.insert(id); } } @@ -683,15 +688,16 @@ void VisualShaderEditor::_duplicate_nodes() { undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); - //reselect + // reselect duplicated nodes by excluding the other ones for (int i = 0; i < graph->get_child_count(); i++) { - if (Object::cast_to<GraphNode>(graph->get_child(i))) { - int id = String(graph->get_child(i)->get_name()).to_int(); - if (nodes.find(id)) { - Object::cast_to<GraphNode>(graph->get_child(i))->set_selected(true); + GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i)); + if (gn) { + int id = String(gn->get_name()).to_int(); + if (!excluded.has(id)) { + gn->set_selected(true); } else { - Object::cast_to<GraphNode>(graph->get_child(i))->set_selected(false); + gn->set_selected(false); } } } @@ -798,7 +804,7 @@ VisualShaderEditor::VisualShaderEditor() { add_node = memnew(MenuButton); graph->get_zoom_hbox()->add_child(add_node); - add_node->set_text(TTR("Add Node..")); + add_node->set_text(TTR("Add Node...")); graph->get_zoom_hbox()->move_child(add_node, 0); add_node->get_popup()->connect("id_pressed", this, "_add_node"); diff --git a/editor/project_export.cpp b/editor/project_export.cpp index f8ba6fd4e3..557aac021d 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -56,7 +56,7 @@ void ProjectExportDialog::_notification(int p_what) { custom_feature_display->get_parent_control()->add_style_override("panel", get_stylebox("bg", "Tree")); } break; case NOTIFICATION_POPUP_HIDE: { - EditorSettings::get_singleton()->set("interface/dialogs/export_bounds", get_rect()); + EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "export", get_rect()); } break; case NOTIFICATION_THEME_CHANGED: { duplicate_preset->set_icon(get_icon("Duplicate", "EditorIcons")); @@ -84,8 +84,9 @@ void ProjectExportDialog::popup_export() { } // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has_setting("interface/dialogs/export_bounds")) { - popup(EditorSettings::get_singleton()->get("interface/dialogs/export_bounds")); + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "export", Rect2()); + if (saved_size != Rect2()) { + popup(saved_size); } else { Size2 popup_size = Size2(900, 700) * editor_get_scale(); @@ -191,7 +192,7 @@ void ProjectExportDialog::_edit_preset(int p_index) { if (p_index < 0 || p_index >= presets->get_item_count()) { name->set_text(""); name->set_editable(false); - export_path->set_editable(false); + export_path->hide(); runnable->set_disabled(true); parameters->edit(NULL); presets->unselect_all(); @@ -213,11 +214,19 @@ void ProjectExportDialog::_edit_preset(int p_index) { sections->show(); name->set_editable(true); - export_path->set_editable(true); + export_path->show(); duplicate_preset->set_disabled(false); delete_preset->set_disabled(false); name->set_text(current->get_name()); - export_path->set_text(current->get_export_path()); + + List<String> extension_list = current->get_platform()->get_binary_extensions(current); + Vector<String> extension_vector; + for (int i = 0; i < extension_list.size(); i++) { + extension_vector.push_back("*." + extension_list[i]); + } + + export_path->setup(extension_vector, false, true); + export_path->update_property(); runnable->set_disabled(false); runnable->set_pressed(current->is_runnable()); parameters->edit(current.ptr()); @@ -457,7 +466,21 @@ void ProjectExportDialog::_name_changed(const String &p_string) { _update_presets(); } -void ProjectExportDialog::_export_path_changed(const String &p_string) { +void ProjectExportDialog::set_export_path(const String &p_value) { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND(current.is_null()); + + current->set_export_path(p_value); +} + +String ProjectExportDialog::get_export_path() { + Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); + ERR_FAIL_COND_V(current.is_null(), String("")); + + return current->get_export_path(); +} + +void ProjectExportDialog::_export_path_changed(const StringName &p_property, const Variant &p_value) { if (updating) return; @@ -465,7 +488,7 @@ void ProjectExportDialog::_export_path_changed(const String &p_string) { Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current()); ERR_FAIL_COND(current.is_null()); - current->set_export_path(p_string); + current->set_export_path(p_value); _update_presets(); } @@ -954,6 +977,10 @@ void ProjectExportDialog::_bind_methods() { ClassDB::bind_method("_export_all_dialog_action", &ProjectExportDialog::_export_all_dialog_action); ClassDB::bind_method("_custom_features_changed", &ProjectExportDialog::_custom_features_changed); ClassDB::bind_method("_tab_changed", &ProjectExportDialog::_tab_changed); + ClassDB::bind_method("set_export_path", &ProjectExportDialog::set_export_path); + ClassDB::bind_method("get_export_path", &ProjectExportDialog::get_export_path); + + ADD_PROPERTY(PropertyInfo(Variant::STRING, "export_path"), "set_export_path", "get_export_path"); } ProjectExportDialog::ProjectExportDialog() { @@ -1006,9 +1033,12 @@ ProjectExportDialog::ProjectExportDialog() { runnable->connect("pressed", this, "_runnable_pressed"); settings_vb->add_child(runnable); - export_path = memnew(LineEdit); - settings_vb->add_margin_child(TTR("Export Path:"), export_path); - export_path->connect("text_changed", this, "_export_path_changed"); + export_path = memnew(EditorPropertyPath); + settings_vb->add_child(export_path); + export_path->set_label(TTR("Export Path")); + export_path->set_object_and_property(this, "export_path"); + export_path->set_save_mode(); + export_path->connect("property_changed", this, "_export_path_changed"); sections = memnew(TabContainer); sections->set_tab_align(TabContainer::ALIGN_LEFT); @@ -1100,7 +1130,7 @@ ProjectExportDialog::ProjectExportDialog() { //disable by default name->set_editable(false); - export_path->set_editable(false); + export_path->hide(); runnable->set_disabled(true); duplicate_preset->set_disabled(true); delete_preset->set_disabled(true); diff --git a/editor/project_export.h b/editor/project_export.h index 7009968138..b43dd9a392 100644 --- a/editor/project_export.h +++ b/editor/project_export.h @@ -37,6 +37,7 @@ #include "editor/editor_file_dialog.h" #include "editor/editor_file_system.h" #include "editor/editor_inspector.h" +#include "editor/editor_properties.h" #include "scene/gui/button.h" #include "scene/gui/check_button.h" #include "scene/gui/control.h" @@ -66,7 +67,7 @@ private: ItemList *presets; LineEdit *name; - LineEdit *export_path; + EditorPropertyPath *export_path; EditorInspector *parameters; CheckButton *runnable; @@ -110,7 +111,7 @@ private: void _runnable_pressed(); void _update_parameters(const String &p_edited_property); void _name_changed(const String &p_string); - void _export_path_changed(const String &p_string); + void _export_path_changed(const StringName &p_property, const Variant &p_value); void _add_preset(int p_platform); void _edit_preset(int p_index); void _duplicate_preset(); @@ -162,6 +163,9 @@ protected: public: void popup_export(); + void set_export_path(const String &p_value); + String get_export_path(); + ProjectExportDialog(); ~ProjectExportDialog(); }; diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index 8c906e5f0b..8d5847bea4 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -745,7 +745,8 @@ public: get_ok()->set_text(TTR("Create & Edit")); name_container->show(); install_path_container->hide(); - project_name->grab_focus(); + project_name->call_deferred("grab_focus"); + project_name->call_deferred("select_all"); } else if (mode == MODE_INSTALL) { @@ -866,16 +867,22 @@ struct ProjectItem { uint64_t last_modified; bool favorite; bool grayed; + bool ordered_latest_modification; ProjectItem() {} - ProjectItem(const String &p_project, const String &p_path, const String &p_conf, uint64_t p_last_modified, bool p_favorite = false, bool p_grayed = false) { + ProjectItem(const String &p_project, const String &p_path, const String &p_conf, uint64_t p_last_modified, bool p_favorite = false, bool p_grayed = false, const bool p_ordered_latest_modification = true) { project = p_project; path = p_path; conf = p_conf; last_modified = p_last_modified; favorite = p_favorite; grayed = p_grayed; + ordered_latest_modification = p_ordered_latest_modification; + } + _FORCE_INLINE_ bool operator<(const ProjectItem &l) const { + if (ordered_latest_modification) + return last_modified > l.last_modified; + return project < l.project; } - _FORCE_INLINE_ bool operator<(const ProjectItem &l) const { return last_modified > l.last_modified; } _FORCE_INLINE_ bool operator==(const ProjectItem &l) const { return project == l.project; } }; @@ -1156,6 +1163,13 @@ void ProjectManager::_load_recent_projects() { Color font_color = gui_base->get_color("font_color", "Tree"); + bool set_ordered_latest_modification; + ProjectListFilter::FilterOption filter_order_option = project_order_filter->get_filter_option(); + if (filter_order_option == ProjectListFilter::FILTER_NAME) + set_ordered_latest_modification = false; + else + set_ordered_latest_modification = true; + List<ProjectItem> projects; List<ProjectItem> favorite_projects; @@ -1188,13 +1202,12 @@ void ProjectManager::_load_recent_projects() { grayed = true; } - ProjectItem item(project, path, conf, last_modified, favorite, grayed); + ProjectItem item(project, path, conf, last_modified, favorite, grayed, set_ordered_latest_modification); if (favorite) favorite_projects.push_back(item); else projects.push_back(item); } - projects.sort(); favorite_projects.sort(); @@ -1818,16 +1831,41 @@ ProjectManager::ProjectManager() { tabs->add_child(tree_hb); VBoxContainer *search_tree_vb = memnew(VBoxContainer); - search_tree_vb->set_h_size_flags(SIZE_EXPAND_FILL); tree_hb->add_child(search_tree_vb); + search_tree_vb->set_h_size_flags(SIZE_EXPAND_FILL); - HBoxContainer *search_box = memnew(HBoxContainer); - search_box->add_spacer(true); + HBoxContainer *sort_filters = memnew(HBoxContainer); + Label *sort_label = memnew(Label); + sort_label->set_text(TTR("Sort:")); + sort_filters->add_child(sort_label); + Vector<String> vec1; + vec1.push_back("Name"); + vec1.push_back("Last Modified"); + project_order_filter = memnew(ProjectListFilter); + project_order_filter->_setup_filters(vec1); + project_order_filter->set_filter_size(150); + sort_filters->add_child(project_order_filter); + project_order_filter->connect("filter_changed", this, "_load_recent_projects"); + project_order_filter->set_custom_minimum_size(Size2(180, 10) * EDSCALE); + + sort_filters->add_spacer(true); + Label *search_label = memnew(Label); + search_label->set_text(TTR(" Search:")); + sort_filters->add_child(search_label); + + HBoxContainer *search_filters = memnew(HBoxContainer); + Vector<String> vec2; + vec2.push_back("Name"); + vec2.push_back("Path"); project_filter = memnew(ProjectListFilter); - search_box->add_child(project_filter); + project_filter->_setup_filters(vec2); + project_filter->add_search_box(); + search_filters->add_child(project_filter); project_filter->connect("filter_changed", this, "_load_recent_projects"); project_filter->set_custom_minimum_size(Size2(280, 10) * EDSCALE); - search_tree_vb->add_child(search_box); + sort_filters->add_child(search_filters); + + search_tree_vb->add_child(sort_filters); PanelContainer *pc = memnew(PanelContainer); pc->add_style_override("panel", gui_base->get_stylebox("bg", "Tree")); @@ -2017,11 +2055,11 @@ ProjectManager::~ProjectManager() { EditorSettings::destroy(); } -void ProjectListFilter::_setup_filters() { +void ProjectListFilter::_setup_filters(Vector<String> options) { filter_option->clear(); - filter_option->add_item(TTR("Name")); - filter_option->add_item(TTR("Path")); + for (int i = 0; i < options.size(); i++) + filter_option->add_item(TTR(options[i])); } void ProjectListFilter::_search_text_changed(const String &p_newtext) { @@ -2046,7 +2084,7 @@ void ProjectListFilter::_filter_option_selected(int p_idx) { void ProjectListFilter::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { + if (p_what == NOTIFICATION_ENTER_TREE && has_search_box) { search_box->set_right_icon(get_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); } @@ -2060,20 +2098,27 @@ void ProjectListFilter::_bind_methods() { ADD_SIGNAL(MethodInfo("filter_changed")); } +void ProjectListFilter::add_search_box() { + search_box = memnew(LineEdit); + search_box->connect("text_changed", this, "_search_text_changed"); + search_box->set_h_size_flags(SIZE_EXPAND_FILL); + add_child(search_box); + has_search_box = true; +} + +void ProjectListFilter::set_filter_size(int h_size) { + filter_option->set_custom_minimum_size(Size2(h_size * EDSCALE, 10 * EDSCALE)); +} + ProjectListFilter::ProjectListFilter() { _current_filter = FILTER_NAME; filter_option = memnew(OptionButton); - filter_option->set_custom_minimum_size(Size2(80 * EDSCALE, 10 * EDSCALE)); + set_filter_size(80); filter_option->set_clip_text(true); filter_option->connect("item_selected", this, "_filter_option_selected"); add_child(filter_option); - _setup_filters(); - - search_box = memnew(LineEdit); - search_box->connect("text_changed", this, "_search_text_changed"); - search_box->set_h_size_flags(SIZE_EXPAND_FILL); - add_child(search_box); + has_search_box = false; } diff --git a/editor/project_manager.h b/editor/project_manager.h index ad21e00b0d..88fc081272 100644 --- a/editor/project_manager.h +++ b/editor/project_manager.h @@ -54,6 +54,7 @@ class ProjectManager : public Control { EditorAssetLibrary *asset_library; ProjectListFilter *project_filter; + ProjectListFilter *project_order_filter; ConfirmationDialog *language_restart_ask; ConfirmationDialog *erase_ask; @@ -130,6 +131,7 @@ private: OptionButton *filter_option; LineEdit *search_box; + bool has_search_box; enum FilterOption { FILTER_NAME, @@ -138,7 +140,6 @@ private: FilterOption _current_filter; void _search_text_changed(const String &p_newtext); - void _setup_filters(); void _filter_option_selected(int p_idx); protected: @@ -146,6 +147,9 @@ protected: static void _bind_methods(); public: + void _setup_filters(Vector<String> options); + void add_search_box(); + void set_filter_size(int h_size); String get_search_term(); FilterOption get_filter_option(); ProjectListFilter(); diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 7a68646f40..af8d33d3d1 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -115,10 +115,9 @@ void ProjectSettingsEditor::_notification(int p_what) { } break; case NOTIFICATION_POPUP_HIDE: { - EditorSettings::get_singleton()->set("interface/dialogs/project_settings_bounds", get_rect()); + EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "project_settings", get_rect()); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { - search_button->set_icon(get_icon("Search", "EditorIcons")); search_box->set_right_icon(get_icon("Search", "EditorIcons")); search_box->set_clear_button_enabled(true); @@ -788,8 +787,9 @@ void ProjectSettingsEditor::_update_actions() { void ProjectSettingsEditor::popup_project_settings() { // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has_setting("interface/dialogs/project_settings_bounds")) { - popup(EditorSettings::get_singleton()->get("interface/dialogs/project_settings_bounds")); + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "project_settings", Rect2()); + if (saved_size != Rect2()) { + popup(saved_size); } else { Size2 popup_size = Size2(900, 700) * editor_get_scale(); diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index 537c9ac6b8..a4956bee27 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -94,8 +94,9 @@ void EditorSettingsDialog::popup_edit_settings() { set_process_unhandled_input(true); // Restore valid window bounds or pop up at default size. - if (EditorSettings::get_singleton()->has_setting("interface/dialogs/editor_settings_bounds")) { - popup(EditorSettings::get_singleton()->get("interface/dialogs/editor_settings_bounds")); + Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "editor_settings", Rect2()); + if (saved_size != Rect2()) { + popup(saved_size); } else { Size2 popup_size = Size2(900, 700) * editor_get_scale(); @@ -132,7 +133,7 @@ void EditorSettingsDialog::_notification(int p_what) { _update_icons(); } break; case NOTIFICATION_POPUP_HIDE: { - EditorSettings::get_singleton()->set("interface/dialogs/editor_settings_bounds", get_rect()); + EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "editor_settings", get_rect()); set_process_unhandled_input(false); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { diff --git a/editor/translations/af.po b/editor/translations/af.po index 17dd7b19c5..d3647bdb0f 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -552,9 +552,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Zoem In" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1726,6 +1725,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2125,7 +2130,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -9042,7 +9047,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9269,6 +9274,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoem In" + #~ msgid "Class List:" #~ msgstr "Klas Lys:" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index ed3b98016a..a93f3ebed9 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -567,8 +567,8 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "تقريب" +msgid "Font Size:" +msgstr "Øجم الخطوط:" #: editor/code_editor.cpp msgid "Line:" @@ -1729,6 +1729,12 @@ msgstr "هذه العملية لا يمكنها الإكتمال من غير Ø¬Ø #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "لا يمكن ØÙظ المشهد. على Ø§Ù„Ø£Ø±Ø¬Ø Ù„Ø§ يمكن إستيÙاء التبعيات (مجسّدات)." @@ -2163,7 +2169,7 @@ msgid "Undo" msgstr "تراجع" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "إعادة" @@ -9208,7 +9214,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9438,6 +9444,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "تقريب" + #~ msgid "Class List:" #~ msgstr "قائمة الأصناÙ:" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index 60f5eafb45..f75e29e11a 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -552,8 +552,9 @@ msgid "Warnings:" msgstr "ПредупреждениÑ:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Приближение:" +#, fuzzy +msgid "Font Size:" +msgstr "Изглед Отпред." #: editor/code_editor.cpp msgid "Line:" @@ -1692,6 +1693,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2098,7 +2105,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -9147,7 +9154,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9375,6 +9382,9 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "Приближение:" + #~ msgid "Class List:" #~ msgstr "СпиÑък на КлаÑове:" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index ae6a8a7f70..a99a1360a2 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -572,8 +572,8 @@ msgstr "সতরà§à¦•à¦¤à¦¾" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "জà§à¦®à§ (%):" +msgid "Font Size:" +msgstr "উৎস ফনà§à¦Ÿà§‡à¦° আকার:" #: editor/code_editor.cpp msgid "Line:" @@ -1768,6 +1768,12 @@ msgid "This operation can't be done without a tree root." msgstr "দৃশà§à¦¯ ছাড়া à¦à¦Ÿà¦¿ করা সমà§à¦à¦¬ হবে না।" #: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " @@ -2219,7 +2225,7 @@ msgid "Undo" msgstr "সাবেক অবসà§à¦¥à¦¾à§Ÿ যান/আনডà§" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "পà§à¦¨à¦°à¦¾à¦¯à¦¼ করà§à¦¨" @@ -9689,7 +9695,7 @@ msgstr "" "আকৃতি তৈরি করà§à¦¨!" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9940,6 +9946,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "জà§à¦®à§ (%):" + #~ msgid "Class List:" #~ msgstr "কà§à¦²à¦¾à¦¸à§‡à¦° তালিকা:" @@ -10655,9 +10665,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "ফনà§à¦Ÿà§‡à¦° উৎস:" -#~ msgid "Source Font Size:" -#~ msgstr "উৎস ফনà§à¦Ÿà§‡à¦° আকার:" - #~ msgid "Dest Resource:" #~ msgstr "রিসোরà§à¦¸à§‡à¦° গনà§à¦¤à¦¬à§à¦¯à¦¸à§à¦¥à¦¾à¦¨:" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 1b8fa8933c..c0ec1493a3 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -547,8 +547,9 @@ msgid "Warnings:" msgstr "Avisos:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Zoom:" +#, fuzzy +msgid "Font Size:" +msgstr "Mida de la lletra:" #: editor/code_editor.cpp msgid "Line:" @@ -1711,6 +1712,12 @@ msgstr "Aquesta operació no es pot fer sense cap arrel d'arbre." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2154,7 +2161,7 @@ msgid "Undo" msgstr "Desfés" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Refés" @@ -9316,7 +9323,7 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "Res és visible perquè no s'ha assignat cap Malla a cap pas de Dibuix." #: scene/3d/cpu_particles.cpp @@ -9584,6 +9591,9 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "Zoom:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Esteu segur que voleu eliminar totes les connexions de \"" @@ -10277,9 +10287,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Lletra:" -#~ msgid "Source Font Size:" -#~ msgstr "Mida de la lletra:" - #~ msgid "Dest Resource:" #~ msgstr "Recurs Objectiu:" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index f6bc57ed66..9a1d88ba87 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -13,15 +13,15 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-11-21 19:07+0000\n" -"Last-Translator: Jan 'spl!te' KondelÃk <j.kondelik@centrum.cz>\n" +"PO-Revision-Date: 2018-12-04 22:14+0000\n" +"Last-Translator: VojtÄ›ch Å amla <auzkok@seznam.cz>\n" "Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" "cs/>\n" "Language: cs\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 3.3-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -499,7 +499,7 @@ msgstr "ZmÄ›nit hodnotu pole" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "Běž na řádek" +msgstr "JÃt na řádek" #: editor/code_editor.cpp msgid "Line Number:" @@ -550,8 +550,9 @@ msgid "Warnings:" msgstr "VarovánÃ:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "PÅ™iblÞit:" +#, fuzzy +msgid "Font Size:" +msgstr "Pohled zepÅ™edu" #: editor/code_editor.cpp msgid "Line:" @@ -665,9 +666,9 @@ msgid "Edit Connection: " msgstr "Upravit pÅ™ipojenÃ: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "Jste si jisti, že chcete odstranit vÅ¡echna pÅ™ipojenà od \"" +msgstr "" +"Jste si jisti, že chcete odstranit vÅ¡echna pÅ™ipojenà ze signálu \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -675,7 +676,7 @@ msgstr "Signály" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Jste si jistÃ, že chcete odstranit vÅ¡echna pÅ™ipojenà z tohoto signálu?" #: editor/connections_dialog.cpp msgid "Disconnect All" @@ -686,9 +687,8 @@ msgid "Edit..." msgstr "Upravit..." #: editor/connections_dialog.cpp -#, fuzzy msgid "Go To Method" -msgstr "Metody" +msgstr "PÅ™ejÃt na metodu" #: editor/create_dialog.cpp msgid "Change %s Type" @@ -1306,7 +1306,6 @@ msgid "File Exists, Overwrite?" msgstr "Soubor už existuje. PÅ™epsat?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" msgstr "Vybrat tuto složku" @@ -1315,15 +1314,13 @@ msgid "Copy Path" msgstr "KopÃrovat cestu" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" msgstr "OtevÅ™Ãt ve správci souborů" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" -msgstr "Ukázat ve správci souborů" +msgstr "Zobrazit ve správci souborů" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1466,19 +1463,16 @@ msgid "Methods" msgstr "Metody" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "Metody" +msgstr "Metody:" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "Vlastnosti" +msgstr "Vlastnosti motivu" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "Vlastnosti:" +msgstr "Vlastnosti motivu:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1505,14 +1499,12 @@ msgid "Constants:" msgstr "Konstanty:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "Popis" +msgstr "Popis tÅ™Ãdy" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "Popis:" +msgstr "Popis tÅ™Ãdy:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1529,12 +1521,10 @@ msgstr "" "$url2]zažádat[/url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "Popis vlastnosti:" +msgstr "Popis vlastnosti" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" msgstr "Popis vlastnosti:" @@ -1547,12 +1537,10 @@ msgstr "" "nám tÃm, že ho[color=$color][url=$url]vytvoÅ™Ãte[/url][/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "Popis metody:" +msgstr "Popis metody" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" msgstr "Popis metody:" @@ -1570,39 +1558,32 @@ msgid "Search Help" msgstr "Prohledat nápovÄ›du" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Nahradit vÅ¡echny" +msgstr "Zobrazit vÅ¡echny" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "TÅ™Ãdy" +msgstr "Pouze tÅ™Ãdy" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "Metody" +msgstr "Pouze metody" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "Signály" +msgstr "Pouze signály" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "Konstanty" +msgstr "Pouze konstanty" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "Vlastnosti" +msgstr "Pouze vlastnosti" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "Vlastnosti" +msgstr "Pouze vlastnosti motivu" #: editor/editor_help_search.cpp #, fuzzy @@ -1610,9 +1591,8 @@ msgid "Member Type" msgstr "ÄŒlenové" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "TÅ™Ãda:" +msgstr "TÅ™Ãda" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -1711,6 +1691,12 @@ msgstr "Tato operace nemůže být provedena bez koÅ™enového uzlu." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1719,7 +1705,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "Nelze pÅ™epsat scénu, která je stále otevÅ™ená!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1797,6 +1783,9 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" +"Toto je vzdálený objekt, takže jeho zmÄ›ny nebudou zachovány.\n" +"PÅ™eÄtÄ›te si, prosÃm, dokumentaci týkajÃcà se debugovánÃ, abyste lépe " +"pochopili tento proces." #: editor/editor_node.cpp msgid "There is no defined scene to run." @@ -1962,13 +1951,12 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Nelze naÄÃst skript rozÅ¡ÃÅ™enà z cesty: '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"Nelze naÄÃst skript rozÅ¡ÃÅ™enà z cesty: '%s'. Skript nenà v režimu nástroje " -"(tool)." +"Nelze naÄÃst skript rozÅ¡ÃÅ™enà z cesty: '%s'. Zdá se, že se v kódu nacházà " +"chyba. ProsÃm, zkontrolujte syntax." #: editor/editor_node.cpp msgid "" @@ -2022,7 +2010,6 @@ msgstr "VýchozÃ" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" msgstr "Zobrazit v souborovém systému" @@ -2107,7 +2094,6 @@ msgid "Save Scene" msgstr "Uložit scénu" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "Uložit vÅ¡echny scény" @@ -2137,7 +2123,7 @@ msgid "Undo" msgstr "ZpÄ›t" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Znovu" @@ -2166,9 +2152,8 @@ msgid "Tools" msgstr "Nástroje" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "OtevÅ™Ãt Správce projektu?" +msgstr "OtevÅ™Ãt složku s daty projektu" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2473,7 +2458,7 @@ msgstr "OtevÅ™Ãt editor skriptů" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "" +msgstr "OtevÅ™Ãt knihovnu assetů" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -2492,9 +2477,8 @@ msgid "Thumbnail..." msgstr "Náhled..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "Pluginy" +msgstr "Upravit plugin" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -2523,9 +2507,8 @@ msgstr "Upravit:" #: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp #: editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "Start!" +msgstr "Start" #: editor/editor_profiler.cpp msgid "Measure:" @@ -2577,11 +2560,11 @@ msgstr "" #: editor/editor_properties.cpp msgid "Layer" -msgstr "" +msgstr "Vrstva" #: editor/editor_properties.cpp msgid "Bit %d, value %d" -msgstr "" +msgstr "Bit %d, hodnota %d" #: editor/editor_properties.cpp msgid "[Empty]" @@ -2596,6 +2579,8 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"Nelze vytvoÅ™it ViewportTexture na zdroji uloženém jako soubor.\n" +"Zdroj musà patÅ™it scénÄ›." #: editor/editor_properties.cpp msgid "" @@ -2644,9 +2629,8 @@ msgstr "Konvertovat na %s" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Open Editor" -msgstr "OtevÅ™Ãt v editoru" +msgstr "OtevÅ™Ãt editor" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" @@ -2694,7 +2678,6 @@ msgid "Write your logic in the _run() method." msgstr "NapiÅ¡te svůj kód v _run() metodÄ›." #: editor/editor_run_script.cpp -#, fuzzy msgid "There is an edited scene already." msgstr "NÄ›jaka scéna už je upravována." @@ -2753,11 +2736,11 @@ msgstr "(AktuálnÃ)" #: editor/export_template_manager.cpp msgid "Retrieving mirrors, please wait..." -msgstr "" +msgstr "ZÃskávánà zrcadel, prosÃm Äekejte..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "" +msgstr "Odstranit Å¡ablonu verze '%s'?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." @@ -2781,18 +2764,20 @@ msgstr "Extrakce exportnÃch Å¡ablon" #: editor/export_template_manager.cpp msgid "Importing:" -msgstr "" +msgstr "ImportovánÃ:" #: editor/export_template_manager.cpp msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" +"Nebyly nalezeny odkazy pro staženà této verze. PÅ™Ãmé staženà je dostupné " +"pouze pro oficiálnà vydánÃ." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve." -msgstr "" +msgstr "Nelze vyÅ™eÅ¡it." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2802,7 +2787,7 @@ msgstr "Nelze se pÅ™ipojit." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response." -msgstr "" +msgstr "Žádná odpovÄ›Ä." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2812,22 +2797,23 @@ msgstr "Požadavek se nezdaÅ™il." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Redirect Loop." -msgstr "" +msgstr "Zacyklené pÅ™esmÄ›rovánÃ." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Failed:" -msgstr "" +msgstr "Selhalo:" #: editor/export_template_manager.cpp msgid "Download Complete." -msgstr "" +msgstr "Stahovánà dokonÄeno." #: editor/export_template_manager.cpp msgid "" "Templates installation failed. The problematic templates archives can be " "found at '%s'." msgstr "" +"Instalace Å¡ablon selhala. Problémové archivy Å¡ablon lze nalézt na '%s'." #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2843,11 +2829,11 @@ msgstr "Odpojeno" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "ŘeÅ¡Ãm" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "Nelze vyÅ™eÅ¡it" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2877,19 +2863,19 @@ msgstr "Chyba pÅ™ipojenÃ" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "" +msgstr "Selhánà SSL handshaku" #: editor/export_template_manager.cpp msgid "Current Version:" -msgstr "" +msgstr "Aktuálnà verze:" #: editor/export_template_manager.cpp msgid "Installed Versions:" -msgstr "" +msgstr "Instalované verze:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "" +msgstr "Instalovat ze souboru" #: editor/export_template_manager.cpp msgid "Remove Template" @@ -2918,9 +2904,8 @@ msgstr "" "ukládána!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "OblÃbené:" +msgstr "OblÃbené" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -3005,14 +2990,12 @@ msgid "Instance" msgstr "Instance" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "OblÃbené:" +msgstr "PÅ™idat do oblÃbených" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "Odebrat ze skupiny" +msgstr "Odebrat z oblÃbených" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3043,12 +3026,10 @@ msgid "New Resource..." msgstr "Nový zdroj..." #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Expand All" msgstr "Rozbalit vÅ¡e" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" msgstr "Sbalit vÅ¡e" @@ -3109,24 +3090,20 @@ msgid "Create Script" msgstr "VytvoÅ™it skript" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" msgstr "NajÃt v souborech" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "NajÃt: " +msgstr "NajÃt:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "Složka: " +msgstr "Složka:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "Filtr: " +msgstr "Filtry:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3303,12 +3280,10 @@ msgid "Failed to load resource." msgstr "Selhalo nahránà zdroje." #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" msgstr "Rozbalit vÅ¡echny vlastnosti" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" msgstr "Sbalit vÅ¡echny vlastnosti" @@ -3450,6 +3425,10 @@ msgid "" "Ctrl+LMB: Split Segment.\n" "RMB: Erase Point." msgstr "" +"Upravit existujÃcà polygon:\n" +"LMB: PÅ™esunout bod.\n" +"Ctrl+LMB: RozdÄ›lit segment.\n" +"RMB: Vymazat bod." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Delete points" @@ -3467,15 +3446,14 @@ msgstr "PÅ™idat animaci" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Load.." -msgstr "NaÄÃst" +msgstr "NaÄÃst.." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "" +msgstr "Tento typ uzlu nelze použÃt. Jsou povoleny pouze koÅ™enové uzly." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -3494,37 +3472,32 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "" +msgstr "Zvolte a pÅ™esuňte body. Nové uzly vytvoÅ™te pomocà RMB." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Create points." -msgstr "Odstranit body" +msgstr "VytvoÅ™it body." #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Erase points." -msgstr "RMB: Vymazat bod." +msgstr "Vymazat body." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Point" -msgstr "PÅ™esunout bod" +msgstr "Bod" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Open Animation Node" -msgstr "Jméno animace:" +msgstr "OtevÅ™Ãt uzel animace" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists" -msgstr "Akce '%s' již existuje!" +msgstr "TrojúhelnÃk již existuje" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." @@ -3588,15 +3561,13 @@ msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node.." -msgstr "PÅ™idat uzel" +msgstr "PÅ™idat uzel.." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Editovat filtry" +msgstr "Upravit filtrované stopy:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Enable filtering" @@ -3608,15 +3579,15 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "" +msgstr "Nový název animace:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" -msgstr "" +msgstr "Nová animace" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "" +msgstr "ZmÄ›nit název animace:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Delete Animation?" @@ -3628,14 +3599,12 @@ msgid "Remove Animation" msgstr "Smazat animaci" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "Chyba: Neplatné jméno animace!" +msgstr "Neplatné jméno animace!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "Chyba: Jméno animace už existuje!" +msgstr "Jméno animace už existuje!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -3659,9 +3628,8 @@ msgid "Duplicate Animation" msgstr "Duplikovat animaci" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to copy!" -msgstr "ERROR: Nevybrána animace pro kopÃrovánÃ!" +msgstr "Žádná animace pro kopÃrovánÃ!" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -3677,9 +3645,8 @@ msgid "Paste Animation" msgstr "Vložit animaci" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "No animation to edit!" -msgstr "ERROR: Nevybrána animace pro úpravu!" +msgstr "Žádná animace pro úpravu!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" @@ -3723,14 +3690,12 @@ msgid "New" msgstr "Nový" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Edit Transitions..." -msgstr "PÅ™echody" +msgstr "Upravit pÅ™echody..." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Open in Inspector" -msgstr "OtevÅ™Ãt v editoru" +msgstr "OtevÅ™Ãt v inspektoru" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -3823,7 +3788,7 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "End" -msgstr "" +msgstr "Konec" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" @@ -3858,14 +3823,12 @@ msgid "" msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Create new nodes." -msgstr "VytvoÅ™it nový %s" +msgstr "VytvoÅ™it nové uzly." #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Connect nodes." -msgstr "PÅ™ipojit uzly" +msgstr "PÅ™ipojit uzly." #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy @@ -3881,9 +3844,8 @@ msgid "Set the end animation. This is useful for sub-transitions." msgstr "" #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Transition: " -msgstr "PÅ™echod" +msgstr "PÅ™echod: " #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -4075,7 +4037,7 @@ msgstr "Neúspěšná kontrola sha256 hashe" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Asset Download Error:" -msgstr "" +msgstr "Chyba pÅ™i stahovánà assetu:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Downloading (%s / %s)..." @@ -4107,7 +4069,7 @@ msgstr "Chyba pÅ™i stahovánÃ" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "" +msgstr "Stahovánà tohoto assetu právÄ› probÃhá!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "First" @@ -4480,9 +4442,8 @@ msgid "Show Origin" msgstr "Zobrazit poÄátek" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Show Viewport" -msgstr "Zobrazit pomocné" +msgstr "Zobrazit Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" @@ -4501,13 +4462,12 @@ msgid "Layout" msgstr "RozloženÃ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Insert keys." -msgstr "Vložit klÃÄe" +msgstr "Vložit klÃÄe." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "" +msgstr "Vložit klÃÄ (existujÃcà stopy)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" @@ -4887,11 +4847,11 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "" +msgstr "CÃlový povrch:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" -msgstr "" +msgstr "Zdrojová mesh:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "X-Axis" @@ -4911,11 +4871,11 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" -msgstr "" +msgstr "Náhodná rotace:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Tilt:" -msgstr "" +msgstr "Náhodné naklonÄ›nÃ:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" @@ -4927,7 +4887,7 @@ msgstr "Naplnit" #: editor/plugins/navigation_polygon_editor_plugin.cpp msgid "Create Navigation Polygon" -msgstr "" +msgstr "VytvoÅ™it navigaÄnà polygon" #: editor/plugins/particles_2d_editor_plugin.cpp #, fuzzy @@ -5089,12 +5049,12 @@ msgstr "Shift+TáhnutÃ:" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "KliknutÃ: PÅ™idat bod" +msgstr "Klik: PÅ™idat bod" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "" +msgstr "Pravý klik: Smazat bod" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" @@ -5141,9 +5101,8 @@ msgid "Curve Point #" msgstr "Bod kÅ™ivky #" #: editor/plugins/path_editor_plugin.cpp -#, fuzzy msgid "Set Curve Point Position" -msgstr "Odstranit signál" +msgstr "Nastavit pozici bodu kÅ™ivky" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" @@ -5407,12 +5366,11 @@ msgstr "Zdroj" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "AnimationTree nemá nastavenou cestu k AnimstionPlayer" #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Path to AnimationPlayer is invalid" -msgstr "Strom animace je neplatný." +msgstr "Cesta k AnimationPlayer je neplatná" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -5423,19 +5381,16 @@ msgid "Close and save changes?" msgstr "ZavÅ™Ãt a uložit zmÄ›ny?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "Chyba pÅ™i naÄÃtánÃ:" +msgstr "Chyba pÅ™i zápisu textového souboru:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." -msgstr "Chyba - Nelze vytvoÅ™it skript v souborovém systému." +msgstr "Chyba: nelze naÄÃst soubor." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "Chyba - Nelze vytvoÅ™it skript v souborovém systému." +msgstr "Chyba nelze naÄÃst soubor." #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -5458,18 +5413,16 @@ msgid "Error importing" msgstr "Chyba pÅ™i importu" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Nová složka..." +msgstr "Nový textový soubor..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" msgstr "OtevÅ™Ãt soubor" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Uložit jako..." +msgstr "Uložit soubor jako..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5516,9 +5469,8 @@ msgid "File" msgstr "Soubor" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Zobrazit soubory" +msgstr "Nový textový soubor" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5606,9 +5558,8 @@ msgid "Keep Debugger Open" msgstr "Nechat ladÃcà program otevÅ™ený" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" -msgstr "Debugovat externÃm editorem" +msgstr "Debugovat v externÃm editoru" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -5651,9 +5602,8 @@ msgid "Debugger" msgstr "Ladicà program" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" -msgstr "Prohledat výsledky" +msgstr "Výsledky hledánÃ" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -5664,9 +5614,8 @@ msgid "(ignore)" msgstr "(ignorovat)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "PÅ™ejÃt na funkci..." +msgstr "PÅ™ejÃt na funkci" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5755,12 +5704,10 @@ msgid "Trim Trailing Whitespace" msgstr "Osekat koncové mezery" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" msgstr "PÅ™evést odsazenà na mezery" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" msgstr "PÅ™evést odsazenà na taby" @@ -5778,12 +5725,10 @@ msgid "Remove All Breakpoints" msgstr "Odstranit vÅ¡echny breakpointy" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" msgstr "PÅ™ejÃt na dalÅ¡Ã breakpoint" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" msgstr "PÅ™ejÃt na pÅ™edchozà breakpoint" @@ -5792,17 +5737,14 @@ msgid "Find Previous" msgstr "NajÃt pÅ™edchozÃ" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." msgstr "NajÃt v souborech..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." msgstr "PÅ™ejÃt na funkci..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." msgstr "PÅ™ejÃt na řádek..." @@ -5843,9 +5785,8 @@ msgid "Create physical skeleton" msgstr "VytvoÅ™it fyzickou kostru" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Spustit" +msgstr "Spustit IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -7089,18 +7030,20 @@ msgid "" "You don't currently have any projects.\n" "Would you like to explore the official example projects in the Asset Library?" msgstr "" +"V této chvÃli nemáte žádný projekt.\n" +"PÅ™ejete si prozkoumat oficiálnà ukázkové projekty v knihovnÄ› assetů?" #: editor/project_settings_editor.cpp msgid "Key " -msgstr "" +msgstr "Klávesa " #: editor/project_settings_editor.cpp msgid "Joy Button" -msgstr "" +msgstr "TlaÄÃtko gamepadu" #: editor/project_settings_editor.cpp msgid "Joy Axis" -msgstr "" +msgstr "Osa gamepadu" #: editor/project_settings_editor.cpp msgid "Mouse Button" @@ -7559,9 +7502,8 @@ msgid "Initial value for the counter" msgstr "" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Krok:" +msgstr "Krok" #: editor/rename_dialog.cpp msgid "Amount by which counter is incremented for each node" @@ -9195,7 +9137,7 @@ msgstr "" "prosÃm zdroj tvar!" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9449,6 +9391,9 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "PÅ™iblÞit:" + #~ msgid "Class List:" #~ msgstr "Seznam tÅ™Ãd:" diff --git a/editor/translations/da.po b/editor/translations/da.po index 03e628df44..c92d2f2ece 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -556,9 +556,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Zoom Ind" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1728,6 +1727,12 @@ msgstr "Denne handling kan ikke foretages uden tree root" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2173,7 +2178,7 @@ msgid "Undo" msgstr "Fortryd" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Annuller Fortyd" @@ -9274,7 +9279,7 @@ msgstr "" "til det!" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9522,6 +9527,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoom Ind" + #~ msgid "Class List:" #~ msgstr "Class Liste:" diff --git a/editor/translations/de.po b/editor/translations/de.po index 95d275e732..fc6396fd5b 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -34,12 +34,13 @@ # Robin Bauknecht <robin.bauknecht@gmail.com>, 2018. # Julian Retzlaff <julian.retzlaff@googlemail.com>, 2018. # asyncial <mahlburg@posteo.de>, 2018. +# ssantos <ssantos@web.de>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-11-10 20:07+0000\n" -"Last-Translator: So Wieso <sowieso@dukun.de>\n" +"PO-Revision-Date: 2018-12-04 22:14+0000\n" +"Last-Translator: ssantos <ssantos@web.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -47,7 +48,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.3-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -63,9 +64,8 @@ msgstr "" "Nicht genügend Bytes zum Dekodieren des Byte-Strings oder ungültiges Format." #: core/math/expression.cpp -#, fuzzy msgid "Invalid input %i (not passed) in expression" -msgstr "Ungültige Eingabe %i (fehlgeschlagen) in Ausdruck" +msgstr "Ungültige Eingabe %i (nicht bestanden) in Ausdruck" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -433,14 +433,12 @@ msgid "Delete Selection" msgstr "Auswahl löschen" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" -msgstr "Gehe zum nächsten Schritt" +msgstr "Zum nächsten Schritt" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" -msgstr "Gehe zum vorherigen Schritt" +msgstr "Zum vorherigen Schritt" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -579,8 +577,9 @@ msgid "Warnings:" msgstr "Warnungen:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Vergrößerung:" +#, fuzzy +msgid "Font Size:" +msgstr "Quellschriftgröße:" #: editor/code_editor.cpp msgid "Line:" @@ -693,9 +692,8 @@ msgid "Edit Connection: " msgstr "Verbindung bearbeiten: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "Sollen wirklich alle Verbindungen mit diesem Signal entfernt werden?" +msgstr "Sollen wirklich alle Verbindungen des Signals „%s“ entfernt werden?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -852,10 +850,8 @@ msgid "Error loading:" msgstr "Fehler beim Laden:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "" -"Die Szene konnte aufgrund fehlender Abhängigkeiten nicht geladen werden:" +msgstr "Ladefehler aufgrund fehlender Abhängigkeiten:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1343,7 +1339,6 @@ msgid "File Exists, Overwrite?" msgstr "Datei existiert bereits. Ãœberschreiben?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" msgstr "Diesen Ordner auswählen" @@ -1352,15 +1347,13 @@ msgid "Copy Path" msgstr "Pfad kopieren" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" msgstr "Im Dateimanager öffnen" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" -msgstr "Zeige im Dateimanager" +msgstr "Im Dateimanager anzeigen" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1503,19 +1496,16 @@ msgid "Methods" msgstr "Methoden" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "Methoden" +msgstr "Methoden:" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "Eigenschaften" +msgstr "Motiv-Eigenschaften" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "Eigenschaften:" +msgstr "Motiv-Eigenschaften:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1542,14 +1532,12 @@ msgid "Constants:" msgstr "Konstanten:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "Beschreibung" +msgstr "Klassenbeschreibung" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "Beschreibung:" +msgstr "Klassenbeschreibung:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1566,12 +1554,10 @@ msgstr "" "$url2]Meldung von Problemen[/url][/color] sind sehr erwünscht." #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "Eigenschaften-Beschreibung:" +msgstr "Eigenschaften-Beschreibung" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" msgstr "Eigenschaften-Beschreibung:" @@ -1584,12 +1570,10 @@ msgstr "" "$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr erwünscht!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "Methoden-Beschreibung:" +msgstr "Methoden-Beschreibung" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" msgstr "Methoden-Beschreibung:" @@ -1607,49 +1591,40 @@ msgid "Search Help" msgstr "Hilfe durchsuchen" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Normale Ansicht" +msgstr "Alles anzeigen" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "Klassen" +msgstr "Nur Klassen" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "Methoden" +msgstr "Nur Methoden" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "Signale" +msgstr "Nur Signale" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "Konstanten" +msgstr "Nur Konstanten" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "Eigenschaften" +msgstr "Nur Eigenschaften" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "Eigenschaften" +msgstr "Nur Motiv-Eigenschaften" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "Mitglieder" +msgstr "Mitgliedstyp" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "Klasse:" +msgstr "Klasse" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -1750,6 +1725,12 @@ msgstr "Diese Aktion kann nicht ohne eine Wurzel ausgeführt werden." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1758,7 +1739,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "Momentan geöffnete Szenen können nicht überschrieben werden!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -2021,13 +2002,12 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Erweiterungsskript konnte nicht geladen werden: ‚%s‘." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"Erweiterungsskript konnte nicht geladen werden: ‚%s‘ Skript ist nicht im " -"Werkzeugmodus." +"Erweiterungsskript konnte nicht von folgendem Pfad geladen werden: ‚%s‘. Es " +"scheint ein Fehler im Quellcode zu sein. Bitte Syntax überprüfen." #: editor/editor_node.cpp msgid "" @@ -2084,7 +2064,6 @@ msgstr "Standard" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" msgstr "Im Dateisystem anzeigen" @@ -2169,7 +2148,6 @@ msgid "Save Scene" msgstr "Szene speichern" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "Alle Szenen speichern" @@ -2199,7 +2177,7 @@ msgid "Undo" msgstr "Rückgängig machen" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Wiederherstellen" @@ -2657,6 +2635,9 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"ViewportTextures können nicht für Ressourcen erstellt werden die als Datei " +"gespeichert sind.\n" +"Diese Ressourcen müssen zu einer Szene gehören." #: editor/editor_properties.cpp msgid "" @@ -2665,6 +2646,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"ViewportTexture kann für diese Ressource nicht erstellt werden weil sie " +"nicht als lokal zu einer Szene markiert wurde.\n" +"Bitte die ‚Lokal zu Szene‘-Eigenschaft an dieser Ressource aktivieren (und " +"an allen Ressourcen die sie enthalten, bis zum nächsten Node)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2981,9 +2966,8 @@ msgstr "" "Der Dateityp-Cache wird nicht gespeichert!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "Favoriten:" +msgstr "Favoriten" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -3069,14 +3053,12 @@ msgid "Instance" msgstr "Instanz" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "Favoriten:" +msgstr "Zu Favoriten hinzufügen" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "Aus Gruppe entfernen" +msgstr "Aus Favoriten entfernen" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3107,12 +3089,10 @@ msgid "New Resource..." msgstr "Neue Ressource..." #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Expand All" -msgstr "Alle expandieren" +msgstr "Alle ausklappen" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" msgstr "Alle einklappen" @@ -3136,9 +3116,8 @@ msgid "Re-Scan Filesystem" msgstr "Dateisystem erneut einlesen" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle split mode" -msgstr "Modus umschalten" +msgstr "Geteilten Modus umschalten" #: editor/filesystem_dock.cpp msgid "Search files" @@ -3175,24 +3154,20 @@ msgid "Create Script" msgstr "Erstelle Skript" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" msgstr "In Dateien suchen" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "Suche: " +msgstr "Suche:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "Verzeichnis: " +msgstr "Verzeichnis:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "Filter" +msgstr "Filter:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3369,12 +3344,10 @@ msgid "Failed to load resource." msgstr "Laden der Ressource gescheitert." #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" msgstr "Alle Eigenschaften ausklappen" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" msgstr "Alle Eigenschaften einklappen" @@ -4329,9 +4302,8 @@ msgid "Resize CanvasItem" msgstr "CanvasItem in Größe anpassen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem" -msgstr "CanvasItem rotieren" +msgstr "CanvasItem skalieren" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" @@ -4396,9 +4368,8 @@ msgid "Rotate Mode" msgstr "Rotationsmodus" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "Skalierungsmodus (R)" +msgstr "Skalierungsmodus" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4499,9 +4470,8 @@ msgid "Restores the object's children's ability to be selected." msgstr "Macht Unterobjekte dieses Objekts wieder auswählbar." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Skeleton Options" -msgstr "Skelett" +msgstr "Skelett-Einstellungen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" @@ -4555,7 +4525,7 @@ msgstr "Zeige Ansichtsfenster (Viewport)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Gruppe zeigen und Icons sperren" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4998,7 +4968,6 @@ msgid "Create Navigation Polygon" msgstr "Erzeuge Navigationspolygon" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" msgstr "Generiere Sichtbarkeits-Rechteck" @@ -5482,7 +5451,6 @@ msgid "Error writing TextFile:" msgstr "Fehler beim Schreiben von Textdatei:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." msgstr "Fehler: Datei konnte nicht geladen werden." @@ -5583,7 +5551,6 @@ msgid "Copy Script Path" msgstr "Skriptpfad kopieren" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" msgstr "Zurück im Verlauf" @@ -5655,7 +5622,6 @@ msgid "Keep Debugger Open" msgstr "Debugger offen halten" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" msgstr "Mit externem Editor debuggen" @@ -5700,7 +5666,6 @@ msgid "Debugger" msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" msgstr "Suchergebnisse" @@ -5713,9 +5678,8 @@ msgid "(ignore)" msgstr "(ignorieren)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "Springe zu Funktion..." +msgstr "Springe zu Funktion" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5804,12 +5768,10 @@ msgid "Trim Trailing Whitespace" msgstr "Kürze Leerraum am Zeilenende" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" msgstr "Konvertiere Einrückung zu Leerzeichen" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" msgstr "Konvertiere Einrückung zu Tabulatoren" @@ -5827,12 +5789,10 @@ msgid "Remove All Breakpoints" msgstr "Lösche alle Haltepunkte" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" msgstr "Springe zum nächsten Haltepunkt" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" msgstr "Springe zum vorigen Haltepunkt" @@ -5841,17 +5801,14 @@ msgid "Find Previous" msgstr "Finde Vorheriges" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." msgstr "In Dateien suchen..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." msgstr "Springe zu Funktion..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." msgstr "Springe zu Zeile..." @@ -5947,11 +5904,11 @@ msgstr "Animationsschlüsselbild eingefügt." #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch" -msgstr "Tonhöhe" +msgstr "Neigen" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "Gieren" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -6118,9 +6075,8 @@ msgid "Freelook Speed Modifier" msgstr "Freisicht Geschwindigkeitsregler" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" -msgstr "Sichtrotation sperren" +msgstr "Sichtrotation gesperrt" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -6624,9 +6580,8 @@ msgid "Fix Invalid Tiles" msgstr "Ungültige Kacheln reparieren" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Auswahl zentrieren" +msgstr "Auswahl ausschneiden" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6673,32 +6628,28 @@ msgid "Pick Tile" msgstr "Wähle Kachel" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "Auswahl verschieben" +msgstr "Auswahl kopieren" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate left" -msgstr "Rotationsmodus" +msgstr "Nach links rotieren" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate right" -msgstr "nach rechts" +msgstr "Nach rechts rotieren" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "Horizontal spiegeln" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "Vertikal spiegeln" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear transform" -msgstr "Transformation" +msgstr "Transform löschen" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" @@ -6729,9 +6680,8 @@ msgid "Display tile's names (hold Alt Key)" msgstr "Kachelnamen anzeigen (Alt-Taste halten)" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove selected texture and ALL TILES which use it?" -msgstr "Wirklich ausgewählte Textur und ALLE sie nutzenden Kacheln entfernen?" +msgstr "Ausgewählte Textur und ALLE sie nutzenden Kacheln entfernen?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." @@ -6746,10 +6696,10 @@ msgid "Merge from scene?" msgstr "Aus Szene vereinen?" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "%s file(s) were not added because was already on the list." msgstr "" -" Dateien wurde nicht hinzugefügt weil sie schon in der Liste vorhanden waren." +"%s Datei(en) wurde(n) nicht hinzugefügt weil sie schon in der Liste " +"vorhanden war(en)." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6836,14 +6786,12 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "Export-Vorlagen für dieses Systeme fehlen / sind fehlerhaft:" #: editor/project_export.cpp -#, fuzzy msgid "Release" -msgstr "gerade losgelassen" +msgstr "Veröffentlichung" #: editor/project_export.cpp -#, fuzzy msgid "Exporting All" -msgstr "Exportiere für %s" +msgstr "Exportiere alles" #: editor/project_export.cpp msgid "Presets" @@ -6854,9 +6802,8 @@ msgid "Add..." msgstr "Hinzufügen..." #: editor/project_export.cpp -#, fuzzy msgid "Export Path:" -msgstr "Exportvorlage:" +msgstr "Exportpfad:" #: editor/project_export.cpp msgid "Resources" @@ -6921,14 +6868,12 @@ msgid "Export PCK/Zip" msgstr "Exportiere PCK/Zip" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "Export-Modus:" +msgstr "Export-Modus?" #: editor/project_export.cpp -#, fuzzy msgid "Export All" -msgstr "Exportieren" +msgstr "Alles exportieren" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -7618,16 +7563,14 @@ msgid "Step" msgstr "Schritt" #: editor/rename_dialog.cpp -#, fuzzy msgid "Amount by which counter is incremented for each node" -msgstr "Wert um welchen Zähler für jedes Node erhöht wird" +msgstr "Wert um welchen der Zähler für jedes Node erhöht wird" #: editor/rename_dialog.cpp msgid "Padding" msgstr "Versatz" #: editor/rename_dialog.cpp -#, fuzzy msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." @@ -7778,6 +7721,8 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"Wenn „Editierbare Instanz“ deaktiviert wird, werden alle Eigenschaften " +"dieses Nodes wieder in ihren Ausgangszustand zurückgesetzt." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7852,9 +7797,8 @@ msgid "Clear Inheritance" msgstr "Leere Vererbung" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open documentation" -msgstr "Öffne Godot-Referenzdokumentation" +msgstr "Dokumentation öffnen" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -7869,9 +7813,8 @@ msgid "Change Type" msgstr "Typ ändern" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" -msgstr "Skript öffnen" +msgstr "Skript erweitern" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -8035,9 +7978,8 @@ msgid "Path is empty" msgstr "Pfad ist leer" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty" -msgstr "Sprite ist leer!" +msgstr "Dateiname ist leer" #: editor/script_create_dialog.cpp msgid "Path is not local" @@ -8128,9 +8070,8 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Stack Trace" -msgstr "Aufrufsverlauf" +msgstr "Stacktrace" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8580,7 +8521,7 @@ msgstr "Ende des inneren Exception-Stack-Traces" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "NavMesh backen" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8969,12 +8910,11 @@ msgstr "VisualScript suchen" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "%s abrufen" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Set %s" -msgstr "Setzen " +msgstr "%s setzen" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9075,6 +9015,8 @@ msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"CPUParticles2D-Animationen benötigen ein CanvasItemMaterial mit der " +"Eigenschaft „Particles Animation“ aktiviert." #: scene/2d/light_2d.cpp msgid "" @@ -9134,6 +9076,8 @@ msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Particles2D-Animationen benötigen ein CanvasItemMaterial mit der Eigenschaft " +"„Particles Animation“ aktiviert." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9284,15 +9228,16 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." -msgstr "" -"Nichts ist sichtbar da keine Meshe den Zeichendurchläufen zugewiesen wurden." +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Nichts ist sichtbar da kein Mesh zugewiesen wurden." #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial with " "\"Billboard Particles\" enabled." msgstr "" +"CPUParticles-Animationen benötigen ein SpatialMaterial mit der Eigenschaft " +"„Billboard Particles“ aktiviert." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -9323,24 +9268,24 @@ msgid "" "Particles animation requires the usage of a SpatialMaterial with \"Billboard " "Particles\" enabled." msgstr "" +"Particles-Animationen benötigen ein SpatialMaterial mit der Eigenschaft " +"„Billboard Particles“ aktiviert." #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." msgstr "" -"PathFollow2D funktioniert nur, wenn es als Unterobjekt eines Path2D-Nodes " +"PathFollow funktioniert nur, wenn es als Unterobjekt eines Path-Nodes " "gesetzt wird." #: scene/3d/path.cpp -#, fuzzy msgid "OrientedPathFollow only works when set as a child of a Path node." msgstr "" -"PathFollow2D funktioniert nur, wenn es als Unterobjekt eines Path2D-Nodes " -"gesetzt wird." +"OrientedPathFollow funktioniert nur, wenn es als Unterobjekt eines Path-" +"Nodes gesetzt wird." #: scene/3d/path.cpp msgid "OrientedPathFollow requires up vectors enabled in its parent Path." -msgstr "" +msgstr "OrientedPathFollow benötigt im Elternpfad aktivierte Aufwärtsvektoren." #: scene/3d/physics_body.cpp msgid "" @@ -9382,7 +9327,6 @@ msgid "This body will be ignored until you set a mesh" msgstr "Diese Körper wird ignoriert werden bis ein Mesh gesetzt wurde" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" "Size changes to SoftBody will be overridden by the physics engine when " "running.\n" @@ -9479,7 +9423,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If exp_edit is true min_value must be > 0." -msgstr "" +msgstr "Wenn exp_edit true ist muss min_value größer als null sein." #: scene/gui/scroll_container.cpp msgid "" @@ -9558,6 +9502,9 @@ msgstr "Zuweisung an Uniform." msgid "Varyings can only be assigned in vertex function." msgstr "Varyings können nur in Vertex-Funktion zugewiesen werden." +#~ msgid "Zoom:" +#~ msgstr "Vergrößerung:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Sollen wirklich alle Verbindungen entfernt werden von „" @@ -10280,9 +10227,6 @@ msgstr "Varyings können nur in Vertex-Funktion zugewiesen werden." #~ msgid "Source Font:" #~ msgstr "Quellschriftart:" -#~ msgid "Source Font Size:" -#~ msgstr "Quellschriftgröße:" - #~ msgid "Dest Resource:" #~ msgstr "Ziel-Ressource:" diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index 66085ed6b8..4ec0459cf0 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -549,7 +549,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1696,6 +1696,12 @@ msgstr "Ohne eine Szene kann das nicht funktionieren." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2102,7 +2108,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -9147,7 +9153,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 7f7d1391a1..beba25ff56 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -528,7 +528,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1643,6 +1643,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2039,7 +2045,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8839,7 +8845,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/el.po b/editor/translations/el.po index 3f04d1ce6a..1eec84e7e5 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -546,8 +546,9 @@ msgid "Warnings:" msgstr "Î Ïοειδοποιήσεις:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "ΜεγÎθυνση:" +#, fuzzy +msgid "Font Size:" +msgstr "ÎœÎγεθος πηγαίας γÏαμματοσειÏάς:" #: editor/code_editor.cpp msgid "Line:" @@ -1709,6 +1710,12 @@ msgstr "Αυτή η λειτουÏγία δεν μποÏεί να γίνει Ï‡Ï #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2161,7 +2168,7 @@ msgid "Undo" msgstr "ΑναίÏεση" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "ΑκÏÏωση αναίÏεσης" @@ -9332,7 +9339,7 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" "Τίποτα δεν είναι οÏατό, επειδή δεν Îχουν οÏιστεί πεÏάσματα για τα πλÎγματα." @@ -9603,6 +9610,9 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "ΜεγÎθυνση:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "" #~ "Είστε σίγουÏοι πως θÎλετε να αφαιÏÎσετε όλες τις συνδÎσεις απο το \"" @@ -10320,9 +10330,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Πηγαία γÏαμματοσειÏά:" -#~ msgid "Source Font Size:" -#~ msgstr "ÎœÎγεθος πηγαίας γÏαμματοσειÏάς:" - #~ msgid "Dest Resource:" #~ msgstr "Î ÏŒÏος Ï€ÏοοÏισμοÏ:" diff --git a/editor/translations/es.po b/editor/translations/es.po index 6c1b5908cd..012cff890c 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -33,12 +33,13 @@ # Franklin David Macias Avellan <franklin.macias864@gmail.com>, 2018. # Dianiel GarcÃa <jdangarr@gmail.com>, 2018. # ayahuasca1979 <ayahuasca1979@gmail.com>, 2018. +# Elena G <elena.guzbla@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-09-14 23:25+0000\n" -"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: Elena G <elena.guzbla@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -46,7 +47,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -580,8 +581,9 @@ msgid "Warnings:" msgstr "Advertencias:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Zoom:" +#, fuzzy +msgid "Font Size:" +msgstr "Tamaño de la tipografÃa elegida:" #: editor/code_editor.cpp msgid "Line:" @@ -1745,6 +1747,12 @@ msgstr "Esta operación no puede realizarse sin una escena raÃz." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1753,7 +1761,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "¡No se puede sobreescribir una escena que está abierta!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -2194,7 +2202,7 @@ msgid "Undo" msgstr "Deshacer" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Rehacer" @@ -4553,8 +4561,9 @@ msgid "Show Viewport" msgstr "Ver viewport" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Mostrar iconos de grupo y bloqueo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -5948,8 +5957,9 @@ msgid "Pitch" msgstr "Altura" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Yaw" -msgstr "" +msgstr "Girar desde eje vertical" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -6685,11 +6695,11 @@ msgstr "Mover a la derecha" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "Voltear horizontalmente" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "Voltear verticalmente" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy @@ -8965,12 +8975,11 @@ msgstr "Buscar en VisualScript" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Obtener %s" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Set %s" -msgstr "Establecer " +msgstr "Establecer %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9070,6 +9079,8 @@ msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"La animación CPUParticles2D requiere el uso de un CanvasItemMaterial con " +"\"Particles Animation\" activado." #: scene/2d/light_2d.cpp msgid "" @@ -9127,6 +9138,8 @@ msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"La animación Particles2D requiere el uso de un CanvasItemMaterial con " +"\"Particles Animation\" activado." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9273,7 +9286,7 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" "Nada es visible porque las mallas no se han asignado a los pases de dibujo." @@ -9282,6 +9295,8 @@ msgid "" "CPUParticles animation requires the usage of a SpatialMaterial with " "\"Billboard Particles\" enabled." msgstr "" +"La animación CPUParticles requiere el uso de un SpatialMaterial con " +"\"Billboard Particles\" activado." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -9312,6 +9327,8 @@ msgid "" "Particles animation requires the usage of a SpatialMaterial with \"Billboard " "Particles\" enabled." msgstr "" +"La animación de partÃculas requiere el uso de un SpatialMaterial con " +"\"Billboard Particles\" activado." #: scene/3d/path.cpp #, fuzzy @@ -9461,7 +9478,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If exp_edit is true min_value must be > 0." -msgstr "" +msgstr "Si exp_edit es `true` min_value debe ser > 0." #: scene/gui/scroll_container.cpp msgid "" @@ -9537,6 +9554,9 @@ msgstr "Asignación a uniform." msgid "Varyings can only be assigned in vertex function." msgstr "Solo se pueden asignar variaciones en funciones de vértice." +#~ msgid "Zoom:" +#~ msgstr "Zoom:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "¿Estás seguro/a que quieres quitar todas las conexiones de el/la \"" @@ -10271,9 +10291,6 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." #~ msgid "Source Font:" #~ msgstr "TipografÃa elegida:" -#~ msgid "Source Font Size:" -#~ msgstr "Tamaño de la tipografÃa elegida:" - #~ msgid "Dest Resource:" #~ msgstr "Recurso de destino:" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 133c013958..f9196dbc6d 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-11-21 19:08+0000\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" "Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" @@ -22,7 +22,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.3-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -407,12 +407,10 @@ msgid "Delete Selection" msgstr "Eliminar Selección" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" msgstr "Ir a Paso Próximo" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" msgstr "Ir a Paso Previo" @@ -553,8 +551,9 @@ msgid "Warnings:" msgstr "Advertencias:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Zoom:" +#, fuzzy +msgid "Font Size:" +msgstr "Tamaño de la TipografÃa de Origen:" #: editor/code_editor.cpp msgid "Line:" @@ -667,9 +666,9 @@ msgid "Edit Connection: " msgstr "Editar Conexión: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "¿Estás seguro/a que querés quitar todas las conexiones de esta señal?" +msgstr "" +"¿Estás seguro/a que querés quitar todas las conexiones de la señal \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -822,10 +821,8 @@ msgid "Error loading:" msgstr "Error cargando:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "" -"La escena falló al cargar debido a las siguientes dependencias faltantes:" +msgstr "Fallo la carga debido a dependencias faltantes:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1311,24 +1308,21 @@ msgid "File Exists, Overwrite?" msgstr "El Archivo Existe, Sobreescribir?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" -msgstr "Seleccionar esta Carpeta" +msgstr "Seleccionar Esta Carpeta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Copiar Ruta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" msgstr "Abrir en el Explorador de Archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" -msgstr "Mostrar en Gestor de Archivos" +msgstr "Mostrar en Explorador de Archivos" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1471,19 +1465,16 @@ msgid "Methods" msgstr "Métodos" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "Métodos" +msgstr "Métodos:" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "Propiedades" +msgstr "Propiedades de Tema" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "Propiedades:" +msgstr "Propiedades de Tema:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1510,14 +1501,12 @@ msgid "Constants:" msgstr "Constantes:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "Descripción" +msgstr "Descripción de Clase" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "Descripción:" +msgstr "Descripción de Clase:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1534,14 +1523,12 @@ msgstr "" "url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "Descripción de Propiedad:" +msgstr "Descripción de Propiedades" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" -msgstr "Descripción de Propiedad:" +msgstr "Descripción de Propiedades:" #: editor/editor_help.cpp msgid "" @@ -1552,12 +1539,10 @@ msgstr "" "[color=$color][url=$url]contribuyendo una[/url][/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "Descripción de Métodos:" +msgstr "Descripción de Método" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" msgstr "Descripción de Métodos:" @@ -1575,49 +1560,40 @@ msgid "Search Help" msgstr "Buscar en la Ayuda" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Mostrar Normal" +msgstr "Mostrar Todo" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "Clases" +msgstr "Solo Clases" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "Métodos" +msgstr "Solo Métodos" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "Señales" +msgstr "Solo Señales" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "Constantes" +msgstr "Solo Constantes" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "Propiedades" +msgstr "Solo Propiedades" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "Propiedades" +msgstr "Solo Propiedades de Tema" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "Miembros" +msgstr "Tipo de Miembro" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "Clase:" +msgstr "Clase" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -1717,6 +1693,12 @@ msgstr "Esta operación no puede hacerse sin una raÃz de árbol." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1725,7 +1707,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "No se puede sobrescribir una escena que todavÃa esta abierta!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1988,13 +1970,12 @@ msgid "Unable to load addon script from path: '%s'." msgstr "No se pudo cargar el script de addon desde la ruta: '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"No se pudo cargar el script de addon desde la ruta: El script '%s' no está " -"en modo tool." +"No se pudo cargar el script de addon desde la ruta: '%s' Parece haber un " +"error en el código. Por favor, revisá la sintaxis." #: editor/editor_node.cpp msgid "" @@ -2050,7 +2031,6 @@ msgstr "Por Defecto" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" msgstr "Mostrar en Sistema de Archivos" @@ -2135,9 +2115,8 @@ msgid "Save Scene" msgstr "Guardar Escena" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" -msgstr "Guardar todas las Escenas" +msgstr "Guardar Todas las Escenas" #: editor/editor_node.cpp msgid "Close Scene" @@ -2165,7 +2144,7 @@ msgid "Undo" msgstr "Deshacer" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Rehacer" @@ -2623,6 +2602,8 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"No se puede crear una ViewportTexture en recursos guardados como archivo.\n" +"El recurso debe pertenecer a una escena." #: editor/editor_properties.cpp msgid "" @@ -2631,6 +2612,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"No se puede crear una ViewportTexture en este recurso porque no esta " +"asignado como local a la escena.\n" +"Por favor activá la propiedad 'local a escena' en él (y en todos los " +"recursos que lo contienen hasta un nodo)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2949,9 +2934,8 @@ msgstr "" "de tipos de archivo!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "Favoritos:" +msgstr "Favoritos" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -3037,14 +3021,12 @@ msgid "Instance" msgstr "Instancia" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "Favoritos:" +msgstr "Agregar a favoritos" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "Quitar del Grupo" +msgstr "Quitar de favoritos" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3075,14 +3057,12 @@ msgid "New Resource..." msgstr "Nuevo Recurso..." #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Expand All" -msgstr "Expandir todos" +msgstr "Expandir Todos" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" -msgstr "Colapsar todos" +msgstr "Colapsar Todos" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3104,9 +3084,8 @@ msgid "Re-Scan Filesystem" msgstr "Reexaminar Sistema de Archivos" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle split mode" -msgstr "Act/Desact. Modo" +msgstr "Act/Desact. Modo Partido" #: editor/filesystem_dock.cpp msgid "Search files" @@ -3142,24 +3121,20 @@ msgid "Create Script" msgstr "Crear Script" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" -msgstr "Encontrar en archivos" +msgstr "Buscar en archivos" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "Encontrar: " +msgstr "Buscar:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "Carpeta: " +msgstr "Carpeta:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "Filtros" +msgstr "Filtros:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3336,14 +3311,12 @@ msgid "Failed to load resource." msgstr "Fallo al cargar recurso." #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" -msgstr "Expandir todas las propiedades" +msgstr "Expandir Todas las Propiedades" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" -msgstr "Colapsar todas las propiedades" +msgstr "Colapsar Todas las Propiedades" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -4299,9 +4272,8 @@ msgid "Resize CanvasItem" msgstr "Redimensionar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem" -msgstr "Rotar CanvasItem" +msgstr "Escalar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" @@ -4366,9 +4338,8 @@ msgid "Rotate Mode" msgstr "Modo Rotar" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "Modo de Escalado (R)" +msgstr "Modo de Escalado" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4467,9 +4438,8 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaurar la habilidad de seleccionar los hijos de un objeto." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Skeleton Options" -msgstr "Esqueleto" +msgstr "Opciones de Esqueleto" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" @@ -4523,7 +4493,7 @@ msgstr "Mostrar Viewport" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Mostrar Grupo Y Bloquear Iconos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4965,9 +4935,8 @@ msgid "Create Navigation Polygon" msgstr "Crear PolÃgono de Navegación" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" -msgstr "Generar Rect. de Visibilidad" +msgstr "Generando Rect. de Visibilidad" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5446,9 +5415,8 @@ msgid "Error writing TextFile:" msgstr "Error al escribir el TextFile:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." -msgstr "Error no se pudo cargar el archivo." +msgstr "Error: no se pudo cargar el archivo." #: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." @@ -5547,7 +5515,6 @@ msgid "Copy Script Path" msgstr "Copiar Ruta de Script" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" msgstr "Previo en Historial" @@ -5619,9 +5586,8 @@ msgid "Keep Debugger Open" msgstr "Mantener el Depurador Abierto" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" -msgstr "Depurar con editor externo" +msgstr "Depurar con Editor Externo" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -5664,9 +5630,8 @@ msgid "Debugger" msgstr "Depurador" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" -msgstr "Resultados de la búsqueda" +msgstr "Resultados de la Búsqueda" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -5677,9 +5642,8 @@ msgid "(ignore)" msgstr "(ignorar)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "Ir a Función..." +msgstr "Ir a Función" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5768,14 +5732,12 @@ msgid "Trim Trailing Whitespace" msgstr "Eliminar Espacios Sobrantes al Final" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" msgstr "Convertir Indentación En Espacios" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" -msgstr "Convertir Indentación En Tabs" +msgstr "Convertir Indentación En Tabulaciones" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5791,31 +5753,26 @@ msgid "Remove All Breakpoints" msgstr "Quitar Todos los Breakpoints" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" -msgstr "Ir a Próximo Breakpoint" +msgstr "Ir al Breakpoint Siguiente" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" -msgstr "Ir a Anterior Breakpoint" +msgstr "Ir al Breakpoint Anterior" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Encontrar Anterior" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." -msgstr "Encontrar en archivos..." +msgstr "Buscar en Archivos..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." msgstr "Ir a Función..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." msgstr "Ir a LÃnea..." @@ -5913,7 +5870,7 @@ msgstr "Altura" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "Yaw" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -6080,9 +6037,8 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de Velocidad de Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" -msgstr "Trabar Rotación de Vista" +msgstr "Rotación de Vista Trabada" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -6584,9 +6540,8 @@ msgid "Fix Invalid Tiles" msgstr "Corregir Tiles Inválidos" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Centrar Selección" +msgstr "Cortar Selección" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6633,32 +6588,28 @@ msgid "Pick Tile" msgstr "Elegir Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "Mover Selección" +msgstr "Copiar Selección" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate left" -msgstr "Modo Rotar" +msgstr "Rotar a la izquierda" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate right" -msgstr "Mover a la Derecha" +msgstr "Rotar a la derecha" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "Espejar horizontalmente" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "Espejar verticalmente" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear transform" -msgstr "Transform" +msgstr "Reestablecer transform" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" @@ -6689,7 +6640,6 @@ msgid "Display tile's names (hold Alt Key)" msgstr "Mostrar nombres de tiles (mantener Tecla Alt)" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove selected texture and ALL TILES which use it?" msgstr "¿Quitar Textura Seleccionada y TODOS LOS TILES que la usen?" @@ -6706,9 +6656,8 @@ msgid "Merge from scene?" msgstr "¿Mergear desde escena?" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "%s file(s) were not added because was already on the list." -msgstr " archivo(s) no fueron agregados porque ya estaban en la lista." +msgstr "%s archivo(s) no fueron agregados porque ya estaban en la lista." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6797,14 +6746,12 @@ msgstr "" "corruptas:" #: editor/project_export.cpp -#, fuzzy msgid "Release" -msgstr "recién soltado" +msgstr "Release" #: editor/project_export.cpp -#, fuzzy msgid "Exporting All" -msgstr "Exportando para %s" +msgstr "Exportar Todo" #: editor/project_export.cpp msgid "Presets" @@ -6815,9 +6762,8 @@ msgid "Add..." msgstr "Agregar..." #: editor/project_export.cpp -#, fuzzy msgid "Export Path:" -msgstr "Presets de Exportación:" +msgstr "Ruta de Exportación:" #: editor/project_export.cpp msgid "Resources" @@ -6882,14 +6828,12 @@ msgid "Export PCK/Zip" msgstr "Exportar PCK/Zip" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "Modo de Exportación:" +msgstr "¿Modo de Exportación?" #: editor/project_export.cpp -#, fuzzy msgid "Export All" -msgstr "Exportar" +msgstr "Exportar Todos" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -7580,7 +7524,6 @@ msgid "Step" msgstr "Paso" #: editor/rename_dialog.cpp -#, fuzzy msgid "Amount by which counter is incremented for each node" msgstr "Cantidad en la que se incrementa el contador por cada nodo" @@ -7589,7 +7532,6 @@ msgid "Padding" msgstr "Relleno" #: editor/rename_dialog.cpp -#, fuzzy msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." @@ -7738,6 +7680,8 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"Desactivar \"editable_instance\" causara que todas las propiedades del nodo " +"vuelvan a sus valores por defecto." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7813,9 +7757,8 @@ msgid "Clear Inheritance" msgstr "Limpiar Herencia" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open documentation" -msgstr "Abrir la documentación online de Godot" +msgstr "Abrir documentación" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -7830,9 +7773,8 @@ msgid "Change Type" msgstr "Cambiar Tipo" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" -msgstr "Abrir Script" +msgstr "Extender Script" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -7996,9 +7938,8 @@ msgid "Path is empty" msgstr "La ruta está vacÃa" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty" -msgstr "El sprite esta vacÃo!" +msgstr "Nombre de archivo vacio" #: editor/script_create_dialog.cpp msgid "Path is not local" @@ -8089,9 +8030,8 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Stack Trace" -msgstr "Frames del Stack" +msgstr "Stack Trace" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8542,7 +8482,7 @@ msgstr "Fin del stack trace de excepción interna" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "Hacer Bake de NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8929,12 +8869,11 @@ msgstr "Buscar en VisualScript" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Obtener %s" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Set %s" -msgstr "Set " +msgstr "Asignar %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9033,6 +8972,8 @@ msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animar CPUParticles2D requiere el uso de un CanvasItemMaterial con " +"\"Particles Animation\" activado." #: scene/2d/light_2d.cpp msgid "" @@ -9088,6 +9029,8 @@ msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animar de Particles2D requiere el uso de un CanvasItemMaterial con " +"\"Particles Animation\" activado." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9233,14 +9176,16 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." -msgstr "Nada visible ya que no se asigno pasadas de dibujado a los meshes." +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Nada visible ya que no se asignó ningún mesh." #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial with " "\"Billboard Particles\" enabled." msgstr "" +"Animar CPUParticles requiere el uso de un SpatialMaterial con \"Billboard " +"Particles\" activado." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -9269,22 +9214,25 @@ msgid "" "Particles animation requires the usage of a SpatialMaterial with \"Billboard " "Particles\" enabled." msgstr "" +"Animar Particles requiere el uso de un SpatialMaterial con \"Billboard " +"Particles\" activado." #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." msgstr "" -"PathFollow2D sólo funciona cuando está seteado como hijo de un nodo Path2D." +"PathFollow solo funciona cuando está asignado como hijo de un nodo Path." #: scene/3d/path.cpp -#, fuzzy msgid "OrientedPathFollow only works when set as a child of a Path node." msgstr "" -"PathFollow2D sólo funciona cuando está seteado como hijo de un nodo Path2D." +"OrientedPathFollow solo funciona cuando esta asignado como hijo de un nodo " +"Path." #: scene/3d/path.cpp msgid "OrientedPathFollow requires up vectors enabled in its parent Path." msgstr "" +"OrientedPathFollow requiere que los vectores up estén activos en su Path " +"padre." #: scene/3d/physics_body.cpp msgid "" @@ -9326,15 +9274,14 @@ msgid "This body will be ignored until you set a mesh" msgstr "Este cuerpo sera ignorado hasta que le asignes un mesh" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" "Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Los cambios de tamaño a SoftBody serán sobre escritos por el motor de fÃsica " -"al ejecutar.\n" -"Cambiá el tamaño de los collision shapes hijos." +"Los cambios de tamaño a un SoftBody serán sobrescritos por el motor de " +"fÃsica al ejecutar.\n" +"En su lugar, cambiá el tamaño de los collision shapes hijos." #: scene/3d/sprite_3d.cpp msgid "" @@ -9418,7 +9365,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If exp_edit is true min_value must be > 0." -msgstr "" +msgstr "Si exp_edit es verdadero min_value debe ser > 0." #: scene/gui/scroll_container.cpp msgid "" @@ -9494,6 +9441,9 @@ msgstr "Asignación a uniform." msgid "Varyings can only be assigned in vertex function." msgstr "Solo se pueden asignar variaciones en funciones de vértice." +#~ msgid "Zoom:" +#~ msgstr "Zoom:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "¿Estás seguro/a que querés quitar todas las conexiones de el/la \"" @@ -10217,9 +10167,6 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." #~ msgid "Source Font:" #~ msgstr "TipografÃa de Origen:" -#~ msgid "Source Font Size:" -#~ msgstr "Tamaño de la TipografÃa de Origen:" - #~ msgid "Dest Resource:" #~ msgstr "Recurso de Dest:" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 4f908a5ad2..8b0fcd0b15 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -560,9 +560,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "بزرگنمایی بیشتر" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1724,6 +1723,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2126,7 +2131,7 @@ msgid "Undo" msgstr "خنثی کردن (Undo)" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -9252,7 +9257,7 @@ msgstr "" "برای آن ایجاد کنید!" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9501,6 +9506,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "بزرگنمایی بیشتر" + #~ msgid "Class List:" #~ msgstr "Ùهرست کلاس:" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 40def6086b..8e3c605afb 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-10-04 17:26+0000\n" +"PO-Revision-Date: 2018-12-04 05:21+0000\n" "Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -545,8 +545,9 @@ msgid "Warnings:" msgstr "Varoitukset:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Lähennä:" +#, fuzzy +msgid "Font Size:" +msgstr "Etunäkymä" #: editor/code_editor.cpp msgid "Line:" @@ -659,9 +660,8 @@ msgid "Edit Connection: " msgstr "Muokkaa yhteyttä: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "Oletko varma, että haluat poistaa kaikki kytkennät tältä signaalilta?" +msgstr "Oletko varma, että haluat poistaa kaikki kytkennät signaalilta \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -816,9 +816,8 @@ msgid "Error loading:" msgstr "Virhe ladatessa:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "Skenen lataaminen epäonnistui puuttuvan riippuvuuden takia:" +msgstr "Lataaminen epäonnistui puuttuvien riippuvuuksien takia:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1709,6 +1708,12 @@ msgstr "Tätä toimintoa ei voi tehdä ilman että puun juuri on olemassa." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2141,7 +2146,7 @@ msgid "Undo" msgstr "Peru" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Tee uudelleen" @@ -9195,7 +9200,7 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" "Mitään ei näy, koska mesheille ei ole asetettu piirtopyyhkäisyjä (draw " "passes)." @@ -9458,6 +9463,9 @@ msgstr "Sijoitus uniformille." msgid "Varyings can only be assigned in vertex function." msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa." +#~ msgid "Zoom:" +#~ msgstr "Lähennä:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Oletko varma, että haluat poistaa kaikki yhteydet kohteesta \"" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index e62b20139a..4e2515081c 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -50,12 +50,14 @@ # Florent Wijanto <f_wijanto@hotmail.com>, 2018. # Olivier gareau <olivier.gareau@protonmail.com>, 2018. # Rémi Verschelde <akien@godotengine.org>, 2018. +# Rémi Bintein <reminus5@hotmail.fr>, 2018. +# Sylvain Corsini <sylvain.corsini@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-11-26 16:07+0000\n" -"Last-Translator: Rémi Verschelde <akien@godotengine.org>\n" +"PO-Revision-Date: 2018-11-29 13:23+0000\n" +"Last-Translator: Sylvain Corsini <sylvain.corsini@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -452,12 +454,10 @@ msgid "Delete Selection" msgstr "Supprimer la sélection" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" msgstr "Aller à l'étape suivante" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" msgstr "Aller à l'étape précédente" @@ -598,8 +598,9 @@ msgid "Warnings:" msgstr "Avertissements :" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Agrandissement (%) :" +#, fuzzy +msgid "Font Size:" +msgstr "Taille de la police source :" #: editor/code_editor.cpp msgid "Line:" @@ -712,7 +713,6 @@ msgid "Edit Connection: " msgstr "Modifier les connexions : " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "Voulez-vous vraiment supprimer toutes les connexions de ce signal ?" @@ -870,7 +870,6 @@ msgid "Error loading:" msgstr "Erreur au chargement :" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" msgstr "La scène n'a pas pu être chargée à cause de dépendances manquantes :" @@ -1358,7 +1357,6 @@ msgid "File Exists, Overwrite?" msgstr "Le fichier existe, l'écraser ?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" msgstr "Sélectionner ce dossier" @@ -1367,13 +1365,11 @@ msgid "Copy Path" msgstr "Copier le chemin" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" msgstr "Ouvrir dans le gestionnaire de fichiers" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" msgstr "Montrer dans le gestionnaire de fichiers" @@ -1518,19 +1514,16 @@ msgid "Methods" msgstr "Méthodes :" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" msgstr "Méthodes :" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "Propriétés" +msgstr "Propriétés du thème" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "Propriétés :" +msgstr "Propriétés du thème :" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1557,14 +1550,12 @@ msgid "Constants:" msgstr "Constantes :" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "Description" +msgstr "Description de la classe" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "Description :" +msgstr "Description de la classe :" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1581,12 +1572,10 @@ msgstr "" "demander un[/url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" msgstr "Description des propriétés :" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" msgstr "Description des propriétés :" @@ -1599,12 +1588,10 @@ msgstr "" "[color=$color][url=$url]en créant[/url][/color] une !" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" msgstr "Description de la méthode :" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" msgstr "Description de la méthode :" @@ -1622,47 +1609,38 @@ msgid "Search Help" msgstr "Chercher dans l'aide" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Affichage normal" +msgstr "Tout afficher" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "Classes" +msgstr "Classes seulement" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "Méthodes :" +msgstr "Méthodes seulement" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "Signaux" +msgstr "Signaux seulement" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "Constantes" +msgstr "Constantes seulement" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "Propriétés" +msgstr "Propriétés seulement" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "Propriétés" +msgstr "Propriétés du thème seulement" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "Membres" +msgstr "Type de membre" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" msgstr "Classe :" @@ -1763,6 +1741,12 @@ msgstr "Cette opération ne peut être réalisée sans une arborescence racine." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1771,7 +1755,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "Impossible de ré-écrire une scène encore ouverte !" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -2040,13 +2024,12 @@ msgstr "" "Impossible de charger le script de l’extension depuis le chemin : '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"Impossible de charger le script de l’extension depuis le chemin : '%s' Le " -"script n'est pas en mode outil." +"Impossible de charger le script de l’extension depuis le chemin : '%s' Il " +"semble y avoir une erreur dans le code, merci de vérifier la syntaxe." #: editor/editor_node.cpp msgid "" @@ -2102,7 +2085,6 @@ msgstr "Par défaut" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" msgstr "Montrer dans le système de fichiers" @@ -2187,7 +2169,6 @@ msgid "Save Scene" msgstr "Enregistrer la scène" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "Enregistrer toutes les scènes" @@ -2217,7 +2198,7 @@ msgid "Undo" msgstr "Annuler" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Refaire" @@ -2676,6 +2657,9 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"Impossible de créer un ViewportTexture sur des ressources enregistrées comme " +"fichier.\n" +"La ressource a besoin d'appartenir à une scène." #: editor/editor_properties.cpp msgid "" @@ -3002,7 +2986,6 @@ msgstr "" "sera pas sauvé !" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" msgstr "Favoris :" @@ -3091,14 +3074,12 @@ msgid "Instance" msgstr "Instance" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "Favoris :" +msgstr "Ajouter aux favoris" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "Supprimer du groupe" +msgstr "Supprimer des favoris" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3129,12 +3110,10 @@ msgid "New Resource..." msgstr "Nouvelle Ressource…" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Expand All" msgstr "Développer tout" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" msgstr "Réduire tout" @@ -3198,24 +3177,20 @@ msgid "Create Script" msgstr "Créer un script" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" msgstr "Trouver dans les fichiers" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "Trouver : " +msgstr "Trouver :" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "Dossier : " +msgstr "Dossier :" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "Filtres" +msgstr "Filtres :" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3393,12 +3368,10 @@ msgid "Failed to load resource." msgstr "Impossible de charger la ressource." #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" msgstr "Développer toutes les propriétés" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" msgstr "Réduire toutes les propriétés" @@ -4428,9 +4401,8 @@ msgid "Rotate Mode" msgstr "Mode rotation" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "Mode de mise à l'échelle (R)" +msgstr "Mode de mise à l'échelle" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4585,7 +4557,7 @@ msgstr "Montrer La fenêtre d'affichage" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Montrer le groupe et verrouiller les icônes" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -5513,7 +5485,6 @@ msgid "Error writing TextFile:" msgstr "Erreur lors de l'écriture du fichier texte :" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." msgstr "Erreur de chargement de fichier." @@ -5686,7 +5657,6 @@ msgid "Keep Debugger Open" msgstr "Garder le débogueur ouvert" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" msgstr "Déboguer avec un éditeur externe" @@ -5731,7 +5701,6 @@ msgid "Debugger" msgstr "Débogueur" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" msgstr "Résultats de recherche" @@ -5744,9 +5713,8 @@ msgid "(ignore)" msgstr "(ignorer)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "Aller à la fonction…" +msgstr "Aller à la fonction" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5835,12 +5803,10 @@ msgid "Trim Trailing Whitespace" msgstr "Supprimer les espaces de fin de ligne" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" msgstr "Convertir indentations en espaces" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" msgstr "Convertir les indentations en tabulations" @@ -5858,12 +5824,10 @@ msgid "Remove All Breakpoints" msgstr "Supprimer tous les points d'arrêt" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" msgstr "Aller au point d'arrêt suivant" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" msgstr "Aller au point d'arrêt précédent" @@ -5872,17 +5836,14 @@ msgid "Find Previous" msgstr "Trouver le précédent" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." msgstr "Trouver dans les fichiers..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." msgstr "Aller à la fonction…" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." msgstr "Aller à la ligne…" @@ -6149,7 +6110,6 @@ msgid "Freelook Speed Modifier" msgstr "Modificateur de vitesse de la vue libre" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" msgstr "Verrouiller la rotation de la vue" @@ -6655,9 +6615,8 @@ msgid "Fix Invalid Tiles" msgstr "Résoudre les tuiles invalides" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Centrer sur la sélection" +msgstr "Couper la sélection" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6704,27 +6663,24 @@ msgid "Pick Tile" msgstr "Sélectionner une case" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "Déplacer la sélection" +msgstr "Copier la sélection" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate left" -msgstr "Mode rotation" +msgstr "Rotation à gauche" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate right" -msgstr "Aller à droite" +msgstr "Rotation à droite" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "Retourner horizontalement" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "Retourner verticalement" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy @@ -6869,12 +6825,11 @@ msgstr "Modèles d'exportation manquants ou corrompus pour cette plateforme :" #: editor/project_export.cpp #, fuzzy msgid "Release" -msgstr "vient d'être relâché" +msgstr "Réalisation" #: editor/project_export.cpp -#, fuzzy msgid "Exporting All" -msgstr "Exportation pour %s" +msgstr "Tout exporter" #: editor/project_export.cpp msgid "Presets" @@ -6952,14 +6907,12 @@ msgid "Export PCK/Zip" msgstr "Exporter le PCK/ZIP" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "Mode d'exportation :" +msgstr "Mode Exportation?" #: editor/project_export.cpp -#, fuzzy msgid "Export All" -msgstr "Exporter" +msgstr "Tout exporter" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -7651,7 +7604,6 @@ msgid "Step" msgstr "Pas" #: editor/rename_dialog.cpp -#, fuzzy msgid "Amount by which counter is incremented for each node" msgstr "Valeur par laquelle le compteur est incrémenté pour chaque nÅ“ud" @@ -7660,7 +7612,6 @@ msgid "Padding" msgstr "Remplissage" #: editor/rename_dialog.cpp -#, fuzzy msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." @@ -7883,9 +7834,8 @@ msgid "Clear Inheritance" msgstr "Effacer l'héritage" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open documentation" -msgstr "Ouvrir la documentation Godot en ligne" +msgstr "Ouvrir la documentation" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -8066,9 +8016,8 @@ msgid "Path is empty" msgstr "Le chemin est vide" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty" -msgstr "Le sprite est vide !" +msgstr "Le nom de fichier est vide" #: editor/script_create_dialog.cpp msgid "Path is not local" @@ -9002,12 +8951,11 @@ msgstr "Rechercher VisualScript" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Obtenir %s" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Set %s" -msgstr "Définir " +msgstr "Définir %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9101,10 +9049,13 @@ msgstr "" "créer une ressource de forme !" #: scene/2d/cpu_particles_2d.cpp +#, fuzzy msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"L'animation CPUParticles2D a besoin de l'usage d'un CanvasItemMaterial avec " +"\"Animation de Particules\" activé." #: scene/2d/light_2d.cpp msgid "" @@ -9160,10 +9111,13 @@ msgstr "" "comportement n'est donc imprimé." #: scene/2d/particles_2d.cpp +#, fuzzy msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"L'animation Particles2D a besoin de l'usage d'un CanvasItemMaterial avec " +"\"Animation de Particules\" activé." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9310,11 +9264,8 @@ msgstr "" "de forme pour cette CollisionShape !" #: scene/3d/cpu_particles.cpp -#, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." -msgstr "" -"Rien n'est visible car les maillages n'ont pas été assignés au tirage des " -"passes." +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Rien n'est visible car aucun maillage n'a été assigné." #: scene/3d/cpu_particles.cpp msgid "" @@ -9505,7 +9456,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If exp_edit is true min_value must be > 0." -msgstr "" +msgstr "Si exp_edit est vrai min_value doit être > 0." #: scene/gui/scroll_container.cpp msgid "" @@ -9581,6 +9532,9 @@ msgstr "Affectation à l'uniforme." msgid "Varyings can only be assigned in vertex function." msgstr "Les variations ne peuvent être affectées que dans la fonction vertex." +#~ msgid "Zoom:" +#~ msgstr "Agrandissement (%) :" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Voulez-vous vraiment supprimer toutes les connexions du ''" @@ -10308,9 +10262,6 @@ msgstr "Les variations ne peuvent être affectées que dans la fonction vertex." #~ msgid "Source Font:" #~ msgstr "Police source :" -#~ msgid "Source Font Size:" -#~ msgstr "Taille de la police source :" - #~ msgid "Dest Resource:" #~ msgstr "Ressource de destination :" diff --git a/editor/translations/he.po b/editor/translations/he.po index ed2657f46b..3d9418b4fd 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -564,8 +564,8 @@ msgstr "×זהרות" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "להתקרב" +msgid "Font Size:" +msgstr "מבט קדמי" #: editor/code_editor.cpp msgid "Line:" @@ -1706,6 +1706,12 @@ msgstr "×œ× × ×™×ª×Ÿ לבצע פעולה זו ×œ×œ× ×©×•×¨×© ×”×¢×¥." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2112,7 +2118,7 @@ msgid "Undo" msgstr "ביטול" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "ביצוע חוזר" @@ -9090,7 +9096,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9318,6 +9324,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "להתקרב" + #~ msgid "Class List:" #~ msgstr "רשימת מחלקות:" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index 92f64ab6d1..1188b26a7c 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -544,9 +544,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "बड़ा करो" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1706,6 +1705,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2103,7 +2108,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8955,7 +8960,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9182,6 +9187,10 @@ msgid "Varyings can only be assigned in vertex function." msgstr "" #, fuzzy +#~ msgid "Zoom:" +#~ msgstr "बड़ा करो" + +#, fuzzy #~ msgid "Match case" #~ msgstr "à¤à¤• जैसा:" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index 5524b9319d..7fb0a8b353 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -564,8 +564,8 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "NagyÃtás" +msgid "Font Size:" +msgstr "Körvonal Mérete:" #: editor/code_editor.cpp msgid "Line:" @@ -1727,6 +1727,12 @@ msgstr "Ezt a műveletet nem lehet fagyökér nélkül végrehajtani." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2179,7 +2185,7 @@ msgid "Undo" msgstr "Visszavonás" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Mégis" @@ -9231,7 +9237,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9467,6 +9473,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "NagyÃtás" + #~ msgid "Class List:" #~ msgstr "Osztálylista:" diff --git a/editor/translations/id.po b/editor/translations/id.po index 04d72d94d2..a63dd99bc3 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -572,8 +572,8 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Perbesar Pandangan" +msgid "Font Size:" +msgstr "Tampilan Depan." #: editor/code_editor.cpp msgid "Line:" @@ -1740,6 +1740,12 @@ msgstr "Operasi ini tidak dapat diselesaikan tanpa root pohon." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2183,7 +2189,7 @@ msgid "Undo" msgstr "Batal" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Ulangi" @@ -9433,7 +9439,7 @@ msgstr "" "ciptakan sebuah resource bentuk untuk itu!" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9690,6 +9696,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Perbesar Pandangan" + #~ msgid "Class List:" #~ msgstr "Daftar Class:" diff --git a/editor/translations/is.po b/editor/translations/is.po index 518e43ac10..0300245fc6 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -552,7 +552,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1668,6 +1668,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2065,7 +2071,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8879,7 +8885,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/it.po b/editor/translations/it.po index 3a1f0a2dd2..6a293bb667 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -587,8 +587,8 @@ msgstr "Avvertimento" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom(%):" +msgid "Font Size:" +msgstr "Dimensione Font sorgente:" #: editor/code_editor.cpp msgid "Line:" @@ -1758,6 +1758,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2207,7 +2213,7 @@ msgid "Undo" msgstr "Annulla" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Redo" @@ -9525,7 +9531,7 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "Nulla é visibile perché le mesh non sono state assegnate ai draw pass." #: scene/3d/cpu_particles.cpp @@ -9797,6 +9803,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoom(%):" + #~ msgid "Class List:" #~ msgstr "Lista Classi:" @@ -10528,9 +10538,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Font Sorgente:" -#~ msgid "Source Font Size:" -#~ msgstr "Dimensione Font sorgente:" - #~ msgid "Dest Resource:" #~ msgstr "Risorsa di destin. :" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index e2db7c16d1..72ea5d8d14 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -18,18 +18,19 @@ # sugusan <sugusan.development@gmail.com>, 2018. # Nathan Lovato <nathan.lovato.art@gmail.com>, 2018. # nyanode <akaruooyagi@yahoo.co.jp>, 2018. +# nitenook <admin@alterbaum.net>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-10-09 09:33+0000\n" -"Last-Translator: nyanode <akaruooyagi@yahoo.co.jp>\n" +"PO-Revision-Date: 2018-12-04 22:14+0000\n" +"Last-Translator: nitenook <admin@alterbaum.net>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" "Language: ja\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.2.1\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -52,11 +53,11 @@ msgstr "インスタンス㌠null ã®ãŸã‚ã€self ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "演算å ï¼…s 〠%s 〠%s ã«å¯¾ã™ã‚‹å€¤ãŒç„¡åŠ¹ã§ã™ã€‚" +msgstr "演算å %s 〠%s 〠%s ã«å¯¾ã™ã‚‹å€¤ãŒç„¡åŠ¹ã§ã™ã€‚" #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "基本型 ï¼…s ã®åž‹ ï¼…s ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒç„¡åŠ¹ã§ã™" +msgstr "基本型 %s ã®åž‹ %s ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒç„¡åŠ¹ã§ã™" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" @@ -68,7 +69,7 @@ msgstr "'%s' ã®å¼•æ•°ã¯ç„¡åŠ¹ã§ã™" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "'ï¼…s' ã¸ã®å‘¼ã³å‡ºã—:" +msgstr "'%s' ã¸ã®å‘¼ã³å‡ºã—:" #: editor/animation_bezier_editor.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -194,7 +195,7 @@ msgstr "ã“ã®ãƒˆãƒ©ãƒƒã‚¯ã‚’除去ã™ã‚‹ã€‚" #: editor/animation_track_editor.cpp msgid "Time (s): " -msgstr "時間: " +msgstr "時間 (秒): " #: editor/animation_track_editor.cpp msgid "Continuous" @@ -559,8 +560,9 @@ msgid "Warnings:" msgstr "è¦å‘Š:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "ズーム:" +#, fuzzy +msgid "Font Size:" +msgstr "ソース フォントサイズ:" #: editor/code_editor.cpp msgid "Line:" @@ -579,8 +581,8 @@ msgid "" "Target method not found! Specify a valid method or attach a script to target " "Node." msgstr "" -"対象メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ï¼ã€€æœ‰åŠ¹ãªãƒ¡ã‚½ãƒƒãƒ‰ã‚’指定ã™ã‚‹ã‹ã€å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã«ã‚¹ã‚¯" -"リプトを添付ã—ã¦ãã ã•ã„。" +"対象メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ï¼æœ‰åŠ¹ãªãƒ¡ã‚½ãƒƒãƒ‰ã‚’指定ã™ã‚‹ã‹ã€å¯¾è±¡ãƒŽãƒ¼ãƒ‰ã«ã‚¹ã‚¯ãƒª" +"プトを添付ã—ã¦ãã ã•ã„。" #: editor/connections_dialog.cpp msgid "Connect To Node:" @@ -649,7 +651,7 @@ msgstr "'%s' ã‚’ '%s' ã«æŽ¥ç¶š" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "'%s' ã‹ã‚‰ '%s' を切æ–" +msgstr "'%s' ã‚’ '%s' ã‹ã‚‰åˆ‡æ–" #: editor/connections_dialog.cpp msgid "Disconnect all from signal: '%s'" @@ -835,7 +837,7 @@ msgstr "ä¾å˜é–¢ä¿‚ãŒç¢ºèªã§ããšã€ã‚·ãƒ¼ãƒ³ã‚’èªè¾¼ã‚ã¾ã›ã‚“:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" -msgstr "ã¨ã‚‚ã‹ãé–‹ã" +msgstr "ã¨ã«ã‹ãé–‹ã" #: editor/dependency_editor.cpp msgid "Which action should be taken?" @@ -1117,7 +1119,7 @@ msgstr "オーディオãƒã‚¹ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’é–‹ã" #: editor/editor_audio_buses.cpp msgid "There is no 'res://default_bus_layout.tres' file." -msgstr "'res://default_bus_layout.tres' ファイルãŒã‚ã‚Šã¾ã›ã‚“ï¼" +msgstr "'res://default_bus_layout.tres' ファイルãŒã‚ã‚Šã¾ã›ã‚“。" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -1310,9 +1312,8 @@ msgid "File Exists, Overwrite?" msgstr "ファイルãŒæ—¢ã«å˜åœ¨ã—ã¾ã™ã€‚上書ãã—ã¾ã™ã‹ï¼Ÿ" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" -msgstr "ã™ã¹ã¦é¸æŠž" +msgstr "ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠž" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" @@ -1510,14 +1511,12 @@ msgid "Constants:" msgstr "定数:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "説明" +msgstr "クラスã®èª¬æ˜Ž" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "説明:" +msgstr "クラスã®èª¬æ˜Žï¼š" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1651,7 +1650,7 @@ msgstr "出力をクリア" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "エラーコード %d ã«ã‚ˆã‚Šã€ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãŒã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ %d ã§å¤±æ•—ã—ã¾ã—ãŸã€‚" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" @@ -1681,8 +1680,7 @@ msgstr "ä¿å˜ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." msgstr "" -"'ï¼…s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。ファイルãŒç§»å‹•ã¾ãŸã¯å‰Šé™¤ã•ã‚ŒãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾" -"ã™ã€‚" +"'%s' ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“。ファイルãŒç§»å‹•ã¾ãŸã¯å‰Šé™¤ã•ã‚ŒãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚" #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -1718,6 +1716,12 @@ msgstr "ã“ã®æ“作ã¯ã€ãƒ„リー㮠root ãªã—ã§ã¯å®Ÿè¡Œã§ãã¾ã›ã‚“。 #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1726,7 +1730,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "é–‹ã„ã¦ã„るシーンを上書ãã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1980,7 +1984,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "パス 'ï¼…s' ã‹ã‚‰ã‚¢ãƒ‰ã‚ªãƒ³ã‚¹ã‚¯ãƒªãƒ—トをèªè¾¼ã‚ã¾ã›ã‚“。" +msgstr "パス '%s' ã‹ã‚‰ã‚¢ãƒ‰ã‚ªãƒ³ã‚¹ã‚¯ãƒªãƒ—トをèªè¾¼ã‚ã¾ã›ã‚“。" #: editor/editor_node.cpp #, fuzzy @@ -2009,7 +2013,7 @@ msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." msgstr "" -"シーン 'ï¼…s' ã¯è‡ªå‹•çš„ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•ã‚ŒãŸã®ã§ã€å¤‰æ›´ã§ãã¾ã›ã‚“。\n" +"シーン '%s' ã¯è‡ªå‹•çš„ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•ã‚ŒãŸã®ã§ã€å¤‰æ›´ã§ãã¾ã›ã‚“。\n" "変更ã™ã‚‹ãŸã‚ã«ã¯ã€æ–°ãŸã«ç¶™æ‰¿ã•ã‚ŒãŸã‚·ãƒ¼ãƒ³ã‚’作æˆã—ã¦ãã ã•ã„。" #: editor/editor_node.cpp @@ -2062,7 +2066,7 @@ msgstr "シーンタブを切替ãˆ" #: editor/editor_node.cpp msgid "%d more files or folders" -msgstr "ï¼…d 以上ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¨ãƒ•ã‚©ãƒ«ãƒ€" +msgstr "%d 以上ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¨ãƒ•ã‚©ãƒ«ãƒ€" #: editor/editor_node.cpp msgid "%d more folders" @@ -2078,11 +2082,11 @@ msgstr "ドックã®ä½ç½®" #: editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "よã見知らãšãƒ¢ãƒ¼ãƒ‰" +msgstr "集ä¸ãƒ¢ãƒ¼ãƒ‰" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." -msgstr "よã見知らãšãƒ¢ãƒ¼ãƒ‰ã‚’切替ãˆã‚‹ã€‚" +msgstr "集ä¸ãƒ¢ãƒ¼ãƒ‰ã‚’切替ãˆã‚‹ã€‚" #: editor/editor_node.cpp msgid "Add a new scene." @@ -2156,12 +2160,12 @@ msgstr "タイルセット..." #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Undo" -msgstr "アンドゥ" +msgstr "å…ƒã«æˆ»ã™" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" -msgstr "リドゥ" +msgstr "ã‚„ã‚Šç›´ã™" #: editor/editor_node.cpp msgid "Revert Scene" @@ -2848,7 +2852,7 @@ msgid "" "found at '%s'." msgstr "" "テンプレートã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ å•é¡Œã®ãƒ†ãƒ³ãƒ—レートã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–㯠" -"'ï¼…s' ã«ã‚ã‚Šã¾ã™ã€‚" +"'%s' ã«ã‚ã‚Šã¾ã™ã€‚" #: editor/export_template_manager.cpp msgid "Error requesting url: " @@ -2898,7 +2902,7 @@ msgstr "接続エラー" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "SS ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ã‚¨ãƒ©ãƒ¼" +msgstr "SSL ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ã‚¨ãƒ©ãƒ¼" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3033,9 +3037,8 @@ msgid "Add to favorites" msgstr "ãŠæ°—ã«å…¥ã‚Š:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "グループã‹ã‚‰é™¤åŽ»" +msgstr "ãŠæ°—ã«å…¥ã‚Šã‹ã‚‰å‰Šé™¤" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3863,7 +3866,7 @@ msgstr "サブトランジションã«ã¯ã€é–‹å§‹ãƒŽãƒ¼ãƒ‰ã¨çµ‚了ノード㌠#: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." -msgstr "パス( ï¼…s )ã«å†ç”Ÿãƒªã‚½ãƒ¼ã‚¹ãŒè¨å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" +msgstr "パス( %s )ã«å†ç”Ÿãƒªã‚½ãƒ¼ã‚¹ãŒè¨å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4341,7 +4344,7 @@ msgstr "Alt+ドラッグ:移動" #, fuzzy msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." msgstr "" -"ï½–ã‚ーを押ã™ã¨ãƒ”ボットã®å¤‰æ›´ã€'Shift+v' ã§ãƒ”ボットをドラッグ(移動ä¸ã§ã‚‚)" +"vã‚ーを押ã™ã¨ãƒ”ボットã®å¤‰æ›´ã€'Shift+v' ã§ãƒ”ボットをドラッグ(移動ä¸ã§ã‚‚)" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -4694,7 +4697,7 @@ msgstr "ç‚¹ã‚’è¿½åŠ " #: editor/plugins/curve_editor_plugin.cpp msgid "Remove point" -msgstr "é¸æŠžã—ã¦ã„ã‚‹ãƒã‚¤ãƒ³ãƒˆï¼ç‚¹ã‚’削除" +msgstr "ãƒã‚¤ãƒ³ãƒˆã‚’除去" #: editor/plugins/curve_editor_plugin.cpp #, fuzzy @@ -5384,7 +5387,7 @@ msgstr "ãƒãƒªã‚´ãƒ³ï¼’Dã®UVエディタ" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy @@ -5460,7 +5463,7 @@ msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "åŠå¾„:" #: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy @@ -5813,7 +5816,7 @@ msgstr "ç›´å‰ã®ã€Œç·¨é›†ã—ãŸæ–‡æ›¸ã€ã¸ç§»å‹•." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "次ã®ã®ã€Œç·¨é›†ã—ãŸæ–‡æ›¸ã€ã¸ç§»å‹•." +msgstr "次ã®ã€Œç·¨é›†ã—ãŸæ–‡æ›¸ã€ã¸ç§»å‹•." #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -6116,7 +6119,7 @@ msgstr "æç”»ã•ã‚ŒãŸã‚ªãƒ–ジェクト" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes" -msgstr "ç´ æã®å¤‰æ›´" +msgstr "マテリアルã®å¤‰æ›´" #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" @@ -6128,7 +6131,7 @@ msgstr "サーフェースã®å¤‰æ›´" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" -msgstr "ドãƒãƒ¼ã‚³ãƒ¼ãƒ«ï¼ˆDaw call)" +msgstr "ドãƒãƒ¼ã‚³ãƒ¼ãƒ«" #: editor/plugins/spatial_editor_plugin.cpp msgid "Vertices" @@ -7065,9 +7068,8 @@ msgid "Add..." msgstr "è¿½åŠ ..." #: editor/project_export.cpp -#, fuzzy msgid "Export Path:" -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" +msgstr "エクスãƒãƒ¼ãƒˆãƒ‘ス:" #: editor/project_export.cpp msgid "Resources" @@ -7284,7 +7286,7 @@ msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ‘ス:" #: editor/project_manager.cpp msgid "Browse" -msgstr "å‚照…" +msgstr "å‚ç…§" #: editor/project_manager.cpp msgid "Unnamed Project" @@ -7578,6 +7580,8 @@ msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." msgstr "" +"無効ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³åã§ã™ã€‚空もã—ãã¯'/', ':', '=', '\\' ã‚„ '\"'ã‚’å«ã‚ã‚‹ã“ã¨ã¯ã§" +"ãã¾ã›ã‚“。" #: editor/project_settings_editor.cpp #, fuzzy @@ -8384,9 +8388,8 @@ msgid "Wrong extension chosen" msgstr "æ‹¡å¼µåãŒèª¤ã£ã¦ã„ã¾ã™" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr "無効ãªãƒ•ã‚©ãƒ³ãƒˆ サイズã§ã™ã€‚" +msgstr "無効ãªãƒ‘ス" #: editor/script_create_dialog.cpp msgid "Invalid class name" @@ -8923,7 +8926,7 @@ msgstr "リソースèªã¿è¾¼ã¿å¤±æ•—" #: modules/mono/editor/godotsharp_editor.cpp msgid "Mono" -msgstr "モノラル音声" +msgstr "Mono" #: modules/mono/editor/godotsharp_editor.cpp msgid "About C# support" @@ -9710,7 +9713,7 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "æ画パスã®ãŸã‚ã®ãƒ¡ãƒƒã‚·ãƒ¥ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ã®ã§è¦‹ãˆã¾ã›ã‚“" #: scene/3d/cpu_particles.cpp @@ -9793,10 +9796,13 @@ msgstr "" "セット) ã”ã¨ã«è¨±å¯ã•ã‚Œã¾ã™ã€‚" #: scene/3d/scenario_fx.cpp +#, fuzzy msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"ã“ã®WorldEnvironmentã¯ç„¡è¦–ã•ã‚Œã¾ã—ãŸã€‚ã‚«ãƒ¡ãƒ©ã‚’è¿½åŠ ã™ã‚‹ã‹(3Dシーンã®å ´åˆ)ã€ã“" +"ã®Environmentã® Backgroundモード ã‚’ Canvas ã«è¨å®šã—ã¾ã™(2Dシーンã®å ´åˆ)。" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" @@ -9975,6 +9981,9 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "ズーム:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "\" ã‹ã‚‰å…¨ã¦ã®æŽ¥ç¶šã‚’除去ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹" @@ -10756,10 +10765,6 @@ msgstr "" #~ msgstr "ソース フォント:" #, fuzzy -#~ msgid "Source Font Size:" -#~ msgstr "ソース フォントサイズ:" - -#, fuzzy #~ msgid "Dest Resource:" #~ msgstr "é€ã‚Šå…ˆã®ãƒªã‚½ãƒ¼ã‚¹:" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index 7e13731d6a..e8b20b048f 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -549,9 +549,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "ზუმის გáƒáƒ–რდáƒ" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1693,6 +1692,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2090,7 +2095,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8940,7 +8945,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9169,6 +9174,10 @@ msgid "Varyings can only be assigned in vertex function." msgstr "" #, fuzzy +#~ msgid "Zoom:" +#~ msgstr "ზუმის გáƒáƒ–რდáƒ" + +#, fuzzy #~ msgid "Whole words" #~ msgstr "მთლიáƒáƒœáƒ˜ სიტყვები" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 31c64514ca..c598e5cb59 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-11-16 16:07+0000\n" +"PO-Revision-Date: 2018-12-03 19:25+0000\n" "Last-Translator: ì†¡íƒœì„ <xotjq237@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" @@ -25,7 +25,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.3-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -406,12 +406,10 @@ msgid "Delete Selection" msgstr "ì„ íƒ ì‚ì œ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" msgstr "ë‹¤ìŒ ìŠ¤í…으로 ì´ë™" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" msgstr "ì´ì „ 스í…으로 ì´ë™" @@ -552,8 +550,9 @@ msgid "Warnings:" msgstr "ê²½ê³ :" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "확대:" +#, fuzzy +msgid "Font Size:" +msgstr "소스 í°íŠ¸ í¬ê¸°:" #: editor/code_editor.cpp msgid "Line:" @@ -666,9 +665,8 @@ msgid "Edit Connection: " msgstr "ì—°ê²° 편집 " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "ì´ ì‹œê·¸ë„ì—ì„œ ëª¨ë“ ì—°ê²°ì„ ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "\"%s\" 시그ë„ì—ì„œ ëª¨ë“ ì—°ê²°ì„ ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -822,9 +820,8 @@ msgid "Error loading:" msgstr "불러오기 중 ì—러:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "ì¢…ì† ê´€ê³„ë¥¼ ì°¾ì„ ìˆ˜ 없어 씬를 불러올 수 없습니다:" +msgstr "ì¢…ì† ê´€ê³„ë¥¼ ì°¾ì„ ìˆ˜ 없어 ì”¬ì„ ë¶ˆëŸ¬ì˜¬ 수 없습니다:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1305,7 +1302,6 @@ msgid "File Exists, Overwrite?" msgstr "파ì¼ì´ 존재합니다. ë®ì–´ì“°ì‹œê² 습니까?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" msgstr "ì´ í´ë” ì„ íƒ" @@ -1314,15 +1310,13 @@ msgid "Copy Path" msgstr "경로 복사" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" -msgstr "íŒŒì¼ ë§¤ë‹ˆì €ì—ì„œ 보기" +msgstr "íŒŒì¼ íƒìƒ‰ê¸°ì—ì„œ 열기" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" -msgstr "íŒŒì¼ ë§¤ë‹ˆì €ì—ì„œ 보기" +msgstr "íŒŒì¼ íƒìƒ‰ê¸°ì—ì„œ 보기" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1465,19 +1459,16 @@ msgid "Methods" msgstr "메서드" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "메서드" +msgstr "메서드:" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "ì†ì„±" +msgstr "테마 ì†ì„±" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "ì†ì„±:" +msgstr "테마 ì†ì„±:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1504,14 +1495,12 @@ msgid "Constants:" msgstr "ìƒìˆ˜:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "설명" +msgstr "í´ëž˜ìŠ¤ 설명" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "설명:" +msgstr "í´ëž˜ìŠ¤ 설명:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1528,12 +1517,10 @@ msgstr "" "니다." #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "ì†ì„± 설명:" +msgstr "ì†ì„± 설명" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" msgstr "ì†ì„± 설명:" @@ -1546,12 +1533,10 @@ msgstr "" "기여하여[/url][/color] ë” ë‚˜ì•„ì§€ê²Œ ë„와주세요!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "메서드 설명:" +msgstr "메서드 설명" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" msgstr "메서드 설명:" @@ -1569,49 +1554,40 @@ msgid "Search Help" msgstr "ë„ì›€ë§ ê²€ìƒ‰" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Normal 표시" +msgstr "ëª¨ë‘ í‘œì‹œ" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "í´ëž˜ìŠ¤(Class)" +msgstr "í´ëž˜ìŠ¤ë§Œ" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "메서드" +msgstr "메서드만" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "시그ë„(Signal)" +msgstr "시그ë„만" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "ìƒìˆ˜(Constant)" +msgstr "ìƒìˆ˜ë§Œ" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "ì†ì„±" +msgstr "ì†ì„±ë§Œ" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "ì†ì„±" +msgstr "테마 ì†ì„±ë§Œ" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "멤버" +msgstr "멤버 타입" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "í´ëž˜ìŠ¤:" +msgstr "í´ëž˜ìŠ¤" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -1710,6 +1686,12 @@ msgstr "ì´ ìž‘ì—…ì€ íŠ¸ë¦¬ 루트 ì—†ì´ëŠ” 불가합니다." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1718,7 +1700,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "ì—´ë ¤ìžˆëŠ” ì”¬ì„ ë®ì–´ 쓸 수 없습니다!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1968,13 +1950,12 @@ msgid "Unable to load addon script from path: '%s'." msgstr "ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"해당 경로ì—ì„œ ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s' 스í¬ë¦½íŠ¸ê°€ tool 모드" -"ê°€ 아닙니다." +"해당 경로ì—ì„œ ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s' ì½”ë“œì— ì˜¤ë¥˜ê°€ 있는 " +"것 같습니다, êµ¬ë¬¸ì„ í™•ì¸í•´ ë³´ì‹ì‹œì˜¤." #: editor/editor_node.cpp msgid "" @@ -2028,7 +2009,6 @@ msgstr "기본" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—ì„œ 보기" @@ -2113,7 +2093,6 @@ msgid "Save Scene" msgstr "씬 ì €ìž¥" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "ëª¨ë“ ì”¬ ì €ìž¥" @@ -2143,7 +2122,7 @@ msgid "Undo" msgstr "ë˜ëŒë¦¬ê¸°" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "다시 실행" @@ -2601,6 +2580,8 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"파ì¼ë¡œ ì €ìž¥ëœ ë¦¬ì†ŒìŠ¤ì—ì„œ ViewportTexture를 만들 수 없습니다.\n" +"리소스가 ì”¬ì— ì†í•´ 있어야 합니다." #: editor/editor_properties.cpp msgid "" @@ -2609,6 +2590,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"리소스가 ì”¬ì— ë¡œì»¬ë¡œ ì„¤ì •ë˜ì§€ 않았기 ë•Œë¬¸ì— ViewportTexture를 만들 수 없습니" +"다.\n" +"ë¦¬ì†ŒìŠ¤ì˜ 'local to scene' ì†ì„±ì„ 켜ì‹ì‹œì˜¤ (ê·¸ë¦¬ê³ ëª¨ë“ ë¦¬ì†ŒìŠ¤ë¥¼ 노드가 í¬í•¨í•˜" +"ê³ ìžˆì–´ì•¼ 합니다)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2923,9 +2908,8 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "file_type_cache.cch를 열수 없어서, íŒŒì¼ íƒ€ìž… ìºì‰¬ë¥¼ ì €ìž¥í•˜ì§€ 않습니다!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "ì¦ê²¨ì°¾ê¸°:" +msgstr "ì¦ê²¨ì°¾ê¸°" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -3009,14 +2993,12 @@ msgid "Instance" msgstr "ì¸ìŠ¤í„´ìŠ¤" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "ì¦ê²¨ì°¾ê¸°:" +msgstr "ì¦ê²¨ì°¾ê¸°ë¡œ 추가" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "그룹ì—ì„œ ì œê±°" +msgstr "ì¦ê²¨ì°¾ê¸°ì—ì„œ ì œê±°" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3047,12 +3029,10 @@ msgid "New Resource..." msgstr "새 리소스..." #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Expand All" msgstr "ëª¨ë‘ í™•ìž¥" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" msgstr "ëª¨ë‘ ì ‘ê¸°" @@ -3076,9 +3056,8 @@ msgid "Re-Scan Filesystem" msgstr "íŒŒì¼ ì‹œìŠ¤í…œ 재검사" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle split mode" -msgstr "모드 í† ê¸€" +msgstr "ë¶„í• ëª¨ë“œ í† ê¸€" #: editor/filesystem_dock.cpp msgid "Search files" @@ -3113,24 +3092,20 @@ msgid "Create Script" msgstr "스í¬ë¦½íŠ¸ 만들기" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" msgstr "파ì¼ì—ì„œ 찾기" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "찾기: " +msgstr "찾기:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "í´ë”: " +msgstr "í´ë”:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "í•„í„°" +msgstr "í•„í„°:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3308,12 +3283,10 @@ msgid "Failed to load resource." msgstr "리소스 불러오기 실패." #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" msgstr "ëª¨ë“ ì†ì„± 펼치기" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" msgstr "ëª¨ë“ ì†ì„± ì ‘ê¸°" @@ -4261,9 +4234,8 @@ msgid "Resize CanvasItem" msgstr "CanvasItem í¬ê¸° ì¡°ì ˆ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem" -msgstr "CanvasItem íšŒì „" +msgstr "CanvasItem 규모" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" @@ -4326,9 +4298,8 @@ msgid "Rotate Mode" msgstr "íšŒì „ 모드" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "í¬ê¸° ì¡°ì ˆ 모드 (R)" +msgstr "규모 모드" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4427,9 +4398,8 @@ msgid "Restores the object's children's ability to be selected." msgstr "오브ì íŠ¸ì˜ ìžì‹ë…¸ë“œê°€ ì„ íƒë 수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Skeleton Options" -msgstr "ìŠ¤ì¼ˆë ˆí†¤" +msgstr "ìŠ¤ì¼ˆë ˆí†¤ ì„¤ì •" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" @@ -4483,7 +4453,7 @@ msgstr "ë·°í¬íŠ¸ 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "그룹과 ìž ê¸ˆ ì•„ì´ì½˜ ë³´ì´ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4924,9 +4894,8 @@ msgid "Create Navigation Polygon" msgstr "네비게ì´ì…˜ í´ë¦¬ê³¤ 만들기" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" -msgstr "가시성 ì§ì‚¬ê°í˜•ì„ 만들기" +msgstr "가시성 ì§ì‚¬ê°í˜• 만들기" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5404,9 +5373,8 @@ msgid "Error writing TextFile:" msgstr "í…스트 íŒŒì¼ ì“°ê¸° ì—러:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." -msgstr "ì—러로 파ì¼ì„ 불러올 수 ì—†ìŒ." +msgstr "ì—러: 파ì¼ì„ 불러올 수 ì—†ìŒ." #: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." @@ -5505,7 +5473,6 @@ msgid "Copy Script Path" msgstr "스í¬ë¦½íŠ¸ 경로 복사" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" msgstr "ì´ì „ ížˆìŠ¤í† ë¦¬" @@ -5577,9 +5544,8 @@ msgid "Keep Debugger Open" msgstr "디버거 í•ìƒ 열어놓기" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" -msgstr "외부 ì—디터와 디버그" +msgstr "외부 ì—디터로 디버깅" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -5622,7 +5588,6 @@ msgid "Debugger" msgstr "디버거" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" msgstr "검색 ê²°ê³¼" @@ -5635,9 +5600,8 @@ msgid "(ignore)" msgstr "(무시함)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "함수로 ì´ë™..." +msgstr "함수로 ì´ë™" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5726,12 +5690,10 @@ msgid "Trim Trailing Whitespace" msgstr "후행 공백 ë¬¸ìž ì œê±°" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" -msgstr "들여쓰기를 스페ì´ìŠ¤ë¡œ 변환" +msgstr "들여쓰기를 공백으로 변환" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" msgstr "들여쓰기를 íƒìœ¼ë¡œ 변환" @@ -5749,12 +5711,10 @@ msgid "Remove All Breakpoints" msgstr "중단ì ëª¨ë‘ ì‚ì œ" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" msgstr "ë‹¤ìŒ ì¤‘ë‹¨ì 으로 ì´ë™" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" msgstr "ì´ì „ 중단ì 으로 ì´ë™" @@ -5763,17 +5723,14 @@ msgid "Find Previous" msgstr "ì´ì „ 찾기" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." msgstr "파ì¼ì—ì„œ 찾기..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." msgstr "함수로 ì´ë™..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." msgstr "ë¼ì¸ìœ¼ë¡œ ì´ë™..." @@ -5872,7 +5829,7 @@ msgstr "피치" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "ìš”" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -6039,9 +5996,8 @@ msgid "Freelook Speed Modifier" msgstr "ìžìœ ì‹œì ì†ë„ 변화" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" -msgstr "ë·° íšŒì „ ìž ê¸ˆ" +msgstr "ë·° íšŒì „ ìž ê¹€" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -6543,9 +6499,8 @@ msgid "Fix Invalid Tiles" msgstr "ìž˜ëª»ëœ íƒ€ì¼ ìˆ˜ì •" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "ì„ íƒ í•ëª© 화면 ì¤‘ì•™ì— í‘œì‹œ" +msgstr "ì„ íƒ ìž˜ë¼ë‚´ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6592,32 +6547,28 @@ msgid "Pick Tile" msgstr "íƒ€ì¼ ì„ íƒ" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "ì„ íƒ ì´ë™" +msgstr "ì„ íƒ ë³µì‚¬" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate left" -msgstr "íšŒì „ 모드" +msgstr "왼쪽으로 íšŒì „" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate right" -msgstr "오른쪽으로 ì´ë™" +msgstr "오른쪽으로 íšŒì „" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "가로로 뒤집기" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "세로로 뒤집기" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear transform" -msgstr "변형" +msgstr "변형 지우기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" @@ -6648,9 +6599,8 @@ msgid "Display tile's names (hold Alt Key)" msgstr "íƒ€ì¼ ì´ë¦„ ë³´ì´ê¸° (Alt 키를 누르세요)" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove selected texture and ALL TILES which use it?" -msgstr "ì„ íƒí•œ í…스ì³ì™€ ëª¨ë“ íƒ€ì¼ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "ì„ íƒí•œ í…스ì³ì™€ ê·¸ê²ƒì„ ì‚¬ìš©í•˜ëŠ” ëª¨ë“ íƒ€ì¼ì„ ì‚ì œí•˜ê² ìŠµë‹ˆê¹Œ?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." @@ -6665,9 +6615,8 @@ msgid "Merge from scene?" msgstr "씬으로부터 ë³‘í•©í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "%s file(s) were not added because was already on the list." -msgstr " %s 파ì¼ì´ ì´ë¯¸ 목ë¡ì— 존재하여 추가ë˜ì§€ 않습니다." +msgstr "%s 파ì¼ì´ ì´ë¯¸ 목ë¡ì— 존재하여 추가ë˜ì§€ 않습니다." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6755,12 +6704,11 @@ msgstr "ì´ í”Œëž«í¼ì— 대한 내보내기 í…œí”Œë¦¿ì´ ì—†ê±°ë‚˜ ì†ìƒë¨:" #: editor/project_export.cpp msgid "Release" -msgstr "" +msgstr "ë°°í¬" #: editor/project_export.cpp -#, fuzzy msgid "Exporting All" -msgstr "%s 내보내기" +msgstr "ëª¨ë‘ ë‚´ë³´ë‚´ê¸°" #: editor/project_export.cpp msgid "Presets" @@ -6771,9 +6719,8 @@ msgid "Add..." msgstr "추가..." #: editor/project_export.cpp -#, fuzzy msgid "Export Path:" -msgstr "프리셋 내보내기:" +msgstr "경로 내보내기:" #: editor/project_export.cpp msgid "Resources" @@ -6834,14 +6781,12 @@ msgid "Export PCK/Zip" msgstr "PCK/Zip 내보내기" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "내보내기 모드:" +msgstr "내보내기 모드?" #: editor/project_export.cpp -#, fuzzy msgid "Export All" -msgstr "내보내기" +msgstr "ëª¨ë‘ ë‚´ë³´ë‚´ê¸°" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -7526,16 +7471,14 @@ msgid "Step" msgstr "단계" #: editor/rename_dialog.cpp -#, fuzzy msgid "Amount by which counter is incremented for each node" -msgstr "ì¹´ìš´í„°ê°€ ê° ë…¸ë“œì—ì„œ ì¦ê°€í•˜ëŠ” ì–‘" +msgstr "ê° ë…¸ë“œì— ëŒ€í•´ ì¹´ìš´í„°ê°€ ì¦ê°€í•˜ëŠ” ì–‘" #: editor/rename_dialog.cpp msgid "Padding" msgstr "패딩(Padding)" #: editor/rename_dialog.cpp -#, fuzzy msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." @@ -7682,6 +7625,8 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"\"editable_instance\"를 비활설화 하면 ë…¸ë“œì˜ ëª¨ë“ ì†ì„±ì´ 기본 값으로 ë˜ëŒì•„ê°‘" +"니다." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7755,9 +7700,8 @@ msgid "Clear Inheritance" msgstr "ìƒì† 지우기" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open documentation" -msgstr "Godot 온ë¼ì¸ 문서 열기" +msgstr "문서 열기" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -7772,9 +7716,8 @@ msgid "Change Type" msgstr "타입 변경" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" -msgstr "스í¬ë¦½íŠ¸ 열기" +msgstr "스í¬ë¦½íŠ¸ 확장" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -7936,9 +7879,8 @@ msgid "Path is empty" msgstr "경로가 비어 있ìŒ" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty" -msgstr "스프ë¼ì´íŠ¸ê°€ 비었습니다!" +msgstr "íŒŒì¼ ì´ë¦„ì´ ë¹„ì—ˆìŠµë‹ˆë‹¤" #: editor/script_create_dialog.cpp msgid "Path is not local" @@ -8029,9 +7971,8 @@ msgid "Bytes:" msgstr "ë°”ì´íŠ¸:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Stack Trace" -msgstr "ìŠ¤íƒ í”„ë ˆìž„" +msgstr "ìŠ¤íƒ ì¶”ì " #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8481,7 +8422,7 @@ msgstr "내부 예외 ìŠ¤íƒ ì¶”ì ì˜ ë" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "NavMesh ë² ì´í¬" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8867,12 +8808,11 @@ msgstr "비주얼 스í¬ë¦½íŠ¸ 검색" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Get %s" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Set %s" -msgstr "Set " +msgstr "Set %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -8970,6 +8910,8 @@ msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"CPUParticles2D ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Particles Animation\"ì´ í™œì„±í™”ëœ " +"CanvasItemMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." #: scene/2d/light_2d.cpp msgid "" @@ -9022,6 +8964,8 @@ msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Particles2D ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Particles Animation\"ì´ í™œì„±í™”ëœ " +"CanvasItemMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9161,14 +9105,16 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." -msgstr "ë©”ì‹œë“¤ì„ íŒ¨ìŠ¤ë¥¼ 그리ë„ë¡ í• ë‹¹í•˜ì§€ 않았으므로 ë³´ì´ì§€ 않습니다." +msgid "Nothing is visible because no mesh has been assigned." +msgstr "ì§€ì •ëœ ë©”ì‹œê°€ 없으므로 ì•„ë¬´ê²ƒë„ ë³´ì´ì§€ 않습니다." #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial with " "\"Billboard Particles\" enabled." msgstr "" +"CPUParticles ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Billboard Particles\"ì´ í™œì„±í™”ëœ " +"SpatialMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -9198,20 +9144,20 @@ msgid "" "Particles animation requires the usage of a SpatialMaterial with \"Billboard " "Particles\" enabled." msgstr "" +"Particles ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Billboard Particles\"ì´ í™œì„±í™”ëœ " +"SpatialMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì‹ë…¸ë“œë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." +msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." #: scene/3d/path.cpp -#, fuzzy msgid "OrientedPathFollow only works when set as a child of a Path node." -msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì‹ë…¸ë“œë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." +msgstr "OrientedPathFollow는 Path ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." #: scene/3d/path.cpp msgid "OrientedPathFollow requires up vectors enabled in its parent Path." -msgstr "" +msgstr "OrientedPathFollow는 부모 Pathì—ì„œ 벡터를 활성화해야 합니다." #: scene/3d/physics_body.cpp msgid "" @@ -9249,7 +9195,6 @@ msgid "This body will be ignored until you set a mesh" msgstr "ì´ ë°”ë””ëŠ” 메시를 ì„¤ì •í• ë•Œ 까지 무시ë©ë‹ˆë‹¤" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" "Size changes to SoftBody will be overridden by the physics engine when " "running.\n" @@ -9340,7 +9285,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If exp_edit is true min_value must be > 0." -msgstr "" +msgstr "exp_editì´ ì°¸ì´ë¼ë©´ min_value는 반드시 > 0 ì´ì–´ì•¼ 합니다." #: scene/gui/scroll_container.cpp msgid "" @@ -9416,6 +9361,9 @@ msgstr "ê· ì¼í•˜ê²Œ 배치함." msgid "Varyings can only be assigned in vertex function." msgstr "Varyings는 ì˜¤ì§ ë²„í…스 함수ì—서만 ì§€ì •í• ìˆ˜ 있습니다." +#~ msgid "Zoom:" +#~ msgstr "확대:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "\" ì—ì„œ ëª¨ë“ ì—°ê²°ì„ ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ" @@ -10115,9 +10063,6 @@ msgstr "Varyings는 ì˜¤ì§ ë²„í…스 함수ì—서만 ì§€ì •í• ìˆ˜ 있습니다. #~ msgid "Source Font:" #~ msgstr "소스 í°íŠ¸:" -#~ msgid "Source Font Size:" -#~ msgstr "소스 í°íŠ¸ í¬ê¸°:" - #~ msgid "Dest Resource:" #~ msgstr "리소스 경로:" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index 3926aea3e4..954bd17af1 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -547,9 +547,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Priartinti" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1680,6 +1679,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2077,7 +2082,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8955,7 +8960,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9186,6 +9191,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Priartinti" + #~ msgid "Disabled" #~ msgstr "IÅ¡jungta" diff --git a/editor/translations/lv.po b/editor/translations/lv.po index ff10ecd88c..07a4ac0444 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -542,8 +542,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "PietuvinÄt:" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1681,6 +1681,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2079,7 +2085,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8924,7 +8930,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9151,6 +9157,9 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#~ msgid "Zoom:" +#~ msgstr "PietuvinÄt:" + #~ msgid "Disabled" #~ msgstr "AtspÄ“jots" diff --git a/editor/translations/ml.po b/editor/translations/ml.po index 0f15ac029c..4981f02aae 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -532,7 +532,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1647,6 +1647,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2043,7 +2049,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8843,7 +8849,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/ms.po b/editor/translations/ms.po index 07b812a5dc..d9a769878b 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -541,7 +541,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1656,6 +1656,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2052,7 +2058,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8861,7 +8867,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/nb.po b/editor/translations/nb.po index 6f08cbbc12..a32f59eef6 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -567,8 +567,8 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom Inn" +msgid "Font Size:" +msgstr "Frontvisning" #: editor/code_editor.cpp msgid "Line:" @@ -1736,6 +1736,12 @@ msgstr "Denne operasjonen kan ikke gjennomføres uten en trerot." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2175,7 +2181,7 @@ msgid "Undo" msgstr "Angre" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Gjenta" @@ -9344,7 +9350,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9574,6 +9580,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoom Inn" + #~ msgid "Class List:" #~ msgstr "Klasseliste:" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index ba5a4db2dc..e4e85160a0 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -24,18 +24,19 @@ # Wout Standaert <wout@blobkat.com>, 2017. # Zatherz <zatherz@linux.pl>, 2017. # Tahar Meijs <tntmeijs@gmail.com>, 2018. +# Laurent Windels <laurentwindels@yahoo.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-09-24 22:24+0000\n" -"Last-Translator: frank <frankvprive@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:14+0000\n" +"Last-Translator: Laurent Windels <laurentwindels@yahoo.com>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" "Language: nl\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -309,10 +310,14 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"Audio tracks kunnen enkel verwijzen naar nodes van het type:\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "" +msgstr "Animatie tracks kunnen enkel verwijzen naar AnimatiePlayer nodes." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." @@ -320,33 +325,31 @@ msgstr "Een animatiespeler kan zichzelf niet animeren, alleen andere spelers." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "Niet mogelijk om een nieuwe track toe te voegen zonder een root" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "" +msgstr "Track path is niet geldig, dus kan geen key toevoegen." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Track is niet van het type Spatial, kan geen key invoegen" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "" +msgstr "Track path is niet geldig, dus kan geen methode key toevoegen." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Method not found in object: " -msgstr "VariableGet niet gevonden in script: " +msgstr "Methode niet gevonden in object " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" msgstr "Anim Verplaats Keys" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clipboard is empty" -msgstr "Bronnen klembord is leeg!" +msgstr "Klembord is leeg" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" @@ -385,19 +388,16 @@ msgid "Edit" msgstr "Bewerken" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "AnimatieBoom" +msgstr "Animatie kenmerken." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "Kopieer Parameters" +msgstr "Kopieer Tracks" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Paste Tracks" -msgstr "Plak Parameters" +msgstr "Plak Tracks" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -416,9 +416,8 @@ msgid "Duplicate Transposed" msgstr "Dupliceer Getransponeerde" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Selection" -msgstr "Geselecteerde Verwijderen" +msgstr "Verwijder Selectie" #: editor/animation_track_editor.cpp #, fuzzy @@ -440,11 +439,11 @@ msgstr "Animatie Opschonen" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Kies de node die geanimeerd zal worden:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Gebruik Bezier Curves" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -568,8 +567,8 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Inzoomen" +msgid "Font Size:" +msgstr "Vooraanzicht" #: editor/code_editor.cpp msgid "Line:" @@ -1737,6 +1736,12 @@ msgstr "Deze operatie kan niet gedaan worden zonder boomwortel." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2183,7 +2188,7 @@ msgid "Undo" msgstr "Ongedaan Maken" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Opnieuw" @@ -7105,9 +7110,8 @@ msgid "Import Existing Project" msgstr "Importeer bestaand project" #: editor/project_manager.cpp -#, fuzzy msgid "Import & Edit" -msgstr "Importeren" +msgstr "Importeer & Bewerk" #: editor/project_manager.cpp msgid "Create New Project" @@ -7123,9 +7127,8 @@ msgid "Install Project:" msgstr "Installeer project:" #: editor/project_manager.cpp -#, fuzzy msgid "Install & Edit" -msgstr "Installeer" +msgstr "Installeer & Bewerk" #: editor/project_manager.cpp msgid "Project Name:" @@ -7141,9 +7144,8 @@ msgid "Project Path:" msgstr "Projectpad:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Projectpad:" +msgstr "Project Installatie Path:" #: editor/project_manager.cpp msgid "Browse" @@ -7154,9 +7156,8 @@ msgid "Unnamed Project" msgstr "Naamloos Project" #: editor/project_manager.cpp -#, fuzzy msgid "Can't open project" -msgstr "Verbind..." +msgstr "Kan project niet openen" #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" @@ -8074,7 +8075,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" -msgstr "" +msgstr "Toggle Zichtbaarheid" #: editor/scene_tree_editor.cpp msgid "" @@ -8088,7 +8089,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "" +msgstr "Hernoem Node" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" @@ -8100,73 +8101,67 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "" +msgstr "Selecteer een Node" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Error bij het laden van lettertype." +msgstr "Error bij het laden van sjabloon '%s'" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error - Could not create script in filesystem." -msgstr "Map kon niet gemaakt worden." +msgstr "Fout - Kon geen script aanmaken in bestandssysteem." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" -msgstr "" +msgstr "Fout bij het laden script van %s" #: editor/script_create_dialog.cpp msgid "N/A" -msgstr "" +msgstr "Niet van toepassing" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Open Script Bewerker" +msgstr "Open Script/Kies Locatie" #: editor/script_create_dialog.cpp msgid "Path is empty" -msgstr "" +msgstr "Path is leeg" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty" -msgstr "Mesh is leeg!" +msgstr "Bestandsnaam is leeg" #: editor/script_create_dialog.cpp msgid "Path is not local" -msgstr "" +msgstr "Path is niet lokaal" #: editor/script_create_dialog.cpp msgid "Invalid base path" -msgstr "" +msgstr "Ongeldig basis path" #: editor/script_create_dialog.cpp msgid "Directory of the same name exists" -msgstr "" +msgstr "Directory met dezelfde naam bestaat al" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, will be reused" -msgstr "Bestand Bestaat, Overschrijven?" +msgstr "Bestand Bestaat, zal herbruikt worden" #: editor/script_create_dialog.cpp msgid "Invalid extension" -msgstr "" +msgstr "Ongeldige extensie" #: editor/script_create_dialog.cpp msgid "Wrong extension chosen" -msgstr "" +msgstr "Verkeerde extensie gekozen" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid Path" -msgstr "Ongeldig Pad." +msgstr "Ongeldig Path" #: editor/script_create_dialog.cpp msgid "Invalid class name" -msgstr "" +msgstr "Ongeldige klassenaam" #: editor/script_create_dialog.cpp #, fuzzy @@ -8175,47 +8170,43 @@ msgstr "Ongeldige index eigenschap naam." #: editor/script_create_dialog.cpp msgid "Script valid" -msgstr "" +msgstr "Script geldig" #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9 and _" -msgstr "" +msgstr "Toegestaan: a-z, A-Z, 0-9 en _" #: editor/script_create_dialog.cpp msgid "Built-in script (into scene file)" -msgstr "" +msgstr "Ingebouwd script (in scene bestand)" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Create new script file" -msgstr "Subscriptie Maken" +msgstr "Maak nieuw script bestand" #: editor/script_create_dialog.cpp msgid "Load existing script file" -msgstr "" +msgstr "Laad bestaand script" #: editor/script_create_dialog.cpp msgid "Language" -msgstr "" +msgstr "Taal" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Inherits" -msgstr "Erft:" +msgstr "Erft" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name" -msgstr "Klasse:" +msgstr "Klasse Naam" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Template" -msgstr "Verwijder Selectie" +msgstr "Sjabloon" #: editor/script_create_dialog.cpp msgid "Built-in Script" -msgstr "" +msgstr "Ingebouwd Script" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -8240,24 +8231,23 @@ msgstr "" #: editor/script_editor_debugger.cpp modules/mono/editor/mono_bottom_panel.cpp msgid "Errors" -msgstr "" +msgstr "Fouten" #: editor/script_editor_debugger.cpp msgid "Child Process Connected" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "Laadfouten" +msgstr "Kopieer Fout" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" -msgstr "" +msgstr "Inspecteer vorige instantie" #: editor/script_editor_debugger.cpp msgid "Inspect Next Instance" -msgstr "" +msgstr "Inspecteer Volgende Instantie" #: editor/script_editor_debugger.cpp msgid "Stack Frames" @@ -8285,7 +8275,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Total:" -msgstr "" +msgstr "Totaal:" #: editor/script_editor_debugger.cpp msgid "Video Mem" @@ -8297,7 +8287,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Type" -msgstr "" +msgstr "Type" #: editor/script_editor_debugger.cpp msgid "Format" @@ -8305,7 +8295,7 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Usage" -msgstr "" +msgstr "Gebruik" #: editor/script_editor_debugger.cpp msgid "Misc" @@ -8329,7 +8319,7 @@ msgstr "" #: editor/settings_config_dialog.cpp msgid "Shortcuts" -msgstr "" +msgstr "Snelkoppelingen" #: editor/settings_config_dialog.cpp msgid "Binding" @@ -8345,7 +8335,7 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" -msgstr "" +msgstr "Wijzig Camera FOV" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera Size" @@ -8365,7 +8355,7 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Sphere Shape Radius" -msgstr "" +msgstr "Wijzig Sphere Vorm Straal" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Box Shape Extents" @@ -8373,11 +8363,11 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "" +msgstr "Wijzig Capsule Vorm Straal" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "" +msgstr "Wijzig Capsule Vorm Hoogte" #: editor/spatial_editor_gizmos.cpp msgid "Change Cylinder Shape Radius" @@ -8389,43 +8379,39 @@ msgstr "" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" -msgstr "" +msgstr "Wijzig Ray Vorm Lengte" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Wijzig Meng Tijd" +msgstr "Wijzig Cylinder Straal" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Wijzig Meng Tijd" +msgstr "Wijzig Cylinder Hoogte" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Wijzig Ankers en Marges" +msgstr "Wijzig Torus Binnenste Straal" #: modules/csg/csg_gizmos.cpp msgid "Change Torus Outer Radius" -msgstr "" +msgstr "Wijzig Torus Buitenste Straal" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "" +msgstr "Selecteer de dynamische bibliotheek voor deze ingave" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" -msgstr "" +msgstr "Selecteer afhankelijkheden van de bibliotheek voor deze ingave" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Verwijder Signaal" +msgstr "Verwijder huidige ingave" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" -msgstr "" +msgstr "Dubbelklikken om een nieuwe ingave te creëren" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Platform:" @@ -8445,23 +8431,23 @@ msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "GDNativeLibrary" -msgstr "" +msgstr "GDInheemsBibliotheek" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" -msgstr "" +msgstr "Bibliotheek" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Status" -msgstr "" +msgstr "Status" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " -msgstr "" +msgstr "Bibliotheken: " #: modules/gdnative/register_types.cpp msgid "GDNative" -msgstr "" +msgstr "GDInheems" #: modules/gdscript/gdscript_functions.cpp msgid "step argument is zero!" @@ -8565,27 +8551,27 @@ msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit X Axis" -msgstr "" +msgstr "Bewerk X As" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Y Axis" -msgstr "" +msgstr "Bewerk Y As" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Edit Z Axis" -msgstr "" +msgstr "Bewerk Z As" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate X" -msgstr "" +msgstr "Cursor Roteer X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Y" -msgstr "" +msgstr "Cursor Roteer Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Rotate Z" -msgstr "" +msgstr "Cursor Roteer Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" @@ -9403,7 +9389,7 @@ msgstr "" "alsjeblieft een vorm resource voor deze!" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9656,6 +9642,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Inzoomen" + #~ msgid "Class List:" #~ msgstr "Klasse Lijst:" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index a068bc8123..47f8918039 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -30,7 +30,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-11-10 20:07+0000\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" "Last-Translator: Tomek <kobewi4e@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" @@ -39,7 +39,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.3-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -347,7 +347,6 @@ msgid "Method not found in object: " msgstr "Metoda nie znaleziona w obiekcie: " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Move Keys" msgstr "Przemieść klucze animacji" @@ -423,12 +422,10 @@ msgid "Delete Selection" msgstr "UsuÅ„ zaznaczone" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" msgstr "Przejdź do nastÄ™pnego kroku" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" msgstr "Przejdź do poprzedniego kroku" @@ -569,8 +566,9 @@ msgid "Warnings:" msgstr "Ostrzeżenia:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "PowiÄ™kszenie:" +#, fuzzy +msgid "Font Size:" +msgstr "Wielkość oryginalna fontu:" #: editor/code_editor.cpp msgid "Line:" @@ -683,9 +681,8 @@ msgid "Edit Connection: " msgstr "Edytuj poÅ‚Ä…czenie: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "Na pewno chcesz usunąć wszystkie poÅ‚Ä…czenia z tego sygnaÅ‚u?" +msgstr "Na pewno chcesz usunąć wszystkie poÅ‚Ä…czenia z sygnaÅ‚u \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -839,9 +836,8 @@ msgid "Error loading:" msgstr "BÅ‚Ä…d Å‚adowania:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "Scena nie zostaÅ‚a wczytana z powodu brakujÄ…cych zależnoÅ›ci:" +msgstr "Wczytywanie nieudane z powodu brakujÄ…cych zależnoÅ›ci:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1323,24 +1319,21 @@ msgid "File Exists, Overwrite?" msgstr "Plik istnieje, nadpisać?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" -msgstr "Wybierz ten Folder" +msgstr "Wybierz ten folder" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Skopiuj ÅšcieżkÄ™" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" -msgstr "Otwórz w menadżerze plików" +msgstr "Otwórz w menedżerze plików" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" -msgstr "Pokaż w menadżerze plików" +msgstr "Pokaż w menedżerze plików" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1483,19 +1476,16 @@ msgid "Methods" msgstr "Metody" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "Metody" +msgstr "Metody:" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "WÅ‚aÅ›ciwoÅ›ci" +msgstr "WÅ‚aÅ›ciwoÅ›ci motywu" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "WÅ‚aÅ›ciwoÅ›ci:" +msgstr "WÅ‚aÅ›ciwoÅ›ci motywu:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1522,14 +1512,12 @@ msgid "Constants:" msgstr "StaÅ‚e:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "Opis" +msgstr "Opis klasy" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "Opis:" +msgstr "Opis klasy:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1546,14 +1534,12 @@ msgstr "" "jakiÅ›[/url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "Opis wÅ‚aÅ›ciwoÅ›ci:" +msgstr "Opisy wÅ‚aÅ›ciwoÅ›ci" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" -msgstr "Opis wÅ‚aÅ›ciwoÅ›ci:" +msgstr "Opisy wÅ‚aÅ›ciwoÅ›ci:" #: editor/editor_help.cpp msgid "" @@ -1564,14 +1550,12 @@ msgstr "" "$url]wysyÅ‚ajÄ…c jÄ…[/url][/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "Opis metody:" +msgstr "Opisy metod" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" -msgstr "Opis metody:" +msgstr "Opisy metod:" #: editor/editor_help.cpp msgid "" @@ -1587,49 +1571,40 @@ msgid "Search Help" msgstr "Wyszukaj w Pomocy" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Widok normalny" +msgstr "Pokaż wszystko" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "Klasy" +msgstr "Tylko klasy" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "Metody" +msgstr "Tylko metody" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "SygnaÅ‚y" +msgstr "Tylko sygnaÅ‚y" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "StaÅ‚e" +msgstr "Tylko staÅ‚e" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "WÅ‚aÅ›ciwoÅ›ci" +msgstr "Tylko wÅ‚aÅ›ciwoÅ›ci" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "WÅ‚aÅ›ciwoÅ›ci" +msgstr "Tylko wÅ‚aÅ›ciwoÅ›ci motywu" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "CzÅ‚onkowie" +msgstr "Typ czÅ‚onka" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "Klasa:" +msgstr "Klasa" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -1728,6 +1703,12 @@ msgstr "Ta operacja nie może zostać wykonana bez sceny." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1736,7 +1717,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "Nie można nadpisać sceny, która wciąż jest otwarta!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1992,13 +1973,12 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Nie można zaÅ‚adować skryptu dodatku z Å›cieżki: '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"Nie można zaÅ‚adować skryptu dodatku z Å›cieżki: '%s' Skrypt nie jest w trybie " -"narzÄ™dzia (tool)." +"Nie można zaÅ‚adować skryptu dodatku ze Å›cieżki: '%s' W kodzie znajduje siÄ™ " +"bÅ‚Ä…d, sprawdź skÅ‚adniÄ™." #: editor/editor_node.cpp msgid "" @@ -2054,7 +2034,6 @@ msgstr "DomyÅ›lny" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" msgstr "Pokaż w systemie plików" @@ -2139,7 +2118,6 @@ msgid "Save Scene" msgstr "Zapisz scenÄ™" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "Zapisz wszystkie sceny" @@ -2169,7 +2147,7 @@ msgid "Undo" msgstr "Cofnij" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Ponów" @@ -2623,6 +2601,8 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"Nie można utworzyć ViewportTexture na zasobach zapisanych jako plik.\n" +"Zasób musi należeć do sceny." #: editor/editor_properties.cpp msgid "" @@ -2631,6 +2611,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"Nie można utworzyć ViewportTexture na tym zasobie, ponieważ nie jest " +"ustawiony jako lokalny dla sceny.\n" +"WÅ‚Ä…cz mu wÅ‚aÅ›ciwość \"lokalny dla sceny\" (i wszystkim zasobom, które go " +"zawierajÄ…, aż do wÄ™zÅ‚a)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2948,9 +2932,8 @@ msgstr "" "typu plików nie bÄ™dzie zapisana!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "Ulubione:" +msgstr "Ulubione" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -3035,14 +3018,12 @@ msgid "Instance" msgstr "Instancja" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "Ulubione:" +msgstr "Dodaj do ulubionych" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "UsuÅ„ z Grupy" +msgstr "UsuÅ„ z ulubionych" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3073,14 +3054,12 @@ msgid "New Resource..." msgstr "Nowy zasób..." #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Expand All" -msgstr "RozwiÅ„ foldery" +msgstr "RozwiÅ„ wszystko" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" -msgstr "ZwiÅ„ foldery" +msgstr "ZwiÅ„ wszystko" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3102,9 +3081,8 @@ msgid "Re-Scan Filesystem" msgstr "Przeskanuj system plików ponownie" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle split mode" -msgstr "PrzeÅ‚Ä…cz tryby" +msgstr "PrzeÅ‚Ä…cz tryb podziaÅ‚u" #: editor/filesystem_dock.cpp msgid "Search files" @@ -3112,7 +3090,7 @@ msgstr "Przeszukaj pliki" #: editor/filesystem_dock.cpp msgid "Instance the selected scene(s) as child of the selected node." -msgstr "Utwórz instancje wybranej sceny/scen jako dziecko wybranego wÄ™zÅ‚a." +msgstr "Utwórz instancjÄ™ wybranej sceny/scen jako dziecko wybranego wÄ™zÅ‚a." #: editor/filesystem_dock.cpp msgid "" @@ -3139,24 +3117,20 @@ msgid "Create Script" msgstr "Utwórz Skrypt" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" msgstr "Znajdź w plikach" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "Znajdź: " +msgstr "Znajdź:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "Folder: " +msgstr "Folder:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "Filtry" +msgstr "Filtry:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3335,12 +3309,10 @@ msgid "Failed to load resource." msgstr "Nie udaÅ‚o siÄ™ wczytać zasobu." #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" msgstr "RozwiÅ„ wszystkie wÅ‚aÅ›ciwoÅ›ci" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" msgstr "ZwiÅ„ wszystkie wÅ‚aÅ›ciwoÅ›ci" @@ -3358,7 +3330,6 @@ msgid "Paste Params" msgstr "Wklej parametry" #: editor/inspector_dock.cpp -#, fuzzy msgid "Edit Resource Clipboard" msgstr "Edytuj schowek zasobów" @@ -3473,7 +3444,7 @@ msgstr "UsuÅ„Â wielokÄ…t i punkt" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Create a new polygon from scratch" -msgstr "Utwórz nowy wielokÄ…t" +msgstr "Utwórz nowy wielokÄ…t od zera" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -4038,7 +4009,6 @@ msgid "TimeScale Node" msgstr "WÄ™zeÅ‚ Skalowania Czasu" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "TimeSeek Node" msgstr "WÄ™zeÅ‚ TimeSeek" @@ -4301,9 +4271,8 @@ msgid "Resize CanvasItem" msgstr "ZmieÅ„ rozmiar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem" -msgstr "Obróć CanvasItem" +msgstr "Skaluj CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" @@ -4368,9 +4337,8 @@ msgid "Rotate Mode" msgstr "Tryb Rotacji" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "Tryb skalowania (R)" +msgstr "Tryb skalowania" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4469,9 +4437,8 @@ msgid "Restores the object's children's ability to be selected." msgstr "Odblokuj selekcjÄ™ wÄ™złów podrzÄ™dnych." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Skeleton Options" -msgstr "Szkielet..." +msgstr "Opcje szkieletu" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" @@ -4525,7 +4492,7 @@ msgstr "Pokaż widok" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Pokaż ikony grup i blokady" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4713,7 +4680,7 @@ msgstr "Stwórz Occluder Polygon" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create a new polygon from scratch." -msgstr "Utwórz nowy wielokÄ…t." +msgstr "Utwórz nowy wielokÄ…t od zera." #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Edit existing polygon:" @@ -4814,7 +4781,6 @@ msgid "Create Trimesh Collision Sibling" msgstr "Utwórz trójsiatkÄ™ sÄ…siednich kolizji" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Convex Collision Sibling" msgstr "Utwórz wypukÅ‚ego sÄ…siada kolizji" @@ -4968,9 +4934,8 @@ msgid "Create Navigation Polygon" msgstr "Utwórz wielokÄ…t nawigacyjny" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" -msgstr "Wygeneruj prostokÄ…ta widzialnoÅ›ci" +msgstr "Generowanie prostokÄ…ta widzialnoÅ›ci" #: editor/plugins/particles_2d_editor_plugin.cpp #, fuzzy @@ -5219,49 +5184,43 @@ msgstr "PrzesuÅ„ zÅ‚Ä…cze" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "" +msgstr "WÅ‚aÅ›ciwość skeleton wÄ™zÅ‚a Polygon2D nie wskazuje na wÄ™zeÅ‚ Skeleton2D" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync bones" -msgstr "Pokaż koÅ›ci" +msgstr "Synchronizuj koÅ›ci" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" msgstr "Utwórz MapÄ™ UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon & UV" -msgstr "Utwórz Polygon" +msgstr "Utwórz wielokÄ…t i UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split point with itself." -msgstr "" +msgstr "Podziel punkt ze sobÄ…." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Split can't form an existing edge." -msgstr "" +msgstr "PodziaÅ‚ nie może uformować istniejÄ…cej krawÄ™dzi." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Split already exists." -msgstr "Akcja %s już istnieje!" +msgstr "PodziaÅ‚ już istnieje." #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Add Split" -msgstr "Dodaj punkt" +msgstr "Dodaj podziaÅ‚" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Invalid Split: " -msgstr "Niepoprawna Å›cieżka!" +msgstr "Niepoprawny podziaÅ‚: " #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Remove Split" -msgstr "UsuÅ„ punkt" +msgstr "UsuÅ„ podziaÅ‚" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" @@ -5269,7 +5228,7 @@ msgstr "Przekształć MapÄ™ UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint bone weights" -msgstr "" +msgstr "Maluj wagi koÅ›ci" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" @@ -5277,27 +5236,23 @@ msgstr "WielokÄ…t 2D UV Edytor" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" -msgstr "" +msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Poly" -msgstr "Edytuj wielokÄ…t" +msgstr "WielokÄ…t" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Splits" -msgstr "Podziel ÅšcieżkÄ™" +msgstr "PodziaÅ‚y" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Bones" -msgstr "Utwórz KoÅ›ci" +msgstr "KoÅ›ci" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Create Polygon" -msgstr "Utwórz Polygon" +msgstr "Utwórz wielokÄ…t" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Point" @@ -5329,24 +5284,23 @@ msgstr "Skaluj WielokÄ…t" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Connect two points to make a split" -msgstr "" +msgstr "PoÅ‚Ä…cz dwa punkty, by utworzyć podziaÅ‚" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Select a split to erase it" -msgstr "Najpierw wybierz ustawienie z listy!" +msgstr "Wybierz podziaÅ‚, by go usunąć" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity" -msgstr "" +msgstr "Maluj wagi z podanÄ… intensywnoÅ›ciÄ…" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UnPaint weights with specified intensity" -msgstr "" +msgstr "Odmaluj wagi z podanÄ… intensywnoÅ›ciÄ…" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Radius:" -msgstr "" +msgstr "PromieÅ„:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon->UV" @@ -5361,9 +5315,8 @@ msgid "Clear UV" msgstr "Wyczyść UV" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Settings" -msgstr "Ustawienia GridMap" +msgstr "Ustawienia siatki" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" @@ -5374,34 +5327,28 @@ msgid "Grid" msgstr "Siatka" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Configure Grid:" -msgstr "Konfiguruj przyciÄ…ganie" +msgstr "Konfiguruj siatkÄ™:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset X:" -msgstr "Offset siatki:" +msgstr "PrzesuniÄ™cie X siatki:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Offset Y:" -msgstr "Offset siatki:" +msgstr "PrzesuniÄ™cie Y siatki:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step X:" -msgstr "Krok siatki:" +msgstr "Krok X siatki:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Grid Step Y:" -msgstr "Krok siatki:" +msgstr "Krok Y siatki:" #: editor/plugins/polygon_2d_editor_plugin.cpp -#, fuzzy msgid "Sync Bones to Polygon" -msgstr "Skaluj WielokÄ…t" +msgstr "Synchronizuj koÅ›ci z wielokÄ…tem" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" @@ -5450,13 +5397,12 @@ msgid "Load Resource" msgstr "Wczytaj Zasób" #: editor/plugins/resource_preloader_editor_plugin.cpp -#, fuzzy msgid "ResourcePreloader" -msgstr "Åšcieżka zasobu" +msgstr "WstÄ™pny Å‚adowacz zasobów" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "" +msgstr "WÄ™zeÅ‚ AnimationTree nie ma ustawionej Å›cieżki do AnimationPlayer" #: editor/plugins/root_motion_editor_plugin.cpp msgid "Path to AnimationPlayer is invalid" @@ -5471,24 +5417,20 @@ msgid "Close and save changes?" msgstr "Zamknąć i zapisać zmiany?" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error writing TextFile:" -msgstr "BÅ‚Ä…d wczytywania obrazu:" +msgstr "BÅ‚Ä…d pisania pliku tekstowego:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." -msgstr "Nie można wczytać obrazu" +msgstr "BÅ‚Ä…d: nie udaÅ‚o siÄ™ wczytać pliku." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error could not load file." -msgstr "Nie można wczytać obrazu" +msgstr "BÅ‚Ä…d nie udaÅ‚o siÄ™ wczytać pliku." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "BÅ‚Ä…d podczas zapisywania TileSet!" +msgstr "BÅ‚Ä…d zapisywania pliku!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme" @@ -5507,19 +5449,16 @@ msgid "Error importing" msgstr "BÅ‚Ä…d importowania" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile..." -msgstr "Utwórz katalog..." +msgstr "Nowy plik tekstowy..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" msgstr "Otwórz plik" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "Zapisz jako..." +msgstr "Zapisz plik jako..." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -5536,12 +5475,11 @@ msgstr " Referencja klas" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "" +msgstr "PrzeÅ‚Ä…cz alfabetyczne sortowanie listy metod." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Sort" -msgstr "Sortuj:" +msgstr "Sortuj" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp @@ -5568,9 +5506,8 @@ msgid "File" msgstr "Plik" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New TextFile" -msgstr "Pokaż pliki" +msgstr "Nowy plik tekstowy" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -5585,7 +5522,6 @@ msgid "Copy Script Path" msgstr "Skopiuj Å›cieżkÄ™ skryptu" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" msgstr "Poprzedni plik" @@ -5657,9 +5593,8 @@ msgid "Keep Debugger Open" msgstr "Pozostaw Debugger otwarty" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" -msgstr "Debugowanie z zewnÄ™trznego edytora" +msgstr "Debugowanie z zewnÄ™trznym edytorem" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -5702,32 +5637,28 @@ msgid "Debugger" msgstr "Debugger" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" -msgstr "Wyszukaj w Pomocy" +msgstr "Wyniki wyszukiwania" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Line" -msgstr "Linia:" +msgstr "Linia" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" -msgstr "" +msgstr "(ignoruj)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "Przejdź do funkcji..." +msgstr "Przejdź do funkcji" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." msgstr "Jedynie zasoby z systemu plików mogÄ… zostać tu upuszczone." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Lookup Symbol" -msgstr "UzupeÅ‚nij symbol" +msgstr "Podejrzyj symbol" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -5751,11 +5682,11 @@ msgstr "Wielkie litery na poczÄ…tku słów" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "" +msgstr "PodÅ›wietlacz skÅ‚adni" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "Standardowy" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp @@ -5808,12 +5739,10 @@ msgid "Trim Trailing Whitespace" msgstr "Przytnij koÅ„cowe spacje" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" msgstr "ZamieÅ„ wciÄ™cia na spacje" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" msgstr "ZamieÅ„ wciÄ™cia na tabulatory" @@ -5824,38 +5753,33 @@ msgstr "Automatyczne wciÄ™cie" #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "PrzeÅ‚Ä…cz puÅ‚apkÄ™" +msgstr "PrzeÅ‚Ä…cz punkt wstrzymania" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "UsuÅ„ wszystkie puÅ‚apki" +msgstr "UsuÅ„ wszystkie punkty wstrzymania" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" -msgstr "Przejdź do nastÄ™pnej puÅ‚apki" +msgstr "Przejdź do nastÄ™pnego punktu wstrzymania" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" -msgstr "Przejdź do poprzedniej puÅ‚apki" +msgstr "Przejdź do poprzedniego punktu wstrzymania" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Znajdź poprzedni" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." -msgstr "Filtrowanie plików..." +msgstr "Znajdź w plikach..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." msgstr "Przejdź do funkcji..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." msgstr "Przejdź do linii..." @@ -5869,40 +5793,35 @@ msgstr "Shader" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" +msgstr "Ten szkielet nie ma koÅ›ci. Stwórz jakieÅ› wÄ™zÅ‚y potomne Bone2D." #: editor/plugins/skeleton_2d_editor_plugin.cpp -#, fuzzy msgid "Skeleton2D" -msgstr "Szkielet..." +msgstr "Szkielet 2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "" +msgstr "Utwórz pozÄ™ spoczynkowÄ… (z koÅ›ci)" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "" +msgstr "Ustaw koÅ›ci do pozy spoczynkowej" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical bones" -msgstr "Utwórz siatkÄ™ nawigacyjnÄ… (Navigation Mesh)" +msgstr "Utwórz fizyczne koÅ›ci" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Szkielet..." +msgstr "Szkielet" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Create physical skeleton" -msgstr "Utwórz solucjÄ™ C#" +msgstr "Utwórz fizyczny szkielet" #: editor/plugins/skeleton_ik_editor_plugin.cpp -#, fuzzy msgid "Play IK" -msgstr "Uruchom" +msgstr "Odtwórz IK" #: editor/plugins/spatial_editor_plugin.cpp msgid "Orthogonal" @@ -5930,29 +5849,25 @@ msgstr "Transformacja osi Z." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Plane Transform." -msgstr "" +msgstr "Pokaż transformacjÄ™ pÅ‚aszczyzny." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling: " -msgstr "Skala:" +msgstr "Skalowanie: " #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating: " -msgstr "TÅ‚umaczenia:" +msgstr "Przesuwanie: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." msgstr "Obracanie o %s stopni." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Keying is disabled (no key inserted)." msgstr "Kluczowanie jest wyÅ‚Ä…czone (nie wstawiono klucza)." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Animation Key Inserted." msgstr "Wstawiono klucz animacji." @@ -5962,15 +5877,13 @@ msgstr "Wysokość" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "Odchylenie" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Objects Drawn" msgstr "Narysowane obiekty" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Material Changes" msgstr "Zmiany materiaÅ‚u" @@ -5979,9 +5892,8 @@ msgid "Shader Changes" msgstr "Zmiany Shadera" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Surface Changes" -msgstr "OdÅ›wież Zmiany" +msgstr "Zmiany powierzchni" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" @@ -6052,9 +5964,8 @@ msgid "This operation requires a single selected node." msgstr "Ta operacja wymaga pojedynczego wybranego wÄ™zÅ‚a." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock View Rotation" -msgstr "WyÅ›wietlaj informacje" +msgstr "Zablokuj obrót widoku" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6079,7 +5990,7 @@ msgstr "WyÅ›wietlaj Å›rodowisko" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy msgid "View Gizmos" -msgstr "WyÅ›wietlaj uchwyty" +msgstr "Pokaż uchwyty" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" @@ -6094,18 +6005,16 @@ msgid "Half Resolution" msgstr "PoÅ‚owa rozdzielczoÅ›ci" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Audio Listener" -msgstr "NasÅ‚uchiwacz dźwiÄ™ku" +msgstr "SÅ‚uchacz dźwiÄ™ku" #: editor/plugins/spatial_editor_plugin.cpp msgid "Doppler Enable" msgstr "Efekt Dopplera" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Cinematic Preview" -msgstr "Tworzenie podglÄ…du Mesh" +msgstr "PodglÄ…d kinowy" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" @@ -6136,9 +6045,8 @@ msgid "Freelook Speed Modifier" msgstr "Zmiennik prÄ™dkoÅ›ci \"Wolnego widoku\"" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" -msgstr "WyÅ›wietlaj informacje" +msgstr "Obroty widoku zablokowane" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -6171,9 +6079,8 @@ msgid "Scale Mode (R)" msgstr "Tryb skalowania (R)" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Local Coords" -msgstr "Local Coords" +msgstr "Lokalne koordynaty" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -6228,24 +6135,20 @@ msgid "Align Selection With View" msgstr "Dopasuj zaznaczenie do widoku" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Select" -msgstr "Wybierz narzÄ™dzie" +msgstr "NarzÄ™dzie wyboru" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Move" -msgstr "PrzenieÅ›" +msgstr "NarzÄ™dzie poruszania" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Rotate" -msgstr "NarzÄ™dzie Obracanie" +msgstr "NarzÄ™dzie obracania" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Tool Scale" -msgstr "NarzÄ™dzia Skala" +msgstr "NarzÄ™dzie skalowania" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" @@ -6257,7 +6160,7 @@ msgstr "PrzeksztaÅ‚canie" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap object to floor" -msgstr "" +msgstr "PrzyciÄ…gnij obiekt do podÅ‚ogi" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -6288,9 +6191,8 @@ msgid "4 Viewports" msgstr "4 widoki" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Gizmos" -msgstr "WyÅ›wietlaj uchwyty" +msgstr "Uchwyty" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -6368,51 +6270,45 @@ msgid "Post" msgstr "Po" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite is empty!" -msgstr "Åšcieżka zapisu jest pusta!" +msgstr "Sprite jest pusty!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." msgstr "" +"Nie można przekonwertować sprite'a używajÄ…cego klatek animacji na siatkÄ™." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "" +msgstr "NieprawidÅ‚owa geometria, nie można zastÄ…pić przez siatkÄ™." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Sprite" -msgstr "SpriteFrames" +msgstr "Sprite" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Convert to 2D Mesh" -msgstr "Konwersja do %s" +msgstr "Konwertuj do siatki 2D" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Create 2D Mesh" -msgstr "Utwórz siatkÄ™ zarysu" +msgstr "Utwórz siatkÄ™ 2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "" +msgstr "Uproszczenie: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Grow (Pixels): " -msgstr "PrzyciÄ…ganie (piksele):" +msgstr "Wzrost (piksele): " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Update Preview" -msgstr "PodglÄ…d" +msgstr "OdÅ›wież podglÄ…d" #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Settings:" -msgstr "Ustawienia" +msgstr "Ustawienia:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" @@ -6516,10 +6412,9 @@ msgstr "Krok:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "Sep.:" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "TextureRegion" msgstr "Obszar tekstury" @@ -6548,9 +6443,8 @@ msgid "Edit theme..." msgstr "Edytuj motyw interfejsu..." #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme editing menu." -msgstr "Menu zmiany wyglÄ…du programu." +msgstr "Menu edycji motywu." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" @@ -6585,23 +6479,20 @@ msgid "Item" msgstr "Element" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Check Item" -msgstr "Sprawdź element" +msgstr "Element wyboru" #: editor/plugins/theme_editor_plugin.cpp msgid "Checked Item" -msgstr "Zaznaczony element" +msgstr "Zaznaczony element wyboru" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "Dodaj element" +msgstr "Element opcji" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "Zaznaczony element" +msgstr "Zaznaczony element opcji" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -6612,17 +6503,14 @@ msgid "Many" msgstr "Wiele" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Has,Many,Options" -msgstr "Ma,Wiele,Różnych,Opcji!" +msgstr "Ma,Wiele,Opcji" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Tab 1" msgstr "ZakÅ‚adka 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Tab 2" msgstr "ZakÅ‚adka 2" @@ -6631,9 +6519,8 @@ msgid "Tab 3" msgstr "ZakÅ‚adka 3" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Data Type:" -msgstr "Rodzaj Daty:" +msgstr "Typ danych:" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" @@ -6660,14 +6547,12 @@ msgid "Erase Selection" msgstr "UsuÅ„ zaznaczenie" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Fix Invalid Tiles" -msgstr "NiewÅ‚aÅ›ciwa nazwa." +msgstr "Napraw niewÅ‚aÅ›ciwe kafelki" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "WyÅ›rodkowywanie na zaznaczeniu" +msgstr "Wytnij zaznaczenie" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6679,7 +6564,7 @@ msgstr "Rysuj LiniÄ™" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "" +msgstr "Malowanie prostokÄ…tne" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" @@ -6690,9 +6575,8 @@ msgid "Erase TileMap" msgstr "Wyczyść TileMap" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Find Tile" -msgstr "Znajdź tile" +msgstr "Znajdź kafelek" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -6708,49 +6592,43 @@ msgstr "Odbij Y" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" -msgstr "Maluj Tile" +msgstr "Maluj kafelek" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "Wybierz tile" +msgstr "Wybierz kafelek" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "UsuÅ„ zaznaczone" +msgstr "Kopiuj zaznaczenie" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate left" -msgstr "Tryb Rotacji" +msgstr "Obróć w lewo" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate right" -msgstr "PrzesuÅ„ w prawo" +msgstr "Obróć w prawo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "Odbij poziomo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "Odbij pionowo" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear transform" -msgstr "PrzeksztaÅ‚canie" +msgstr "Wyczyść przeksztaÅ‚cenie" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Add Texture(s) to TileSet" -msgstr "Dodaj wÄ™zeÅ‚(y) z drzewa" +msgstr "Dodaj teksturÄ™ do TileSetu" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove current Texture from TileSet" -msgstr "UsuÅ„ punkt krzywej" +msgstr "UsuÅ„ aktualnÄ… teksturÄ™ z TileSetu" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -6765,18 +6643,20 @@ msgid "" "Select sub-tile to use as icon, this will be also used on invalid autotile " "bindings." msgstr "" +"Wybierz pod-kafelek do użycia jako ikona. Zostanie on użyty również do " +"niewÅ‚aÅ›ciwych ustawieÅ„ autokafelków." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display tile's names (hold Alt Key)" -msgstr "" +msgstr "Pokaż nazwy kafelków (przytrzymaj Alt)" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture and ALL TILES which use it?" -msgstr "" +msgstr "Usunąć wybranÄ… teksturÄ™ i WSZYSTKIE KAFELKI, które jej używajÄ…?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "" +msgstr "Nie wybrano tekstury do usuniÄ™cia." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene?" @@ -6788,13 +6668,15 @@ msgstr "PoÅ‚Ä…cz ze sceny?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "%s file(s) were not added because was already on the list." -msgstr "" +msgstr "%s plik(ów) nie zostaÅ‚o dodane, bo byÅ‚(y) już na liÅ›cie." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" +"PrzeciÄ…gnij uchwyty, by edytować prostokÄ…t.\n" +"Kliknij na inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6802,13 +6684,17 @@ msgid "" "RMB: set bit off.\n" "Click on another Tile to edit it." msgstr "" +"LPM: wÅ‚Ä…cz bit.\n" +"PPM: wyÅ‚Ä…cz bit.\n" +"Kliknij inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." -msgstr "Wybierz aktualnie edytowany sub-tile." +msgstr "" +"Wybierz aktualnie edytowany pod-kafelek.\n" +"Kliknij inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6816,42 +6702,41 @@ msgid "" "bindings.\n" "Click on another Tile to edit it." msgstr "" +"Wybierz pod-kafelek do użycia jako ikona. Zostanie on również użyty do " +"niewÅ‚aÅ›ciwych ustawieÅ„ autokafelków.\n" +"Kliknij inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." msgstr "" +"Wybierz pod-kafelek, by zmienić jego priorytet.\n" +"Kliknij inny kafelek, by go edytować." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "This property can't be changed." -msgstr "Ta operacja nie może zostać wykonana bez sceny." +msgstr "Ta wÅ‚aÅ›ciwość nie może zostać zmieniona." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Tile Set" -msgstr "TileSet..." +msgstr "Zbiór kafelków" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vertex" -msgstr "WierzchoÅ‚ki" +msgstr "WierzchoÅ‚ek" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Fragment" -msgstr "Argumenty:" +msgstr "Fragmenty" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Light" -msgstr "Prawa" +msgstr "ÅšwiatÅ‚o" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "VisualShader" -msgstr "Shader" +msgstr "Shader wizualny" #: editor/project_export.cpp msgid "Runnable" @@ -6871,12 +6756,11 @@ msgstr "Brakuje szablonów eksportu dla tej platformy lub sÄ… uszkodzone:" #: editor/project_export.cpp msgid "Release" -msgstr "" +msgstr "Wydanie" #: editor/project_export.cpp -#, fuzzy msgid "Exporting All" -msgstr "Exportowanie do %s" +msgstr "Eksportowanie wszystkiego" #: editor/project_export.cpp msgid "Presets" @@ -6887,9 +6771,8 @@ msgid "Add..." msgstr "Dodaj..." #: editor/project_export.cpp -#, fuzzy msgid "Export Path:" -msgstr "Szablon eksportu:" +msgstr "Åšcieżka eksportu:" #: editor/project_export.cpp msgid "Resources" @@ -6954,14 +6837,12 @@ msgid "Export PCK/Zip" msgstr "Eksport PCK/Zip" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "Tryb eksportu:" +msgstr "Tryb eksportu?" #: editor/project_export.cpp -#, fuzzy msgid "Export All" -msgstr "Eksport" +msgstr "Eksportuj wszystko" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -6976,32 +6857,29 @@ msgid "The path does not exist." msgstr "Åšcieżka nie istnieje." #: editor/project_manager.cpp -#, fuzzy msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." -msgstr "ProszÄ™ wybrać folder nie zawierajÄ…cy pliku 'project.godot'." +msgstr "" +"NiewÅ‚aÅ›ciwy projekt pliku \".zip\", nie zawiera pliku \"project.godot\"." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose an empty folder." -msgstr "ProszÄ™ wybrać plik 'project.godot'." +msgstr "ProszÄ™ wybrać pusty folder." #: editor/project_manager.cpp -#, fuzzy msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "ProszÄ™ wybrać plik 'project.godot'." +msgstr "ProszÄ™ wybrać plik \"project.godot\" lub \".zip\"." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "" +msgstr "Folder już zawiera projekt Godota." #: editor/project_manager.cpp msgid "Imported Project" msgstr "Zaimportowano projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Invalid Project Name." -msgstr "Nazwa projektu:" +msgstr "NieprawidÅ‚owa nazwa projektu." #: editor/project_manager.cpp msgid "Couldn't create folder." @@ -7020,11 +6898,12 @@ msgid "Invalid project path (changed anything?)." msgstr "Niepoprawna Å›cieżka projektu (zmienić cokolwiek?)." #: editor/project_manager.cpp -#, fuzzy msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." -msgstr "Nie można byÅ‚o edytować engine.cfg w Å›cieżce projektu." +msgstr "" +"Nie udaÅ‚o siÄ™ wczytać project.godot w Å›cieżce projektu (bÅ‚Ä…d %d). Może go " +"brakować lub być uszkodzony." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." @@ -7083,9 +6962,8 @@ msgid "Project Path:" msgstr "Åšcieżka do projektu:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Installation Path:" -msgstr "Åšcieżka do projektu:" +msgstr "Åšcieżka instalacji projektu:" #: editor/project_manager.cpp msgid "Browse" @@ -7205,13 +7083,12 @@ msgid "Mouse Button" msgstr "Przycisk myszy" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" -"Niepoprawna nazwa akcji. Nazwa nie może być pusta ani zawierać znaki takie " -"jak: '/', ':', '=', '\\' lub '\"'" +"Niepoprawna nazwa akcji. Nie może być pusta ani zawierać '/', ':', '=', '\\' " +"lub '\"'" #: editor/project_settings_editor.cpp msgid "Action '%s' already exists!" @@ -7222,18 +7099,16 @@ msgid "Rename Input Action Event" msgstr "ZmieÅ„ nazwÄ™ zdarzenia akcji wejÅ›cia" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Action deadzone" -msgstr "ZmieÅ„ nazwÄ™ animacji:" +msgstr "ZmieÅ„ martwÄ… strefÄ™ akcji" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" msgstr "Dodaj zdarzenie akcji wejÅ›cia" #: editor/project_settings_editor.cpp -#, fuzzy msgid "All Devices" -msgstr "UrzÄ…dzenie" +msgstr "Wszystkie urzÄ…dzenia" #: editor/project_settings_editor.cpp msgid "Device" @@ -7280,24 +7155,20 @@ msgid "Wheel Down Button" msgstr "Kółko myszy w dół" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Left Button" -msgstr "Kółko myszy w górÄ™" +msgstr "Kółko w lewo" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Right Button" -msgstr "Prawy guzik" +msgstr "Kółko w prawo" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 1" -msgstr "Przycisk 6" +msgstr "Przycisk X 1" #: editor/project_settings_editor.cpp -#, fuzzy msgid "X Button 2" -msgstr "Przycisk 6" +msgstr "Przycisk X 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" @@ -7368,13 +7239,12 @@ msgid "Delete Item" msgstr "UsuÅ„ element" #: editor/project_settings_editor.cpp -#, fuzzy msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." msgstr "" -"Niepoprawna nazwa akcji. Nazwa nie może być pusta ani zawierać znaki takie " -"jak: '/', ':', '=', '\\' lub '\"'" +"Niepoprawna nazwa akcji. Nie może być pusta ani zawierać '/', ':', '=', '\\' " +"lub '\"'." #: editor/project_settings_editor.cpp msgid "Already existing" @@ -7394,7 +7264,7 @@ msgstr "Ustawienia zapisane pomyÅ›lnie." #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Nadpisanie dla cechy" #: editor/project_settings_editor.cpp msgid "Add Translation" @@ -7410,7 +7280,7 @@ msgstr "Dodaj zmapowanÄ… Å›cieżkÄ™" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "Dodaj mapowanie zasobu" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" @@ -7446,7 +7316,7 @@ msgstr "Nadpisz dla..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "Editor must be restarted for changes to take effect" -msgstr "" +msgstr "Edytor musi zostać zrestartowany, by zmiany miaÅ‚y efekt" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -7462,7 +7332,7 @@ msgstr "Akcja" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Martwa strefa" #: editor/project_settings_editor.cpp msgid "Device:" @@ -7569,7 +7439,6 @@ msgid "Pick a Node" msgstr "Wybierz wÄ™zeÅ‚" #: editor/property_editor.cpp -#, fuzzy msgid "Bit %d, val %d." msgstr "Bit %d, wartość %d." @@ -7601,44 +7470,39 @@ msgstr "ZmieÅ„ nazwÄ™" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Przedrostek" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Przyrostek" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced options" -msgstr "Opcje przyciÄ…gania" +msgstr "Opcje zaawansowane" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Substytut" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Nazwa wÄ™zÅ‚a:" +msgstr "Nazwa wÄ™zÅ‚a" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Nazwa rodzica wÄ™zÅ‚a, jeÅ›li dostÄ™pna" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Znajdź typ wÄ™zÅ‚a" +msgstr "Typ wÄ™zÅ‚a" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "Aktualna scena" +msgstr "Nazwa aktualnej sceny" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Nazwa wÄ™zÅ‚a:" +msgstr "Nazwa korzenia" #: editor/rename_dialog.cpp msgid "" @@ -7652,35 +7516,35 @@ msgstr "" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Gdy ustawione, licznik restartuje dla każdej grupy wÄ™złów potomnych" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "PoczÄ…tkowa wartość dla licznika" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Krok:" +msgstr "Krok" #: editor/rename_dialog.cpp msgid "Amount by which counter is incremented for each node" -msgstr "" +msgstr "Liczba, o którÄ… licznik jest zwiÄ™kszany dla każdego wÄ™zÅ‚a" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Wyrównanie" #: editor/rename_dialog.cpp msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Minimalna liczba cyfr dla licznika.\n" +"BrakujÄ…ce cyfry sÄ… wyrównywane zerami poprzedzajÄ…cymi." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "ZmieÅ„ wyrażenie" +msgstr "Wyrażenia regularne" #: editor/rename_dialog.cpp #, fuzzy @@ -7693,30 +7557,27 @@ msgstr "Bez zmian" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase na under_scored" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "under_scored na CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Notacja" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "MaÅ‚e Litery" +msgstr "Na maÅ‚e litery" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Uppercase" -msgstr "Wielkie Litery" +msgstr "Na wielkie litery" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Wyzeruj przybliżenie" +msgstr "Resetuj" #: editor/rename_dialog.cpp msgid "Error" @@ -7774,9 +7635,8 @@ msgstr "" "Nie można utworzyć sceny '%s' ponieważ obecna scena jest jednym z jej wezłów." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Instance Scene(s)" -msgstr "Instancja Scen(y)" +msgstr "Dodaj instancjÄ™ sceny" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" @@ -7791,12 +7651,10 @@ msgid "This operation can't be done on the tree root." msgstr "Nie można wykonać tej operacji na głównym węźle drzewa." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Move Node In Parent" -msgstr "PrzenieÅ› wÄ™zeÅ‚ w nadrzÄ™dny" +msgstr "PrzenieÅ› wÄ™zeÅ‚ w nadrzÄ™dnym" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Move Nodes In Parent" msgstr "PrzenieÅ› wÄ™zÅ‚y w nadrzÄ™dnym" @@ -7825,6 +7683,8 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"WyÅ‚Ä…czenie \"edytowalnej instancji\" sprawi, że wszystkie wÅ‚aÅ›ciwoÅ›ci wÄ™zÅ‚a " +"zostanÄ… przywrócone do domyÅ›lnych." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7835,34 +7695,28 @@ msgid "Load As Placeholder" msgstr "Wczytaj jako zastÄ™pczy" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Local" -msgstr "UczyÅ„ lokalnym" +msgstr "Zrób lokalne" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Utwórz wÄ™zeÅ‚" +msgstr "Utwórz korzeÅ„:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Scena" +msgstr "Scena 2D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Scena" +msgstr "Scena 3D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "User Interface" -msgstr "Wyczyść dziedziczenie" +msgstr "Interfejs użytkownika" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Custom Node" -msgstr "Wytnij WÄ™zÅ‚y" +msgstr "Inny wÄ™zeÅ‚" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -7905,9 +7759,8 @@ msgid "Clear Inheritance" msgstr "Wyczyść dziedziczenie" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open documentation" -msgstr "Otwórz dokumentacjÄ™ online" +msgstr "Otwórz dokumentacjÄ™" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -7922,14 +7775,12 @@ msgid "Change Type" msgstr "ZmieÅ„ typ" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" -msgstr "Otwórz skrypt" +msgstr "Rozszerz skrypt" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Scene Root" -msgstr "To ma sens!" +msgstr "ZmieÅ„ na korzeÅ„ sceny" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -7956,7 +7807,7 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" -"Stwórz instancję sceny jako wÄ™zeÅ‚. Tworzy dziedziczÄ…cÄ… scenÄ™ jeÅ›li wÄ™zeÅ‚ " +"Dodaj instancję sceny jako wÄ™zeÅ‚. Tworzy dziedziczÄ…cÄ… scenÄ™ jeÅ›li wÄ™zeÅ‚ " "główny nie istnieje." #: editor/scene_tree_dock.cpp @@ -7980,7 +7831,6 @@ msgid "Clear Inheritance? (No Undo!)" msgstr "WyczyÅ›cić dziedziczenie? (Nie można cofnąć!)" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Toggle Visible" msgstr "PrzeÅ‚Ä…cz widoczność" @@ -7989,12 +7839,11 @@ msgid "Node configuration warning:" msgstr "Ostrzeżenie konfiguracji wÄ™zÅ‚a:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has connection(s) and group(s).\n" "Click to show signals dock." msgstr "" -"WÄ™zeÅ‚ posiada poÅ‚Ä…czenia i grupy\n" +"WÄ™zeÅ‚ posiada poÅ‚Ä…czenie(a) i grupÄ™(y).\n" "Kliknij, aby wyÅ›wietlić panel sygnałów." #: editor/scene_tree_editor.cpp @@ -8014,27 +7863,24 @@ msgstr "" "Kliknij, aby wyÅ›wietlić panel grup." #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" msgstr "Otwórz skrypt" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" "WÄ™zeÅ‚ jest zablokowany.\n" -"Kliknij by odblokować" +"Kliknij, by go odblokować." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"Dziecko nie jest możliwe do zaznaczenia.\n" -"Kliknij by móc zaznaczyć" +"Dzieci nie sÄ… możliwe do zaznaczenia.\n" +"Kliknij, by móc zaznaczyć." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -8045,6 +7891,8 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" +"AnimationPlayer jest przypiÄ™ty.\n" +"Kliknij, by odpiąć." #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" @@ -8083,18 +7931,16 @@ msgid "N/A" msgstr "N/A" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script/Choose Location" -msgstr "Otwórz edytor skryptów" +msgstr "Otwórz skrypt/Wybierz lokacjÄ™" #: editor/script_create_dialog.cpp msgid "Path is empty" msgstr "Åšcieżka jest pusta" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty" -msgstr "Åšcieżka zapisu jest pusta!" +msgstr "Nazwa pliku jest pusta" #: editor/script_create_dialog.cpp msgid "Path is not local" @@ -8185,9 +8031,8 @@ msgid "Bytes:" msgstr "Bajty:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Stack Trace" -msgstr "Ramki stosu" +msgstr "Åšlad stosu" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8275,7 +8120,7 @@ msgstr "Typ klikniÄ™tej kontrolki:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" -msgstr "" +msgstr "KorzeÅ„ edycji:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" @@ -8295,7 +8140,7 @@ msgstr "ZmieÅ„ promieÅ„Â Å›wiatÅ‚a" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "" +msgstr "ZmieÅ„ kÄ…t emisji wÄ™zÅ‚a AudioStreamPlayer3D" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" @@ -8307,11 +8152,11 @@ msgstr "ZmieÅ„ rozmiar kamery" #: editor/spatial_editor_gizmos.cpp msgid "Change Notifier AABB" -msgstr "" +msgstr "ZmieÅ„ AABB powiadamiacza" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "" +msgstr "ZmieÅ„ AABB czÄ…steczek" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" @@ -8334,38 +8179,32 @@ msgid "Change Capsule Shape Height" msgstr "ZmieÅ„ wysokość ksztaÅ‚tu kapsuÅ‚y" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "ZmieÅ„ Å›rednicÄ™ Capsule Shape" +msgstr "ZmieÅ„ promieÅ„ ksztaÅ‚tu cylindra" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "ZmieÅ„ wysokość ksztaÅ‚tu kapsuÅ‚y" +msgstr "ZmieÅ„ wysokość ksztaÅ‚tu cylindra" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "ZmieÅ„Â dÅ‚ugość Ray Shape" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "ZmieÅ„ promieÅ„Â Å›wiatÅ‚a" +msgstr "ZmieÅ„ promieÅ„Â cylindra" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "ZmieÅ„ wysokość ksztaÅ‚tu kapsuÅ‚y" +msgstr "ZmieÅ„ wysokość cylindra" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "ZmieÅ„ promieÅ„ Sphere Shape" +msgstr "ZmieÅ„ wewnÄ™trzny promieÅ„ torusa" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "ZmieÅ„ promieÅ„Â Å›wiatÅ‚a" +msgstr "ZmieÅ„ zewnÄ™trzny promieÅ„Â torusa" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -8376,9 +8215,8 @@ msgid "Select dependencies of the library for this entry" msgstr "Zaznacz zależnoÅ›ci biblioteki dla tego pola" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "UsuÅ„ punkt krzywej" +msgstr "UsuÅ„ aktualny wpis" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" @@ -8455,21 +8293,19 @@ msgstr "Niepoprawna instancja sÅ‚ownika (niepoprawne podklasy)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." -msgstr "" +msgstr "Obiekt nie może podać dÅ‚ugoÅ›ci." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Next Plane" -msgstr "NastÄ™pna zakÅ‚adka" +msgstr "NastÄ™pna pÅ‚aszczyzna" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Plane" -msgstr "Poprzednia zakÅ‚adka" +msgstr "Poprzednia pÅ‚aszczyzna" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Plane:" -msgstr "" +msgstr "PÅ‚aszczyzna:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Next Floor" @@ -8488,9 +8324,8 @@ msgid "GridMap Delete Selection" msgstr "GridMap UsuÅ„ zaznaczenie" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Fill Selection" -msgstr "GridMap UsuÅ„ zaznaczenie" +msgstr "GridMap WypeÅ‚nij zaznaczenie" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Duplicate Selection" @@ -8545,44 +8380,39 @@ msgstr "Kursor Obróć Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate X" -msgstr "" +msgstr "Kursor Obróć w tyÅ‚ X" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Y" -msgstr "" +msgstr "Kursor Obróć w tyÅ‚ Y" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Back Rotate Z" -msgstr "" +msgstr "Kursor Obróć w tyÅ‚ Z" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cursor Clear Rotation" -msgstr "" +msgstr "Kursor Wyczyść obrót" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Area" -msgstr "Tworzenie obszaru" +msgstr "Utwórz obszar" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Create Exterior Connector" -msgstr "Utwórz nowy projekt" +msgstr "Utwórz Å‚Ä…cznik zewnÄ™trzny" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Erase Area" msgstr "UsuÅ„Â obszar" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" -msgstr "Wyczyść zaznaczenie" +msgstr "Wyczyść zaznaczone" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "Wszystkie zaznaczenia" +msgstr "WypeÅ‚nij zaznaczone" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -8893,9 +8723,8 @@ msgid "Change Input Value" msgstr "ZmieÅ„ wartość wejÅ›ciowÄ…" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Can't copy the function node." -msgstr "Nie można skopiować funkcji wÄ™zÅ‚a." +msgstr "Nie można skopiować wÄ™zÅ‚a funkcji." #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" @@ -8970,9 +8799,8 @@ msgid "Paste Nodes" msgstr "Wklej wÄ™zÅ‚y" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Edit Member" -msgstr "CzÅ‚onkowie" +msgstr "Edytuj czÅ‚onka" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " @@ -8987,9 +8815,8 @@ msgid "Iterator became invalid: " msgstr "Iterator staÅ‚ siÄ™ nieprawidÅ‚owy: " #: modules/visual_script/visual_script_func_nodes.cpp -#, fuzzy msgid "Invalid index property name." -msgstr "NieprawidÅ‚owa nazwa klasy bazowej" +msgstr "NieprawidÅ‚owa nazwa wÅ‚aÅ›ciwoÅ›ci indeksowej." #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" @@ -9033,17 +8860,16 @@ msgstr "" "caÅ‚kowitÄ… (seq out), lub tekstowÄ… (error)." #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Search VisualScript" -msgstr "UsuÅ„ wÄ™zeÅ‚ VisualScript" +msgstr "Przeszukaj VisualScript" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Przyjmij %s" #: modules/visual_script/visual_script_property_selector.cpp msgid "Set %s" -msgstr "" +msgstr "Ustaw %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9096,16 +8922,15 @@ msgstr "" "przy czym pozostaÅ‚e zostanÄ… zignorowane." #: scene/2d/collision_object_2d.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"Ten wÄ™zeÅ‚ nie posiada podwezÅ‚a, który definiowaÅ‚ by jego ksztaÅ‚t, wiÄ™c nie " -"może wchodzić w interakcje.\n" -"PowinieneÅ› dodać wÄ™zeÅ‚ \"CollisionShape2D\" lub \"CollisionPolygon2D\" jako " -"podwÄ™zeÅ‚ aby zdefiniować ksztaÅ‚t." +"Ten wÄ™zeÅ‚ nie posiada ksztaÅ‚tu, wiÄ™c nie może kolidować, czy wchodzić w " +"interakcje z innymi obiektami.\n" +"Rozważ dodanie wÄ™zÅ‚a CollisionShape2D lub CollisionPolygon2D jako podrzÄ™dny, " +"aby zdefiniować ksztaÅ‚t." #: scene/2d/collision_polygon_2d.cpp msgid "" @@ -9144,6 +8969,8 @@ msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animacja CPUParticles2D wymaga użycia CanvasItemMaterial z wÅ‚Ä…czonym " +"\"Particles Animation\"." #: scene/2d/light_2d.cpp msgid "" @@ -9199,6 +9026,8 @@ msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animacja Particles2D wymaga użycia CanvasItemMaterial z wÅ‚Ä…czonym " +"\"Particles Animation\"." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9221,16 +9050,20 @@ msgstr "Å»eby zadziaÅ‚aÅ‚o, pole Path musi wskazywać na istniejÄ…cy wÄ™zeÅ‚ Nod #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "" +msgstr "Ten Å‚aÅ„cuch koÅ›ci 2D powinien siÄ™ koÅ„czyć na węźle Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." msgstr "" +"WÄ™zeÅ‚ Bone2D dziaÅ‚a tylko z wÄ™zÅ‚em Skeleton2D lub innym Bone2D jako " +"nadrzÄ™dnym wÄ™zÅ‚em." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" +"Tej koÅ›ci brakuje odpowiedniej pozy spoczynkowej. Pójdź do wÄ™zÅ‚a Skeleton2D " +"i ustaw jÄ…." #: scene/2d/visibility_notifier_2d.cpp msgid "" @@ -9245,9 +9078,8 @@ msgid "ARVRCamera must have an ARVROrigin node as its parent" msgstr "ARVRCamera musi dziedziczyć po węźle ARVROrigin" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRController must have an ARVROrigin node as its parent" -msgstr "ARVRController musi posiadać wÄ™zeÅ‚ ARVROrigin jako rodzica" +msgstr "ARVRController musi posiadać wÄ™zeÅ‚ ARVROrigin jako nadrzÄ™dny" #: scene/3d/arvr_nodes.cpp msgid "" @@ -9258,15 +9090,16 @@ msgstr "" "przypisany do żadnego rzeczywistego kontrolera" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRAnchor must have an ARVROrigin node as its parent" -msgstr "ARVRAnchor musi posiadać wÄ™zeÅ‚ ARVROrigin jako rodzica" +msgstr "ARVRAnchor musi posiadać wÄ™zeÅ‚ ARVROrigin jako nadrzÄ™dny" #: scene/3d/arvr_nodes.cpp msgid "" "The anchor id must not be 0 or this anchor will not be bound to an actual " "anchor" msgstr "" +"ID kotwicy nie może być 0, bo inaczej ta kotwica nie bÄ™dzie przypisana do " +"rzeczywistej kotwicy" #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node" @@ -9298,16 +9131,15 @@ msgid "Lighting Meshes: " msgstr "OÅ›wietlanie siatek: " #: scene/3d/collision_object.cpp -#, fuzzy msgid "" "This node has no shape, so it can't collide or interact with other objects.\n" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"Ten wÄ™zeÅ‚ nie posiada podwezÅ‚a, który definiowaÅ‚by jego ksztaÅ‚t, wiÄ™c nie " -"może wchodzić w interakcje z przestrzeniÄ….\n" -"PowinieneÅ› dodać wÄ™zeÅ‚ \"CollisionShape2D\" lub \"CollisionPolygon2D\" jako " -"jego podwÄ™zeÅ‚ aby zdefiniować jego ksztaÅ‚t." +"Ten wÄ™zeÅ‚ nie posiada ksztaÅ‚tu, wiÄ™c nie może kolidować, czy wchodzić w " +"interakcje z innymi obiektami.\n" +"Rozważ dodanie wÄ™zÅ‚a CollisionShape lub CollisionPolygon jako podrzÄ™dny, aby " +"zdefiniować ksztaÅ‚t." #: scene/3d/collision_polygon.cpp msgid "" @@ -9342,14 +9174,17 @@ msgstr "" "Utwórz zasób typu CollisionShape w odpowiednim polu obiektu!" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." -msgstr "" +#, fuzzy +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Nic nie jest widoczne, bo nie zostaÅ‚a przypisana żadna siatka." #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial with " "\"Billboard Particles\" enabled." msgstr "" +"Animacja CPUParticles wymaga użycia SpatialMaterial z wÅ‚Ä…czonym \"Billboard " +"Particles\"." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -9373,26 +9208,28 @@ msgstr "" msgid "" "Nothing is visible because meshes have not been assigned to draw passes." msgstr "" +"Nic nie jest widoczne, bo siatki nie zostaÅ‚y przypisane do kolejki rysowania." #: scene/3d/particles.cpp msgid "" "Particles animation requires the usage of a SpatialMaterial with \"Billboard " "Particles\" enabled." msgstr "" +"Animacja Particles wymaga użycia SpatialMaterial z wÅ‚Ä…czonym \"Billboard " +"Particles\"." #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow2D zadziaÅ‚a tylko wtedy, gdy bÄ™dzie dzieckiem wÄ™zeÅ‚ Path2D." +msgstr "PathFollow dziaÅ‚a tylko, gdy jest wÄ™zÅ‚em podrzÄ™dnym Path." #: scene/3d/path.cpp -#, fuzzy msgid "OrientedPathFollow only works when set as a child of a Path node." -msgstr "PathFollow2D zadziaÅ‚a tylko wtedy, gdy bÄ™dzie dzieckiem wÄ™zeÅ‚ Path2D." +msgstr "OrientedPathFollow dziaÅ‚a tylko, gdy jest wÄ™zÅ‚em podrzÄ™dnym Path." #: scene/3d/path.cpp msgid "OrientedPathFollow requires up vectors enabled in its parent Path." msgstr "" +"OrientedPathFollow wymaga wÅ‚Ä…czonych wektorów w górÄ™ w jego nadrzÄ™dnym Path." #: scene/3d/physics_body.cpp #, fuzzy @@ -9411,7 +9248,7 @@ msgstr "Pole Path musi wskazywać na wÄ™zeÅ‚ Spatial." #: scene/3d/scenario_fx.cpp msgid "WorldEnvironment needs an Environment resource." -msgstr "" +msgstr "WorldEnvironment wymaga zasobu Environment." #: scene/3d/scenario_fx.cpp msgid "" @@ -9425,20 +9262,21 @@ msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" +"Ten WorldEnvironment jest ignorowany. Dodaj Camera (dla scen 3D) lub ustaw " +"Background Mode tego Å›rodowiska na Canvas (dla scen 2D)." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh" -msgstr "" +msgstr "To ciaÅ‚o bÄ™dzie ignorowane, dopóki nie ustawisz siatki" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" "Size changes to SoftBody will be overridden by the physics engine when " "running.\n" "Change the size in children collision shapes instead." msgstr "" -"Zmiany rozmiaru w RigidBody (w trybach character i rigid) zostanÄ… nadpisane " -"przez silnik fizyki podczas dziaÅ‚ania.\n" +"Zmiany rozmiaru dla SoftBody zostanÄ… nadpisane przez silnik fizyki podczas " +"dziaÅ‚ania.\n" "Zamiast tego, zmieÅ„ rozmiary ksztaÅ‚tów kolizji w wÄ™zÅ‚ach podrzÄ™dnych." #: scene/3d/sprite_3d.cpp @@ -9459,44 +9297,41 @@ msgstr "" #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" -msgstr "" +msgstr "W węźle BlendTree '%s', animacja nie znaleziona: '%s'" #: scene/animation/animation_blend_tree.cpp -#, fuzzy msgid "Animation not found: '%s'" -msgstr "NarzÄ™dzia do animacji" +msgstr "Animacja nie znaleziona: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "W węźle '%s', nieprawidÅ‚owa animacja: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Invalid animation: '%s'." -msgstr "BÅÄ„D: bÅ‚Ä™dna nazwa animacji!" +msgstr "NieprawidÅ‚owa animacja: '%s'." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Nothing connected to input '%s' of node '%s'." -msgstr "RozÅ‚Ä…cz '%s' z '%s'" +msgstr "Nic nie podÅ‚Ä…czono do wejÅ›cia '%s' wÄ™zÅ‚a '%s'." #: scene/animation/animation_tree.cpp msgid "A root AnimationNode for the graph is not set." -msgstr "" +msgstr "KorzeÅ„ dla grafu AnimationNode nie jest ustawiony." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." -msgstr "Zaznacz wÄ™zeÅ‚ AnimationPlayer w drzewie sceny aby edytować animacje." +msgstr "" +"Åšcieżka do wÄ™zÅ‚a AnimationPlayer zawierajÄ…cego animacje nie jest ustawiona." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" +"Åšcieżka do wÄ™zÅ‚a AnimationPlayer nie prowadzi do wÄ™zÅ‚a AnimationPlayer." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "AnimationPlayer root is not a valid node." -msgstr "Drzewo animacji jest wadliwe." +msgstr "KorzeÅ„ AnimationPlayer nie jest poprawnym wÄ™zÅ‚em." #: scene/gui/color_picker.cpp msgid "Raw Mode" @@ -9544,13 +9379,12 @@ msgid "(Other)" msgstr "Inne" #: scene/main/scene_tree.cpp -#, fuzzy msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"DomyÅ›lne Åšrodowisko okreÅ›lone w Ustawieniach Projektu (Renderowanie -> " -"Viewport -> DomyÅ›lne Åšrodowisko) nie mogÅ‚o zostać zaÅ‚adowane." +"DomyÅ›lne Å›rodowisko okreÅ›lone w Ustawieniach Projektu (Renderowanie -> " +"Environment -> Default Environment) nie mogÅ‚o zostać zaÅ‚adowane." #: scene/main/viewport.cpp msgid "" @@ -9581,31 +9415,31 @@ msgid "Invalid font size." msgstr "Niepoprawny rozmiar fonta." #: scene/resources/visual_shader.cpp -#, fuzzy msgid "Input" -msgstr "Dodaj WejÅ›cie" +msgstr "WejÅ›cie" #: scene/resources/visual_shader.cpp -#, fuzzy msgid "None" -msgstr "<żaden>" +msgstr "Brak" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Wadliwe źródÅ‚o!" +msgstr "NiewÅ‚aÅ›ciwe źródÅ‚o dla shadera." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "Przypisanie do funkcji." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "" +msgstr "Przypisanie do uniformu." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "Varying może być przypisane tylko w funkcji wierzchoÅ‚ków." + +#~ msgid "Zoom:" +#~ msgstr "PowiÄ™kszenie:" #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Na pewno chcesz usunąć wszystkie poÅ‚Ä…czenia z \"" @@ -10286,9 +10120,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "ŹródÅ‚o fontu:" -#~ msgid "Source Font Size:" -#~ msgstr "Wielkość oryginalna fontu:" - #~ msgid "Dest Resource:" #~ msgstr "Zasób docelowy:" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index 065cbdfc59..482ea49196 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -553,7 +553,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1688,6 +1688,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2086,7 +2092,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -9025,7 +9031,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index e7fcb8b27d..eb6a625e3e 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -37,12 +37,14 @@ # LucasSouza6 <lucasosouza66@gmail.com>, 2018. # Pedro Pacheco <pedroxixipa@hotmail.com>, 2018. # Bruno Henrique <nimbusdroid@gmail.com>, 2018. +# Luciano Scilletta <lucianoscilletta@gmail.com>, 2018. +# Julio Yagami <juliohenrique31501234@hotmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2018-11-26 16:10+0000\n" -"Last-Translator: Bruno Henrique <nimbusdroid@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: Julio Yagami <juliohenrique31501234@hotmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -50,7 +52,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.3-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -433,12 +435,10 @@ msgid "Delete Selection" msgstr "Deletar Seleção" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" msgstr "Ir ao Próximo Passo" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" msgstr "Ir ao Passo Anterior" @@ -579,8 +579,9 @@ msgid "Warnings:" msgstr "Avisos:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Ampliação:" +#, fuzzy +msgid "Font Size:" +msgstr "Tamanho da Fonte de Origem:" #: editor/code_editor.cpp msgid "Line:" @@ -693,9 +694,8 @@ msgid "Edit Connection: " msgstr "Editar Conexão: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "Tem certeza que quer remover todas conexões desse sinal?" +msgstr "Tem certeza que quer remover todas as conexões do sinal \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -1344,7 +1344,6 @@ msgid "Copy Path" msgstr "Copiar Caminho" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" msgstr "Mostrar no Gerenciador de Arquivos" @@ -1495,9 +1494,8 @@ msgid "Methods" msgstr "Métodos" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "Métodos" +msgstr "Métodos:" #: editor/editor_help.cpp #, fuzzy @@ -1741,6 +1739,12 @@ msgstr "Essa operação não pode ser realizada sem uma raiz da cena." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1748,8 +1752,9 @@ msgstr "" "herança) não foram satisfeitas." #: editor/editor_node.cpp editor/scene_tree_dock.cpp +#, fuzzy msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "Não é possÃvel sobrescrever cena que ainda está aberta!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -2183,7 +2188,7 @@ msgid "Undo" msgstr "Desfazer" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Refazer" @@ -2636,18 +2641,26 @@ msgid "Assign.." msgstr "Atribuir.." #: editor/editor_properties.cpp +#, fuzzy msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"Não é possÃvel criar uma ViewportTexture nos recursos salvos como um " +"arquivo.\n" +"Recursos precisam pertencer à cena." #: editor/editor_properties.cpp +#, fuzzy msgid "" "Can't create a ViewportTexture on this resource because it's not set as " "local to scene.\n" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"Não é possÃvel criar uma ViewportTexture nesse recurso porque não está " +"definido como uma cena local.\n" +"Por favor troque na 'local para cena' propriedade" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -9371,7 +9384,7 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" "Nada está visÃvel porque as meshes não foram atribuÃdas a passes de desenho." @@ -9641,6 +9654,9 @@ msgstr "Atribuição à uniforme." msgid "Varyings can only be assigned in vertex function." msgstr "Variáveis só podem ser atribuÃdas na função de vértice." +#~ msgid "Zoom:" +#~ msgstr "Ampliação:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Tem certeza que quer remover todas conexões do \"" @@ -10366,9 +10382,6 @@ msgstr "Variáveis só podem ser atribuÃdas na função de vértice." #~ msgid "Source Font:" #~ msgstr "Fonte Origem:" -#~ msgid "Source Font Size:" -#~ msgstr "Tamanho da Fonte de Origem:" - #~ msgid "Dest Resource:" #~ msgstr "Recurso Destino:" diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index 8ace02c1e0..1e0b10fce8 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2018-11-21 19:08+0000\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" "Last-Translator: João Lopes <linux-man@hotmail.com>\n" "Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_PT/>\n" @@ -24,7 +24,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.3-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -409,14 +409,12 @@ msgid "Delete Selection" msgstr "Apagar Seleção" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" -msgstr "Ir Próximo Passo" +msgstr "Ir para Próximo Passo" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" -msgstr "Ir Passo Anterior" +msgstr "Ir para Passo Anterior" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -555,8 +553,9 @@ msgid "Warnings:" msgstr "Avisos:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Zoom:" +#, fuzzy +msgid "Font Size:" +msgstr "Vista de frente" #: editor/code_editor.cpp msgid "Line:" @@ -669,9 +668,8 @@ msgid "Edit Connection: " msgstr "Editar Conexão: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "Deseja remover todas as conexões deste sinal?" +msgstr "Deseja remover todas as conexões do sinal \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -826,9 +824,8 @@ msgid "Error loading:" msgstr "Erro ao carregar:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "Cena falha ao carregar devido a dependências que estão em falta:" +msgstr "Falha no carregamento devido a dependências em falta:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1314,22 +1311,19 @@ msgid "File Exists, Overwrite?" msgstr "O Ficheiro existe, sobrescrever?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" -msgstr "Selecionar esta pasta" +msgstr "Selecionar esta Pasta" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Copiar Caminho" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" msgstr "Abrir no Gestor de Ficheiros" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" msgstr "Mostrar no Gestor de Ficheiros" @@ -1474,19 +1468,16 @@ msgid "Methods" msgstr "Métodos" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "Métodos" +msgstr "Métodos:" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "Propriedades" +msgstr "Propriedades do Tema" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "Propriedades:" +msgstr "Propriedades do Tema:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1513,14 +1504,12 @@ msgid "Constants:" msgstr "Constantes:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "Descrição" +msgstr "Descrição da Classe" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "Descrição:" +msgstr "Descrição da Classe:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1537,14 +1526,12 @@ msgstr "" "um[/url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "Descrição da Propriedade:" +msgstr "Descrições da Propriedade" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" -msgstr "Descrição da Propriedade:" +msgstr "Descrições da Propriedade:" #: editor/editor_help.cpp msgid "" @@ -1555,14 +1542,12 @@ msgstr "" "[color=$color][url=$url]contribuindo com uma[/url][/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "Descrição do Método:" +msgstr "Descrições do Método" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" -msgstr "Descrição do Método:" +msgstr "Descrições do Método:" #: editor/editor_help.cpp msgid "" @@ -1578,49 +1563,40 @@ msgid "Search Help" msgstr "Procurar em Ajuda" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Vista normal" +msgstr "Mostrar Tudo" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "Classes" +msgstr "Apenas Classes" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "Métodos" +msgstr "Apenas Métodos" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "Sinais" +msgstr "Apenas Sinais" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "Constantes" +msgstr "Apenas Constantes" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "Propriedades" +msgstr "Apenas Propriedades" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "Propriedades" +msgstr "Apenas Propriedades do Tema" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "Membros" +msgstr "Tipo do Membro" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "Classe:" +msgstr "Classe" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -1719,6 +1695,12 @@ msgstr "Esta operação não pode ser feita sem uma raiz da árvore." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1727,7 +1709,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "Não se consegue sobrescrever cena ainda aberta!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1986,13 +1968,12 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Incapaz de carregar Script addon do Caminho: '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"Incapaz de carregar Script addon do Caminho: '%s' Script não está no modo " -"ferramenta." +"Incapaz de carregar Script addon do caminho: '%s' Parece haver um erro no " +"código, reveja a sintaxe." #: editor/editor_node.cpp msgid "" @@ -2046,7 +2027,6 @@ msgstr "Padrão" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" msgstr "Mostrar no Sistema de Ficheiros" @@ -2131,7 +2111,6 @@ msgid "Save Scene" msgstr "Guardar Cena" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "Guardar todas as Cenas" @@ -2161,7 +2140,7 @@ msgid "Undo" msgstr "Desfazer" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Refazer" @@ -2227,8 +2206,8 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" -"Quando esta opção está ativa, exportação ou distribuição criará um " -"executável mÃnimo.\n" +"Quando esta opção é ativada, exportação ou distribuição criará um executável " +"mÃnimo.\n" "O Sistema de Ficheiros será fornecido ao Projeto pelo Editor sobre a rede.\n" "Em Android, a distribuição irá usar a ligação USB para melhor performance. " "Esta opção acelera o teste de jogos pesados." @@ -2617,6 +2596,8 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"Não se consegue criar Textura Viewport em recursos guardados como ficheiro.\n" +"O recurso tem de pertencer a uma cena." #: editor/editor_properties.cpp msgid "" @@ -2625,6 +2606,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"Não se consegue criar Textura Viewport neste recurso porque não está " +"definido na cena como local.\n" +"Ative a sua propriedade 'local to scene' (e em todos os recursos que o " +"contêm até a um Nó)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2941,9 +2926,8 @@ msgstr "" "leitura!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "Favoritos:" +msgstr "Favoritos" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -3028,14 +3012,12 @@ msgid "Instance" msgstr "Instância" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "Favoritos:" +msgstr "Adicionar aos Favoritos" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "Remover do Grupo" +msgstr "Remover dos Favoritos" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3066,14 +3048,12 @@ msgid "New Resource..." msgstr "Novo Recurso..." #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Expand All" -msgstr "Expandir tudo" +msgstr "Expandir Tudo" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" -msgstr "Colapsar tudo" +msgstr "Colapsar Tudo" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3095,9 +3075,8 @@ msgid "Re-Scan Filesystem" msgstr "Carregar novamente o Sistema de Ficheiros" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle split mode" -msgstr "Alternar modo" +msgstr "Alternar modo de divisão" #: editor/filesystem_dock.cpp msgid "Search files" @@ -3132,24 +3111,20 @@ msgid "Create Script" msgstr "Criar Script" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" -msgstr "Localizar em ficheiros" +msgstr "Localizar em Ficheiros" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "Localizar: " +msgstr "Localizar:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "Pasta: " +msgstr "Pasta:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "Filtro: " +msgstr "Filtros:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3299,11 +3274,11 @@ msgstr "A guardar..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "Definir como padrão para '%s'" +msgstr "Definir como Padrão para '%s'" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "Limpar padrão para '%s'" +msgstr "Limpar Padrão para '%s'" #: editor/import_dock.cpp msgid " Files" @@ -3326,14 +3301,12 @@ msgid "Failed to load resource." msgstr "Falha ao carregar recurso." #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" -msgstr "Expandir tudo" +msgstr "Expandir Todas as Propriedades" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" -msgstr "Colapsar todas as Propriedades" +msgstr "Colapsar Todas as Propriedades" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -4201,7 +4174,7 @@ msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" -"Não há Meshes para cozinhar. Assegure-se que contêm um canal UV2 e que a " +"Não há Meshes para consolidar. Assegure-se que contêm um canal UV2 e que a " "referência 'Bake Light' flag está on." #: editor/plugins/baked_lightmap_editor_plugin.cpp @@ -4210,7 +4183,7 @@ msgstr "Falha ao criar imagens lightmap, assegure-se que o caminho é gravável. #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" -msgstr "Cozinhar Lightmaps" +msgstr "Consolidar Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/rename_dialog.cpp @@ -4282,9 +4255,8 @@ msgid "Resize CanvasItem" msgstr "Redimensionar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem" -msgstr "Rodar CanvasItem" +msgstr "Escalar CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" @@ -4348,9 +4320,8 @@ msgid "Rotate Mode" msgstr "Modo rodar" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "Modo escalar (R)" +msgstr "Modo Escalar" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4449,9 +4420,8 @@ msgid "Restores the object's children's ability to be selected." msgstr "Restaura a capacidade de selecionar os Objetos-filho." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Skeleton Options" -msgstr "Esqueleto" +msgstr "Opções do Esqueleto" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" @@ -4505,7 +4475,7 @@ msgstr "Mostrar Vista" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Mostrar Grupo e Bloquear Ãcones" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4665,7 +4635,7 @@ msgstr "Pressione Shift para editar tangentes individualmente" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" -msgstr "Cozinhar a sonda GI" +msgstr "Consolidar Sonda GI" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item %d" @@ -4946,9 +4916,8 @@ msgid "Create Navigation Polygon" msgstr "Criar PolÃgono de navegação" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" -msgstr "Gerar Visibilidade do Rect" +msgstr "A Gerar Visibilidade Rect" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5426,7 +5395,6 @@ msgid "Error writing TextFile:" msgstr "Erro ao escrever TextFile:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." msgstr "Erro ao carregar ficheiro." @@ -5527,9 +5495,8 @@ msgid "Copy Script Path" msgstr "Copiar Caminho do Script" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" -msgstr "Histórico anterior" +msgstr "Histórico Anterior" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5599,9 +5566,8 @@ msgid "Keep Debugger Open" msgstr "Manter depurador aberto" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" -msgstr "Depurar com Editor externo" +msgstr "Depurar com Editor Externo" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation" @@ -5644,9 +5610,8 @@ msgid "Debugger" msgstr "Depurador" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" -msgstr "Resultados da pesquisa" +msgstr "Resultados da Pesquisa" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -5657,9 +5622,8 @@ msgid "(ignore)" msgstr "(ignorar)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "Ir para Função..." +msgstr "Ir para Função" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5748,14 +5712,12 @@ msgid "Trim Trailing Whitespace" msgstr "Apagar espaços nos limites" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" -msgstr "Converter Indentação em espaços" +msgstr "Converter Indentação em Espaços" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" -msgstr "Converter Indentação em tabulação" +msgstr "Converter Indentação em Tabulação" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5771,33 +5733,28 @@ msgid "Remove All Breakpoints" msgstr "Remover todos os Breakpoints" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" -msgstr "Ir para próximo Breakpoint" +msgstr "Ir para Próximo Breakpoint" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" -msgstr "Ir para Breakpoint anterior" +msgstr "Ir para Breakpoint Anterior" #: editor/plugins/script_text_editor.cpp msgid "Find Previous" msgstr "Localizar Anterior" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." -msgstr "Localizar em ficheiros..." +msgstr "Localizar em Ficheiros..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." msgstr "Ir para Função..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." -msgstr "Ir para linha..." +msgstr "Ir para Linha..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5888,13 +5845,12 @@ msgid "Animation Key Inserted." msgstr "Chave de Animação inserida." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Pitch" -msgstr "Trocar" +msgstr "Inclinação" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "Direção" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -5982,7 +5938,7 @@ msgstr "Esta operação requer um único Nó selecionado." #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock View Rotation" -msgstr "Trancar Rotação da Vista" +msgstr "Bloquear Rotação da Vista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" @@ -6061,9 +6017,8 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de velocidade Freelook" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" -msgstr "Trancar Rotação da Vista" +msgstr "Rotação da Vista Bloqueada" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -6097,7 +6052,7 @@ msgstr "Modo escalar (R)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Coords" -msgstr "Coordenadas locais" +msgstr "Coordenadas Locais" #: editor/plugins/spatial_editor_plugin.cpp msgid "Local Space Mode (%s)" @@ -6565,9 +6520,8 @@ msgid "Fix Invalid Tiles" msgstr "Reparar Tiles inválidos" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Centrar seleção" +msgstr "Cortar Seleção" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6614,32 +6568,28 @@ msgid "Pick Tile" msgstr "Escolher Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "Mover Seleção" +msgstr "Copiar Seleção" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate left" -msgstr "Modo rodar" +msgstr "Rodar p/ esquerda" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate right" -msgstr "Rodar PolÃgono" +msgstr "Rodar p/ direita" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "Inverter horizontalmente" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "Inverter verticalmente" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear transform" -msgstr "Transformar" +msgstr "Limpar Transformação" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" @@ -6670,9 +6620,8 @@ msgid "Display tile's names (hold Alt Key)" msgstr "Exibir nome dos tiles (segure tecla Alt)" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove selected texture and ALL TILES which use it?" -msgstr "Remover Textura Selecionada e TODOS OS TILES que a usam?" +msgstr "Remover textura selecionada e TODOS OS TILES que a usam?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." @@ -6687,9 +6636,8 @@ msgid "Merge from scene?" msgstr "Fundir a partir da Cena?" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "%s file(s) were not added because was already on the list." -msgstr " ficheiro(s) não foi adicionado por já estar na lista." +msgstr "%s ficheiro(s) não foi/foram adicionado(s) por já estar(em) na lista." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6778,12 +6726,11 @@ msgstr "" #: editor/project_export.cpp msgid "Release" -msgstr "" +msgstr "Libertar" #: editor/project_export.cpp -#, fuzzy msgid "Exporting All" -msgstr "Exportar" +msgstr "A Exportar Tudo" #: editor/project_export.cpp msgid "Presets" @@ -6794,9 +6741,8 @@ msgid "Add..." msgstr "Adicionar..." #: editor/project_export.cpp -#, fuzzy msgid "Export Path:" -msgstr "Exportar Projeto" +msgstr "Caminho da Exportação:" #: editor/project_export.cpp msgid "Resources" @@ -6861,14 +6807,12 @@ msgid "Export PCK/Zip" msgstr "Exportar PCK/Zip" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "Modo exportação:" +msgstr "Modo Exportação?" #: editor/project_export.cpp -#, fuzzy msgid "Export All" -msgstr "Exportar" +msgstr "Exportar Tudo" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -7515,7 +7459,7 @@ msgstr "Nome do Nó" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "Nome do pai do Nó, se disponÃvel" +msgstr "Nome do parente do Nó, se disponÃvel" #: editor/rename_dialog.cpp msgid "Node type" @@ -7554,7 +7498,6 @@ msgid "Step" msgstr "Passo" #: editor/rename_dialog.cpp -#, fuzzy msgid "Amount by which counter is incremented for each node" msgstr "Valor pelo qual cada contador é incrementado para cada nó" @@ -7563,7 +7506,6 @@ msgid "Padding" msgstr "Preenchimento" #: editor/rename_dialog.cpp -#, fuzzy msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." @@ -7617,7 +7559,7 @@ msgstr "Recolocar Nó" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "Recolocar localização (selecionar novo parente):" +msgstr "Recolocar localização (selecionar novo Parente):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" @@ -7681,11 +7623,11 @@ msgstr "Esta operação não pode ser feita na raiz da árvore." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "Mover Nó no parente" +msgstr "Mover Nó no Parente" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "Mover Nós no parente" +msgstr "Mover Nós no Parente" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" @@ -7712,6 +7654,8 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"Desativar \"editable_instance\" irá reverter todas as propriedades do Nó " +"para os seus valores padrão." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7786,9 +7730,8 @@ msgid "Clear Inheritance" msgstr "Limpar herança" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open documentation" -msgstr "Abrir documentação online do Godot" +msgstr "Abrir documentação" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -7803,9 +7746,8 @@ msgid "Change Type" msgstr "Mudar tipo" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" -msgstr "Abrir Script" +msgstr "Estender Script" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -7968,9 +7910,8 @@ msgid "Path is empty" msgstr "Caminho está vazio" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty" -msgstr "Sprite está vazia!" +msgstr "Nome do ficheiro vazio" #: editor/script_create_dialog.cpp msgid "Path is not local" @@ -8061,9 +8002,8 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Stack Trace" -msgstr "Empilhar Frames" +msgstr "Rastreamento de Pilha" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8513,7 +8453,7 @@ msgstr "Fim do stack trace de exceção interna" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "Consolidar NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8621,7 +8561,7 @@ msgstr "Mudar nome do argumento" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Default Value" -msgstr "Definir valor padrão da variável" +msgstr "Definir Valor Padrão da Variável" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Type" @@ -8897,12 +8837,11 @@ msgstr "Procurar VisualScript" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Obter %s" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Set %s" -msgstr "Definir " +msgstr "Definir %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -8934,7 +8873,7 @@ msgstr "ImpossÃvel ler Ficheiro de imagem do ecrã de inicialização:" #: platform/javascript/export/export.cpp msgid "Using default boot splash image." -msgstr "A usar imagem de inicialização por defeito." +msgstr "A usar imagem padrão de inicialização." #: scene/2d/animated_sprite.cpp msgid "" @@ -9001,6 +8940,8 @@ msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animação CPUParticles2D requer o uso de um CanvasItemMaterial com " +"\"Particles Animation\" ativada." #: scene/2d/light_2d.cpp msgid "" @@ -9057,6 +8998,8 @@ msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"Animação Particles2D requer o uso de um CanvasItemMaterial com \"Particles " +"Animation\" ativada." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9085,7 +9028,7 @@ msgstr "Esta corrente de Bone2D deve terminar em um nó Skeleton2D." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." -msgstr "Um Bone2D só funciona com um nó pai Skeleton2D ou Bone2D." +msgstr "Um Bone2D só funciona com um nó parente Skeleton2D ou Bone2D." #: scene/2d/skeleton_2d.cpp msgid "" @@ -9201,15 +9144,16 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." -msgstr "" -"Nada é visÃvel porque não foram atribuÃdas Meshes aos passos de desenho." +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Nada é visÃvel porque nenhuma Malha foi atribuÃda." #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial with " "\"Billboard Particles\" enabled." msgstr "" +"Animação CPUParticles requer o uso de um SpatialMaterial com \"Billboard " +"Particles\" ativada." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -9240,22 +9184,21 @@ msgid "" "Particles animation requires the usage of a SpatialMaterial with \"Billboard " "Particles\" enabled." msgstr "" +"Animação Particles requer o uso de um SpatialMaterial com \"Billboard " +"Particles\" ativada." #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." -msgstr "" -"PathFollow2D apenas funciona quando definido como filho de um Nó Path2D." +msgstr "PathFollow apenas funciona quando definido como filho de um Nó Path." #: scene/3d/path.cpp -#, fuzzy msgid "OrientedPathFollow only works when set as a child of a Path node." msgstr "" -"PathFollow2D apenas funciona quando definido como filho de um Nó Path2D." +"OrientedPathFollow apenas funciona quando definido como filho de um Nó Path." #: scene/3d/path.cpp msgid "OrientedPathFollow requires up vectors enabled in its parent Path." -msgstr "" +msgstr "OrientedPathFollow requer vetores cima ativados no Caminho do parente." #: scene/3d/physics_body.cpp msgid "" @@ -9297,7 +9240,6 @@ msgid "This body will be ignored until you set a mesh" msgstr "Este corpo será ignorado até se definir uma Malha" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" "Size changes to SoftBody will be overridden by the physics engine when " "running.\n" @@ -9305,7 +9247,7 @@ msgid "" msgstr "" "Mudanças no tamanho do SoftBody serão reescritas pelo motor de fÃsica na " "execução.\n" -"Mude antes o tamanho das formas de colisão filhas." +"Em vez disso, mude o tamanho das formas de colisão filhas." #: scene/3d/sprite_3d.cpp msgid "" @@ -9389,7 +9331,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If exp_edit is true min_value must be > 0." -msgstr "" +msgstr "Se exp_edit é verdadeiro min_value tem de ser > 0." #: scene/gui/scroll_container.cpp msgid "" @@ -9410,7 +9352,7 @@ msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"Ambiente padrão especificado em Configuração do Projeto (Rendering -> " +"Ambiente Padrão especificado em Configuração do Projeto (Rendering -> " "Environment -> Default Environment) não pode ser carregado." #: scene/main/viewport.cpp @@ -9465,6 +9407,9 @@ msgstr "Atribuição a uniforme." msgid "Varyings can only be assigned in vertex function." msgstr "Variações só podem ser atribuÃdas na função vértice." +#~ msgid "Zoom:" +#~ msgstr "Zoom:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Está seguro que quer remover todas as conexões de \"" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index 9359389f36..752c69bfab 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -559,8 +559,8 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zoom-aÈ›i ÃŽn" +msgid "Font Size:" +msgstr "Dimensiunea Conturului:" #: editor/code_editor.cpp msgid "Line:" @@ -1729,6 +1729,12 @@ msgstr "Aceasta operaÈ›iune nu se poate face fără o rădăcină de copac." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2174,7 +2180,7 @@ msgid "Undo" msgstr "Revenire" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Reîntoarcere" @@ -9215,7 +9221,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9444,6 +9450,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zoom-aÈ›i ÃŽn" + #~ msgid "Class List:" #~ msgstr "Listă de Clase:" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 957af1f5e7..b7d0bf0a21 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -28,12 +28,13 @@ # V. <Unit68189@gmail.com>, 2018. # Victor Butorin <mrwebsterchannel@gmail.com>, 2018. # ÐлекÑандр <ol-vin@mail.ru>, 2018. +# Ðнатолий Горбунов <afgorbunov@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-11-26 16:10+0000\n" -"Last-Translator: ÐлекÑандр <ol-vin@mail.ru>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: Ðнатолий Горбунов <afgorbunov@gmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -42,7 +43,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.3-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -424,12 +425,10 @@ msgid "Delete Selection" msgstr "Удалить выделенное" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" msgstr "Перейти к Ñледующему шагу" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" msgstr "Перейти к предыдущему шагу" @@ -570,8 +569,9 @@ msgid "Warnings:" msgstr "ПредупреждениÑ:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "Приближение:" +#, fuzzy +msgid "Font Size:" +msgstr "ИÑходный размер шрифта:" #: editor/code_editor.cpp msgid "Line:" @@ -684,9 +684,8 @@ msgid "Edit Connection: " msgstr "Редактировать Подключение: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "Ð’Ñ‹ уверены, что хотите удалить вÑе Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‚ Ñигнала?" +msgstr "Ð’Ñ‹ уверены, что хотите удалить вÑе Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· Ñигнала \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -840,7 +839,6 @@ msgid "Error loading:" msgstr "Ошибка при загрузке:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" msgstr "Ðе удалоÑÑŒ загрузить Ñцену из-за отÑутÑÑ‚Ð²Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑтей:" @@ -1328,7 +1326,6 @@ msgid "File Exists, Overwrite?" msgstr "Файл ÑущеÑтвует, перезапиÑать?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" msgstr "Выбрать Ñту папку" @@ -1337,13 +1334,11 @@ msgid "Copy Path" msgstr "Копировать путь" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" -msgstr "ПроÑмотреть в проводнике" +msgstr "Открыть в проводнике" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" msgstr "ПроÑмотреть в проводнике" @@ -1488,19 +1483,16 @@ msgid "Methods" msgstr "Методы" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "Методы" +msgstr "Методы:" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "СвойÑтва" +msgstr "СвойÑтва темы" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "СвойÑтва:" +msgstr "СвойÑтва темы:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1527,14 +1519,12 @@ msgid "Constants:" msgstr "КонÑтанты:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "ОпиÑание" +msgstr "ОпиÑание клаÑÑа" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "ОпиÑание:" +msgstr "ОпиÑание клаÑÑа:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1551,12 +1541,10 @@ msgstr "" "$url2]запроÑить[/url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" msgstr "ОпиÑание ÑвойÑтв:" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" msgstr "ОпиÑание ÑвойÑтв:" @@ -1569,12 +1557,10 @@ msgstr "" "$color][url=$url]помогите нам[/url][/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "ОпиÑание методов:" +msgstr "ОпиÑание методов" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" msgstr "ОпиÑание методов:" @@ -1592,49 +1578,40 @@ msgid "Search Help" msgstr "Помощь" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Режим нормалей" +msgstr "Отображать вÑÑ‘" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "КлаÑÑÑ‹" +msgstr "Только клаÑÑÑ‹" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "Методы" +msgstr "Только методы" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "Сигналы" +msgstr "Только Ñигналы" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "КонÑтанты" +msgstr "Только конÑтанты" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "СвойÑтва" +msgstr "Только ÑвойÑтва" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "СвойÑтва" +msgstr "Только ÑвойÑтва темы" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "СвойÑтва" +msgstr "Тип члена" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "КлаÑÑ:" +msgstr "КлаÑÑ" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -1733,6 +1710,12 @@ msgstr "Ðта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть выполнена бе #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1741,7 +1724,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "Ðевозможно перезапиÑать Ñцену, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ñе еще открыта!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1996,13 +1979,12 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"Ðе удалоÑÑŒ загрузить Ñкрипт из иÑточника: '%s' Ñкрипт не в режиме " -"инÑтрумента." +"Ðевозможно загрузить Ñкрипт аддона из иÑточника: \"% s\". Ð’ коде еÑÑ‚ÑŒ " +"ошибка. ПожалуйÑта, проверьте ÑинтакÑиÑ." #: editor/editor_node.cpp msgid "" @@ -2142,7 +2124,6 @@ msgid "Save Scene" msgstr "Сохранить Ñцену" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "Сохранить вÑе Ñцены" @@ -2172,7 +2153,7 @@ msgid "Undo" msgstr "Отменить" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Повторить" @@ -2629,6 +2610,8 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"Ðевозможно Ñоздать ViewportTexture Ð´Ð»Ñ Ñ€ÐµÑурÑов, Ñохраненных в виде файла.\n" +"РеÑÑƒÑ€Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ принадлежать Ñцене." #: editor/editor_properties.cpp msgid "" @@ -2637,6 +2620,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"Ðевозможно Ñоздать ViewportTexture Ð´Ð»Ñ Ñтого реÑурÑа, потому что он не " +"уÑтановлен как локальный Ð´Ð»Ñ Ñцены.\n" +"Включите ÑвойÑтво «Локально Ð´Ð»Ñ Ñцены» (и вÑе реÑурÑÑ‹, Ñодержащие его вверх " +"от узла)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2952,9 +2939,8 @@ msgstr "" "типов файлов!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "Избранное:" +msgstr "Избранное" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -3040,14 +3026,12 @@ msgid "Instance" msgstr "Добавить ÑкземплÑÑ€" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "Избранное:" +msgstr "Добавить в избранное" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "Удалить из группы" +msgstr "Удалить из избранного" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3083,7 +3067,6 @@ msgid "Expand All" msgstr "Развернуть вÑе" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" msgstr "Свернуть вÑе" @@ -3107,9 +3090,8 @@ msgid "Re-Scan Filesystem" msgstr "ПереÑканировать файловую ÑиÑтему" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle split mode" -msgstr "Переключить режим отображениÑ" +msgstr "Переключить режим разделениÑ" #: editor/filesystem_dock.cpp msgid "Search files" @@ -3144,24 +3126,22 @@ msgid "Create Script" msgstr "Создать Ñкрипт" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" msgstr "Ðайти в файлах" #: editor/find_in_files.cpp #, fuzzy msgid "Find:" -msgstr "Ðайти: " +msgstr "Ðайти:" #: editor/find_in_files.cpp #, fuzzy msgid "Folder:" -msgstr "Папка: " +msgstr "Папка:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "Фильтры" +msgstr "Фильтры:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3338,12 +3318,10 @@ msgid "Failed to load resource." msgstr "Ðе удалоÑÑŒ загрузить реÑурÑ." #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" msgstr "Развернуть вÑе ÑвойÑтва" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" msgstr "Свернуть вÑе ÑвойÑтва" @@ -4296,7 +4274,6 @@ msgid "Resize CanvasItem" msgstr "Изменить размер CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem" msgstr "Вращать CanvasItem" @@ -4363,9 +4340,8 @@ msgid "Rotate Mode" msgstr "Режим поворота" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "Режим маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (R)" +msgstr "Режим маÑштабированиÑ" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4464,9 +4440,8 @@ msgid "Restores the object's children's ability to be selected." msgstr "ВоÑÑтанавливает возможноÑÑ‚ÑŒ выбора потомков объекта." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Skeleton Options" -msgstr "Скелет" +msgstr "Опции Ñкелета" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" @@ -4520,7 +4495,7 @@ msgstr "Показать окно проÑмотра" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Показать группу и заблокировать иконки" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4961,7 +4936,6 @@ msgid "Create Navigation Polygon" msgstr "Создать Navigation Polygon" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" msgstr "Создать облаÑÑ‚ÑŒ видимоÑти" @@ -5442,9 +5416,8 @@ msgid "Error writing TextFile:" msgstr "Ошибка при запиÑи:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." -msgstr "Ðе удалоÑÑŒ загрузить файл." +msgstr "Ошибка: Ðе удалоÑÑŒ загрузить файл." #: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." @@ -5615,7 +5588,6 @@ msgid "Keep Debugger Open" msgstr "ОÑтавить отладчик открытым" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" msgstr "Отладка Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ внешнего редактора" @@ -5660,7 +5632,6 @@ msgid "Debugger" msgstr "Отладчик" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" msgstr "Результаты поиÑка" @@ -5673,9 +5644,8 @@ msgid "(ignore)" msgstr "(игнорировать)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "Перейти к функции..." +msgstr "Перейти к функции" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5764,12 +5734,10 @@ msgid "Trim Trailing Whitespace" msgstr "Удаление пробелов в конце Ñтрок" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" msgstr "Преобразовать отÑтуп в пробелы" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" msgstr "Преобразовать отÑтуп в табулÑцию" @@ -5787,12 +5755,10 @@ msgid "Remove All Breakpoints" msgstr "Удалить вÑе точки оÑтановок" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" msgstr "Перейти к Ñледующей точке оÑтановки" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" msgstr "Перейти к предыдущей точке оÑтановки" @@ -5801,17 +5767,14 @@ msgid "Find Previous" msgstr "Ðайти предыдущее" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." msgstr "Ðайти в файлах..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." msgstr "Перейти к функции..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." msgstr "Перейти к Ñтроке..." @@ -6309,7 +6272,6 @@ msgstr "" "Ðе удаетÑÑ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ñпрайт иÑпользующий анимационные кадры в Ñетку." #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Invalid geometry, can't replace by mesh." msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ, не удаетÑÑ Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ñетки." @@ -6582,9 +6544,8 @@ msgid "Fix Invalid Tiles" msgstr "ИÑправить недопуÑтимые плитки" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Центрировать выбранное" +msgstr "Вырезать выделенное" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6631,27 +6592,24 @@ msgid "Pick Tile" msgstr "Выбрать тайл" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "Передвинуть выделенное" +msgstr "Копировать выделенное" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate left" -msgstr "Режим поворота" +msgstr "Повернуть влево" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate right" -msgstr "Двигать вправо" +msgstr "Повернуть вправо" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "Отразить по горизонтали" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "Отразить по вертикали" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy @@ -9272,7 +9230,7 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "Ðичего не видно, потому что полиÑетки не были назначены на отриÑовку." #: scene/3d/cpu_particles.cpp @@ -9546,6 +9504,9 @@ msgstr "Ðазначить форму" msgid "Varyings can only be assigned in vertex function." msgstr "Переменные могут быть назначены только в функции вершин." +#~ msgid "Zoom:" +#~ msgstr "Приближение:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Ð’Ñ‹ уверены, что хотите удалить вÑе Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‚ \"" @@ -10261,9 +10222,6 @@ msgstr "Переменные могут быть назначены только #~ msgid "Source Font:" #~ msgstr "ИÑходный шрифт:" -#~ msgid "Source Font Size:" -#~ msgstr "ИÑходный размер шрифта:" - #~ msgid "Dest Resource:" #~ msgstr "РеÑÑƒÑ€Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ:" diff --git a/editor/translations/si.po b/editor/translations/si.po index 726eb15d37..cad4ac4e20 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -536,7 +536,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1651,6 +1651,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2047,7 +2053,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8849,7 +8855,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/sk.po b/editor/translations/sk.po index d2bd63b02a..bb1597a3b9 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -543,7 +543,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1686,6 +1686,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2086,7 +2092,7 @@ msgid "Undo" msgstr "Späť" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -9016,7 +9022,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/sl.po b/editor/translations/sl.po index 19a658939b..ca2e63448e 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -561,9 +561,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Približaj" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1725,6 +1724,12 @@ msgstr "Te operacije ne moremo storiti brez osnovnega drevesa." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2162,7 +2167,7 @@ msgid "Undo" msgstr "Razveljavi" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Ponovi" @@ -9210,7 +9215,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9443,6 +9448,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Približaj" + #~ msgid "Class List:" #~ msgstr "Seznam Razredov:" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 9dec0b6def..1f8bbe8cfd 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -564,8 +564,8 @@ msgstr "" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Увеличај" +msgid "Font Size:" +msgstr "Поглед иÑпред" #: editor/code_editor.cpp msgid "Line:" @@ -1735,6 +1735,12 @@ msgid "This operation can't be done without a tree root." msgstr "Ова операција Ñе не може обавити без корена дрвета." #: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " @@ -2174,7 +2180,7 @@ msgid "Undo" msgstr "Опозови" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Поново уради" @@ -9292,7 +9298,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9523,6 +9529,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Увеличај" + #~ msgid "Class List:" #~ msgstr "ЛиÑта клаÑа:" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index 864685e72a..9781b261b7 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -543,7 +543,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1660,6 +1660,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2056,7 +2062,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8876,7 +8882,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 0493e3eec8..7ddf0a981d 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -582,8 +582,8 @@ msgstr "Varning" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "Zooma In" +msgid "Font Size:" +msgstr "Vy framifrÃ¥n" #: editor/code_editor.cpp msgid "Line:" @@ -1894,6 +1894,12 @@ msgid "This operation can't be done without a tree root." msgstr "Ã…tgärden kan inte göras utan en trädrot." #: editor/editor_node.cpp +msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp #, fuzzy msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " @@ -2389,7 +2395,7 @@ msgid "Undo" msgstr "Ã…ngra" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp #, fuzzy msgid "Redo" msgstr "Ã…ngra" @@ -9715,7 +9721,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9956,6 +9962,10 @@ msgid "Varyings can only be assigned in vertex function." msgstr "" #, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Zooma In" + +#, fuzzy #~ msgid "Class List:" #~ msgstr "Klasslista:" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index de4e62702b..b6a30c7fe7 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -541,7 +541,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1657,6 +1657,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2053,7 +2059,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8863,7 +8869,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/th.po b/editor/translations/th.po index 021f57822e..a8661d6968 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -569,8 +569,8 @@ msgstr "คำเตืà¸à¸™" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "ซูม (%):" +msgid "Font Size:" +msgstr "ขนาดฟà¸à¸™à¸•à¹Œà¸•à¹‰à¸™à¸‰à¸šà¸±à¸š:" #: editor/code_editor.cpp msgid "Line:" @@ -1724,6 +1724,12 @@ msgstr "ทำไม่ได้ถ้าไม่มีฉาà¸" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "บันทึà¸à¸‰à¸²à¸à¹„ม่ได้ à¸à¸²à¸ˆà¸ˆà¸°à¸¡à¸µà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¹„ม่สมบูรณ์ (à¸à¸´à¸™à¸ªà¹à¸•à¸™à¸‹à¹Œà¸«à¸£à¸·à¸à¸à¸²à¸£à¸ªà¸·à¸šà¸—à¸à¸”)" @@ -2145,7 +2151,7 @@ msgid "Undo" msgstr "เลิà¸à¸—ำ" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "ทำซ้ำ" @@ -9258,7 +9264,7 @@ msgstr "ต้à¸à¸‡à¸¡à¸µà¸£à¸¹à¸›à¸—รงเพื่à¸à¹ƒà¸«à¹‰ CollisionSh #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "ไม่มีà¸à¸²à¸£à¹à¸ªà¸”งผลเนื่à¸à¸‡à¸ˆà¸²à¸à¹„ม่ได้à¸à¸³à¸«à¸™à¸” mesh ใน draw pass" #: scene/3d/cpu_particles.cpp @@ -9508,6 +9514,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "ซูม (%):" + #~ msgid "Class List:" #~ msgstr "รายชื่à¸à¸„ลาส:" @@ -10210,9 +10220,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "ฟà¸à¸™à¸•à¹Œà¸•à¹‰à¸™à¸‰à¸šà¸±à¸š:" -#~ msgid "Source Font Size:" -#~ msgstr "ขนาดฟà¸à¸™à¸•à¹Œà¸•à¹‰à¸™à¸‰à¸šà¸±à¸š:" - #~ msgid "Dest Resource:" #~ msgstr "นำเข้ามาเป็นรีซà¸à¸£à¹Œà¸ª:" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 64c03e3f0b..a57b573cf9 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -582,8 +582,8 @@ msgstr "Uyarılar" #: editor/code_editor.cpp #, fuzzy -msgid "Zoom:" -msgstr "YaklaÅŸ (%):" +msgid "Font Size:" +msgstr "Kaynak Yazı Türü Boyutu:" #: editor/code_editor.cpp msgid "Line:" @@ -1745,6 +1745,12 @@ msgstr "Bu iÅŸlem bir kök sahne olmadan yapılamaz." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2184,7 +2190,7 @@ msgid "Undo" msgstr "Geri" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Geri" @@ -9375,7 +9381,7 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" "HiçbirÅŸey görünebilir deÄŸil çünkü örüntüler çizim geçiÅŸlerine atanmış deÄŸil." @@ -9646,6 +9652,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "YaklaÅŸ (%):" + #~ msgid "Class List:" #~ msgstr "Sınıf Listesi:" @@ -10346,9 +10356,6 @@ msgstr "" #~ msgid "Source Font:" #~ msgstr "Yazı Türü Kaynağı:" -#~ msgid "Source Font Size:" -#~ msgstr "Kaynak Yazı Türü Boyutu:" - #~ msgid "Dest Resource:" #~ msgstr "Varış Kaynağı:" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 6d61acce23..befdfbd46d 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -9,11 +9,12 @@ # МакÑим Якимчук <xpinovo@gmail.com>, 2018. # ÐœÐ°Ñ€Ñ Ð¯Ð¼Ð±Ð°Ñ€ <mjambarmeta@gmail.com>, 2017-2018. # ОлекÑандр Пилипчук <pilipchukap@rambler.ru>, 2018. +# Kirill Omelchenko <kirill.omelchenko@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" -"PO-Revision-Date: 2018-08-24 19:45+0000\n" -"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" +"PO-Revision-Date: 2018-12-04 22:15+0000\n" +"Last-Translator: МакÑим Якимчук <xpinovo@gmail.com>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" "Language: uk\n" @@ -21,7 +22,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.2-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -42,8 +43,7 @@ msgstr "Ðекоректні вхідні дані %i (не передано) у #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" msgstr "" -"не можна викориÑтовувати self, оÑкільки екземплÑÑ€ може бути порожнім (не " -"передано)" +"не можна викориÑтовувати self, оÑкільки екземплÑÑ€ Ñ” порожнім (не передано)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -407,14 +407,12 @@ msgid "Delete Selection" msgstr "Вилучити позначене" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" -msgstr "Перейти до наÑтупного кроку" +msgstr "До наÑтупного кроку" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" -msgstr "ПовернутиÑÑ Ð´Ð¾ попереднього кроку" +msgstr "До попереднього кроку" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -553,8 +551,9 @@ msgid "Warnings:" msgstr "ПопередженнÑ:" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "МаÑштаб:" +#, fuzzy +msgid "Font Size:" +msgstr "ВиглÑд Ñпереду" #: editor/code_editor.cpp msgid "Line:" @@ -667,9 +666,8 @@ msgid "Edit Connection: " msgstr "Редагувати з’єднаннÑ: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "Ви Ñправді хочете вилучити уÑÑ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· цього Ñигналу?" +msgstr "Ви Ñправді хочете вилучити уÑÑ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· Ñигналу «%s»?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -824,9 +822,8 @@ msgid "Error loading:" msgstr "Помилка завантаженнÑ:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ у зв'Ñзку з відÑутніми залежноÑÑ‚Ñми Ñцени:" +msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ через неÑтачу залежноÑтей:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1310,24 +1307,21 @@ msgid "File Exists, Overwrite?" msgstr "Файл Ñ–Ñнує, перезапиÑати його?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" -msgstr "Обрати цю теку" +msgstr "Вибрати цю теку" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "Копіювати шлÑÑ…" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" -msgstr "Відкрити в менеджері файлів" +msgstr "Відкрити у менеджері файлів" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" -msgstr "Показати в файловому менеджері" +msgstr "Показати у менеджері файлів" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1470,19 +1464,16 @@ msgid "Methods" msgstr "Методи" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "Методи" +msgstr "Методи:" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "ВлаÑтивоÑÑ‚Ñ–" +msgstr "ВлаÑтивоÑÑ‚Ñ– теми" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "ВлаÑтивоÑÑ‚Ñ–:" +msgstr "ВлаÑтивоÑÑ‚Ñ– теми:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1509,18 +1500,16 @@ msgid "Constants:" msgstr "КонÑтанти:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "ОпиÑ" +msgstr "ÐžÐ¿Ð¸Ñ ÐºÐ»Ð°Ñу" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "ОпиÑ:" +msgstr "ÐžÐ¿Ð¸Ñ ÐºÐ»Ð°Ñу:" #: editor/editor_help.cpp msgid "Online Tutorials:" -msgstr "Підручники у інтернеті:" +msgstr "Підручники в інтернеті:" #: editor/editor_help.cpp msgid "" @@ -1533,14 +1522,12 @@ msgstr "" "щодо їхнього ÑтвореннÑ[/url][/color]." #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑтей:" +msgstr "ОпиÑи влаÑтивоÑтей" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" -msgstr "ÐžÐ¿Ð¸Ñ Ð²Ð»Ð°ÑтивоÑтей:" +msgstr "ОпиÑи влаÑтивоÑтей:" #: editor/editor_help.cpp msgid "" @@ -1551,14 +1538,12 @@ msgstr "" "[url=$url]Ñтворіть його[/url][/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ñ–Ð²:" +msgstr "ОпиÑи методів" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" -msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ñ–Ð²:" +msgstr "ОпиÑи методів:" #: editor/editor_help.cpp msgid "" @@ -1574,49 +1559,40 @@ msgid "Search Help" msgstr "Пошук довідки" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "Ðормальний переглÑд" +msgstr "Показати уÑе" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "КлаÑи" +msgstr "Лише клаÑи" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "Методи" +msgstr "Лише методи" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "Сигнали" +msgstr "Лише Ñигнали" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "КонÑтанти" +msgstr "Лише Ñталі" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "ВлаÑтивоÑÑ‚Ñ–" +msgstr "Лише влаÑтивоÑÑ‚Ñ–" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "ВлаÑтивоÑÑ‚Ñ–" +msgstr "Лише влаÑтивоÑÑ‚Ñ– теми" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "Члени" +msgstr "Тип члена" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "КлаÑ:" +msgstr "КлаÑ" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -1715,6 +1691,12 @@ msgstr "Ð¦Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ðµ може бути виконана без кР#: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -1723,7 +1705,7 @@ msgstr "" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "Ðеможливо перезапиÑати Ñцену, Ñка Ñ” ще відкритою!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1982,13 +1964,12 @@ msgid "Unable to load addon script from path: '%s'." msgstr "Ðеможливо завантажити Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñкрипт зі шлÑху: '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"Ðеможливо завантажити Ñкрипт Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· шлÑху: '%s' Скрипт не в режимі " -"інÑтрументу." +"Ðеможливо завантажити Ñкрипт Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· шлÑху «%s». ЗдаєтьÑÑ, у коді Ñ” " +"помилка, будь лаÑка, перевірте ÑинтакÑиÑ." #: editor/editor_node.cpp msgid "" @@ -2043,9 +2024,8 @@ msgstr "Типовий" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" -msgstr "Показати в файловій ÑиÑтемі" +msgstr "Показати у файловій ÑиÑтемі" #: editor/editor_node.cpp msgid "Play This Scene" @@ -2128,7 +2108,6 @@ msgid "Save Scene" msgstr "Зберегти Ñцену" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "Зберегти вÑÑ– Ñцени" @@ -2158,7 +2137,7 @@ msgid "Undo" msgstr "СкаÑувати" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "Повернути" @@ -2615,6 +2594,9 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"Ðеможливо Ñтворити ViewportTexture на оÑнові реÑурÑів, Ñкі збережено Ñк " +"файл.\n" +"РеÑÑƒÑ€Ñ Ð¼Ð°Ñ” належати до Ñцени." #: editor/editor_properties.cpp msgid "" @@ -2623,6 +2605,10 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"Ðеможливо Ñтворити ViewportTexture на оÑнові цього реÑурÑу, оÑкільки його не " +"вÑтановлено Ñк локальний щодо Ñцени.\n" +"Будь лаÑка, увімкніть влаÑтивіÑÑ‚ÑŒ «Локальний щодо Ñцени» Ð´Ð»Ñ Ð½ÑŒÐ¾Ð³Ð¾ (Ñ– уÑÑ–Ñ… " +"реÑурÑів, що його міÑÑ‚ÑÑ‚ÑŒ, аж до вузла)." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2939,9 +2925,8 @@ msgstr "" "тип кешу!" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "Вибране:" +msgstr "Вибране" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -3027,14 +3012,12 @@ msgid "Instance" msgstr "ЕкземплÑÑ€" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "Вибране:" +msgstr "Додати до вибраного" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "Вилучити з групи" +msgstr "Вилучити з вибраного" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3065,12 +3048,10 @@ msgid "New Resource..." msgstr "Створити реÑурÑ…" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Expand All" msgstr "Розгорнути вÑе" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" msgstr "Згорнути вÑе" @@ -3094,9 +3075,8 @@ msgid "Re-Scan Filesystem" msgstr "ПереÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle split mode" -msgstr "Режим ПеремиканнÑ" +msgstr "Перемкнути режим поділу" #: editor/filesystem_dock.cpp msgid "Search files" @@ -3128,27 +3108,23 @@ msgstr "ПерезапиÑати" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "Створити Ñценарій" +msgstr "Створити Ñкрипт" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" msgstr "Знайти у файлах" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "Знайти: " +msgstr "Знайти:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "Тека: " +msgstr "Тека:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "Фільтр: " +msgstr "Фільтри:" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3325,12 +3301,10 @@ msgid "Failed to load resource." msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ реÑурÑ." #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" msgstr "Розгорнути вÑÑ– влаÑтивоÑÑ‚Ñ–" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" msgstr "Згорнути вÑÑ– влаÑтивоÑÑ‚Ñ–" @@ -4289,9 +4263,8 @@ msgid "Resize CanvasItem" msgstr "Змінити розмір CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem" -msgstr "Обертати CanvasItem" +msgstr "МаÑштабувати CanvasItem" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" @@ -4356,9 +4329,8 @@ msgid "Rotate Mode" msgstr "Режим повороту" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "Режим маÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ (R)" +msgstr "Режим маÑштабуваннÑ" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4457,9 +4429,8 @@ msgid "Restores the object's children's ability to be selected." msgstr "Відновлює можливіÑÑ‚ÑŒ вибору нащадків об'єкта." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Skeleton Options" -msgstr "КаркаÑ" +msgstr "Параметри каркаÑа" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" @@ -4513,7 +4484,7 @@ msgstr "Показати панель переглÑду" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "Показати піктограми Ð³Ñ€ÑƒÐ¿ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° блокуваннÑ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4955,9 +4926,8 @@ msgid "Create Navigation Polygon" msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ полігону" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" -msgstr "Створити облаÑÑ‚ÑŒ видимоÑÑ‚Ñ–" +msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñ– видимоÑÑ‚Ñ–" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" @@ -5436,7 +5406,6 @@ msgid "Error writing TextFile:" msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби запиÑати TextFile:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." msgstr "Помилка: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ файл." @@ -5510,11 +5479,11 @@ msgstr "ПереміÑтити вниз" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" -msgstr "ÐаÑтупний Ñценарій" +msgstr "ÐаÑтупний Ñкрипт" #: editor/plugins/script_editor_plugin.cpp msgid "Previous script" -msgstr "Попередній Ñценарій" +msgstr "Попередній Ñкрипт" #: editor/plugins/script_editor_plugin.cpp msgid "File" @@ -5530,16 +5499,15 @@ msgstr "Зберегти вÑе" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "Ðœ'Ñко перезавантажити Ñценарії" +msgstr "Ðœ'Ñко перезавантажити Ñкрипт" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" msgstr "Копіювати шлÑÑ… до Ñкрипту" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" -msgstr "Попередній файл" +msgstr "Попередній у журналі" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -5580,7 +5548,7 @@ msgstr "ЗапуÑтити" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" -msgstr "Перемкнути панель Ñценаріїв" +msgstr "Перемкнути панель Ñкриптів" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -5609,7 +5577,6 @@ msgid "Keep Debugger Open" msgstr "Залишити зневаджувач відкритим" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" msgstr "Ð—Ð½ÐµÐ²Ð°Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð° допомогою зовнішнього редактора" @@ -5654,7 +5621,6 @@ msgid "Debugger" msgstr "Зневаджувач" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" msgstr "Результати пошуку" @@ -5667,9 +5633,8 @@ msgid "(ignore)" msgstr "(ігнорувати)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "Перейти до функції..." +msgstr "Перейти до функції" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5758,12 +5723,10 @@ msgid "Trim Trailing Whitespace" msgstr "Обрізати кінцевий пробіл" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" msgstr "Перетворити відÑтуп на пропуÑки" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" msgstr "Перетворити відÑтуп на табулÑції" @@ -5781,12 +5744,10 @@ msgid "Remove All Breakpoints" msgstr "Вилучити вÑÑ– точки зупинки" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" msgstr "Перейти до наÑтупної точки зупинки" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" msgstr "Перейти до попередньої точки зупинки" @@ -5795,17 +5756,14 @@ msgid "Find Previous" msgstr "Знайти попереднє" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." msgstr "Знайти у файлах…" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." msgstr "Перейти до функції..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." msgstr "Перейти до Ñ€Ñдка..." @@ -5898,13 +5856,12 @@ msgid "Animation Key Inserted." msgstr "Ð’Ñтавлено ключ анімації." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Pitch" -msgstr "Перемикач" +msgstr "ХилитаннÑ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "ВідхиленнÑ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -6071,9 +6028,8 @@ msgid "Freelook Speed Modifier" msgstr "Коефіцієнт швидкоÑÑ‚Ñ– оглÑду" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" -msgstr "ЗафікÑувати Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду" +msgstr "ÐžÐ±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду заблоковано" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -6577,9 +6533,8 @@ msgid "Fix Invalid Tiles" msgstr "Виправити некоректні плитки" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "Центрувати на вибраному" +msgstr "Вирізати позначене" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6626,32 +6581,28 @@ msgid "Pick Tile" msgstr "Вибрати плитку" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "ПереÑунути позначене" +msgstr "Копіювати позначене" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate left" -msgstr "Режим повороту" +msgstr "Обертати ліворуч" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate right" -msgstr "Повернути полігон" +msgstr "Обертати праворуч" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "Відзеркалити горизонтально" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "Віддзеркалити вертикально" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear transform" -msgstr "ПеретвореннÑ" +msgstr "ЗнÑти перетвореннÑ" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" @@ -6682,7 +6633,6 @@ msgid "Display tile's names (hold Alt Key)" msgstr "Показувати назви плиток (Ñкщо утримують клавішу Alt)" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove selected texture and ALL TILES which use it?" msgstr "Вилучити позначену текÑтуру Ñ– уÑÑ– плитки, у Ñких Ñ—Ñ— викориÑтано?" @@ -6699,9 +6649,8 @@ msgid "Merge from scene?" msgstr "Об'єднати зі Ñцени?" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "%s file(s) were not added because was already on the list." -msgstr " файлів не додано, оÑкільки вони вже були у ÑпиÑку." +msgstr "%s файлів не додано, оÑкільки вони вже були у ÑпиÑку." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6790,12 +6739,11 @@ msgstr "" #: editor/project_export.cpp msgid "Release" -msgstr "" +msgstr "ВипуÑк" #: editor/project_export.cpp -#, fuzzy msgid "Exporting All" -msgstr "ЕкÑпортуваннÑ" +msgstr "ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÑього" #: editor/project_export.cpp msgid "Presets" @@ -6806,9 +6754,8 @@ msgid "Add..." msgstr "Додати..." #: editor/project_export.cpp -#, fuzzy msgid "Export Path:" -msgstr "ЕкÑпортувати проект" +msgstr "ШлÑÑ… екÑпорту:" #: editor/project_export.cpp msgid "Resources" @@ -6873,14 +6820,12 @@ msgid "Export PCK/Zip" msgstr "ЕкÑпортувати PCK/Zip" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "Режим екÑпортуваннÑ:" +msgstr "Режим екÑпортуваннÑ?" #: editor/project_export.cpp -#, fuzzy msgid "Export All" -msgstr "ЕкÑпортуваннÑ" +msgstr "ЕкÑпортувати уÑе" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -7569,7 +7514,6 @@ msgid "Step" msgstr "Крок" #: editor/rename_dialog.cpp -#, fuzzy msgid "Amount by which counter is incremented for each node" msgstr "Величина, на Ñку збільшуєтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ вузла" @@ -7578,7 +7522,6 @@ msgid "Padding" msgstr "ФаÑка" #: editor/rename_dialog.cpp -#, fuzzy msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." @@ -7727,6 +7670,8 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"Ð’Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Â«editable_instance» призведе до Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… значень Ð´Ð»Ñ " +"уÑÑ–Ñ… влаÑтивоÑтей вузла." #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7801,9 +7746,8 @@ msgid "Clear Inheritance" msgstr "УÑунути уÑпадкуваннÑ" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open documentation" -msgstr "Відкрити онлайнову документацію Godot" +msgstr "Відкрити документацію" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -7818,9 +7762,8 @@ msgid "Change Type" msgstr "Змінити тип" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" -msgstr "Відкрити Ñценарій" +msgstr "Розширити Ñкрипт" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -7908,7 +7851,7 @@ msgstr "" #: editor/scene_tree_editor.cpp editor/script_create_dialog.cpp msgid "Open Script" -msgstr "Відкрити Ñценарій" +msgstr "Відкрити Ñкрипт" #: editor/scene_tree_editor.cpp msgid "" @@ -7983,9 +7926,8 @@ msgid "Path is empty" msgstr "Порожній шлÑÑ…" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty" -msgstr "Спрайт порожній!" +msgstr "Ðазва файла Ñ” порожньою" #: editor/script_create_dialog.cpp msgid "Path is not local" @@ -8076,9 +8018,8 @@ msgid "Bytes:" msgstr "Байтів:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Stack Trace" -msgstr "СтоÑувати кадри" +msgstr "ТраÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтека" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8528,7 +8469,7 @@ msgstr "Кінець траÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтека Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾ #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "Запекти NavMesh" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8912,12 +8853,11 @@ msgstr "Шукати VisualScript" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "Отримати %s" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Set %s" -msgstr "Ð’Ñтановити " +msgstr "Ð’Ñтановити %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -9015,6 +8955,8 @@ msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ CPUParticles2D потребує викориÑÑ‚Ð°Ð½Ð½Ñ CanvasItemMaterial із " +"увімкненим параметром «ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñток»." #: scene/2d/light_2d.cpp msgid "" @@ -9072,6 +9014,8 @@ msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" +"ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Particles2D потребує викориÑÑ‚Ð°Ð½Ð½Ñ CanvasItemMaterial із увімкненим " +"параметром «ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñток»." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9217,15 +9161,16 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." -msgstr "" -"Ðічого не видно, оÑкільки Ñітки не було пов'Ñзано із проходами малюваннÑ." +msgid "Nothing is visible because no mesh has been assigned." +msgstr "Ðічого не видно, оÑкільки не призначено Ñітки." #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial with " "\"Billboard Particles\" enabled." msgstr "" +"ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ CPUParticles потребує викориÑÑ‚Ð°Ð½Ð½Ñ SpatialMaterial із увімкненим " +"параметром «ЧаÑтки дошки»." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -9234,8 +9179,8 @@ msgstr "Побудова Ñітки" #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." msgstr "" -"РеÑÑƒÑ€Ñ Ðавігаційна Ñітка повинен бути вÑтановлений або Ñтворений Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ " -"цього вузла." +"Ð”Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ цього вузла Ñлід вÑтановити або Ñтворити реÑÑƒÑ€Ñ Â«Ðавігаційна " +"Ñітка»." #: scene/3d/navigation_mesh.cpp msgid "" @@ -9256,20 +9201,21 @@ msgid "" "Particles animation requires the usage of a SpatialMaterial with \"Billboard " "Particles\" enabled." msgstr "" +"ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñток потребує викориÑÑ‚Ð°Ð½Ð½Ñ SpatialMaterial із увімкненим " +"параметром «ЧаÑтки дошки»." #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow2D працюватиме лише Ñк дочірній елемент вузла Path2D." +msgstr "PathFollow працюватиме лише Ñк дочірній елемент вузла Path." #: scene/3d/path.cpp -#, fuzzy msgid "OrientedPathFollow only works when set as a child of a Path node." -msgstr "PathFollow2D працюватиме лише Ñк дочірній елемент вузла Path2D." +msgstr "OrientedPathFollow працюватиме лише Ñк дочірній елемент вузла Path." #: scene/3d/path.cpp msgid "OrientedPathFollow requires up vectors enabled in its parent Path." msgstr "" +"OrientedPathFollow потребує Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ñ–Ð² у його батьківÑькому Path." #: scene/3d/physics_body.cpp msgid "" @@ -9312,7 +9258,6 @@ msgid "This body will be ignored until you set a mesh" msgstr "Це тіло буде проігноровано, аж доки ви не вÑтановите Ñітку" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" "Size changes to SoftBody will be overridden by the physics engine when " "running.\n" @@ -9402,7 +9347,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If exp_edit is true min_value must be > 0." -msgstr "" +msgstr "Якщо exp_edit має Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ true, min_value має бути > 0." #: scene/gui/scroll_container.cpp msgid "" @@ -9479,6 +9424,9 @@ msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð´Ð½Ð¾Ñ€Ñ–Ð´Ð½Ð¾Ð³Ð¾." msgid "Varyings can only be assigned in vertex function." msgstr "Змінні величини можна пов'Ñзувати лише із функцією вузлів." +#~ msgid "Zoom:" +#~ msgstr "МаÑштаб:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Ви Ñправді хочете вилучити уÑÑ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· Ñигналу \"" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index eb509e1a82..688f386b3c 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -540,7 +540,7 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -msgid "Zoom:" +msgid "Font Size:" msgstr "" #: editor/code_editor.cpp @@ -1673,6 +1673,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2071,7 +2077,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -8955,7 +8961,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 950964a00c..f6e694d4e5 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -557,9 +557,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "Phóng to" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1705,6 +1704,12 @@ msgstr "" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2110,7 +2115,7 @@ msgid "Undo" msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "" @@ -9012,7 +9017,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9239,6 +9244,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "Phóng to" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "Bạn có chắc muốn xóa bá» tất cả kết nối từ \"" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 169c31c1c3..512589d2df 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -13,7 +13,7 @@ # Geequlim <geequlim@gmail.com>, 2016-2018. # jie Shi <meishijiemeimeimei@gmail.com>, 2018. # Jingtian Pan <panjingtian@126.com>, 2018. -# lalalaring <783482203@qq.com>, 2017. +# lalalaring <783482203@qq.com>, 2017, 2018. # Luo Jun <vipsbpig@gmail.com>, 2016-2017, 2018. # oberon-tonya <360119124@qq.com>, 2016. # plumsky <x-wolf@163.com>, 2018. @@ -34,12 +34,14 @@ # 刘庆文 <liuqingwen@163.com>, 2018. # Haowen Liu <liu.haowen.andy@gmail.com>, 2018. # tangdou1 <1093505442@qq.com>, 2018. +# yzt <834950797@qq.com>, 2018. +# DKLost <514dklost@gmail.com>, 2018. msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2018-11-26 16:10+0000\n" -"Last-Translator: Luo Jun <vipsbpig@gmail.com>\n" +"PO-Revision-Date: 2018-12-04 05:19+0000\n" +"Last-Translator: tangdou1 <1093505442@qq.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" "Language: zh_CN\n" @@ -47,7 +49,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.3-dev\n" +"X-Generator: Weblate 3.4-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -228,7 +230,7 @@ msgstr "触å‘器" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "æ•èŽ·" +msgstr "截图" #: editor/animation_track_editor.cpp msgid "Nearest" @@ -425,14 +427,12 @@ msgid "Delete Selection" msgstr "åˆ é™¤å·²é€‰ä¸é¡¹" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Next Step" msgstr "å‰å¾€ä¸‹ä¸€æ¥" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Go to Previous Step" -msgstr "å‰å¾€ä¸Šä¸€æ¥" +msgstr "返回上一æ¥" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -571,8 +571,9 @@ msgid "Warnings:" msgstr "è¦å‘Šï¼š" #: editor/code_editor.cpp -msgid "Zoom:" -msgstr "缩放:" +#, fuzzy +msgid "Font Size:" +msgstr "æºå—体大å°:" #: editor/code_editor.cpp msgid "Line:" @@ -683,9 +684,8 @@ msgid "Edit Connection: " msgstr "编辑广æ’订阅: " #: editor/connections_dialog.cpp -#, fuzzy msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "ä½ ç¡®å®šè¦ä»Žè¯¥å¹¿æ’ä¿¡å·ä¸ç§»é™¤æ‰€æœ‰è¿žæŽ¥å—?" +msgstr "ä½ ç¡®å®šè¦ä»Žä¿¡å· “%s†ä¸ç§»é™¤æ‰€æœ‰è¿žæŽ¥å—?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -833,9 +833,8 @@ msgid "Error loading:" msgstr "åŠ è½½å‡ºé”™:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Load failed due to missing dependencies:" -msgstr "åŠ è½½åœºæ™¯å¤±è´¥ï¼Œæ‰¾ä¸åˆ°ä»¥ä¸‹ä¾èµ–项目:" +msgstr "由于缺少ä¾èµ–项, åŠ è½½å¤±è´¥ï¼š" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1313,24 +1312,21 @@ msgid "File Exists, Overwrite?" msgstr "文件已å˜åœ¨ï¼Œç¡®å®šè¦è¦†ç›–它å—?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Select This Folder" -msgstr "选择当å‰ç›®å½•" +msgstr "选择æ¤æ–‡ä»¶å¤¹" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" msgstr "æ‹·è´è·¯å¾„" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" -msgstr "在资æºç®¡ç†å™¨ä¸æ‰“å¼€" +msgstr "在文件管ç†å™¨ä¸æ‰“å¼€" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #: editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" -msgstr "在资æºç®¡ç†å™¨ä¸æ‰“å¼€" +msgstr "在文件管ç†å™¨ä¸æ˜¾ç¤º" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." @@ -1354,7 +1350,7 @@ msgstr "打开å•ä¸ªæ–‡ä»¶" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "打开文件" +msgstr "打开一个或多个文件" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" @@ -1473,19 +1469,16 @@ msgid "Methods" msgstr "方法" #: editor/editor_help.cpp -#, fuzzy msgid "Methods:" -msgstr "方法" +msgstr "方法:" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "属性" +msgstr "主题属性" #: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties:" -msgstr "属性:" +msgstr "Theme Properties:" #: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp msgid "Signals:" @@ -1512,14 +1505,12 @@ msgid "Constants:" msgstr "常é‡:" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description" -msgstr "æè¿°" +msgstr "类说明" #: editor/editor_help.cpp -#, fuzzy msgid "Class Description:" -msgstr "æè¿°:" +msgstr "类说明:" #: editor/editor_help.cpp msgid "Online Tutorials:" @@ -1535,14 +1526,12 @@ msgstr "" "url][/color]çš„æ–¹å¼å¸®åŠ©æˆ‘们完善文档。" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "属性æ述:" +msgstr "属性说明" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions:" -msgstr "属性æ述:" +msgstr "属性说明:" #: editor/editor_help.cpp msgid "" @@ -1553,14 +1542,12 @@ msgstr "" "[/color]!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "方法æè¿°:" +msgstr "方法说明" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions:" -msgstr "方法æè¿°:" +msgstr "方法说明:" #: editor/editor_help.cpp msgid "" @@ -1576,49 +1563,40 @@ msgid "Search Help" msgstr "æœç´¢å¸®åŠ©" #: editor/editor_help_search.cpp -#, fuzzy msgid "Display All" -msgstr "显示法线" +msgstr "全部显示" #: editor/editor_help_search.cpp -#, fuzzy msgid "Classes Only" -msgstr "类型" +msgstr "ä»…é™ç±»" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "方法" +msgstr "仅方法" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "ä¿¡å·" +msgstr "ä»…ä¿¡å·" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "常é‡" +msgstr "仅常é‡" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "属性" +msgstr "仅属性" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "属性" +msgstr "仅主题属性" #: editor/editor_help_search.cpp -#, fuzzy msgid "Member Type" -msgstr "æˆå‘˜" +msgstr "æˆå‘˜ç±»åž‹" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "ç±»:" +msgstr "ç±»" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -1717,13 +1695,19 @@ msgstr "æ¤æ“作必须在打开一个场景åŽæ‰èƒ½æ‰§è¡Œã€‚" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "æ— æ³•ä¿å˜åœºæ™¯ï¼Œä¾èµ–项(实例或基类)验è¯å¤±è´¥ã€‚" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "" +msgstr "æ— æ³•è¦†ç›–ä»å¤„于打开状æ€çš„场景!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" @@ -1967,11 +1951,10 @@ msgid "Unable to load addon script from path: '%s'." msgstr "æ— æ³•ä»Žè·¯å¾„ä¸åŠ è½½æ’件脚本: \"%s\"。" #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." -msgstr "æ— æ³•ä»Žè·¯å¾„åŠ è½½æ’件脚本: \"%s\" 脚本ä¸åœ¨å·¥å…·æ¨¡å¼ä¸‹ã€‚" +msgstr "æ— æ³•ä»Žè·¯å¾„åŠ è½½æ’件脚本: ‘%s’ 脚本看上去似乎有代ç 错误,请检查其è¯æ³•ã€‚" #: editor/editor_node.cpp msgid "" @@ -2020,9 +2003,8 @@ msgstr "默认" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" -msgstr "在资æºç®¡ç†å™¨ä¸å±•ç¤º" +msgstr "在文件系统ä¸æ˜¾ç¤º" #: editor/editor_node.cpp msgid "Play This Scene" @@ -2050,7 +2032,7 @@ msgstr "%d 个文件未展示" #: editor/editor_node.cpp msgid "Dock Position" -msgstr "åœé 区ä½ç½®" +msgstr "é¢æ¿ä½ç½®" #: editor/editor_node.cpp msgid "Distraction Free Mode" @@ -2105,7 +2087,6 @@ msgid "Save Scene" msgstr "ä¿å˜åœºæ™¯" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "ä¿å˜æ‰€æœ‰åœºæ™¯" @@ -2135,7 +2116,7 @@ msgid "Undo" msgstr "撤销" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "é‡åš" @@ -2161,7 +2142,7 @@ msgstr "导出" #: editor/editor_node.cpp msgid "Tools" -msgstr "工具(tools)" +msgstr "工具" #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2582,6 +2563,8 @@ msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" +"æ— æ³•åœ¨ä¿å˜ä¸ºæ–‡ä»¶çš„资æºä¸Šåˆ›å»ºè§†å›¾çº¹ç†ã€‚\n" +"资æºéœ€è¦å±žäºŽåœºæ™¯ã€‚" #: editor/editor_properties.cpp msgid "" @@ -2590,6 +2573,8 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" +"æ— æ³•åœ¨æ¤èµ„æºä¸Šåˆ›å»ºè§†å›¾çº¹ç†, å› ä¸ºå®ƒæœªè®¾ç½®ä¸ºæœ¬åœ°åˆ°åœºæ™¯ã€‚\n" +"请打开上é¢çš„ `本地到场景` 属性 (以åŠåŒ…å«å®ƒçš„所有资æºåˆ°èŠ‚点)。" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" @@ -2771,7 +2756,7 @@ msgstr "导入:" msgid "" "No download links found for this version. Direct download is only available " "for official releases." -msgstr "当å‰ç‰ˆæœ¬æ²¡æœ‰ä¸‹è½½é“¾æŽ¥ã€‚仅有官方æ£å¼ç‰ˆæ供直链下载。" +msgstr "没有找到这个版本的下载链接。直接下载åªé€‚用于æ£å¼ç‰ˆæœ¬ã€‚" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -2900,9 +2885,8 @@ msgid "Can't open file_type_cache.cch for writing, not saving file type cache!" msgstr "æ— æ³•ä»¥å¯å†™æ–¹å¼æ‰“å¼€file_type_cache.cchï¼" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Favorites" -msgstr "收è—:" +msgstr "收è—夹" #: editor/filesystem_dock.cpp msgid "Cannot navigate to '%s' as it has not been found in the file system!" @@ -2985,14 +2969,12 @@ msgid "Instance" msgstr "创建实例节点" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to favorites" -msgstr "收è—:" +msgstr "æ·»åŠ åˆ°æ”¶è—夹" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from favorites" -msgstr "从分组ä¸ç§»é™¤" +msgstr "从收è—夹ä¸åˆ 除" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." @@ -3023,14 +3005,12 @@ msgid "New Resource..." msgstr "新建资æºâ€¦" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Expand All" -msgstr "展开所有" +msgstr "全部展开" #: editor/filesystem_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" -msgstr "收起所有" +msgstr "全部折å " #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3052,9 +3032,8 @@ msgid "Re-Scan Filesystem" msgstr "é‡æ–°æ‰«æ文件系统" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle split mode" -msgstr "切æ¢æ¨¡å¼" +msgstr "切æ¢æ‹†åˆ†æ¨¡å¼" #: editor/filesystem_dock.cpp msgid "Search files" @@ -3089,24 +3068,20 @@ msgid "Create Script" msgstr "创建脚本" #: editor/find_in_files.cpp -#, fuzzy msgid "Find in Files" msgstr "在文件ä¸æŸ¥æ‰¾" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "查找: " +msgstr "查找:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "文件夹: " +msgstr "文件夹:" #: editor/find_in_files.cpp -#, fuzzy msgid "Filters:" -msgstr "ç›é€‰" +msgstr "ç›é€‰ï¼š" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3207,7 +3182,7 @@ msgstr "与独立的æ质和动画一åŒå¯¼å…¥" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "导入独立的物体ã€æ质和动画" +msgstr "使用å•ç‹¬çš„对象 + æè´¨ + 动画导入" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" @@ -3283,14 +3258,12 @@ msgid "Failed to load resource." msgstr "åŠ è½½èµ„æºå¤±è´¥ã€‚" #: editor/inspector_dock.cpp -#, fuzzy msgid "Expand All Properties" msgstr "展开所有属性" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" -msgstr "收起所有属性" +msgstr "折å 所有属性" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -4228,9 +4201,8 @@ msgid "Resize CanvasItem" msgstr "调整 CanvasItem 尺寸" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale CanvasItem" -msgstr "旋转 CanvasItem" +msgstr "缩放包å«é¡¹" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" @@ -4293,9 +4265,8 @@ msgid "Rotate Mode" msgstr "旋转模å¼" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Mode" -msgstr "缩放模å¼ï¼ˆR)" +msgstr "缩放模å¼" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -4392,9 +4363,8 @@ msgid "Restores the object's children's ability to be selected." msgstr "æ¢å¤èŠ‚点的åå™èƒ½å¤Ÿè¢«é€‰ä¸ã€‚" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Skeleton Options" -msgstr "骨架" +msgstr "骨架选项" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" @@ -4448,7 +4418,7 @@ msgstr "显示视图窗å£" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Group And Lock Icons" -msgstr "" +msgstr "显示组和é”å®šå›¾æ ‡" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" @@ -4889,7 +4859,6 @@ msgid "Create Navigation Polygon" msgstr "创建导航多边形" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" msgstr "生æˆå¯è§†åŒ–区域" @@ -5208,7 +5177,7 @@ msgstr "移动点" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "Ctrl:旋转" +msgstr "Ctrl:旋转" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" @@ -5369,9 +5338,8 @@ msgid "Error writing TextFile:" msgstr "写入文本文件时出错:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error: could not load file." -msgstr "é”™è¯¯ï¼Œæ— æ³•åŠ è½½æ–‡ä»¶ã€‚" +msgstr "é”™è¯¯ï¼šæ— æ³•åŠ è½½æ–‡ä»¶ã€‚" #: editor/plugins/script_editor_plugin.cpp msgid "Error could not load file." @@ -5470,7 +5438,6 @@ msgid "Copy Script Path" msgstr "æ‹·è´è„šæœ¬è·¯å¾„" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "History Previous" msgstr "åŽé€€" @@ -5542,7 +5509,6 @@ msgid "Keep Debugger Open" msgstr "ä¿æŒè°ƒè¯•å™¨æ‰“å¼€" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Debug with External Editor" msgstr "使用外部编辑器进行调试" @@ -5587,7 +5553,6 @@ msgid "Debugger" msgstr "调试器" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Search Results" msgstr "æœç´¢ç»“æžœ" @@ -5600,9 +5565,8 @@ msgid "(ignore)" msgstr "(忽略)" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function" -msgstr "å‰å¾€å‡½æ•°..." +msgstr "转到函数" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." @@ -5691,14 +5655,12 @@ msgid "Trim Trailing Whitespace" msgstr "修剪行åŽç©ºç™½" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Spaces" msgstr "å°†ç¼©è¿›è½¬ä¸ºç©ºæ ¼" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Convert Indent to Tabs" -msgstr "将缩进转为Tab" +msgstr "将缩进转为Tabs" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" @@ -5714,12 +5676,10 @@ msgid "Remove All Breakpoints" msgstr "移除所有æ–点" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Breakpoint" msgstr "å‰å¾€ä¸‹ä¸€ä¸ªæ–点" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Breakpoint" msgstr "å‰å¾€ä¸Šä¸€ä¸ªæ–点" @@ -5728,19 +5688,16 @@ msgid "Find Previous" msgstr "查找上一项" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find in Files..." msgstr "在文件ä¸æŸ¥æ‰¾..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Function..." -msgstr "å‰å¾€å‡½æ•°..." +msgstr "转到函数..." #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Line..." -msgstr "å‰å¾€è¡Œ..." +msgstr "转到行..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" @@ -5836,7 +5793,7 @@ msgstr "音调" #: editor/plugins/spatial_editor_plugin.cpp msgid "Yaw" -msgstr "" +msgstr "å航" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" @@ -6003,7 +5960,6 @@ msgid "Freelook Speed Modifier" msgstr "自由视图速度调整" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Rotation Locked" msgstr "é”定视角旋转" @@ -6507,9 +6463,8 @@ msgid "Fix Invalid Tiles" msgstr "ä¿®å¤æ— 效的瓦片" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Cut Selection" -msgstr "å±…ä¸æ˜¾ç¤ºé€‰ä¸èŠ‚点" +msgstr "切割选择" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -6556,32 +6511,28 @@ msgid "Pick Tile" msgstr "é€‰æ‹©ç –å—(Tile)" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "移动选ä¸é¡¹" +msgstr "å¤åˆ¶é€‰æ‹©" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate left" -msgstr "旋转模å¼" +msgstr "å‘左旋转" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate right" -msgstr "å‘å³ç§»åŠ¨" +msgstr "å‘å³æ—‹è½¬" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip horizontally" -msgstr "" +msgstr "水平翻转" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip vertically" -msgstr "" +msgstr "垂直翻转" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear transform" -msgstr "å˜æ¢" +msgstr "清除å˜æ¢" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet" @@ -6611,7 +6562,6 @@ msgid "Display tile's names (hold Alt Key)" msgstr "显示瓦片的åå—ï¼ˆæŒ‰ä½ Alt 键)" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Remove selected texture and ALL TILES which use it?" msgstr "确定移除选ä¸çš„纹ç†ä»¥åŠã€æ‰€æœ‰ã€‘使用它的ã€ç“¦ç‰‡é›†ã€‘å—?" @@ -6628,9 +6578,8 @@ msgid "Merge from scene?" msgstr "确定è¦åˆå¹¶åœºæ™¯ï¼Ÿ" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "%s file(s) were not added because was already on the list." -msgstr " æ–‡ä»¶æ²¡æœ‰è¢«æ·»åŠ ï¼Œå› ä¸ºå·²æ·»åŠ åœ¨åˆ—è¡¨ä¸ã€‚" +msgstr "%s æ–‡ä»¶æ²¡æœ‰è¢«æ·»åŠ ï¼Œå› ä¸ºå·²æ·»åŠ åœ¨åˆ—è¡¨ä¸ã€‚" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -6716,14 +6665,12 @@ msgid "Export templates for this platform are missing/corrupted:" msgstr "没有æ¤å¹³å°çš„导出模æ¿:" #: editor/project_export.cpp -#, fuzzy msgid "Release" -msgstr "刚好释放" +msgstr "å‘è¡Œ" #: editor/project_export.cpp -#, fuzzy msgid "Exporting All" -msgstr "æ£åœ¨å¯¼å‡º %s" +msgstr "全部导出" #: editor/project_export.cpp msgid "Presets" @@ -6734,9 +6681,8 @@ msgid "Add..." msgstr "æ·»åŠ ..." #: editor/project_export.cpp -#, fuzzy msgid "Export Path:" -msgstr "导出预设:" +msgstr "导出路径:" #: editor/project_export.cpp msgid "Resources" @@ -6797,14 +6743,12 @@ msgid "Export PCK/Zip" msgstr "导出 PCK/ZIP" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "导出模å¼:" +msgstr "导出模å¼ï¼Ÿ" #: editor/project_export.cpp -#, fuzzy msgid "Export All" -msgstr "导出" +msgstr "全部导出" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" @@ -7482,7 +7426,6 @@ msgid "Step" msgstr "æ¥é•¿" #: editor/rename_dialog.cpp -#, fuzzy msgid "Amount by which counter is incremented for each node" msgstr "由计数器增é‡å¾—到的æ¯ä¸ªèŠ‚点的总é‡" @@ -7491,7 +7434,6 @@ msgid "Padding" msgstr "内边è·" #: editor/rename_dialog.cpp -#, fuzzy msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." @@ -7637,7 +7579,7 @@ msgstr "将新场景å¦å˜ä¸º..." msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." -msgstr "" +msgstr "ç¦ç”¨â€œå¯ç¼–辑实例â€å°†å¯¼è‡´èŠ‚点的所有属性æ¢å¤ä¸ºå…¶é»˜è®¤å€¼ã€‚" #: editor/scene_tree_dock.cpp msgid "Editable Children" @@ -7710,9 +7652,8 @@ msgid "Clear Inheritance" msgstr "清除继承" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open documentation" -msgstr "打开Godot在线文档" +msgstr "打开Godot文档" #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" @@ -7727,7 +7668,6 @@ msgid "Change Type" msgstr "更改类型" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Extend Script" msgstr "打开脚本" @@ -7890,9 +7830,8 @@ msgid "Path is empty" msgstr "文件路径为空" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty" -msgstr "Sprite 是空的ï¼" +msgstr "文件å为空" #: editor/script_create_dialog.cpp msgid "Path is not local" @@ -7983,9 +7922,8 @@ msgid "Bytes:" msgstr "å—节:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Stack Trace" -msgstr "å †æ ˆå¸§ï¼ˆStack Frames)" +msgstr "æ ˆè¿½è¸ª" #: editor/script_editor_debugger.cpp msgid "Pick one or more items from the list to display the graph." @@ -8433,7 +8371,7 @@ msgstr "å†…éƒ¨å¼‚å¸¸å †æ ˆè¿½æœ”ç»“æŸ" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Bake NavMesh" -msgstr "" +msgstr "烘焙导航网" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -8806,12 +8744,11 @@ msgstr "æœç´¢å¯è§†åŒ–脚本节点" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" -msgstr "" +msgstr "得到 %s" #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Set %s" -msgstr "设值 " +msgstr "设值 %s" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -8903,7 +8840,7 @@ msgstr "形状资æºå¿…须是通过CollisionShape2D节点的shape属性创建的 msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." -msgstr "" +msgstr "CPUParticles2D动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œç²’å动画â€çš„CanvasItemMaterial。" #: scene/2d/light_2d.cpp msgid "" @@ -8951,7 +8888,7 @@ msgstr "ç²’åæè´¨æ²¡æœ‰æŒ‡å®šï¼Œè¯¥è¡Œä¸ºæ— æ•ˆã€‚" msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." -msgstr "" +msgstr "Particles2D 动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œç²’å动画â€çš„CanvasItemMaterial。" #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." @@ -9084,14 +9021,14 @@ msgstr "" #: scene/3d/cpu_particles.cpp #, fuzzy -msgid "Nothing is visible because no mesh has not been assigned." -msgstr "ç²’åä¸å¯è§ï¼Œå› ä¸ºæ²¡æœ‰ç½‘æ ¼(meshe)指定到绘制通é“(draw passes)。" +msgid "Nothing is visible because no mesh has been assigned." +msgstr "æ— ç‰©å¯è§ï¼Œå› 为没有未被分é…çš„ç½‘æ ¼(mesh)。" #: scene/3d/cpu_particles.cpp msgid "" "CPUParticles animation requires the usage of a SpatialMaterial with " "\"Billboard Particles\" enabled." -msgstr "" +msgstr "CPUParticles动画需è¦ä½¿ç”¨å¯åŠ¨äº†â€œBillboard Particlesâ€çš„SpatialMaterial。" #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -9117,21 +9054,20 @@ msgstr "ç²’åä¸å¯è§ï¼Œå› ä¸ºæ²¡æœ‰ç½‘æ ¼(meshe)指定到绘制通é“(draw pa msgid "" "Particles animation requires the usage of a SpatialMaterial with \"Billboard " "Particles\" enabled." -msgstr "" +msgstr "ç²’å动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œBillboard Particlesâ€çš„SpatialMaterial。" #: scene/3d/path.cpp -#, fuzzy msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow2D类型的节点åªæœ‰ä½œä¸ºPath2Dçš„å节点节æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" +msgstr "PathFollow类型的节点åªæœ‰ä½œä¸ºPath类型节点的å节点æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" #: scene/3d/path.cpp -#, fuzzy msgid "OrientedPathFollow only works when set as a child of a Path node." -msgstr "PathFollow2D类型的节点åªæœ‰ä½œä¸ºPath2Dçš„å节点节æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" +msgstr "" +"OrientedPathFollow 类型的节点åªæœ‰ä½œä¸ºPath类型节点的å节点æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" #: scene/3d/path.cpp msgid "OrientedPathFollow requires up vectors enabled in its parent Path." -msgstr "" +msgstr "OrientedPathFollow 需è¦å†å…¶çˆ¶è·¯å¾„ä¸å¯ç”¨up vectors。" #: scene/3d/physics_body.cpp msgid "" @@ -9169,7 +9105,6 @@ msgid "This body will be ignored until you set a mesh" msgstr "这个物体将被忽略,除éžè®¾ç½®ä¸€ä¸ªç½‘æ ¼" #: scene/3d/soft_body.cpp -#, fuzzy msgid "" "Size changes to SoftBody will be overridden by the physics engine when " "running.\n" @@ -9257,7 +9192,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If exp_edit is true min_value must be > 0." -msgstr "" +msgstr "如果exp_edit为true, 则min_value必须为>0。" #: scene/gui/scroll_container.cpp msgid "" @@ -9329,6 +9264,9 @@ msgstr "对uniform的赋值。" msgid "Varyings can only be assigned in vertex function." msgstr "å˜é‡åªèƒ½åœ¨é¡¶ç‚¹å‡½æ•°ä¸æŒ‡å®šã€‚" +#~ msgid "Zoom:" +#~ msgstr "缩放:" + #~ msgid "Are you sure you want to remove all connections from the \"" #~ msgstr "您确定è¦ç§»é™¤æ‰€æœ‰å¹¿æ’连接从 \"" @@ -10045,9 +9983,6 @@ msgstr "å˜é‡åªèƒ½åœ¨é¡¶ç‚¹å‡½æ•°ä¸æŒ‡å®šã€‚" #~ msgid "Source Font:" #~ msgstr "æºå—体文件:" -#~ msgid "Source Font Size:" -#~ msgstr "æºå—体大å°:" - #~ msgid "Dest Resource:" #~ msgstr "ç›®æ ‡èµ„æº:" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index 41ac16cd12..f70a7a2b2f 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -580,9 +580,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "放大" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp #, fuzzy @@ -1788,6 +1787,12 @@ msgstr "ä¸èƒ½åŸ·è¡Œé€™å€‹å‹•ä½œï¼Œå› 為沒有tree root." #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2215,7 +2220,7 @@ msgid "Undo" msgstr "復原" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "é‡è£½" @@ -9354,7 +9359,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9583,6 +9588,10 @@ msgid "Varyings can only be assigned in vertex function." msgstr "" #, fuzzy +#~ msgid "Zoom:" +#~ msgstr "放大" + +#, fuzzy #~ msgid "Public Methods" #~ msgstr "é¸æ“‡æ¨¡å¼" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index fe162ba39e..d902a58b73 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -561,9 +561,8 @@ msgid "Warnings:" msgstr "" #: editor/code_editor.cpp -#, fuzzy -msgid "Zoom:" -msgstr "放大" +msgid "Font Size:" +msgstr "" #: editor/code_editor.cpp msgid "Line:" @@ -1743,6 +1742,12 @@ msgstr "æ¤æ“作無法復原, 確定è¦é‚„原嗎?" #: editor/editor_node.cpp msgid "" +"This scene can't be saved because there is a cyclic instancing inclusion.\n" +"Please resolve it and then attempt to save again." +msgstr "" + +#: editor/editor_node.cpp +msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" @@ -2151,7 +2156,7 @@ msgid "Undo" msgstr "復原" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp +#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" msgstr "å–消「復原ã€" @@ -9200,7 +9205,7 @@ msgid "" msgstr "" #: scene/3d/cpu_particles.cpp -msgid "Nothing is visible because no mesh has not been assigned." +msgid "Nothing is visible because no mesh has been assigned." msgstr "" #: scene/3d/cpu_particles.cpp @@ -9430,6 +9435,10 @@ msgstr "" msgid "Varyings can only be assigned in vertex function." msgstr "" +#, fuzzy +#~ msgid "Zoom:" +#~ msgstr "放大" + #~ msgid "Class List:" #~ msgstr "Class 列表:" diff --git a/main/main.cpp b/main/main.cpp index db23a6c214..7383294167 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1697,12 +1697,17 @@ bool Main::start() { #ifdef TOOLS_ENABLED if (editor) { - Error serr = editor_node->load_scene(local_game_path); - if (serr != OK) - ERR_PRINT("Failed to load scene"); + if (game_path != GLOBAL_GET("application/run/main_scene") || !editor_node->has_scenes_in_session()) { + Error serr = editor_node->load_scene(local_game_path); + if (serr != OK) + ERR_PRINT("Failed to load scene"); + } OS::get_singleton()->set_context(OS::CONTEXT_EDITOR); } #endif + if (!editor) { + OS::get_singleton()->set_context(OS::CONTEXT_ENGINE); + } } if (!project_manager && !editor) { // game diff --git a/main/tests/test_io.cpp b/main/tests/test_io.cpp deleted file mode 100644 index 4e43ee6a54..0000000000 --- a/main/tests/test_io.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/*************************************************************************/ -/* test_io.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "test_io.h" - -#ifdef MINIZIP_ENABLED - -#include "core/io/resource_loader.h" -#include "core/io/resource_saver.h" -#include "core/os/dir_access.h" -#include "core/os/main_loop.h" -#include "core/os/os.h" -#include "core/print_string.h" -#include "core/project_settings.h" -#include "scene/resources/texture.h" - -#include "core/io/file_access_memory.h" - -namespace TestIO { - -class TestMainLoop : public MainLoop { - - bool quit; - -public: - virtual void input_event(const Ref<InputEvent> &p_event) { - } - virtual bool idle(float p_time) { - return false; - } - - virtual void request_quit() { - - quit = true; - } - virtual void init() { - - quit = true; - } - virtual bool iteration(float p_time) { - - return quit; - } - virtual void finish() { - } -}; - -MainLoop *test() { - - print_line("this is test io"); - DirAccess *da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); - da->change_dir("."); - print_line("Opening current dir " + da->get_current_dir()); - String entry; - da->list_dir_begin(); - while ((entry = da->get_next()) != "") { - - print_line("entry " + entry + " is dir: " + Variant(da->current_is_dir())); - }; - da->list_dir_end(); - - RES texture = ResourceLoader::load("test_data/rock.png"); - ERR_FAIL_COND_V(texture.is_null(), NULL); - - ResourceSaver::save("test_data/rock.xml", texture); - - print_line("localize paths"); - print_line(ProjectSettings::get_singleton()->localize_path("algo.xml")); - print_line(ProjectSettings::get_singleton()->localize_path("c:\\windows\\algo.xml")); - print_line(ProjectSettings::get_singleton()->localize_path(ProjectSettings::get_singleton()->get_resource_path() + "/something/something.xml")); - print_line(ProjectSettings::get_singleton()->localize_path("somedir/algo.xml")); - - { - - FileAccess *z = FileAccess::open("test_data/archive.zip", FileAccess::READ); - int len = z->get_len(); - Vector<uint8_t> zip; - zip.resize(len); - z->get_buffer(zip.ptrw(), len); - z->close(); - memdelete(z); - - FileAccessMemory::register_file("a_package", zip); - FileAccess::make_default<FileAccessMemory>(FileAccess::ACCESS_RESOURCES); - FileAccess::make_default<FileAccessMemory>(FileAccess::ACCESS_FILESYSTEM); - FileAccess::make_default<FileAccessMemory>(FileAccess::ACCESS_USERDATA); - - print_line("archive test"); - }; - - print_line("test done"); - - return memnew(TestMainLoop); -} -} // namespace TestIO - -#else - -namespace TestIO { - -MainLoop *test() { - - return NULL; -} -} // namespace TestIO -#endif diff --git a/main/tests/test_io.h b/main/tests/test_io.h deleted file mode 100644 index ffebd05160..0000000000 --- a/main/tests/test_io.h +++ /dev/null @@ -1,45 +0,0 @@ -/*************************************************************************/ -/* test_io.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#ifndef TEST_IO_H -#define TEST_IO_H - -/** - @author Juan Linietsky <reduzio@gmail.com> -*/ - -#include "core/os/main_loop.h" - -namespace TestIO { - -MainLoop *test(); -} - -#endif diff --git a/main/tests/test_main.cpp b/main/tests/test_main.cpp index 714a254371..a36b619ba0 100644 --- a/main/tests/test_main.cpp +++ b/main/tests/test_main.cpp @@ -37,7 +37,6 @@ #include "test_gdscript.h" #include "test_gui.h" #include "test_image.h" -#include "test_io.h" #include "test_math.h" #include "test_oa_hash_map.h" #include "test_ordered_hash_map.h" @@ -57,7 +56,6 @@ const char **tests_get_names() { "render", "oa_hash_map", "gui", - "io", "shaderlang", "gd_tokenizer", "gd_parser", @@ -111,11 +109,6 @@ MainLoop *test_main(String p_test, const List<String> &p_args) { } #endif - if (p_test == "io") { - - return TestIO::test(); - } - if (p_test == "shaderlang") { return TestShaderLang::test(); diff --git a/misc/dist/document_icon.svg b/misc/dist/document_icon.svg deleted file mode 100644 index 2652110fa5..0000000000 --- a/misc/dist/document_icon.svg +++ /dev/null @@ -1,12 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"> -<path d="M159.143 69.856v884.288h705.714v-665.51L646.08 69.856z" fill="#fff" stroke="#d2d2d2" stroke-width="20"/> -<g stroke-width=".32"> - <path d="M723.128 594.284s-.701-4.304-1.111-4.265l-78.083 7.534a12.691 12.691 0 0 0-11.474 11.78l-2.145 30.747-60.408 4.31-4.11-27.866c-.914-6.198-6.326-10.87-12.591-10.87h-82.412c-6.263 0-11.675 4.672-12.59 10.87l-4.111 27.865-60.408-4.31-2.145-30.745a12.692 12.692 0 0 0-11.475-11.783l-78.12-7.532c-.404-.039-.7 4.269-1.104 4.269l-.105 16.897 66.161 10.67 2.167 31.02c.438 6.28 5.505 11.357 11.79 11.808l83.194 5.935c.315.022.626.035.937.035 6.252 0 11.655-4.675 12.57-10.873l4.228-28.671h60.436l4.228 28.671c.913 6.196 6.323 10.87 12.583 10.87.307 0 .613-.01.913-.032l83.206-5.935c6.282-.45 11.351-5.528 11.79-11.808l2.164-31.02 66.133-10.717z" fill="#fff"/> - <path d="M300.84 466.87v127.413c.233.003.466.011.697.033l78.113 7.531a8.41 8.41 0 0 1 7.583 7.789l2.409 34.481 68.138 4.862 4.694-31.825a8.41 8.41 0 0 1 8.321-7.184h82.412a8.41 8.41 0 0 1 8.32 7.184l4.693 31.825 68.14-4.862 2.407-34.481a8.414 8.414 0 0 1 7.583-7.789l78.082-7.531c.231-.022.462-.03.695-.033v-10.166l.033-.01V466.87h.289c10.348-13.207 19.923-27.124 29.105-41.972-12.195-20.76-27.137-39.313-43.109-56.502-14.813 7.456-29.2 15.903-42.79 24.891-6.8-6.759-14.458-12.288-21.981-18.067-7.392-5.937-15.722-10.29-23.622-15.361 2.352-17.517 3.515-34.762 3.983-52.76-20.385-10.26-42.123-17.062-64.111-21.947-8.779 14.754-16.807 30.732-23.799 46.352-8.291-1.385-16.621-1.899-24.962-1.998v-.013c-.058 0-.112.013-.162.013-.052 0-.106-.013-.157-.013v.013c-8.356.1-16.68.613-24.973 1.998-6.988-15.62-15.012-31.598-23.804-46.352-21.977 4.885-43.717 11.688-64.1 21.947.466 17.998 1.63 35.243 3.988 52.76-7.916 5.071-16.235 9.424-23.629 15.36-7.512 5.78-15.184 11.31-21.986 18.068-13.589-8.988-27.972-17.435-42.79-24.89-15.971 17.188-30.905 35.74-43.104 56.501 9.178 14.848 18.76 28.765 29.105 41.972z" fill="#478cbf"/> - <path d="M653.052 617.91l-2.42 34.664a8.413 8.413 0 0 1-7.792 7.803l-83.204 5.937a8.412 8.412 0 0 1-8.92-7.165l-4.77-32.357h-67.89l-4.772 32.358c-.64 4.354-4.534 7.486-8.92 7.164l-83.203-5.937a8.413 8.413 0 0 1-7.792-7.803l-2.42-34.665-70.238-6.772c.033 7.55.13 15.819.13 17.465 0 74.181 94.102 109.836 211.016 110.246h.287c116.915-.41 210.984-36.065 210.984-110.246 0-1.676.101-9.912.136-17.465z" fill="#478cbf"/> - <path d="M448.344 518.591c0 26.01-21.074 47.078-47.074 47.078-25.987 0-47.067-21.069-47.067-47.078 0-25.991 21.08-47.05 47.067-47.05 26 0 47.074 21.059 47.074 47.05" fill="#fff"/> - <path d="M437.017 521.384c0 17.251-13.982 31.233-31.246 31.233-17.256 0-31.247-13.982-31.247-31.233 0-17.252 13.99-31.247 31.247-31.247 17.264 0 31.246 13.995 31.246 31.247" fill="#414042"/> - <path d="M511.997 569.952c-8.37 0-15.152-6.168-15.152-13.77v-43.336c0-7.596 6.783-13.77 15.152-13.77 8.368 0 15.166 6.174 15.166 13.77v43.336c0 7.602-6.798 13.77-15.166 13.77M575.657 518.591c0 26.01 21.074 47.078 47.078 47.078 25.985 0 47.063-21.069 47.063-47.078 0-25.991-21.078-47.05-47.063-47.05-26.004 0-47.078 21.059-47.078 47.05" fill="#fff"/> - <path d="M586.987 521.384c0 17.251 13.978 31.233 31.23 31.233 17.268 0 31.245-13.982 31.245-31.233 0-17.252-13.977-31.247-31.246-31.247-17.251 0-31.23 13.995-31.23 31.247" fill="#414042"/> -</g> -</svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/gdscript.svg b/misc/dist/document_icons/gdscript.svg new file mode 100644 index 0000000000..ec65eb098a --- /dev/null +++ b/misc/dist/document_icons/gdscript.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path d="M812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026M161.89 49.151H464c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-width="19.603" stroke-linecap="round" stroke-linejoin="round"/><text style="line-height:1.25;-inkscape-font-specification:'Montserrat Ultra-Bold'" x="207.666" y="878.644" font-weight="800" font-size="16" font-family="Montserrat" letter-spacing="0" word-spacing="0" fill="#333f67"><tspan x="207.666" y="878.644" font-size="112">GDSCRIPT</tspan></text><path d="M481.818 300.713l-17.037 68.149a150.92 150.92 0 0 0-20.81 8.43l-60.015-36.021-42.683 42.683 36.079 60.19a150.92 150.92 0 0 0-8.608 20.693l-68.031 16.978v60.368l68.149 17.037a150.92 150.92 0 0 0 8.43 20.752l-36.021 60.072 42.683 42.683 60.19-36.079a150.92 150.92 0 0 0 20.693 8.608l16.978 68.031h60.368l17.037-68.149a150.92 150.92 0 0 0 20.752-8.43l60.072 36.021 42.683-42.683-36.079-60.19a150.92 150.92 0 0 0 8.608-20.693l68.031-16.978v-60.368l-68.149-17.037a150.92 150.92 0 0 0-8.43-20.752l36.021-60.072-42.683-42.683-60.19 36.079a150.92 150.92 0 0 0-20.693-8.608l-16.978-68.031h-60.368zm30.184 150.92A60.368 60.368 0 0 1 572.37 512a60.368 60.368 0 0 1-60.368 60.368A60.368 60.368 0 0 1 451.634 512a60.368 60.368 0 0 1 60.368-60.368z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/gdscript_extra_small.svg b/misc/dist/document_icons/gdscript_extra_small.svg new file mode 100644 index 0000000000..1c3545ef9d --- /dev/null +++ b/misc/dist/document_icons/gdscript_extra_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M7.39 4.721l-.346 1.38a3.056 3.056 0 0 0-.421.171l-1.216-.73-.864.865.73 1.219a3.056 3.056 0 0 0-.174.419l-1.377.344V9.61l1.38.345a3.056 3.056 0 0 0 .17.42l-.729 1.217.864.864 1.22-.73a3.056 3.056 0 0 0 .418.174l.344 1.377h1.222l.345-1.38a3.056 3.056 0 0 0 .42-.17l1.217.73.864-.865-.73-1.219a3.056 3.056 0 0 0 .174-.42l1.378-.343V8.39l-1.38-.345a3.056 3.056 0 0 0-.17-.42l.729-1.217-.865-.864-1.219.73a3.056 3.056 0 0 0-.419-.174L8.611 4.72H7.39zM8 7.777A1.222 1.222 0 0 1 9.223 9 1.222 1.222 0 0 1 8 10.222 1.222 1.222 0 0 1 6.778 9 1.222 1.222 0 0 1 8 7.777z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/gdscript_small.svg b/misc/dist/document_icons/gdscript_small.svg new file mode 100644 index 0000000000..468f4243a2 --- /dev/null +++ b/misc/dist/document_icons/gdscript_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M15.057 11.397l-.532 2.13a4.716 4.716 0 0 0-.65.263l-1.876-1.126-1.334 1.334 1.128 1.881a4.716 4.716 0 0 0-.27.647l-2.125.53v1.887l2.13.532a4.716 4.716 0 0 0 .263.649L10.665 22 12 23.335l1.881-1.127a4.716 4.716 0 0 0 .647.269l.53 2.125h1.887l.532-2.13a4.716 4.716 0 0 0 .649-.263l1.877 1.126 1.334-1.334-1.128-1.88a4.716 4.716 0 0 0 .27-.647l2.125-.531v-1.886l-2.13-.533a4.716 4.716 0 0 0-.263-.648l1.126-1.878-1.334-1.333-1.881 1.127a4.716 4.716 0 0 0-.647-.269l-.53-2.126h-1.887zm.944 4.716A1.887 1.887 0 0 1 17.887 18a1.887 1.887 0 0 1-1.886 1.886A1.887 1.887 0 0 1 14.114 18a1.887 1.887 0 0 1 1.887-1.887z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/project.svg b/misc/dist/document_icons/project.svg new file mode 100644 index 0000000000..aa9b936f27 --- /dev/null +++ b/misc/dist/document_icons/project.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path d="M812.681 293.783c-23.575-32.542-141.93-39.864-197.505-34.983 2.17-68.048 31.457-117.655-37.966-177.025M161.89 49.15H464c77.128-2.02 126.554 37.836 178.444 84.882l123.665 109.83c63.819 56.94 89.13 110.624 96 188.174v542.885H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-width="19.603" stroke-linecap="round" stroke-linejoin="round"/><g stroke-width=".32"><path d="M712.572 590.17s-.666-4.089-1.056-4.052l-74.179 7.157a12.056 12.056 0 0 0-10.9 11.191l-2.038 29.21-57.387 4.094-3.905-26.472c-.868-5.888-6.01-10.327-11.961-10.327h-78.292c-5.95 0-11.09 4.439-11.96 10.327l-3.906 26.472-57.387-4.095-2.038-29.208a12.057 12.057 0 0 0-10.901-11.194l-74.214-7.155c-.384-.037-.665 4.056-1.049 4.056l-.1 16.052 62.853 10.136 2.059 29.47c.416 5.965 5.23 10.788 11.2 11.217l79.035 5.638c.299.021.594.033.89.033 5.94 0 11.072-4.44 11.941-10.329l4.017-27.237h57.414l4.017 27.237c.867 5.886 6.006 10.326 11.953 10.326.292 0 .583-.009.868-.03l79.046-5.638c5.967-.428 10.783-5.252 11.2-11.218l2.056-29.469 62.826-10.18z" fill="#fff"/><path d="M311.398 469.127v121.042c.221.003.443.01.662.031l74.207 7.155a7.99 7.99 0 0 1 7.204 7.4l2.289 32.756 64.731 4.619 4.46-30.234a7.99 7.99 0 0 1 7.904-6.824h78.292a7.99 7.99 0 0 1 7.904 6.824l4.458 30.234 64.733-4.619 2.287-32.757a7.993 7.993 0 0 1 7.203-7.4l74.178-7.154c.22-.02.44-.028.66-.031v-9.658l.032-.01V469.128h.275c9.83-12.547 18.926-25.768 27.65-39.874-11.586-19.722-25.78-37.347-40.954-53.677-14.073 7.083-27.74 15.108-40.65 23.647-6.46-6.421-13.736-11.674-20.883-17.164-7.022-5.64-14.936-9.775-22.44-14.593 2.234-16.641 3.339-33.024 3.783-50.122-19.366-9.747-40.017-16.209-60.905-20.85-8.34 14.017-15.967 29.196-22.61 44.035-7.876-1.316-15.79-1.804-23.713-1.898v-.013c-.055 0-.107.013-.154.013-.05 0-.1-.013-.15-.013v.013c-7.937.095-15.845.582-23.724 1.898-6.638-14.84-14.261-30.018-22.613-44.035-20.879 4.641-41.532 11.104-60.895 20.85.442 17.098 1.548 33.48 3.788 50.122-7.52 4.818-15.423 8.953-22.447 14.592-7.137 5.491-14.425 10.745-20.887 17.165-12.91-8.539-26.573-16.564-40.65-23.646-15.173 16.329-29.36 33.953-40.95 53.676 8.72 14.106 17.823 27.327 27.65 39.874z" fill="#478cbf"/><path d="M646 612.615l-2.3 32.93a7.992 7.992 0 0 1-7.402 7.413l-79.044 5.64a7.991 7.991 0 0 1-8.474-6.806l-4.531-30.74h-64.496l-4.533 30.74c-.608 4.137-4.308 7.112-8.474 6.806l-79.043-5.64a7.992 7.992 0 0 1-7.402-7.413l-2.3-32.931-66.726-6.434c.032 7.173.124 15.028.124 16.592 0 70.472 89.397 104.344 200.465 104.734h.273c111.07-.39 200.435-34.262 200.435-104.734 0-1.592.096-9.416.129-16.592z" fill="#478cbf"/><path d="M451.527 518.261c0 24.71-20.02 44.725-44.72 44.725-24.688 0-44.714-20.016-44.714-44.725 0-24.691 20.026-44.697 44.713-44.697 24.7 0 44.72 20.006 44.72 44.697" fill="#fff"/><path d="M440.766 520.915c0 16.388-13.283 29.671-29.684 29.671-16.393 0-29.684-13.283-29.684-29.671 0-16.39 13.29-29.685 29.684-29.685 16.401 0 29.684 13.295 29.684 29.685" fill="#414042"/><path d="M511.997 567.054c-7.951 0-14.394-5.86-14.394-13.081v-41.17c0-7.216 6.444-13.08 14.394-13.08s14.408 5.864 14.408 13.08v41.17c0 7.222-6.458 13.081-14.408 13.081m60.477-48.793c0 24.71 20.02 44.725 44.724 44.725 24.686 0 44.71-20.016 44.71-44.725 0-24.691-20.024-44.697-44.71-44.697-24.704 0-44.724 20.006-44.724 44.697" fill="#fff"/><path d="M583.238 520.915c0 16.388 13.279 29.671 29.668 29.671 16.405 0 29.683-13.283 29.683-29.671 0-16.39-13.278-29.685-29.684-29.685-16.388 0-29.668 13.295-29.668 29.685" fill="#414042"/></g><text style="line-height:1.25;-inkscape-font-specification:'Montserrat Ultra-Bold'" x="234.416" y="878.644" font-weight="800" font-size="16" font-family="Montserrat" letter-spacing="0" word-spacing="0" fill="#333f67"><tspan x="234.416" y="878.644" font-size="112">PROJECT</tspan></text></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/project_extra_small.svg b/misc/dist/document_icons/project_extra_small.svg new file mode 100644 index 0000000000..5482d27033 --- /dev/null +++ b/misc/dist/document_icons/project_extra_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><g stroke-width=".32"><path d="M12.062 10.583s-.014-.083-.022-.082l-1.502.145a.244.244 0 0 0-.22.226l-.042.592-1.162.083-.079-.536a.246.246 0 0 0-.242-.21H7.208c-.12 0-.225.09-.243.21l-.079.536-1.162-.083-.041-.592a.244.244 0 0 0-.22-.226L3.958 10.5c-.007-.001-.013.082-.02.082l-.003.325 1.273.205.042.597c.008.12.105.218.226.227l1.6.114h.019c.12 0 .224-.089.242-.208l.081-.552h1.163l.08.552a.246.246 0 0 0 .26.208l1.601-.114a.246.246 0 0 0 .227-.227l.042-.597 1.272-.206z" fill="#fff"/><path d="M3.938 8.132v2.45l.013.001 1.503.145a.162.162 0 0 1 .146.15l.046.663 1.311.094.09-.612a.162.162 0 0 1 .16-.138h1.586a.162.162 0 0 1 .16.138l.09.612 1.311-.094.046-.663a.162.162 0 0 1 .146-.15l1.502-.145h.014V8.132h.006c.2-.254.383-.522.56-.808a6.285 6.285 0 0 0-.83-1.087 8.105 8.105 0 0 0-.823.48c-.13-.13-.278-.237-.422-.348-.143-.115-.303-.198-.455-.296a9.38 9.38 0 0 0 .077-1.015 5.275 5.275 0 0 0-1.234-.422 8.781 8.781 0 0 0-.457.892 3.13 3.13 0 0 0-.48-.039H8h-.003c-.16.002-.32.012-.48.039a8.71 8.71 0 0 0-.458-.892 5.276 5.276 0 0 0-1.233.422c.009.346.031.678.076 1.015-.152.098-.312.181-.454.296-.145.11-.292.217-.423.347a8.093 8.093 0 0 0-.823-.479c-.307.331-.595.688-.83 1.087.177.286.361.554.56.808z" fill="#478cbf"/><path d="M10.714 11.037l-.047.667a.162.162 0 0 1-.15.15l-1.6.114a.162.162 0 0 1-.172-.137l-.092-.623H7.347l-.092.623a.162.162 0 0 1-.171.137l-1.6-.114a.162.162 0 0 1-.15-.15l-.047-.667-1.351-.13.002.336c0 1.427 1.81 2.113 4.06 2.12h.005c2.25-.007 4.059-.693 4.059-2.12l.002-.336z" fill="#478cbf"/><path d="M6.776 9.127a.905.905 0 1 1-1.811 0 .905.905 0 0 1 1.81 0" fill="#fff"/><path d="M6.558 9.18a.6.6 0 1 1-1.202 0 .6.6 0 0 1 1.202 0" fill="#414042"/><path d="M8 10.115c-.16 0-.291-.119-.291-.265v-.834c0-.146.13-.265.291-.265.161 0 .292.119.292.265v.834c0 .146-.13.265-.292.265m1.225-.988a.906.906 0 1 0 1.81 0 .906.906 0 0 0-1.81 0" fill="#fff"/><path d="M9.443 9.18a.6.6 0 1 0 1.201 0 .6.6 0 0 0-1.201 0" fill="#414042"/></g></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/project_small.svg b/misc/dist/document_icons/project_small.svg new file mode 100644 index 0000000000..76f501b80d --- /dev/null +++ b/misc/dist/document_icons/project_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><g stroke-width=".32"><path d="M22.268 20.443s-.02-.128-.033-.127l-2.318.224a.377.377 0 0 0-.34.35l-.064.912-1.793.128-.122-.827a.38.38 0 0 0-.374-.323h-2.447a.38.38 0 0 0-.374.323l-.122.827-1.793-.128-.064-.913a.377.377 0 0 0-.34-.35l-2.32-.223c-.011-.001-.02.127-.032.127l-.003.501 1.964.317.064.921a.38.38 0 0 0 .35.35l2.47.177h.028a.38.38 0 0 0 .373-.322l.125-.851h1.795l.125.851a.38.38 0 0 0 .4.322l2.471-.176a.38.38 0 0 0 .35-.351l.064-.92 1.964-.32z" fill="#fff"/><path d="M9.732 16.66v3.783h.02l2.32.224a.25.25 0 0 1 .224.231l.072 1.024 2.023.144.14-.945a.25.25 0 0 1 .246-.213h2.447a.25.25 0 0 1 .247.213l.14.945 2.022-.144.072-1.024a.25.25 0 0 1 .225-.23l2.318-.225h.02v-.302h.001V16.66h.009c.307-.392.591-.805.864-1.246a9.7 9.7 0 0 0-1.28-1.677c-.44.22-.867.472-1.27.738-.202-.2-.43-.364-.653-.536-.22-.176-.466-.305-.701-.456.07-.52.104-1.032.118-1.566a8.14 8.14 0 0 0-1.903-.652c-.26.438-.499.913-.707 1.376a4.832 4.832 0 0 0-.74-.059h-.01a4.837 4.837 0 0 0-.742.06 13.44 13.44 0 0 0-.706-1.377 8.142 8.142 0 0 0-1.903.652c.014.534.048 1.046.118 1.566-.235.15-.482.28-.701.456-.223.172-.451.336-.653.536-.403-.266-.83-.517-1.27-.738a9.704 9.704 0 0 0-1.28 1.677c.273.44.557.854.864 1.246z" fill="#478cbf"/><path d="M20.188 21.144l-.072 1.029a.25.25 0 0 1-.231.232l-2.47.176a.25.25 0 0 1-.265-.213l-.142-.96h-2.015l-.142.96a.25.25 0 0 1-.265.213l-2.47-.176a.25.25 0 0 1-.231-.232l-.072-1.03-2.085-.2c0 .224.004.47.004.518 0 2.203 2.793 3.261 6.264 3.273h.009c3.47-.012 6.263-1.07 6.263-3.273l.004-.518z" fill="#478cbf"/><path d="M14.11 18.195a1.397 1.397 0 1 1-2.794.001 1.397 1.397 0 0 1 2.795 0" fill="#fff"/><path d="M13.774 18.278a.927.927 0 1 1-1.854 0 .927.927 0 0 1 1.854 0" fill="#414042"/><path d="M16 19.72c-.248 0-.45-.183-.45-.409v-1.286c0-.226.202-.409.45-.409.249 0 .45.183.45.409v1.286c0 .226-.201.41-.45.41m1.89-1.526a1.397 1.397 0 1 0 2.795 0 1.397 1.397 0 0 0-2.795 0" fill="#fff"/><path d="M18.227 18.278a.927.927 0 1 0 1.854 0 .927.927 0 0 0-1.854 0" fill="#414042"/></g></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/resource.svg b/misc/dist/document_icons/resource.svg new file mode 100644 index 0000000000..2555e8f5c0 --- /dev/null +++ b/misc/dist/document_icons/resource.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path d="M812.681 293.783c-23.575-32.543-141.93-39.865-197.505-34.983 2.17-68.048 31.457-117.656-37.966-177.026M161.89 49.151H464c77.128-2.02 126.554 37.835 178.444 84.881l123.665 109.83c63.819 56.94 89.13 110.625 96 188.174v542.886H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-width="19.603" stroke-linecap="round" stroke-linejoin="round"/><text style="line-height:1.25;-inkscape-font-specification:'Montserrat Ultra-Bold'" x="183.282" y="878.644" font-weight="800" font-size="16" letter-spacing="0" word-spacing="0" font-family="Montserrat" fill="#333f67"><tspan x="183.282" y="878.644" font-size="112">RESOURCE</tspan></text><path style="text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;isolation:auto;mix-blend-mode:normal" d="M510.825 290.281a31.683 31.683 0 0 0-12.994 3.28L307.75 388.6a31.683 31.683 0 0 0-17.51 28.339v190.08a31.683 31.683 0 0 0 17.51 28.338l190.08 95.04a31.683 31.683 0 0 0 28.338 0l190.08-95.04a31.683 31.683 0 0 0 17.51-28.338V416.94a31.683 31.683 0 0 0-17.51-28.34l-190.08-95.04a31.683 31.683 0 0 0-15.345-3.279zM512 357.354l119.234 59.587-43.747 21.904-119.234-59.647L512 357.356zm-158.4 110.88l126.72 63.36v119.234l-126.72-63.36zm316.8 0v119.234l-126.72 63.36V531.594z" color="#000" white-space="normal" fill-rule="evenodd" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/resource_extra_small.svg b/misc/dist/document_icons/resource_extra_small.svg new file mode 100644 index 0000000000..4ba41b0073 --- /dev/null +++ b/misc/dist/document_icons/resource_extra_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path style="text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;isolation:auto;mix-blend-mode:normal" d="M7.976 4.51a.642.642 0 0 0-.263.067L3.864 6.5a.642.642 0 0 0-.354.574v3.849a.642.642 0 0 0 .354.574l3.85 1.924a.642.642 0 0 0 .573 0l3.85-1.924a.642.642 0 0 0 .354-.574v-3.85a.642.642 0 0 0-.355-.573L8.287 4.576a.642.642 0 0 0-.31-.066zM8 5.868l2.415 1.207-.886.444L7.114 6.31 8 5.868zM4.793 8.114l2.566 1.283v2.414l-2.566-1.283zm6.415 0v2.414l-2.566 1.283V9.397z" color="#000" white-space="normal" fill="#478cbf" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/resource_small.svg b/misc/dist/document_icons/resource_small.svg new file mode 100644 index 0000000000..502a4c6c36 --- /dev/null +++ b/misc/dist/document_icons/resource_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path style="text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;isolation:auto;mix-blend-mode:normal" d="M15.964 11.071a.99.99 0 0 0-.406.103l-5.94 2.97a.99.99 0 0 0-.547.885v5.94a.99.99 0 0 0 .547.886l5.94 2.97a.99.99 0 0 0 .885 0l5.94-2.97a.99.99 0 0 0 .547-.886v-5.94a.99.99 0 0 0-.547-.885l-5.94-2.97a.99.99 0 0 0-.48-.103zM16 13.167l3.726 1.862-1.367.685-3.727-1.864 1.368-.683zm-4.95 3.465l3.96 1.98v3.726l-3.96-1.98zm9.9 0v3.726l-3.96 1.98v-3.726z" color="#000" white-space="normal" fill="#478cbf" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/scene.svg b/misc/dist/document_icons/scene.svg new file mode 100644 index 0000000000..a4e1ca809e --- /dev/null +++ b/misc/dist/document_icons/scene.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024"><path d="M812.681 293.783c-23.575-32.542-141.93-39.864-197.505-34.983 2.17-68.048 31.457-117.655-37.966-177.025M161.89 49.15H464c77.128-2.02 126.554 37.836 178.444 84.882l123.665 109.83c63.819 56.94 89.13 110.624 96 188.174v542.885H161.89z" fill="#eff1f5" stroke="#9f9fa1" stroke-width="19.603" stroke-linecap="round" stroke-linejoin="round"/><text style="line-height:1.25;-inkscape-font-specification:'Montserrat Ultra-Bold'" x="315.088" y="878.644" font-weight="800" font-size="16" font-family="Montserrat" letter-spacing="0" word-spacing="0" fill="#333f67"><tspan x="315.088" y="878.644" font-size="112">SCENE</tspan></text><path d="M714.504 315.805l-67.735 9.904 24.7 57.361 51.76-7.546zm-127.458 18.57l-59.719 8.725 24.702 57.419 59.719-8.725zm-119.498 17.45l-59.719 8.725 24.701 57.419 59.72-8.725zm-119.438 17.45l-51.76 7.546 8.725 59.719 67.736-9.904zm-43.036 97.449v181.104c0 33.34 27.027 60.368 60.368 60.368H727.65V466.724z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/scene_extra_small.svg b/misc/dist/document_icons/scene_extra_small.svg new file mode 100644 index 0000000000..155aa843b2 --- /dev/null +++ b/misc/dist/document_icons/scene_extra_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M12.698 4.59c-.368-.508-2.218-.623-3.086-.546.034-1.064.492-1.839-.593-2.766m-6.49-.51H7.25c1.205-.032 1.977.591 2.788 1.326L11.97 3.81c.998.89 1.393 1.729 1.5 2.94v8.483H2.53z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M12.101 5.027l-1.372.2.5 1.162 1.049-.153zm-2.581.376l-1.21.177.5 1.162 1.21-.176zm-2.42.353l-1.21.177.501 1.163 1.21-.177zm-2.419.354l-1.048.152.177 1.21 1.372-.2zM3.81 8.083v3.667c0 .676.547 1.223 1.222 1.223h7.335v-4.89z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/document_icons/scene_small.svg b/misc/dist/document_icons/scene_small.svg new file mode 100644 index 0000000000..d36d42f458 --- /dev/null +++ b/misc/dist/document_icons/scene_small.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><path d="M25.396 9.18c-.736-1.016-4.435-1.245-6.172-1.093.068-2.126.983-3.676-1.186-5.532M5.059 1.536H14.5c2.41-.063 3.955 1.182 5.576 2.652l3.865 3.433c1.994 1.779 2.785 3.457 3 5.88v16.965H5.059z" fill="#eff1f5" stroke="#9f9fa1" stroke-linecap="round" stroke-linejoin="round"/><path d="M22.329 11.869l-2.117.31.772 1.792 1.617-.236zm-3.983.58l-1.867.273.772 1.794 1.867-.273zm-3.735.545l-1.866.273.772 1.794 1.866-.272zm-3.732.546l-1.618.235.273 1.867 2.117-.31zm-1.345 3.045v5.66c0 1.041.845 1.886 1.887 1.886H22.74v-7.546z" fill="#478cbf"/></svg>
\ No newline at end of file diff --git a/misc/dist/linux/godot.6 b/misc/dist/linux/godot.6 index 50cb420e4e..43ca4e9d10 100644 --- a/misc/dist/linux/godot.6 +++ b/misc/dist/linux/godot.6 @@ -149,7 +149,7 @@ Build the scripting solutions (e.g. for C# projects). Generate JSON dump of the Godot API for GDNative bindings. .TP \fB\-\-test\fR <test> -Run a unit test ('string', 'math', 'physics', 'physics_2d', 'render', 'oa_hash_map', 'gui', 'io', 'shaderlang', 'gd_tokenizer', 'gd_parser', 'gd_compiler', 'gd_bytecode', 'image', 'ordered_hash_map'). +Run a unit test ('string', 'math', 'physics', 'physics_2d', 'render', 'oa_hash_map', 'gui', 'shaderlang', 'gd_tokenizer', 'gd_parser', 'gd_compiler', 'gd_bytecode', 'image', 'ordered_hash_map'). .SH FILES XDG_DATA_CONFIG/godot/ or ~/.config/godot/ .RS diff --git a/misc/dist/osx_tools.app/Contents/Info.plist b/misc/dist/osx_tools.app/Contents/Info.plist index faa929b818..a001fdf9d2 100755 --- a/misc/dist/osx_tools.app/Contents/Info.plist +++ b/misc/dist/osx_tools.app/Contents/Info.plist @@ -72,22 +72,67 @@ <key>UTTypeDescription</key> <string>Godot Scene</string> <key>UTTypeIconFile</key> - <string>Document.icns</string> + <string>Scene.icns</string> <key>UTTypeConformsTo</key> <array> <string>public.data</string> </array> <key>UTTypeTagSpecification</key> <dict> - <key>com.apple.ostype</key> - <string>TSCN</string> <key>public.filename-extension</key> <array> <string>scn</string> <string>tscn</string> </array> <key>public.mime-type</key> - <string>scene/x-scn</string> + <string>application/x-godot-scene</string> + </dict> + </dict> + <dict> + <key>UTTypeIdentifier</key> + <string>public.gd</string> + <key>UTTypeReferenceURL</key> + <string></string> + <key>UTTypeDescription</key> + <string>Godot Script</string> + <key>UTTypeIconFile</key> + <string>GDScript.icns</string> + <key>UTTypeConformsTo</key> + <array> + <string>public.data</string> + </array> + <key>UTTypeTagSpecification</key> + <dict> + <key>public.filename-extension</key> + <array> + <string>gd</string> + </array> + <key>public.mime-type</key> + <string>text/x-gdscript</string> + </dict> + </dict> + <dict> + <key>UTTypeIdentifier</key> + <string>public.res</string> + <key>UTTypeReferenceURL</key> + <string></string> + <key>UTTypeDescription</key> + <string>Godot Resource</string> + <key>UTTypeIconFile</key> + <string>Resource.icns</string> + <key>UTTypeConformsTo</key> + <array> + <string>public.data</string> + </array> + <key>UTTypeTagSpecification</key> + <dict> + <key>public.filename-extension</key> + <array> + <string>res</string> + <string>tres</string> + </array> + <key>public.mime-type</key> + <string>application/x-godot-resource</string> </dict> </dict> <dict> @@ -98,21 +143,19 @@ <key>UTTypeDescription</key> <string>Godot Project</string> <key>UTTypeIconFile</key> - <string>Document.icns</string> + <string>Project.icns</string> <key>UTTypeConformsTo</key> <array> <string>public.data</string> </array> <key>UTTypeTagSpecification</key> <dict> - <key>com.apple.ostype</key> - <string>GODP</string> <key>public.filename-extension</key> <array> <string>godot</string> </array> <key>public.mime-type</key> - <string>project/x-godot</string> + <string>text/x-godot-project</string> </dict> </dict> </array> diff --git a/misc/dist/osx_tools.app/Contents/Resources/Document.icns b/misc/dist/osx_tools.app/Contents/Resources/Document.icns Binary files differdeleted file mode 100644 index 06d7c65298..0000000000 --- a/misc/dist/osx_tools.app/Contents/Resources/Document.icns +++ /dev/null diff --git a/misc/dist/osx_tools.app/Contents/Resources/GDScript.icns b/misc/dist/osx_tools.app/Contents/Resources/GDScript.icns Binary files differnew file mode 100644 index 0000000000..b08e8df339 --- /dev/null +++ b/misc/dist/osx_tools.app/Contents/Resources/GDScript.icns diff --git a/misc/dist/osx_tools.app/Contents/Resources/Project.icns b/misc/dist/osx_tools.app/Contents/Resources/Project.icns Binary files differnew file mode 100644 index 0000000000..10e31528e4 --- /dev/null +++ b/misc/dist/osx_tools.app/Contents/Resources/Project.icns diff --git a/misc/dist/osx_tools.app/Contents/Resources/Resource.icns b/misc/dist/osx_tools.app/Contents/Resources/Resource.icns Binary files differnew file mode 100644 index 0000000000..9648cb616e --- /dev/null +++ b/misc/dist/osx_tools.app/Contents/Resources/Resource.icns diff --git a/misc/dist/osx_tools.app/Contents/Resources/Scene.icns b/misc/dist/osx_tools.app/Contents/Resources/Scene.icns Binary files differnew file mode 100644 index 0000000000..c8c3dee07e --- /dev/null +++ b/misc/dist/osx_tools.app/Contents/Resources/Scene.icns diff --git a/modules/bullet/shape_bullet.cpp b/modules/bullet/shape_bullet.cpp index 8bb621a863..2027d8e1eb 100644 --- a/modules/bullet/shape_bullet.cpp +++ b/modules/bullet/shape_bullet.cpp @@ -461,7 +461,47 @@ void HeightMapShapeBullet::set_data(const Variant &p_data) { int l_width = d["width"]; int l_depth = d["depth"]; - PoolVector<real_t> l_heights = d["heights"]; + + // TODO This code will need adjustments if real_t is set to `double`, + // because that precision is unnecessary for a heightmap and Bullet doesn't support it... + + PoolVector<real_t> l_heights; + Variant l_heights_v = d["heights"]; + + if (l_heights_v.get_type() == Variant::POOL_REAL_ARRAY) { + // Ready-to-use heights can be passed + + l_heights = l_heights_v; + + } else if (l_heights_v.get_type() == Variant::OBJECT) { + // If an image is passed, we have to convert it to a format Bullet supports. + // this would be expensive to do with a script, so it's nice to have it here. + + Ref<Image> l_image = l_heights_v; + ERR_FAIL_COND(l_image.is_null()); + + // Float is the only common format between Godot and Bullet that can be used for decent collision. + // (Int16 would be nice too but we still don't have it) + // We could convert here automatically but it's better to not be intrusive and let the caller do it if necessary. + ERR_FAIL_COND(l_image->get_format() != Image::FORMAT_RF); + + PoolByteArray im_data = l_image->get_data(); + + l_heights.resize(l_image->get_width() * l_image->get_width()); + + PoolRealArray::Write w = l_heights.write(); + PoolByteArray::Read r = im_data.read(); + float *rp = (float *)r.ptr(); + // At this point, `rp` could be used directly for Bullet, but I don't know how safe it would be. + + for (int i = 0; i < l_heights.size(); ++i) { + w[i] = rp[i]; + } + + } else { + ERR_EXPLAIN("Expected PoolRealArray or float Image."); + ERR_FAIL(); + } ERR_FAIL_COND(l_width <= 0); ERR_FAIL_COND(l_depth <= 0); @@ -497,19 +537,8 @@ PhysicsServer::ShapeType HeightMapShapeBullet::get_type() const { void HeightMapShapeBullet::setup(PoolVector<real_t> &p_heights, int p_width, int p_depth, real_t p_min_height, real_t p_max_height) { // TODO cell size must be tweaked using localScaling, which is a shared property for all Bullet shapes - { // Copy - - // TODO If Godot supported 16-bit integer image format, we could share the same memory block for heightfields - // without having to copy anything, optimizing memory and loading performance (Bullet only reads and doesn't take ownership of the data). - - const int heights_size = p_heights.size(); - heights.resize(heights_size); - PoolVector<real_t>::Read p_heights_r = p_heights.read(); - PoolVector<real_t>::Write heights_w = heights.write(); - for (int i = heights_size - 1; 0 <= i; --i) { - heights_w[i] = p_heights_r[i]; - } - } + // If this array is resized outside of here, it should be preserved due to CoW + heights = p_heights; width = p_width; depth = p_depth; diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp index 4e35014459..f4b061f494 100644 --- a/modules/csg/csg_shape.cpp +++ b/modules/csg/csg_shape.cpp @@ -197,17 +197,6 @@ void CSGShape::mikktGetTexCoord(const SMikkTSpaceContext *pContext, float fvTexc fvTexcOut[1] = t.y; } -void CSGShape::mikktSetTSpaceBasic(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert) { - ShapeUpdateSurface &surface = *((ShapeUpdateSurface *)pContext->m_pUserData); - - int i = (iFace * 3 + iVert) * 4; - - surface.tansw[i++] = fvTangent[0]; - surface.tansw[i++] = fvTangent[1]; - surface.tansw[i++] = fvTangent[2]; - surface.tansw[i++] = fSign; -} - void CSGShape::mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fvBiTangent[], const float fMagS, const float fMagT, const tbool bIsOrientationPreserving, const int iFace, const int iVert) { @@ -216,7 +205,7 @@ void CSGShape::mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const f int i = iFace * 3 + iVert; Vector3 normal = surface.normalsw[i]; Vector3 tangent = Vector3(fvTangent[0], fvTangent[1], fvTangent[2]); - Vector3 bitangent = Vector3(fvBiTangent[0], fvBiTangent[1], fvBiTangent[2]); + Vector3 bitangent = Vector3(-fvBiTangent[0], -fvBiTangent[1], -fvBiTangent[2]); // for some reason these are reversed, something with the coordinate system in Godot float d = bitangent.dot(normal.cross(tangent)); i *= 4; diff --git a/modules/csg/csg_shape.h b/modules/csg/csg_shape.h index 0a4bb5f665..7326f3d36a 100644 --- a/modules/csg/csg_shape.h +++ b/modules/csg/csg_shape.h @@ -97,7 +97,6 @@ private: static void mikktGetPosition(const SMikkTSpaceContext *pContext, float fvPosOut[], const int iFace, const int iVert); static void mikktGetNormal(const SMikkTSpaceContext *pContext, float fvNormOut[], const int iFace, const int iVert); static void mikktGetTexCoord(const SMikkTSpaceContext *pContext, float fvTexcOut[], const int iFace, const int iVert); - static void mikktSetTSpaceBasic(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fSign, const int iFace, const int iVert); static void mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, const float fvTangent[], const float fvBiTangent[], const float fMagS, const float fMagT, const tbool bIsOrientationPreserving, const int iFace, const int iVert); diff --git a/modules/gdscript/gdscript_functions.cpp b/modules/gdscript/gdscript_functions.cpp index 2f31d59c46..9ff33594ce 100644 --- a/modules/gdscript/gdscript_functions.cpp +++ b/modules/gdscript/gdscript_functions.cpp @@ -758,22 +758,14 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_ r_ret = Variant(); return; } + r_ret = *p_args[0]; VariantParser::StreamString ss; ss.s = *p_args[0]; String errs; int line; - Error err = VariantParser::parse(&ss, r_ret, errs, line); - - if (err != OK) { - r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; - r_error.argument = 0; - r_error.expected = Variant::STRING; - r_ret = "Parse error at line " + itos(line) + ": " + errs; - return; - } - + (void)VariantParser::parse(&ss, r_ret, errs, line); } break; case VAR_TO_BYTES: { VALIDATE_ARG_COUNT(1); diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 0926c1a1ab..6ea0dbcb19 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -5746,18 +5746,23 @@ bool GDScriptParser::_is_type_compatible(const DataType &p_container, const Data if (p_container.kind == DataType::BUILTIN && p_expression.kind == DataType::BUILTIN) { bool valid = p_container.builtin_type == p_expression.builtin_type; if (p_allow_implicit_conversion) { - valid = valid || (p_container.builtin_type == Variant::INT && p_expression.builtin_type == Variant::REAL); - valid = valid || (p_container.builtin_type == Variant::REAL && p_expression.builtin_type == Variant::INT); - valid = valid || (p_container.builtin_type == Variant::STRING && p_expression.builtin_type == Variant::NODE_PATH); - valid = valid || (p_container.builtin_type == Variant::NODE_PATH && p_expression.builtin_type == Variant::STRING); - valid = valid || (p_container.builtin_type == Variant::BOOL && p_expression.builtin_type == Variant::REAL); - valid = valid || (p_container.builtin_type == Variant::BOOL && p_expression.builtin_type == Variant::INT); - valid = valid || (p_container.builtin_type == Variant::INT && p_expression.builtin_type == Variant::BOOL); - valid = valid || (p_container.builtin_type == Variant::REAL && p_expression.builtin_type == Variant::BOOL); + valid = valid || Variant::can_convert_strict(p_expression.builtin_type, p_container.builtin_type); } return valid; } + if (p_container.kind == DataType::BUILTIN && p_container.builtin_type == Variant::OBJECT) { + // Object built-in is a special case, it's compatible with any object and with null + if (p_expression.kind == DataType::BUILTIN && p_expression.builtin_type == Variant::NIL) { + return true; + } + if (p_expression.kind == DataType::BUILTIN) { + return false; + } + // If it's not a built-in, must be an object + return true; + } + if (p_container.kind == DataType::BUILTIN || (p_expression.kind == DataType::BUILTIN && p_expression.builtin_type != Variant::NIL)) { // Can't mix built-ins with objects return false; diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index 3c818898e6..943d95bfc9 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -2474,6 +2474,18 @@ void CSharpScript::set_source_code(const String &p_code) { #endif } +void CSharpScript::get_script_method_list(List<MethodInfo> *p_list) const { + + if (!script_class) + return; + + // TODO: Filter out things unsuitable for explicit calls, like constructors. + const Vector<GDMonoMethod *> &methods = script_class->get_all_methods(); + for (int i = 0; i < methods.size(); ++i) { + p_list->push_back(methods[i]->get_method_info()); + } +} + bool CSharpScript::has_method(const StringName &p_method) const { if (!script_class) @@ -2482,6 +2494,25 @@ bool CSharpScript::has_method(const StringName &p_method) const { return script_class->has_fetched_method_unknown_params(p_method); } +MethodInfo CSharpScript::get_method_info(const StringName &p_method) const { + + if (!script_class) + return MethodInfo(); + + GDMonoClass *top = script_class; + + while (top && top != native) { + GDMonoMethod *params = top->get_fetched_method_unknown_params(p_method); + if (params) { + return params->get_method_info(); + } + + top = top->get_parent_class(); + } + + return MethodInfo(); +} + Error CSharpScript::reload(bool p_keep_state) { bool has_instances; diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h index 501e0d9d6d..08466bae58 100644 --- a/modules/mono/csharp_script.h +++ b/modules/mono/csharp_script.h @@ -174,9 +174,9 @@ public: virtual Ref<Script> get_base_script() const; virtual ScriptLanguage *get_language() const; - /* TODO */ virtual void get_script_method_list(List<MethodInfo> *p_list) const {} + virtual void get_script_method_list(List<MethodInfo> *p_list) const; bool has_method(const StringName &p_method) const; - /* TODO */ MethodInfo get_method_info(const StringName &p_method) const { return MethodInfo(); } + MethodInfo get_method_info(const StringName &p_method) const; virtual int get_member_line(const StringName &p_member) const; diff --git a/modules/mono/mono_gd/gd_mono_class.cpp b/modules/mono/mono_gd/gd_mono_class.cpp index 4e515cde28..c55f9160bd 100644 --- a/modules/mono/mono_gd/gd_mono_class.cpp +++ b/modules/mono/mono_gd/gd_mono_class.cpp @@ -151,6 +151,7 @@ void GDMonoClass::fetch_methods_with_godot_api_checks(GDMonoClass *p_native_base while ((raw_method = mono_class_get_methods(get_mono_ptr(), &iter)) != NULL) { StringName name = mono_method_get_name(raw_method); + // get_method implicitly fetches methods and adds them to this->methods GDMonoMethod *method = get_method(raw_method, name); ERR_CONTINUE(!method); @@ -449,6 +450,21 @@ const Vector<GDMonoClass *> &GDMonoClass::get_all_delegates() { return delegates_list; } +const Vector<GDMonoMethod *> &GDMonoClass::get_all_methods() { + + if (!method_list_fetched) { + void *iter = NULL; + MonoMethod *raw_method = NULL; + while ((raw_method = mono_class_get_methods(get_mono_ptr(), &iter)) != NULL) { + method_list.push_back(memnew(GDMonoMethod(mono_method_get_name(raw_method), raw_method))); + } + + method_list_fetched = true; + } + + return method_list; +} + GDMonoClass::GDMonoClass(const StringName &p_namespace, const StringName &p_name, MonoClass *p_class, GDMonoAssembly *p_assembly) { namespace_name = p_namespace; @@ -460,6 +476,7 @@ GDMonoClass::GDMonoClass(const StringName &p_namespace, const StringName &p_name attributes = NULL; methods_fetched = false; + method_list_fetched = false; fields_fetched = false; properties_fetched = false; delegates_fetched = false; @@ -512,4 +529,8 @@ GDMonoClass::~GDMonoClass() { methods.clear(); } + + for (int i = 0; i < method_list.size(); ++i) { + memdelete(method_list[i]); + } } diff --git a/modules/mono/mono_gd/gd_mono_class.h b/modules/mono/mono_gd/gd_mono_class.h index 477305d503..689001f494 100644 --- a/modules/mono/mono_gd/gd_mono_class.h +++ b/modules/mono/mono_gd/gd_mono_class.h @@ -79,9 +79,14 @@ class GDMonoClass { bool attrs_fetched; MonoCustomAttrInfo *attributes; + // This contains both the original method names and remapped method names from the native Godot identifiers to the C# functions. + // Most method-related functions refer to this and it's possible this is unintuitive for outside users; this may be a prime location for refactoring or renaming. bool methods_fetched; HashMap<MethodKey, GDMonoMethod *, MethodKey::Hasher> methods; + bool method_list_fetched; + Vector<GDMonoMethod *> method_list; + bool fields_fetched; Map<StringName, GDMonoField *> fields; Vector<GDMonoField *> fields_list; @@ -143,6 +148,8 @@ public: const Vector<GDMonoClass *> &get_all_delegates(); + const Vector<GDMonoMethod *> &get_all_methods(); + ~GDMonoClass(); }; diff --git a/modules/mono/mono_gd/gd_mono_method.cpp b/modules/mono/mono_gd/gd_mono_method.cpp index 630bda8b4e..6ef6e97f5a 100644 --- a/modules/mono/mono_gd/gd_mono_method.cpp +++ b/modules/mono/mono_gd/gd_mono_method.cpp @@ -68,6 +68,10 @@ void GDMonoMethod::_update_signature(MonoMethodSignature *p_method_sig) { param_types.push_back(param_type); } + + // clear the cache + method_info_fetched = false; + method_info = MethodInfo(); } bool GDMonoMethod::is_static() { @@ -246,11 +250,34 @@ void GDMonoMethod::get_parameter_types(Vector<ManagedType> &types) const { } } +const MethodInfo &GDMonoMethod::get_method_info() { + + if (!method_info_fetched) { + method_info.name = name; + method_info.return_val = PropertyInfo(GDMonoMarshal::managed_to_variant_type(return_type), ""); + + Vector<StringName> names; + get_parameter_names(names); + + for (int i = 0; i < params_count; ++i) { + method_info.arguments.push_back(PropertyInfo(GDMonoMarshal::managed_to_variant_type(param_types[i]), names[i])); + } + + // TODO: default arguments + + method_info_fetched = true; + } + + return method_info; +} + GDMonoMethod::GDMonoMethod(StringName p_name, MonoMethod *p_method) { name = p_name; mono_method = p_method; + method_info_fetched = false; + attrs_fetched = false; attributes = NULL; diff --git a/modules/mono/mono_gd/gd_mono_method.h b/modules/mono/mono_gd/gd_mono_method.h index 444ec2a67d..6c3ae5fce0 100644 --- a/modules/mono/mono_gd/gd_mono_method.h +++ b/modules/mono/mono_gd/gd_mono_method.h @@ -43,6 +43,9 @@ class GDMonoMethod : public GDMonoClassMember { ManagedType return_type; Vector<ManagedType> param_types; + bool method_info_fetched; + MethodInfo method_info; + bool attrs_fetched; MonoCustomAttrInfo *attributes; @@ -83,6 +86,8 @@ public: void get_parameter_names(Vector<StringName> &names) const; void get_parameter_types(Vector<ManagedType> &types) const; + const MethodInfo &get_method_info(); + GDMonoMethod(StringName p_name, MonoMethod *p_method); ~GDMonoMethod(); }; diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp index afaa6a9b95..080d0643a2 100644 --- a/modules/visual_script/visual_script_editor.cpp +++ b/modules/visual_script/visual_script_editor.cpp @@ -3491,6 +3491,7 @@ VisualScriptEditor::VisualScriptEditor() { edit_menu = memnew(MenuButton); edit_menu->set_text(TTR("Edit")); + edit_menu->set_switch_on_hover(true); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/delete_selected"), EDIT_DELETE_NODES); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/toggle_breakpoint"), EDIT_TOGGLE_BREAKPOINT); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/find_node_type"), EDIT_FIND_NODE_TYPE); diff --git a/modules/webp/SCsub b/modules/webp/SCsub index 8a4307fbe1..d215f19cef 100644 --- a/modules/webp/SCsub +++ b/modules/webp/SCsub @@ -42,7 +42,6 @@ if env['builtin_libwebp']: "dsp/dec_neon.c", "dsp/dec_sse2.c", "dsp/dec_sse41.c", - "dsp/enc_avx2.c", "dsp/enc.c", "dsp/enc_mips32.c", "dsp/enc_mips_dsp_r2.c", @@ -90,7 +89,6 @@ if env['builtin_libwebp']: "enc/backward_references_enc.c", "enc/config_enc.c", "enc/cost_enc.c", - "enc/delta_palettization_enc.c", "enc/filter_enc.c", "enc/frame_enc.c", "enc/histogram_enc.c", diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp index 7fb3afe9a9..8a9b254cdc 100644 --- a/platform/iphone/export/export.cpp +++ b/platform/iphone/export/export.cpp @@ -99,6 +99,70 @@ class EditorExportPlatformIOS : public EditorExportPlatform { Error _export_additional_assets(const String &p_out_dir, const Vector<String> &p_assets, bool p_is_framework, Vector<IOSExportAsset> &r_exported_assets); Error _export_additional_assets(const String &p_out_dir, const Vector<SharedObject> &p_libraries, Vector<IOSExportAsset> &r_exported_assets); + bool is_package_name_valid(const String &p_package, String *r_error = NULL) const { + + String pname = p_package; + + if (pname.length() == 0) { + if (r_error) { + *r_error = "Identifier is missing."; + } + return false; + } + + int segments = 0; + bool first = true; + for (int i = 0; i < pname.length(); i++) { + CharType c = pname[i]; + if (first && c == '.') { + if (r_error) { + *r_error = "Identifier segments must be of non-zero length."; + } + return false; + } + if (c == '.') { + segments++; + first = true; + continue; + } + if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_')) { + if (r_error) { + *r_error = "The character '" + String::chr(c) + "' is not allowed in Identifier."; + } + return false; + } + if (first && (c >= '0' && c <= '9')) { + if (r_error) { + *r_error = "A digit cannot be the first character in a Identifier segment."; + } + return false; + } + if (first && c == '_') { + if (r_error) { + *r_error = "The character '" + String::chr(c) + "' cannot be the first character in a Identifier segment."; + } + return false; + } + first = false; + } + + if (segments == 0) { + if (r_error) { + *r_error = "The Identifier must have at least one '.' separator."; + } + return false; + } + + if (first) { + if (r_error) { + *r_error = "Identifier segments must be of non-zero length."; + } + return false; + } + + return true; + } + protected: virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features); virtual void get_export_options(List<ExportOption> *r_options); @@ -987,6 +1051,12 @@ bool EditorExportPlatformIOS::can_export(const Ref<EditorExportPreset> &p_preset err += "App Store Team ID not specified - cannot configure the project.\n"; } + String identifier = p_preset->get("application/identifier"); + String pn_err; + if (!is_package_name_valid(identifier, &pn_err)) { + err += "Invalid Identifier - " + pn_err + "\n"; + } + for (unsigned int i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { IconInfo info = icon_infos[i]; String icon_path = p_preset->get(info.preset_key); diff --git a/platform/iphone/gl_view.mm b/platform/iphone/gl_view.mm index 2925b46007..5b4d1f8226 100644 --- a/platform/iphone/gl_view.mm +++ b/platform/iphone/gl_view.mm @@ -84,7 +84,8 @@ Rect2 _get_ios_window_safe_area(float p_window_width, float p_window_height) { } ERR_FAIL_COND_V(insets.left < 0 || insets.top < 0 || insets.right < 0 || insets.bottom < 0, Rect2(0, 0, p_window_width, p_window_height)); - return Rect2(insets.left, insets.top, p_window_width - insets.right - insets.left, p_window_height - insets.bottom - insets.top); + UIEdgeInsets window_insets = UIEdgeInsetsMake(_points_to_pixels(insets.top), _points_to_pixels(insets.left), _points_to_pixels(insets.bottom), _points_to_pixels(insets.right)); + return Rect2(window_insets.left, window_insets.top, p_window_width - window_insets.right - window_insets.left, p_window_height - window_insets.bottom - window_insets.top); } bool _play_video(String p_path, float p_volume, String p_audio_track, String p_subtitle_track) { diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 04854e93b6..0c02e47b5e 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -2853,11 +2853,19 @@ void OS_X11::set_context(int p_context) { XClassHint *classHint = XAllocClassHint(); if (classHint) { + char *wm_class = (char *)"Godot"; if (p_context == CONTEXT_EDITOR) classHint->res_name = (char *)"Godot_Editor"; if (p_context == CONTEXT_PROJECTMAN) classHint->res_name = (char *)"Godot_ProjectList"; - classHint->res_class = (char *)"Godot"; + + if (p_context == CONTEXT_ENGINE) { + classHint->res_name = (char *)"Godot_Engine"; + wm_class = (char *)((String)GLOBAL_GET("application/config/name")).utf8().ptrw(); + } + + classHint->res_class = wm_class; + XSetClassHint(x11_display, x11_window, classHint); XFree(classHint); } diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index 0ea2e85dfa..d847fa2471 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -1160,7 +1160,7 @@ void CanvasItem::_bind_methods() { ClassDB::bind_method(D_METHOD("draw_string", "font", "position", "text", "modulate", "clip_w"), &CanvasItem::draw_string, DEFVAL(Color(1, 1, 1)), DEFVAL(-1)); ClassDB::bind_method(D_METHOD("draw_char", "font", "position", "char", "next", "modulate"), &CanvasItem::draw_char, DEFVAL(Color(1, 1, 1))); ClassDB::bind_method(D_METHOD("draw_mesh", "mesh", "texture", "normal_map"), &CanvasItem::draw_mesh, DEFVAL(Ref<Texture>())); - ClassDB::bind_method(D_METHOD("draw_multimesh", "mesh", "texture", "normal_map"), &CanvasItem::draw_mesh, DEFVAL(Ref<Texture>())); + ClassDB::bind_method(D_METHOD("draw_multimesh", "multimesh", "texture", "normal_map"), &CanvasItem::draw_multimesh, DEFVAL(Ref<Texture>())); ClassDB::bind_method(D_METHOD("draw_set_transform", "position", "rotation", "scale"), &CanvasItem::draw_set_transform); ClassDB::bind_method(D_METHOD("draw_set_transform_matrix", "xform"), &CanvasItem::draw_set_transform_matrix); diff --git a/scene/2d/navigation_polygon.cpp b/scene/2d/navigation_polygon.cpp index b36924e521..9154929e0b 100644 --- a/scene/2d/navigation_polygon.cpp +++ b/scene/2d/navigation_polygon.cpp @@ -349,8 +349,6 @@ void NavigationPolygonInstance::set_enabled(bool p_enabled) { if (Engine::get_singleton()->is_editor_hint() || get_tree()->is_debugging_navigation_hint()) update(); - - //update_gizmo(); } bool NavigationPolygonInstance::is_enabled() const { @@ -461,26 +459,28 @@ void NavigationPolygonInstance::_notification(int p_what) { void NavigationPolygonInstance::set_navigation_polygon(const Ref<NavigationPolygon> &p_navpoly) { - if (p_navpoly == navpoly) + if (p_navpoly == navpoly) { return; + } if (navigation && nav_id != -1) { navigation->navpoly_remove(nav_id); nav_id = -1; } + if (navpoly.is_valid()) { navpoly->disconnect(CoreStringNames::get_singleton()->changed, this, "_navpoly_changed"); } navpoly = p_navpoly; - if (navpoly.is_valid()) { navpoly->connect(CoreStringNames::get_singleton()->changed, this, "_navpoly_changed"); } + _navpoly_changed(); if (navigation && navpoly.is_valid() && enabled) { nav_id = navigation->navpoly_add(navpoly, get_relative_transform_to_parent(navigation), this); } - //update_gizmo(); + _change_notify("navpoly"); update_configuration_warning(); } diff --git a/scene/2d/path_2d.cpp b/scene/2d/path_2d.cpp index 4276918f53..5eae43b2d5 100644 --- a/scene/2d/path_2d.cpp +++ b/scene/2d/path_2d.cpp @@ -303,7 +303,7 @@ void PathFollow2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_lookahead", "lookahead"), &PathFollow2D::set_lookahead); ClassDB::bind_method(D_METHOD("get_lookahead"), &PathFollow2D::get_lookahead); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_EXP_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_offset", PROPERTY_HINT_RANGE, "0,1,0.0001", PROPERTY_USAGE_EDITOR), "set_unit_offset", "get_unit_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "h_offset"), "set_h_offset", "get_h_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_offset"), "set_v_offset", "get_v_offset"); diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 8fe65f53a9..641cb161ca 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -327,6 +327,10 @@ void TileMap::update_dirty_quadrants() { Ref<ShaderMaterial> mat = tile_set->tile_get_material(c.id); int z_index = tile_set->tile_get_z_index(c.id); + if (tile_set->tile_get_tile_mode(c.id) == TileSet::AUTO_TILE) { + z_index += tile_set->autotile_get_z_index(c.id, Vector2(c.autotile_coord_x, c.autotile_coord_y)); + } + RID canvas_item; RID debug_canvas_item; diff --git a/scene/3d/path.cpp b/scene/3d/path.cpp index 339a434a6e..1b253d41e8 100644 --- a/scene/3d/path.cpp +++ b/scene/3d/path.cpp @@ -252,7 +252,7 @@ void PathFollow::_bind_methods() { ClassDB::bind_method(D_METHOD("set_loop", "loop"), &PathFollow::set_loop); ClassDB::bind_method(D_METHOD("has_loop"), &PathFollow::has_loop); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_EXP_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_offset", PROPERTY_HINT_RANGE, "0,1,0.0001", PROPERTY_USAGE_EDITOR), "set_unit_offset", "get_unit_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "h_offset"), "set_h_offset", "get_h_offset"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_offset"), "set_v_offset", "get_v_offset"); diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index 5bde224ce3..7b4c7de029 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -463,9 +463,9 @@ void Sprite3D::_draw() { Plane tangent; if (axis == Vector3::AXIS_X) { - tangent = Plane(0, 0, -1, -1); + tangent = Plane(0, 0, -1, 1); } else { - tangent = Plane(1, 0, 0, -1); + tangent = Plane(1, 0, 0, 1); } RID mat = SpatialMaterial::get_material_rid_for_2d(get_draw_flag(FLAG_SHADED), get_draw_flag(FLAG_TRANSPARENT), get_draw_flag(FLAG_DOUBLE_SIDED), get_alpha_cut_mode() == ALPHA_CUT_DISCARD, get_alpha_cut_mode() == ALPHA_CUT_OPAQUE_PREPASS); diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index 524784df53..6adfb94695 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -401,6 +401,9 @@ void AnimationTreePlayer::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { + ERR_EXPLAIN("AnimationTreePlayer has been deprecated. Use AnimationTree instead."); + WARN_DEPRECATED + if (!processing) { //make sure that a previous process state was not saved //only process if "processing" is set @@ -409,12 +412,14 @@ void AnimationTreePlayer::_notification(int p_what) { } } break; case NOTIFICATION_READY: { + dirty_caches = true; if (master != NodePath()) { _update_sources(); } } break; case NOTIFICATION_INTERNAL_PROCESS: { + if (animation_process_mode == ANIMATION_PROCESS_PHYSICS) break; @@ -1715,6 +1720,11 @@ Error AnimationTreePlayer::node_rename(const StringName &p_node, const StringNam return OK; } +String AnimationTreePlayer::get_configuration_warning() const { + + return TTR("This node has been deprecated. Use AnimationTree instead."); +} + void AnimationTreePlayer::_bind_methods() { ClassDB::bind_method(D_METHOD("add_node", "type", "id"), &AnimationTreePlayer::add_node); diff --git a/scene/animation/animation_tree_player.h b/scene/animation/animation_tree_player.h index d2d7b1c9ec..4e4c876e87 100644 --- a/scene/animation/animation_tree_player.h +++ b/scene/animation/animation_tree_player.h @@ -343,6 +343,8 @@ public: int node_get_input_count(const StringName &p_node) const; StringName node_get_input_source(const StringName &p_node, int p_input) const; + String get_configuration_warning() const; + /* ANIMATION NODE */ void animation_node_set_animation(const StringName &p_node, const Ref<Animation> &p_animation); Ref<Animation> animation_node_get_animation(const StringName &p_node) const; diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index c5d3def4c1..19c6cde111 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -253,6 +253,24 @@ void ColorPicker::add_preset(const Color &p_color) { bt_add_preset->hide(); } +void ColorPicker::erase_preset(const Color &p_color) { + + if (presets.find(p_color)) { + presets.erase(presets.find(p_color)); + preset->update(); + } +} + +PoolColorArray ColorPicker::get_presets() const { + + PoolColorArray arr; + arr.resize(presets.size()); + for (int i = 0; i < presets.size(); i++) { + arr.set(i, presets[i]); + } + return arr; +} + void ColorPicker::set_raw_mode(bool p_enabled) { if (raw_mode_enabled == p_enabled) @@ -446,7 +464,9 @@ void ColorPicker::_preset_input(const Ref<InputEvent> &p_event) { set_pick_color(presets[index]); } else if (bev->is_pressed() && bev->get_button_index() == BUTTON_RIGHT) { int index = bev->get_position().x / (preset->get_size().x / presets.size()); - presets.erase(presets[index]); + Color clicked_preset = presets[index]; + presets.erase(clicked_preset); + emit_signal("preset_removed", clicked_preset); preset->update(); bt_add_preset->show(); } @@ -501,6 +521,7 @@ void ColorPicker::_screen_input(const Ref<InputEvent> &p_event) { void ColorPicker::_add_preset_pressed() { add_preset(color); + emit_signal("preset_added", color); } void ColorPicker::_screen_pick_pressed() { @@ -553,6 +574,8 @@ void ColorPicker::_bind_methods() { ClassDB::bind_method(D_METHOD("set_edit_alpha", "show"), &ColorPicker::set_edit_alpha); ClassDB::bind_method(D_METHOD("is_editing_alpha"), &ColorPicker::is_editing_alpha); ClassDB::bind_method(D_METHOD("add_preset", "color"), &ColorPicker::add_preset); + ClassDB::bind_method(D_METHOD("erase_preset", "color"), &ColorPicker::erase_preset); + ClassDB::bind_method(D_METHOD("get_presets"), &ColorPicker::get_presets); ClassDB::bind_method(D_METHOD("_value_changed"), &ColorPicker::_value_changed); ClassDB::bind_method(D_METHOD("_html_entered"), &ColorPicker::_html_entered); ClassDB::bind_method(D_METHOD("_text_type_toggled"), &ColorPicker::_text_type_toggled); @@ -575,6 +598,8 @@ void ColorPicker::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "deferred_mode"), "set_deferred_mode", "is_deferred_mode"); ADD_SIGNAL(MethodInfo("color_changed", PropertyInfo(Variant::COLOR, "color"))); + ADD_SIGNAL(MethodInfo("preset_added", PropertyInfo(Variant::COLOR, "color"))); + ADD_SIGNAL(MethodInfo("preset_removed", PropertyInfo(Variant::COLOR, "color"))); } ColorPicker::ColorPicker() : diff --git a/scene/gui/color_picker.h b/scene/gui/color_picker.h index 0166da7118..e32c830434 100644 --- a/scene/gui/color_picker.h +++ b/scene/gui/color_picker.h @@ -105,6 +105,9 @@ public: Color get_pick_color() const; void add_preset(const Color &p_color); + void erase_preset(const Color &p_color); + PoolColorArray get_presets() const; + void set_raw_mode(bool p_enabled); bool is_raw_mode() const; diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 79e1d35b94..a580d89439 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -451,6 +451,11 @@ void Control::_update_canvas_item_transform() { Transform2D xform = _get_internal_transform(); xform[2] += get_position(); + // We use a little workaround to avoid flickering when moving the pivot with _edit_set_pivot() + if (is_inside_tree() && Math::abs(Math::sin(data.rotation * 4.0f)) < 0.00001f && get_viewport()->is_snap_controls_to_pixels_enabled()) { + xform[2] = xform[2].round(); + } + VisualServer::get_singleton()->canvas_item_set_transform(get_canvas_item(), xform); } @@ -1336,11 +1341,6 @@ void Control::_size_changed() { new_size_cache.height = minimum_size.height; } - // We use a little workaround to avoid flickering when moving the pivot with _edit_set_pivot() - if (is_inside_tree() && Math::abs(Math::sin(data.rotation * 4.0f)) < 0.00001f && get_viewport()->is_snap_controls_to_pixels_enabled()) { - new_size_cache = new_size_cache.round(); - new_pos_cache = new_pos_cache.round(); - } bool pos_changed = new_pos_cache != data.pos_cache; bool size_changed = new_size_cache != data.size_cache; @@ -1740,10 +1740,10 @@ Rect2 Control::_compute_child_rect(const float p_anchors[4], const float p_margi void Control::_compute_margins(Rect2 p_rect, const float p_anchors[4], float (&r_margins)[4]) { Size2 parent_rect_size = get_parent_anchorable_rect().size; - r_margins[0] = Math::floor(p_rect.position.x - (p_anchors[0] * parent_rect_size.x)); - r_margins[1] = Math::floor(p_rect.position.y - (p_anchors[1] * parent_rect_size.y)); - r_margins[2] = Math::floor(p_rect.position.x + p_rect.size.x - (p_anchors[2] * parent_rect_size.x)); - r_margins[3] = Math::floor(p_rect.position.y + p_rect.size.y - (p_anchors[3] * parent_rect_size.y)); + r_margins[0] = p_rect.position.x - (p_anchors[0] * parent_rect_size.x); + r_margins[1] = p_rect.position.y - (p_anchors[1] * parent_rect_size.y); + r_margins[2] = p_rect.position.x + p_rect.size.x - (p_anchors[2] * parent_rect_size.x); + r_margins[3] = p_rect.position.y + p_rect.size.y - (p_anchors[3] * parent_rect_size.y); } void Control::set_position(const Size2 &p_point) { diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index b3bebc88ec..eee3213fe7 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -1339,21 +1339,25 @@ GraphEdit::GraphEdit() { zoom_minus = memnew(ToolButton); zoom_hb->add_child(zoom_minus); + zoom_minus->set_tooltip(RTR("Zoom Out")); zoom_minus->connect("pressed", this, "_zoom_minus"); zoom_minus->set_focus_mode(FOCUS_NONE); zoom_reset = memnew(ToolButton); zoom_hb->add_child(zoom_reset); + zoom_reset->set_tooltip(RTR("Zoom Reset")); zoom_reset->connect("pressed", this, "_zoom_reset"); zoom_reset->set_focus_mode(FOCUS_NONE); zoom_plus = memnew(ToolButton); zoom_hb->add_child(zoom_plus); + zoom_plus->set_tooltip(RTR("Zoom In")); zoom_plus->connect("pressed", this, "_zoom_plus"); zoom_plus->set_focus_mode(FOCUS_NONE); snap_button = memnew(ToolButton); snap_button->set_toggle_mode(true); + snap_button->set_tooltip(RTR("Enable snap and show grid.")); snap_button->connect("pressed", this, "_snap_toggled"); snap_button->set_pressed(true); snap_button->set_focus_mode(FOCUS_NONE); diff --git a/scene/gui/menu_button.cpp b/scene/gui/menu_button.cpp index 95ec618c3b..b4cb297900 100644 --- a/scene/gui/menu_button.cpp +++ b/scene/gui/menu_button.cpp @@ -71,13 +71,24 @@ PopupMenu *MenuButton::get_popup() const { return popup; } +void MenuButton::_set_items(const Array &p_items) { + + popup->set("items", p_items); +} + Array MenuButton::_get_items() const { return popup->get("items"); } -void MenuButton::_set_items(const Array &p_items) { - popup->set("items", p_items); +void MenuButton::set_switch_on_hover(bool p_enabled) { + + switch_on_hover = p_enabled; +} + +bool MenuButton::is_switch_on_hover() { + + return switch_on_hover; } void MenuButton::_bind_methods() { @@ -86,9 +97,12 @@ void MenuButton::_bind_methods() { ClassDB::bind_method(D_METHOD("_unhandled_key_input"), &MenuButton::_unhandled_key_input); ClassDB::bind_method(D_METHOD("_set_items"), &MenuButton::_set_items); ClassDB::bind_method(D_METHOD("_get_items"), &MenuButton::_get_items); + ClassDB::bind_method(D_METHOD("set_switch_on_hover", "enable"), &MenuButton::set_switch_on_hover); + ClassDB::bind_method(D_METHOD("is_switch_on_hover"), &MenuButton::is_switch_on_hover); ClassDB::bind_method(D_METHOD("set_disable_shortcuts", "disabled"), &MenuButton::set_disable_shortcuts); ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "items", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL), "_set_items", "_get_items"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "switch_on_hover"), "set_switch_on_hover", "is_switch_on_hover"); ADD_SIGNAL(MethodInfo("about_to_show")); } @@ -100,6 +114,7 @@ void MenuButton::set_disable_shortcuts(bool p_disabled) { MenuButton::MenuButton() { + switch_on_hover = false; set_flat(true); set_disable_shortcuts(false); set_enabled_focus_mode(FOCUS_NONE); diff --git a/scene/gui/menu_button.h b/scene/gui/menu_button.h index 0636accfee..abc49f4988 100644 --- a/scene/gui/menu_button.h +++ b/scene/gui/menu_button.h @@ -41,6 +41,7 @@ class MenuButton : public Button { GDCLASS(MenuButton, Button); bool clicked; + bool switch_on_hover; bool disable_shortcuts; PopupMenu *popup; @@ -57,6 +58,8 @@ public: virtual void pressed(); PopupMenu *get_popup() const; + void set_switch_on_hover(bool p_enabled); + bool is_switch_on_hover(); void set_disable_shortcuts(bool p_disabled); MenuButton(); diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index c339cf6374..18c80ba9a3 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -39,6 +39,7 @@ #ifdef TOOLS_ENABLED #include "editor/editor_scale.h" +#include "editor_settings.h" #endif #define TAB_PIXELS @@ -918,6 +919,26 @@ void TextEdit::_notification(int p_what) { } } + int indent_level = get_indent_level(i); + if (draw_indent_guides && indent_level > 0) { +#ifdef TOOLS_ENABLED + int indent_size = EditorSettings::get_singleton()->get("text_editor/indent/size"); + float line_width = Math::round(EDSCALE); +#else + int indent_size = 4; + float line_width = 1.0; +#endif + int guides = 1 + (indent_level - 1) / indent_size; + + for (int guide = 0; guide < guides; guide++) { + draw_line( + Point2(guide * indent_size * cache.font->get_char_size(' ').width + char_margin, ofs_y), + Point2(guide * indent_size * cache.font->get_char_size(' ').width + char_margin, ofs_y + get_row_height()), + cache.indent_guide_color, + line_width); + } + } + if (line_wrap_index == 0) { // only do these if we are on the first wrapped part of a line @@ -1179,9 +1200,14 @@ void TextEdit::_notification(int p_what) { draw_rect(Rect2(char_ofs + char_margin + ofs_x, yofs + ascent + 2, w, line_width), in_selection && override_selected_font_color ? cache.font_selected_color : color); } - } else if (draw_tabs && str[j] == '\t') { + } else if (draw_tabs && (j > get_indent_level(i) || !draw_indent_guides) && str[j] == '\t') { + // If indent guides are enabled, only draw trailing or alignment tabs + // Otherwise, draw all tabs (including those used for indentation) int yofs = (get_row_height() - cache.tab_icon->get_height()) / 2; - cache.tab_icon->draw(ci, Point2(char_ofs + char_margin + ofs_x, ofs_y + yofs), in_selection && override_selected_font_color ? cache.font_selected_color : color); + cache.tab_icon->draw( + ci, + Point2(char_ofs + char_margin + ofs_x, ofs_y + yofs), + in_selection && override_selected_font_color ? cache.font_selected_color : color); } char_ofs += char_w; @@ -4333,6 +4359,7 @@ void TextEdit::_update_caches() { cache.font = get_font("font"); cache.caret_color = get_color("caret_color"); cache.caret_background_color = get_color("caret_background_color"); + cache.indent_guide_color = get_color("indent_guide_color"); cache.line_number_color = get_color("line_number_color"); cache.safe_line_number_color = get_color("safe_line_number_color"); cache.font_color = get_color("font_color"); @@ -5446,6 +5473,16 @@ int TextEdit::get_indent_size() { return indent_size; } +void TextEdit::set_draw_indent_guides(bool p_draw) { + + draw_indent_guides = p_draw; +} + +bool TextEdit::is_drawing_indent_guides() const { + + return draw_indent_guides; +} + void TextEdit::set_draw_tabs(bool p_draw) { draw_tabs = p_draw; diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index b1a0b60442..4d398f56b6 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -167,6 +167,7 @@ private: Color completion_font_color; Color caret_color; Color caret_background_color; + Color indent_guide_color; Color line_number_color; Color safe_line_number_color; Color font_color; @@ -276,6 +277,7 @@ private: int wrap_right_offset; bool setting_row; + bool draw_indent_guides; bool draw_tabs; bool override_selected_font_color; bool cursor_changed_dirty; @@ -590,6 +592,8 @@ public: bool is_indent_using_spaces() const; void set_indent_size(const int p_size); int get_indent_size(); + void set_draw_indent_guides(bool p_draw); + bool is_drawing_indent_guides() const; void set_draw_tabs(bool p_draw); bool is_drawing_tabs() const; void set_override_selected_font_color(bool p_override_selected_font_color); diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 3e27c86c67..5b1c2d8020 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1955,10 +1955,9 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { // If the mouse is over a menu button, this menu will open automatically // if there is already a pop-up menu open at the same hierarchical level. - if (popup_menu_parent && menu_button && - popup_menu_parent->get_icon().is_null() && - menu_button->get_icon().is_null() && - (popup_menu->get_parent()->get_parent()->is_a_parent_of(menu_button) || + if (popup_menu_parent && menu_button && popup_menu_parent->is_switch_on_hover() && + !menu_button->is_disabled() && menu_button->is_switch_on_hover() && + (popup_menu_parent->get_parent()->is_a_parent_of(menu_button) || menu_button->get_parent()->is_a_parent_of(popup_menu))) { popup_menu->notification(Control::NOTIFICATION_MODAL_CLOSE); diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 5327ed318f..fa8c927813 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -699,7 +699,7 @@ void SpatialMaterial::_update_shader() { if (features[FEATURE_DEPTH_MAPPING] && !flags[FLAG_UV1_USE_TRIPLANAR]) { //depthmap not supported with triplanar code += "\t{\n"; - code += "\t\tvec3 view_dir = normalize(normalize(-VERTEX)*mat3(TANGENT*depth_flip.x,BINORMAL*depth_flip.y,NORMAL));\n"; // binormal is negative due to mikktspace + code += "\t\tvec3 view_dir = normalize(normalize(-VERTEX)*mat3(TANGENT*depth_flip.x,-BINORMAL*depth_flip.y,NORMAL));\n"; // binormal is negative due to mikktspace, flip 'unflips' it ;-) if (deep_parallax) { code += "\t\tfloat num_layers = mix(float(depth_max_layers),float(depth_min_layers), abs(dot(vec3(0.0, 0.0, 1.0), view_dir)));\n"; diff --git a/scene/resources/primitive_meshes.cpp b/scene/resources/primitive_meshes.cpp index dafdddd990..6dedb74fad 100644 --- a/scene/resources/primitive_meshes.cpp +++ b/scene/resources/primitive_meshes.cpp @@ -306,7 +306,7 @@ void CapsuleMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * radius * w, y * radius * w, z); points.push_back(p + Vector3(0.0, 0.0, 0.5 * mid_height)); normals.push_back(p.normalized()); - ADD_TANGENT(-y, x, 0.0, -1.0) + ADD_TANGENT(-y, x, 0.0, 1.0) uvs.push_back(Vector2(u, v * onethird)); point++; @@ -345,7 +345,7 @@ void CapsuleMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * radius, y * radius, z); points.push_back(p); normals.push_back(Vector3(x, y, 0.0)); - ADD_TANGENT(-y, x, 0.0, -1.0) + ADD_TANGENT(-y, x, 0.0, 1.0) uvs.push_back(Vector2(u, onethird + (v * onethird))); point++; @@ -385,7 +385,7 @@ void CapsuleMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * radius * w, y * radius * w, z); points.push_back(p + Vector3(0.0, 0.0, -0.5 * mid_height)); normals.push_back(p.normalized()); - ADD_TANGENT(-y, x, 0.0, -1.0) + ADD_TANGENT(-y, x, 0.0, 1.0) uvs.push_back(Vector2(u, twothirds + ((v - 1.0) * onethird))); point++; @@ -514,14 +514,14 @@ void CubeMesh::_create_mesh_array(Array &p_arr) const { // front points.push_back(Vector3(x, -y, -start_pos.z)); // double negative on the Z! normals.push_back(Vector3(0.0, 0.0, 1.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(1.0, 0.0, 0.0, 1.0); uvs.push_back(Vector2(u, v)); point++; // back points.push_back(Vector3(-x, -y, start_pos.z)); normals.push_back(Vector3(0.0, 0.0, -1.0)); - ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(-1.0, 0.0, 0.0, 1.0); uvs.push_back(Vector2(twothirds + u, v)); point++; @@ -568,14 +568,14 @@ void CubeMesh::_create_mesh_array(Array &p_arr) const { // right points.push_back(Vector3(-start_pos.x, -y, -z)); normals.push_back(Vector3(1.0, 0.0, 0.0)); - ADD_TANGENT(0.0, 0.0, -1.0, -1.0); + ADD_TANGENT(0.0, 0.0, -1.0, 1.0); uvs.push_back(Vector2(onethird + u, v)); point++; // left points.push_back(Vector3(start_pos.x, -y, z)); normals.push_back(Vector3(-1.0, 0.0, 0.0)); - ADD_TANGENT(0.0, 0.0, 1.0, -1.0); + ADD_TANGENT(0.0, 0.0, 1.0, 1.0); uvs.push_back(Vector2(u, 0.5 + v)); point++; @@ -622,14 +622,14 @@ void CubeMesh::_create_mesh_array(Array &p_arr) const { // top points.push_back(Vector3(-x, -start_pos.y, -z)); normals.push_back(Vector3(0.0, 1.0, 0.0)); - ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(-1.0, 0.0, 0.0, 1.0); uvs.push_back(Vector2(onethird + u, 0.5 + v)); point++; // bottom points.push_back(Vector3(x, start_pos.y, -z)); normals.push_back(Vector3(0.0, -1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(1.0, 0.0, 0.0, 1.0); uvs.push_back(Vector2(twothirds + u, 0.5 + v)); point++; @@ -773,7 +773,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * radius, y, z * radius); points.push_back(p); normals.push_back(Vector3(x, 0.0, z)); - ADD_TANGENT(z, 0.0, -x, -1.0) + ADD_TANGENT(z, 0.0, -x, 1.0) uvs.push_back(Vector2(u, v * 0.5)); point++; @@ -799,7 +799,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { thisrow = point; points.push_back(Vector3(0.0, y, 0.0)); normals.push_back(Vector3(0.0, 1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0) + ADD_TANGENT(1.0, 0.0, 0.0, 1.0) uvs.push_back(Vector2(0.25, 0.75)); point++; @@ -816,7 +816,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * top_radius, y, z * top_radius); points.push_back(p); normals.push_back(Vector3(0.0, 1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0) + ADD_TANGENT(1.0, 0.0, 0.0, 1.0) uvs.push_back(Vector2(u, v)); point++; @@ -835,7 +835,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { thisrow = point; points.push_back(Vector3(0.0, y, 0.0)); normals.push_back(Vector3(0.0, -1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0) + ADD_TANGENT(1.0, 0.0, 0.0, 1.0) uvs.push_back(Vector2(0.75, 0.75)); point++; @@ -852,7 +852,7 @@ void CylinderMesh::_create_mesh_array(Array &p_arr) const { Vector3 p = Vector3(x * bottom_radius, y, z * bottom_radius); points.push_back(p); normals.push_back(Vector3(0.0, -1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0) + ADD_TANGENT(1.0, 0.0, 0.0, 1.0) uvs.push_back(Vector2(u, v)); point++; @@ -982,7 +982,7 @@ void PlaneMesh::_create_mesh_array(Array &p_arr) const { points.push_back(Vector3(-x, 0.0, -z)); normals.push_back(Vector3(0.0, 1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(1.0, 0.0, 0.0, 1.0); uvs.push_back(Vector2(1.0 - u, 1.0 - v)); /* 1.0 - uv to match orientation with Quad */ point++; @@ -1108,14 +1108,14 @@ void PrismMesh::_create_mesh_array(Array &p_arr) const { /* front */ points.push_back(Vector3(start_x + x, -y, -start_pos.z)); // double negative on the Z! normals.push_back(Vector3(0.0, 0.0, 1.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(1.0, 0.0, 0.0, 1.0); uvs.push_back(Vector2(offset_front + u, v)); point++; /* back */ points.push_back(Vector3(start_x + scaled_size_x - x, -y, start_pos.z)); normals.push_back(Vector3(0.0, 0.0, -1.0)); - ADD_TANGENT(-1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(-1.0, 0.0, 0.0, 1.0); uvs.push_back(Vector2(twothirds + offset_back + u, v)); point++; @@ -1187,14 +1187,14 @@ void PrismMesh::_create_mesh_array(Array &p_arr) const { /* right */ points.push_back(Vector3(right, -y, -z)); normals.push_back(normal_right); - ADD_TANGENT(0.0, 0.0, -1.0, -1.0); + ADD_TANGENT(0.0, 0.0, -1.0, 1.0); uvs.push_back(Vector2(onethird + u, v)); point++; /* left */ points.push_back(Vector3(left, -y, z)); normals.push_back(normal_left); - ADD_TANGENT(0.0, 0.0, 1.0, -1.0); + ADD_TANGENT(0.0, 0.0, 1.0, 1.0); uvs.push_back(Vector2(u, 0.5 + v)); point++; @@ -1241,7 +1241,7 @@ void PrismMesh::_create_mesh_array(Array &p_arr) const { /* bottom */ points.push_back(Vector3(x, start_pos.y, -z)); normals.push_back(Vector3(0.0, -1.0, 0.0)); - ADD_TANGENT(1.0, 0.0, 0.0, -1.0); + ADD_TANGENT(1.0, 0.0, 0.0, 1.0); uvs.push_back(Vector2(twothirds + u, 0.5 + v)); point++; @@ -1382,7 +1382,7 @@ void QuadMesh::_create_mesh_array(Array &p_arr) const { tangents.set(i * 4 + 0, 1.0); tangents.set(i * 4 + 1, 0.0); tangents.set(i * 4 + 2, 0.0); - tangents.set(i * 4 + 3, -1.0); + tangents.set(i * 4 + 3, 1.0); static const Vector2 quad_uv[4] = { Vector2(0, 1), @@ -1468,7 +1468,7 @@ void SphereMesh::_create_mesh_array(Array &p_arr) const { points.push_back(p); normals.push_back(p.normalized()); }; - ADD_TANGENT(z, 0.0, -x, -1.0) + ADD_TANGENT(z, 0.0, -x, 1.0) uvs.push_back(Vector2(u, v)); point++; diff --git a/scene/resources/surface_tool.cpp b/scene/resources/surface_tool.cpp index 9907636e91..842252d5d9 100644 --- a/scene/resources/surface_tool.cpp +++ b/scene/resources/surface_tool.cpp @@ -853,7 +853,7 @@ void SurfaceTool::mikktSetTSpaceDefault(const SMikkTSpaceContext *pContext, cons if (vtx != NULL) { vtx->tangent = Vector3(fvTangent[0], fvTangent[1], fvTangent[2]); - vtx->binormal = Vector3(fvBiTangent[0], fvBiTangent[1], fvBiTangent[2]); + vtx->binormal = Vector3(-fvBiTangent[0], -fvBiTangent[1], -fvBiTangent[2]); // for some reason these are reversed, something with the coordinate system in Godot } } diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp index f852ecd7eb..c2c2c0ff32 100644 --- a/scene/resources/tile_set.cpp +++ b/scene/resources/tile_set.cpp @@ -129,6 +129,22 @@ bool TileSet::_set(const StringName &p_name, const Variant &p_value) { } p.pop_front(); } + } else if (what == "z_index_map") { + tile_map[id].autotile_data.z_index_map.clear(); + Array p = p_value; + Vector3 val; + Vector2 v; + int z_index; + while (p.size() > 0) { + val = p[0]; + if (val.z != 0) { + v.x = val.x; + v.y = val.y; + z_index = (int)val.z; + tile_map[id].autotile_data.z_index_map[v] = z_index; + } + p.pop_front(); + } } } else if (what == "shape") tile_set_shape(id, 0, p_value); @@ -228,6 +244,19 @@ bool TileSet::_get(const StringName &p_name, Variant &r_ret) const { } } r_ret = p; + } else if (what == "z_index_map") { + Array p; + Vector3 v; + for (Map<Vector2, int>::Element *E = tile_map[id].autotile_data.z_index_map.front(); E; E = E->next()) { + if (E->value() != 0) { + //Don't save default value + v.x = E->key().x; + v.y = E->key().y; + v.z = E->value(); + p.push_back(v); + } + } + r_ret = p; } } else if (what == "shape") r_ret = tile_get_shape(id, 0); @@ -278,6 +307,7 @@ void TileSet::_get_property_list(List<PropertyInfo> *p_list) const { p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/occluder_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/navpoly_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/priority_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); + p_list->push_back(PropertyInfo(Variant::ARRAY, pre + "autotile/z_index_map", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); } else if (tile_get_tile_mode(id) == ATLAS_TILE) { p_list->push_back(PropertyInfo(Variant::VECTOR2, pre + "autotile/icon_coordinate", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); p_list->push_back(PropertyInfo(Variant::VECTOR2, pre + "autotile/tile_size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); @@ -476,6 +506,23 @@ int TileSet::autotile_get_subtile_priority(int p_id, const Vector2 &p_coord) { return 1; } +void TileSet::autotile_set_z_index(int p_id, const Vector2 &p_coord, int p_z_index) { + + ERR_FAIL_COND(!tile_map.has(p_id)); + tile_map[p_id].autotile_data.z_index_map[p_coord] = p_z_index; + emit_changed(); +} + +int TileSet::autotile_get_z_index(int p_id, const Vector2 &p_coord) { + + ERR_FAIL_COND_V(!tile_map.has(p_id), 1); + if (tile_map[p_id].autotile_data.z_index_map.has(p_coord)) { + return tile_map[p_id].autotile_data.z_index_map[p_coord]; + } + //When not custom z index set return the default value + return 0; +} + const Map<Vector2, int> &TileSet::autotile_get_priority_map(int p_id) const { static Map<Vector2, int> dummy; diff --git a/scene/resources/tile_set.h b/scene/resources/tile_set.h index 1802bf12b6..2ab771b1b0 100644 --- a/scene/resources/tile_set.h +++ b/scene/resources/tile_set.h @@ -87,6 +87,7 @@ public: Map<Vector2, Ref<OccluderPolygon2D> > occluder_map; Map<Vector2, Ref<NavigationPolygon> > navpoly_map; Map<Vector2, int> priority_map; + Map<Vector2, int> z_index_map; // Default size to prevent invalid value explicit AutotileData() : @@ -172,6 +173,9 @@ public: int autotile_get_subtile_priority(int p_id, const Vector2 &p_coord); const Map<Vector2, int> &autotile_get_priority_map(int p_id) const; + void autotile_set_z_index(int p_id, const Vector2 &p_coord, int p_z_index); + int autotile_get_z_index(int p_id, const Vector2 &p_coord); + void autotile_set_bitmask(int p_id, Vector2 p_coord, uint16_t p_flag); uint16_t autotile_get_bitmask(int p_id, Vector2 p_coord); const Map<Vector2, uint16_t> &autotile_get_bitmask_map(int p_id); diff --git a/servers/visual/visual_server_canvas.cpp b/servers/visual/visual_server_canvas.cpp index 734c295a72..26fb3cc493 100644 --- a/servers/visual/visual_server_canvas.cpp +++ b/servers/visual/visual_server_canvas.cpp @@ -339,7 +339,7 @@ void VisualServerCanvas::canvas_item_set_parent(RID p_item, RID p_parent) { Item *ysort_owner = item_owner; while (ysort_owner && ysort_owner->sort_y) { item_owner->ysort_children_count = -1; - ysort_owner = canvas_item_owner.getornull(ysort_owner->parent); + ysort_owner = canvas_item_owner.owns(ysort_owner->parent) ? canvas_item_owner.getornull(ysort_owner->parent) : NULL; } } @@ -363,7 +363,7 @@ void VisualServerCanvas::canvas_item_set_parent(RID p_item, RID p_parent) { Item *ysort_owner = item_owner; while (ysort_owner && ysort_owner->sort_y) { item_owner->ysort_children_count = -1; - ysort_owner = canvas_item_owner.getornull(ysort_owner->parent); + ysort_owner = canvas_item_owner.owns(ysort_owner->parent) ? canvas_item_owner.getornull(ysort_owner->parent) : NULL; } } else { @@ -1354,7 +1354,7 @@ bool VisualServerCanvas::free(RID p_rid) { Item *ysort_owner = item_owner; while (ysort_owner && ysort_owner->sort_y) { item_owner->ysort_children_count = -1; - ysort_owner = canvas_item_owner.getornull(ysort_owner->parent); + ysort_owner = canvas_item_owner.owns(ysort_owner->parent) ? canvas_item_owner.getornull(ysort_owner->parent) : NULL; } } } diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp index e1db123f58..34cc1cbd66 100644 --- a/servers/visual_server.cpp +++ b/servers/visual_server.cpp @@ -1909,7 +1909,7 @@ void VisualServer::_bind_methods() { ClassDB::bind_method(D_METHOD("environment_set_ambient_light", "env", "color", "energy", "sky_contibution"), &VisualServer::environment_set_ambient_light, DEFVAL(1.0), DEFVAL(0.0)); ClassDB::bind_method(D_METHOD("environment_set_dof_blur_near", "env", "enable", "distance", "transition", "far_amount", "quality"), &VisualServer::environment_set_dof_blur_near); ClassDB::bind_method(D_METHOD("environment_set_dof_blur_far", "env", "enable", "distance", "transition", "far_amount", "quality"), &VisualServer::environment_set_dof_blur_far); - ClassDB::bind_method(D_METHOD("environment_set_glow", "env", "enable", "level_flags", "intensity", "strength", "bloom_threshold", "blend_mode", "hdr_bleed_threshold", "hdr_bleed_scale", "bicubic_upscale"), &VisualServer::environment_set_glow); + ClassDB::bind_method(D_METHOD("environment_set_glow", "env", "enable", "level_flags", "intensity", "strength", "bloom_threshold", "blend_mode", "hdr_bleed_threshold", "hdr_bleed_scale", "hdr_luminance_cap", "bicubic_upscale"), &VisualServer::environment_set_glow); ClassDB::bind_method(D_METHOD("environment_set_tonemap", "env", "tone_mapper", "exposure", "white", "auto_exposure", "min_luminance", "max_luminance", "auto_exp_speed", "auto_exp_grey"), &VisualServer::environment_set_tonemap); ClassDB::bind_method(D_METHOD("environment_set_adjustment", "env", "enable", "brightness", "contrast", "saturation", "ramp"), &VisualServer::environment_set_adjustment); ClassDB::bind_method(D_METHOD("environment_set_ssr", "env", "enable", "max_steps", "fade_in", "fade_out", "depth_tolerance", "roughness"), &VisualServer::environment_set_ssr); diff --git a/thirdparty/README.md b/thirdparty/README.md index 55b693af96..e63e1fc109 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -233,7 +233,7 @@ Godot-made change marked with `// -- GODOT --` comments. ## libwebp - Upstream: https://chromium.googlesource.com/webm/libwebp/ -- Version: 1.0.0 +- Version: 1.0.1 - License: BSD-3-Clause Files extracted from upstream source: @@ -503,7 +503,7 @@ changes are marked with `// -- GODOT --` comments. ## tinyexr - Upstream: https://github.com/syoyo/tinyexr -- Version: git (2d5375f, 2018) +- Version: git (5ae30aa, 2018) - License: BSD-3-Clause Files extracted from upstream source: diff --git a/thirdparty/libwebp/src/dec/alphai_dec.h b/thirdparty/libwebp/src/dec/alphai_dec.h index e0fa281a55..a64104abeb 100644 --- a/thirdparty/libwebp/src/dec/alphai_dec.h +++ b/thirdparty/libwebp/src/dec/alphai_dec.h @@ -51,4 +51,4 @@ void WebPDeallocateAlphaMemory(VP8Decoder* const dec); } // extern "C" #endif -#endif /* WEBP_DEC_ALPHAI_DEC_H_ */ +#endif // WEBP_DEC_ALPHAI_DEC_H_ diff --git a/thirdparty/libwebp/src/dec/buffer_dec.c b/thirdparty/libwebp/src/dec/buffer_dec.c index 75eb3c40b4..3cd94eb4d9 100644 --- a/thirdparty/libwebp/src/dec/buffer_dec.c +++ b/thirdparty/libwebp/src/dec/buffer_dec.c @@ -74,7 +74,8 @@ static VP8StatusCode CheckDecBuffer(const WebPDecBuffer* const buffer) { } else { // RGB checks const WebPRGBABuffer* const buf = &buffer->u.RGBA; const int stride = abs(buf->stride); - const uint64_t size = MIN_BUFFER_SIZE(width, height, stride); + const uint64_t size = + MIN_BUFFER_SIZE(width * kModeBpp[mode], height, stride); ok &= (size <= buf->size); ok &= (stride >= width * kModeBpp[mode]); ok &= (buf->rgba != NULL); diff --git a/thirdparty/libwebp/src/dec/common_dec.h b/thirdparty/libwebp/src/dec/common_dec.h index 9995f1a51a..b158550a80 100644 --- a/thirdparty/libwebp/src/dec/common_dec.h +++ b/thirdparty/libwebp/src/dec/common_dec.h @@ -51,4 +51,4 @@ enum { MB_FEATURE_TREE_PROBS = 3, NUM_PROBAS = 11 }; -#endif // WEBP_DEC_COMMON_DEC_H_ +#endif // WEBP_DEC_COMMON_DEC_H_ diff --git a/thirdparty/libwebp/src/dec/frame_dec.c b/thirdparty/libwebp/src/dec/frame_dec.c index a9d5430d00..bda9e1a6f6 100644 --- a/thirdparty/libwebp/src/dec/frame_dec.c +++ b/thirdparty/libwebp/src/dec/frame_dec.c @@ -338,7 +338,6 @@ void VP8InitDithering(const WebPDecoderOptions* const options, for (s = 0; s < NUM_MB_SEGMENTS; ++s) { VP8QuantMatrix* const dqm = &dec->dqm_[s]; if (dqm->uv_quant_ < DITHER_AMP_TAB_SIZE) { - // TODO(skal): should we specially dither more for uv_quant_ < 0? const int idx = (dqm->uv_quant_ < 0) ? 0 : dqm->uv_quant_; dqm->dither_ = (f * kQuantToDitherAmp[idx]) >> 3; } @@ -669,15 +668,9 @@ int VP8GetThreadMethod(const WebPDecoderOptions* const options, (void)height; assert(headers == NULL || !headers->is_lossless); #if defined(WEBP_USE_THREAD) - if (width < MIN_WIDTH_FOR_THREADS) return 0; - // TODO(skal): tune the heuristic further -#if 0 - if (height < 2 * width) return 2; + if (width >= MIN_WIDTH_FOR_THREADS) return 2; #endif - return 2; -#else // !WEBP_USE_THREAD return 0; -#endif } #undef MT_CACHE_LINES diff --git a/thirdparty/libwebp/src/dec/idec_dec.c b/thirdparty/libwebp/src/dec/idec_dec.c index a371ed7500..9bc9166808 100644 --- a/thirdparty/libwebp/src/dec/idec_dec.c +++ b/thirdparty/libwebp/src/dec/idec_dec.c @@ -140,10 +140,9 @@ static void DoRemap(WebPIDecoder* const idec, ptrdiff_t offset) { if (NeedCompressedAlpha(idec)) { ALPHDecoder* const alph_dec = dec->alph_dec_; dec->alpha_data_ += offset; - if (alph_dec != NULL) { + if (alph_dec != NULL && alph_dec->vp8l_dec_ != NULL) { if (alph_dec->method_ == ALPHA_LOSSLESS_COMPRESSION) { VP8LDecoder* const alph_vp8l_dec = alph_dec->vp8l_dec_; - assert(alph_vp8l_dec != NULL); assert(dec->alpha_data_size_ >= ALPHA_HEADER_LEN); VP8LBitReaderSetBuffer(&alph_vp8l_dec->br_, dec->alpha_data_ + ALPHA_HEADER_LEN, @@ -283,10 +282,8 @@ static void RestoreContext(const MBContext* context, VP8Decoder* const dec, static VP8StatusCode IDecError(WebPIDecoder* const idec, VP8StatusCode error) { if (idec->state_ == STATE_VP8_DATA) { - VP8Io* const io = &idec->io_; - if (io->teardown != NULL) { - io->teardown(io); - } + // Synchronize the thread, clean-up and check for errors. + VP8ExitCritical((VP8Decoder*)idec->dec_, &idec->io_); } idec->state_ = STATE_ERROR; return error; @@ -451,7 +448,10 @@ static VP8StatusCode DecodeRemaining(WebPIDecoder* const idec) { VP8Decoder* const dec = (VP8Decoder*)idec->dec_; VP8Io* const io = &idec->io_; - assert(dec->ready_); + // Make sure partition #0 has been read before, to set dec to ready_. + if (!dec->ready_) { + return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR); + } for (; dec->mb_y_ < dec->mb_h_; ++dec->mb_y_) { if (idec->last_mb_y_ != dec->mb_y_) { if (!VP8ParseIntraModeRow(&dec->br_, dec)) { @@ -473,6 +473,12 @@ static VP8StatusCode DecodeRemaining(WebPIDecoder* const idec) { MemDataSize(&idec->mem_) > MAX_MB_SIZE) { return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR); } + // Synchronize the threads. + if (dec->mt_method_ > 0) { + if (!WebPGetWorkerInterface()->Sync(&dec->worker_)) { + return IDecError(idec, VP8_STATUS_BITSTREAM_ERROR); + } + } RestoreContext(&context, dec, token_br); return VP8_STATUS_SUSPENDED; } @@ -491,6 +497,7 @@ static VP8StatusCode DecodeRemaining(WebPIDecoder* const idec) { } // Synchronize the thread and check for errors. if (!VP8ExitCritical(dec, io)) { + idec->state_ = STATE_ERROR; // prevent re-entry in IDecError return IDecError(idec, VP8_STATUS_USER_ABORT); } dec->ready_ = 0; @@ -571,6 +578,10 @@ static VP8StatusCode IDecode(WebPIDecoder* idec) { status = DecodePartition0(idec); } if (idec->state_ == STATE_VP8_DATA) { + const VP8Decoder* const dec = (VP8Decoder*)idec->dec_; + if (dec == NULL) { + return VP8_STATUS_SUSPENDED; // can't continue if we have no decoder. + } status = DecodeRemaining(idec); } if (idec->state_ == STATE_VP8L_HEADER) { diff --git a/thirdparty/libwebp/src/dec/vp8_dec.h b/thirdparty/libwebp/src/dec/vp8_dec.h index ca85b340cf..a05405df72 100644 --- a/thirdparty/libwebp/src/dec/vp8_dec.h +++ b/thirdparty/libwebp/src/dec/vp8_dec.h @@ -182,4 +182,4 @@ WEBP_EXTERN int VP8LGetInfo( } // extern "C" #endif -#endif /* WEBP_DEC_VP8_DEC_H_ */ +#endif // WEBP_DEC_VP8_DEC_H_ diff --git a/thirdparty/libwebp/src/dec/vp8i_dec.h b/thirdparty/libwebp/src/dec/vp8i_dec.h index c929933e1c..e5e89df57d 100644 --- a/thirdparty/libwebp/src/dec/vp8i_dec.h +++ b/thirdparty/libwebp/src/dec/vp8i_dec.h @@ -32,7 +32,7 @@ extern "C" { // version numbers #define DEC_MAJ_VERSION 1 #define DEC_MIN_VERSION 0 -#define DEC_REV_VERSION 0 +#define DEC_REV_VERSION 1 // YUV-cache parameters. Cache is 32-bytes wide (= one cacheline). // Constraints are: We need to store one 16x16 block of luma samples (y), @@ -316,4 +316,4 @@ const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec, } // extern "C" #endif -#endif /* WEBP_DEC_VP8I_DEC_H_ */ +#endif // WEBP_DEC_VP8I_DEC_H_ diff --git a/thirdparty/libwebp/src/dec/vp8l_dec.c b/thirdparty/libwebp/src/dec/vp8l_dec.c index 0570f53a77..333bb3e80d 100644 --- a/thirdparty/libwebp/src/dec/vp8l_dec.c +++ b/thirdparty/libwebp/src/dec/vp8l_dec.c @@ -362,12 +362,19 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, VP8LMetadata* const hdr = &dec->hdr_; uint32_t* huffman_image = NULL; HTreeGroup* htree_groups = NULL; + // When reading htrees, some might be unused, as the format allows it. + // We will still read them but put them in this htree_group_bogus. + HTreeGroup htree_group_bogus; HuffmanCode* huffman_tables = NULL; + HuffmanCode* huffman_tables_bogus = NULL; HuffmanCode* next = NULL; int num_htree_groups = 1; + int num_htree_groups_max = 1; int max_alphabet_size = 0; int* code_lengths = NULL; const int table_size = kTableSize[color_cache_bits]; + int* mapping = NULL; + int ok = 0; if (allow_recursion && VP8LReadBits(br, 1)) { // use meta Huffman codes. @@ -384,9 +391,41 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, // The huffman data is stored in red and green bytes. const int group = (huffman_image[i] >> 8) & 0xffff; huffman_image[i] = group; - if (group >= num_htree_groups) { - num_htree_groups = group + 1; + if (group >= num_htree_groups_max) { + num_htree_groups_max = group + 1; + } + } + // Check the validity of num_htree_groups_max. If it seems too big, use a + // smaller value for later. This will prevent big memory allocations to end + // up with a bad bitstream anyway. + // The value of 1000 is totally arbitrary. We know that num_htree_groups_max + // is smaller than (1 << 16) and should be smaller than the number of pixels + // (though the format allows it to be bigger). + if (num_htree_groups_max > 1000 || num_htree_groups_max > xsize * ysize) { + // Create a mapping from the used indices to the minimal set of used + // values [0, num_htree_groups) + mapping = (int*)WebPSafeMalloc(num_htree_groups_max, sizeof(*mapping)); + if (mapping == NULL) { + dec->status_ = VP8_STATUS_OUT_OF_MEMORY; + goto Error; + } + // -1 means a value is unmapped, and therefore unused in the Huffman + // image. + memset(mapping, 0xff, num_htree_groups_max * sizeof(*mapping)); + for (num_htree_groups = 0, i = 0; i < huffman_pixs; ++i) { + // Get the current mapping for the group and remap the Huffman image. + int* const mapped_group = &mapping[huffman_image[i]]; + if (*mapped_group == -1) *mapped_group = num_htree_groups++; + huffman_image[i] = *mapped_group; + } + huffman_tables_bogus = (HuffmanCode*)WebPSafeMalloc( + table_size, sizeof(*huffman_tables_bogus)); + if (huffman_tables_bogus == NULL) { + dec->status_ = VP8_STATUS_OUT_OF_MEMORY; + goto Error; } + } else { + num_htree_groups = num_htree_groups_max; } } @@ -403,11 +442,11 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, } } + code_lengths = (int*)WebPSafeCalloc((uint64_t)max_alphabet_size, + sizeof(*code_lengths)); huffman_tables = (HuffmanCode*)WebPSafeMalloc(num_htree_groups * table_size, sizeof(*huffman_tables)); htree_groups = VP8LHtreeGroupsNew(num_htree_groups); - code_lengths = (int*)WebPSafeCalloc((uint64_t)max_alphabet_size, - sizeof(*code_lengths)); if (htree_groups == NULL || code_lengths == NULL || huffman_tables == NULL) { dec->status_ = VP8_STATUS_OUT_OF_MEMORY; @@ -415,28 +454,35 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, } next = huffman_tables; - for (i = 0; i < num_htree_groups; ++i) { - HTreeGroup* const htree_group = &htree_groups[i]; + for (i = 0; i < num_htree_groups_max; ++i) { + // If the index "i" is unused in the Huffman image, read the coefficients + // but store them to a bogus htree_group. + const int is_bogus = (mapping != NULL && mapping[i] == -1); + HTreeGroup* const htree_group = + is_bogus ? &htree_group_bogus : + &htree_groups[(mapping == NULL) ? i : mapping[i]]; HuffmanCode** const htrees = htree_group->htrees; + HuffmanCode* huffman_tables_i = is_bogus ? huffman_tables_bogus : next; int size; int total_size = 0; int is_trivial_literal = 1; int max_bits = 0; for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { int alphabet_size = kAlphabetSize[j]; - htrees[j] = next; + htrees[j] = huffman_tables_i; if (j == 0 && color_cache_bits > 0) { alphabet_size += 1 << color_cache_bits; } - size = ReadHuffmanCode(alphabet_size, dec, code_lengths, next); + size = + ReadHuffmanCode(alphabet_size, dec, code_lengths, huffman_tables_i); if (size == 0) { goto Error; } if (is_trivial_literal && kLiteralMap[j] == 1) { - is_trivial_literal = (next->bits == 0); + is_trivial_literal = (huffman_tables_i->bits == 0); } - total_size += next->bits; - next += size; + total_size += huffman_tables_i->bits; + huffman_tables_i += size; if (j <= ALPHA) { int local_max_bits = code_lengths[0]; int k; @@ -448,38 +494,41 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, max_bits += local_max_bits; } } + if (!is_bogus) next = huffman_tables_i; htree_group->is_trivial_literal = is_trivial_literal; htree_group->is_trivial_code = 0; if (is_trivial_literal) { const int red = htrees[RED][0].value; const int blue = htrees[BLUE][0].value; const int alpha = htrees[ALPHA][0].value; - htree_group->literal_arb = - ((uint32_t)alpha << 24) | (red << 16) | blue; + htree_group->literal_arb = ((uint32_t)alpha << 24) | (red << 16) | blue; if (total_size == 0 && htrees[GREEN][0].value < NUM_LITERAL_CODES) { htree_group->is_trivial_code = 1; htree_group->literal_arb |= htrees[GREEN][0].value << 8; } } - htree_group->use_packed_table = !htree_group->is_trivial_code && - (max_bits < HUFFMAN_PACKED_BITS); + htree_group->use_packed_table = + !htree_group->is_trivial_code && (max_bits < HUFFMAN_PACKED_BITS); if (htree_group->use_packed_table) BuildPackedTable(htree_group); } - WebPSafeFree(code_lengths); + ok = 1; - // All OK. Finalize pointers and return. + // All OK. Finalize pointers. hdr->huffman_image_ = huffman_image; hdr->num_htree_groups_ = num_htree_groups; hdr->htree_groups_ = htree_groups; hdr->huffman_tables_ = huffman_tables; - return 1; Error: WebPSafeFree(code_lengths); - WebPSafeFree(huffman_image); - WebPSafeFree(huffman_tables); - VP8LHtreeGroupsFree(htree_groups); - return 0; + WebPSafeFree(huffman_tables_bogus); + WebPSafeFree(mapping); + if (!ok) { + WebPSafeFree(huffman_image); + WebPSafeFree(huffman_tables); + VP8LHtreeGroupsFree(htree_groups); + } + return ok; } //------------------------------------------------------------------------------ @@ -884,7 +933,11 @@ static WEBP_INLINE void CopyBlock8b(uint8_t* const dst, int dist, int length) { #endif break; case 2: +#if !defined(WORDS_BIGENDIAN) memcpy(&pattern, src, sizeof(uint16_t)); +#else + pattern = ((uint32_t)src[0] << 8) | src[1]; +#endif #if defined(__arm__) || defined(_M_ARM) pattern |= pattern << 16; #elif defined(WEBP_USE_MIPS_DSP_R2) @@ -1523,7 +1576,6 @@ int VP8LDecodeAlphaHeader(ALPHDecoder* const alph_dec, if (dec == NULL) return 0; assert(alph_dec != NULL); - alph_dec->vp8l_dec_ = dec; dec->width_ = alph_dec->width_; dec->height_ = alph_dec->height_; @@ -1555,11 +1607,12 @@ int VP8LDecodeAlphaHeader(ALPHDecoder* const alph_dec, if (!ok) goto Err; + // Only set here, once we are sure it is valid (to avoid thread races). + alph_dec->vp8l_dec_ = dec; return 1; Err: - VP8LDelete(alph_dec->vp8l_dec_); - alph_dec->vp8l_dec_ = NULL; + VP8LDelete(dec); return 0; } diff --git a/thirdparty/libwebp/src/dec/vp8li_dec.h b/thirdparty/libwebp/src/dec/vp8li_dec.h index 8e500cf9ff..0a4d613f99 100644 --- a/thirdparty/libwebp/src/dec/vp8li_dec.h +++ b/thirdparty/libwebp/src/dec/vp8li_dec.h @@ -132,4 +132,4 @@ void VP8LDelete(VP8LDecoder* const dec); } // extern "C" #endif -#endif /* WEBP_DEC_VP8LI_DEC_H_ */ +#endif // WEBP_DEC_VP8LI_DEC_H_ diff --git a/thirdparty/libwebp/src/dec/webpi_dec.h b/thirdparty/libwebp/src/dec/webpi_dec.h index c378ba6fc3..24baff5d27 100644 --- a/thirdparty/libwebp/src/dec/webpi_dec.h +++ b/thirdparty/libwebp/src/dec/webpi_dec.h @@ -130,4 +130,4 @@ int WebPAvoidSlowMemory(const WebPDecBuffer* const output, } // extern "C" #endif -#endif /* WEBP_DEC_WEBPI_DEC_H_ */ +#endif // WEBP_DEC_WEBPI_DEC_H_ diff --git a/thirdparty/libwebp/src/demux/demux.c b/thirdparty/libwebp/src/demux/demux.c index 684215e3de..a69c65b7cf 100644 --- a/thirdparty/libwebp/src/demux/demux.c +++ b/thirdparty/libwebp/src/demux/demux.c @@ -25,7 +25,7 @@ #define DMUX_MAJ_VERSION 1 #define DMUX_MIN_VERSION 0 -#define DMUX_REV_VERSION 0 +#define DMUX_REV_VERSION 1 typedef struct { size_t start_; // start location of the data diff --git a/thirdparty/libwebp/src/dsp/dsp.h b/thirdparty/libwebp/src/dsp/dsp.h index 4ab77a5130..fafc2d05d3 100644 --- a/thirdparty/libwebp/src/dsp/dsp.h +++ b/thirdparty/libwebp/src/dsp/dsp.h @@ -76,10 +76,6 @@ extern "C" { #define WEBP_USE_SSE41 #endif -#if defined(__AVX2__) || defined(WEBP_HAVE_AVX2) -#define WEBP_USE_AVX2 -#endif - // The intrinsics currently cause compiler errors with arm-nacl-gcc and the // inline assembly would need to be modified for use with Native Client. #if (defined(__ARM_NEON__) || \ @@ -679,4 +675,4 @@ void VP8FiltersInit(void); } // extern "C" #endif -#endif /* WEBP_DSP_DSP_H_ */ +#endif // WEBP_DSP_DSP_H_ diff --git a/thirdparty/libwebp/src/dsp/enc.c b/thirdparty/libwebp/src/dsp/enc.c index fa23b40a30..2fddbc4c52 100644 --- a/thirdparty/libwebp/src/dsp/enc.c +++ b/thirdparty/libwebp/src/dsp/enc.c @@ -734,7 +734,6 @@ VP8BlockCopy VP8Copy16x8; extern void VP8EncDspInitSSE2(void); extern void VP8EncDspInitSSE41(void); -extern void VP8EncDspInitAVX2(void); extern void VP8EncDspInitNEON(void); extern void VP8EncDspInitMIPS32(void); extern void VP8EncDspInitMIPSdspR2(void); @@ -784,11 +783,6 @@ WEBP_DSP_INIT_FUNC(VP8EncDspInit) { #endif } #endif -#if defined(WEBP_USE_AVX2) - if (VP8GetCPUInfo(kAVX2)) { - VP8EncDspInitAVX2(); - } -#endif #if defined(WEBP_USE_MIPS32) if (VP8GetCPUInfo(kMIPS32)) { VP8EncDspInitMIPS32(); diff --git a/thirdparty/libwebp/src/dsp/enc_avx2.c b/thirdparty/libwebp/src/dsp/enc_avx2.c deleted file mode 100644 index 8bc5798fee..0000000000 --- a/thirdparty/libwebp/src/dsp/enc_avx2.c +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// AVX2 version of speed-critical encoding functions. - -#include "src/dsp/dsp.h" - -#if defined(WEBP_USE_AVX2) - -#endif // WEBP_USE_AVX2 - -//------------------------------------------------------------------------------ -// Entry point - -WEBP_DSP_INIT_STUB(VP8EncDspInitAVX2) diff --git a/thirdparty/libwebp/src/dsp/lossless.c b/thirdparty/libwebp/src/dsp/lossless.c index f9b3c182d3..d21aa6a0a0 100644 --- a/thirdparty/libwebp/src/dsp/lossless.c +++ b/thirdparty/libwebp/src/dsp/lossless.c @@ -23,8 +23,6 @@ #include "src/dsp/lossless.h" #include "src/dsp/lossless_common.h" -#define MAX_DIFF_COST (1e30f) - //------------------------------------------------------------------------------ // Image transforms. diff --git a/thirdparty/libwebp/src/dsp/lossless.h b/thirdparty/libwebp/src/dsp/lossless.h index b2bbdfc93c..f709cc86b2 100644 --- a/thirdparty/libwebp/src/dsp/lossless.h +++ b/thirdparty/libwebp/src/dsp/lossless.h @@ -163,7 +163,7 @@ extern VP8LCostCombinedFunc VP8LExtraCostCombined; extern VP8LCombinedShannonEntropyFunc VP8LCombinedShannonEntropy; typedef struct { // small struct to hold counters - int counts[2]; // index: 0=zero steak, 1=non-zero streak + int counts[2]; // index: 0=zero streak, 1=non-zero streak int streaks[2][2]; // [zero/non-zero][streak<3 / streak>=3] } VP8LStreaks; @@ -194,10 +194,14 @@ extern VP8LGetEntropyUnrefinedFunc VP8LGetEntropyUnrefined; void VP8LBitsEntropyUnrefined(const uint32_t* const array, int n, VP8LBitEntropy* const entropy); -typedef void (*VP8LHistogramAddFunc)(const VP8LHistogram* const a, - const VP8LHistogram* const b, - VP8LHistogram* const out); -extern VP8LHistogramAddFunc VP8LHistogramAdd; +typedef void (*VP8LAddVectorFunc)(const uint32_t* a, const uint32_t* b, + uint32_t* out, int size); +extern VP8LAddVectorFunc VP8LAddVector; +typedef void (*VP8LAddVectorEqFunc)(const uint32_t* a, uint32_t* out, int size); +extern VP8LAddVectorEqFunc VP8LAddVectorEq; +void VP8LHistogramAdd(const VP8LHistogram* const a, + const VP8LHistogram* const b, + VP8LHistogram* const out); // ----------------------------------------------------------------------------- // PrefixEncode() diff --git a/thirdparty/libwebp/src/dsp/lossless_enc.c b/thirdparty/libwebp/src/dsp/lossless_enc.c index d608326fef..1408fbf580 100644 --- a/thirdparty/libwebp/src/dsp/lossless_enc.c +++ b/thirdparty/libwebp/src/dsp/lossless_enc.c @@ -632,38 +632,67 @@ static double ExtraCostCombined_C(const uint32_t* X, const uint32_t* Y, //------------------------------------------------------------------------------ -static void HistogramAdd_C(const VP8LHistogram* const a, - const VP8LHistogram* const b, - VP8LHistogram* const out) { +static void AddVector_C(const uint32_t* a, const uint32_t* b, uint32_t* out, + int size) { + int i; + for (i = 0; i < size; ++i) out[i] = a[i] + b[i]; +} + +static void AddVectorEq_C(const uint32_t* a, uint32_t* out, int size) { + int i; + for (i = 0; i < size; ++i) out[i] += a[i]; +} + +#define ADD(X, ARG, LEN) do { \ + if (a->is_used_[X]) { \ + if (b->is_used_[X]) { \ + VP8LAddVector(a->ARG, b->ARG, out->ARG, (LEN)); \ + } else { \ + memcpy(&out->ARG[0], &a->ARG[0], (LEN) * sizeof(out->ARG[0])); \ + } \ + } else if (b->is_used_[X]) { \ + memcpy(&out->ARG[0], &b->ARG[0], (LEN) * sizeof(out->ARG[0])); \ + } else { \ + memset(&out->ARG[0], 0, (LEN) * sizeof(out->ARG[0])); \ + } \ +} while (0) + +#define ADD_EQ(X, ARG, LEN) do { \ + if (a->is_used_[X]) { \ + if (out->is_used_[X]) { \ + VP8LAddVectorEq(a->ARG, out->ARG, (LEN)); \ + } else { \ + memcpy(&out->ARG[0], &a->ARG[0], (LEN) * sizeof(out->ARG[0])); \ + } \ + } \ +} while (0) + +void VP8LHistogramAdd(const VP8LHistogram* const a, + const VP8LHistogram* const b, VP8LHistogram* const out) { int i; const int literal_size = VP8LHistogramNumCodes(a->palette_code_bits_); assert(a->palette_code_bits_ == b->palette_code_bits_); + if (b != out) { - for (i = 0; i < literal_size; ++i) { - out->literal_[i] = a->literal_[i] + b->literal_[i]; - } - for (i = 0; i < NUM_DISTANCE_CODES; ++i) { - out->distance_[i] = a->distance_[i] + b->distance_[i]; - } - for (i = 0; i < NUM_LITERAL_CODES; ++i) { - out->red_[i] = a->red_[i] + b->red_[i]; - out->blue_[i] = a->blue_[i] + b->blue_[i]; - out->alpha_[i] = a->alpha_[i] + b->alpha_[i]; + ADD(0, literal_, literal_size); + ADD(1, red_, NUM_LITERAL_CODES); + ADD(2, blue_, NUM_LITERAL_CODES); + ADD(3, alpha_, NUM_LITERAL_CODES); + ADD(4, distance_, NUM_DISTANCE_CODES); + for (i = 0; i < 5; ++i) { + out->is_used_[i] = (a->is_used_[i] | b->is_used_[i]); } } else { - for (i = 0; i < literal_size; ++i) { - out->literal_[i] += a->literal_[i]; - } - for (i = 0; i < NUM_DISTANCE_CODES; ++i) { - out->distance_[i] += a->distance_[i]; - } - for (i = 0; i < NUM_LITERAL_CODES; ++i) { - out->red_[i] += a->red_[i]; - out->blue_[i] += a->blue_[i]; - out->alpha_[i] += a->alpha_[i]; - } + ADD_EQ(0, literal_, literal_size); + ADD_EQ(1, red_, NUM_LITERAL_CODES); + ADD_EQ(2, blue_, NUM_LITERAL_CODES); + ADD_EQ(3, alpha_, NUM_LITERAL_CODES); + ADD_EQ(4, distance_, NUM_DISTANCE_CODES); + for (i = 0; i < 5; ++i) out->is_used_[i] |= a->is_used_[i]; } } +#undef ADD +#undef ADD_EQ //------------------------------------------------------------------------------ // Image transforms. @@ -848,7 +877,8 @@ VP8LCombinedShannonEntropyFunc VP8LCombinedShannonEntropy; VP8LGetEntropyUnrefinedFunc VP8LGetEntropyUnrefined; VP8LGetCombinedEntropyUnrefinedFunc VP8LGetCombinedEntropyUnrefined; -VP8LHistogramAddFunc VP8LHistogramAdd; +VP8LAddVectorFunc VP8LAddVector; +VP8LAddVectorEqFunc VP8LAddVectorEq; VP8LVectorMismatchFunc VP8LVectorMismatch; VP8LBundleColorMapFunc VP8LBundleColorMap; @@ -885,7 +915,8 @@ WEBP_DSP_INIT_FUNC(VP8LEncDspInit) { VP8LGetEntropyUnrefined = GetEntropyUnrefined_C; VP8LGetCombinedEntropyUnrefined = GetCombinedEntropyUnrefined_C; - VP8LHistogramAdd = HistogramAdd_C; + VP8LAddVector = AddVector_C; + VP8LAddVectorEq = AddVectorEq_C; VP8LVectorMismatch = VectorMismatch_C; VP8LBundleColorMap = VP8LBundleColorMap_C; @@ -971,7 +1002,8 @@ WEBP_DSP_INIT_FUNC(VP8LEncDspInit) { assert(VP8LCombinedShannonEntropy != NULL); assert(VP8LGetEntropyUnrefined != NULL); assert(VP8LGetCombinedEntropyUnrefined != NULL); - assert(VP8LHistogramAdd != NULL); + assert(VP8LAddVector != NULL); + assert(VP8LAddVectorEq != NULL); assert(VP8LVectorMismatch != NULL); assert(VP8LBundleColorMap != NULL); assert(VP8LPredictorsSub[0] != NULL); diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_mips32.c b/thirdparty/libwebp/src/dsp/lossless_enc_mips32.c index e7b58f4e8c..0412a093cf 100644 --- a/thirdparty/libwebp/src/dsp/lossless_enc_mips32.c +++ b/thirdparty/libwebp/src/dsp/lossless_enc_mips32.c @@ -344,65 +344,29 @@ static void GetCombinedEntropyUnrefined_MIPS32(const uint32_t X[], ASM_END_COMMON_0 \ ASM_END_COMMON_1 -#define ADD_VECTOR(A, B, OUT, SIZE, EXTRA_SIZE) do { \ - const uint32_t* pa = (const uint32_t*)(A); \ - const uint32_t* pb = (const uint32_t*)(B); \ - uint32_t* pout = (uint32_t*)(OUT); \ - const uint32_t* const LoopEnd = pa + (SIZE); \ - assert((SIZE) % 4 == 0); \ - ASM_START \ - ADD_TO_OUT(0, 4, 8, 12, 1, pa, pb, pout) \ - ASM_END_0 \ - if ((EXTRA_SIZE) > 0) { \ - const int last = (EXTRA_SIZE); \ - int i; \ - for (i = 0; i < last; ++i) pout[i] = pa[i] + pb[i]; \ - } \ -} while (0) - -#define ADD_VECTOR_EQ(A, OUT, SIZE, EXTRA_SIZE) do { \ - const uint32_t* pa = (const uint32_t*)(A); \ - uint32_t* pout = (uint32_t*)(OUT); \ - const uint32_t* const LoopEnd = pa + (SIZE); \ - assert((SIZE) % 4 == 0); \ - ASM_START \ - ADD_TO_OUT(0, 4, 8, 12, 0, pa, pout, pout) \ - ASM_END_1 \ - if ((EXTRA_SIZE) > 0) { \ - const int last = (EXTRA_SIZE); \ - int i; \ - for (i = 0; i < last; ++i) pout[i] += pa[i]; \ - } \ -} while (0) - -static void HistogramAdd_MIPS32(const VP8LHistogram* const a, - const VP8LHistogram* const b, - VP8LHistogram* const out) { +static void AddVector_MIPS32(const uint32_t* pa, const uint32_t* pb, + uint32_t* pout, int size) { uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; - const int extra_cache_size = VP8LHistogramNumCodes(a->palette_code_bits_) - - (NUM_LITERAL_CODES + NUM_LENGTH_CODES); - assert(a->palette_code_bits_ == b->palette_code_bits_); - - if (b != out) { - ADD_VECTOR(a->literal_, b->literal_, out->literal_, - NUM_LITERAL_CODES + NUM_LENGTH_CODES, extra_cache_size); - ADD_VECTOR(a->distance_, b->distance_, out->distance_, - NUM_DISTANCE_CODES, 0); - ADD_VECTOR(a->red_, b->red_, out->red_, NUM_LITERAL_CODES, 0); - ADD_VECTOR(a->blue_, b->blue_, out->blue_, NUM_LITERAL_CODES, 0); - ADD_VECTOR(a->alpha_, b->alpha_, out->alpha_, NUM_LITERAL_CODES, 0); - } else { - ADD_VECTOR_EQ(a->literal_, out->literal_, - NUM_LITERAL_CODES + NUM_LENGTH_CODES, extra_cache_size); - ADD_VECTOR_EQ(a->distance_, out->distance_, NUM_DISTANCE_CODES, 0); - ADD_VECTOR_EQ(a->red_, out->red_, NUM_LITERAL_CODES, 0); - ADD_VECTOR_EQ(a->blue_, out->blue_, NUM_LITERAL_CODES, 0); - ADD_VECTOR_EQ(a->alpha_, out->alpha_, NUM_LITERAL_CODES, 0); - } + const uint32_t end = ((size) / 4) * 4; + const uint32_t* const LoopEnd = pa + end; + int i; + ASM_START + ADD_TO_OUT(0, 4, 8, 12, 1, pa, pb, pout) + ASM_END_0 + for (i = end; i < size; ++i) pout[i] = pa[i] + pb[i]; +} + +static void AddVectorEq_MIPS32(const uint32_t* pa, uint32_t* pout, int size) { + uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; + const uint32_t end = ((size) / 4) * 4; + const uint32_t* const LoopEnd = pa + end; + int i; + ASM_START + ADD_TO_OUT(0, 4, 8, 12, 0, pa, pout, pout) + ASM_END_1 + for (i = end; i < size; ++i) pout[i] += pa[i]; } -#undef ADD_VECTOR_EQ -#undef ADD_VECTOR #undef ASM_END_1 #undef ASM_END_0 #undef ASM_END_COMMON_1 @@ -422,7 +386,8 @@ WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitMIPS32(void) { VP8LExtraCostCombined = ExtraCostCombined_MIPS32; VP8LGetEntropyUnrefined = GetEntropyUnrefined_MIPS32; VP8LGetCombinedEntropyUnrefined = GetCombinedEntropyUnrefined_MIPS32; - VP8LHistogramAdd = HistogramAdd_MIPS32; + VP8LAddVector = AddVector_MIPS32; + VP8LAddVectorEq = AddVectorEq_MIPS32; } #else // !WEBP_USE_MIPS32 diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c index f84a9909e1..36478c4912 100644 --- a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c +++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c @@ -170,12 +170,13 @@ static void CollectColorRedTransforms_SSE2(const uint32_t* argb, int stride, //------------------------------------------------------------------------------ +// Note we are adding uint32_t's as *signed* int32's (using _mm_add_epi32). But +// that's ok since the histogram values are less than 1<<28 (max picture size). #define LINE_SIZE 16 // 8 or 16 static void AddVector_SSE2(const uint32_t* a, const uint32_t* b, uint32_t* out, int size) { int i; - assert(size % LINE_SIZE == 0); - for (i = 0; i < size; i += LINE_SIZE) { + for (i = 0; i + LINE_SIZE <= size; i += LINE_SIZE) { const __m128i a0 = _mm_loadu_si128((const __m128i*)&a[i + 0]); const __m128i a1 = _mm_loadu_si128((const __m128i*)&a[i + 4]); #if (LINE_SIZE == 16) @@ -195,12 +196,14 @@ static void AddVector_SSE2(const uint32_t* a, const uint32_t* b, uint32_t* out, _mm_storeu_si128((__m128i*)&out[i + 12], _mm_add_epi32(a3, b3)); #endif } + for (; i < size; ++i) { + out[i] = a[i] + b[i]; + } } static void AddVectorEq_SSE2(const uint32_t* a, uint32_t* out, int size) { int i; - assert(size % LINE_SIZE == 0); - for (i = 0; i < size; i += LINE_SIZE) { + for (i = 0; i + LINE_SIZE <= size; i += LINE_SIZE) { const __m128i a0 = _mm_loadu_si128((const __m128i*)&a[i + 0]); const __m128i a1 = _mm_loadu_si128((const __m128i*)&a[i + 4]); #if (LINE_SIZE == 16) @@ -220,35 +223,11 @@ static void AddVectorEq_SSE2(const uint32_t* a, uint32_t* out, int size) { _mm_storeu_si128((__m128i*)&out[i + 12], _mm_add_epi32(a3, b3)); #endif } -} -#undef LINE_SIZE - -// Note we are adding uint32_t's as *signed* int32's (using _mm_add_epi32). But -// that's ok since the histogram values are less than 1<<28 (max picture size). -static void HistogramAdd_SSE2(const VP8LHistogram* const a, - const VP8LHistogram* const b, - VP8LHistogram* const out) { - int i; - const int literal_size = VP8LHistogramNumCodes(a->palette_code_bits_); - assert(a->palette_code_bits_ == b->palette_code_bits_); - if (b != out) { - AddVector_SSE2(a->literal_, b->literal_, out->literal_, NUM_LITERAL_CODES); - AddVector_SSE2(a->red_, b->red_, out->red_, NUM_LITERAL_CODES); - AddVector_SSE2(a->blue_, b->blue_, out->blue_, NUM_LITERAL_CODES); - AddVector_SSE2(a->alpha_, b->alpha_, out->alpha_, NUM_LITERAL_CODES); - } else { - AddVectorEq_SSE2(a->literal_, out->literal_, NUM_LITERAL_CODES); - AddVectorEq_SSE2(a->red_, out->red_, NUM_LITERAL_CODES); - AddVectorEq_SSE2(a->blue_, out->blue_, NUM_LITERAL_CODES); - AddVectorEq_SSE2(a->alpha_, out->alpha_, NUM_LITERAL_CODES); - } - for (i = NUM_LITERAL_CODES; i < literal_size; ++i) { - out->literal_[i] = a->literal_[i] + b->literal_[i]; - } - for (i = 0; i < NUM_DISTANCE_CODES; ++i) { - out->distance_[i] = a->distance_[i] + b->distance_[i]; + for (; i < size; ++i) { + out[i] += a[i]; } } +#undef LINE_SIZE //------------------------------------------------------------------------------ // Entropy @@ -675,7 +654,8 @@ WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitSSE2(void) { VP8LTransformColor = TransformColor_SSE2; VP8LCollectColorBlueTransforms = CollectColorBlueTransforms_SSE2; VP8LCollectColorRedTransforms = CollectColorRedTransforms_SSE2; - VP8LHistogramAdd = HistogramAdd_SSE2; + VP8LAddVector = AddVector_SSE2; + VP8LAddVectorEq = AddVectorEq_SSE2; VP8LCombinedShannonEntropy = CombinedShannonEntropy_SSE2; VP8LVectorMismatch = VectorMismatch_SSE2; VP8LBundleColorMap = BundleColorMap_SSE2; diff --git a/thirdparty/libwebp/src/dsp/msa_macro.h b/thirdparty/libwebp/src/dsp/msa_macro.h index dfacda6ccd..de026a1d9e 100644 --- a/thirdparty/libwebp/src/dsp/msa_macro.h +++ b/thirdparty/libwebp/src/dsp/msa_macro.h @@ -1389,4 +1389,4 @@ static WEBP_INLINE uint32_t func_hadd_uh_u32(v8u16 in) { } while (0) #define AVER_UB2_UB(...) AVER_UB2(v16u8, __VA_ARGS__) -#endif /* WEBP_DSP_MSA_MACRO_H_ */ +#endif // WEBP_DSP_MSA_MACRO_H_ diff --git a/thirdparty/libwebp/src/dsp/rescaler.c b/thirdparty/libwebp/src/dsp/rescaler.c index f307d35056..753f84fcf4 100644 --- a/thirdparty/libwebp/src/dsp/rescaler.c +++ b/thirdparty/libwebp/src/dsp/rescaler.c @@ -21,6 +21,7 @@ #define ROUNDER (WEBP_RESCALER_ONE >> 1) #define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) +#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) //------------------------------------------------------------------------------ // Row import @@ -138,7 +139,7 @@ void WebPRescalerExportRowShrink_C(WebPRescaler* const wrk) { if (yscale) { for (x_out = 0; x_out < x_out_max; ++x_out) { const uint32_t frac = (uint32_t)MULT_FIX(frow[x_out], yscale); - const int v = (int)MULT_FIX(irow[x_out] - frac, wrk->fxy_scale); + const int v = (int)MULT_FIX_FLOOR(irow[x_out] - frac, wrk->fxy_scale); assert(v >= 0 && v <= 255); dst[x_out] = v; irow[x_out] = frac; // new fractional start @@ -153,6 +154,7 @@ void WebPRescalerExportRowShrink_C(WebPRescaler* const wrk) { } } +#undef MULT_FIX_FLOOR #undef MULT_FIX #undef ROUNDER diff --git a/thirdparty/libwebp/src/dsp/rescaler_mips32.c b/thirdparty/libwebp/src/dsp/rescaler_mips32.c index 542f7e5970..61f63c616c 100644 --- a/thirdparty/libwebp/src/dsp/rescaler_mips32.c +++ b/thirdparty/libwebp/src/dsp/rescaler_mips32.c @@ -209,6 +209,7 @@ static void ExportRowExpand_MIPS32(WebPRescaler* const wrk) { } } +#if 0 // disabled for now. TODO(skal): make match the C-code static void ExportRowShrink_MIPS32(WebPRescaler* const wrk) { const int x_out_max = wrk->dst_width * wrk->num_channels; uint8_t* dst = wrk->dst; @@ -273,6 +274,7 @@ static void ExportRowShrink_MIPS32(WebPRescaler* const wrk) { ); } } +#endif // 0 //------------------------------------------------------------------------------ // Entry point @@ -283,7 +285,7 @@ WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitMIPS32(void) { WebPRescalerImportRowExpand = ImportRowExpand_MIPS32; WebPRescalerImportRowShrink = ImportRowShrink_MIPS32; WebPRescalerExportRowExpand = ExportRowExpand_MIPS32; - WebPRescalerExportRowShrink = ExportRowShrink_MIPS32; +// WebPRescalerExportRowShrink = ExportRowShrink_MIPS32; } #else // !WEBP_USE_MIPS32 diff --git a/thirdparty/libwebp/src/dsp/rescaler_mips_dsp_r2.c b/thirdparty/libwebp/src/dsp/rescaler_mips_dsp_r2.c index b78aac15e6..ce9e64862e 100644 --- a/thirdparty/libwebp/src/dsp/rescaler_mips_dsp_r2.c +++ b/thirdparty/libwebp/src/dsp/rescaler_mips_dsp_r2.c @@ -20,10 +20,12 @@ #define ROUNDER (WEBP_RESCALER_ONE >> 1) #define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) +#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) //------------------------------------------------------------------------------ // Row export +#if 0 // disabled for now. TODO(skal): make match the C-code static void ExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) { int i; const int x_out_max = wrk->dst_width * wrk->num_channels; @@ -106,7 +108,7 @@ static void ExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) { } for (i = 0; i < (x_out_max & 0x3); ++i) { const uint32_t frac = (uint32_t)MULT_FIX(*frow++, yscale); - const int v = (int)MULT_FIX(*irow - frac, wrk->fxy_scale); + const int v = (int)MULT_FIX_FLOOR(*irow - frac, wrk->fxy_scale); assert(v >= 0 && v <= 255); *dst++ = v; *irow++ = frac; // new fractional start @@ -154,13 +156,14 @@ static void ExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) { ); } for (i = 0; i < (x_out_max & 0x3); ++i) { - const int v = (int)MULT_FIX(*irow, wrk->fxy_scale); + const int v = (int)MULT_FIX_FLOOR(*irow, wrk->fxy_scale); assert(v >= 0 && v <= 255); *dst++ = v; *irow++ = 0; } } } +#endif // 0 static void ExportRowExpand_MIPSdspR2(WebPRescaler* const wrk) { int i; @@ -294,6 +297,7 @@ static void ExportRowExpand_MIPSdspR2(WebPRescaler* const wrk) { } } +#undef MULT_FIX_FLOOR #undef MULT_FIX #undef ROUNDER @@ -304,7 +308,7 @@ extern void WebPRescalerDspInitMIPSdspR2(void); WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitMIPSdspR2(void) { WebPRescalerExportRowExpand = ExportRowExpand_MIPSdspR2; - WebPRescalerExportRowShrink = ExportRowShrink_MIPSdspR2; +// WebPRescalerExportRowShrink = ExportRowShrink_MIPSdspR2; } #else // !WEBP_USE_MIPS_DSP_R2 diff --git a/thirdparty/libwebp/src/dsp/rescaler_msa.c b/thirdparty/libwebp/src/dsp/rescaler_msa.c index f3bc99f1cd..c559254836 100644 --- a/thirdparty/libwebp/src/dsp/rescaler_msa.c +++ b/thirdparty/libwebp/src/dsp/rescaler_msa.c @@ -22,6 +22,7 @@ #define ROUNDER (WEBP_RESCALER_ONE >> 1) #define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) +#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) #define CALC_MULT_FIX_16(in0, in1, in2, in3, scale, shift, dst) do { \ v4u32 tmp0, tmp1, tmp2, tmp3; \ @@ -262,6 +263,7 @@ static void RescalerExportRowExpand_MIPSdspR2(WebPRescaler* const wrk) { } } +#if 0 // disabled for now. TODO(skal): make match the C-code static WEBP_INLINE void ExportRowShrink_0(const uint32_t* frow, uint32_t* irow, uint8_t* dst, int length, const uint32_t yscale, @@ -341,7 +343,7 @@ static WEBP_INLINE void ExportRowShrink_0(const uint32_t* frow, uint32_t* irow, } for (x_out = 0; x_out < length; ++x_out) { const uint32_t frac = (uint32_t)MULT_FIX(frow[x_out], yscale); - const int v = (int)MULT_FIX(irow[x_out] - frac, wrk->fxy_scale); + const int v = (int)MULT_FIX_FLOOR(irow[x_out] - frac, wrk->fxy_scale); assert(v >= 0 && v <= 255); dst[x_out] = v; irow[x_out] = frac; @@ -426,6 +428,7 @@ static void RescalerExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) { ExportRowShrink_1(irow, dst, x_out_max, wrk); } } +#endif // 0 //------------------------------------------------------------------------------ // Entry point @@ -434,7 +437,7 @@ extern void WebPRescalerDspInitMSA(void); WEBP_TSAN_IGNORE_FUNCTION void WebPRescalerDspInitMSA(void) { WebPRescalerExportRowExpand = RescalerExportRowExpand_MIPSdspR2; - WebPRescalerExportRowShrink = RescalerExportRowShrink_MIPSdspR2; +// WebPRescalerExportRowShrink = RescalerExportRowShrink_MIPSdspR2; } #else // !WEBP_USE_MSA diff --git a/thirdparty/libwebp/src/dsp/rescaler_neon.c b/thirdparty/libwebp/src/dsp/rescaler_neon.c index 3eff9fbaf4..a553f06f79 100644 --- a/thirdparty/libwebp/src/dsp/rescaler_neon.c +++ b/thirdparty/libwebp/src/dsp/rescaler_neon.c @@ -22,6 +22,7 @@ #define ROUNDER (WEBP_RESCALER_ONE >> 1) #define MULT_FIX_C(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) +#define MULT_FIX_FLOOR_C(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) #define LOAD_32x4(SRC, DST) const uint32x4_t DST = vld1q_u32((SRC)) #define LOAD_32x8(SRC, DST0, DST1) \ @@ -35,8 +36,11 @@ #if (WEBP_RESCALER_RFIX == 32) #define MAKE_HALF_CST(C) vdupq_n_s32((int32_t)((C) >> 1)) -#define MULT_FIX(A, B) /* note: B is actualy scale>>1. See MAKE_HALF_CST */ \ +// note: B is actualy scale>>1. See MAKE_HALF_CST +#define MULT_FIX(A, B) \ vreinterpretq_u32_s32(vqrdmulhq_s32(vreinterpretq_s32_u32((A)), (B))) +#define MULT_FIX_FLOOR(A, B) \ + vreinterpretq_u32_s32(vqdmulhq_s32(vreinterpretq_s32_u32((A)), (B))) #else #error "MULT_FIX/WEBP_RESCALER_RFIX need some more work" #endif @@ -135,8 +139,8 @@ static void RescalerExportRowShrink_NEON(WebPRescaler* const wrk) { const uint32x4_t A1 = MULT_FIX(in1, yscale_half); const uint32x4_t B0 = vqsubq_u32(in2, A0); const uint32x4_t B1 = vqsubq_u32(in3, A1); - const uint32x4_t C0 = MULT_FIX(B0, fxy_scale_half); - const uint32x4_t C1 = MULT_FIX(B1, fxy_scale_half); + const uint32x4_t C0 = MULT_FIX_FLOOR(B0, fxy_scale_half); + const uint32x4_t C1 = MULT_FIX_FLOOR(B1, fxy_scale_half); const uint16x4_t D0 = vmovn_u32(C0); const uint16x4_t D1 = vmovn_u32(C1); const uint8x8_t E = vmovn_u16(vcombine_u16(D0, D1)); @@ -145,7 +149,7 @@ static void RescalerExportRowShrink_NEON(WebPRescaler* const wrk) { } for (; x_out < x_out_max; ++x_out) { const uint32_t frac = (uint32_t)MULT_FIX_C(frow[x_out], yscale); - const int v = (int)MULT_FIX_C(irow[x_out] - frac, wrk->fxy_scale); + const int v = (int)MULT_FIX_FLOOR_C(irow[x_out] - frac, fxy_scale); assert(v >= 0 && v <= 255); dst[x_out] = v; irow[x_out] = frac; // new fractional start @@ -170,6 +174,12 @@ static void RescalerExportRowShrink_NEON(WebPRescaler* const wrk) { } } +#undef MULT_FIX_FLOOR_C +#undef MULT_FIX_C +#undef MULT_FIX_FLOOR +#undef MULT_FIX +#undef ROUNDER + //------------------------------------------------------------------------------ extern void WebPRescalerDspInitNEON(void); diff --git a/thirdparty/libwebp/src/dsp/rescaler_sse2.c b/thirdparty/libwebp/src/dsp/rescaler_sse2.c index 64c50deab5..f7461a452c 100644 --- a/thirdparty/libwebp/src/dsp/rescaler_sse2.c +++ b/thirdparty/libwebp/src/dsp/rescaler_sse2.c @@ -25,6 +25,7 @@ #define ROUNDER (WEBP_RESCALER_ONE >> 1) #define MULT_FIX(x, y) (((uint64_t)(x) * (y) + ROUNDER) >> WEBP_RESCALER_RFIX) +#define MULT_FIX_FLOOR(x, y) (((uint64_t)(x) * (y)) >> WEBP_RESCALER_RFIX) // input: 8 bytes ABCDEFGH -> output: A0E0B0F0C0G0D0H0 static void LoadTwoPixels_SSE2(const uint8_t* const src, __m128i* out) { @@ -224,6 +225,35 @@ static WEBP_INLINE void ProcessRow_SSE2(const __m128i* const A0, _mm_storel_epi64((__m128i*)dst, G); } +static WEBP_INLINE void ProcessRow_Floor_SSE2(const __m128i* const A0, + const __m128i* const A1, + const __m128i* const A2, + const __m128i* const A3, + const __m128i* const mult, + uint8_t* const dst) { + const __m128i mask = _mm_set_epi32(0xffffffffu, 0, 0xffffffffu, 0); + const __m128i B0 = _mm_mul_epu32(*A0, *mult); + const __m128i B1 = _mm_mul_epu32(*A1, *mult); + const __m128i B2 = _mm_mul_epu32(*A2, *mult); + const __m128i B3 = _mm_mul_epu32(*A3, *mult); + const __m128i D0 = _mm_srli_epi64(B0, WEBP_RESCALER_RFIX); + const __m128i D1 = _mm_srli_epi64(B1, WEBP_RESCALER_RFIX); +#if (WEBP_RESCALER_RFIX < 32) + const __m128i D2 = + _mm_and_si128(_mm_slli_epi64(B2, 32 - WEBP_RESCALER_RFIX), mask); + const __m128i D3 = + _mm_and_si128(_mm_slli_epi64(B3, 32 - WEBP_RESCALER_RFIX), mask); +#else + const __m128i D2 = _mm_and_si128(B2, mask); + const __m128i D3 = _mm_and_si128(B3, mask); +#endif + const __m128i E0 = _mm_or_si128(D0, D2); + const __m128i E1 = _mm_or_si128(D1, D3); + const __m128i F = _mm_packs_epi32(E0, E1); + const __m128i G = _mm_packus_epi16(F, F); + _mm_storel_epi64((__m128i*)dst, G); +} + static void RescalerExportRowExpand_SSE2(WebPRescaler* const wrk) { int x_out; uint8_t* const dst = wrk->dst; @@ -322,12 +352,12 @@ static void RescalerExportRowShrink_SSE2(WebPRescaler* const wrk) { const __m128i G1 = _mm_or_si128(D1, F3); _mm_storeu_si128((__m128i*)(irow + x_out + 0), G0); _mm_storeu_si128((__m128i*)(irow + x_out + 4), G1); - ProcessRow_SSE2(&E0, &E1, &E2, &E3, &mult_xy, dst + x_out); + ProcessRow_Floor_SSE2(&E0, &E1, &E2, &E3, &mult_xy, dst + x_out); } } for (; x_out < x_out_max; ++x_out) { const uint32_t frac = (int)MULT_FIX(frow[x_out], yscale); - const int v = (int)MULT_FIX(irow[x_out] - frac, wrk->fxy_scale); + const int v = (int)MULT_FIX_FLOOR(irow[x_out] - frac, wrk->fxy_scale); assert(v >= 0 && v <= 255); dst[x_out] = v; irow[x_out] = frac; // new fractional start @@ -352,6 +382,7 @@ static void RescalerExportRowShrink_SSE2(WebPRescaler* const wrk) { } } +#undef MULT_FIX_FLOOR #undef MULT_FIX #undef ROUNDER diff --git a/thirdparty/libwebp/src/dsp/yuv.h b/thirdparty/libwebp/src/dsp/yuv.h index eb787270d2..c12be1d094 100644 --- a/thirdparty/libwebp/src/dsp/yuv.h +++ b/thirdparty/libwebp/src/dsp/yuv.h @@ -207,4 +207,4 @@ static WEBP_INLINE int VP8RGBToV(int r, int g, int b, int rounding) { } // extern "C" #endif -#endif /* WEBP_DSP_YUV_H_ */ +#endif // WEBP_DSP_YUV_H_ diff --git a/thirdparty/libwebp/src/enc/analysis_enc.c b/thirdparty/libwebp/src/enc/analysis_enc.c index a47ff7d4e8..687757ae03 100644 --- a/thirdparty/libwebp/src/enc/analysis_enc.c +++ b/thirdparty/libwebp/src/enc/analysis_enc.c @@ -458,7 +458,7 @@ static void MergeJobs(const SegmentJob* const src, SegmentJob* const dst) { dst->uv_alpha += src->uv_alpha; } -// initialize the job struct with some TODOs +// initialize the job struct with some tasks to perform static void InitSegmentJob(VP8Encoder* const enc, SegmentJob* const job, int start_row, int end_row) { WebPGetWorkerInterface()->Init(&job->worker); diff --git a/thirdparty/libwebp/src/enc/backward_references_cost_enc.c b/thirdparty/libwebp/src/enc/backward_references_cost_enc.c index 7175496c7f..516abd73eb 100644 --- a/thirdparty/libwebp/src/enc/backward_references_cost_enc.c +++ b/thirdparty/libwebp/src/enc/backward_references_cost_enc.c @@ -67,7 +67,7 @@ static int CostModelBuild(CostModel* const m, int xsize, int cache_bits, // The following code is similar to VP8LHistogramCreate but converts the // distance to plane code. - VP8LHistogramInit(histo, cache_bits); + VP8LHistogramInit(histo, cache_bits, /*init_arrays=*/ 1); while (VP8LRefsCursorOk(&c)) { VP8LHistogramAddSinglePixOrCopy(histo, c.cur_pos, VP8LDistanceToPlaneCode, xsize); diff --git a/thirdparty/libwebp/src/enc/backward_references_enc.c b/thirdparty/libwebp/src/enc/backward_references_enc.c index 39230188b9..3ab7b0ac7d 100644 --- a/thirdparty/libwebp/src/enc/backward_references_enc.c +++ b/thirdparty/libwebp/src/enc/backward_references_enc.c @@ -715,6 +715,7 @@ static int CalculateBestCacheSize(const uint32_t* argb, int quality, for (i = 0; i <= cache_bits_max; ++i) { histos[i] = VP8LAllocateHistogram(i); if (histos[i] == NULL) goto Error; + VP8LHistogramInit(histos[i], i, /*init_arrays=*/ 1); if (i == 0) continue; cc_init[i] = VP8LColorCacheInit(&hashers[i], i); if (!cc_init[i]) goto Error; diff --git a/thirdparty/libwebp/src/enc/cost_enc.h b/thirdparty/libwebp/src/enc/cost_enc.h index bdce1e6a3b..a4b177b342 100644 --- a/thirdparty/libwebp/src/enc/cost_enc.h +++ b/thirdparty/libwebp/src/enc/cost_enc.h @@ -79,4 +79,4 @@ extern const uint16_t VP8FixedCostsI4[NUM_BMODES][NUM_BMODES][NUM_BMODES]; } // extern "C" #endif -#endif /* WEBP_ENC_COST_ENC_H_ */ +#endif // WEBP_ENC_COST_ENC_H_ diff --git a/thirdparty/libwebp/src/enc/delta_palettization_enc.c b/thirdparty/libwebp/src/enc/delta_palettization_enc.c deleted file mode 100644 index a61c8e6c93..0000000000 --- a/thirdparty/libwebp/src/enc/delta_palettization_enc.c +++ /dev/null @@ -1,455 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Mislav Bradac (mislavm@google.com) -// - -#include "src/enc/delta_palettization_enc.h" - -#ifdef WEBP_EXPERIMENTAL_FEATURES -#include "src/webp/types.h" -#include "src/dsp/lossless.h" - -#define MK_COL(r, g, b) (((r) << 16) + ((g) << 8) + (b)) - -// Format allows palette up to 256 entries, but more palette entries produce -// bigger entropy. In the future it will probably be useful to add more entries -// that are far from the origin of the palette or choose remaining entries -// dynamically. -#define DELTA_PALETTE_SIZE 226 - -// Palette used for delta_palettization. Entries are roughly sorted by distance -// of their signed equivalents from the origin. -static const uint32_t kDeltaPalette[DELTA_PALETTE_SIZE] = { - MK_COL(0u, 0u, 0u), - MK_COL(255u, 255u, 255u), - MK_COL(1u, 1u, 1u), - MK_COL(254u, 254u, 254u), - MK_COL(2u, 2u, 2u), - MK_COL(4u, 4u, 4u), - MK_COL(252u, 252u, 252u), - MK_COL(250u, 0u, 0u), - MK_COL(0u, 250u, 0u), - MK_COL(0u, 0u, 250u), - MK_COL(6u, 0u, 0u), - MK_COL(0u, 6u, 0u), - MK_COL(0u, 0u, 6u), - MK_COL(0u, 0u, 248u), - MK_COL(0u, 0u, 8u), - MK_COL(0u, 248u, 0u), - MK_COL(0u, 248u, 248u), - MK_COL(0u, 248u, 8u), - MK_COL(0u, 8u, 0u), - MK_COL(0u, 8u, 248u), - MK_COL(0u, 8u, 8u), - MK_COL(8u, 8u, 8u), - MK_COL(248u, 0u, 0u), - MK_COL(248u, 0u, 248u), - MK_COL(248u, 0u, 8u), - MK_COL(248u, 248u, 0u), - MK_COL(248u, 8u, 0u), - MK_COL(8u, 0u, 0u), - MK_COL(8u, 0u, 248u), - MK_COL(8u, 0u, 8u), - MK_COL(8u, 248u, 0u), - MK_COL(8u, 8u, 0u), - MK_COL(23u, 23u, 23u), - MK_COL(13u, 13u, 13u), - MK_COL(232u, 232u, 232u), - MK_COL(244u, 244u, 244u), - MK_COL(245u, 245u, 250u), - MK_COL(50u, 50u, 50u), - MK_COL(204u, 204u, 204u), - MK_COL(236u, 236u, 236u), - MK_COL(16u, 16u, 16u), - MK_COL(240u, 16u, 16u), - MK_COL(16u, 240u, 16u), - MK_COL(240u, 240u, 16u), - MK_COL(16u, 16u, 240u), - MK_COL(240u, 16u, 240u), - MK_COL(16u, 240u, 240u), - MK_COL(240u, 240u, 240u), - MK_COL(0u, 0u, 232u), - MK_COL(0u, 232u, 0u), - MK_COL(232u, 0u, 0u), - MK_COL(0u, 0u, 24u), - MK_COL(0u, 24u, 0u), - MK_COL(24u, 0u, 0u), - MK_COL(32u, 32u, 32u), - MK_COL(224u, 32u, 32u), - MK_COL(32u, 224u, 32u), - MK_COL(224u, 224u, 32u), - MK_COL(32u, 32u, 224u), - MK_COL(224u, 32u, 224u), - MK_COL(32u, 224u, 224u), - MK_COL(224u, 224u, 224u), - MK_COL(0u, 0u, 176u), - MK_COL(0u, 0u, 80u), - MK_COL(0u, 176u, 0u), - MK_COL(0u, 176u, 176u), - MK_COL(0u, 176u, 80u), - MK_COL(0u, 80u, 0u), - MK_COL(0u, 80u, 176u), - MK_COL(0u, 80u, 80u), - MK_COL(176u, 0u, 0u), - MK_COL(176u, 0u, 176u), - MK_COL(176u, 0u, 80u), - MK_COL(176u, 176u, 0u), - MK_COL(176u, 80u, 0u), - MK_COL(80u, 0u, 0u), - MK_COL(80u, 0u, 176u), - MK_COL(80u, 0u, 80u), - MK_COL(80u, 176u, 0u), - MK_COL(80u, 80u, 0u), - MK_COL(0u, 0u, 152u), - MK_COL(0u, 0u, 104u), - MK_COL(0u, 152u, 0u), - MK_COL(0u, 152u, 152u), - MK_COL(0u, 152u, 104u), - MK_COL(0u, 104u, 0u), - MK_COL(0u, 104u, 152u), - MK_COL(0u, 104u, 104u), - MK_COL(152u, 0u, 0u), - MK_COL(152u, 0u, 152u), - MK_COL(152u, 0u, 104u), - MK_COL(152u, 152u, 0u), - MK_COL(152u, 104u, 0u), - MK_COL(104u, 0u, 0u), - MK_COL(104u, 0u, 152u), - MK_COL(104u, 0u, 104u), - MK_COL(104u, 152u, 0u), - MK_COL(104u, 104u, 0u), - MK_COL(216u, 216u, 216u), - MK_COL(216u, 216u, 40u), - MK_COL(216u, 216u, 176u), - MK_COL(216u, 216u, 80u), - MK_COL(216u, 40u, 216u), - MK_COL(216u, 40u, 40u), - MK_COL(216u, 40u, 176u), - MK_COL(216u, 40u, 80u), - MK_COL(216u, 176u, 216u), - MK_COL(216u, 176u, 40u), - MK_COL(216u, 176u, 176u), - MK_COL(216u, 176u, 80u), - MK_COL(216u, 80u, 216u), - MK_COL(216u, 80u, 40u), - MK_COL(216u, 80u, 176u), - MK_COL(216u, 80u, 80u), - MK_COL(40u, 216u, 216u), - MK_COL(40u, 216u, 40u), - MK_COL(40u, 216u, 176u), - MK_COL(40u, 216u, 80u), - MK_COL(40u, 40u, 216u), - MK_COL(40u, 40u, 40u), - MK_COL(40u, 40u, 176u), - MK_COL(40u, 40u, 80u), - MK_COL(40u, 176u, 216u), - MK_COL(40u, 176u, 40u), - MK_COL(40u, 176u, 176u), - MK_COL(40u, 176u, 80u), - MK_COL(40u, 80u, 216u), - MK_COL(40u, 80u, 40u), - MK_COL(40u, 80u, 176u), - MK_COL(40u, 80u, 80u), - MK_COL(80u, 216u, 216u), - MK_COL(80u, 216u, 40u), - MK_COL(80u, 216u, 176u), - MK_COL(80u, 216u, 80u), - MK_COL(80u, 40u, 216u), - MK_COL(80u, 40u, 40u), - MK_COL(80u, 40u, 176u), - MK_COL(80u, 40u, 80u), - MK_COL(80u, 176u, 216u), - MK_COL(80u, 176u, 40u), - MK_COL(80u, 176u, 176u), - MK_COL(80u, 176u, 80u), - MK_COL(80u, 80u, 216u), - MK_COL(80u, 80u, 40u), - MK_COL(80u, 80u, 176u), - MK_COL(80u, 80u, 80u), - MK_COL(0u, 0u, 192u), - MK_COL(0u, 0u, 64u), - MK_COL(0u, 0u, 128u), - MK_COL(0u, 192u, 0u), - MK_COL(0u, 192u, 192u), - MK_COL(0u, 192u, 64u), - MK_COL(0u, 192u, 128u), - MK_COL(0u, 64u, 0u), - MK_COL(0u, 64u, 192u), - MK_COL(0u, 64u, 64u), - MK_COL(0u, 64u, 128u), - MK_COL(0u, 128u, 0u), - MK_COL(0u, 128u, 192u), - MK_COL(0u, 128u, 64u), - MK_COL(0u, 128u, 128u), - MK_COL(176u, 216u, 216u), - MK_COL(176u, 216u, 40u), - MK_COL(176u, 216u, 176u), - MK_COL(176u, 216u, 80u), - MK_COL(176u, 40u, 216u), - MK_COL(176u, 40u, 40u), - MK_COL(176u, 40u, 176u), - MK_COL(176u, 40u, 80u), - MK_COL(176u, 176u, 216u), - MK_COL(176u, 176u, 40u), - MK_COL(176u, 176u, 176u), - MK_COL(176u, 176u, 80u), - MK_COL(176u, 80u, 216u), - MK_COL(176u, 80u, 40u), - MK_COL(176u, 80u, 176u), - MK_COL(176u, 80u, 80u), - MK_COL(192u, 0u, 0u), - MK_COL(192u, 0u, 192u), - MK_COL(192u, 0u, 64u), - MK_COL(192u, 0u, 128u), - MK_COL(192u, 192u, 0u), - MK_COL(192u, 192u, 192u), - MK_COL(192u, 192u, 64u), - MK_COL(192u, 192u, 128u), - MK_COL(192u, 64u, 0u), - MK_COL(192u, 64u, 192u), - MK_COL(192u, 64u, 64u), - MK_COL(192u, 64u, 128u), - MK_COL(192u, 128u, 0u), - MK_COL(192u, 128u, 192u), - MK_COL(192u, 128u, 64u), - MK_COL(192u, 128u, 128u), - MK_COL(64u, 0u, 0u), - MK_COL(64u, 0u, 192u), - MK_COL(64u, 0u, 64u), - MK_COL(64u, 0u, 128u), - MK_COL(64u, 192u, 0u), - MK_COL(64u, 192u, 192u), - MK_COL(64u, 192u, 64u), - MK_COL(64u, 192u, 128u), - MK_COL(64u, 64u, 0u), - MK_COL(64u, 64u, 192u), - MK_COL(64u, 64u, 64u), - MK_COL(64u, 64u, 128u), - MK_COL(64u, 128u, 0u), - MK_COL(64u, 128u, 192u), - MK_COL(64u, 128u, 64u), - MK_COL(64u, 128u, 128u), - MK_COL(128u, 0u, 0u), - MK_COL(128u, 0u, 192u), - MK_COL(128u, 0u, 64u), - MK_COL(128u, 0u, 128u), - MK_COL(128u, 192u, 0u), - MK_COL(128u, 192u, 192u), - MK_COL(128u, 192u, 64u), - MK_COL(128u, 192u, 128u), - MK_COL(128u, 64u, 0u), - MK_COL(128u, 64u, 192u), - MK_COL(128u, 64u, 64u), - MK_COL(128u, 64u, 128u), - MK_COL(128u, 128u, 0u), - MK_COL(128u, 128u, 192u), - MK_COL(128u, 128u, 64u), - MK_COL(128u, 128u, 128u), -}; - -#undef MK_COL - -//------------------------------------------------------------------------------ -// TODO(skal): move the functions to dsp/lossless.c when the correct -// granularity is found. For now, we'll just copy-paste some useful bits -// here instead. - -// In-place sum of each component with mod 256. -static WEBP_INLINE void AddPixelsEq(uint32_t* a, uint32_t b) { - const uint32_t alpha_and_green = (*a & 0xff00ff00u) + (b & 0xff00ff00u); - const uint32_t red_and_blue = (*a & 0x00ff00ffu) + (b & 0x00ff00ffu); - *a = (alpha_and_green & 0xff00ff00u) | (red_and_blue & 0x00ff00ffu); -} - -static WEBP_INLINE uint32_t Clip255(uint32_t a) { - if (a < 256) { - return a; - } - // return 0, when a is a negative integer. - // return 255, when a is positive. - return ~a >> 24; -} - -// Delta palettization functions. -static WEBP_INLINE int Square(int x) { - return x * x; -} - -static WEBP_INLINE uint32_t Intensity(uint32_t a) { - return - 30 * ((a >> 16) & 0xff) + - 59 * ((a >> 8) & 0xff) + - 11 * ((a >> 0) & 0xff); -} - -static uint32_t CalcDist(uint32_t predicted_value, uint32_t actual_value, - uint32_t palette_entry) { - int i; - uint32_t distance = 0; - AddPixelsEq(&predicted_value, palette_entry); - for (i = 0; i < 32; i += 8) { - const int32_t av = (actual_value >> i) & 0xff; - const int32_t pv = (predicted_value >> i) & 0xff; - distance += Square(pv - av); - } - // We sum square of intensity difference with factor 10, but because Intensity - // returns 100 times real intensity we need to multiply differences of colors - // by 1000. - distance *= 1000u; - distance += Square(Intensity(predicted_value) - - Intensity(actual_value)); - return distance; -} - -static uint32_t Predict(int x, int y, uint32_t* image) { - const uint32_t t = (y == 0) ? ARGB_BLACK : image[x]; - const uint32_t l = (x == 0) ? ARGB_BLACK : image[x - 1]; - const uint32_t p = - (((((t >> 24) & 0xff) + ((l >> 24) & 0xff)) / 2) << 24) + - (((((t >> 16) & 0xff) + ((l >> 16) & 0xff)) / 2) << 16) + - (((((t >> 8) & 0xff) + ((l >> 8) & 0xff)) / 2) << 8) + - (((((t >> 0) & 0xff) + ((l >> 0) & 0xff)) / 2) << 0); - if (x == 0 && y == 0) return ARGB_BLACK; - if (x == 0) return t; - if (y == 0) return l; - return p; -} - -static WEBP_INLINE int AddSubtractComponentFullWithCoefficient( - int a, int b, int c) { - return Clip255(a + ((b - c) >> 2)); -} - -static WEBP_INLINE uint32_t ClampedAddSubtractFullWithCoefficient( - uint32_t c0, uint32_t c1, uint32_t c2) { - const int a = AddSubtractComponentFullWithCoefficient( - c0 >> 24, c1 >> 24, c2 >> 24); - const int r = AddSubtractComponentFullWithCoefficient((c0 >> 16) & 0xff, - (c1 >> 16) & 0xff, - (c2 >> 16) & 0xff); - const int g = AddSubtractComponentFullWithCoefficient((c0 >> 8) & 0xff, - (c1 >> 8) & 0xff, - (c2 >> 8) & 0xff); - const int b = AddSubtractComponentFullWithCoefficient( - c0 & 0xff, c1 & 0xff, c2 & 0xff); - return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b; -} - -//------------------------------------------------------------------------------ - -// Find palette entry with minimum error from difference of actual pixel value -// and predicted pixel value. Propagate error of pixel to its top and left pixel -// in src array. Write predicted_value + palette_entry to new_image. Return -// index of best palette entry. -static int FindBestPaletteEntry(uint32_t src, uint32_t predicted_value, - const uint32_t palette[], int palette_size) { - int i; - int idx = 0; - uint32_t best_distance = CalcDist(predicted_value, src, palette[0]); - for (i = 1; i < palette_size; ++i) { - const uint32_t distance = CalcDist(predicted_value, src, palette[i]); - if (distance < best_distance) { - best_distance = distance; - idx = i; - } - } - return idx; -} - -static void ApplyBestPaletteEntry(int x, int y, - uint32_t new_value, uint32_t palette_value, - uint32_t* src, int src_stride, - uint32_t* new_image) { - AddPixelsEq(&new_value, palette_value); - if (x > 0) { - src[x - 1] = ClampedAddSubtractFullWithCoefficient(src[x - 1], - new_value, src[x]); - } - if (y > 0) { - src[x - src_stride] = - ClampedAddSubtractFullWithCoefficient(src[x - src_stride], - new_value, src[x]); - } - new_image[x] = new_value; -} - -//------------------------------------------------------------------------------ -// Main entry point - -static WebPEncodingError ApplyDeltaPalette(uint32_t* src, uint32_t* dst, - uint32_t src_stride, - uint32_t dst_stride, - const uint32_t* palette, - int palette_size, - int width, int height, - int num_passes) { - int x, y; - WebPEncodingError err = VP8_ENC_OK; - uint32_t* new_image = (uint32_t*)WebPSafeMalloc(width, sizeof(*new_image)); - uint8_t* const tmp_row = (uint8_t*)WebPSafeMalloc(width, sizeof(*tmp_row)); - if (new_image == NULL || tmp_row == NULL) { - err = VP8_ENC_ERROR_OUT_OF_MEMORY; - goto Error; - } - - while (num_passes--) { - uint32_t* cur_src = src; - uint32_t* cur_dst = dst; - for (y = 0; y < height; ++y) { - for (x = 0; x < width; ++x) { - const uint32_t predicted_value = Predict(x, y, new_image); - tmp_row[x] = FindBestPaletteEntry(cur_src[x], predicted_value, - palette, palette_size); - ApplyBestPaletteEntry(x, y, predicted_value, palette[tmp_row[x]], - cur_src, src_stride, new_image); - } - for (x = 0; x < width; ++x) { - cur_dst[x] = palette[tmp_row[x]]; - } - cur_src += src_stride; - cur_dst += dst_stride; - } - } - Error: - WebPSafeFree(new_image); - WebPSafeFree(tmp_row); - return err; -} - -// replaces enc->argb_ by a palettizable approximation of it, -// and generates optimal enc->palette_[] -WebPEncodingError WebPSearchOptimalDeltaPalette(VP8LEncoder* const enc) { - const WebPPicture* const pic = enc->pic_; - uint32_t* src = pic->argb; - uint32_t* dst = enc->argb_; - const int width = pic->width; - const int height = pic->height; - - WebPEncodingError err = VP8_ENC_OK; - memcpy(enc->palette_, kDeltaPalette, sizeof(kDeltaPalette)); - enc->palette_[DELTA_PALETTE_SIZE - 1] = src[0] - 0xff000000u; - enc->palette_size_ = DELTA_PALETTE_SIZE; - err = ApplyDeltaPalette(src, dst, pic->argb_stride, enc->current_width_, - enc->palette_, enc->palette_size_, - width, height, 2); - if (err != VP8_ENC_OK) goto Error; - - Error: - return err; -} - -#else // !WEBP_EXPERIMENTAL_FEATURES - -WebPEncodingError WebPSearchOptimalDeltaPalette(VP8LEncoder* const enc) { - (void)enc; - return VP8_ENC_ERROR_INVALID_CONFIGURATION; -} - -#endif // WEBP_EXPERIMENTAL_FEATURES diff --git a/thirdparty/libwebp/src/enc/delta_palettization_enc.h b/thirdparty/libwebp/src/enc/delta_palettization_enc.h deleted file mode 100644 index b15e2cd487..0000000000 --- a/thirdparty/libwebp/src/enc/delta_palettization_enc.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2015 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// Author: Mislav Bradac (mislavm@google.com) -// - -#ifndef WEBP_ENC_DELTA_PALETTIZATION_ENC_H_ -#define WEBP_ENC_DELTA_PALETTIZATION_ENC_H_ - -#include "src/webp/encode.h" -#include "src/enc/vp8li_enc.h" - -// Replaces enc->argb_[] input by a palettizable approximation of it, -// and generates optimal enc->palette_[]. -// This function can revert enc->use_palette_ / enc->use_predict_ flag -// if delta-palettization is not producing expected saving. -WebPEncodingError WebPSearchOptimalDeltaPalette(VP8LEncoder* const enc); - -#endif // WEBP_ENC_DELTA_PALETTIZATION_ENC_H_ diff --git a/thirdparty/libwebp/src/enc/histogram_enc.c b/thirdparty/libwebp/src/enc/histogram_enc.c index 9fdbc627a1..4e49e0a201 100644 --- a/thirdparty/libwebp/src/enc/histogram_enc.c +++ b/thirdparty/libwebp/src/enc/histogram_enc.c @@ -51,10 +51,12 @@ static void HistogramCopy(const VP8LHistogram* const src, VP8LHistogram* const dst) { uint32_t* const dst_literal = dst->literal_; const int dst_cache_bits = dst->palette_code_bits_; + const int literal_size = VP8LHistogramNumCodes(dst_cache_bits); const int histo_size = VP8LGetHistogramSize(dst_cache_bits); assert(src->palette_code_bits_ == dst_cache_bits); memcpy(dst, src, histo_size); dst->literal_ = dst_literal; + memcpy(dst->literal_, src->literal_, literal_size * sizeof(*dst->literal_)); } int VP8LGetHistogramSize(int cache_bits) { @@ -91,9 +93,19 @@ void VP8LHistogramCreate(VP8LHistogram* const p, VP8LHistogramStoreRefs(refs, p); } -void VP8LHistogramInit(VP8LHistogram* const p, int palette_code_bits) { +void VP8LHistogramInit(VP8LHistogram* const p, int palette_code_bits, + int init_arrays) { p->palette_code_bits_ = palette_code_bits; - HistogramClear(p); + if (init_arrays) { + HistogramClear(p); + } else { + p->trivial_symbol_ = 0; + p->bit_cost_ = 0.; + p->literal_cost_ = 0.; + p->red_cost_ = 0.; + p->blue_cost_ = 0.; + memset(p->is_used_, 0, sizeof(p->is_used_)); + } } VP8LHistogram* VP8LAllocateHistogram(int cache_bits) { @@ -104,37 +116,70 @@ VP8LHistogram* VP8LAllocateHistogram(int cache_bits) { histo = (VP8LHistogram*)memory; // literal_ won't necessary be aligned. histo->literal_ = (uint32_t*)(memory + sizeof(VP8LHistogram)); - VP8LHistogramInit(histo, cache_bits); + VP8LHistogramInit(histo, cache_bits, /*init_arrays=*/ 0); return histo; } +// Resets the pointers of the histograms to point to the bit buffer in the set. +static void HistogramSetResetPointers(VP8LHistogramSet* const set, + int cache_bits) { + int i; + const int histo_size = VP8LGetHistogramSize(cache_bits); + uint8_t* memory = (uint8_t*) (set->histograms); + memory += set->max_size * sizeof(*set->histograms); + for (i = 0; i < set->max_size; ++i) { + memory = (uint8_t*) WEBP_ALIGN(memory); + set->histograms[i] = (VP8LHistogram*) memory; + // literal_ won't necessary be aligned. + set->histograms[i]->literal_ = (uint32_t*)(memory + sizeof(VP8LHistogram)); + memory += histo_size; + } +} + +// Returns the total size of the VP8LHistogramSet. +static size_t HistogramSetTotalSize(int size, int cache_bits) { + const int histo_size = VP8LGetHistogramSize(cache_bits); + return (sizeof(VP8LHistogramSet) + size * (sizeof(VP8LHistogram*) + + histo_size + WEBP_ALIGN_CST)); +} + VP8LHistogramSet* VP8LAllocateHistogramSet(int size, int cache_bits) { int i; VP8LHistogramSet* set; - const int histo_size = VP8LGetHistogramSize(cache_bits); - const size_t total_size = - sizeof(*set) + size * (sizeof(*set->histograms) + - histo_size + WEBP_ALIGN_CST); + const size_t total_size = HistogramSetTotalSize(size, cache_bits); uint8_t* memory = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*memory)); if (memory == NULL) return NULL; set = (VP8LHistogramSet*)memory; memory += sizeof(*set); set->histograms = (VP8LHistogram**)memory; - memory += size * sizeof(*set->histograms); set->max_size = size; set->size = size; + HistogramSetResetPointers(set, cache_bits); for (i = 0; i < size; ++i) { - memory = (uint8_t*)WEBP_ALIGN(memory); - set->histograms[i] = (VP8LHistogram*)memory; - // literal_ won't necessary be aligned. - set->histograms[i]->literal_ = (uint32_t*)(memory + sizeof(VP8LHistogram)); - VP8LHistogramInit(set->histograms[i], cache_bits); - memory += histo_size; + VP8LHistogramInit(set->histograms[i], cache_bits, /*init_arrays=*/ 0); } return set; } +void VP8LHistogramSetClear(VP8LHistogramSet* const set) { + int i; + const int cache_bits = set->histograms[0]->palette_code_bits_; + const int size = set->size; + const size_t total_size = HistogramSetTotalSize(size, cache_bits); + uint8_t* memory = (uint8_t*)set; + + memset(memory, 0, total_size); + memory += sizeof(*set); + set->histograms = (VP8LHistogram**)memory; + set->max_size = size; + set->size = size; + HistogramSetResetPointers(set, cache_bits); + for (i = 0; i < size; ++i) { + set->histograms[i]->palette_code_bits_ = cache_bits; + } +} + // ----------------------------------------------------------------------------- void VP8LHistogramAddSinglePixOrCopy(VP8LHistogram* const histo, @@ -237,7 +282,8 @@ static double FinalHuffmanCost(const VP8LStreaks* const stats) { // Get the symbol entropy for the distribution 'population'. // Set 'trivial_sym', if there's only one symbol present in the distribution. static double PopulationCost(const uint32_t* const population, int length, - uint32_t* const trivial_sym) { + uint32_t* const trivial_sym, + uint8_t* const is_used) { VP8LBitEntropy bit_entropy; VP8LStreaks stats; VP8LGetEntropyUnrefined(population, length, &bit_entropy, &stats); @@ -245,6 +291,8 @@ static double PopulationCost(const uint32_t* const population, int length, *trivial_sym = (bit_entropy.nonzeros == 1) ? bit_entropy.nonzero_code : VP8L_NON_TRIVIAL_SYM; } + // The histogram is used if there is at least one non-zero streak. + *is_used = (stats.streaks[1][0] != 0 || stats.streaks[1][1] != 0); return BitsEntropyRefine(&bit_entropy) + FinalHuffmanCost(&stats); } @@ -253,7 +301,9 @@ static double PopulationCost(const uint32_t* const population, int length, // non-zero: both the zero-th one, or both the last one. static WEBP_INLINE double GetCombinedEntropy(const uint32_t* const X, const uint32_t* const Y, - int length, int trivial_at_end) { + int length, int is_X_used, + int is_Y_used, + int trivial_at_end) { VP8LStreaks stats; if (trivial_at_end) { // This configuration is due to palettization that transforms an indexed @@ -262,28 +312,43 @@ static WEBP_INLINE double GetCombinedEntropy(const uint32_t* const X, // Only FinalHuffmanCost needs to be evaluated. memset(&stats, 0, sizeof(stats)); // Deal with the non-zero value at index 0 or length-1. - stats.streaks[1][0] += 1; + stats.streaks[1][0] = 1; // Deal with the following/previous zero streak. - stats.counts[0] += 1; - stats.streaks[0][1] += length - 1; + stats.counts[0] = 1; + stats.streaks[0][1] = length - 1; return FinalHuffmanCost(&stats); } else { VP8LBitEntropy bit_entropy; - VP8LGetCombinedEntropyUnrefined(X, Y, length, &bit_entropy, &stats); + if (is_X_used) { + if (is_Y_used) { + VP8LGetCombinedEntropyUnrefined(X, Y, length, &bit_entropy, &stats); + } else { + VP8LGetEntropyUnrefined(X, length, &bit_entropy, &stats); + } + } else { + if (is_Y_used) { + VP8LGetEntropyUnrefined(Y, length, &bit_entropy, &stats); + } else { + memset(&stats, 0, sizeof(stats)); + stats.counts[0] = 1; + stats.streaks[0][length > 3] = length; + VP8LBitEntropyInit(&bit_entropy); + } + } return BitsEntropyRefine(&bit_entropy) + FinalHuffmanCost(&stats); } } // Estimates the Entropy + Huffman + other block overhead size cost. -double VP8LHistogramEstimateBits(const VP8LHistogram* const p) { +double VP8LHistogramEstimateBits(VP8LHistogram* const p) { return - PopulationCost( - p->literal_, VP8LHistogramNumCodes(p->palette_code_bits_), NULL) - + PopulationCost(p->red_, NUM_LITERAL_CODES, NULL) - + PopulationCost(p->blue_, NUM_LITERAL_CODES, NULL) - + PopulationCost(p->alpha_, NUM_LITERAL_CODES, NULL) - + PopulationCost(p->distance_, NUM_DISTANCE_CODES, NULL) + PopulationCost(p->literal_, VP8LHistogramNumCodes(p->palette_code_bits_), + NULL, &p->is_used_[0]) + + PopulationCost(p->red_, NUM_LITERAL_CODES, NULL, &p->is_used_[1]) + + PopulationCost(p->blue_, NUM_LITERAL_CODES, NULL, &p->is_used_[2]) + + PopulationCost(p->alpha_, NUM_LITERAL_CODES, NULL, &p->is_used_[3]) + + PopulationCost(p->distance_, NUM_DISTANCE_CODES, NULL, &p->is_used_[4]) + VP8LExtraCost(p->literal_ + NUM_LITERAL_CODES, NUM_LENGTH_CODES) + VP8LExtraCost(p->distance_, NUM_DISTANCE_CODES); } @@ -299,7 +364,8 @@ static int GetCombinedHistogramEntropy(const VP8LHistogram* const a, int trivial_at_end = 0; assert(a->palette_code_bits_ == b->palette_code_bits_); *cost += GetCombinedEntropy(a->literal_, b->literal_, - VP8LHistogramNumCodes(palette_code_bits), 0); + VP8LHistogramNumCodes(palette_code_bits), + a->is_used_[0], b->is_used_[0], 0); *cost += VP8LExtraCostCombined(a->literal_ + NUM_LITERAL_CODES, b->literal_ + NUM_LITERAL_CODES, NUM_LENGTH_CODES); @@ -319,19 +385,23 @@ static int GetCombinedHistogramEntropy(const VP8LHistogram* const a, } *cost += - GetCombinedEntropy(a->red_, b->red_, NUM_LITERAL_CODES, trivial_at_end); + GetCombinedEntropy(a->red_, b->red_, NUM_LITERAL_CODES, a->is_used_[1], + b->is_used_[1], trivial_at_end); if (*cost > cost_threshold) return 0; *cost += - GetCombinedEntropy(a->blue_, b->blue_, NUM_LITERAL_CODES, trivial_at_end); + GetCombinedEntropy(a->blue_, b->blue_, NUM_LITERAL_CODES, a->is_used_[2], + b->is_used_[2], trivial_at_end); if (*cost > cost_threshold) return 0; - *cost += GetCombinedEntropy(a->alpha_, b->alpha_, NUM_LITERAL_CODES, - trivial_at_end); + *cost += + GetCombinedEntropy(a->alpha_, b->alpha_, NUM_LITERAL_CODES, + a->is_used_[3], b->is_used_[3], trivial_at_end); if (*cost > cost_threshold) return 0; *cost += - GetCombinedEntropy(a->distance_, b->distance_, NUM_DISTANCE_CODES, 0); + GetCombinedEntropy(a->distance_, b->distance_, NUM_DISTANCE_CODES, + a->is_used_[4], b->is_used_[4], 0); *cost += VP8LExtraCostCombined(a->distance_, b->distance_, NUM_DISTANCE_CODES); if (*cost > cost_threshold) return 0; @@ -419,16 +489,19 @@ static void UpdateDominantCostRange( static void UpdateHistogramCost(VP8LHistogram* const h) { uint32_t alpha_sym, red_sym, blue_sym; const double alpha_cost = - PopulationCost(h->alpha_, NUM_LITERAL_CODES, &alpha_sym); + PopulationCost(h->alpha_, NUM_LITERAL_CODES, &alpha_sym, + &h->is_used_[3]); const double distance_cost = - PopulationCost(h->distance_, NUM_DISTANCE_CODES, NULL) + + PopulationCost(h->distance_, NUM_DISTANCE_CODES, NULL, &h->is_used_[4]) + VP8LExtraCost(h->distance_, NUM_DISTANCE_CODES); const int num_codes = VP8LHistogramNumCodes(h->palette_code_bits_); - h->literal_cost_ = PopulationCost(h->literal_, num_codes, NULL) + - VP8LExtraCost(h->literal_ + NUM_LITERAL_CODES, - NUM_LENGTH_CODES); - h->red_cost_ = PopulationCost(h->red_, NUM_LITERAL_CODES, &red_sym); - h->blue_cost_ = PopulationCost(h->blue_, NUM_LITERAL_CODES, &blue_sym); + h->literal_cost_ = + PopulationCost(h->literal_, num_codes, NULL, &h->is_used_[0]) + + VP8LExtraCost(h->literal_ + NUM_LITERAL_CODES, NUM_LENGTH_CODES); + h->red_cost_ = + PopulationCost(h->red_, NUM_LITERAL_CODES, &red_sym, &h->is_used_[1]); + h->blue_cost_ = + PopulationCost(h->blue_, NUM_LITERAL_CODES, &blue_sym, &h->is_used_[2]); h->bit_cost_ = h->literal_cost_ + h->red_cost_ + h->blue_cost_ + alpha_cost + distance_cost; if ((alpha_sym | red_sym | blue_sym) == VP8L_NON_TRIVIAL_SYM) { @@ -473,6 +546,7 @@ static void HistogramBuild( VP8LHistogram** const histograms = image_histo->histograms; VP8LRefsCursor c = VP8LRefsCursorInit(backward_refs); assert(histo_bits > 0); + VP8LHistogramSetClear(image_histo); while (VP8LRefsCursorOk(&c)) { const PixOrCopy* const v = c.cur_pos; const int ix = (y >> histo_bits) * histo_xsize + (x >> histo_bits); @@ -493,11 +567,19 @@ static void HistogramCopyAndAnalyze( const int histo_size = orig_histo->size; VP8LHistogram** const orig_histograms = orig_histo->histograms; VP8LHistogram** const histograms = image_histo->histograms; + image_histo->size = 0; for (i = 0; i < histo_size; ++i) { VP8LHistogram* const histo = orig_histograms[i]; UpdateHistogramCost(histo); + + // Skip the histogram if it is completely empty, which can happen for tiles + // with no information (when they are skipped because of LZ77). + if (!histo->is_used_[0] && !histo->is_used_[1] && !histo->is_used_[2] + && !histo->is_used_[3] && !histo->is_used_[4]) { + continue; + } // Copy histograms from orig_histo[] to image_histo[]. - HistogramCopy(histo, histograms[i]); + HistogramCopy(histo, histograms[image_histo->size++]); } } @@ -674,6 +756,18 @@ static void HistoQueueUpdateHead(HistoQueue* const histo_queue, } } +// Update the cost diff and combo of a pair of histograms. This needs to be +// called when the the histograms have been merged with a third one. +static void HistoQueueUpdatePair(const VP8LHistogram* const h1, + const VP8LHistogram* const h2, + double threshold, + HistogramPair* const pair) { + const double sum_cost = h1->bit_cost_ + h2->bit_cost_; + pair->cost_combo = 0.; + GetCombinedHistogramEntropy(h1, h2, sum_cost + threshold, &pair->cost_combo); + pair->cost_diff = pair->cost_combo - sum_cost; +} + // Create a pair from indices "idx1" and "idx2" provided its cost // is inferior to "threshold", a negative entropy. // It returns the cost of the pair, or 0. if it superior to threshold. @@ -683,7 +777,6 @@ static double HistoQueuePush(HistoQueue* const histo_queue, const VP8LHistogram* h1; const VP8LHistogram* h2; HistogramPair pair; - double sum_cost; assert(threshold <= 0.); if (idx1 > idx2) { @@ -695,10 +788,8 @@ static double HistoQueuePush(HistoQueue* const histo_queue, pair.idx2 = idx2; h1 = histograms[idx1]; h2 = histograms[idx2]; - sum_cost = h1->bit_cost_ + h2->bit_cost_; - pair.cost_combo = 0.; - GetCombinedHistogramEntropy(h1, h2, sum_cost + threshold, &pair.cost_combo); - pair.cost_diff = pair.cost_combo - sum_cost; + + HistoQueueUpdatePair(h1, h2, threshold, &pair); // Do not even consider the pair if it does not improve the entropy. if (pair.cost_diff >= threshold) return 0.; @@ -891,8 +982,7 @@ static int HistogramCombineStochastic(VP8LHistogramSet* const image_histo, } if (do_eval) { // Re-evaluate the cost of an updated pair. - GetCombinedHistogramEntropy(histograms[p->idx1], histograms[p->idx2], 0, - &p->cost_diff); + HistoQueueUpdatePair(histograms[p->idx1], histograms[p->idx2], 0., p); if (p->cost_diff >= 0.) { HistoQueuePopPair(&histo_queue, p); continue; @@ -987,8 +1077,7 @@ int VP8LGetHistoImageSymbols(int xsize, int ysize, // histograms of small sizes (as bin_map will be very sparse) and // maximum quality q==100 (to preserve the compression gains at that level). const int entropy_combine_num_bins = low_effort ? NUM_PARTITIONS : BIN_SIZE; - const int entropy_combine = - (orig_histo->size > entropy_combine_num_bins * 2) && (quality < 100); + int entropy_combine; if (orig_histo == NULL) goto Error; @@ -996,15 +1085,16 @@ int VP8LGetHistoImageSymbols(int xsize, int ysize, HistogramBuild(xsize, histo_bits, refs, orig_histo); // Copies the histograms and computes its bit_cost. HistogramCopyAndAnalyze(orig_histo, image_histo); - + entropy_combine = + (image_histo->size > entropy_combine_num_bins * 2) && (quality < 100); if (entropy_combine) { - const int bin_map_size = orig_histo->size; + const int bin_map_size = image_histo->size; // Reuse histogram_symbols storage. By definition, it's guaranteed to be ok. uint16_t* const bin_map = histogram_symbols; const double combine_cost_factor = GetCombineCostFactor(image_histo_raw_size, quality); - HistogramAnalyzeEntropyBin(orig_histo, bin_map, low_effort); + HistogramAnalyzeEntropyBin(image_histo, bin_map, low_effort); // Collapse histograms with similar entropy. HistogramCombineEntropyBin(image_histo, tmp_histo, bin_map, bin_map_size, entropy_combine_num_bins, combine_cost_factor, diff --git a/thirdparty/libwebp/src/enc/histogram_enc.h b/thirdparty/libwebp/src/enc/histogram_enc.h index e8c4c83f6f..54c2d21783 100644 --- a/thirdparty/libwebp/src/enc/histogram_enc.h +++ b/thirdparty/libwebp/src/enc/histogram_enc.h @@ -44,6 +44,7 @@ typedef struct { double literal_cost_; // Cached values of dominant entropy costs: double red_cost_; // literal, red & blue. double blue_cost_; + uint8_t is_used_[5]; // 5 for literal, red, blue, alpha, distance } VP8LHistogram; // Collection of histograms with fixed capacity, allocated as one @@ -67,7 +68,9 @@ void VP8LHistogramCreate(VP8LHistogram* const p, int VP8LGetHistogramSize(int palette_code_bits); // Set the palette_code_bits and reset the stats. -void VP8LHistogramInit(VP8LHistogram* const p, int palette_code_bits); +// If init_arrays is true, the arrays are also filled with 0's. +void VP8LHistogramInit(VP8LHistogram* const p, int palette_code_bits, + int init_arrays); // Collect all the references into a histogram (without reset) void VP8LHistogramStoreRefs(const VP8LBackwardRefs* const refs, @@ -83,6 +86,9 @@ void VP8LFreeHistogramSet(VP8LHistogramSet* const histo); // using 'cache_bits'. Return NULL in case of memory error. VP8LHistogramSet* VP8LAllocateHistogramSet(int size, int cache_bits); +// Set the histograms in set to 0. +void VP8LHistogramSetClear(VP8LHistogramSet* const set); + // Allocate and initialize histogram object with specified 'cache_bits'. // Returns NULL in case of memory error. // Special case of VP8LAllocateHistogramSet, with size equals 1. @@ -113,7 +119,7 @@ double VP8LBitsEntropy(const uint32_t* const array, int n); // Estimate how many bits the combined entropy of literals and distance // approximately maps to. -double VP8LHistogramEstimateBits(const VP8LHistogram* const p); +double VP8LHistogramEstimateBits(VP8LHistogram* const p); #ifdef __cplusplus } diff --git a/thirdparty/libwebp/src/enc/iterator_enc.c b/thirdparty/libwebp/src/enc/iterator_enc.c index 7c47d51272..29f91d8315 100644 --- a/thirdparty/libwebp/src/enc/iterator_enc.c +++ b/thirdparty/libwebp/src/enc/iterator_enc.c @@ -128,7 +128,7 @@ static void ImportLine(const uint8_t* src, int src_stride, for (; i < total_len; ++i) dst[i] = dst[len - 1]; } -void VP8IteratorImport(VP8EncIterator* const it, uint8_t* tmp_32) { +void VP8IteratorImport(VP8EncIterator* const it, uint8_t* const tmp_32) { const VP8Encoder* const enc = it->enc_; const int x = it->x_, y = it->y_; const WebPPicture* const pic = enc->pic_; diff --git a/thirdparty/libwebp/src/enc/picture_tools_enc.c b/thirdparty/libwebp/src/enc/picture_tools_enc.c index be292d4391..d0e8a495da 100644 --- a/thirdparty/libwebp/src/enc/picture_tools_enc.c +++ b/thirdparty/libwebp/src/enc/picture_tools_enc.c @@ -16,10 +16,6 @@ #include "src/enc/vp8i_enc.h" #include "src/dsp/yuv.h" -static WEBP_INLINE uint32_t MakeARGB32(int r, int g, int b) { - return (0xff000000u | (r << 16) | (g << 8) | b); -} - //------------------------------------------------------------------------------ // Helper: clean up fully transparent area to help compressibility. @@ -195,6 +191,10 @@ void WebPCleanupTransparentAreaLossless(WebPPicture* const pic) { #define BLEND_10BIT(V0, V1, ALPHA) \ ((((V0) * (1020 - (ALPHA)) + (V1) * (ALPHA)) * 0x101 + 1024) >> 18) +static WEBP_INLINE uint32_t MakeARGB32(int r, int g, int b) { + return (0xff000000u | (r << 16) | (g << 8) | b); +} + void WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb) { const int red = (background_rgb >> 16) & 0xff; const int green = (background_rgb >> 8) & 0xff; @@ -208,39 +208,44 @@ void WebPBlendAlpha(WebPPicture* pic, uint32_t background_rgb) { const int U0 = VP8RGBToU(4 * red, 4 * green, 4 * blue, 4 * YUV_HALF); const int V0 = VP8RGBToV(4 * red, 4 * green, 4 * blue, 4 * YUV_HALF); const int has_alpha = pic->colorspace & WEBP_CSP_ALPHA_BIT; - if (!has_alpha || pic->a == NULL) return; // nothing to do + uint8_t* y_ptr = pic->y; + uint8_t* u_ptr = pic->u; + uint8_t* v_ptr = pic->v; + uint8_t* a_ptr = pic->a; + if (!has_alpha || a_ptr == NULL) return; // nothing to do for (y = 0; y < pic->height; ++y) { // Luma blending - uint8_t* const y_ptr = pic->y + y * pic->y_stride; - uint8_t* const a_ptr = pic->a + y * pic->a_stride; for (x = 0; x < pic->width; ++x) { - const int alpha = a_ptr[x]; + const uint8_t alpha = a_ptr[x]; if (alpha < 0xff) { - y_ptr[x] = BLEND(Y0, y_ptr[x], a_ptr[x]); + y_ptr[x] = BLEND(Y0, y_ptr[x], alpha); } } // Chroma blending every even line if ((y & 1) == 0) { - uint8_t* const u = pic->u + (y >> 1) * pic->uv_stride; - uint8_t* const v = pic->v + (y >> 1) * pic->uv_stride; uint8_t* const a_ptr2 = (y + 1 == pic->height) ? a_ptr : a_ptr + pic->a_stride; for (x = 0; x < uv_width; ++x) { // Average four alpha values into a single blending weight. // TODO(skal): might lead to visible contouring. Can we do better? - const int alpha = + const uint32_t alpha = a_ptr[2 * x + 0] + a_ptr[2 * x + 1] + a_ptr2[2 * x + 0] + a_ptr2[2 * x + 1]; - u[x] = BLEND_10BIT(U0, u[x], alpha); - v[x] = BLEND_10BIT(V0, v[x], alpha); + u_ptr[x] = BLEND_10BIT(U0, u_ptr[x], alpha); + v_ptr[x] = BLEND_10BIT(V0, v_ptr[x], alpha); } if (pic->width & 1) { // rightmost pixel - const int alpha = 2 * (a_ptr[2 * x + 0] + a_ptr2[2 * x + 0]); - u[x] = BLEND_10BIT(U0, u[x], alpha); - v[x] = BLEND_10BIT(V0, v[x], alpha); + const uint32_t alpha = 2 * (a_ptr[2 * x + 0] + a_ptr2[2 * x + 0]); + u_ptr[x] = BLEND_10BIT(U0, u_ptr[x], alpha); + v_ptr[x] = BLEND_10BIT(V0, v_ptr[x], alpha); } + } else { + u_ptr += pic->uv_stride; + v_ptr += pic->uv_stride; } - memset(a_ptr, 0xff, pic->width); + memset(a_ptr, 0xff, pic->width); // reset alpha value to opaque + a_ptr += pic->a_stride; + y_ptr += pic->y_stride; } } else { uint32_t* argb = pic->argb; diff --git a/thirdparty/libwebp/src/enc/vp8i_enc.h b/thirdparty/libwebp/src/enc/vp8i_enc.h index 624e8f8e66..92439febb8 100644 --- a/thirdparty/libwebp/src/enc/vp8i_enc.h +++ b/thirdparty/libwebp/src/enc/vp8i_enc.h @@ -32,7 +32,7 @@ extern "C" { // version numbers #define ENC_MAJ_VERSION 1 #define ENC_MIN_VERSION 0 -#define ENC_REV_VERSION 0 +#define ENC_REV_VERSION 1 enum { MAX_LF_LEVELS = 64, // Maximum loop filter level MAX_VARIABLE_LEVEL = 67, // last (inclusive) level with variable cost @@ -278,7 +278,7 @@ int VP8IteratorIsDone(const VP8EncIterator* const it); // Import uncompressed samples from source. // If tmp_32 is not NULL, import boundary samples too. // tmp_32 is a 32-bytes scratch buffer that must be aligned in memory. -void VP8IteratorImport(VP8EncIterator* const it, uint8_t* tmp_32); +void VP8IteratorImport(VP8EncIterator* const it, uint8_t* const tmp_32); // export decimated samples void VP8IteratorExport(const VP8EncIterator* const it); // go to next macroblock. Returns false if not finished. @@ -515,4 +515,4 @@ void WebPCleanupTransparentAreaLossless(WebPPicture* const pic); } // extern "C" #endif -#endif /* WEBP_ENC_VP8I_ENC_H_ */ +#endif // WEBP_ENC_VP8I_ENC_H_ diff --git a/thirdparty/libwebp/src/enc/vp8l_enc.c b/thirdparty/libwebp/src/enc/vp8l_enc.c index a89184eb08..2713edcd95 100644 --- a/thirdparty/libwebp/src/enc/vp8l_enc.c +++ b/thirdparty/libwebp/src/enc/vp8l_enc.c @@ -809,6 +809,7 @@ static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw, err = VP8_ENC_ERROR_OUT_OF_MEMORY; goto Error; } + VP8LHistogramSetClear(histogram_image); // Build histogram image and symbols from backward references. VP8LHistogramStoreRefs(refs, histogram_image->histograms[0]); @@ -1248,14 +1249,20 @@ static WebPEncodingError MakeInputImageCopy(VP8LEncoder* const enc) { const WebPPicture* const picture = enc->pic_; const int width = picture->width; const int height = picture->height; - int y; + err = AllocateTransformBuffer(enc, width, height); if (err != VP8_ENC_OK) return err; if (enc->argb_content_ == kEncoderARGB) return VP8_ENC_OK; - for (y = 0; y < height; ++y) { - memcpy(enc->argb_ + y * width, - picture->argb + y * picture->argb_stride, - width * sizeof(*enc->argb_)); + + { + uint32_t* dst = enc->argb_; + const uint32_t* src = picture->argb; + int y; + for (y = 0; y < height; ++y) { + memcpy(dst, src, width * sizeof(*dst)); + dst += width; + src += picture->argb_stride; + } } enc->argb_content_ = kEncoderARGB; assert(enc->current_width_ == width); diff --git a/thirdparty/libwebp/src/enc/vp8li_enc.h b/thirdparty/libwebp/src/enc/vp8li_enc.h index 298a4a0014..d2d0fc509c 100644 --- a/thirdparty/libwebp/src/enc/vp8li_enc.h +++ b/thirdparty/libwebp/src/enc/vp8li_enc.h @@ -115,4 +115,4 @@ void VP8LColorSpaceTransform(int width, int height, int bits, int quality, } // extern "C" #endif -#endif /* WEBP_ENC_VP8LI_ENC_H_ */ +#endif // WEBP_ENC_VP8LI_ENC_H_ diff --git a/thirdparty/libwebp/src/mux/animi.h b/thirdparty/libwebp/src/mux/animi.h index 88899532aa..34c45ba4da 100644 --- a/thirdparty/libwebp/src/mux/animi.h +++ b/thirdparty/libwebp/src/mux/animi.h @@ -40,4 +40,4 @@ int WebPAnimEncoderRefineRect( } // extern "C" #endif -#endif /* WEBP_MUX_ANIMI_H_ */ +#endif // WEBP_MUX_ANIMI_H_ diff --git a/thirdparty/libwebp/src/mux/muxedit.c b/thirdparty/libwebp/src/mux/muxedit.c index 7a027b3cb4..ccf14b2a0c 100644 --- a/thirdparty/libwebp/src/mux/muxedit.c +++ b/thirdparty/libwebp/src/mux/muxedit.c @@ -69,12 +69,12 @@ void WebPMuxDelete(WebPMux* mux) { if (idx == (INDEX)) { \ err = ChunkAssignData(&chunk, data, copy_data, tag); \ if (err == WEBP_MUX_OK) { \ - err = ChunkSetNth(&chunk, (LIST), nth); \ + err = ChunkSetHead(&chunk, (LIST)); \ } \ return err; \ } -static WebPMuxError MuxSet(WebPMux* const mux, uint32_t tag, uint32_t nth, +static WebPMuxError MuxSet(WebPMux* const mux, uint32_t tag, const WebPData* const data, int copy_data) { WebPChunk chunk; WebPMuxError err = WEBP_MUX_NOT_FOUND; @@ -190,7 +190,7 @@ WebPMuxError WebPMuxSetChunk(WebPMux* mux, const char fourcc[4], if (err != WEBP_MUX_OK && err != WEBP_MUX_NOT_FOUND) return err; // Add the given chunk. - return MuxSet(mux, tag, 1, chunk_data, copy_data); + return MuxSet(mux, tag, chunk_data, copy_data); } // Creates a chunk from given 'data' and sets it as 1st chunk in 'chunk_list'. @@ -202,7 +202,7 @@ static WebPMuxError AddDataToChunkList( ChunkInit(&chunk); err = ChunkAssignData(&chunk, data, copy_data, tag); if (err != WEBP_MUX_OK) goto Err; - err = ChunkSetNth(&chunk, chunk_list, 1); + err = ChunkSetHead(&chunk, chunk_list); if (err != WEBP_MUX_OK) goto Err; return WEBP_MUX_OK; Err: @@ -266,14 +266,14 @@ WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* info, int copy_data) { WebPMuxImage wpi; WebPMuxError err; - const WebPData* const bitstream = &info->bitstream; // Sanity checks. if (mux == NULL || info == NULL) return WEBP_MUX_INVALID_ARGUMENT; if (info->id != WEBP_CHUNK_ANMF) return WEBP_MUX_INVALID_ARGUMENT; - if (bitstream->bytes == NULL || bitstream->size > MAX_CHUNK_PAYLOAD) { + if (info->bitstream.bytes == NULL || + info->bitstream.size > MAX_CHUNK_PAYLOAD) { return WEBP_MUX_INVALID_ARGUMENT; } @@ -287,7 +287,7 @@ WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* info, } MuxImageInit(&wpi); - err = SetAlphaAndImageChunks(bitstream, copy_data, &wpi); + err = SetAlphaAndImageChunks(&info->bitstream, copy_data, &wpi); if (err != WEBP_MUX_OK) goto Err; assert(wpi.img_ != NULL); // As SetAlphaAndImageChunks() was successful. @@ -342,7 +342,7 @@ WebPMuxError WebPMuxSetAnimationParams(WebPMux* mux, // Set the animation parameters. PutLE32(data, params->bgcolor); PutLE16(data + 4, params->loop_count); - return MuxSet(mux, kChunks[IDX_ANIM].tag, 1, &anim, 1); + return MuxSet(mux, kChunks[IDX_ANIM].tag, &anim, 1); } WebPMuxError WebPMuxSetCanvasSize(WebPMux* mux, @@ -540,7 +540,7 @@ static WebPMuxError CreateVP8XChunk(WebPMux* const mux) { PutLE24(data + 4, width - 1); // canvas width. PutLE24(data + 7, height - 1); // canvas height. - return MuxSet(mux, kChunks[IDX_VP8X].tag, 1, &vp8x, 1); + return MuxSet(mux, kChunks[IDX_VP8X].tag, &vp8x, 1); } // Cleans up 'mux' by removing any unnecessary chunks. diff --git a/thirdparty/libwebp/src/mux/muxi.h b/thirdparty/libwebp/src/mux/muxi.h index 6b57eea30f..df9f74c63c 100644 --- a/thirdparty/libwebp/src/mux/muxi.h +++ b/thirdparty/libwebp/src/mux/muxi.h @@ -14,6 +14,7 @@ #ifndef WEBP_MUX_MUXI_H_ #define WEBP_MUX_MUXI_H_ +#include <assert.h> #include <stdlib.h> #include "src/dec/vp8i_dec.h" #include "src/dec/vp8li_dec.h" @@ -28,7 +29,7 @@ extern "C" { #define MUX_MAJ_VERSION 1 #define MUX_MIN_VERSION 0 -#define MUX_REV_VERSION 0 +#define MUX_REV_VERSION 1 // Chunk object. typedef struct WebPChunk WebPChunk; @@ -126,11 +127,14 @@ WebPChunk* ChunkSearchList(WebPChunk* first, uint32_t nth, uint32_t tag); WebPMuxError ChunkAssignData(WebPChunk* chunk, const WebPData* const data, int copy_data, uint32_t tag); -// Sets 'chunk' at nth position in the 'chunk_list'. -// nth = 0 has the special meaning "last of the list". +// Sets 'chunk' as the only element in 'chunk_list' if it is empty. // On success ownership is transferred from 'chunk' to the 'chunk_list'. -WebPMuxError ChunkSetNth(WebPChunk* chunk, WebPChunk** chunk_list, - uint32_t nth); +WebPMuxError ChunkSetHead(WebPChunk* const chunk, WebPChunk** const chunk_list); +// Sets 'chunk' at last position in the 'chunk_list'. +// On success ownership is transferred from 'chunk' to the 'chunk_list'. +// *chunk_list also points towards the last valid element of the initial +// *chunk_list. +WebPMuxError ChunkAppend(WebPChunk* const chunk, WebPChunk*** const chunk_list); // Releases chunk and returns chunk->next_. WebPChunk* ChunkRelease(WebPChunk* const chunk); @@ -143,13 +147,13 @@ void ChunkListDelete(WebPChunk** const chunk_list); // Returns size of the chunk including chunk header and padding byte (if any). static WEBP_INLINE size_t SizeWithPadding(size_t chunk_size) { + assert(chunk_size <= MAX_CHUNK_PAYLOAD); return CHUNK_HEADER_SIZE + ((chunk_size + 1) & ~1U); } // Size of a chunk including header and padding. static WEBP_INLINE size_t ChunkDiskSize(const WebPChunk* chunk) { const size_t data_size = chunk->data_.size; - assert(data_size < MAX_CHUNK_PAYLOAD); return SizeWithPadding(data_size); } @@ -227,4 +231,4 @@ WebPMuxError MuxValidate(const WebPMux* const mux); } // extern "C" #endif -#endif /* WEBP_MUX_MUXI_H_ */ +#endif // WEBP_MUX_MUXI_H_ diff --git a/thirdparty/libwebp/src/mux/muxinternal.c b/thirdparty/libwebp/src/mux/muxinternal.c index 1473f100e5..b9ee6717d3 100644 --- a/thirdparty/libwebp/src/mux/muxinternal.c +++ b/thirdparty/libwebp/src/mux/muxinternal.c @@ -111,27 +111,6 @@ WebPChunk* ChunkSearchList(WebPChunk* first, uint32_t nth, uint32_t tag) { return ((nth > 0) && (iter > 0)) ? NULL : first; } -// Outputs a pointer to 'prev_chunk->next_', -// where 'prev_chunk' is the pointer to the chunk at position (nth - 1). -// Returns true if nth chunk was found. -static int ChunkSearchListToSet(WebPChunk** chunk_list, uint32_t nth, - WebPChunk*** const location) { - uint32_t count = 0; - assert(chunk_list != NULL); - *location = chunk_list; - - while (*chunk_list != NULL) { - WebPChunk* const cur_chunk = *chunk_list; - ++count; - if (count == nth) return 1; // Found. - chunk_list = &cur_chunk->next_; - *location = chunk_list; - } - - // *chunk_list is ok to be NULL if adding at last location. - return (nth == 0 || (count == nth - 1)) ? 1 : 0; -} - //------------------------------------------------------------------------------ // Chunk writer methods. @@ -156,11 +135,12 @@ WebPMuxError ChunkAssignData(WebPChunk* chunk, const WebPData* const data, return WEBP_MUX_OK; } -WebPMuxError ChunkSetNth(WebPChunk* chunk, WebPChunk** chunk_list, - uint32_t nth) { +WebPMuxError ChunkSetHead(WebPChunk* const chunk, + WebPChunk** const chunk_list) { WebPChunk* new_chunk; - if (!ChunkSearchListToSet(chunk_list, nth, &chunk_list)) { + assert(chunk_list != NULL); + if (*chunk_list != NULL) { return WEBP_MUX_NOT_FOUND; } @@ -168,11 +148,26 @@ WebPMuxError ChunkSetNth(WebPChunk* chunk, WebPChunk** chunk_list, if (new_chunk == NULL) return WEBP_MUX_MEMORY_ERROR; *new_chunk = *chunk; chunk->owner_ = 0; - new_chunk->next_ = *chunk_list; + new_chunk->next_ = NULL; *chunk_list = new_chunk; return WEBP_MUX_OK; } +WebPMuxError ChunkAppend(WebPChunk* const chunk, + WebPChunk*** const chunk_list) { + assert(chunk_list != NULL && *chunk_list != NULL); + + if (**chunk_list == NULL) { + ChunkSetHead(chunk, *chunk_list); + } else { + WebPChunk* last_chunk = **chunk_list; + while (last_chunk->next_ != NULL) last_chunk = last_chunk->next_; + ChunkSetHead(chunk, &last_chunk->next_); + *chunk_list = &last_chunk->next_; + } + return WEBP_MUX_OK; +} + //------------------------------------------------------------------------------ // Chunk deletion method(s). @@ -232,9 +227,11 @@ void MuxImageInit(WebPMuxImage* const wpi) { WebPMuxImage* MuxImageRelease(WebPMuxImage* const wpi) { WebPMuxImage* next; if (wpi == NULL) return NULL; - ChunkDelete(wpi->header_); - ChunkDelete(wpi->alpha_); - ChunkDelete(wpi->img_); + // There should be at most one chunk of header_, alpha_, img_ but we call + // ChunkListDelete to be safe + ChunkListDelete(&wpi->header_); + ChunkListDelete(&wpi->alpha_); + ChunkListDelete(&wpi->img_); ChunkListDelete(&wpi->unknown_); next = wpi->next_; diff --git a/thirdparty/libwebp/src/mux/muxread.c b/thirdparty/libwebp/src/mux/muxread.c index 0b55286862..268f6acb53 100644 --- a/thirdparty/libwebp/src/mux/muxread.c +++ b/thirdparty/libwebp/src/mux/muxread.c @@ -59,6 +59,7 @@ static WebPMuxError ChunkVerifyAndAssign(WebPChunk* chunk, // Sanity checks. if (data_size < CHUNK_HEADER_SIZE) return WEBP_MUX_NOT_ENOUGH_DATA; chunk_size = GetLE32(data + TAG_SIZE); + if (chunk_size > MAX_CHUNK_PAYLOAD) return WEBP_MUX_BAD_DATA; { const size_t chunk_disk_size = SizeWithPadding(chunk_size); @@ -102,6 +103,7 @@ static int MuxImageParse(const WebPChunk* const chunk, int copy_data, const uint8_t* const last = bytes + size; WebPChunk subchunk; size_t subchunk_size; + WebPChunk** unknown_chunk_list = &wpi->unknown_; ChunkInit(&subchunk); assert(chunk->tag_ == kChunks[IDX_ANMF].tag); @@ -116,7 +118,7 @@ static int MuxImageParse(const WebPChunk* const chunk, int copy_data, if (size < hdr_size) goto Fail; ChunkAssignData(&subchunk, &temp, copy_data, chunk->tag_); } - ChunkSetNth(&subchunk, &wpi->header_, 1); + ChunkSetHead(&subchunk, &wpi->header_); wpi->is_partial_ = 1; // Waiting for ALPH and/or VP8/VP8L chunks. // Rest of the chunks. @@ -133,18 +135,23 @@ static int MuxImageParse(const WebPChunk* const chunk, int copy_data, switch (ChunkGetIdFromTag(subchunk.tag_)) { case WEBP_CHUNK_ALPHA: if (wpi->alpha_ != NULL) goto Fail; // Consecutive ALPH chunks. - if (ChunkSetNth(&subchunk, &wpi->alpha_, 1) != WEBP_MUX_OK) goto Fail; + if (ChunkSetHead(&subchunk, &wpi->alpha_) != WEBP_MUX_OK) goto Fail; wpi->is_partial_ = 1; // Waiting for a VP8 chunk. break; case WEBP_CHUNK_IMAGE: - if (ChunkSetNth(&subchunk, &wpi->img_, 1) != WEBP_MUX_OK) goto Fail; + if (wpi->img_ != NULL) goto Fail; // Only 1 image chunk allowed. + if (ChunkSetHead(&subchunk, &wpi->img_) != WEBP_MUX_OK) goto Fail; if (!MuxImageFinalize(wpi)) goto Fail; wpi->is_partial_ = 0; // wpi is completely filled. break; case WEBP_CHUNK_UNKNOWN: - if (wpi->is_partial_) goto Fail; // Encountered an unknown chunk - // before some image chunks. - if (ChunkSetNth(&subchunk, &wpi->unknown_, 0) != WEBP_MUX_OK) goto Fail; + if (wpi->is_partial_) { + goto Fail; // Encountered an unknown chunk + // before some image chunks. + } + if (ChunkAppend(&subchunk, &unknown_chunk_list) != WEBP_MUX_OK) { + goto Fail; + } break; default: goto Fail; @@ -175,6 +182,9 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, const uint8_t* data; size_t size; WebPChunk chunk; + // Stores the end of the chunk lists so that it is faster to append data to + // their ends. + WebPChunk** chunk_list_ends[WEBP_CHUNK_NIL + 1] = { NULL }; ChunkInit(&chunk); // Sanity checks. @@ -187,7 +197,7 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, size = bitstream->size; if (data == NULL) return NULL; - if (size < RIFF_HEADER_SIZE) return NULL; + if (size < RIFF_HEADER_SIZE + CHUNK_HEADER_SIZE) return NULL; if (GetLE32(data + 0) != MKFOURCC('R', 'I', 'F', 'F') || GetLE32(data + CHUNK_HEADER_SIZE) != MKFOURCC('W', 'E', 'B', 'P')) { return NULL; @@ -196,8 +206,6 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, mux = WebPMuxNew(); if (mux == NULL) return NULL; - if (size < RIFF_HEADER_SIZE + TAG_SIZE) goto Err; - tag = GetLE32(data + RIFF_HEADER_SIZE); if (tag != kChunks[IDX_VP8].tag && tag != kChunks[IDX_VP8L].tag && @@ -205,13 +213,17 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, goto Err; // First chunk should be VP8, VP8L or VP8X. } - riff_size = SizeWithPadding(GetLE32(data + TAG_SIZE)); - if (riff_size > MAX_CHUNK_PAYLOAD || riff_size > size) { - goto Err; - } else { - if (riff_size < size) { // Redundant data after last chunk. - size = riff_size; // To make sure we don't read any data beyond mux_size. - } + riff_size = GetLE32(data + TAG_SIZE); + if (riff_size > MAX_CHUNK_PAYLOAD) goto Err; + + // Note this padding is historical and differs from demux.c which does not + // pad the file size. + riff_size = SizeWithPadding(riff_size); + if (riff_size < CHUNK_HEADER_SIZE) goto Err; + if (riff_size > size) goto Err; + // There's no point in reading past the end of the RIFF chunk. + if (size > riff_size + CHUNK_HEADER_SIZE) { + size = riff_size + CHUNK_HEADER_SIZE; } end = data + size; @@ -226,7 +238,6 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, while (data != end) { size_t data_size; WebPChunkId id; - WebPChunk** chunk_list; if (ChunkVerifyAndAssign(&chunk, data, size, riff_size, copy_data) != WEBP_MUX_OK) { goto Err; @@ -236,11 +247,11 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, switch (id) { case WEBP_CHUNK_ALPHA: if (wpi->alpha_ != NULL) goto Err; // Consecutive ALPH chunks. - if (ChunkSetNth(&chunk, &wpi->alpha_, 1) != WEBP_MUX_OK) goto Err; + if (ChunkSetHead(&chunk, &wpi->alpha_) != WEBP_MUX_OK) goto Err; wpi->is_partial_ = 1; // Waiting for a VP8 chunk. break; case WEBP_CHUNK_IMAGE: - if (ChunkSetNth(&chunk, &wpi->img_, 1) != WEBP_MUX_OK) goto Err; + if (ChunkSetHead(&chunk, &wpi->img_) != WEBP_MUX_OK) goto Err; if (!MuxImageFinalize(wpi)) goto Err; wpi->is_partial_ = 0; // wpi is completely filled. PushImage: @@ -257,9 +268,13 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data, default: // A non-image chunk. if (wpi->is_partial_) goto Err; // Encountered a non-image chunk before // getting all chunks of an image. - chunk_list = MuxGetChunkListFromId(mux, id); // List to add this chunk. - if (ChunkSetNth(&chunk, chunk_list, 0) != WEBP_MUX_OK) goto Err; + if (chunk_list_ends[id] == NULL) { + chunk_list_ends[id] = + MuxGetChunkListFromId(mux, id); // List to add this chunk. + } + if (ChunkAppend(&chunk, &chunk_list_ends[id]) != WEBP_MUX_OK) goto Err; if (id == WEBP_CHUNK_VP8X) { // grab global specs + if (data_size < CHUNK_HEADER_SIZE + VP8X_CHUNK_SIZE) goto Err; mux->canvas_width_ = GetLE24(data + 12) + 1; mux->canvas_height_ = GetLE24(data + 15) + 1; } @@ -385,6 +400,10 @@ static WebPMuxError SynthesizeBitstream(const WebPMuxImage* const wpi, uint8_t* const data = (uint8_t*)WebPSafeMalloc(1ULL, size); if (data == NULL) return WEBP_MUX_MEMORY_ERROR; + // There should be at most one alpha_ chunk and exactly one img_ chunk. + assert(wpi->alpha_ == NULL || wpi->alpha_->next_ == NULL); + assert(wpi->img_ != NULL && wpi->img_->next_ == NULL); + // Main RIFF header. dst = MuxEmitRiffHeader(data, size); diff --git a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h index 2ccc6ed326..7e607f370a 100644 --- a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h +++ b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h @@ -187,4 +187,4 @@ static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* const br, int prob) { } // extern "C" #endif -#endif // WEBP_UTILS_BIT_READER_INL_UTILS_H_ +#endif // WEBP_UTILS_BIT_READER_INL_UTILS_H_ diff --git a/thirdparty/libwebp/src/utils/bit_reader_utils.h b/thirdparty/libwebp/src/utils/bit_reader_utils.h index 04f9804409..de810d402a 100644 --- a/thirdparty/libwebp/src/utils/bit_reader_utils.h +++ b/thirdparty/libwebp/src/utils/bit_reader_utils.h @@ -182,4 +182,4 @@ static WEBP_INLINE void VP8LFillBitWindow(VP8LBitReader* const br) { } // extern "C" #endif -#endif /* WEBP_UTILS_BIT_READER_UTILS_H_ */ +#endif // WEBP_UTILS_BIT_READER_UTILS_H_ diff --git a/thirdparty/libwebp/src/utils/bit_writer_utils.h b/thirdparty/libwebp/src/utils/bit_writer_utils.h index 2cf5976fe3..b9d5102a5a 100644 --- a/thirdparty/libwebp/src/utils/bit_writer_utils.h +++ b/thirdparty/libwebp/src/utils/bit_writer_utils.h @@ -151,4 +151,4 @@ static WEBP_INLINE void VP8LPutBits(VP8LBitWriter* const bw, } // extern "C" #endif -#endif /* WEBP_UTILS_BIT_WRITER_UTILS_H_ */ +#endif // WEBP_UTILS_BIT_WRITER_UTILS_H_ diff --git a/thirdparty/libwebp/src/utils/filters_utils.h b/thirdparty/libwebp/src/utils/filters_utils.h index 410f2fcdf2..61da66e212 100644 --- a/thirdparty/libwebp/src/utils/filters_utils.h +++ b/thirdparty/libwebp/src/utils/filters_utils.h @@ -29,4 +29,4 @@ WEBP_FILTER_TYPE WebPEstimateBestFilter(const uint8_t* data, } // extern "C" #endif -#endif /* WEBP_UTILS_FILTERS_UTILS_H_ */ +#endif // WEBP_UTILS_FILTERS_UTILS_H_ diff --git a/thirdparty/libwebp/src/utils/quant_levels_dec_utils.c b/thirdparty/libwebp/src/utils/quant_levels_dec_utils.c index 3818a78b93..f65b6cdbb6 100644 --- a/thirdparty/libwebp/src/utils/quant_levels_dec_utils.c +++ b/thirdparty/libwebp/src/utils/quant_levels_dec_utils.c @@ -261,9 +261,15 @@ static void CleanupParams(SmoothParams* const p) { int WebPDequantizeLevels(uint8_t* const data, int width, int height, int stride, int strength) { - const int radius = 4 * strength / 100; + int radius = 4 * strength / 100; + if (strength < 0 || strength > 100) return 0; if (data == NULL || width <= 0 || height <= 0) return 0; // bad params + + // limit the filter size to not exceed the image dimensions + if (2 * radius + 1 > width) radius = (width - 1) >> 1; + if (2 * radius + 1 > height) radius = (height - 1) >> 1; + if (radius > 0) { SmoothParams p; memset(&p, 0, sizeof(p)); diff --git a/thirdparty/libwebp/src/utils/quant_levels_dec_utils.h b/thirdparty/libwebp/src/utils/quant_levels_dec_utils.h index f822107a72..327f19f336 100644 --- a/thirdparty/libwebp/src/utils/quant_levels_dec_utils.h +++ b/thirdparty/libwebp/src/utils/quant_levels_dec_utils.h @@ -32,4 +32,4 @@ int WebPDequantizeLevels(uint8_t* const data, int width, int height, int stride, } // extern "C" #endif -#endif /* WEBP_UTILS_QUANT_LEVELS_DEC_UTILS_H_ */ +#endif // WEBP_UTILS_QUANT_LEVELS_DEC_UTILS_H_ diff --git a/thirdparty/libwebp/src/utils/quant_levels_utils.h b/thirdparty/libwebp/src/utils/quant_levels_utils.h index 75df2ba6a4..9ee3ea0075 100644 --- a/thirdparty/libwebp/src/utils/quant_levels_utils.h +++ b/thirdparty/libwebp/src/utils/quant_levels_utils.h @@ -33,4 +33,4 @@ int QuantizeLevels(uint8_t* const data, int width, int height, int num_levels, } // extern "C" #endif -#endif /* WEBP_UTILS_QUANT_LEVELS_UTILS_H_ */ +#endif // WEBP_UTILS_QUANT_LEVELS_UTILS_H_ diff --git a/thirdparty/libwebp/src/utils/random_utils.h b/thirdparty/libwebp/src/utils/random_utils.h index 6d36c667e7..a5006f84f7 100644 --- a/thirdparty/libwebp/src/utils/random_utils.h +++ b/thirdparty/libwebp/src/utils/random_utils.h @@ -60,4 +60,4 @@ static WEBP_INLINE int VP8RandomBits(VP8Random* const rg, int num_bits) { } // extern "C" #endif -#endif /* WEBP_UTILS_RANDOM_UTILS_H_ */ +#endif // WEBP_UTILS_RANDOM_UTILS_H_ diff --git a/thirdparty/libwebp/src/utils/rescaler_utils.h b/thirdparty/libwebp/src/utils/rescaler_utils.h index 8890e6fa13..ca41e42c4a 100644 --- a/thirdparty/libwebp/src/utils/rescaler_utils.h +++ b/thirdparty/libwebp/src/utils/rescaler_utils.h @@ -98,4 +98,4 @@ int WebPRescalerHasPendingOutput(const WebPRescaler* const rescaler) { } // extern "C" #endif -#endif /* WEBP_UTILS_RESCALER_UTILS_H_ */ +#endif // WEBP_UTILS_RESCALER_UTILS_H_ diff --git a/thirdparty/libwebp/src/utils/thread_utils.h b/thirdparty/libwebp/src/utils/thread_utils.h index c8ae6c9033..29ad49f74b 100644 --- a/thirdparty/libwebp/src/utils/thread_utils.h +++ b/thirdparty/libwebp/src/utils/thread_utils.h @@ -87,4 +87,4 @@ WEBP_EXTERN const WebPWorkerInterface* WebPGetWorkerInterface(void); } // extern "C" #endif -#endif /* WEBP_UTILS_THREAD_UTILS_H_ */ +#endif // WEBP_UTILS_THREAD_UTILS_H_ diff --git a/thirdparty/libwebp/src/utils/utils.h b/thirdparty/libwebp/src/utils/utils.h index 52921bf24e..da97b5d38f 100644 --- a/thirdparty/libwebp/src/utils/utils.h +++ b/thirdparty/libwebp/src/utils/utils.h @@ -175,4 +175,4 @@ WEBP_EXTERN int WebPGetColorPalette(const struct WebPPicture* const pic, } // extern "C" #endif -#endif /* WEBP_UTILS_UTILS_H_ */ +#endif // WEBP_UTILS_UTILS_H_ diff --git a/thirdparty/libwebp/src/webp/decode.h b/thirdparty/libwebp/src/webp/decode.h index 2165e96c95..95d31e7619 100644 --- a/thirdparty/libwebp/src/webp/decode.h +++ b/thirdparty/libwebp/src/webp/decode.h @@ -491,4 +491,4 @@ WEBP_EXTERN VP8StatusCode WebPDecode(const uint8_t* data, size_t data_size, } // extern "C" #endif -#endif /* WEBP_WEBP_DECODE_H_ */ +#endif // WEBP_WEBP_DECODE_H_ diff --git a/thirdparty/libwebp/src/webp/demux.h b/thirdparty/libwebp/src/webp/demux.h index 555d641338..846eeb15a9 100644 --- a/thirdparty/libwebp/src/webp/demux.h +++ b/thirdparty/libwebp/src/webp/demux.h @@ -360,4 +360,4 @@ WEBP_EXTERN void WebPAnimDecoderDelete(WebPAnimDecoder* dec); } // extern "C" #endif -#endif /* WEBP_WEBP_DEMUX_H_ */ +#endif // WEBP_WEBP_DEMUX_H_ diff --git a/thirdparty/libwebp/src/webp/encode.h b/thirdparty/libwebp/src/webp/encode.h index 7ec3543dc2..549cf07730 100644 --- a/thirdparty/libwebp/src/webp/encode.h +++ b/thirdparty/libwebp/src/webp/encode.h @@ -542,4 +542,4 @@ WEBP_EXTERN int WebPEncode(const WebPConfig* config, WebPPicture* picture); } // extern "C" #endif -#endif /* WEBP_WEBP_ENCODE_H_ */ +#endif // WEBP_WEBP_ENCODE_H_ diff --git a/thirdparty/libwebp/src/webp/format_constants.h b/thirdparty/libwebp/src/webp/format_constants.h index 329fc8a3b0..eca6981a47 100644 --- a/thirdparty/libwebp/src/webp/format_constants.h +++ b/thirdparty/libwebp/src/webp/format_constants.h @@ -84,4 +84,4 @@ typedef enum { // overflow a uint32_t. #define MAX_CHUNK_PAYLOAD (~0U - CHUNK_HEADER_SIZE - 1) -#endif /* WEBP_WEBP_FORMAT_CONSTANTS_H_ */ +#endif // WEBP_WEBP_FORMAT_CONSTANTS_H_ diff --git a/thirdparty/libwebp/src/webp/mux.h b/thirdparty/libwebp/src/webp/mux.h index 28bb4a41c9..66096a92e0 100644 --- a/thirdparty/libwebp/src/webp/mux.h +++ b/thirdparty/libwebp/src/webp/mux.h @@ -527,4 +527,4 @@ WEBP_EXTERN void WebPAnimEncoderDelete(WebPAnimEncoder* enc); } // extern "C" #endif -#endif /* WEBP_WEBP_MUX_H_ */ +#endif // WEBP_WEBP_MUX_H_ diff --git a/thirdparty/libwebp/src/webp/mux_types.h b/thirdparty/libwebp/src/webp/mux_types.h index b37e2c67aa..ceea77dfc6 100644 --- a/thirdparty/libwebp/src/webp/mux_types.h +++ b/thirdparty/libwebp/src/webp/mux_types.h @@ -95,4 +95,4 @@ static WEBP_INLINE int WebPDataCopy(const WebPData* src, WebPData* dst) { } // extern "C" #endif -#endif /* WEBP_WEBP_MUX_TYPES_H_ */ +#endif // WEBP_WEBP_MUX_TYPES_H_ diff --git a/thirdparty/libwebp/src/webp/types.h b/thirdparty/libwebp/src/webp/types.h index 989a763f0d..0ce2622e41 100644 --- a/thirdparty/libwebp/src/webp/types.h +++ b/thirdparty/libwebp/src/webp/types.h @@ -49,4 +49,4 @@ typedef long long int int64_t; // Macro to check ABI compatibility (same major revision number) #define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8)) -#endif /* WEBP_WEBP_TYPES_H_ */ +#endif // WEBP_WEBP_TYPES_H_ diff --git a/thirdparty/tinyexr/tinyexr.h b/thirdparty/tinyexr/tinyexr.h index 990c8ee142..b3a7ee00c2 100644 --- a/thirdparty/tinyexr/tinyexr.h +++ b/thirdparty/tinyexr/tinyexr.h @@ -116,6 +116,8 @@ extern "C" { #define TINYEXR_ERROR_UNSUPPORTED_FORMAT (-7) #define TINYEXR_ERROR_INVALID_HEADER (-8) #define TINYEXR_ERROR_UNSUPPORTED_FEATURE (-9) +#define TINYEXR_ERROR_CANT_WRITE_FILE (-10) +#define TINYEXR_ERROR_SERIALZATION_FAILED (-11) // @note { OpenEXR file format: http://www.openexr.com/openexrfilelayout.pdf } @@ -279,9 +281,12 @@ extern int LoadEXR(float **out_rgba, int *width, int *height, // Save image as fp16(HALF) format when `save_as_fp16` is positive non-zero // value. // Save image as fp32(FLOAT) format when `save_as_fp16` is 0. +// Use ZIP compression by default. +// Returns negative value and may set error string in `err` when there's an +// error extern int SaveEXR(const float *data, const int width, const int height, const int components, const int save_as_fp16, - const char *filename); + const char *filename, const char **err); // Initialize EXRHeader struct extern void InitEXRHeader(EXRHeader *exr_header); @@ -400,9 +405,9 @@ extern int SaveEXRImageToFile(const EXRImage *image, // Saves multi-channel, single-frame OpenEXR image to a memory. // Image is compressed using EXRImage.compression value. -// Return the number of bytes if succes. -// Returns negative value and may set error string in `err` when there's an -// error +// Return the number of bytes if success. +// Return zero and will set error string in `err` when there's an +// error. // When there was an error message, Application must free `err` with // FreeEXRErrorMessage() extern size_t SaveEXRImageToMemory(const EXRImage *image, @@ -524,15 +529,23 @@ namespace miniz { #if __has_warning("-Wcomma") #pragma clang diagnostic ignored "-Wcomma" #endif + #if __has_warning("-Wmacro-redefined") #pragma clang diagnostic ignored "-Wmacro-redefined" #endif + #if __has_warning("-Wcast-qual") #pragma clang diagnostic ignored "-Wcast-qual" #endif + #if __has_warning("-Wzero-as-null-pointer-constant") #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" #endif + +#if __has_warning("-Wtautological-constant-compare") +#pragma clang diagnostic ignored "-Wtautological-constant-compare" +#endif + #endif /* miniz.c v1.15 - public domain deflate/inflate, zlib-subset, ZIP @@ -2518,10 +2531,10 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, tinfl_status status = TINFL_STATUS_FAILED; mz_uint32 num_bits, dist, counter, num_extra; tinfl_bit_buf_t bit_buf; - const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = - pIn_buf_next + *pIn_buf_size; - mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = - pOut_buf_next + *pOut_buf_size; + const mz_uint8 *pIn_buf_cur = pIn_buf_next, + *const pIn_buf_end = pIn_buf_next + *pIn_buf_size; + mz_uint8 *pOut_buf_cur = pOut_buf_next, + *const pOut_buf_end = pOut_buf_next + *pOut_buf_size; size_t out_buf_size_mask = (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) ? (size_t)-1 @@ -2938,9 +2951,8 @@ void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, tinfl_status status = tinfl_decompress( &decomp, (const mz_uint8 *)pSrc_buf + src_buf_ofs, &src_buf_size, (mz_uint8 *)pBuf, pBuf ? (mz_uint8 *)pBuf + *pOut_len : NULL, - &dst_buf_size, - (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | - TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); + &dst_buf_size, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | + TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) { MZ_FREE(pBuf); *pOut_len = 0; @@ -2993,8 +3005,9 @@ int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8 *)pIn_buf + in_buf_ofs, &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size, - (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | - TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); + (flags & + ~(TINFL_FLAG_HAS_MORE_INPUT | + TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); in_buf_ofs += in_buf_size; if ((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user))) @@ -3119,9 +3132,7 @@ static const mz_uint8 s_tdefl_large_dist_extra[128] = { // Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted // values. -typedef struct { - mz_uint16 m_key, m_sym_index; -} tdefl_sym_freq; +typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq; static tdefl_sym_freq *tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq *pSyms0, tdefl_sym_freq *pSyms1) { @@ -5265,10 +5276,9 @@ mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS); n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1); pStat->m_comment_size = n; - memcpy(pStat->m_comment, - p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + - MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + - MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS), + memcpy(pStat->m_comment, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS), n); pStat->m_comment[n] = '\0'; @@ -10087,9 +10097,10 @@ static bool DecodePixelData(/* out */ unsigned char **out_images, unsigned short *outLine = reinterpret_cast<unsigned short *>(out_images[c]); if (line_order == 0) { - outLine += (y + v) * x_stride; + outLine += (size_t(y) + v) * size_t(x_stride); } else { - outLine += (height - 1 - (y + v)) * x_stride; + outLine += + (size_t(height) - 1 - (size_t(y) + v)) * size_t(x_stride); } for (int u = 0; u < width; u++) { @@ -10105,9 +10116,10 @@ static bool DecodePixelData(/* out */ unsigned char **out_images, } else if (requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) { float *outLine = reinterpret_cast<float *>(out_images[c]); if (line_order == 0) { - outLine += (y + v) * x_stride; + outLine += (size_t(y) + v) * size_t(x_stride); } else { - outLine += (height - 1 - (y + v)) * x_stride; + outLine += + (size_t(height) - 1 - (size_t(y) + v)) * size_t(x_stride); } if (reinterpret_cast<const unsigned char *>(line_ptr + width) > @@ -10140,9 +10152,10 @@ static bool DecodePixelData(/* out */ unsigned char **out_images, float *outLine = reinterpret_cast<float *>(out_images[c]); if (line_order == 0) { - outLine += (y + v) * x_stride; + outLine += (size_t(y) + v) * size_t(x_stride); } else { - outLine += (height - 1 - (y + v)) * x_stride; + outLine += + (size_t(height) - 1 - (size_t(y) + v)) * size_t(x_stride); } if (reinterpret_cast<const unsigned char *>(line_ptr + width) > @@ -10167,9 +10180,10 @@ static bool DecodePixelData(/* out */ unsigned char **out_images, unsigned int *outLine = reinterpret_cast<unsigned int *>(out_images[c]); if (line_order == 0) { - outLine += (y + v) * x_stride; + outLine += (size_t(y) + v) * size_t(x_stride); } else { - outLine += (height - 1 - (y + v)) * x_stride; + outLine += + (size_t(height) - 1 - (size_t(y) + v)) * size_t(x_stride); } for (int u = 0; u < width; u++) { @@ -11133,21 +11147,53 @@ int LoadEXR(float **out_rgba, int *width, int *height, const char *filename, } } - if ((idxA == 0) && (idxR == -1) && (idxG == -1) && (idxB == -1)) { - // Alpha channel only. + if (exr_header.num_channels == 1) { + // Grayscale channel only. - if (exr_header.tiled) { - // todo.implement this - } (*out_rgba) = reinterpret_cast<float *>( malloc(4 * sizeof(float) * static_cast<size_t>(exr_image.width) * static_cast<size_t>(exr_image.height))); - for (int i = 0; i < exr_image.width * exr_image.height; i++) { - const float val = reinterpret_cast<float **>(exr_image.images)[0][i]; - (*out_rgba)[4 * i + 0] = val; - (*out_rgba)[4 * i + 1] = val; - (*out_rgba)[4 * i + 2] = val; - (*out_rgba)[4 * i + 3] = val; + + if (exr_header.tiled) { + // todo.implement this + + for (int it = 0; it < exr_image.num_tiles; it++) { + for (int j = 0; j < exr_header.tile_size_y; j++) { + for (int i = 0; i < exr_header.tile_size_x; i++) { + const int ii = + exr_image.tiles[it].offset_x * exr_header.tile_size_x + i; + const int jj = + exr_image.tiles[it].offset_y * exr_header.tile_size_y + j; + const int idx = ii + jj * exr_image.width; + + // out of region check. + if (ii >= exr_image.width) { + continue; + } + if (jj >= exr_image.height) { + continue; + } + const int srcIdx = i + j * exr_header.tile_size_x; + unsigned char **src = exr_image.tiles[it].images; + (*out_rgba)[4 * idx + 0] = + reinterpret_cast<float **>(src)[0][srcIdx]; + (*out_rgba)[4 * idx + 1] = + reinterpret_cast<float **>(src)[0][srcIdx]; + (*out_rgba)[4 * idx + 2] = + reinterpret_cast<float **>(src)[0][srcIdx]; + (*out_rgba)[4 * idx + 3] = + reinterpret_cast<float **>(src)[0][srcIdx]; + } + } + } + } else { + for (int i = 0; i < exr_image.width * exr_image.height; i++) { + const float val = reinterpret_cast<float **>(exr_image.images)[0][i]; + (*out_rgba)[4 * i + 0] = val; + (*out_rgba)[4 * i + 1] = val; + (*out_rgba)[4 * i + 2] = val; + (*out_rgba)[4 * i + 3] = val; + } } } else { // Assume RGB(A) @@ -11179,7 +11225,7 @@ int LoadEXR(float **out_rgba, int *width, int *height, const char *filename, static_cast<size_t>(exr_image.height))); if (exr_header.tiled) { for (int it = 0; it < exr_image.num_tiles; it++) { - for (int j = 0; j < exr_header.tile_size_y; j++) + for (int j = 0; j < exr_header.tile_size_y; j++) { for (int i = 0; i < exr_header.tile_size_x; i++) { const int ii = exr_image.tiles[it].offset_x * exr_header.tile_size_x + i; @@ -11209,6 +11255,7 @@ int LoadEXR(float **out_rgba, int *width, int *height, const char *filename, (*out_rgba)[4 * idx + 3] = 1.0; } } + } } } else { for (int i = 0; i < exr_image.width * exr_image.height; i++) { @@ -11356,18 +11403,53 @@ int LoadEXRFromMemory(float **out_rgba, int *width, int *height, malloc(4 * sizeof(float) * static_cast<size_t>(exr_image.width) * static_cast<size_t>(exr_image.height))); - for (int i = 0; i < exr_image.width * exr_image.height; i++) { - (*out_rgba)[4 * i + 0] = - reinterpret_cast<float **>(exr_image.images)[idxR][i]; - (*out_rgba)[4 * i + 1] = - reinterpret_cast<float **>(exr_image.images)[idxG][i]; - (*out_rgba)[4 * i + 2] = - reinterpret_cast<float **>(exr_image.images)[idxB][i]; - if (idxA != -1) { - (*out_rgba)[4 * i + 3] = - reinterpret_cast<float **>(exr_image.images)[idxA][i]; - } else { - (*out_rgba)[4 * i + 3] = 1.0; + if (exr_header.tiled) { + for (int it = 0; it < exr_image.num_tiles; it++) { + for (int j = 0; j < exr_header.tile_size_y; j++) + for (int i = 0; i < exr_header.tile_size_x; i++) { + const int ii = + exr_image.tiles[it].offset_x * exr_header.tile_size_x + i; + const int jj = + exr_image.tiles[it].offset_y * exr_header.tile_size_y + j; + const int idx = ii + jj * exr_image.width; + + // out of region check. + if (ii >= exr_image.width) { + continue; + } + if (jj >= exr_image.height) { + continue; + } + const int srcIdx = i + j * exr_header.tile_size_x; + unsigned char **src = exr_image.tiles[it].images; + (*out_rgba)[4 * idx + 0] = + reinterpret_cast<float **>(src)[idxR][srcIdx]; + (*out_rgba)[4 * idx + 1] = + reinterpret_cast<float **>(src)[idxG][srcIdx]; + (*out_rgba)[4 * idx + 2] = + reinterpret_cast<float **>(src)[idxB][srcIdx]; + if (idxA != -1) { + (*out_rgba)[4 * idx + 3] = + reinterpret_cast<float **>(src)[idxA][srcIdx]; + } else { + (*out_rgba)[4 * idx + 3] = 1.0; + } + } + } + } else { + for (int i = 0; i < exr_image.width * exr_image.height; i++) { + (*out_rgba)[4 * i + 0] = + reinterpret_cast<float **>(exr_image.images)[idxR][i]; + (*out_rgba)[4 * i + 1] = + reinterpret_cast<float **>(exr_image.images)[idxG][i]; + (*out_rgba)[4 * i + 2] = + reinterpret_cast<float **>(exr_image.images)[idxB][i]; + if (idxA != -1) { + (*out_rgba)[4 * i + 3] = + reinterpret_cast<float **>(exr_image.images)[idxA][i]; + } else { + (*out_rgba)[4 * i + 3] = 1.0; + } } } @@ -11452,7 +11534,7 @@ size_t SaveEXRImageToMemory(const EXRImage *exr_image, if (exr_image == NULL || memory_out == NULL || exr_header->compression_type < 0) { tinyexr::SetErrorMessage("Invalid argument for SaveEXRImageToMemory", err); - return 0; // @fixme + return 0; } #if !TINYEXR_USE_PIZ @@ -11623,8 +11705,6 @@ size_t SaveEXRImageToMemory(const EXRImage *exr_image, sizeof( tinyexr::tinyexr_int64); // sizeof(header) + sizeof(offsetTable) - std::vector<unsigned char> data; - std::vector<std::vector<unsigned char> > data_list( static_cast<size_t>(num_blocks)); std::vector<size_t> channel_offset_list( @@ -11863,9 +11943,9 @@ size_t SaveEXRImageToMemory(const EXRImage *exr_image, } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { #if TINYEXR_USE_PIZ unsigned int bufLen = - 1024 + static_cast<unsigned int>( - 1.2 * static_cast<unsigned int>( - buf.size())); // @fixme { compute good bound. } + 8192 + static_cast<unsigned int>( + 2 * static_cast<unsigned int>( + buf.size())); // @fixme { compute good bound. } std::vector<unsigned char> block(bufLen); unsigned int outSize = static_cast<unsigned int>(block.size()); @@ -11924,13 +12004,12 @@ size_t SaveEXRImageToMemory(const EXRImage *exr_image, } // omp parallel for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) { - data.insert(data.end(), data_list[i].begin(), data_list[i].end()); - offsets[i] = offset; tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64 *>(&offsets[i])); offset += data_list[i].size(); } + size_t totalSize = static_cast<size_t>(offset); { memory.insert( memory.end(), reinterpret_cast<unsigned char *>(&offsets.at(0)), @@ -11938,14 +12017,21 @@ size_t SaveEXRImageToMemory(const EXRImage *exr_image, sizeof(tinyexr::tinyexr_uint64) * static_cast<size_t>(num_blocks)); } - { memory.insert(memory.end(), data.begin(), data.end()); } - - assert(memory.size() > 0); + if ( memory.size() == 0 ) { + tinyexr::SetErrorMessage("Output memory size is zero", err); + return 0; + } - (*memory_out) = static_cast<unsigned char *>(malloc(memory.size())); + (*memory_out) = static_cast<unsigned char *>(malloc(totalSize)); memcpy((*memory_out), &memory.at(0), memory.size()); + unsigned char *memory_ptr = *memory_out + memory.size(); - return memory.size(); // OK + for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) { + memcpy(memory_ptr, &data_list[i].at(0), data_list[i].size()); + memory_ptr += data_list[i].size(); + } + + return totalSize; // OK } int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header, @@ -11960,7 +12046,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header, if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) { tinyexr::SetErrorMessage("PIZ compression is not supported in this build", err); - return 0; + return TINYEXR_ERROR_UNSUPPORTED_FEATURE; } #endif @@ -11968,7 +12054,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header, if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) { tinyexr::SetErrorMessage("ZFP compression is not supported in this build", err); - return 0; + return TINYEXR_ERROR_UNSUPPORTED_FEATURE; } #endif @@ -11980,19 +12066,28 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header, #endif if (!fp) { tinyexr::SetErrorMessage("Cannot write a file", err); - return TINYEXR_ERROR_CANT_OPEN_FILE; + return TINYEXR_ERROR_CANT_WRITE_FILE; } unsigned char *mem = NULL; size_t mem_size = SaveEXRImageToMemory(exr_image, exr_header, &mem, err); + if (mem_size == 0) { + return TINYEXR_ERROR_SERIALZATION_FAILED; + } + size_t written_size = 0; if ((mem_size > 0) && mem) { - fwrite(mem, 1, mem_size, fp); + written_size = fwrite(mem, 1, mem_size, fp); } free(mem); fclose(fp); + if (written_size != mem_size) { + tinyexr::SetErrorMessage("Cannot write a file", err); + return TINYEXR_ERROR_CANT_WRITE_FILE; + } + return TINYEXR_SUCCESS; } @@ -12861,20 +12956,27 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images, } int SaveEXR(const float *data, int width, int height, int components, - const int save_as_fp16, const char *outfilename) { + const int save_as_fp16, const char *outfilename, const char **err) { if ((components == 1) || components == 3 || components == 4) { // OK } else { + std::stringstream ss; + ss << "Unsupported component value : " << components << std::endl; + + tinyexr::SetErrorMessage(ss.str(), err); return TINYEXR_ERROR_INVALID_ARGUMENT; } - // Assume at least 16x16 pixels. - if (width < 16) return TINYEXR_ERROR_INVALID_ARGUMENT; - if (height < 16) return TINYEXR_ERROR_INVALID_ARGUMENT; - EXRHeader header; InitEXRHeader(&header); + if ((width < 16) && (height < 16)) { + // No compression for small image. + header.compression_type = TINYEXR_COMPRESSIONTYPE_NONE; + } else { + header.compression_type = TINYEXR_COMPRESSIONTYPE_ZIP; + } + EXRImage image; InitEXRImage(&image); @@ -12980,8 +13082,7 @@ int SaveEXR(const float *data, int width, int height, int components, } } - const char *err; - int ret = SaveEXRImageToFile(&image, &header, outfilename, &err); + int ret = SaveEXRImageToFile(&image, &header, outfilename, err); if (ret != TINYEXR_SUCCESS) { return ret; } |