Browse Source

Add a page about Godot editor development

This is aimed at current or future engine contributors.
Hugo Locurcio 4 years ago
parent
commit
34c5374c70

+ 1 - 0
development/editor/index.rst

@@ -5,5 +5,6 @@ Editor development
    :maxdepth: 1
    :maxdepth: 1
    :name: toc-devel-editor
    :name: toc-devel-editor
 
 
+   introduction_to_editor_development
    creating_icons
    creating_icons
    editor_style_guide
    editor_style_guide

+ 75 - 0
development/editor/introduction_to_editor_development.rst

@@ -0,0 +1,75 @@
+.. _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, it's recommended 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 <toc-learn-features-gui>`. It does *not* rely on a toolkit
+such as GTK or Qt. This is similar in spirit to software like Blender.
+While using a toolkit 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 does *not* (and cannot) 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_c++>`. 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.
+
+Editor dependencies in ``scene/`` files
+---------------------------------------
+
+When working on a feature for the editor, you may have to modify files in
+Godot's GUI nodes which is 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 all ``scene/``,
+``servers/`` and ``core/``. On the flip side, ``scene/`` can depend on includes
+from ``servers/`` and ``core/`` but not on includes from ``editor/``.
+
+Currently, there are some dependencies to ``editor/`` includes in ``scene/``
+files, but
+`they are on the process of being removed <https://github.com/godotengine/godot/issues/29730>`__.
+
+Development tips
+----------------
+
+To iterate quickly on the editor, it's recommended 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.