|
@@ -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();
|
|
|
|