Viewport and canvas transforms

    Canvas transform

    As mentioned in the previous tutorial, , every CanvasItem node (remember that Node2D and Control based nodes use CanvasItem as their common root) will reside in a Canvas Layer. Every canvas layer has a transform (translation, rotation, scale, etc.) that can be accessed as a Transform2D.

    Also covered in the previous tutorial, nodes are drawn by default in Layer 0, in the built-in canvas. To put nodes in a different layer, a node can be used.

    Viewports also have a Global Canvas transform (also a Transform2D). This is the master transform and affects all individual Canvas Layer transforms. Generally, this transform is not of much use, but is used in the CanvasItem Editor in Godot’s editor.

    Stretch transform

    Finally, viewports have a Stretch Transform, which is used when resizing or stretching the screen. This transform is used internally (as described in ), but can also be manually set on each viewport.

    For a coordinate in CanvasItem local properties to become an actual screen coordinate, the following chain of transforms must be applied:

    Transform functions

    Obtaining each transform can be achieved with the following functions:

    Finally, then, to convert a CanvasItem local coordinates to screen coordinates, just multiply in the following order:

    C#

    Keep in mind, however, that it is generally not desired to work with screen coordinates. The recommended approach is to simply work in Canvas coordinates (), to allow automatic screen resolution resizing to work properly.

    It is often desired to feed custom input events to the scene tree. With the above knowledge, to correctly do this, it must be done the following way:

    GDScript