diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index 444203b97cb..d3ada7d4b00 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -82,6 +82,9 @@ void ViewportNavigationControl::_notification(int p_what) { if (!is_connected("mouse_exited", this, "_on_mouse_exited")) { connect("mouse_exited", this, "_on_mouse_exited"); } + if (!is_connected("mouse_entered", this, "_on_mouse_entered")) { + connect("mouse_entered", this, "_on_mouse_entered"); + } } if (p_what == NOTIFICATION_DRAW && viewport != nullptr) { @@ -99,7 +102,7 @@ void ViewportNavigationControl::_draw() { float radius = get_size().x / 2.0; const bool focused = focused_index != -1; - draw_circle(center, radius, Color(0.5, 0.5, 0.5, focused ? 0.25 : 0.05)); + draw_circle(center, radius, Color(0.5, 0.5, 0.5, focused || hovered ? 0.35 : 0.15)); const Color c = focused ? Color(0.9, 0.9, 0.9, 0.9) : Color(0.5, 0.5, 0.5, 0.25); @@ -110,6 +113,9 @@ void ViewportNavigationControl::_draw() { } void ViewportNavigationControl::_process_click(int p_index, Vector2 p_position, bool p_pressed) { + hovered = false; + update(); + if (focused_index != -1 && focused_index != p_index) { return; } @@ -220,7 +226,13 @@ void ViewportNavigationControl::_update_navigation() { } } +void ViewportNavigationControl::_on_mouse_entered() { + hovered = true; + update(); +} + void ViewportNavigationControl::_on_mouse_exited() { + hovered = false; update(); } @@ -234,6 +246,7 @@ void ViewportNavigationControl::set_viewport(SpatialEditorViewport *p_viewport) void ViewportNavigationControl::_bind_methods() { ClassDB::bind_method(D_METHOD("_gui_input"), &ViewportNavigationControl::_gui_input); + ClassDB::bind_method(D_METHOD("_on_mouse_entered"), &ViewportNavigationControl::_on_mouse_entered); ClassDB::bind_method(D_METHOD("_on_mouse_exited"), &ViewportNavigationControl::_on_mouse_exited); } @@ -4427,7 +4440,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed top_right_vbox->set_anchors_and_margins_preset(PRESET_TOP_RIGHT, PRESET_MODE_MINSIZE, 2.0 * EDSCALE); top_right_vbox->set_h_grow_direction(GROW_DIRECTION_BEGIN); - const int navigation_control_size = 200; + const int navigation_control_size = 150; position_control = memnew(ViewportNavigationControl); position_control->set_navigation_mode(SpatialEditorViewport::NAVIGATION_MOVE); diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index 5f8bb5742c0..0df80b3055a 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -931,6 +931,7 @@ class ViewportNavigationControl : public Control { SpatialEditorViewport *viewport = nullptr; Vector2i focused_mouse_start; Vector2 focused_pos; + bool hovered = false; int focused_index = -1; SpatialEditorViewport::NavigationMode nav_mode = SpatialEditorViewport::NavigationMode::NAVIGATION_NONE; @@ -941,6 +942,7 @@ protected: void _notification(int p_what); void _gui_input(Ref p_event); void _draw(); + void _on_mouse_entered(); void _on_mouse_exited(); void _process_click(int p_index, Vector2 p_position, bool p_pressed); void _process_drag(int p_index, Vector2 p_position, Vector2 p_relative_position);