From a97b84378c2b5aee85e66948ca763413d1532178 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Tue, 4 Aug 2020 15:46:40 +0200 Subject: [PATCH 01/18] Remap script path when registering class. Was causing `class_name`-defined scripts to not being loaded in exported games due to the remap from `*.gd` to `*.gdc`/`*.gde`. (cherry picked from commit fceb64827ea50364f34f4ba9db3910602d1911bf) --- core/script_language.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/script_language.cpp b/core/script_language.cpp index 2e8ebd40715..ff96842d3bf 100644 --- a/core/script_language.cpp +++ b/core/script_language.cpp @@ -31,6 +31,7 @@ #include "script_language.h" #include "core/core_string_names.h" +#include "core/io/resource_loader.h" #include "core/os/file_access.h" #include "core/project_settings.h" @@ -167,7 +168,7 @@ void ScriptServer::init_languages() { for (int i = 0; i < script_classes.size(); i++) { Dictionary c = script_classes[i]; - if (!c.has("class") || !c.has("language") || !c.has("path") || !FileAccess::exists(c["path"]) || !c.has("base")) + if (!c.has("class") || !c.has("language") || !c.has("path") || !FileAccess::exists(ResourceLoader::path_remap(c["path"])) || !c.has("base")) continue; add_global_class(c["class"], c["base"], c["language"], c["path"]); } From 5972495d992db3a1aa2d9fb94bfeaa4cca3d685b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Wed, 12 Aug 2020 14:30:18 +0200 Subject: [PATCH 02/18] Revert "Virtual keyboard size adjustment fixes" Also reverts "[3.2] Move PopupWindow logic to GodotEditText on Android". This reverts commits 69db38742fc62e30976c28a60783ed05e6d2d6f5 and. ff0ada164b4e6824555b7e16d74bce126a498212. --- .../lib/src/org/godotengine/godot/Godot.java | 41 ++++++---- .../godot/input/GodotEditText.java | 82 ++++++------------- 2 files changed, 49 insertions(+), 74 deletions(-) diff --git a/platform/android/java/lib/src/org/godotengine/godot/Godot.java b/platform/android/java/lib/src/org/godotengine/godot/Godot.java index afd063fbe55..0760d3130d7 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.java @@ -53,6 +53,8 @@ import android.content.SharedPreferences.Editor; import android.content.pm.ConfigurationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.graphics.Point; +import android.graphics.Rect; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; @@ -73,6 +75,7 @@ import android.view.Surface; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; +import android.view.ViewTreeObserver; import android.view.Window; import android.view.WindowManager; import android.widget.Button; @@ -245,8 +248,6 @@ public abstract class Godot extends FragmentActivity implements SensorEventListe public GodotView mView; private boolean godot_initialized = false; - private GodotEditText mEditText; - private SensorManager mSensorManager; private Sensor mAccelerometer; private Sensor mGravity; @@ -315,11 +316,29 @@ public abstract class Godot extends FragmentActivity implements SensorEventListe layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); setContentView(layout); + // GodotEditText layout + GodotEditText edittext = new GodotEditText(this); + edittext.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + // ...add to FrameLayout + layout.addView(edittext); + mView = new GodotView(this, xrMode, use_gl3, use_32_bits, use_debug_opengl); layout.addView(mView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + edittext.setView(mView); + io.setEdit(edittext); - mEditText = new GodotEditText(this, mView); - io.setEdit(mEditText); + mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + Point fullSize = new Point(); + getWindowManager().getDefaultDisplay().getSize(fullSize); + Rect gameSize = new Rect(); + mView.getWindowVisibleDisplayFrame(gameSize); + + final int keyboardHeight = fullSize.y - gameSize.bottom; + GodotLib.setVirtualKeyboardHeight(keyboardHeight); + } + }); final String[] current_command_line = command_line; mView.queueEvent(new Runnable() { @@ -552,7 +571,6 @@ public abstract class Godot extends FragmentActivity implements SensorEventListe super.onCreate(icicle); Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); - window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING); mClipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); pluginRegistry = GodotPluginRegistry.initializePluginRegistry(this); @@ -691,21 +709,8 @@ public abstract class Godot extends FragmentActivity implements SensorEventListe initializeGodot(); } - @Override - protected void onStart() { - super.onStart(); - - mView.post(new Runnable() { - @Override - public void run() { - mEditText.onInitView(); - } - }); - } - @Override protected void onDestroy() { - mEditText.onDestroyView(); for (int i = 0; i < singleton_count; i++) { singletons[i].onMainDestroy(); diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java index 2b560b1adc6..b76a494a586 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java @@ -32,27 +32,16 @@ package org.godotengine.godot.input; import org.godotengine.godot.*; -import android.app.Activity; import android.content.Context; -import android.graphics.Point; -import android.graphics.Rect; import android.os.Handler; import android.os.Message; import android.text.InputFilter; import android.text.InputType; import android.util.AttributeSet; -import android.view.Gravity; import android.view.KeyEvent; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.view.ViewTreeObserver; -import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.PopupWindow; import java.lang.ref.WeakReference; @@ -67,8 +56,6 @@ public class GodotEditText extends EditText { // Fields // =========================================================== private GodotView mView; - private View mKeyboardView; - private PopupWindow mKeyboardWindow; private GodotTextInputWrapper mInputWrapper; private EditHandler sHandler = new EditHandler(this); private String mOriginText; @@ -93,52 +80,24 @@ public class GodotEditText extends EditText { // =========================================================== // Constructors // =========================================================== - public GodotEditText(final Context context, final GodotView view) { + public GodotEditText(final Context context) { super(context); - - setPadding(0, 0, 0, 0); - setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI | EditorInfo.IME_ACTION_DONE); - setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); - - mView = view; - mInputWrapper = new GodotTextInputWrapper(mView, this); - setOnEditorActionListener(mInputWrapper); - view.requestFocus(); - - // Create a popup window with an invisible layout for the virtual keyboard, - // so the view can be resized to get the vk height without resizing the main godot view. - final FrameLayout keyboardLayout = new FrameLayout(context); - keyboardLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); - keyboardLayout.setVisibility(View.INVISIBLE); - keyboardLayout.addView(this); - mKeyboardView = keyboardLayout; - - mKeyboardWindow = new PopupWindow(keyboardLayout, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); - mKeyboardWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); - mKeyboardWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); - mKeyboardWindow.setFocusable(true); // for the text edit to work - mKeyboardWindow.setTouchable(false); // inputs need to go through - - keyboardLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - Point fullSize = new Point(); - ((Activity)mView.getContext()).getWindowManager().getDefaultDisplay().getSize(fullSize); - Rect gameSize = new Rect(); - mKeyboardWindow.getContentView().getWindowVisibleDisplayFrame(gameSize); - - final int keyboardHeight = fullSize.y - gameSize.bottom; - GodotLib.setVirtualKeyboardHeight(keyboardHeight); - } - }); + this.initView(); } - public void onInitView() { - mKeyboardWindow.showAtLocation(mView, Gravity.NO_GRAVITY, 0, 0); + public GodotEditText(final Context context, final AttributeSet attrs) { + super(context, attrs); + this.initView(); } - public void onDestroyView() { - mKeyboardWindow.dismiss(); + public GodotEditText(final Context context, final AttributeSet attrs, final int defStyle) { + super(context, attrs, defStyle); + this.initView(); + } + + protected void initView() { + this.setPadding(0, 0, 0, 0); + this.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI | EditorInfo.IME_ACTION_DONE); } public boolean isMultiline() { @@ -170,7 +129,7 @@ public class GodotEditText extends EditText { edit.mInputWrapper.setOriginText(text); edit.addTextChangedListener(edit.mInputWrapper); - final InputMethodManager imm = (InputMethodManager)mKeyboardView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + final InputMethodManager imm = (InputMethodManager)mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(edit, 0); } } break; @@ -179,7 +138,7 @@ public class GodotEditText extends EditText { GodotEditText edit = (GodotEditText)msg.obj; edit.removeTextChangedListener(mInputWrapper); - final InputMethodManager imm = (InputMethodManager)mKeyboardView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + final InputMethodManager imm = (InputMethodManager)mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edit.getWindowToken(), 0); edit.mView.requestFocus(); } break; @@ -192,6 +151,17 @@ public class GodotEditText extends EditText { p_edit_text.setFilters(filters); } + // =========================================================== + // Getter & Setter + // =========================================================== + public void setView(final GodotView view) { + this.mView = view; + if (mInputWrapper == null) + mInputWrapper = new GodotTextInputWrapper(mView, this); + this.setOnEditorActionListener(mInputWrapper); + view.requestFocus(); + } + // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== From b0aabf2c03f3f6592df09a8c584b7c5bc37e8803 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Tue, 11 Aug 2020 17:45:09 +0300 Subject: [PATCH 03/18] [macOS] Fix crash on failed `fork`. (cherry picked from commit d6e3a8a1373e22011e657d6265dd9d033d7db7b2) --- drivers/unix/os_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index 9a535c4f2eb..a82f19768cb 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -347,7 +347,7 @@ Error OS_Unix::execute(const String &p_path, const List &p_arguments, bo execvp(p_path.utf8().get_data(), &args[0]); // still alive? something failed.. fprintf(stderr, "**ERROR** OS_Unix::execute - Could not create child process while executing: %s\n", p_path.utf8().get_data()); - abort(); + raise(SIGKILL); } if (p_blocking) { From c2d7d81ac8482942d6cf4b40902290c5b1cad099 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 10 Aug 2020 22:57:05 +0200 Subject: [PATCH 04/18] Fix inconsistent indentation in the FreeDesktop MIME type XML (cherry picked from commit 4dc6efc08ec816b3ef2a4966ec78484aabcb0ce5) --- misc/dist/linux/x-godot-project.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/misc/dist/linux/x-godot-project.xml b/misc/dist/linux/x-godot-project.xml index 0572e4e54ec..9f28bab2ae0 100644 --- a/misc/dist/linux/x-godot-project.xml +++ b/misc/dist/linux/x-godot-project.xml @@ -1,8 +1,8 @@ - - - Godot Engine project - - + + + Godot Engine project + + From 04297798353d6d2cc70deb931a3ffe2147180ead Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 5 Aug 2020 17:34:32 +0200 Subject: [PATCH 05/18] Improve the project README - Use the SVG version of the logo. - Mention console support in the first paragraph. - Point contributors to the `#godotengine-devel` IRC channel. - Improve formatting for better readability. - Add more links when needed. - Fix warnings reported by markdownlint. (cherry picked from commit b0713e9e6c86079670da4b84ef8038e8f6a60b1b) --- README.md | 54 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index e962f90333a..ad0fe3079c0 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,29 @@ -[![Godot Engine logo](/logo.png)](https://godotengine.org) +# Godot Engine -## Godot Engine +

+ + Godot Engine logo + +

-Homepage: https://godotengine.org +## 2D and 3D cross-platform game engine -#### 2D and 3D cross-platform game engine +**[Godot Engine](https://godotengine.org) is a feature-packed, cross-platform +game engine to create 2D and 3D games from a unified interface.** It provides a +comprehensive set of common tools, so that users can focus on making games +without having to reinvent the wheel. Games can be exported in one click to a +number of platforms, including the major desktop platforms (Linux, macOS, +Windows), mobile platforms (Android, iOS), as well as Web-based platforms +(HTML5) and +[consoles](https://docs.godotengine.org/en/latest/tutorials/platform/consoles.html). -Godot Engine is a feature-packed, cross-platform game engine to create 2D and -3D games from a unified interface. It provides a comprehensive set of common -tools, so that users can focus on making games without having to reinvent the -wheel. Games can be exported in one click to a number of platforms, including -the major desktop platforms (Linux, Mac OSX, Windows) as well as mobile -(Android, iOS) and web-based (HTML5) platforms. - -#### Free, open source and community-driven +## Free, open source and community-driven Godot is completely free and open source under the very permissive MIT license. No strings attached, no royalties, nothing. The users' games are theirs, down to the last line of engine code. Godot's development is fully independent and community-driven, empowering users to help shape their engine to match their -expectations. It is supported by the Software Freedom Conservancy +expectations. It is supported by the [Software Freedom Conservancy](https://sfconservancy.org/) not-for-profit. Before being open sourced in February 2014, Godot had been developed by Juan @@ -28,43 +32,45 @@ years as an in-house engine, used to publish several work-for-hire titles. ![Screenshot of a 3D scene in Godot Engine](https://raw.githubusercontent.com/godotengine/godot-design/master/screenshots/editor_tps_demo_1920x1080.jpg) -### Getting the engine +## Getting the engine -#### Binary downloads +### Binary downloads Official binaries for the Godot editor and the export templates can be found [on the homepage](https://godotengine.org/download). -#### Compiling from source +### Compiling from source [See the official docs](https://docs.godotengine.org/en/latest/development/compiling/) for compilation instructions for every supported platform. -### Community and contributing +## Community and contributing Godot is not only an engine but an ever-growing community of users and engine developers. The main community channels are listed [on the homepage](https://godotengine.org/community). -To get in touch with the developers, the best way is to join the -[#godotengine IRC channel](https://webchat.freenode.net/?channels=godotengine) +To get in touch with the engine developers, the best way is to join the +[#godotengine-devel IRC channel](https://webchat.freenode.net/?channels=godotengine-devel) on Freenode. To get started contributing to the project, see the [contributing guide](CONTRIBUTING.md). -### Documentation and demos +## Documentation and demos The official documentation is hosted on [ReadTheDocs](https://docs.godotengine.org). It is maintained by the Godot community in its own [GitHub repository](https://github.com/godotengine/godot-docs). The [class reference](https://docs.godotengine.org/en/latest/classes/) -is also accessible from within the engine. +is also accessible from the Godot editor. The official demos are maintained in their own [GitHub repository](https://github.com/godotengine/godot-demo-projects) as well. -There are also a number of other learning resources provided by the community, -such as text and video tutorials, demos, etc. Consult the [community channels](https://godotengine.org/community) -for more info. +There are also a number of other +[learning resources](https://docs.godotengine.org/en/latest/community/tutorials.html) +provided by the community, such as text and video tutorials, demos, etc. +Consult the [community channels](https://godotengine.org/community) +for more information. [![Actions Build Status](https://github.com/godotengine/godot/workflows/Godot/badge.svg?branch=master)](https://github.com/godotengine/godot/actions) [![Code Triagers Badge](https://www.codetriage.com/godotengine/godot/badges/users.svg)](https://www.codetriage.com/godotengine/godot) From 5433b8470c8c06b372704e92c87d8476f7e97ea3 Mon Sep 17 00:00:00 2001 From: Tomasz Chabora Date: Mon, 3 Aug 2020 22:55:25 +0200 Subject: [PATCH 06/18] Improve Vector2.angle() description (cherry picked from commit a09078e64bf56577f22ab9da7276ee5a82d9dd8c) --- doc/classes/Vector2.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/classes/Vector2.xml b/doc/classes/Vector2.xml index 6ea12c6965d..26f8d721bc8 100644 --- a/doc/classes/Vector2.xml +++ b/doc/classes/Vector2.xml @@ -33,7 +33,8 @@ - Returns this vector's angle with respect to the X axis, or [code](1, 0)[/code] vector, in radians. + Returns this vector's angle with respect to the positive X axis, or [code](1, 0)[/code] vector, in radians. + For example, [code]Vector2.RIGHT.angle()[/code] will return zero, [code]Vector2.DOWN.angle()[/code] will return [code]PI / 2[/code] (a quarter turn, or 90 degrees), and [code]Vector2(1, -1).angle()[/code] will return [code]-PI / 4[/code] (a negative eighth turn, or -45 degrees). Equivalent to the result of [method @GDScript.atan2] when called with the vector's [member y] and [member x] as parameters: [code]atan2(y, x)[/code]. From f19bab516550dc163cb6987eade82d797a016620 Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Sat, 1 Aug 2020 23:43:14 -0700 Subject: [PATCH 07/18] platform: Update metadata for export platforms Updates the logos of for macOS, Android, and iOS. Addresses https://github.com/godotengine/godot-proposals/issues/1161 (cherry picked from commit 41d8c0c8185aabd5fdf6e019fffe3a5b35d43434) --- platform/android/logo.png | Bin 1459 -> 951 bytes platform/iphone/logo.png | Bin 1489 -> 1297 bytes platform/osx/logo.png | Bin 1751 -> 7195 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/android/logo.png b/platform/android/logo.png index df445f6a9c936466d7d2baabc6b81c702d776f89..f44d360a25d1d02ae01a927251d30d9460e3f92f 100644 GIT binary patch delta 940 zcmV;d15^C73%3W58Gi-<0047(dh`GQ010qNS#tmY0Ez$r0Ez*WB2n7_000?uMObuG zZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs0009-NklB!H7L8D@xJ~b3{-SUFbq!_q~Zo$a!J3O2Po@y+#%{$&W z4P6~`8@t+9RnjMw6fvf6N8#zI+gH|%Hu>z2TB}2dPX=+_F%!twFMS{1O-v3pkCwop z+Nx&k{<41Q`hQ9`)kh0ZjL9QaA?<9~zWn9F8$whRLt%6M z;)h2~AlKbCU1~L9)^J2Cpfgq__va_KY&&KGxvuux1%JSVMkElSy&h`gFRB_)P4`T3OzHZ4g6$vzUcjRIkKf|c^ z{xCQ!O)uX(b=jtpU|L2kS3^=$*68FGd8jkt7( zaGwyqBHoMfBc#wnSVKC4aAmnN@_ByBl1ustDk*LsVek`zVoauOt#A20ftd6* zjb(DEPSW{gYaqms8*2h-l%sSRC81l4Z;ma6_Yq0F~lUo}p{I-HFgumfxH zC-!Hymth|I&zw?svk-UUQ#_s#i&%yC@DTpM#hLAgxCi_2GhV|^9K;)${`$=RcifF1 z@qaqj>$@W+q5o#=#LR4b2Ug-PypYKrMF-wN>CkGztGE^)WU?h_$;M}7Rcyjrng7B} zHyK+QSOdE-C;J{euYYCl-ZHy@xr6LVCGNs3oPui%Ds|?21;!2bEfIJOSL0iKUC{pQ z*_Y|};8(O^dKUPcLGnGB-CBHuul4Pa1ts_mzu-me&2r4uHzgZj(4#xaxa_n48(KV9F`dkqe5?K>u3#QBGOqNUOkams{3d$E# zH3B&U2zZ5LJSOWIR(uDi$kR`0&@S zQ4Yuz11d{um3B`ME?cNz>cL;TN~vL;vZyQ@P@IvGp?bMeWTgbeKsgPLys2^!Hqh}v z#3R5ARHJFZ9aAe6Rw@xzA`xCL5mF=$RKv{7$S2GqsmNBjL@~8fM%R|7aF%@TRJq(K za(UC_)4OF=4Y_Jp0}Yo1Dvl_ZFmU88nxz2r5zuxfCWfd=2_t9Tf|>F`1!4{Bm4Rx2 z&MW zm8n{)=#wsLa`CS%$XzyWHfG2E?=ma)i0CQDP1y80VtT(DZ|AFN&pa0yGj`tYY=wJW|im}JZnShMC)yhe2Ad$ERDPTl{MAj$+BNxa>Xp-dMW&-NUng0`tWz{rG{=8d4}`;>OpyRi$MM5UI9qQEl0(0`z$67M0emK(;E-c7vt` zVL<)oN`m}?85miZjU?EZc&vF@_3C6K6xCH_#nrlm`U(~tyMBIq*K~J2A&;YvU>FF^0(u^CrdrO^!3>9AKqLhZ|90}`=3-|=hL>;4m*DJ+NEWNMmF~M_trgr z`Rc`~@^>?&CvSLt^1JDxeQz)SvRl0Wiv6N1SN6ZXBD!$zWm|!^e`}9?FwoihZ0dv; zS*IQqaLQ>YmpnFC5wZWaE%Vszzn^a0`EYfeIloH8_X92o|F&Cw+u^oG#`@cK=T%Z> z-!{uHmry=Zq;@igPro5SzbVG;RpBdOZsYNEaSW-rl{=aFjJ~^w`}zFz?|!+~D{^NW zW?Qeyz0H+vo_Axxw%ps-q~GrOpFZ#I$I>E6_uknXnU6^LDr-7-FZr*%cuSArdbJDx z&xrh}zv%b)%%el=6>L>jx>tMtTHq&qVb&$v&<5>-33eTqW7b@JIj^~7wsvfNOUd_( zpQjkP9?<{tRrzMOQ&HTZ`~~XEcg&~{j(y$b+7=UX(6efdkqh&Rjk>#E$9f-O!~}u&Z+gF;z^ceEV>CQk&c3jF(FJ=yqU&Ux0;HNGO8xCM#XIXXky6KqULa7T5(>{ zQUNtBN$Ubvxylb)D%zHDaN$y|0zJXce>-+j^f4|L^pZ@m#kB`e!FWk2O zpA%mnsD7#C!;wGCXV@;Mr*Z2PT=w@r*uoI-ZT|;L|1a*+GuKr=ZL!*`|0;a9_RP8Y zE8T+mFY7R*xkNv|Iq|N}T+`zr8=c<;(44$rjF6*2UngD@r{&N5T diff --git a/platform/iphone/logo.png b/platform/iphone/logo.png index 405b6f93ca18a5f3ff7a822dd8f025fd9a1d6ac4..966d8aa70a08ebb8d228779128b935169e740ff7 100644 GIT binary patch delta 1278 zcmVFjfrT~gb0a=KKO!f`eHPOXoLrh_~L^x0e>mre+;~kXb`lt#UfqM zZfO^{&@SES&d$s|$A_}pZl~Lzq|29_Wagaj&iBpzn>&PQNTpI+Ez4>rqV+`7AR-mh zIsXMjMnr^VWMOl`$jfm9kOtk+4B2t!RZB$Y% zLn*ah5mD`(GC)N23V<;+$vhFIkah$twn64ImdL>{vy3wkZsn(%#k{J|8%PD{epPBY!?jN+WEf@o;n#?zT1tEjW(T zS3El>B9DFFJF?@TEvZcL{^V$pce>K@>ghqzH%nRV%gddIah_AvthqKtx2o9PE+9$ulLn-=$v=hp!bG2rR#@ghuy( z1^~SKV}A}GJTnhOfsQNSwbq3=mi!woYb0}5v9@YKN$vxcZ-G!O8JGiS6F!szmewhd zMOa)ti#h;<2v01E;Cv>5HC46f$(+aP%B3@MqsFR0F1P`i0vJG7lF`;|1j;j^Ejk~` zTpW)#+=pTRFMKt85ZC>|TWTBV0hjN4&4wAx)~Ht0RJ6jE=W${D z4S&p|7%GgWf&nEW5avR#Az-Dkwg%`NwZT(rr6Qg^i>0A^Fy^I7atyJs*xZhc|MO&C z1PaXHDItm>NVH=tB3K#OfIo7d&dAlA!Fx#9q4l3 z!|%=>G?`DKQmueU4vt*Fm_CGB<7tpIf@MOFnL(o?BYojes3mWpC!;|itgV_{f`1Ib z`SCasUMHXi5g`k)&>E}^Z-7aYAFVuWxrj8MhL0-R-+=8=?(?I}`92)8f8^+dhs&{+7e`H}S_M`~_qv`anXm#}p(=gVTLtHbT%ewAv z0F&p*-rn9=w6b!)VVdojyWwEZ_m8?-?_R!q`B0I8JmT^AmWptAn<82Vkp+C4zvqg` oVWNLXq$}&X9W5;_-%PFl3vC!22{Ag4vH$=807*qoM6N<$f{<2Nt^fc4 delta 1472 zcmV;x1wZ$NklDJI{Bs3 z=~!cDF~)Vyd0$F7yzE$OJ+;%SX~MkTPkT&aA|<#JvolR-9{ee(7eB&h$__untQbUN+5zZd9$k}eBaruB<4 zhJP4_fiKAYuq!*l#Q%+Io?=UJBZLl*cPkALum zJXk0ev0kq+7z{uZbXR{e5lL_cI1@jkCM#2lWS}lynV@#)0j7B5Ws#SRy zM~}sR$^wd_97%wtY3O#lcsw3B91c)b6wgvZ`yI#Q5$E$+%=`Tw`FtKR z%IUf;j#w_2!n<59IGs+o-ELT|R)|KUBEyM0r0pVLqRuP%I!qx?v>H@At9UY_M1?pizNOl%;`X9+YmH63I!8Kl!`aKmSkhWFlk52<7lJlXm4=W+4kMZ76Rlu9M3CrBX{ zi(+nmo-*|J_aht*Gu*g*`7%EK_+z9*@4jwQY=801fBLGdsK^n}G;P1QxEP^Oh>jU9 z%+AiDt-T$8{q+|}U}|a#9UUE@Qz9yeL?ig==bu42^WECo3YimNL|7|y+S%Ee-4l<; z(AL%l*L7i8)?SW)s__RN#e+vAJUr3N%nX{En;265GYvwh4WV!dp-2c}z6A_3PkiRg z8Gj)Z1tWOk#0jttPMto5!NEa1ETL~`sE5zzh4>*zU_YM#e?U4P?4>6>((vw_V$Tfg@5BX@CW=TDJ?-oMTHdO^Vr$h!S(CcQCnMw z%F0SGog`19V`F1rQ4&>ERZtWU{X9rO(NqwrR0^xBtB_d^ri3lFva&)$vRR>yK!HaU z$p05#enB~NPkpWzfNOFOfHvQH>n(5(_uIC$o=bsg?5V<7HFUH~2zl!N4;=!Xm4B9% zVt8a2LxV$Lbht)cMb{7v2Ep1GyeE@thDMo0igN1F;U9ne0or`#nP+4_WjZX|I+Z10 z+V-AdnIP(=SmegShaY`JW6%wQg9G1v_dS04=_foRQ;yvci^af;i(sD{rpd6gRe4e* zl1b{w{C|V?@Z%3ZqO7b8rftF$KYxzvoXiq%yxx7sb-9S@+FITLcvc))jt#C`w#^{| znctk{eB)Ko;TR@4Uoe3C``?galUYw21a(CJ6*RZD&|X&0>+>DS5(oqWYb-2+g_TSt z5s{(d_xli#HIcK0SVSB)h|9@1GiqyU@^$3fkJ6G779V>aiFg7bnFF`m9e)dBhhZ2D zKgP1zmL}{7ouP*vqhpkLhVBuN!!$zvyU!L&oUw2~bu>RGqMmhe0GqLuU_2C5$Y(5M z)AaX#6F!}VETuDF&X^HXvV9$I8v|A=T0SX_BnuqOU4xdZ{YBTfOiBSumthpDg2U$wRUHWT}&q9uY7N> aUcF-1LlWYmx#*Js0000>=*Xk* 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 delta 1736 zcmV;(1~>VeIM)r3BYy^-NkliJZF>i6 zd-wT`uGy%{jM#qNdHP(e`JeN5m*a~+i~JWP{1a0CgIcp@%{hDa?72Ch|7!qUzkdCj zJDtwHb?ess@t*g*=RY6U8^82>UAKON)arFq1QAdH098To{(o}B!2v)J-v9dN6yNyN z`!75?I{K@9`}RHTGMByF`(FFHH+DCVjNtCLGf>{O-DzVfv3uv%v;^R#ANj$>Xsq8P zm<|906$e1W03e{C1_l74%5`pf(avRy@TDtX`Kl*h`ifUSa%A&}3jzwbV?Njy0XHaW zg}bHh%*^ypuYZ2kD|tayqfvYDbuPW(rpc)Zf`|b+gb)PsGRf#wRq~q0K7o`heD~At^SLiDIWb8Hp#X4qL%olAbvb`*mit_D2VeN?rr{o)7|2kVo zHqh=(cYn)@DkiEbQC5*|Wt108Cnq{ANnpBNF)?o-5LA11a3fU-fZ2KD>=P}-g_I({ z{LZ`Sv|H@E=#?3rZX-al$V}S+n3ywah4k!$G!Yy_fGQf6Y$?DQ=Z>+axpuHngb;La z9*_^%D{^9@jjE8$Ir6F3^Q5P~kcCzkGXRJYx_^}e&?2M8JV101|TA| z%196)su0X5RQkTkJ)X_FT^FSrji7>uCUcXgxWSEXMT`j%!4Z&x1BWiglb-e>QZmp0 z?zm?N1UE-i5Rs(-0IkXh0`)=(CZy1_3)?Sq;{jMql$JR2==%WJv3now_5u!lBg)2+ z9e>>BPWSIeY`M4_xI2d927&-A18}Dk6GaGE<W=rMs=9!H3yu#8 z`59r0Ss{k1605vCyWFIVE3K_G*_)2#tp*w=&8KF;O@CN{i06(cf;Ip z_vPon(z}+MA*u+TcM#l_*qR04Y8T(YavlEF4D<7|xuM*3P9+VBW)NQqklY3J8fnDu{r^iutkgxZX9cMW@rklHph%KBmN`&D)q5KaFY_!1QdM zz?VG>a!malEg2JkIL6^;Uz_8{K7WLjZJKM=BN9llBv~Y;NEH(lbz*y#oxO9S-C6+Y z0j}FftJUJ8?|nTty!?6&f8(<~xHg_*A0nlMtwXI4!8zZ3 zAGKBM*?N(yv2o8OShIOoFP%+#mKgu%uG-8Pt4)?JNbk(Rwj@i7!eSGLLs&1 zDC(=&dg&Xp{jxWw)@TxH4S!S%f+||n`0*R=!NVT;WUh9t8&j4gv8oVNW@o2CloTV5 z3?WiVD-(!j)MBCvAnp(Z5WsO)T%hno)oBrX*5UoZA=EkJ_rK(~->-LM!opT7-&Oa{!Mnv?}?sgC0e8BkIIt`o!n2?p<68`qL zo&UAv$$;Y`@=kYuMnMRHzoldb?#6#gs#+6~H}&lNKUAyLr1xQ31H34TOZKe%uO&SJ e+kk(n_@4oiGEw50Kwe4!0000 Date: Fri, 31 Jul 2020 20:16:51 +0200 Subject: [PATCH 08/18] DirectInput: use correct joypad id Previously `joypad_count` was used as the index into the d_joypads array when initializing a new gamepad. This caused the accidental override of an already connected device when a gamepad with a lower id was disconnected and connected again. fixes #17566 (cherry picked from commit 802a0316c56c954d10c0d7f0c7bb44f3298d2c8f) --- platform/windows/joypad_windows.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/windows/joypad_windows.cpp b/platform/windows/joypad_windows.cpp index 1abd2d162dd..74b1d72e49c 100644 --- a/platform/windows/joypad_windows.cpp +++ b/platform/windows/joypad_windows.cpp @@ -153,8 +153,8 @@ bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE *instance) { if (have_device(instance->guidInstance) || num == -1) return false; - d_joypads[joypad_count] = dinput_gamepad(); - dinput_gamepad *joy = &d_joypads[joypad_count]; + d_joypads[num] = dinput_gamepad(); + dinput_gamepad *joy = &d_joypads[num]; const DWORD devtype = (instance->dwDevType & 0xFF); @@ -178,7 +178,7 @@ bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE *instance) { WORD version = 0; sprintf_s(uid, "%04x%04x%04x%04x%04x%04x%04x%04x", type, 0, vendor, 0, product, 0, version, 0); - id_to_change = joypad_count; + id_to_change = num; slider_count = 0; joy->di_joy->SetDataFormat(&c_dfDIJoystick2); From cea16907bb8df7070a8e127077544ccda56e9da3 Mon Sep 17 00:00:00 2001 From: Tomasz Chabora Date: Fri, 31 Jul 2020 22:43:40 +0200 Subject: [PATCH 09/18] Properly disambiguate unsaved scripts (cherry picked from commit 3082def404091bce1acaa53226c514d105ddf8d1) --- editor/plugins/script_editor_plugin.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 579ea389c64..32c9ca19989 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -1892,14 +1892,18 @@ void ScriptEditor::_update_script_names() { Vector disambiguated_script_names; Vector full_script_paths; for (int j = 0; j < sedata.size(); j++) { - disambiguated_script_names.push_back(sedata[j].name); + disambiguated_script_names.push_back(sedata[j].name.replace("(*)", "")); full_script_paths.push_back(sedata[j].tooltip); } EditorNode::disambiguate_filenames(full_script_paths, disambiguated_script_names); for (int j = 0; j < sedata.size(); j++) { - sedata.write[j].name = disambiguated_script_names[j]; + if (sedata[j].name.ends_with("(*)")) { + sedata.write[j].name = disambiguated_script_names[j] + "(*)"; + } else { + sedata.write[j].name = disambiguated_script_names[j]; + } } EditorHelp *eh = Object::cast_to(tab_container->get_child(i)); From 3211a51be80b80afbf0a8532492362a6a66bc69b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20F=C3=A9lix?= Date: Mon, 3 Aug 2020 18:46:43 +0200 Subject: [PATCH 10/18] Modify the scene only when color changed Editor now changes a color in the inspector only when it is different from the current one. Solves fake unsaved changes in editor after using the ColorPicker. Resolves: #40879 (cherry picked from commit f3626364fc97c6b0d4692d5e8d5c5f3aeddc3f17) --- editor/editor_properties.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 36d602284ae..89ffb25bf7e 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -1885,6 +1885,10 @@ EditorPropertyTransform::EditorPropertyTransform() { ////////////// COLOR PICKER ////////////////////// void EditorPropertyColor::_color_changed(const Color &p_color) { + // Cancel the color change if the current color is identical to the new one. + if (get_edited_object()->get(get_edited_property()) == p_color) { + return; + } emit_changed(get_edited_property(), p_color, "", true); } From 69dc9c94172e205cbc7d2ddc596d16427ce8528b Mon Sep 17 00:00:00 2001 From: Maganty Rushyendra Date: Tue, 4 Aug 2020 23:54:59 +0800 Subject: [PATCH 11/18] Fix tile placement preview for rotated, skewed or scaled TileMaps Ensures that the editor preview when placing a tile on a TileMap takes into account the transformation of the TileMap. Previously, only the origin of the Tile was transformed, but not its orientation or scaling. (cherry picked from commit cf04aabef13629b01d6bbf724ca1ab60e041d656) --- editor/plugins/tile_map_editor_plugin.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index 95175639635..db46b884cb7 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -895,17 +895,17 @@ void TileMapEditor::_draw_cell(Control *p_viewport, int p_cell, const Point2i &p rect.position += tile_ofs; } - rect.position = p_xform.xform(rect.position); - rect.size *= sc; - Color modulate = node->get_tileset()->tile_get_modulate(p_cell); modulate.a = 0.5; + Transform2D old_transform = p_viewport->get_viewport_transform(); + p_viewport->draw_set_transform_matrix(p_xform); // Take into account TileMap transformation when displaying cell if (r.has_no_area()) { p_viewport->draw_texture_rect(t, rect, false, modulate, p_transpose); } else { p_viewport->draw_texture_rect_region(t, rect, r, modulate, p_transpose); } + p_viewport->draw_set_transform_matrix(old_transform); } void TileMapEditor::_draw_fill_preview(Control *p_viewport, int p_cell, const Point2i &p_point, bool p_flip_h, bool p_flip_v, bool p_transpose, const Point2i &p_autotile_coord, const Transform2D &p_xform) { From 5db6095bde9dcfd993aad7cab6bdf8731d10a7d0 Mon Sep 17 00:00:00 2001 From: Gordon MacPherson Date: Wed, 12 Aug 2020 15:00:25 +0100 Subject: [PATCH 12/18] update to use scons compile db tool (cherry picked from commit 974a4cde9ddd6e656e7cf85e47002917d1410d22) --- SConstruct | 7 +- misc/scons/compilation_db.py | 177 ----------------------------------- 2 files changed, 4 insertions(+), 180 deletions(-) delete mode 100644 misc/scons/compilation_db.py diff --git a/SConstruct b/SConstruct index 207254713a2..3768ada10d2 100644 --- a/SConstruct +++ b/SConstruct @@ -298,9 +298,10 @@ if selected_platform in platform_list: from SCons import __version__ as scons_raw_version scons_ver = env._get_major_minor_revision(scons_raw_version) - if scons_ver >= (3, 1, 1): - env.Tool("compilation_db", toolpath=["misc/scons"]) - env.Alias("compiledb", env.CompilationDatabase("compile_commands.json")) + + if scons_ver >= (4, 0, 0): + env.Tool("compilation_db") + env.Alias("compiledb", env.CompilationDatabase()) if env["dev"]: env["verbose"] = True diff --git a/misc/scons/compilation_db.py b/misc/scons/compilation_db.py deleted file mode 100644 index 87db32adc96..00000000000 --- a/misc/scons/compilation_db.py +++ /dev/null @@ -1,177 +0,0 @@ -# Copyright 2015 MongoDB Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import json -import SCons -import itertools - -# Implements the ability for SCons to emit a compilation database for the MongoDB project. See -# http://clang.llvm.org/docs/JSONCompilationDatabase.html for details on what a compilation -# database is, and why you might want one. The only user visible entry point here is -# 'env.CompilationDatabase'. This method takes an optional 'target' to name the file that -# should hold the compilation database, otherwise, the file defaults to compile_commands.json, -# which is the name that most clang tools search for by default. - -# TODO: Is there a better way to do this than this global? Right now this exists so that the -# emitter we add can record all of the things it emits, so that the scanner for the top level -# compilation database can access the complete list, and also so that the writer has easy -# access to write all of the files. But it seems clunky. How can the emitter and the scanner -# communicate more gracefully? -__COMPILATION_DB_ENTRIES = [] - -# We make no effort to avoid rebuilding the entries. Someday, perhaps we could and even -# integrate with the cache, but there doesn't seem to be much call for it. -class __CompilationDbNode(SCons.Node.Python.Value): - def __init__(self, value): - SCons.Node.Python.Value.__init__(self, value) - self.Decider(changed_since_last_build_node) - - -def changed_since_last_build_node(child, target, prev_ni, node): - """ Dummy decider to force always building""" - return True - - -def makeEmitCompilationDbEntry(comstr): - """ - Effectively this creates a lambda function to capture: - * command line - * source - * target - :param comstr: unevaluated command line - :return: an emitter which has captured the above - """ - user_action = SCons.Action.Action(comstr) - - def EmitCompilationDbEntry(target, source, env): - """ - This emitter will be added to each c/c++ object build to capture the info needed - for clang tools - :param target: target node(s) - :param source: source node(s) - :param env: Environment for use building this node - :return: target(s), source(s) - """ - - dbtarget = __CompilationDbNode(source) - - entry = env.__COMPILATIONDB_Entry( - target=dbtarget, - source=[], - __COMPILATIONDB_UTARGET=target, - __COMPILATIONDB_USOURCE=source, - __COMPILATIONDB_UACTION=user_action, - __COMPILATIONDB_ENV=env, - ) - - # TODO: Technically, these next two lines should not be required: it should be fine to - # cache the entries. However, they don't seem to update properly. Since they are quick - # to re-generate disable caching and sidestep this problem. - env.AlwaysBuild(entry) - env.NoCache(entry) - - __COMPILATION_DB_ENTRIES.append(dbtarget) - - return target, source - - return EmitCompilationDbEntry - - -def CompilationDbEntryAction(target, source, env, **kw): - """ - Create a dictionary with evaluated command line, target, source - and store that info as an attribute on the target - (Which has been stored in __COMPILATION_DB_ENTRIES array - :param target: target node(s) - :param source: source node(s) - :param env: Environment for use building this node - :param kw: - :return: None - """ - - command = env["__COMPILATIONDB_UACTION"].strfunction( - target=env["__COMPILATIONDB_UTARGET"], source=env["__COMPILATIONDB_USOURCE"], env=env["__COMPILATIONDB_ENV"], - ) - - entry = { - "directory": env.Dir("#").abspath, - "command": command, - "file": str(env["__COMPILATIONDB_USOURCE"][0]), - } - - target[0].write(entry) - - -def WriteCompilationDb(target, source, env): - entries = [] - - for s in __COMPILATION_DB_ENTRIES: - entries.append(s.read()) - - with open(str(target[0]), "w") as target_file: - json.dump(entries, target_file, sort_keys=True, indent=4, separators=(",", ": ")) - - -def ScanCompilationDb(node, env, path): - return __COMPILATION_DB_ENTRIES - - -def generate(env, **kwargs): - - static_obj, shared_obj = SCons.Tool.createObjBuilders(env) - - env["COMPILATIONDB_COMSTR"] = kwargs.get("COMPILATIONDB_COMSTR", "Building compilation database $TARGET") - - components_by_suffix = itertools.chain( - itertools.product( - env["CPPSUFFIXES"], - [ - (static_obj, SCons.Defaults.StaticObjectEmitter, "$CXXCOM"), - (shared_obj, SCons.Defaults.SharedObjectEmitter, "$SHCXXCOM"), - ], - ), - ) - - for entry in components_by_suffix: - suffix = entry[0] - builder, base_emitter, command = entry[1] - - # Ensure we have a valid entry - # used to auto ignore header files - if suffix in builder.emitter: - emitter = builder.emitter[suffix] - builder.emitter[suffix] = SCons.Builder.ListEmitter([emitter, makeEmitCompilationDbEntry(command),]) - - env["BUILDERS"]["__COMPILATIONDB_Entry"] = SCons.Builder.Builder( - action=SCons.Action.Action(CompilationDbEntryAction, None), - ) - - env["BUILDERS"]["__COMPILATIONDB_Database"] = SCons.Builder.Builder( - action=SCons.Action.Action(WriteCompilationDb, "$COMPILATIONDB_COMSTR"), - target_scanner=SCons.Scanner.Scanner(function=ScanCompilationDb, node_class=None), - ) - - def CompilationDatabase(env, target): - result = env.__COMPILATIONDB_Database(target=target, source=[]) - - env.AlwaysBuild(result) - env.NoCache(result) - - return result - - env.AddMethod(CompilationDatabase, "CompilationDatabase") - - -def exists(env): - return True From 58a30199b4a13cafa45a3381d7cc13b54ae71de2 Mon Sep 17 00:00:00 2001 From: Hazar <36481442+hazarek@users.noreply.github.com> Date: Wed, 12 Aug 2020 11:50:15 +0300 Subject: [PATCH 13/18] grow_mask() description added Description; > Applies morphological dilation to the bitmap. The first argument is the dilation amount, Rect2 is the area where the dilation will be applied. (cherry picked from commit 1c61c8ab55cdc880ebb2538fe3f15ad389912031) --- doc/classes/BitMap.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/classes/BitMap.xml b/doc/classes/BitMap.xml index 28064e08e75..31ddaf10987 100644 --- a/doc/classes/BitMap.xml +++ b/doc/classes/BitMap.xml @@ -60,6 +60,7 @@ + Applies morphological dilation to the bitmap. The first argument is the dilation amount, Rect2 is the area where the dilation will be applied. From f592600ee8b2793d39932407229baf984aae4a26 Mon Sep 17 00:00:00 2001 From: Tomasz Chabora Date: Wed, 12 Aug 2020 17:53:18 +0200 Subject: [PATCH 14/18] Mention that Array.front/back throw error if empty (cherry picked from commit 4ff1a341717de6df6c4485d2f07c956656a253c8) --- doc/classes/Array.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml index f7c1d678a20..292c9ab0b97 100644 --- a/doc/classes/Array.xml +++ b/doc/classes/Array.xml @@ -99,7 +99,7 @@ - Returns the last element of the array, or [code]null[/code] if the array is empty. + Returns the last element of the array. Throws an error and returns [code]null[/code] if the array is empty. @@ -192,7 +192,7 @@ - Returns the first element of the array, or [code]null[/code] if the array is empty. + Returns the first element of the array. Throws an error and returns [code]null[/code] if the array is empty. From b62872d5bc89db25a6a8faf40a6e9f03d94e63e6 Mon Sep 17 00:00:00 2001 From: Thakee Nathees Date: Thu, 13 Aug 2020 11:35:33 +0530 Subject: [PATCH 15/18] Documentation: clarify the indent parameter of JSON.print (cherry picked from commit 3609351788121c1f94c06b198f5a6e94c7d3d22f) --- doc/classes/JSON.xml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/doc/classes/JSON.xml b/doc/classes/JSON.xml index fa519152922..0eb7a93e955 100644 --- a/doc/classes/JSON.xml +++ b/doc/classes/JSON.xml @@ -30,6 +30,28 @@ Converts a [Variant] var to JSON text and returns the result. Useful for serializing data to store or send over the network. [b]Note:[/b] The JSON specification does not define integer or float types, but only a [i]number[/i] type. Therefore, converting a Variant to JSON text will convert all numerical values to [float] types. + Use [code]indent[/code] parameter to pretty print the output. + [b]Example output:[/b] + [codeblock] + ## JSON.print(my_dictionary) + {"name":"my_dictionary","version":"1.0.0","entities":[{"name":"entity_0","value":"value_0"},{"name":"entity_1","value":"value_1"}]} + + ## JSON.print(my_dictionary, "\t") + { + "name": "my_dictionary", + "version": "1.0.0", + "entities": [ + { + "name": "entity_0", + "value": "value_0" + }, + { + "name": "entity_1", + "value": "value_1" + } + ] + } + [/codeblock] From 330afdd6cb75c432327f8e550d1fe8634100741b Mon Sep 17 00:00:00 2001 From: Umang Kalra Date: Fri, 31 Jul 2020 00:36:46 +0530 Subject: [PATCH 16/18] Fix RichTextLabel center alignment bug Fixes #40207. (cherry picked from commit cec21ab82cff23b2fa97a7c5e25961a38341c8cf) --- scene/gui/rich_text_label.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 88125087da9..e2acc5321b8 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -188,7 +188,7 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & if (p_mode != PROCESS_CACHE && align != ALIGN_FILL) wofs += line_ofs; - int begin = wofs; + int begin = margin; Ref cfont = _find_font(it); if (cfont.is_null()) From 7ce476c4250a8c0bca0689cf2071bd2c151fa7fd Mon Sep 17 00:00:00 2001 From: Tomasz Chabora Date: Wed, 12 Aug 2020 13:31:32 +0200 Subject: [PATCH 17/18] Expose NOTIFICATION_POST_ENTER_TREE (cherry picked from commit 677796a2c342ca221918e8dfa8d2361ae78082d1) --- doc/classes/Node.xml | 3 +++ scene/main/node.cpp | 1 + 2 files changed, 4 insertions(+) diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 2f7b349ba58..2a8762cb606 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -925,6 +925,9 @@ Notification received every frame when the internal physics process flag is set (see [method set_physics_process_internal]). + + Notification received when the node is ready, just before [constant NOTIFICATION_READY] is received. Unlike the latter, it's sent every time the node enters tree, instead of only once. + Notification received from the OS when the mouse enters the game window. Implemented on desktop and web platforms. diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 81c7b382c7f..e95d8616d85 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -2873,6 +2873,7 @@ void Node::_bind_methods() { BIND_CONSTANT(NOTIFICATION_PATH_CHANGED); BIND_CONSTANT(NOTIFICATION_INTERNAL_PROCESS); BIND_CONSTANT(NOTIFICATION_INTERNAL_PHYSICS_PROCESS); + BIND_CONSTANT(NOTIFICATION_POST_ENTER_TREE); BIND_CONSTANT(NOTIFICATION_WM_MOUSE_ENTER); BIND_CONSTANT(NOTIFICATION_WM_MOUSE_EXIT); From e283d4b5c832da78cca6003b6b61e8ed58094b09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Thu, 13 Aug 2020 23:54:30 +0200 Subject: [PATCH 18/18] Update AUTHORS and DONORS list New contributors added to AUTHORS: @hinlopen, @naithar, @rrcore, @SkyLucilfer, @TwistedTwigleg Thanks to all contributors and donors for making Godot possible! --- Also changes to relevant code that parses the DONORS.md to match the new tiers. (cherry picked from commit d2d4c1c9575953868fbdf25d8684eeee1eff4e25) --- .mailmap | 9 +- AUTHORS.md | 9 +- DONORS.md | 220 +++++++++++++++++++++++----------------- core/core_builders.py | 15 ++- core/engine.cpp | 4 +- doc/classes/Engine.xml | 2 +- editor/editor_about.cpp | 7 +- 7 files changed, 163 insertions(+), 103 deletions(-) diff --git a/.mailmap b/.mailmap index 4b427a8a5ec..f2f69eb9da2 100644 --- a/.mailmap +++ b/.mailmap @@ -2,10 +2,6 @@ Alexander Holland Alexander Holland Alexander Holland Andrea Catania -Andreas Haas -Andreas Haas -Andreas Haas -Andreas Haas Anish Bhobe Anutrix Aren Villanueva @@ -69,6 +65,11 @@ Kelly Thomas K. S. Ernest (iFire) Lee Leon Krause Leon Krause +Liz Haas <27thLiz@gmail.com> +Liz Haas <27thLiz@gmail.com> +Liz Haas <27thLiz@gmail.com> +Liz Haas <27thLiz@gmail.com> +Liz Haas <27thLiz@gmail.com> Manuel Strey Marcelo Fernandez Marcin Zawiejski diff --git a/AUTHORS.md b/AUTHORS.md index f1803c672c6..40aa50f8b67 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -32,7 +32,6 @@ name is available. Alexey Khoroshavin (allkhor) Alket Rexhepi (alketii) Andrea Catania (AndreaCatania) - Andreas Haas (Hinsbart) Andrii Doroshenko (Xrayez) Andy Moss (MillionOstrich) Anish Bhobe (KidRigger) @@ -97,6 +96,7 @@ name is available. Jakub Grzesik (kubecz3k) James Buck (jbuck3) Jérôme Gully (Nutriz) + Jia Jun Chai (SkyLucilfer) Joan Fons Sanchez (JFonS) Johan Manuel (29jm) Joshua Grams (JoshuaGrams) @@ -107,7 +107,8 @@ name is available. Kostadin Damyanov (Max-Might) K. S. Ernest (iFire) Lee (fire) lawnjelly - Leon Krause (eska014) + Leon Krause (leonkrause) + Liz Haas (27thLiz) Lucien Menassol (Kanabenki) m4nu3lf Maganty Rushyendra (mrushyendra) @@ -134,6 +135,7 @@ name is available. muiroc Nathan Warden (NathanWarden) Nils André-Chang (NilsIrl) + Noah Beard (TwistedTwigleg) Nuno Donato (nunodonato) Ovnuniarchos Pascal Richter (ShyRed) @@ -157,12 +159,15 @@ name is available. Robin Hübner (profan) romulox-x Ruslan Mustakov (endragor) + Ryan Roden-Corrent (rrcore) Saniko (sanikoyes) santouits SaracenOne + Sergey Minakov (naithar) sersoong Shiqing (kawa-yoiko) Simon Wenner (swenner) + Stijn Hinlopen (hinlopen) Swarnim Arun (minraws) Thakee Nathees (ThakeeNathees) Theo Hallenius (TheoXD) diff --git a/DONORS.md b/DONORS.md index 16a30b9489b..88e674f0431 100644 --- a/DONORS.md +++ b/DONORS.md @@ -12,26 +12,35 @@ generous deed immortalized in the next stable release of Godot Engine. ## Platinum sponsors + Gamblify Heroic Labs Interblock ## Gold sponsors - Gamblify + None currently, become one! + +## Silver sponsors + Moonwards +## Bronze sponsors + + Brandon Lamb + ## Mini sponsors AD Ford Alan Beauchamp albinaask Alejandro Saucedo + alex brown Andrew Dunai - Brandon Lamb Christian Baune Christopher Montesano Darkhan Baimyrza Darrin Massena + David Mydlarz Digital Grows Dov Zimring Edward Flick @@ -43,6 +52,7 @@ generous deed immortalized in the next stable release of Godot Engine. Jasper Brooks Javary Co. Jeffery Chiu + Jonah Stich Justin Arnold Kyle Szklenski Marcel Kräml @@ -51,45 +61,39 @@ generous deed immortalized in the next stable release of Godot Engine. Mike King Nathan Warden Neal Gompa (Conan Kudo) + Patrick Schmidt Ronnie Cheng Slobodan Milnovic Stephan Lanfermann Steve + Thomas Krampl Tristan Pemble VilliHaukka + Violin Iliev + 蕭惟允 ## Gold donors - Bjarke - David Gehrig - David Snopek - Ed Morley - Florian Rämisch - Jakub Grzesik - Manuele Finocchiaro - Officine Pixel S.n.c. - Rami - Ronan Zeegers - Sofox - Spicylewd - Taylor Ritenour - Zaven Muradyan - - Andreas Schüle - Andres Hernandez + Andrew Morsillo Asher Glick Austen McRae Bernhard Werner beVR Carlo Cabanilla + Chris Goddard Christopher Case Daniel James + David Gehrig David Giardi - Default Name + David Snopek + Ed Morley eggs + Ellen Poe Florian Breisch + Florian Rämisch Forge Gamejunkey + Jakub Grzesik Javier Roman Jon Woodward Karl Werf @@ -97,95 +101,89 @@ generous deed immortalized in the next stable release of Godot Engine. Lex Steers Luke Maciej Pendolski + Manuele Finocchiaro + Markus Wiesner Matthew Hillier Mohamed Ikbel Boulabiar Monster Vial + Officine Pixel S.n.c. + Rami Rene + Rene Tailleur Retro Village Rob Messick Roland Fredenhagen + Ronan Zeegers Ryan Badour Sandro Jenny Sarksus Scott Wadden Sergey - thechris + Sofox + Spicylewd + Taylor Ritenour Tom Langwaldt Tricky Fat Cat tukon William Wold + xagonist + Zaven Muradyan - Alex Khayrullin - alice gambrell - Andrew Harris - Barugon - Chris Goddard - Chris Serino - Christian Padilla - Conrad Curry - Craig Smith - Darrian Little - dragonage13 - GiulianoB - Hoai Nam Tran - Horváth Péter - Jeff Nyte - Joan Fons - Joshua Flores - Leo Fidel R Liban - Michael Dürwald - Péter Magyar - Petr Malac - Rob - Robert Willes - Ronnie Ashlock - SKison - Thomas Bjarnelöf - Valryia - Vincent Henderson - Vojtěch - Wojciech Chojnacki - Xavier PATRICELLI - Zoran Kukulj - + Aaron Winter Adam Nakonieczny Adam Neumann Alexander J Maynard Alexey Dyadchenko + Alex Khayrullin + alice gambrell Andreas Funke André Frélicot + Andrew Harris aoshiwik - Ben Powell + Barugon + Can Eris Carlos de Sousa Marques Charlie Whitfield Chase Taranto Chelsea Hash Chris Petrich + Chris Serino Christian Alexander Bjørklund Bøhler Christian Leth Jeppesen Cody Parker + Conrad Curry Craig Ostrin - curtis Kramer + Craig Smith D + Darrian Little Dev To be curious Digital Denizen Easypete Edgar Sun Eugenio Hugo Salgüero Jáñez + Felix Brückner flesk F S Gary Hulst gavlig GGGames.org + GiulianoB Guilherme Felipe de C. G. da Silva Heath Hayes + Hoai Nam Tran + Horváth Péter Hu Hund - Isaac Clausman + Jared Jared White - Joe Flood + Jeff Nyte + Joan Fons + Joel Fivat + Joel Höglund John G Gentzel Jose Malheiro Joseph Crane + Joshie Sparks + Joshua Flores Joshua Lesperance Juan Velandia Julian Todd @@ -194,14 +192,18 @@ generous deed immortalized in the next stable release of Godot Engine. Kelteseth kickmaniac kinfox + Lachie Lain Ballard + Leo Fidel R Liban luca duran + MadScientistCarl Marcelo Dornbusch Lopes - Marcelo Henrique Gonçalves + Marisa Clardy Markus Fehr - Markus Wiesner Martin Eigel Matt Eunson + Michael + Michael Dürwald Mikado069 m kaersten MuffinManKen @@ -211,48 +213,64 @@ generous deed immortalized in the next stable release of Godot Engine. Patrick Ting Paul Hocker Paul Von Zimmerman + Pedro Silva Pete Goodwin + Péter Magyar + Petr Malac PhaineOfCatz pl Ranoller + Raymond Harris + Ricardo Alcantara + Rob + Robert Willes Rob McInroy Rocknight Studios + Ronnie Ashlock Ryan + Ryan Wilson Samuel Judd Scott Pilet - Scott Ryan-Taylor Sean Morgan Sean Robertson Sébastien Serban Serafimescu + Shishir Tandale + SKison SleepCircle spilldata + Steven Landow Stoned Xander Tahiti Bos TheLevelOfDetail . + Thomas Bjarnelöf Thomas Kurz + Timothy Pulliam Tobias Bocanegra Trent Fehl - Urho + Valryia + VikFro + Vincent Henderson + Vojtěch William Foster + Wojciech Chojnacki + Xavier PATRICELLI + xzibiting Zhou Tuizhi Zie Weaver - 蕭惟允 + Zoran Kukulj ## Silver donors 1D_Inc Aaron - Aaron Winter - Abel Crunk Abraham Haskins Acheron Adam Adam Brunnmeier - Adam Carr + Adam Carr Adam Long Adam McCurdy - Adam Netzel Adam N Webber Adam Smeltzer Adam Szymański @@ -265,18 +283,22 @@ generous deed immortalized in the next stable release of Godot Engine. AleMax Alessandro Senese Alexander Erlemann + Alexandre Beaudoin alex clavelle + Ali Al-Khalifa Allan Davis Allen Schade Andreas Krampitz André Simões andrew james morris Andrew Mansuetti + Andrew Rosenwinkel Andrew Thomas Ano Nim Anthony Avina AP Condomines Arda Erol + Arisaka Mayuki Armin Preiml Arseniy M Arthur S. Muszynski @@ -285,43 +307,49 @@ generous deed immortalized in the next stable release of Godot Engine. Aubrey Falconer B A Balázs Batári - Balázs Hasprai Bartosz Bielecki Benedikt Ben Vercammen Bernd Jänichen - Bjarne + Bjarne Voigtländer Black Block Blair Allen Bobby CC Wong Bram brian + Brian mc gowan + Brodie Fairhall Burney Waring + Caleb Gartner Cameron Meyer Carl van der Geest Carwyn Edwards Cas Brugman Cassidy James + Chad Steadman Chris Brown Chris Chapin Christian Winter + Christoffer Dahlblom Christoffer Sundbom - Christoph Brodmann Christophe Gagnier Christopher Schmitt Christoph Woinke Clay Heaton Cole Johnson - Cuauhtemoc Moreno Curt King - Daniel Kimblad + CzechBlueBear + Daniel De Macedo Daniel Johnson DanielMaximiano + Daniel Szarfman Daniel Tebbutt + Daren Scot Wilson Dave Walker David May David Woodard - Dimitri Stanojevic + David Zanetti + Dmitry Fisher Dmytro Korchynskyi Dominik Wetzel Donn Eddy @@ -341,6 +369,7 @@ generous deed immortalized in the next stable release of Godot Engine. Eric Ellingson Eric Williams Erkki Seppälä + ET Garcia Evan Rose Fain Faisal Alkubaisi @@ -378,22 +407,20 @@ generous deed immortalized in the next stable release of Godot Engine. Jaiden Gerig Jaime Ruiz-Borau Vizárraga Jako Danar + James James A F Manley Jamiee H Jamie Massey Janders JARKKO PARVIAINEN + Jason Uechi Jean-Baptiste LEPESME Jeff Hungerford Jennifer Graves Jesse Dubay Joe Alden - Joel Fivat - Joel Höglund - Joel Setterberg - Johannes Goslar + Joe Klemmer John Gabriel - John Walker Jomei Jackson Jonas Jonas Bernemann @@ -405,7 +432,6 @@ generous deed immortalized in the next stable release of Godot Engine. Jon Sully Jordy Goodridge Jorge Antunes - Jose Aleman Jose C. Rubio Joseph Catrambone Josh Mitchell @@ -422,19 +448,19 @@ generous deed immortalized in the next stable release of Godot Engine. Karel Němec Kauzig Keedong Park + Keinan Powers Keith Bradner Kent Jofur Kevin McPhillips - Kevin Velasco Kiri Jolly Kjetil Haugland - Klagsam KsyTek Games Kuan Cheang kycho Kyle Appelgate Kyuppin Laurent Tréguier + LEMMiNO Leonardo Dimano Lin Chear Linus Lind Lundgren @@ -447,6 +473,7 @@ generous deed immortalized in the next stable release of Godot Engine. Marco Lardelli Mark Jad Mark Krenz + Markus Martin Markus Michael Egger Martin FIbik Martin Holas @@ -456,16 +483,16 @@ generous deed immortalized in the next stable release of Godot Engine. Marvin Mathieu Matt Edwards - Mauro Pellegrini + Matthew Booe Max Fiedler Maxime Blade Maxwell Megasploot Melissa Mears mewin + Michael Cullen Michael Haney Michał Skwarek - Mikael Olsson Mikayla Mike Birkhead Mike Cunningham @@ -484,12 +511,16 @@ generous deed immortalized in the next stable release of Godot Engine. Nick Allen Nick Macholl Niclas Eriksen + Nicolas Goll-Perrier Nicolás Montaña Nicolas SAN AGUSTIN NZ + '@oddgoo + OKV Oleg Reva Olivier Omar Delarosa + Oscar Domingo Oscar Norlander Pan Ip Parinya Teerakasemsuk @@ -502,16 +533,16 @@ generous deed immortalized in the next stable release of Godot Engine. Penguin Peter Philip Cohoe + Pierre-Nicolas Tollitte Piotr Góral Point08 + Preethi Vaidyanathan pwab Rad Cat Rafa Laguna - Ram Remi Rampin Rémi Verschelde Reneator - Ricardo Alcantara Richard Diss Richard Ivánek Robert Farr (Larington) @@ -522,7 +553,9 @@ generous deed immortalized in the next stable release of Godot Engine. Ronald Ho Hip (CrimsonZA) Ronan Ronny Mühle + Ross Squires Ryan Groom + Sam Caulfield Sam Edson Samuele Zolfanelli Scott D. Yelich @@ -531,15 +564,16 @@ generous deed immortalized in the next stable release of Godot Engine. Sebastian Michailidis Sebastian Vetter Sergio Mello-Grand + Shaher Shane Shane Sicienski Shane Spoor - Shiomi '- Duy Kevin Nguyen + Shiomi - Duy Kevin Nguyen Siim Raidma Simon Jonas Larsen + Simon Schoenenberger Simon Wenner Sintinium - SK smbe19 smo1704 soft circles @@ -547,7 +581,7 @@ generous deed immortalized in the next stable release of Godot Engine. Stefano Caronia Steve Cloete Svenne Krap - Taylor Fahlman + Tannen Helmers Terry tezuvholovdr TheVoiceInMyHead @@ -558,26 +592,30 @@ generous deed immortalized in the next stable release of Godot Engine. Tim Drumheller Tim Erskine Timothy B. MacDonald - Title Plinsut Tobbun Tobias Bradtke - Tom Glenn Toni Duran + Tony Zhao Torgeir Lilleskog Torsten Crass Travis O'Brien Trent Skinner + Triptych + Triumph263 . Troy Bonneau Tryggve Sollid Turgut Temucin Tyler Compton Tyler Stafos UltyX + Uther Valentí Gàmez Vaughan Ling Victor Vigilant Watch + Viktor Ismagilov Vincent Cloutier + Vitor Balbio Vladimir Savin waka nya Wayne Haak @@ -587,9 +625,9 @@ generous deed immortalized in the next stable release of Godot Engine. Wyatt Goodin Yegor Smirnov YiYin Gu - Yuri LaPointe Yuri Sizov Zgegnesh Hemomancer + ΒΑΣΙΛΗΣ ΓΕΩΡΓΑΚΟΠΟΥΛΟΣ 郝晨煜 ## Bronze donors diff --git a/core/core_builders.py b/core/core_builders.py index b1742627647..7beaf1f5c1a 100644 --- a/core/core_builders.py +++ b/core/core_builders.py @@ -86,10 +86,21 @@ def make_authors_header(target, source, env): def make_donors_header(target, source, env): - sections = ["Platinum sponsors", "Gold sponsors", "Mini sponsors", "Gold donors", "Silver donors", "Bronze donors"] + sections = [ + "Platinum sponsors", + "Gold sponsors", + "Silver sponsors", + "Bronze sponsors", + "Mini sponsors", + "Gold donors", + "Silver donors", + "Bronze donors", + ] sections_id = [ - "DONORS_SPONSOR_PLAT", + "DONORS_SPONSOR_PLATINUM", "DONORS_SPONSOR_GOLD", + "DONORS_SPONSOR_SILVER", + "DONORS_SPONSOR_BRONZE", "DONORS_SPONSOR_MINI", "DONORS_GOLD", "DONORS_SILVER", diff --git a/core/engine.cpp b/core/engine.cpp index cea676f3ea4..a1e67bde5ea 100644 --- a/core/engine.cpp +++ b/core/engine.cpp @@ -163,8 +163,10 @@ Array Engine::get_copyright_info() const { Dictionary Engine::get_donor_info() const { Dictionary donors; - donors["platinum_sponsors"] = array_from_info(DONORS_SPONSOR_PLAT); + donors["platinum_sponsors"] = array_from_info(DONORS_SPONSOR_PLATINUM); donors["gold_sponsors"] = array_from_info(DONORS_SPONSOR_GOLD); + donors["silver_sponsors"] = array_from_info(DONORS_SPONSOR_SILVER); + donors["bronze_sponsors"] = array_from_info(DONORS_SPONSOR_BRONZE); donors["mini_sponsors"] = array_from_info(DONORS_SPONSOR_MINI); donors["gold_donors"] = array_from_info(DONORS_GOLD); donors["silver_donors"] = array_from_info(DONORS_SILVER); diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml index 54d637e46df..c74351db5e7 100644 --- a/doc/classes/Engine.xml +++ b/doc/classes/Engine.xml @@ -34,7 +34,7 @@ Returns a Dictionary of Arrays of donor names. - {[code]platinum_sponsors[/code], [code]gold_sponsors[/code], [code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/code], [code]bronze_donors[/code]} + {[code]platinum_sponsors[/code], [code]gold_sponsors[/code], [code]silver_sponsors[/code], [code]bronze_sponsors[/code], [code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/code], [code]bronze_donors[/code]} diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index ba653017ef8..6485fa8bd13 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -162,12 +162,15 @@ EditorAbout::EditorAbout() { List donor_sections; donor_sections.push_back(TTR("Platinum Sponsors")); donor_sections.push_back(TTR("Gold Sponsors")); + donor_sections.push_back(TTR("Silver Sponsors")); + donor_sections.push_back(TTR("Bronze Sponsors")); donor_sections.push_back(TTR("Mini Sponsors")); donor_sections.push_back(TTR("Gold Donors")); donor_sections.push_back(TTR("Silver Donors")); donor_sections.push_back(TTR("Bronze Donors")); - const char *const *donor_src[] = { DONORS_SPONSOR_PLAT, DONORS_SPONSOR_GOLD, - DONORS_SPONSOR_MINI, DONORS_GOLD, DONORS_SILVER, DONORS_BRONZE }; + const char *const *donor_src[] = { DONORS_SPONSOR_PLATINUM, DONORS_SPONSOR_GOLD, + DONORS_SPONSOR_SILVER, DONORS_SPONSOR_BRONZE, DONORS_SPONSOR_MINI, + DONORS_GOLD, DONORS_SILVER, DONORS_BRONZE }; tc->add_child(_populate_list(TTR("Donors"), donor_sections, donor_src, 3)); // License