Godot development, work report - January / February 2022 

Platform code and editor improvements and fixes:

Localization:

  • Title of the main window now is properly translated and updated on localization change.
  • Loading multiple translation sources for the same language fixed.
  • Redundant locale validity checks, added remap for unset locale (LANG=C). Fixed fallback to the en locale.
Reference work:
 

Export:

  • Unsupported options are no longer removed from the export_presets.cfg file, instead that are hiding in the export dialog. Now it's possible to use the same export_presets.cfg on different host OSes without loosing data.
  • iOS "required" / "optional" icons list are merged into the single list and missing icons / loading screens are automatically generated from the base icon. Incorrectly sized icons / loading screens are automatically rescaled (with the warning).
  • Default iOS export signing mode is changed to automatic (to match new Xcode defaults). For automatic signing mode only App Store Team ID should be set, the rest of the singing settings can be left blank. For manual signing, Provisioning Profile UUID and Codesign Identity should be also set.
  • macOS exports will automatically select correct hardened runtime, timestamping and notarization options based on the signature type.
  • Added "export console script" option for Linux, macOS, and Windows exports, to provide an easy was to run exported projects with the enabled console.
  • macOS and iOS export now support localized application name, system permission messages and copyright information. Available localization list should be correctly detected by OS.
  • Added localizable string (Dictionary<Lang Code, String>) property editor (based on `Dictionary` editor) and property hint.
  • Add a localized "app name" property to the project settings.
 
Reference work:

Input:

  • An extra unhandled_unicode_input input processing step was added, to process Unicode character input with Alt / Ctrl modifiers, after processing of shortcuts. This will prevent both shortcut and input to trigger simultaneously, e.g., by default Alt + F won't input ƒ in the code editor (since it is a shortcut for Fold Line), but will work in any other Line / TextEdit.
  • Joystick maximum button number was increased to 128, to match `DirectInput` supported maximum. Button index boundary checks added to fix crash.
Reference work:

All platforms (shared coed, DisplayServer):

  • Opening transient windows while main window is in the full-screen mode is fixed, by splitting full-screen mode into "exclusive full-screen" (single window only), and "full-screen" (multi-window), transient windows will correctly return focus to the parent window when closed.
  • New exclusive child window mode was added to the DisplayServer, excessive children are always kept on top of the parent window.
  • Input position detection is improved to work when displays are connected/disconnected or DPI scaling is changed.
  • Moving full-screen windows between the screens is now possible.
  • Added support for getting native display, window, and view handles, native window handles can be useful for the plugins to do platform specific interaction (e.g., embedding native controls, like WebView, or changing window decorations).
  • Added a dedicated window FLAG_POPUP and a platform specific routines to control popup menus.
  • New popup menu handling is implemented on Linux/X11, macOS, and Windows. Popups will no longer fight for focus, and should have expected auto-close and switching behavior.
  • Sub-window positioning is improved to avoid off-screen windows when screen size / position is not available.
Reference work:

macOS / iOS:

  • Self-contained mode is fixed, now Steam version of the engine should behave the same as it do on the other platforms.
  • OpenGL renderer now use correct color space on the HDR displays.
  • Running macOS standalone executable should no longer bring hidden Dock up, when started.
  • macOS code was switched to use Objective-C ARC. DisplayServer and OS related Objective-C delegates and some other classes (keyboard mappings, logger) are split up into their own files.
  • Removed bunch of unused and duplicated code.
  • Fixed NO_FOCUS macOS flag behavior.
Reference work:

Windows:

  • Windows console handling is improved to match behavior or other OSes and support Windows 11 new terminal. When the editor is started from the console (or by another process with active console), output will be redirected to the parent console (including output from the running projects). When the editor is started from the GUI (shortcut, Windows Explorer, etc.), no console is opened.
  • execute and create_process methods are improved to prevent console windows for popping up, and have more consistent behavior. A new open_console argument was added to open a new process with a new console window.
  • MOUSE_MODE_CONFINED is improved to update window area when full-screen is toggled or current screen is changed.
  • Fixed full-screen mode detection on window move/resize, borderless mode switching, and borderless window minimization / restoring.
  • Built-in file / directory access dialogs now support network share paths handling.
  • Fixed drag-and-drop behavior.
  • Fixed Project Manager crash on exit and editor settings loading / saving.
  • Fixed Vulkan driver crash on sub-window minimization.
Reference work:

X11:

  • Implemented fallback to the X server root window to get screen information, if Xinerama is not available.
  • Fixed decoration reset when returning from full-screen mode.
Reference work:

GUI controls and text server backend improvements and fixes:

Text server:

  • Font change performance is substantially improved. Added new functions to change font, font size, and OpenType features without invalidating line break points, justification points, or recreating shaped text buffer. New functions are used by RichTextLabel, TextEdit, and Label (saves up to 25% of processing time for the long help pages and scripts).
  • Added locale and context-sensitive case conversion functions.
  • "Fill" alignment interaction with the overrun is fixed.
  • Overrun ellipsis was improved to work with multi-font strings.
  • Line breaking is improved to avoid adding excessive subsequent soft break points for languages without word separator.
  • Missing overrun/justification code is ported to the Fallback text server.
  • Improved inferred text direction detection by controls.
  • Improved word breaking when there are multiple spaces between words.
  • Added sub-pixel glyph positioning support.
  • TextServer built-in module and GDExtension code is unified. Now it's possible to build both module and GDExtension dynamic library from the same source.
Reference work:

GUI controls:

  • Fixed RichTextLabel uninitialized content height value, last line height calculation, and height calculation when `fit_content_height` is enabled.
  • Fixed RichTextLabel [ol type=1] tag closing.
  • Fixed RichTextLabel table offsets, and table context selection.
  • Fixed RichTextLabel missing line separation in the paragraph offset and click calculation.
  • Implemented auto-wrap modes for RichTextLabel (same as Label), default auto-wrap mode is set to AUTOWRAP_WORD_SMART to match 3.x behavior.
  • Fixed conflicts between visible_characters / percent_visible RichTextLabel properties, and setting text properly.
  • Fixed RichTextLabel img tag not setting image size.
  • Implemented [hint=description]text[/hint] tag support for RichTextLabel.
  • Improved continues underline draw in the RichTextLabel, added dashed underline support.
Reference work:

GDExtension:

  • Fixed registration of functions with enumerations or native pointer return type.
  • Added binds for missing methods, operators, and constants.
  • Added ptr() / ptrw() to the arrays, add missing String methods, add missing CharString method implementations.
  • Added Variant binders for the generated classes, structs and global enumerations.
  • Fixed const NativePtr binds.
  • Added missing ERR_ macros variants, using String messages.
  • Added macOS demo framework build support.
  • Port a bunch of Godot container templates (Map, HashMap, List, Vector, Set, VSet, VMap) and helper templates (ThreadWorkPool, RIDOwner) to GDExtension.
Reference work: