mirror of
https://github.com/godotengine/godot-contributing-docs.git
synced 2026-01-03 18:09:19 +03:00
Add editor contribution guides.
This commit is contained in:
89
engine/editor/creating_icons.rst
Normal file
89
engine/editor/creating_icons.rst
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
.. _doc_editor_icons:
|
||||||
|
|
||||||
|
Editor icons
|
||||||
|
============
|
||||||
|
|
||||||
|
When a new class is created and exposed to scripting, the editor's interface
|
||||||
|
will display it with a default icon representing the base class it inherits
|
||||||
|
from. In most cases, it's still recommended to create icons for new classes to
|
||||||
|
improve the user experience.
|
||||||
|
|
||||||
|
Creating icons
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
To create new icons, you first need a vector graphics editor installed.
|
||||||
|
For instance, you can use the open source `Inkscape <https://inkscape.org/>`_ editor.
|
||||||
|
|
||||||
|
Clone the ``godot`` repository containing all the editor icons:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
git clone https://github.com/godotengine/godot.git
|
||||||
|
|
||||||
|
The icons must be created in a vector graphics editor in SVG format. There are
|
||||||
|
two main requirements to follow:
|
||||||
|
|
||||||
|
- Icons must be 16×16. In Inkscape, you can configure the document size in
|
||||||
|
**File > Document Properties**.
|
||||||
|
- Lines should be snapped to pixels whenever possible to remain crisp at lower DPI.
|
||||||
|
You can create a 16×16 grid in Inkscape to make this easier.
|
||||||
|
|
||||||
|
Once you're satisfied with the icon's design, save the icon in the cloned
|
||||||
|
repository's ``editor/icons`` folder. The icon name should match the intended
|
||||||
|
name in a case-sensitive manner. For example, to create an icon for
|
||||||
|
CPUParticles2D, name the file ``CPUParticles2D.svg``.
|
||||||
|
|
||||||
|
Color conversion for light editor themes
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If the user has configured their editor to use a light theme, Godot will
|
||||||
|
convert the icon's colors based on a
|
||||||
|
`set of predefined color mappings <https://github.com/godotengine/godot/blob/master/editor/themes/editor_color_map.cpp>`__.
|
||||||
|
This is to ensure the icon always displays with a sufficient contrast rate.
|
||||||
|
Try to restrict your icon's color palette to colors found in the list above.
|
||||||
|
Otherwise, your icon may become difficult to read on a light background.
|
||||||
|
|
||||||
|
Icon optimization
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Because the editor renders SVGs once at load time, they need to be small
|
||||||
|
in size so they can be efficiently parsed. When the
|
||||||
|
:ref:`pre-commit hook <doc_code_style_guidelines_pre_commit_hook>` runs, it automatically optimizes
|
||||||
|
the SVG using `svgo <https://github.com/svg/svgo>`_.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
While this optimization step won't impact the icon's quality noticeably, it
|
||||||
|
will still remove editor-only information such as guides. Therefore, it's
|
||||||
|
recommended to keep the source SVG around if you need to make further
|
||||||
|
changes.
|
||||||
|
|
||||||
|
Integrating and sharing the icons
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If you're contributing to the engine itself, you should make a pull request to
|
||||||
|
add optimized icons to ``editor/icons`` in the main repository. Recompile the
|
||||||
|
engine to make it pick up new icons for classes.
|
||||||
|
|
||||||
|
It's also possible to create custom icons within a module. If you're creating
|
||||||
|
your own module and don't plan to integrate it with Godot, you don't need to
|
||||||
|
make a separate pull request for your icons to be available within the editor
|
||||||
|
as they can be self-contained.
|
||||||
|
|
||||||
|
For specific instructions on how to create module icons, refer to
|
||||||
|
:ref:`Creating custom module icons<doc_custom_module_icons>`.
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If icons don't appear in the editor, make sure that:
|
||||||
|
|
||||||
|
1. Each icon's filename matches the naming requirement as described previously.
|
||||||
|
|
||||||
|
2. ``modules/svg`` is enabled (it should be enabled by default). Without it,
|
||||||
|
icons won't appear in the editor at all.
|
||||||
|
|
||||||
|
References
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
- `editor/icons <https://github.com/godotengine/godot/tree/master/editor/icons>`__
|
||||||
98
engine/editor/editor_style_guide.rst
Normal file
98
engine/editor/editor_style_guide.rst
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
.. _doc_editor_style_guide:
|
||||||
|
|
||||||
|
Editor style guide
|
||||||
|
==================
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
Thanks for your interest in contributing to the Godot editor!
|
||||||
|
|
||||||
|
This page describes the grammar and writing style used throughout the Godot
|
||||||
|
editor. Following this style guide will help your contribution get merged faster
|
||||||
|
since there will be fewer review steps required.
|
||||||
|
|
||||||
|
Writing style
|
||||||
|
-------------
|
||||||
|
|
||||||
|
- **Write messages (errors, warnings, ...) as full sentences.** They should start
|
||||||
|
with an uppercase letter and end with a period.
|
||||||
|
- **Try to keep sentences short.** This makes it more likely that their translations
|
||||||
|
will be short as well, which is a good thing to avoid UI bugs.
|
||||||
|
- **Use contractions.** For example, use "isn't" instead of "is not". An exception
|
||||||
|
to this rule can be made when you specifically want to emphasize one of the
|
||||||
|
contraction's words.
|
||||||
|
- **Use double quotes in messages** (``""``) instead of single quotes (``''``).
|
||||||
|
Double quotes should be used to quote user input, file paths and possibly
|
||||||
|
other things depending on the context.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
Try to follow the :ref:`doc_docs_writing_guidelines` in addition to the
|
||||||
|
guidelines outlined above.
|
||||||
|
|
||||||
|
Button and menu texts
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Capitalize text in buttons and menu actions:
|
||||||
|
|
||||||
|
- **Good:** *Open Editor Data Folder*
|
||||||
|
- **Bad:** *Open editor data folder*
|
||||||
|
|
||||||
|
If a menu action opens a modal dialog, suffix it with an ellipsis (``...``).
|
||||||
|
|
||||||
|
- **Good:** *Editor Settings...*
|
||||||
|
- **Bad:** *Editor Settings*
|
||||||
|
|
||||||
|
Inspector sections
|
||||||
|
------------------
|
||||||
|
|
||||||
|
In general, don't create sections that contain less than 3 items. Sections that
|
||||||
|
contain few items make it difficult to navigate the inspector, while missing the
|
||||||
|
benefits of using sections such as folding.
|
||||||
|
|
||||||
|
There are some valid exceptions for this, such as material features in
|
||||||
|
:ref:`class_StandardMaterial3D`.
|
||||||
|
|
||||||
|
This advice also applies to the Project Settings and Editor Settings.
|
||||||
|
|
||||||
|
Inspector performance hints
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Enum properties that noticeably impact performance should have a performance
|
||||||
|
hint associated. The hint should refer to the *absolute* performance impact,
|
||||||
|
rather than being relative to the other options provided in the enum. Here are
|
||||||
|
some examples taken from the Godot editor:
|
||||||
|
|
||||||
|
- **Screen-space antialiasing:** *Disabled (Fastest), FXAA (Fast)*
|
||||||
|
- **MSAA quality:** *Disabled (Fastest), 2x (Fast), 4x (Average), 8x (Slow), 16x
|
||||||
|
(Slower)*
|
||||||
|
- **DirectionalLight mode:** *Orthogonal (Fast), PSSM 2 Splits
|
||||||
|
(Average), PSSM 4 Splits (Slow)*
|
||||||
|
|
||||||
|
For consistency, try to stick to the terms below (from fastest to slowest):
|
||||||
|
|
||||||
|
- *Fastest, Faster, Fast, Average, Slow, Slower, Slowest*
|
||||||
|
|
||||||
|
Their usage doesn't have to be contiguous. For example, you can use only "Fast"
|
||||||
|
and "Slow" from the list above.
|
||||||
|
|
||||||
|
If you're adding a new enum, its values should be ordered from the fastest
|
||||||
|
option to the slowest option.
|
||||||
|
|
||||||
|
Tooltips
|
||||||
|
--------
|
||||||
|
|
||||||
|
Consider adding tooltips whenever the action performed by a button or menu
|
||||||
|
action isn't obvious. You can also provide additional context or highlight
|
||||||
|
caveats in the tooltip.
|
||||||
|
|
||||||
|
You can do this by calling ``set_tooltip(TTR("Text here."))`` on the
|
||||||
|
Control-based node in question. If the tooltip is particularly long (more than
|
||||||
|
~80 characters), wrap it over several lines by adding line breaks using ``\n``.
|
||||||
|
|
||||||
|
Tooltips should follow the writing style described above. In addition to this,
|
||||||
|
use indicative mood instead of imperative mood:
|
||||||
|
|
||||||
|
- **Good:** *Computes global illumination for the selected GIProbe.*
|
||||||
|
- **Bad:** *Compute global illumination for the selected GIProbe.*
|
||||||
12
engine/editor/index.rst
Normal file
12
engine/editor/index.rst
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
:allow_comments: False
|
||||||
|
|
||||||
|
Contributing to the editor
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
:name: toc-devel-editor
|
||||||
|
|
||||||
|
introduction_to_editor_development
|
||||||
|
creating_icons
|
||||||
|
editor_style_guide
|
||||||
88
engine/editor/introduction_to_editor_development.rst
Normal file
88
engine/editor/introduction_to_editor_development.rst
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
.. _doc_introduction_to_editor_development:
|
||||||
|
|
||||||
|
Introduction to editor development
|
||||||
|
==================================
|
||||||
|
|
||||||
|
On this page, you will learn:
|
||||||
|
|
||||||
|
- The **design decisions** behind the Godot editor.
|
||||||
|
- How to work efficiently on the Godot editor's C++ code.
|
||||||
|
|
||||||
|
This guide is aimed at current or future engine contributors.
|
||||||
|
To create editor plugins in GDScript, see :ref:`doc_making_plugins` instead.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
If you are new to Godot, we recommended you to read
|
||||||
|
:ref:`doc_godot_design_philosophy` before continuing. Since the Godot editor
|
||||||
|
is a Godot project written in C++, much of the engine's philosophy applies
|
||||||
|
to the editor.
|
||||||
|
|
||||||
|
Technical choices
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The Godot editor is drawn using Godot's renderer and
|
||||||
|
:ref:`UI system <doc_user_interface>`. It does *not* rely on a toolkit
|
||||||
|
such as GTK or Qt. This is similar in spirit to software like Blender.
|
||||||
|
While using toolkits makes it easier to achieve a "native" appearance, they are
|
||||||
|
also quite heavy and their licensing is not compatible with Godot's.
|
||||||
|
|
||||||
|
The editor is fully written in C++. It can't contain any GDScript or C# code.
|
||||||
|
|
||||||
|
Directory structure
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The editor's code is fully self-contained in the
|
||||||
|
`editor/ <https://github.com/godotengine/godot/tree/master/editor>`__ folder
|
||||||
|
of the Godot source repository.
|
||||||
|
|
||||||
|
Some editor functionality is also implemented via
|
||||||
|
:ref:`modules <doc_custom_modules_in_cpp>`. Some of these are only enabled in
|
||||||
|
editor builds to decrease the binary size of export templates. See the
|
||||||
|
`modules/ <https://github.com/godotengine/godot/tree/master/modules>`__ folder
|
||||||
|
in the Godot source repository.
|
||||||
|
|
||||||
|
Some important files in the editor are:
|
||||||
|
|
||||||
|
- `editor/editor_node.cpp <https://github.com/godotengine/godot/blob/master/editor/editor_node.cpp>`__:
|
||||||
|
Main editor initialization file. Effectively the "main scene" of the editor.
|
||||||
|
- `editor/project_manager.cpp <https://github.com/godotengine/godot/blob/master/editor/project_manager.cpp>`__:
|
||||||
|
Main Project Manager initialization file. Effectively the "main scene" of the Project Manager.
|
||||||
|
- `editor/plugins/canvas_item_editor_plugin.cpp <https://github.com/godotengine/godot/blob/master/editor/plugins/canvas_item_editor_plugin.cpp>`__:
|
||||||
|
The 2D editor viewport and related functionality (toolbar at the top, editing modes, overlaid helpers/panels, …).
|
||||||
|
- `editor/plugins/node_3d_editor_plugin.cpp <https://github.com/godotengine/godot/blob/master/editor/plugins/node_3d_editor_plugin.cpp>`__:
|
||||||
|
The 3D editor viewport and related functionality (toolbar at the top, editing modes, overlaid panels, …).
|
||||||
|
- `editor/plugins/node_3d_editor_gizmos.cpp <https://github.com/godotengine/godot/blob/master/editor/plugins/node_3d_editor_gizmos.cpp>`__:
|
||||||
|
Where the 3D editor gizmos are defined and drawn.
|
||||||
|
This file doesn't have a 2D counterpart as 2D gizmos are drawn by the nodes themselves.
|
||||||
|
|
||||||
|
Editor dependencies in ``scene/`` files
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
When working on an editor feature, you may have to modify files in
|
||||||
|
Godot's GUI nodes, which you can find in the ``scene/`` folder.
|
||||||
|
|
||||||
|
One rule to keep in mind is that you must **not** introduce new dependencies to
|
||||||
|
``editor/`` includes in other folders such as ``scene/``. This applies even if
|
||||||
|
you use ``#ifdef TOOLS_ENABLED``.
|
||||||
|
|
||||||
|
To make the codebase easier to follow and more self-contained, the allowed
|
||||||
|
dependency order is:
|
||||||
|
|
||||||
|
- ``editor/`` -> ``scene/`` -> ``servers/`` -> ``core/``
|
||||||
|
|
||||||
|
This means that files in ``editor/`` can depend on includes from ``scene/``,
|
||||||
|
``servers/``, and ``core/``. But, for example, while ``scene/`` can depend on includes
|
||||||
|
from ``servers/`` and ``core/``, it cannot depend on includes from ``editor/``.
|
||||||
|
|
||||||
|
Currently, there are some dependencies to ``editor/`` includes in ``scene/``
|
||||||
|
files, but
|
||||||
|
`they are in the process of being removed <https://github.com/godotengine/godot/issues/53295>`__.
|
||||||
|
|
||||||
|
Development tips
|
||||||
|
----------------
|
||||||
|
|
||||||
|
To iterate quickly on the editor, we recommend to set up a test project and
|
||||||
|
:ref:`open it from the command line <doc_command_line_tutorial>` after compiling
|
||||||
|
the editor. This way, you don't have to go through the Project Manager every
|
||||||
|
time you start Godot.
|
||||||
Reference in New Issue
Block a user