You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Add vararg call() method to C++ Callable
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user