diff options
Diffstat (limited to 'platform')
| -rw-r--r-- | platform/android/java_glue.cpp | 8 | ||||
| -rw-r--r-- | platform/android/os_android.cpp | 29 | ||||
| -rw-r--r-- | platform/android/os_android.h | 2 | ||||
| -rw-r--r-- | platform/windows/os_windows.cpp | 16 | ||||
| -rw-r--r-- | platform/windows/os_windows.h | 2 |
5 files changed, 49 insertions, 8 deletions
diff --git a/platform/android/java_glue.cpp b/platform/android/java_glue.cpp index 5fd2ab891..3ea2ab164 100644 --- a/platform/android/java_glue.cpp +++ b/platform/android/java_glue.cpp @@ -259,8 +259,7 @@ Variant _jobject_to_variant(JNIEnv * env, jobject obj) { for (int i=0; i<stringCount; i++) { jstring string = (jstring) env->GetObjectArrayElement(arr, i); - const char *rawString = env->GetStringUTFChars(string, 0); - sarr.push_back(String(rawString)); + sarr.push_back(String::utf8(env->GetStringUTFChars(string, NULL))); env->DeleteLocalRef(string); } @@ -506,7 +505,7 @@ public: } break; case Variant::BOOL: { - ret = env->CallBooleanMethodA(instance,E->get().method,v); + ret = env->CallBooleanMethodA(instance,E->get().method,v)==JNI_TRUE; //print_line("call bool"); } break; case Variant::INT: { @@ -521,8 +520,7 @@ public: case Variant::STRING: { jobject o = env->CallObjectMethodA(instance,E->get().method,v); - String str = env->GetStringUTFChars((jstring)o, NULL ); - ret=str; + ret = String::utf8(env->GetStringUTFChars((jstring)o, NULL)); env->DeleteLocalRef(o); } break; case Variant::STRING_ARRAY: { diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index 4e6dfb2db..13cdf2a02 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -708,8 +708,33 @@ void OS_Android::set_need_reload_hooks(bool p_needs_them) { String OS_Android::get_data_dir() const { - if (get_data_dir_func) - return get_data_dir_func(); + if (data_dir_cache!=String()) + return data_dir_cache; + + if (get_data_dir_func) { + String data_dir=get_data_dir_func(); + + //store current dir + char real_current_dir_name[2048]; + getcwd(real_current_dir_name,2048); + + //go to data dir + chdir(data_dir.utf8().get_data()); + + //get actual data dir, so we resolve potential symlink (Android 6.0+ seems to use symlink) + char data_current_dir_name[2048]; + getcwd(data_current_dir_name,2048); + + //cache by parsing utf8 + data_dir_cache.parse_utf8(data_current_dir_name); + + //restore original dir so we don't mess things up + chdir(real_current_dir_name); + + return data_dir_cache; + } + + return "."; //return Globals::get_singleton()->get_singleton_object("GodotOS")->call("get_data_dir"); }; diff --git a/platform/android/os_android.h b/platform/android/os_android.h index 843b3c478..e82e08ea4 100644 --- a/platform/android/os_android.h +++ b/platform/android/os_android.h @@ -123,6 +123,8 @@ private: PhysicsServer *physics_server; Physics2DServer *physics_2d_server; + mutable String data_dir_cache; + #if 0 AudioDriverAndroid audio_driver_android; #else diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 9421e0d48..89de969cf 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -612,6 +612,20 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { } //return 0; // Jump Back } break; + + case WM_ENTERSIZEMOVE: { + move_timer_id = SetTimer(hWnd, 1, USER_TIMER_MINIMUM,(TIMERPROC) NULL); + } break; + case WM_EXITSIZEMOVE: { + KillTimer(hWnd, move_timer_id); + } break; + case WM_TIMER: { + if (wParam == move_timer_id) { + process_key_events(); + Main::iteration(); + } + } break; + case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_KEYUP: @@ -1140,7 +1154,7 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_ DragAcceptFiles(hWnd,true); - + move_timer_id = 1; } void OS_Windows::set_clipboard(const String& p_text) { diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index 509d76abb..d2249bf35 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -104,6 +104,8 @@ class OS_Windows : public OS { HINSTANCE hInstance; // Holds The Instance Of The Application HWND hWnd; + uint32_t move_timer_id; + HCURSOR hCursor; Size2 window_rect; |
