Add call_deferred() method to Callable
This commit is contained in:
parent
191c8ed12f
commit
1778301cd0
8 changed files with 20 additions and 17 deletions
|
@ -73,6 +73,16 @@ public:
|
|||
void call_deferredp(const Variant **p_arguments, int p_argcount) const;
|
||||
Variant callv(const Array &p_arguments) const;
|
||||
|
||||
template <typename... VarArgs>
|
||||
void call_deferred(VarArgs... p_args) const {
|
||||
Variant args[sizeof...(p_args) + 1] = { p_args..., 0 }; // +1 makes sure zero sized arrays are also supported.
|
||||
const Variant *argptrs[sizeof...(p_args) + 1];
|
||||
for (uint32_t i = 0; i < sizeof...(p_args); i++) {
|
||||
argptrs[i] = &args[i];
|
||||
}
|
||||
return call_deferredp(sizeof...(p_args) == 0 ? nullptr : (const Variant **)argptrs, sizeof...(p_args));
|
||||
}
|
||||
|
||||
Error rpcp(int p_id, const Variant **p_arguments, int p_argcount, CallError &r_call_error) const;
|
||||
|
||||
_FORCE_INLINE_ bool is_null() const {
|
||||
|
|
|
@ -226,7 +226,7 @@ void EditorCommandPalette::_add_command(String p_command_name, String p_key_name
|
|||
void EditorCommandPalette::execute_command(String &p_command_key) {
|
||||
ERR_FAIL_COND_MSG(!commands.has(p_command_key), p_command_key + " not found.");
|
||||
commands[p_command_key].last_used = OS::get_singleton()->get_unix_time();
|
||||
commands[p_command_key].callable.call_deferredp(nullptr, 0);
|
||||
commands[p_command_key].callable.call_deferred();
|
||||
_save_history();
|
||||
}
|
||||
|
||||
|
|
|
@ -242,7 +242,7 @@ void TextureRegionEditor::_region_draw() {
|
|||
hscroll->set_value((hscroll->get_min() + hscroll->get_max() - hscroll->get_page()) / 2);
|
||||
vscroll->set_value((vscroll->get_min() + vscroll->get_max() - vscroll->get_page()) / 2);
|
||||
// This ensures that the view is updated correctly.
|
||||
callable_mp(this, &TextureRegionEditor::_pan_callback).bind(Vector2(1, 0)).call_deferredp(nullptr, 0);
|
||||
callable_mp(this, &TextureRegionEditor::_pan_callback).bind(Vector2(1, 0)).call_deferred();
|
||||
request_center = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -330,7 +330,7 @@ bool CollisionObject3D::_are_collision_shapes_visible() {
|
|||
void CollisionObject3D::_update_shape_data(uint32_t p_owner) {
|
||||
if (_are_collision_shapes_visible()) {
|
||||
if (debug_shapes_to_update.is_empty()) {
|
||||
callable_mp(this, &CollisionObject3D::_update_debug_shapes).call_deferredp({}, 0);
|
||||
callable_mp(this, &CollisionObject3D::_update_debug_shapes).call_deferred();
|
||||
}
|
||||
debug_shapes_to_update.insert(p_owner);
|
||||
}
|
||||
|
|
|
@ -451,7 +451,7 @@ void OptionButton::_queue_refresh_cache() {
|
|||
}
|
||||
cache_refresh_pending = true;
|
||||
|
||||
callable_mp(this, &OptionButton::_refresh_size_cache).call_deferredp(nullptr, 0);
|
||||
callable_mp(this, &OptionButton::_refresh_size_cache).call_deferred();
|
||||
}
|
||||
|
||||
void OptionButton::select(int p_idx) {
|
||||
|
|
|
@ -302,19 +302,12 @@ void DisplayServer::tts_post_utterance_event(TTSUtteranceEvent p_event, int p_id
|
|||
case DisplayServer::TTS_UTTERANCE_ENDED:
|
||||
case DisplayServer::TTS_UTTERANCE_CANCELED: {
|
||||
if (utterance_callback[p_event].is_valid()) {
|
||||
Variant args[1];
|
||||
args[0] = p_id;
|
||||
const Variant *argp[] = { &args[0] };
|
||||
utterance_callback[p_event].call_deferredp(argp, 1); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession.
|
||||
utterance_callback[p_event].call_deferred(p_id); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession.
|
||||
}
|
||||
} break;
|
||||
case DisplayServer::TTS_UTTERANCE_BOUNDARY: {
|
||||
if (utterance_callback[p_event].is_valid()) {
|
||||
Variant args[2];
|
||||
args[0] = p_pos;
|
||||
args[1] = p_id;
|
||||
const Variant *argp[] = { &args[0], &args[1] };
|
||||
utterance_callback[p_event].call_deferredp(argp, 2); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession.
|
||||
utterance_callback[p_event].call_deferred(p_pos, p_id); // Should be deferred, on some platforms utterance events can be called from different threads in a rapid succession.
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
|
|
|
@ -1964,7 +1964,7 @@ void RendererCanvasCull::update_visibility_notifiers() {
|
|||
|
||||
if (!visibility_notifier->enter_callable.is_null()) {
|
||||
if (RSG::threaded) {
|
||||
visibility_notifier->enter_callable.call_deferredp(nullptr, 0);
|
||||
visibility_notifier->enter_callable.call_deferred();
|
||||
} else {
|
||||
Callable::CallError ce;
|
||||
Variant ret;
|
||||
|
@ -1977,7 +1977,7 @@ void RendererCanvasCull::update_visibility_notifiers() {
|
|||
|
||||
if (!visibility_notifier->exit_callable.is_null()) {
|
||||
if (RSG::threaded) {
|
||||
visibility_notifier->exit_callable.call_deferredp(nullptr, 0);
|
||||
visibility_notifier->exit_callable.call_deferred();
|
||||
} else {
|
||||
Callable::CallError ce;
|
||||
Variant ret;
|
||||
|
|
|
@ -200,7 +200,7 @@ void Utilities::visibility_notifier_call(RID p_notifier, bool p_enter, bool p_de
|
|||
if (p_enter) {
|
||||
if (!vn->enter_callback.is_null()) {
|
||||
if (p_deferred) {
|
||||
vn->enter_callback.call_deferredp(nullptr, 0);
|
||||
vn->enter_callback.call_deferred();
|
||||
} else {
|
||||
Variant r;
|
||||
Callable::CallError ce;
|
||||
|
@ -210,7 +210,7 @@ void Utilities::visibility_notifier_call(RID p_notifier, bool p_enter, bool p_de
|
|||
} else {
|
||||
if (!vn->exit_callback.is_null()) {
|
||||
if (p_deferred) {
|
||||
vn->exit_callback.call_deferredp(nullptr, 0);
|
||||
vn->exit_callback.call_deferred();
|
||||
} else {
|
||||
Variant r;
|
||||
Callable::CallError ce;
|
||||
|
|
Loading…
Reference in a new issue