|
@@ -3888,7 +3888,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_editor_theme_icon(SNAME("GuiTabMenuHl")));
|
|
|
|
|
|
- context_menu_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("ContextualToolbar"), EditorStringName(EditorStyles)));
|
|
|
+ context_toolbar_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("ContextualToolbar"), EditorStringName(EditorStyles)));
|
|
|
|
|
|
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/2d_editor_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
|
|
panner->set_scroll_speed(EDITOR_GET("editors/panning/2d_editor_pan_speed"));
|
|
@@ -4941,13 +4941,51 @@ void CanvasItemEditor::clear() {
|
|
|
}
|
|
|
|
|
|
void CanvasItemEditor::add_control_to_menu_panel(Control *p_control) {
|
|
|
- ERR_FAIL_COND(!p_control);
|
|
|
+ ERR_FAIL_NULL(p_control);
|
|
|
+ ERR_FAIL_COND(p_control->get_parent());
|
|
|
|
|
|
- context_menu_hbox->add_child(p_control);
|
|
|
+ VSeparator *sep = memnew(VSeparator);
|
|
|
+ context_toolbar_hbox->add_child(sep);
|
|
|
+ context_toolbar_hbox->add_child(p_control);
|
|
|
+ context_toolbar_separators[p_control] = sep;
|
|
|
+
|
|
|
+ p_control->connect("visibility_changed", callable_mp(this, &CanvasItemEditor::_update_context_toolbar));
|
|
|
+
|
|
|
+ _update_context_toolbar();
|
|
|
}
|
|
|
|
|
|
void CanvasItemEditor::remove_control_from_menu_panel(Control *p_control) {
|
|
|
- context_menu_hbox->remove_child(p_control);
|
|
|
+ ERR_FAIL_NULL(p_control);
|
|
|
+ ERR_FAIL_COND(p_control->get_parent() != context_toolbar_hbox);
|
|
|
+
|
|
|
+ p_control->disconnect("visibility_changed", callable_mp(this, &CanvasItemEditor::_update_context_toolbar));
|
|
|
+
|
|
|
+ context_toolbar_hbox->remove_child(context_toolbar_separators[p_control]);
|
|
|
+ context_toolbar_hbox->remove_child(p_control);
|
|
|
+ context_toolbar_separators.erase(p_control);
|
|
|
+
|
|
|
+ _update_context_toolbar();
|
|
|
+}
|
|
|
+
|
|
|
+void CanvasItemEditor::_update_context_toolbar() {
|
|
|
+ bool has_visible = false;
|
|
|
+ bool first_visible = false;
|
|
|
+
|
|
|
+ for (int i = 0; i < context_toolbar_hbox->get_child_count(); i++) {
|
|
|
+ Control *child = Object::cast_to<Control>(context_toolbar_hbox->get_child(i));
|
|
|
+ if (!child || !context_toolbar_separators.has(child)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (child->is_visible()) {
|
|
|
+ first_visible = !has_visible;
|
|
|
+ has_visible = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ VSeparator *sep = context_toolbar_separators[child];
|
|
|
+ sep->set_visible(!first_visible && child->is_visible());
|
|
|
+ }
|
|
|
+
|
|
|
+ context_toolbar_panel->set_visible(has_visible);
|
|
|
}
|
|
|
|
|
|
void CanvasItemEditor::add_control_to_left_panel(Control *p_control) {
|
|
@@ -4997,9 +5035,17 @@ CanvasItemEditor::CanvasItemEditor() {
|
|
|
EditorRunBar::get_singleton()->call_deferred(SNAME("connect"), "play_pressed", callable_mp(this, &CanvasItemEditor::_update_override_camera_button).bind(true));
|
|
|
EditorRunBar::get_singleton()->call_deferred(SNAME("connect"), "stop_pressed", callable_mp(this, &CanvasItemEditor::_update_override_camera_button).bind(false));
|
|
|
|
|
|
+ // Add some margin to the sides for better aesthetics.
|
|
|
+ // This prevents the first button's hover/pressed effect from "touching" the panel's border,
|
|
|
+ // which looks ugly.
|
|
|
+ MarginContainer *toolbar_margin = memnew(MarginContainer);
|
|
|
+ toolbar_margin->add_theme_constant_override("margin_left", 4 * EDSCALE);
|
|
|
+ toolbar_margin->add_theme_constant_override("margin_right", 4 * EDSCALE);
|
|
|
+ add_child(toolbar_margin);
|
|
|
+
|
|
|
// A fluid container for all toolbars.
|
|
|
HFlowContainer *main_flow = memnew(HFlowContainer);
|
|
|
- add_child(main_flow);
|
|
|
+ toolbar_margin->add_child(main_flow);
|
|
|
|
|
|
// Main toolbars.
|
|
|
HBoxContainer *main_menu_hbox = memnew(HBoxContainer);
|
|
@@ -5107,13 +5153,6 @@ CanvasItemEditor::CanvasItemEditor() {
|
|
|
|
|
|
viewport->add_child(controls_vb);
|
|
|
|
|
|
- // Add some margin to the left for better esthetics.
|
|
|
- // This prevents the first button's hover/pressed effect from "touching" the panel's border,
|
|
|
- // which looks ugly.
|
|
|
- Control *margin_left = memnew(Control);
|
|
|
- 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);
|
|
|
main_menu_hbox->add_child(select_button);
|
|
@@ -5355,15 +5394,14 @@ CanvasItemEditor::CanvasItemEditor() {
|
|
|
main_menu_hbox->add_child(memnew(VSeparator));
|
|
|
|
|
|
// 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);
|
|
|
+ context_toolbar_panel = memnew(PanelContainer);
|
|
|
+ context_toolbar_hbox = memnew(HBoxContainer);
|
|
|
+ context_toolbar_panel->add_child(context_toolbar_hbox);
|
|
|
+ main_flow->add_child(context_toolbar_panel);
|
|
|
|
|
|
// Animation controls.
|
|
|
animation_hb = memnew(HBoxContainer);
|
|
|
- context_menu_hbox->add_child(animation_hb);
|
|
|
- animation_hb->add_child(memnew(VSeparator));
|
|
|
+ add_control_to_menu_panel(animation_hb);
|
|
|
animation_hb->hide();
|
|
|
|
|
|
key_loc_button = memnew(Button);
|