You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
Merge pull request #81557 from YuriSizov/editor-toolbars-divided
Improve the looks of 2D/3D viewport contextual toolbars
This commit is contained in:
@@ -3896,7 +3896,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"));
|
||||
@@ -4956,13 +4956,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) {
|
||||
@@ -5012,9 +5050,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);
|
||||
@@ -5122,13 +5168,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);
|
||||
@@ -5370,15 +5409,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);
|
||||
|
||||
Reference in New Issue
Block a user