diff options
Diffstat (limited to 'scene/gui/view_panner.cpp')
-rw-r--r-- | scene/gui/view_panner.cpp | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/scene/gui/view_panner.cpp b/scene/gui/view_panner.cpp index 6d1905f111..fc03f2d887 100644 --- a/scene/gui/view_panner.cpp +++ b/scene/gui/view_panner.cpp @@ -47,7 +47,7 @@ bool ViewPanner::gui_input(const Ref<InputEvent> &p_event, Rect2 p_canvas_rect) float zoom_factor = mb->get_factor() <= 0 ? 1.0 : mb->get_factor(); zoom_factor = ((scroll_zoom_factor - 1.0) * zoom_factor) + 1.0; float zoom = (scroll_vec.x + scroll_vec.y) > 0 ? 1.0 / scroll_zoom_factor : scroll_zoom_factor; - callback_helper(zoom_callback, varray(zoom, mb->get_position(), p_event)); + zoom_callback.call(zoom, mb->get_position(), p_event); return true; } else { Vector2 panning = scroll_vec * mb->get_factor(); @@ -58,7 +58,7 @@ bool ViewPanner::gui_input(const Ref<InputEvent> &p_event, Rect2 p_canvas_rect) } else if (mb->is_shift_pressed()) { panning = Vector2(panning.y, panning.x); } - callback_helper(pan_callback, varray(-panning * scroll_speed, p_event)); + pan_callback.call(-panning * scroll_speed, p_event); return true; } } else { @@ -71,14 +71,14 @@ bool ViewPanner::gui_input(const Ref<InputEvent> &p_event, Rect2 p_canvas_rect) } else if (mb->is_shift_pressed()) { panning = Vector2(panning.y, panning.x); } - callback_helper(pan_callback, varray(-panning * scroll_speed, p_event)); + pan_callback.call(-panning * scroll_speed, p_event); return true; } else if (!mb->is_shift_pressed()) { // Compute the zoom factor. float zoom_factor = mb->get_factor() <= 0 ? 1.0 : mb->get_factor(); zoom_factor = ((scroll_zoom_factor - 1.0) * zoom_factor) + 1.0; float zoom = (scroll_vec.x + scroll_vec.y) > 0 ? 1.0 / scroll_zoom_factor : scroll_zoom_factor; - callback_helper(zoom_callback, varray(zoom, mb->get_position(), p_event)); + zoom_callback.call(zoom, mb->get_position(), p_event); return true; } } @@ -108,9 +108,9 @@ bool ViewPanner::gui_input(const Ref<InputEvent> &p_event, Rect2 p_canvas_rect) if (mm.is_valid()) { if (is_dragging) { if (p_canvas_rect != Rect2()) { - callback_helper(pan_callback, varray(Input::get_singleton()->warp_mouse_motion(mm, p_canvas_rect), p_event)); + pan_callback.call(Input::get_singleton()->warp_mouse_motion(mm, p_canvas_rect), p_event); } else { - callback_helper(pan_callback, varray(mm->get_relative(), p_event)); + pan_callback.call(mm->get_relative(), p_event); } return true; } @@ -119,13 +119,13 @@ bool ViewPanner::gui_input(const Ref<InputEvent> &p_event, Rect2 p_canvas_rect) Ref<InputEventMagnifyGesture> magnify_gesture = p_event; if (magnify_gesture.is_valid()) { // Zoom gesture - callback_helper(zoom_callback, varray(magnify_gesture->get_factor(), magnify_gesture->get_position(), p_event)); + zoom_callback.call(magnify_gesture->get_factor(), magnify_gesture->get_position(), p_event); return true; } Ref<InputEventPanGesture> pan_gesture = p_event; if (pan_gesture.is_valid()) { - callback_helper(pan_callback, varray(-pan_gesture->get_delta() * scroll_speed, p_event)); + pan_callback.call(-pan_gesture->get_delta() * scroll_speed, p_event); } Ref<InputEventScreenDrag> screen_drag = p_event; @@ -134,7 +134,7 @@ bool ViewPanner::gui_input(const Ref<InputEvent> &p_event, Rect2 p_canvas_rect) // This set of events also generates/is generated by // InputEventMouseButton/InputEventMouseMotion events which will be processed instead. } else { - callback_helper(pan_callback, varray(screen_drag->get_relative(), p_event)); + pan_callback.call(screen_drag->get_relative(), p_event); } } @@ -157,17 +157,6 @@ void ViewPanner::release_pan_key() { is_dragging = false; } -void ViewPanner::callback_helper(Callable p_callback, Vector<Variant> p_args) { - const Variant **argptr = (const Variant **)alloca(sizeof(Variant *) * p_args.size()); - for (int i = 0; i < p_args.size(); i++) { - argptr[i] = &p_args[i]; - } - - Variant result; - Callable::CallError ce; - p_callback.callp(argptr, p_args.size(), result, ce); -} - void ViewPanner::set_callbacks(Callable p_pan_callback, Callable p_zoom_callback) { pan_callback = p_pan_callback; zoom_callback = p_zoom_callback; |