Add vararg call() method to C++ Callable
This commit is contained in:
parent
c7ed5d795e
commit
09b30be86d
27 changed files with 96 additions and 332 deletions
|
|
@ -402,11 +402,6 @@ void DisplayServerMacOS::_dispatch_input_event(const Ref<InputEvent> &p_event) {
|
|||
if (!in_dispatch_input_event) {
|
||||
in_dispatch_input_event = true;
|
||||
|
||||
Variant ev = p_event;
|
||||
Variant *evp = &ev;
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
|
||||
{
|
||||
List<WindowID>::Element *E = popup_list.back();
|
||||
if (E && Object::cast_to<InputEventKey>(*p_event)) {
|
||||
|
|
@ -414,7 +409,7 @@ void DisplayServerMacOS::_dispatch_input_event(const Ref<InputEvent> &p_event) {
|
|||
if (windows.has(E->get())) {
|
||||
Callable callable = windows[E->get()].input_event_callback;
|
||||
if (callable.is_valid()) {
|
||||
callable.callp((const Variant **)&evp, 1, ret, ce);
|
||||
callable.call(p_event);
|
||||
}
|
||||
}
|
||||
in_dispatch_input_event = false;
|
||||
|
|
@ -428,7 +423,7 @@ void DisplayServerMacOS::_dispatch_input_event(const Ref<InputEvent> &p_event) {
|
|||
if (windows.has(event_from_window->get_window_id())) {
|
||||
Callable callable = windows[event_from_window->get_window_id()].input_event_callback;
|
||||
if (callable.is_valid()) {
|
||||
callable.callp((const Variant **)&evp, 1, ret, ce);
|
||||
callable.call(p_event);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -436,7 +431,7 @@ void DisplayServerMacOS::_dispatch_input_event(const Ref<InputEvent> &p_event) {
|
|||
for (KeyValue<WindowID, WindowData> &E : windows) {
|
||||
Callable callable = E.value.input_event_callback;
|
||||
if (callable.is_valid()) {
|
||||
callable.callp((const Variant **)&evp, 1, ret, ce);
|
||||
callable.call(p_event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -615,9 +610,7 @@ void DisplayServerMacOS::menu_open(NSMenu *p_menu) {
|
|||
MenuData &md = submenu[submenu_inv[p_menu]];
|
||||
md.is_open = true;
|
||||
if (md.open.is_valid()) {
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
md.open.callp(nullptr, 0, ret, ce);
|
||||
md.open.call();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -627,9 +620,7 @@ void DisplayServerMacOS::menu_close(NSMenu *p_menu) {
|
|||
MenuData &md = submenu[submenu_inv[p_menu]];
|
||||
md.is_open = false;
|
||||
if (md.close.is_valid()) {
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
md.close.callp(nullptr, 0, ret, ce);
|
||||
md.close.call();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -699,12 +690,9 @@ void DisplayServerMacOS::send_event(NSEvent *p_event) {
|
|||
void DisplayServerMacOS::send_window_event(const WindowData &wd, WindowEvent p_event) {
|
||||
_THREAD_SAFE_METHOD_
|
||||
|
||||
if (!wd.event_callback.is_null()) {
|
||||
if (wd.event_callback.is_valid()) {
|
||||
Variant event = int(p_event);
|
||||
Variant *eventp = &event;
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
wd.event_callback.callp((const Variant **)&eventp, 1, ret, ce);
|
||||
wd.event_callback.call(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2002,11 +1990,7 @@ Error DisplayServerMacOS::dialog_show(String p_title, String p_description, Vect
|
|||
}
|
||||
|
||||
if (!p_callback.is_null()) {
|
||||
Variant button = button_pressed;
|
||||
Variant *buttonp = &button;
|
||||
Variant fun_ret;
|
||||
Callable::CallError ce;
|
||||
p_callback.callp((const Variant **)&buttonp, 1, fun_ret, ce);
|
||||
p_callback.call(button_pressed);
|
||||
}
|
||||
|
||||
return OK;
|
||||
|
|
@ -2181,23 +2165,11 @@ Error DisplayServerMacOS::file_dialog_show(const String &p_title, const String &
|
|||
url.parse_utf8([[[panel URL] path] UTF8String]);
|
||||
files.push_back(url);
|
||||
if (!callback.is_null()) {
|
||||
Variant v_status = true;
|
||||
Variant v_files = files;
|
||||
Variant v_index = [handler getIndex];
|
||||
Variant *v_args[3] = { &v_status, &v_files, &v_index };
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
callback.callp((const Variant **)&v_args, 3, ret, ce);
|
||||
callback.call(true, files, [handler getIndex]);
|
||||
}
|
||||
} else {
|
||||
if (!callback.is_null()) {
|
||||
Variant v_status = false;
|
||||
Variant v_files = Vector<String>();
|
||||
Variant v_index = [handler getIndex];
|
||||
Variant *v_args[3] = { &v_status, &v_files, &v_index };
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
callback.callp((const Variant **)&v_args, 3, ret, ce);
|
||||
callback.call(false, Vector<String>(), [handler getIndex]);
|
||||
}
|
||||
}
|
||||
if (prev_focus != INVALID_WINDOW_ID) {
|
||||
|
|
@ -2258,23 +2230,11 @@ Error DisplayServerMacOS::file_dialog_show(const String &p_title, const String &
|
|||
files.push_back(url);
|
||||
}
|
||||
if (!callback.is_null()) {
|
||||
Variant v_status = true;
|
||||
Variant v_files = files;
|
||||
Variant v_index = [handler getIndex];
|
||||
Variant *v_args[3] = { &v_status, &v_files, &v_index };
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
callback.callp((const Variant **)&v_args, 3, ret, ce);
|
||||
callback.call(true, files, [handler getIndex]);
|
||||
}
|
||||
} else {
|
||||
if (!callback.is_null()) {
|
||||
Variant v_status = false;
|
||||
Variant v_files = Vector<String>();
|
||||
Variant v_index = [handler getIndex];
|
||||
Variant *v_args[3] = { &v_status, &v_files, &v_index };
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
callback.callp((const Variant **)&v_args, 3, ret, ce);
|
||||
callback.call(false, Vector<String>(), [handler getIndex]);
|
||||
}
|
||||
}
|
||||
if (prev_focus != INVALID_WINDOW_ID) {
|
||||
|
|
@ -2308,11 +2268,7 @@ Error DisplayServerMacOS::dialog_input_text(String p_title, String p_description
|
|||
ret.parse_utf8([[input stringValue] UTF8String]);
|
||||
|
||||
if (!p_callback.is_null()) {
|
||||
Variant text = ret;
|
||||
Variant *textp = &text;
|
||||
Variant fun_ret;
|
||||
Callable::CallError ce;
|
||||
p_callback.callp((const Variant **)&textp, 1, fun_ret, ce);
|
||||
p_callback.call(ret);
|
||||
}
|
||||
|
||||
return OK;
|
||||
|
|
@ -4063,12 +4019,7 @@ void DisplayServerMacOS::process_events() {
|
|||
while (List<MenuCall>::Element *call_p = deferred_menu_calls.front()) {
|
||||
MenuCall call = call_p->get();
|
||||
deferred_menu_calls.pop_front(); // Remove before call to avoid infinite loop in case callback is using `process_events` (e.g. EditorProgress).
|
||||
|
||||
Variant tag = call.tag;
|
||||
Variant *tagp = &tag;
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
call.callback.callp((const Variant **)&tagp, 1, ret, ce);
|
||||
call.callback.call(call.tag);
|
||||
}
|
||||
|
||||
if (!drop_events) {
|
||||
|
|
|
|||
|
|
@ -323,12 +323,7 @@
|
|||
NSString *file = [NSURL URLWithString:url].path;
|
||||
files.push_back(String::utf8([file UTF8String]));
|
||||
}
|
||||
|
||||
Variant v = files;
|
||||
Variant *vp = &v;
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
wd.drop_files_callback.callp((const Variant **)&vp, 1, ret, ce);
|
||||
wd.drop_files_callback.call(files);
|
||||
}
|
||||
|
||||
return NO;
|
||||
|
|
|
|||
|
|
@ -58,11 +58,7 @@
|
|||
GodotMenuItem *value = [item representedObject];
|
||||
if (value && value->hover_callback != Callable()) {
|
||||
// If custom callback is set, use it.
|
||||
Variant tag = value->meta;
|
||||
Variant *tagp = &tag;
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
value->hover_callback.callp((const Variant **)&tagp, 1, ret, ce);
|
||||
value->hover_callback.call(value->meta);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -79,11 +75,7 @@
|
|||
GodotMenuItem *value = [menu_item representedObject];
|
||||
if (value->key_callback != Callable()) {
|
||||
// If custom callback is set, use it.
|
||||
Variant tag = value->meta;
|
||||
Variant *tagp = &tag;
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
value->key_callback.callp((const Variant **)&tagp, 1, ret, ce);
|
||||
value->key_callback.call(value->meta);
|
||||
} else {
|
||||
// Otherwise redirect event to the engine.
|
||||
if (DisplayServer::get_singleton()) {
|
||||
|
|
|
|||
|
|
@ -256,11 +256,7 @@
|
|||
ds->window_resize(window_id, wd.size.width, wd.size.height);
|
||||
|
||||
if (!wd.rect_changed_callback.is_null()) {
|
||||
Variant size = Rect2i(ds->window_get_position(window_id), ds->window_get_size(window_id));
|
||||
Variant *sizep = &size;
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
wd.rect_changed_callback.callp((const Variant **)&sizep, 1, ret, ce);
|
||||
wd.rect_changed_callback.call(Rect2i(ds->window_get_position(window_id), ds->window_get_size(window_id)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -283,11 +279,7 @@
|
|||
ds->release_pressed_events();
|
||||
|
||||
if (!wd.rect_changed_callback.is_null()) {
|
||||
Variant size = Rect2i(ds->window_get_position(window_id), ds->window_get_size(window_id));
|
||||
Variant *sizep = &size;
|
||||
Variant ret;
|
||||
Callable::CallError ce;
|
||||
wd.rect_changed_callback.callp((const Variant **)&sizep, 1, ret, ce);
|
||||
wd.rect_changed_callback.call(Rect2i(ds->window_get_position(window_id), ds->window_get_size(window_id)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue