mirror of https://github.com/godotengine/godot
Add warped panning to every ViewPanner instance
This commit is contained in:
parent
89001f91d2
commit
9a96393f46
|
|
@ -217,14 +217,14 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
|
|||
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
|
||||
if (EditorSettings::get_singleton()->check_changed_settings_in_group("editors/panning")) {
|
||||
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
panner->setup_warped_panning(get_viewport(), EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
}
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
panner->set_viewport(get_viewport());
|
||||
[[fallthrough]];
|
||||
}
|
||||
panner->setup_warped_panning(get_viewport(), EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
} break;
|
||||
case NOTIFICATION_THEME_CHANGED: {
|
||||
bezier_icon = get_editor_theme_icon(SNAME("KeyBezierPoint"));
|
||||
bezier_handle_icon = get_editor_theme_icon(SNAME("KeyBezierHandle"));
|
||||
|
|
|
|||
|
|
@ -1451,7 +1451,6 @@ int AnimationTimelineEdit::get_name_limit() const {
|
|||
|
||||
void AnimationTimelineEdit::_notification(int p_what) {
|
||||
switch (p_what) {
|
||||
case NOTIFICATION_ENTER_TREE:
|
||||
case NOTIFICATION_THEME_CHANGED: {
|
||||
add_track->set_button_icon(get_editor_theme_icon(SNAME("Add")));
|
||||
loop->set_button_icon(get_editor_theme_icon(SNAME("Loop")));
|
||||
|
|
@ -1470,9 +1469,14 @@ void AnimationTimelineEdit::_notification(int p_what) {
|
|||
} break;
|
||||
|
||||
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
|
||||
if (EditorSettings::get_singleton()->check_changed_settings_in_group("editors/panning")) {
|
||||
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
if (!EditorSettings::get_singleton()->check_changed_settings_in_group("editors/panning")) {
|
||||
break;
|
||||
}
|
||||
[[fallthrough]];
|
||||
}
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
panner->setup_warped_panning(get_viewport(), EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_RESIZED: {
|
||||
|
|
@ -1872,7 +1876,7 @@ void AnimationTimelineEdit::_play_position_draw() {
|
|||
void AnimationTimelineEdit::gui_input(const Ref<InputEvent> &p_event) {
|
||||
ERR_FAIL_COND(p_event.is_null());
|
||||
|
||||
if (panner->gui_input(p_event)) {
|
||||
if (panner->gui_input(p_event, get_global_rect())) {
|
||||
accept_event();
|
||||
return;
|
||||
}
|
||||
|
|
@ -5138,12 +5142,10 @@ void AnimationTrackEditor::_notification(int p_what) {
|
|||
}
|
||||
[[fallthrough]];
|
||||
}
|
||||
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
panner->set_viewport(get_viewport());
|
||||
[[fallthrough]];
|
||||
}
|
||||
panner->setup_warped_panning(get_viewport(), EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
} break;
|
||||
case NOTIFICATION_THEME_CHANGED: {
|
||||
zoom_icon->set_texture(get_editor_theme_icon(SNAME("Zoom")));
|
||||
bezier_edit_icon->set_button_icon(get_editor_theme_icon(SNAME("EditBezier")));
|
||||
|
|
@ -5939,7 +5941,7 @@ void AnimationTrackEditor::_box_selection_draw() {
|
|||
|
||||
void AnimationTrackEditor::_scroll_input(const Ref<InputEvent> &p_event) {
|
||||
if (!box_selecting) {
|
||||
if (panner->gui_input(p_event)) {
|
||||
if (panner->gui_input(p_event, scroll->get_global_rect())) {
|
||||
scroll->accept_event();
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -935,14 +935,13 @@ void AnimationNodeBlendTreeEditor::_inspect_filters(const String &p_which) {
|
|||
|
||||
void AnimationNodeBlendTreeEditor::_update_editor_settings() {
|
||||
graph->get_panner()->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
graph->set_warped_panning(bool(EDITOR_GET("editors/panning/warped_mouse_panning")));
|
||||
graph->set_warped_panning(EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
}
|
||||
|
||||
void AnimationNodeBlendTreeEditor::_notification(int p_what) {
|
||||
switch (p_what) {
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
_update_editor_settings();
|
||||
graph->get_panner()->set_viewport(get_viewport());
|
||||
} break;
|
||||
|
||||
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
|
||||
|
|
|
|||
|
|
@ -1300,7 +1300,7 @@ bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_eve
|
|||
|
||||
bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bool p_already_accepted) {
|
||||
panner->set_force_drag(tool == TOOL_PAN);
|
||||
bool panner_active = panner->gui_input(p_event, warped_panning ? viewport->get_global_rect() : Rect2());
|
||||
bool panner_active = panner->gui_input(p_event, viewport->get_global_rect());
|
||||
if (panner->is_panning() != pan_pressed) {
|
||||
pan_pressed = panner->is_panning();
|
||||
_update_cursor();
|
||||
|
|
@ -4080,7 +4080,7 @@ void CanvasItemEditor::_update_editor_settings() {
|
|||
|
||||
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"));
|
||||
warped_panning = bool(EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
panner->setup_warped_panning(get_viewport(), EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
}
|
||||
|
||||
void CanvasItemEditor::_project_settings_changed() {
|
||||
|
|
@ -4178,18 +4178,16 @@ void CanvasItemEditor::_notification(int p_what) {
|
|||
AnimationPlayerEditor::get_singleton()->connect("animation_selected", callable_mp(this, &CanvasItemEditor::_keying_changed).unbind(1));
|
||||
_keying_changed();
|
||||
_update_editor_settings();
|
||||
panner->set_viewport(get_viewport());
|
||||
|
||||
connect("item_lock_status_changed", callable_mp(this, &CanvasItemEditor::_update_lock_and_group_button));
|
||||
connect("item_group_status_changed", callable_mp(this, &CanvasItemEditor::_update_lock_and_group_button));
|
||||
} break;
|
||||
|
||||
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
|
||||
if (!EditorThemeManager::is_generated_theme_outdated() &&
|
||||
!EditorSettings::get_singleton()->check_changed_settings_in_group("editors/panning")) {
|
||||
break;
|
||||
if (EditorThemeManager::is_generated_theme_outdated() ||
|
||||
EditorSettings::get_singleton()->check_changed_settings_in_group("editors/panning")) {
|
||||
_update_editor_settings();
|
||||
}
|
||||
_update_editor_settings();
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_APPLICATION_FOCUS_OUT:
|
||||
|
|
|
|||
|
|
@ -380,7 +380,6 @@ private:
|
|||
Ref<Shortcut> divide_grid_step_shortcut;
|
||||
|
||||
Ref<ViewPanner> panner;
|
||||
bool warped_panning = true;
|
||||
void _pan_callback(Vector2 p_scroll_vec, Ref<InputEvent> p_event);
|
||||
void _zoom_callback(float p_zoom_factor, Vector2 p_origin, Ref<InputEvent> p_event);
|
||||
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ void Polygon2DEditor::_notification(int p_what) {
|
|||
}
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
uv_panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
uv_panner->set_viewport(get_viewport());
|
||||
uv_panner->setup_warped_panning(get_viewport(), EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_READY: {
|
||||
|
|
@ -508,7 +508,7 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (uv_panner->gui_input(p_input)) {
|
||||
if (uv_panner->gui_input(p_input, uv_edit_draw->get_global_rect())) {
|
||||
accept_event();
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -450,7 +450,7 @@ void Sprite2DEditor::_add_as_sibling_or_child(Node *p_own_node, Node *p_new_node
|
|||
}
|
||||
|
||||
void Sprite2DEditor::_debug_uv_input(const Ref<InputEvent> &p_input) {
|
||||
if (panner->gui_input(p_input)) {
|
||||
if (panner->gui_input(p_input, debug_uv->get_global_rect())) {
|
||||
accept_event();
|
||||
}
|
||||
}
|
||||
|
|
@ -556,10 +556,14 @@ void Sprite2DEditor::_notification(int p_what) {
|
|||
[[fallthrough]];
|
||||
}
|
||||
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
|
||||
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
} break;
|
||||
if (!EditorSettings::get_singleton()->check_changed_settings_in_group("editors/panning")) {
|
||||
break;
|
||||
}
|
||||
[[fallthrough]];
|
||||
}
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
panner->set_viewport(get_viewport());
|
||||
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
panner->setup_warped_panning(debug_uv_dialog, EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
} break;
|
||||
case NOTIFICATION_THEME_CHANGED: {
|
||||
options->set_button_icon(get_editor_theme_icon(SNAME("Sprite2D")));
|
||||
|
|
|
|||
|
|
@ -296,7 +296,7 @@ void TextureRegionEditor::_set_grid_parameters_clamping(bool p_enabled) {
|
|||
}
|
||||
|
||||
void TextureRegionEditor::_texture_overlay_input(const Ref<InputEvent> &p_input) {
|
||||
if (panner->gui_input(p_input)) {
|
||||
if (panner->gui_input(p_input, texture_overlay->get_global_rect())) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -833,7 +833,7 @@ void TextureRegionEditor::_notification(int p_what) {
|
|||
}
|
||||
|
||||
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
panner->set_viewport(get_viewport());
|
||||
panner->setup_warped_panning(get_viewport(), EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_EXIT_TREE: {
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
#include "scene/gui/view_panner.h"
|
||||
|
||||
void TileAtlasView::gui_input(const Ref<InputEvent> &p_event) {
|
||||
if (panner->gui_input(p_event)) {
|
||||
if (panner->gui_input(p_event, get_global_rect())) {
|
||||
accept_event();
|
||||
}
|
||||
}
|
||||
|
|
@ -615,7 +615,7 @@ void TileAtlasView::_notification(int p_what) {
|
|||
}
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
panner->set_viewport(get_viewport());
|
||||
panner->setup_warped_panning(get_viewport(), EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_THEME_CHANGED: {
|
||||
|
|
|
|||
|
|
@ -5160,7 +5160,7 @@ void VisualShaderEditor::_notification(int p_what) {
|
|||
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
|
||||
if (EditorSettings::get_singleton()->check_changed_settings_in_group("editors/panning")) {
|
||||
graph->get_panner()->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
graph->set_warped_panning(bool(EDITOR_GET("editors/panning/warped_mouse_panning")));
|
||||
graph->set_warped_panning(EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
}
|
||||
if (EditorSettings::get_singleton()->check_changed_settings_in_group("editors/visual_editors")) {
|
||||
graph->set_minimap_opacity(EDITOR_GET("editors/visual_editors/minimap_opacity"));
|
||||
|
|
@ -5188,8 +5188,7 @@ void VisualShaderEditor::_notification(int p_what) {
|
|||
}
|
||||
|
||||
graph->get_panner()->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EDITOR_GET("editors/panning/simple_panning")));
|
||||
graph->get_panner()->set_viewport(get_viewport());
|
||||
graph->set_warped_panning(bool(EDITOR_GET("editors/panning/warped_mouse_panning")));
|
||||
graph->set_warped_panning(EDITOR_GET("editors/panning/warped_mouse_panning"));
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_THEME_CHANGED: {
|
||||
|
|
|
|||
|
|
@ -1250,9 +1250,8 @@ void RuntimeNodeSelect::_setup(const Dictionary &p_settings) {
|
|||
int pan_speed = p_settings.get("editors/panning/2d_editor_pan_speed", 20);
|
||||
Array keys = p_settings.get("canvas_item_editor/pan_view", Array()).operator Array();
|
||||
panner->setup(panning_scheme, DebuggerMarshalls::deserialize_key_shortcut(keys), simple_panning);
|
||||
panner->set_viewport(root);
|
||||
panner->setup_warped_panning(root, p_settings.get("editors/panning/warped_mouse_panning", true));
|
||||
panner->set_scroll_speed(pan_speed);
|
||||
warped_panning = p_settings.get("editors/panning/warped_mouse_panning", false);
|
||||
|
||||
/// 2D Selection Box Generation
|
||||
|
||||
|
|
@ -1363,7 +1362,7 @@ void RuntimeNodeSelect::_root_window_input(const Ref<InputEvent> &p_event) {
|
|||
|
||||
if (camera_override) {
|
||||
if (node_select_type == NODE_TYPE_2D) {
|
||||
if (panner->gui_input(p_event, warped_panning ? Rect2(Vector2(), root->get_size()) : Rect2())) {
|
||||
if (panner->gui_input(p_event, Rect2(Vector2(), root->get_size()))) {
|
||||
return;
|
||||
}
|
||||
} else if (node_select_type == NODE_TYPE_3D) {
|
||||
|
|
|
|||
|
|
@ -793,7 +793,7 @@ void GraphEdit::_notification(int p_what) {
|
|||
} break;
|
||||
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
panner->set_viewport(get_viewport());
|
||||
update_warped_panning();
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1737,7 +1737,7 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
|
|||
ERR_FAIL_NULL_MSG(connections_layer, "connections_layer is missing.");
|
||||
|
||||
ERR_FAIL_COND(p_ev.is_null());
|
||||
if (panner->gui_input(p_ev, warped_panning ? get_global_rect() : Rect2())) {
|
||||
if (panner->gui_input(p_ev, get_global_rect())) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2669,6 +2669,11 @@ Ref<ViewPanner> GraphEdit::get_panner() {
|
|||
|
||||
void GraphEdit::set_warped_panning(bool p_warped) {
|
||||
warped_panning = p_warped;
|
||||
update_warped_panning();
|
||||
}
|
||||
|
||||
void GraphEdit::update_warped_panning() {
|
||||
panner->setup_warped_panning(get_viewport(), warped_panning);
|
||||
}
|
||||
|
||||
void GraphEdit::arrange_nodes() {
|
||||
|
|
|
|||
|
|
@ -508,6 +508,7 @@ public:
|
|||
HBoxContainer *get_menu_hbox();
|
||||
Ref<ViewPanner> get_panner();
|
||||
void set_warped_panning(bool p_warped);
|
||||
void update_warped_panning();
|
||||
|
||||
void arrange_nodes();
|
||||
|
||||
|
|
|
|||
|
|
@ -110,8 +110,8 @@ bool ViewPanner::gui_input(const Ref<InputEvent> &p_event, Rect2 p_canvas_rect)
|
|||
Ref<InputEventMouseMotion> mm = p_event;
|
||||
if (mm.is_valid()) {
|
||||
if (is_dragging) {
|
||||
if (viewport && p_canvas_rect != Rect2()) {
|
||||
pan_callback.call(viewport->wrap_mouse_in_rect(mm->get_relative(), p_canvas_rect), p_event);
|
||||
if (warped_panning_viewport && p_canvas_rect.has_area()) {
|
||||
pan_callback.call(warped_panning_viewport->wrap_mouse_in_rect(mm->get_relative(), p_canvas_rect), p_event);
|
||||
} else {
|
||||
pan_callback.call(mm->get_relative(), p_event);
|
||||
}
|
||||
|
|
@ -213,8 +213,8 @@ void ViewPanner::setup(ControlScheme p_scheme, Ref<Shortcut> p_shortcut, bool p_
|
|||
set_simple_panning_enabled(p_simple_panning);
|
||||
}
|
||||
|
||||
void ViewPanner::set_viewport(Viewport *p_viewport) {
|
||||
viewport = p_viewport;
|
||||
void ViewPanner::setup_warped_panning(Viewport *p_viewport, bool p_allowed) {
|
||||
warped_panning_viewport = p_allowed ? p_viewport : nullptr;
|
||||
}
|
||||
|
||||
bool ViewPanner::is_panning() const {
|
||||
|
|
|
|||
|
|
@ -64,14 +64,13 @@ private:
|
|||
bool enable_rmb = false;
|
||||
bool simple_panning_enabled = false;
|
||||
|
||||
Viewport *viewport = nullptr;
|
||||
|
||||
Ref<Shortcut> pan_view_shortcut;
|
||||
|
||||
Callable pan_callback;
|
||||
Callable zoom_callback;
|
||||
|
||||
ControlScheme control_scheme = SCROLL_ZOOMS;
|
||||
Viewport *warped_panning_viewport = nullptr;
|
||||
|
||||
public:
|
||||
void set_callbacks(Callable p_pan_callback, Callable p_zoom_callback);
|
||||
|
|
@ -84,7 +83,7 @@ public:
|
|||
void set_pan_axis(PanAxis p_pan_axis);
|
||||
|
||||
void setup(ControlScheme p_scheme, Ref<Shortcut> p_shortcut, bool p_simple_panning);
|
||||
void set_viewport(Viewport *p_viewport);
|
||||
void setup_warped_panning(Viewport *p_viewport, bool p_allowed);
|
||||
|
||||
bool is_panning() const;
|
||||
void set_force_drag(bool p_force);
|
||||
|
|
|
|||
Loading…
Reference in New Issue