Each time an AABB is rotated, it gets bigger. That means opposite rotations don't cancel out.
The previous implementation repeatedly rotates children AABBs as it climbs up the tree. This often resulted in selection boxes looking bigger than their contents.
This implementation calculates and applies a single final transformation to each AABB before it is merged with the others. After merging, there are no additional rotations, so AABBs remain accurate.
Co-Authored-By: Robert Yevdokimov <105675984+ryevdokimov@users.noreply.github.com>
This PR also adds default font styles for RichTextLabels
in the editor, and improves the introduction dialog
when you don't have any local projects available.
The offline mode is implemented in the asset library
plugin, alongside some code improvements.
This reverts commit c7f68a27ec.
We still think GDScript files need UIDs to allow safe refactoring,
but we're still debating what form those should take exactly.
So far there seems to be agreement that it shouldn't be done via an
annotation as implemented here, so we're reverting this one for now,
to revisit the feature in a future PR.
This is more explicit as for why this functionality isn't available
depending on editor settings and current platform.
This also exposes a `EditorInterface.is_multi_window_enabled()` method
so that editor plugins can easily query whether the editor is able and
expected to create multiple windows.
Behavior is now consistent across 2D and 3D editors.
- By default, drag-and-dropping adds the scene as a child of the selected
node. Hold Alt when releasing the mouse to add the scene as a child
of the root node, or Shift to add the scene as a sibling of the selected
node.
- To choose a different node type in the 2D editor when drag-and-dropping
a texture resource, hold Alt + Shift (instead of just Alt).
- If multiple nodes are selected, only the first one is taken into account.
This was previously the behavior in 2D, but not in 3D (an error dialog
appeared instead). This makes the UI more forgiving.
This change introduces a new theme configuration struct to be
passed to the aforementioned routines to better control reuse
of styles and definitions in the generator.
Everything not passed and not explicitly shared is scoped so it
is not automatically accessible throughout the routine. This
should ensure that the decision to share styles is a conscious one.
In the future we will try to reduce the number of unique definitions
and share most of it. This PR is a stepping stone on this path.
This also puts the effort into separating redefinitions of
default theme items vs custom types introduced only by the editor.
In a few cases where editor-specific definitions need to reference
default definitions we simply fetch them from the theme. It's not
ideal and hides the dependency a bit, but hopefully these cases
will be abstracted properly in due time.
This change introduces a new EditorThemeManager class
to abstract theme generatio and its subroutines.
Logic related to EditorTheme, EditorColorMap, and editor
icons has been extracted into their respective files with
includes cleaned up.
All related files have been moved to a separate folder to
better scope them in the project. This includes relevant
generated files as well.