diff options
Diffstat (limited to 'platform')
| -rw-r--r-- | platform/android/java/src/com/android/godot/Godot.java | 3 | ||||
| -rw-r--r-- | platform/android/java_glue.cpp | 28 | ||||
| -rw-r--r-- | platform/windows/godot_win.cpp | 7 |
3 files changed, 32 insertions, 6 deletions
diff --git a/platform/android/java/src/com/android/godot/Godot.java b/platform/android/java/src/com/android/godot/Godot.java index e0ac6b0f12..4f42a1a82b 100644 --- a/platform/android/java/src/com/android/godot/Godot.java +++ b/platform/android/java/src/com/android/godot/Godot.java @@ -747,7 +747,8 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC //} } break; case MotionEvent.ACTION_POINTER_UP: { - int pointer_idx = event.getActionIndex(); + final int indexPointUp = event.getAction() >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; + final int pointer_idx = event.getPointerId(indexPointUp); GodotLib.touch(4,pointer_idx,evcount,arr); //System.out.printf("%d - s.up at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx)); } break; diff --git a/platform/android/java_glue.cpp b/platform/android/java_glue.cpp index 6ce62bfae2..3158254781 100644 --- a/platform/android/java_glue.cpp +++ b/platform/android/java_glue.cpp @@ -437,6 +437,7 @@ public: } + int ac = E->get().argtypes.size(); if (ac<p_argcount) { @@ -455,7 +456,6 @@ public: } - for(int i=0;i<p_argcount;i++) { if (!Variant::can_convert(p_args[i]->get_type(),E->get().argtypes[i])) { @@ -476,6 +476,10 @@ public: JNIEnv *env = ThreadAndroid::get_env(); + int res = env->PushLocalFrame(16); + + ERR_FAIL_COND_V(res!=0,Variant()); + //print_line("argcount "+String::num(p_argcount)); List<jobject> to_erase; for(int i=0;i<p_argcount;i++) { @@ -568,6 +572,7 @@ public: print_line("failure.."); + env->PopLocalFrame(NULL); ERR_FAIL_V(Variant()); } break; } @@ -576,6 +581,8 @@ public: env->DeleteLocalRef(to_erase.front()->get()); to_erase.pop_front(); } + + env->PopLocalFrame(NULL); //print_line("success"); return ret; @@ -1613,11 +1620,15 @@ JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_method(JNIEnv * env, jobj JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_callobject(JNIEnv * env, jobject p_obj, jint ID, jstring method, jobjectArray params) { - String str_method = env->GetStringUTFChars( method, NULL ); - Object* obj = ObjectDB::get_instance(ID); ERR_FAIL_COND(!obj); + int res = env->PushLocalFrame(16); + ERR_FAIL_COND(res!=0); + + String str_method = env->GetStringUTFChars( method, NULL ); + + int count = env->GetArrayLength(params); Variant* vlist = (Variant*)alloca(sizeof(Variant) * count); Variant** vptr = (Variant**)alloca(sizeof(Variant*) * count); @@ -1637,15 +1648,22 @@ JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_callobject(JNIEnv * env, Variant::CallError err; obj->call(str_method, (const Variant**)vptr, count, err); // something + + env->PopLocalFrame(NULL); + }; JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_calldeferred(JNIEnv * env, jobject p_obj, jint ID, jstring method, jobjectArray params) { - String str_method = env->GetStringUTFChars( method, NULL ); Object* obj = ObjectDB::get_instance(ID); ERR_FAIL_COND(!obj); + int res = env->PushLocalFrame(16); + ERR_FAIL_COND(res!=0); + + String str_method = env->GetStringUTFChars( method, NULL ); + int count = env->GetArrayLength(params); Variant args[VARIANT_ARG_MAX]; @@ -1666,6 +1684,8 @@ JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_calldeferred(JNIEnv * env obj->call_deferred(str_method, args[0],args[1],args[2],args[3],args[4]); // something + env->PopLocalFrame(NULL); + }; //Main::cleanup(); diff --git a/platform/windows/godot_win.cpp b/platform/windows/godot_win.cpp index 81c90d9dd0..fe39051670 100644 --- a/platform/windows/godot_win.cpp +++ b/platform/windows/godot_win.cpp @@ -135,7 +135,12 @@ int widechar_main(int argc, wchar_t** argv) { argv_utf8[i] = wc_to_utf8(argv[i]); } - Main::setup(argv_utf8[0], argc - 1, &argv_utf8[1]); + Error err = Main::setup(argv_utf8[0], argc - 1, &argv_utf8[1]); + + if (err!=OK) + return 255; + + if (Main::start()) os.run(); Main::cleanup(); |