@ -50,6 +50,7 @@
# include "scene/2d/skeleton_2d.h"
# include "scene/2d/sprite_2d.h"
# include "scene/2d/touch_screen_button.h"
# include "scene/gui/flow_container.h"
# include "scene/gui/grid_container.h"
# include "scene/gui/nine_patch_rect.h"
# include "scene/gui/subviewport_container.h"
@ -3861,7 +3862,7 @@ void CanvasItemEditor::_update_editor_settings() {
key_auto_insert_button - > add_theme_color_override ( " icon_pressed_color " , key_auto_color . lerp ( Color ( 1 , 0 , 0 ) , 0.55 ) ) ;
animation_menu - > set_icon ( get_theme_icon ( SNAME ( " GuiTabMenuHl " ) , SNAME ( " EditorIcons " ) ) ) ;
context_menu_ container - > add_theme_style_override ( " panel " , get_theme_stylebox ( SNAME ( " ContextualToolbar " ) , SNAME ( " EditorStyles " ) ) ) ;
context_menu_ panel - > add_theme_style_override ( " panel " , get_theme_stylebox ( SNAME ( " ContextualToolbar " ) , SNAME ( " EditorStyles " ) ) ) ;
panner - > setup ( ( ViewPanner : : ControlScheme ) EDITOR_GET ( " editors/panning/2d_editor_panning_scheme " ) . operator int ( ) , ED_GET_SHORTCUT ( " canvas_item_editor/pan_view " ) , bool ( EditorSettings : : get_singleton ( ) - > get ( " editors/panning/simple_panning " ) ) ) ;
pan_speed = int ( EditorSettings : : get_singleton ( ) - > get ( " editors/panning/2d_editor_pan_speed " ) ) ;
@ -4926,11 +4927,11 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) {
void CanvasItemEditor : : add_control_to_menu_panel ( Control * p_control ) {
ERR_FAIL_COND ( ! p_control ) ;
hbc_ context_menu- > add_child ( p_control ) ;
context_menu_hbox - > add_child ( p_control ) ;
}
void CanvasItemEditor : : remove_control_from_menu_panel ( Control * p_control ) {
hbc_ context_menu- > remove_child ( p_control ) ;
context_menu_hbox - > remove_child ( p_control ) ;
}
void CanvasItemEditor : : add_control_to_left_panel ( Control * p_control ) {
@ -4979,9 +4980,14 @@ CanvasItemEditor::CanvasItemEditor() {
EditorNode : : get_singleton ( ) - > call_deferred ( SNAME ( " connect " ) , " play_pressed " , Callable ( this , " _update_override_camera_button " ) , make_binds ( true ) ) ;
EditorNode : : get_singleton ( ) - > call_deferred ( SNAME ( " connect " ) , " stop_pressed " , Callable ( this , " _update_override_camera_button " ) , make_binds ( false ) ) ;
hb = memnew ( HBoxContainer ) ;
add_child ( hb ) ;
hb - > set_anchors_and_offsets_preset ( Control : : PRESET_FULL_RECT ) ;
// A fluid container for all toolbars.
HFlowContainer * main_flow = memnew ( HFlowContainer ) ;
add_child ( main_flow ) ;
// Main toolbars.
HBoxContainer * main_menu_hbox = memnew ( HBoxContainer ) ;
main_menu_hbox - > set_anchors_and_offsets_preset ( Control : : PRESET_FULL_RECT ) ;
main_flow - > add_child ( main_menu_hbox ) ;
bottom_split = memnew ( VSplitContainer ) ;
add_child ( bottom_split ) ;
@ -5059,12 +5065,12 @@ CanvasItemEditor::CanvasItemEditor() {
// This prevents the first button's hover/pressed effect from "touching" the panel's border,
// which looks ugly.
Control * margin_left = memnew ( Control ) ;
hb- > add_child ( margin_left ) ;
main_menu_ hbox - > add_child ( margin_left ) ;
margin_left - > set_custom_minimum_size ( Size2 ( 2 , 0 ) * EDSCALE ) ;
select_button = memnew ( Button ) ;
select_button - > set_flat ( true ) ;
hb- > add_child ( select_button ) ;
main_menu_ hbox - > add_child ( select_button ) ;
select_button - > set_toggle_mode ( true ) ;
select_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _button_tool_select ) , make_binds ( TOOL_SELECT ) ) ;
select_button - > set_pressed ( true ) ;
@ -5072,11 +5078,11 @@ CanvasItemEditor::CanvasItemEditor() {
select_button - > set_shortcut_context ( this ) ;
select_button - > set_tooltip ( keycode_get_string ( ( Key ) KeyModifierMask : : CMD ) + TTR ( " Drag: Rotate selected node around pivot. " ) + " \n " + TTR ( " Alt+Drag: Move selected node. " ) + " \n " + keycode_get_string ( ( Key ) KeyModifierMask : : CMD ) + TTR ( " Alt+Drag: Scale selected node. " ) + " \n " + TTR ( " V: Set selected node's pivot position. " ) + " \n " + TTR ( " Alt+RMB: Show list of all nodes at position clicked, including locked. " ) + " \n " + keycode_get_string ( ( Key ) KeyModifierMask : : CMD ) + TTR ( " RMB: Add node at position clicked. " ) ) ;
hb- > add_child ( memnew ( VSeparator ) ) ;
main_menu_ hbox - > add_child ( memnew ( VSeparator ) ) ;
move_button = memnew ( Button ) ;
move_button - > set_flat ( true ) ;
hb- > add_child ( move_button ) ;
main_menu_ hbox - > add_child ( move_button ) ;
move_button - > set_toggle_mode ( true ) ;
move_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _button_tool_select ) , make_binds ( TOOL_MOVE ) ) ;
move_button - > set_shortcut ( ED_SHORTCUT ( " canvas_item_editor/move_mode " , TTR ( " Move Mode " ) , Key : : W ) ) ;
@ -5085,7 +5091,7 @@ CanvasItemEditor::CanvasItemEditor() {
rotate_button = memnew ( Button ) ;
rotate_button - > set_flat ( true ) ;
hb- > add_child ( rotate_button ) ;
main_menu_ hbox - > add_child ( rotate_button ) ;
rotate_button - > set_toggle_mode ( true ) ;
rotate_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _button_tool_select ) , make_binds ( TOOL_ROTATE ) ) ;
rotate_button - > set_shortcut ( ED_SHORTCUT ( " canvas_item_editor/rotate_mode " , TTR ( " Rotate Mode " ) , Key : : E ) ) ;
@ -5094,32 +5100,32 @@ CanvasItemEditor::CanvasItemEditor() {
scale_button = memnew ( Button ) ;
scale_button - > set_flat ( true ) ;
hb- > add_child ( scale_button ) ;
main_menu_ hbox - > add_child ( scale_button ) ;
scale_button - > set_toggle_mode ( true ) ;
scale_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _button_tool_select ) , make_binds ( TOOL_SCALE ) ) ;
scale_button - > set_shortcut ( ED_SHORTCUT ( " canvas_item_editor/scale_mode " , TTR ( " Scale Mode " ) , Key : : S ) ) ;
scale_button - > set_shortcut_context ( this ) ;
scale_button - > set_tooltip ( TTR ( " Shift: Scale proportionally. " ) ) ;
hb- > add_child ( memnew ( VSeparator ) ) ;
main_menu_ hbox - > add_child ( memnew ( VSeparator ) ) ;
list_select_button = memnew ( Button ) ;
list_select_button - > set_flat ( true ) ;
hb- > add_child ( list_select_button ) ;
main_menu_ hbox - > add_child ( list_select_button ) ;
list_select_button - > set_toggle_mode ( true ) ;
list_select_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _button_tool_select ) , make_binds ( TOOL_LIST_SELECT ) ) ;
list_select_button - > set_tooltip ( TTR ( " Show list of selectable nodes at position clicked. " ) ) ;
pivot_button = memnew ( Button ) ;
pivot_button - > set_flat ( true ) ;
hb- > add_child ( pivot_button ) ;
main_menu_ hbox - > add_child ( pivot_button ) ;
pivot_button - > set_toggle_mode ( true ) ;
pivot_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _button_tool_select ) , make_binds ( TOOL_EDIT_PIVOT ) ) ;
pivot_button - > set_tooltip ( TTR ( " Click to change object's rotation pivot. " ) ) ;
pan_button = memnew ( Button ) ;
pan_button - > set_flat ( true ) ;
hb- > add_child ( pan_button ) ;
main_menu_ hbox - > add_child ( pan_button ) ;
pan_button - > set_toggle_mode ( true ) ;
pan_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _button_tool_select ) , make_binds ( TOOL_PAN ) ) ;
pan_button - > set_shortcut ( ED_SHORTCUT ( " canvas_item_editor/pan_mode " , TTR ( " Pan Mode " ) , Key : : G ) ) ;
@ -5128,18 +5134,18 @@ CanvasItemEditor::CanvasItemEditor() {
ruler_button = memnew ( Button ) ;
ruler_button - > set_flat ( true ) ;
hb- > add_child ( ruler_button ) ;
main_menu_ hbox - > add_child ( ruler_button ) ;
ruler_button - > set_toggle_mode ( true ) ;
ruler_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _button_tool_select ) , make_binds ( TOOL_RULER ) ) ;
ruler_button - > set_shortcut ( ED_SHORTCUT ( " canvas_item_editor/ruler_mode " , TTR ( " Ruler Mode " ) , Key : : R ) ) ;
ruler_button - > set_shortcut_context ( this ) ;
ruler_button - > set_tooltip ( TTR ( " Ruler Mode " ) ) ;
hb- > add_child ( memnew ( VSeparator ) ) ;
main_menu_ hbox - > add_child ( memnew ( VSeparator ) ) ;
smart_snap_button = memnew ( Button ) ;
smart_snap_button - > set_flat ( true ) ;
hb- > add_child ( smart_snap_button ) ;
main_menu_ hbox - > add_child ( smart_snap_button ) ;
smart_snap_button - > set_toggle_mode ( true ) ;
smart_snap_button - > connect ( " toggled " , callable_mp ( this , & CanvasItemEditor : : _button_toggle_smart_snap ) ) ;
smart_snap_button - > set_tooltip ( TTR ( " Toggle smart snapping. " ) ) ;
@ -5148,7 +5154,7 @@ CanvasItemEditor::CanvasItemEditor() {
grid_snap_button = memnew ( Button ) ;
grid_snap_button - > set_flat ( true ) ;
hb- > add_child ( grid_snap_button ) ;
main_menu_ hbox - > add_child ( grid_snap_button ) ;
grid_snap_button - > set_toggle_mode ( true ) ;
grid_snap_button - > connect ( " toggled " , callable_mp ( this , & CanvasItemEditor : : _button_toggle_grid_snap ) ) ;
grid_snap_button - > set_tooltip ( TTR ( " Toggle grid snapping. " ) ) ;
@ -5157,7 +5163,7 @@ CanvasItemEditor::CanvasItemEditor() {
snap_config_menu = memnew ( MenuButton ) ;
snap_config_menu - > set_shortcut_context ( this ) ;
hb- > add_child ( snap_config_menu ) ;
main_menu_ hbox - > add_child ( snap_config_menu ) ;
snap_config_menu - > set_h_size_flags ( SIZE_SHRINK_END ) ;
snap_config_menu - > set_tooltip ( TTR ( " Snapping Options " ) ) ;
snap_config_menu - > set_switch_on_hover ( true ) ;
@ -5186,11 +5192,11 @@ CanvasItemEditor::CanvasItemEditor() {
smartsnap_config_popup - > add_check_shortcut ( ED_SHORTCUT ( " canvas_item_editor/snap_other_nodes " , TTR ( " Snap to Other Nodes " ) ) , SNAP_USE_OTHER_NODES ) ;
smartsnap_config_popup - > add_check_shortcut ( ED_SHORTCUT ( " canvas_item_editor/snap_guides " , TTR ( " Snap to Guides " ) ) , SNAP_USE_GUIDES ) ;
hb- > add_child ( memnew ( VSeparator ) ) ;
main_menu_ hbox - > add_child ( memnew ( VSeparator ) ) ;
lock_button = memnew ( Button ) ;
lock_button - > set_flat ( true ) ;
hb- > add_child ( lock_button ) ;
main_menu_ hbox - > add_child ( lock_button ) ;
lock_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _popup_callback ) , varray ( LOCK_SELECTED ) ) ;
lock_button - > set_tooltip ( TTR ( " Lock selected node, preventing selection and movement. " ) ) ;
@ -5199,7 +5205,7 @@ CanvasItemEditor::CanvasItemEditor() {
unlock_button = memnew ( Button ) ;
unlock_button - > set_flat ( true ) ;
hb- > add_child ( unlock_button ) ;
main_menu_ hbox - > add_child ( unlock_button ) ;
unlock_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _popup_callback ) , varray ( UNLOCK_SELECTED ) ) ;
unlock_button - > set_tooltip ( TTR ( " Unlock selected node, allowing selection and movement. " ) ) ;
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
@ -5207,7 +5213,7 @@ CanvasItemEditor::CanvasItemEditor() {
group_button = memnew ( Button ) ;
group_button - > set_flat ( true ) ;
hb- > add_child ( group_button ) ;
main_menu_ hbox - > add_child ( group_button ) ;
group_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _popup_callback ) , varray ( GROUP_SELECTED ) ) ;
group_button - > set_tooltip ( TTR ( " Makes sure the object's children are not selectable. " ) ) ;
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
@ -5215,17 +5221,17 @@ CanvasItemEditor::CanvasItemEditor() {
ungroup_button = memnew ( Button ) ;
ungroup_button - > set_flat ( true ) ;
hb- > add_child ( ungroup_button ) ;
main_menu_ hbox - > add_child ( ungroup_button ) ;
ungroup_button - > connect ( " pressed " , callable_mp ( this , & CanvasItemEditor : : _popup_callback ) , varray ( UNGROUP_SELECTED ) ) ;
ungroup_button - > set_tooltip ( TTR ( " Restores the object's children's ability to be selected. " ) ) ;
// Define the shortcut globally (without a context) so that it works if the Scene tree dock is currently focused.
ungroup_button - > set_shortcut ( ED_SHORTCUT ( " editor/ungroup_selected_nodes " , TTR ( " Ungroup Selected Node(s) " ) , KeyModifierMask : : CMD | KeyModifierMask : : SHIFT | Key : : G ) ) ;
hb- > add_child ( memnew ( VSeparator ) ) ;
main_menu_ hbox - > add_child ( memnew ( VSeparator ) ) ;
skeleton_menu = memnew ( MenuButton ) ;
skeleton_menu - > set_shortcut_context ( this ) ;
hb- > add_child ( skeleton_menu ) ;
main_menu_ hbox - > add_child ( skeleton_menu ) ;
skeleton_menu - > set_tooltip ( TTR ( " Skeleton Options " ) ) ;
skeleton_menu - > set_switch_on_hover ( true ) ;
@ -5236,24 +5242,24 @@ CanvasItemEditor::CanvasItemEditor() {
p - > add_shortcut ( ED_SHORTCUT ( " canvas_item_editor/skeleton_make_bones " , TTR ( " Make Bone2D Node(s) from Node(s) " ) , KeyModifierMask : : CMD | KeyModifierMask : : SHIFT | Key : : B ) , SKELETON_MAKE_BONES ) ;
p - > connect ( " id_pressed " , callable_mp ( this , & CanvasItemEditor : : _popup_callback ) ) ;
hb- > add_child ( memnew ( VSeparator ) ) ;
main_menu_ hbox - > add_child ( memnew ( VSeparator ) ) ;
override_camera_button = memnew ( Button ) ;
override_camera_button - > set_flat ( true ) ;
hb- > add_child ( override_camera_button ) ;
main_menu_ hbox - > add_child ( override_camera_button ) ;
override_camera_button - > connect ( " toggled " , callable_mp ( this , & CanvasItemEditor : : _button_override_camera ) ) ;
override_camera_button - > set_toggle_mode ( true ) ;
override_camera_button - > set_disabled ( true ) ;
_update_override_camera_button ( false ) ;
hb- > add_child ( memnew ( VSeparator ) ) ;
main_menu_ hbox - > add_child ( memnew ( VSeparator ) ) ;
view_menu = memnew ( MenuButton ) ;
// TRANSLATORS: Noun, name of the 2D/3D View menus.
view_menu - > set_text ( TTR ( " View " ) ) ;
view_menu - > set_switch_on_hover ( true ) ;
view_menu - > set_shortcut_context ( this ) ;
hb- > add_child ( view_menu ) ;
main_menu_ hbox - > add_child ( view_menu ) ;
view_menu - > get_popup ( ) - > connect ( " id_pressed " , callable_mp ( this , & CanvasItemEditor : : _popup_callback ) ) ;
p = view_menu - > get_popup ( ) ;
@ -5286,16 +5292,17 @@ CanvasItemEditor::CanvasItemEditor() {
p - > add_separator ( ) ;
p - > add_check_shortcut ( ED_SHORTCUT ( " canvas_item_editor/preview_canvas_scale " , TTR ( " Preview Canvas Scale " ) , KeyModifierMask : : SHIFT | KeyModifierMask : : CMD | Key : : P ) , PREVIEW_CANVAS_SCALE ) ;
hb- > add_child ( memnew ( VSeparator ) ) ;
main_menu_ hbox - > add_child ( memnew ( VSeparator ) ) ;
context_menu_container = memnew ( PanelContainer ) ;
hbc_context_menu = memnew ( HBoxContainer ) ;
context_menu_container - > add_child ( hbc_context_menu ) ;
hb - > add_child ( context_menu_container ) ;
// Contextual toolbars.
context_menu_panel = memnew ( PanelContainer ) ;
context_menu_hbox = memnew ( HBoxContainer ) ;
context_menu_panel - > add_child ( context_menu_hbox ) ;
main_flow - > add_child ( context_menu_panel ) ;
// Animation controls.
animation_hb = memnew ( HBoxContainer ) ;
hbc_ context_menu- > add_child ( animation_hb ) ;
context_menu_hbox - > add_child ( animation_hb ) ;
animation_hb - > add_child ( memnew ( VSeparator ) ) ;
animation_hb - > hide ( ) ;