diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2017-03-05 16:44:50 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2017-03-05 16:44:50 +0100 |
commit | 5dbf1809c6e3e905b94b8764e99491e608122261 (patch) | |
tree | 5e5a5360db15d86d59ec8c6e4f7eb511388c5a9a /platform/android | |
parent | 45438e9918d421b244bfd7776a30e67dc7f2d3e3 (diff) |
A Whole New World (clang-format edition)
I can show you the code
Pretty, with proper whitespace
Tell me, coder, now when did
You last write readable code?
I can open your eyes
Make you see your bad indent
Force you to respect the style
The core devs agreed upon
A whole new world
A new fantastic code format
A de facto standard
With some sugar
Enforced with clang-format
A whole new world
A dazzling style we all dreamed of
And when we read it through
It's crystal clear
That now we're in a whole new world of code
Diffstat (limited to 'platform/android')
25 files changed, 2189 insertions, 2580 deletions
diff --git a/platform/android/audio_driver_jandroid.cpp b/platform/android/audio_driver_jandroid.cpp index 415223c1da..5e30289310 100644 --- a/platform/android/audio_driver_jandroid.cpp +++ b/platform/android/audio_driver_jandroid.cpp @@ -34,34 +34,32 @@ #ifndef ANDROID_NATIVE_ACTIVITY -AudioDriverAndroid* AudioDriverAndroid::s_ad=NULL; +AudioDriverAndroid *AudioDriverAndroid::s_ad = NULL; jobject AudioDriverAndroid::io; jmethodID AudioDriverAndroid::_init_audio; jmethodID AudioDriverAndroid::_write_buffer; jmethodID AudioDriverAndroid::_quit; jmethodID AudioDriverAndroid::_pause; -bool AudioDriverAndroid::active=false; +bool AudioDriverAndroid::active = false; jclass AudioDriverAndroid::cls; -int AudioDriverAndroid::audioBufferFrames=0; -int AudioDriverAndroid::mix_rate=44100; -bool AudioDriverAndroid::quit=false; +int AudioDriverAndroid::audioBufferFrames = 0; +int AudioDriverAndroid::mix_rate = 44100; +bool AudioDriverAndroid::quit = false; jobject AudioDriverAndroid::audioBuffer = NULL; -void* AudioDriverAndroid::audioBufferPinned = NULL; -Mutex *AudioDriverAndroid::mutex=NULL; -int32_t* AudioDriverAndroid::audioBuffer32=NULL; +void *AudioDriverAndroid::audioBufferPinned = NULL; +Mutex *AudioDriverAndroid::mutex = NULL; +int32_t *AudioDriverAndroid::audioBuffer32 = NULL; - -const char* AudioDriverAndroid::get_name() const { +const char *AudioDriverAndroid::get_name() const { return "Android"; } - -Error AudioDriverAndroid::init(){ +Error AudioDriverAndroid::init() { mutex = Mutex::create(); -/* + /* // TODO: pass in/return a (Java) device ID, also whether we're opening for input or output this->spec.samples = Android_JNI_OpenAudioDevice(this->spec.freq, this->spec.format == AUDIO_U8 ? 0 : 1, this->spec.channels, this->spec.samples); SDL_CalculateAudioSpec(&this->spec); @@ -75,76 +73,68 @@ Error AudioDriverAndroid::init(){ //Android_JNI_SetupThread(); - - // __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device"); - + // __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "SDL audio: opening device"); JNIEnv *env = ThreadAndroid::get_env(); - int mix_rate = GLOBAL_DEF("audio/mix_rate",44100); + int mix_rate = GLOBAL_DEF("audio/mix_rate", 44100); - int latency = GLOBAL_DEF("audio/output_latency",25); - latency=50; - unsigned int buffer_size = nearest_power_of_2( latency * mix_rate / 1000 ); + int latency = GLOBAL_DEF("audio/output_latency", 25); + latency = 50; + unsigned int buffer_size = nearest_power_of_2(latency * mix_rate / 1000); if (OS::get_singleton()->is_stdout_verbose()) { - print_line("audio buffer size: "+itos(buffer_size)); + print_line("audio buffer size: " + itos(buffer_size)); } - __android_log_print(ANDROID_LOG_INFO,"godot","Initializing audio! params: %i,%i ",mix_rate,buffer_size); - audioBuffer = env->CallObjectMethod(io,_init_audio, mix_rate, buffer_size); - + __android_log_print(ANDROID_LOG_INFO, "godot", "Initializing audio! params: %i,%i ", mix_rate, buffer_size); + audioBuffer = env->CallObjectMethod(io, _init_audio, mix_rate, buffer_size); - ERR_FAIL_COND_V( audioBuffer == NULL, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V(audioBuffer == NULL, ERR_INVALID_PARAMETER); audioBuffer = env->NewGlobalRef(audioBuffer); jboolean isCopy = JNI_FALSE; audioBufferPinned = env->GetShortArrayElements((jshortArray)audioBuffer, &isCopy); audioBufferFrames = env->GetArrayLength((jshortArray)audioBuffer); - audioBuffer32 = memnew_arr(int32_t,audioBufferFrames); + audioBuffer32 = memnew_arr(int32_t, audioBufferFrames); return OK; } -void AudioDriverAndroid::start(){ - active=true; - +void AudioDriverAndroid::start() { + active = true; } -void AudioDriverAndroid::setup( jobject p_io) { +void AudioDriverAndroid::setup(jobject p_io) { JNIEnv *env = ThreadAndroid::get_env(); - io=p_io; + io = p_io; jclass c = env->GetObjectClass(io); cls = (jclass)env->NewGlobalRef(c); - - __android_log_print(ANDROID_LOG_INFO,"godot","starting to attempt get methods"); + __android_log_print(ANDROID_LOG_INFO, "godot", "starting to attempt get methods"); _init_audio = env->GetMethodID(cls, "audioInit", "(II)Ljava/lang/Object;"); - if(_init_audio != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _init_audio ok!!"); + if (_init_audio != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _init_audio ok!!"); } else { - __android_log_print(ANDROID_LOG_INFO,"godot","audioinit ok!"); + __android_log_print(ANDROID_LOG_INFO, "godot", "audioinit ok!"); } _write_buffer = env->GetMethodID(cls, "audioWriteShortBuffer", "([S)V"); - if(_write_buffer != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _write_buffer ok!!"); + if (_write_buffer != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _write_buffer ok!!"); } - _quit = env->GetMethodID(cls, "audioQuit", "()V"); - if(_quit != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _quit ok!!"); + if (_quit != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _quit ok!!"); } _pause = env->GetMethodID(cls, "audioPause", "(Z)V"); - if(_quit != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _pause ok!!"); + if (_quit != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _pause ok!!"); } - - } void AudioDriverAndroid::thread_func(JNIEnv *env) { @@ -152,48 +142,44 @@ void AudioDriverAndroid::thread_func(JNIEnv *env) { jclass cls = env->FindClass("org/godotengine/godot/Godot"); if (cls) { - cls=(jclass)env->NewGlobalRef(cls); - __android_log_print(ANDROID_LOG_INFO,"godot","*******CLASS FOUND!!!"); + cls = (jclass)env->NewGlobalRef(cls); + __android_log_print(ANDROID_LOG_INFO, "godot", "*******CLASS FOUND!!!"); } jfieldID fid = env->GetStaticFieldID(cls, "io", "Lorg/godotengine/godot/GodotIO;"); - jobject ob = env->GetStaticObjectField(cls,fid); + jobject ob = env->GetStaticObjectField(cls, fid); jobject gob = env->NewGlobalRef(ob); jclass c = env->GetObjectClass(gob); jclass lcls = (jclass)env->NewGlobalRef(c); _write_buffer = env->GetMethodID(lcls, "audioWriteShortBuffer", "([S)V"); - if(_write_buffer != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _write_buffer ok!!"); + if (_write_buffer != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _write_buffer ok!!"); } - while(!quit) { - + while (!quit) { - int16_t* ptr = (int16_t*)audioBufferPinned; + int16_t *ptr = (int16_t *)audioBufferPinned; int fc = audioBufferFrames; - if (!s_ad->active || mutex->try_lock()!=OK) { + if (!s_ad->active || mutex->try_lock() != OK) { - for(int i=0;i<fc;i++) { - ptr[i]=0; + for (int i = 0; i < fc; i++) { + ptr[i] = 0; } } else { - - s_ad->audio_server_process(fc/2,audioBuffer32); + s_ad->audio_server_process(fc / 2, audioBuffer32); mutex->unlock(); - for(int i=0;i<fc;i++) { + for (int i = 0; i < fc; i++) { - ptr[i]=audioBuffer32[i]>>16; + ptr[i] = audioBuffer32[i] >> 16; } - } env->ReleaseShortArrayElements((jshortArray)audioBuffer, (jshort *)ptr, JNI_COMMIT); env->CallVoidMethod(gob, _write_buffer, (jshortArray)audioBuffer); } - } int AudioDriverAndroid::get_mix_rate() const { @@ -201,16 +187,15 @@ int AudioDriverAndroid::get_mix_rate() const { return mix_rate; } -AudioDriver::SpeakerMode AudioDriverAndroid::get_speaker_mode() const{ +AudioDriver::SpeakerMode AudioDriverAndroid::get_speaker_mode() const { return SPEAKER_MODE_STEREO; } -void AudioDriverAndroid::lock(){ +void AudioDriverAndroid::lock() { if (mutex) mutex->lock(); - } void AudioDriverAndroid::unlock() { @@ -219,7 +204,7 @@ void AudioDriverAndroid::unlock() { mutex->unlock(); } -void AudioDriverAndroid::finish(){ +void AudioDriverAndroid::finish() { JNIEnv *env = ThreadAndroid::get_env(); env->CallVoidMethod(io, _quit); @@ -230,21 +215,19 @@ void AudioDriverAndroid::finish(){ audioBufferPinned = NULL; } - active=false; + active = false; } void AudioDriverAndroid::set_pause(bool p_pause) { JNIEnv *env = ThreadAndroid::get_env(); - env->CallVoidMethod(io, _pause,p_pause); - + env->CallVoidMethod(io, _pause, p_pause); } AudioDriverAndroid::AudioDriverAndroid() { - s_ad=this; - active=false; - + s_ad = this; + active = false; } #endif diff --git a/platform/android/audio_driver_jandroid.h b/platform/android/audio_driver_jandroid.h index f485df2001..4b5131cdc0 100644 --- a/platform/android/audio_driver_jandroid.h +++ b/platform/android/audio_driver_jandroid.h @@ -37,9 +37,8 @@ class AudioDriverAndroid : public AudioDriver { - static Mutex *mutex; - static AudioDriverAndroid* s_ad; + static AudioDriverAndroid *s_ad; static jobject io; static jmethodID _init_audio; static jmethodID _write_buffer; @@ -51,21 +50,19 @@ class AudioDriverAndroid : public AudioDriver { static jclass cls; static jobject audioBuffer; - static void* audioBufferPinned; - static int32_t* audioBuffer32; + static void *audioBufferPinned; + static int32_t *audioBuffer32; static int audioBufferFrames; static int mix_rate; - public: - void set_singleton(); - virtual const char* get_name() const; + virtual const char *get_name() const; virtual Error init(); virtual void start(); - virtual int get_mix_rate() const ; + virtual int get_mix_rate() const; virtual SpeakerMode get_speaker_mode() const; virtual void lock(); virtual void unlock(); @@ -73,7 +70,7 @@ public: virtual void set_pause(bool p_pause); - static void setup( jobject act); + static void setup(jobject act); static void thread_func(JNIEnv *env); AudioDriverAndroid(); diff --git a/platform/android/audio_driver_opensl.cpp b/platform/android/audio_driver_opensl.cpp index 2ec80f23c3..bba98dd623 100644 --- a/platform/android/audio_driver_opensl.cpp +++ b/platform/android/audio_driver_opensl.cpp @@ -35,48 +35,45 @@ /* Structure for passing information to callback function */ - void AudioDriverOpenSL::_buffer_callback( - SLAndroidSimpleBufferQueueItf queueItf - /* SLuint32 eventFlags, + SLAndroidSimpleBufferQueueItf queueItf + /* SLuint32 eventFlags, const void * pBuffer, SLuint32 bufferSize, SLuint32 dataUsed*/) { - bool mix=true; + bool mix = true; if (pause) { - mix=false; + mix = false; } else if (mutex) { - mix = mutex->try_lock()==OK; + mix = mutex->try_lock() == OK; } if (mix) { - audio_server_process(buffer_size,mixdown_buffer); + audio_server_process(buffer_size, mixdown_buffer); } else { - int32_t* src_buff=mixdown_buffer; - for(int i=0;i<buffer_size*2;i++) { - src_buff[i]=0; + int32_t *src_buff = mixdown_buffer; + for (int i = 0; i < buffer_size * 2; i++) { + src_buff[i] = 0; } } if (mutex && mix) mutex->unlock(); + const int32_t *src_buff = mixdown_buffer; - const int32_t* src_buff=mixdown_buffer; - - int16_t *ptr = (int16_t*)buffers[last_free]; - last_free=(last_free+1)%BUFFER_COUNT; + int16_t *ptr = (int16_t *)buffers[last_free]; + last_free = (last_free + 1) % BUFFER_COUNT; - for(int i=0;i<buffer_size*2;i++) { + for (int i = 0; i < buffer_size * 2; i++) { - ptr[i]=src_buff[i]>>16; + ptr[i] = src_buff[i] >> 16; } - (*queueItf)->Enqueue(queueItf, ptr, 4 * buffer_size); - + (*queueItf)->Enqueue(queueItf, ptr, 4 * buffer_size); #if 0 SLresult res; @@ -95,25 +92,22 @@ void AudioDriverOpenSL::_buffer_callback( } void AudioDriverOpenSL::_buffer_callbacks( - SLAndroidSimpleBufferQueueItf queueItf, - /*SLuint32 eventFlags, + SLAndroidSimpleBufferQueueItf queueItf, + /*SLuint32 eventFlags, const void * pBuffer, SLuint32 bufferSize, SLuint32 dataUsed,*/ - void *pContext) { - + void *pContext) { - AudioDriverOpenSL *ad = (AudioDriverOpenSL*)pContext; + AudioDriverOpenSL *ad = (AudioDriverOpenSL *)pContext; //ad->_buffer_callback(queueItf,eventFlags,pBuffer,bufferSize,dataUsed); ad->_buffer_callback(queueItf); - } +AudioDriverOpenSL *AudioDriverOpenSL::s_ad = NULL; -AudioDriverOpenSL* AudioDriverOpenSL::s_ad=NULL; - -const char* AudioDriverOpenSL::get_name() const { +const char *AudioDriverOpenSL::get_name() const { return "Android"; } @@ -177,23 +171,23 @@ int AudioDriverOpenSL::thread_func(SceSize args, void *argp) { } #endif -Error AudioDriverOpenSL::init(){ +Error AudioDriverOpenSL::init() { SLresult - res; + res; SLEngineOption EngineOption[] = { - (SLuint32) SL_ENGINEOPTION_THREADSAFE, - (SLuint32) SL_BOOLEAN_TRUE + (SLuint32)SL_ENGINEOPTION_THREADSAFE, + (SLuint32)SL_BOOLEAN_TRUE }; - res = slCreateEngine( &sl, 1, EngineOption, 0, NULL, NULL); - if (res!=SL_RESULT_SUCCESS) { + res = slCreateEngine(&sl, 1, EngineOption, 0, NULL, NULL); + if (res != SL_RESULT_SUCCESS) { ERR_EXPLAIN("Could not Initialize OpenSL"); ERR_FAIL_V(ERR_INVALID_PARAMETER); } res = (*sl)->Realize(sl, SL_BOOLEAN_FALSE); - if (res!=SL_RESULT_SUCCESS) { + if (res != SL_RESULT_SUCCESS) { ERR_EXPLAIN("Could not Realize OpenSL"); ERR_FAIL_V(ERR_INVALID_PARAMETER); @@ -202,37 +196,33 @@ Error AudioDriverOpenSL::init(){ print_line("OpenSL Init OK!"); return OK; - } -void AudioDriverOpenSL::start(){ - +void AudioDriverOpenSL::start() { mutex = Mutex::create(); - active=false; - + active = false; SLint32 numOutputs = 0; SLuint32 deviceID = 0; SLresult res; - buffer_size = 1024; - for(int i=0;i<BUFFER_COUNT;i++) { + for (int i = 0; i < BUFFER_COUNT; i++) { - buffers[i]=memnew_arr( int16_t,buffer_size*2 ); - memset(buffers[i],0,buffer_size*4); + buffers[i] = memnew_arr(int16_t, buffer_size * 2); + memset(buffers[i], 0, buffer_size * 4); } - mixdown_buffer = memnew_arr( int32_t,buffer_size* 2); + mixdown_buffer = memnew_arr(int32_t, buffer_size * 2); /* Callback context for the buffer queue callback function */ /* Get the SL Engine Interface which is implicit */ - res = (*sl)->GetInterface(sl, SL_IID_ENGINE, (void*)&EngineItf); + res = (*sl)->GetInterface(sl, SL_IID_ENGINE, (void *)&EngineItf); - ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); + ERR_FAIL_COND(res != SL_RESULT_SUCCESS); /* Initialize arrays required[] and iidArray[] */ SLboolean required[MAX_NUMBER_INTERFACES]; SLInterfaceID iidArray[MAX_NUMBER_INTERFACES]; @@ -254,20 +244,18 @@ void AudioDriverOpenSL::start(){ #else { - const SLInterfaceID ids[1] = {SL_IID_ENVIRONMENTALREVERB}; - const SLboolean req[1] = {SL_BOOLEAN_FALSE}; - res = (*EngineItf)->CreateOutputMix(EngineItf, &OutputMix, 0, - ids, req); + const SLInterfaceID ids[1] = { SL_IID_ENVIRONMENTALREVERB }; + const SLboolean req[1] = { SL_BOOLEAN_FALSE }; + res = (*EngineItf)->CreateOutputMix(EngineItf, &OutputMix, 0, ids, req); } - #endif - ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); - // Realizing the Output Mix object in synchronous mode. + ERR_FAIL_COND(res != SL_RESULT_SUCCESS); + // Realizing the Output Mix object in synchronous mode. res = (*OutputMix)->Realize(OutputMix, SL_BOOLEAN_FALSE); - ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); + ERR_FAIL_COND(res != SL_RESULT_SUCCESS); - SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, BUFFER_COUNT}; + SLDataLocator_AndroidSimpleBufferQueue loc_bufq = { SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, BUFFER_COUNT }; //bufferQueue.locatorType = SL_DATALOCATOR_BUFFERQUEUE; //bufferQueue.numBuffers = BUFFER_COUNT; /* Four buffers in our buffer queue */ /* Setup the format of the content in the buffer queue */ @@ -285,10 +273,9 @@ void AudioDriverOpenSL::start(){ audioSource.pFormat = (void *)&pcm; audioSource.pLocator = (void *)&loc_bufq; - /* Setup the data sink structure */ locator_outputmix.locatorType = SL_DATALOCATOR_OUTPUTMIX; - locator_outputmix.outputMix= OutputMix; + locator_outputmix.outputMix = OutputMix; audioSink.pLocator = (void *)&locator_outputmix; audioSink.pFormat = NULL; /* Initialize the context for Buffer queue callbacks */ @@ -302,27 +289,25 @@ void AudioDriverOpenSL::start(){ /* Create the music player */ { - const SLInterfaceID ids[2] = {SL_IID_BUFFERQUEUE, SL_IID_EFFECTSEND}; - const SLboolean req[2] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; + const SLInterfaceID ids[2] = { SL_IID_BUFFERQUEUE, SL_IID_EFFECTSEND }; + const SLboolean req[2] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE }; - res = (*EngineItf)->CreateAudioPlayer(EngineItf, &player, - &audioSource, &audioSink, 1, ids, req); - ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); + res = (*EngineItf)->CreateAudioPlayer(EngineItf, &player, &audioSource, &audioSink, 1, ids, req); + ERR_FAIL_COND(res != SL_RESULT_SUCCESS); } /* Realizing the player in synchronous mode. */ res = (*player)->Realize(player, SL_BOOLEAN_FALSE); - ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); + ERR_FAIL_COND(res != SL_RESULT_SUCCESS); /* Get seek and play interfaces */ - res = (*player)->GetInterface(player, SL_IID_PLAY, (void*)&playItf); - ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); + res = (*player)->GetInterface(player, SL_IID_PLAY, (void *)&playItf); + ERR_FAIL_COND(res != SL_RESULT_SUCCESS); res = (*player)->GetInterface(player, SL_IID_BUFFERQUEUE, - (void*)&bufferQueueItf); - ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); + (void *)&bufferQueueItf); + ERR_FAIL_COND(res != SL_RESULT_SUCCESS); /* Setup to receive buffer queue event callbacks */ - res = (*bufferQueueItf)->RegisterCallback(bufferQueueItf, - _buffer_callbacks, this); - ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); - /* Before we start set volume to -3dB (-300mB) */ + res = (*bufferQueueItf)->RegisterCallback(bufferQueueItf, _buffer_callbacks, this); + ERR_FAIL_COND(res != SL_RESULT_SUCCESS); +/* Before we start set volume to -3dB (-300mB) */ #if 0 res = (*OutputMix)->GetInterface(OutputMix, SL_IID_VOLUME, (void*)&volumeItf); @@ -332,19 +317,17 @@ void AudioDriverOpenSL::start(){ res = (*volumeItf)->SetVolumeLevel(volumeItf, -300); ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); #endif - last_free=0; + last_free = 0; #if 1 //fill up buffers - for(int i=0;i<BUFFER_COUNT;i++) { + for (int i = 0; i < BUFFER_COUNT; i++) { /* Enqueue a few buffers to get the ball rolling */ - res = (*bufferQueueItf)->Enqueue(bufferQueueItf, buffers[i], - 4 * buffer_size); /* Size given in */ - + res = (*bufferQueueItf)->Enqueue(bufferQueueItf, buffers[i], 4 * buffer_size); /* Size given in */ } #endif res = (*playItf)->SetPlayState(playItf, SL_PLAYSTATE_PLAYING); - ERR_FAIL_COND( res !=SL_RESULT_SUCCESS ); + ERR_FAIL_COND(res != SL_RESULT_SUCCESS); #if 0 res = (*bufferQueueItf)->GetState(bufferQueueItf, &state); @@ -362,7 +345,7 @@ void AudioDriverOpenSL::start(){ (*OutputMix)->Destroy(OutputMix); #endif - active=true; + active = true; } int AudioDriverOpenSL::get_mix_rate() const { @@ -370,34 +353,31 @@ int AudioDriverOpenSL::get_mix_rate() const { return 44100; } -AudioDriver::SpeakerMode AudioDriverOpenSL::get_speaker_mode() const{ +AudioDriver::SpeakerMode AudioDriverOpenSL::get_speaker_mode() const { return SPEAKER_MODE_STEREO; } -void AudioDriverOpenSL::lock(){ +void AudioDriverOpenSL::lock() { if (active && mutex) mutex->lock(); - } void AudioDriverOpenSL::unlock() { if (active && mutex) mutex->unlock(); - } -void AudioDriverOpenSL::finish(){ +void AudioDriverOpenSL::finish() { (*sl)->Destroy(sl); - } void AudioDriverOpenSL::set_pause(bool p_pause) { - pause=p_pause; + pause = p_pause; if (active) { if (pause) { @@ -408,13 +388,8 @@ void AudioDriverOpenSL::set_pause(bool p_pause) { } } - -AudioDriverOpenSL::AudioDriverOpenSL() -{ - s_ad=this; - mutex=Mutex::create();//NULL; - pause=false; +AudioDriverOpenSL::AudioDriverOpenSL() { + s_ad = this; + mutex = Mutex::create(); //NULL; + pause = false; } - - - diff --git a/platform/android/audio_driver_opensl.h b/platform/android/audio_driver_opensl.h index 1baaa95052..306589aa23 100644 --- a/platform/android/audio_driver_opensl.h +++ b/platform/android/audio_driver_opensl.h @@ -29,8 +29,8 @@ #ifndef AUDIO_DRIVER_OPENSL_H #define AUDIO_DRIVER_OPENSL_H -#include "servers/audio_server.h" #include "os/mutex.h" +#include "servers/audio_server.h" #include <SLES/OpenSLES.h> #include <SLES/OpenSLES_Android.h> @@ -42,18 +42,16 @@ class AudioDriverOpenSL : public AudioDriver { enum { - BUFFER_COUNT=2 + BUFFER_COUNT = 2 }; bool pause; - uint32_t buffer_size; int16_t *buffers[BUFFER_COUNT]; int32_t *mixdown_buffer; int last_free; - SLPlayItf playItf; SLObjectItf sl; SLEngineItf EngineItf; @@ -67,31 +65,31 @@ class AudioDriverOpenSL : public AudioDriver { SLDataLocator_OutputMix locator_outputmix; SLBufferQueueState state; - static AudioDriverOpenSL* s_ad; + static AudioDriverOpenSL *s_ad; void _buffer_callback( - SLAndroidSimpleBufferQueueItf queueItf - /* SLuint32 eventFlags, + SLAndroidSimpleBufferQueueItf queueItf + /* SLuint32 eventFlags, const void * pBuffer, SLuint32 bufferSize, SLuint32 dataUsed*/); static void _buffer_callbacks( - SLAndroidSimpleBufferQueueItf queueItf, - /*SLuint32 eventFlags, + SLAndroidSimpleBufferQueueItf queueItf, + /*SLuint32 eventFlags, const void * pBuffer, SLuint32 bufferSize, SLuint32 dataUsed,*/ - void *pContext); -public: + void *pContext); +public: void set_singleton(); - virtual const char* get_name() const; + virtual const char *get_name() const; virtual Error init(); virtual void start(); - virtual int get_mix_rate() const ; + virtual int get_mix_rate() const; virtual SpeakerMode get_speaker_mode() const; virtual void lock(); virtual void unlock(); @@ -103,4 +101,3 @@ public: }; #endif // AUDIO_DRIVER_ANDROID_H - diff --git a/platform/android/dir_access_android.cpp b/platform/android/dir_access_android.cpp index 82b2761bb0..989bd02bd9 100644 --- a/platform/android/dir_access_android.cpp +++ b/platform/android/dir_access_android.cpp @@ -30,8 +30,6 @@ #include "dir_access_android.h" #include "file_access_android.h" - - DirAccess *DirAccessAndroid::create_fs() { return memnew(DirAccessAndroid); @@ -41,36 +39,33 @@ Error DirAccessAndroid::list_dir_begin() { list_dir_end(); - AAssetDir* aad = AAssetManager_openDir(FileAccessAndroid::asset_manager,current_dir.utf8().get_data()); + AAssetDir *aad = AAssetManager_openDir(FileAccessAndroid::asset_manager, current_dir.utf8().get_data()); if (!aad) return ERR_CANT_OPEN; //nothing - return OK; } -String DirAccessAndroid::get_next(){ +String DirAccessAndroid::get_next() { - const char* fn= AAssetDir_getNextFileName(aad); + const char *fn = AAssetDir_getNextFileName(aad); if (!fn) return ""; String s; s.parse_utf8(fn); - current=s; + current = s; return s; - - } -bool DirAccessAndroid::current_is_dir() const{ +bool DirAccessAndroid::current_is_dir() const { String sd; - if (current_dir=="") - sd=current; + if (current_dir == "") + sd = current; else - sd=current_dir+"/"+current; + sd = current_dir + "/" + current; - AAssetDir* aad2 = AAssetManager_openDir(FileAccessAndroid::asset_manager,sd.utf8().get_data()); + AAssetDir *aad2 = AAssetManager_openDir(FileAccessAndroid::asset_manager, sd.utf8().get_data()); if (aad2) { AAssetDir_close(aad2); @@ -78,56 +73,54 @@ bool DirAccessAndroid::current_is_dir() const{ } return false; - } -bool DirAccessAndroid::current_is_hidden() const{ - return current!="." && current!=".." && current.begins_with("."); +bool DirAccessAndroid::current_is_hidden() const { + return current != "." && current != ".." && current.begins_with("."); } -void DirAccessAndroid::list_dir_end(){ +void DirAccessAndroid::list_dir_end() { - if (aad==NULL) + if (aad == NULL) return; AAssetDir_close(aad); - aad=NULL; - + aad = NULL; } -int DirAccessAndroid::get_drive_count(){ +int DirAccessAndroid::get_drive_count() { return 0; } -String DirAccessAndroid::get_drive(int p_drive){ +String DirAccessAndroid::get_drive(int p_drive) { return ""; } -Error DirAccessAndroid::change_dir(String p_dir){ +Error DirAccessAndroid::change_dir(String p_dir) { - p_dir=p_dir.simplify_path(); + p_dir = p_dir.simplify_path(); - if (p_dir=="" || p_dir=="." || (p_dir==".." && current_dir=="")) + if (p_dir == "" || p_dir == "." || (p_dir == ".." && current_dir == "")) return OK; String new_dir; if (p_dir.begins_with("/")) - new_dir=p_dir.substr(1,p_dir.length()); + new_dir = p_dir.substr(1, p_dir.length()); else if (p_dir.begins_with("res://")) - new_dir=p_dir.substr(6,p_dir.length()); - else //relative - new_dir=new_dir+"/"+p_dir; + new_dir = p_dir.substr(6, p_dir.length()); + else //relative + new_dir = new_dir + "/" + p_dir; -//test if newdir exists - new_dir=new_dir.simplify_path(); + //test if newdir exists + new_dir = new_dir.simplify_path(); - AAssetDir* aad = AAssetManager_openDir(FileAccessAndroid::asset_manager,new_dir.utf8().get_data()); + AAssetDir *aad = AAssetManager_openDir(FileAccessAndroid::asset_manager, new_dir.utf8().get_data()); if (aad) { - current_dir=new_dir; + current_dir = new_dir; AAssetDir_close(aad); return OK; } @@ -135,21 +128,20 @@ Error DirAccessAndroid::change_dir(String p_dir){ return ERR_INVALID_PARAMETER; } -String DirAccessAndroid::get_current_dir(){ +String DirAccessAndroid::get_current_dir() { - return "/"+current_dir; + return "/" + current_dir; } - -bool DirAccessAndroid::file_exists(String p_file){ +bool DirAccessAndroid::file_exists(String p_file) { String sd; - if (current_dir=="") - sd=p_file; + if (current_dir == "") + sd = p_file; else - sd=current_dir+"/"+p_file; + sd = current_dir + "/" + p_file; - AAsset *a=AAssetManager_open(FileAccessAndroid::asset_manager,sd.utf8().get_data(),AASSET_MODE_STREAMING); + AAsset *a = AAssetManager_open(FileAccessAndroid::asset_manager, sd.utf8().get_data(), AASSET_MODE_STREAMING); if (a) { AAsset_close(a); return true; @@ -158,18 +150,17 @@ bool DirAccessAndroid::file_exists(String p_file){ return false; } - -Error DirAccessAndroid::make_dir(String p_dir){ +Error DirAccessAndroid::make_dir(String p_dir) { ERR_FAIL_V(ERR_UNAVAILABLE); } -Error DirAccessAndroid::rename(String p_from, String p_to){ +Error DirAccessAndroid::rename(String p_from, String p_to) { ERR_FAIL_V(ERR_UNAVAILABLE); } -Error DirAccessAndroid::remove(String p_name){ +Error DirAccessAndroid::remove(String p_name) { ERR_FAIL_V(ERR_UNAVAILABLE); } @@ -182,12 +173,12 @@ size_t DirAccessAndroid::get_space_left() { void DirAccessAndroid::make_default() { - instance_func=create_fs; + instance_func = create_fs; } DirAccessAndroid::DirAccessAndroid() { - aad=NULL; + aad = NULL; } DirAccessAndroid::~DirAccessAndroid() { diff --git a/platform/android/dir_access_android.h b/platform/android/dir_access_android.h index 72611ceb59..640800584a 100644 --- a/platform/android/dir_access_android.h +++ b/platform/android/dir_access_android.h @@ -32,23 +32,20 @@ #ifdef ANDROID_NATIVE_ACTIVITY #include "os/dir_access.h" -#include <stdio.h> #include <android/asset_manager.h> #include <android/log.h> #include <android_native_app_glue.h> +#include <stdio.h> +class DirAccessAndroid : public DirAccess { - -class DirAccessAndroid : public DirAccess { - - AAssetDir* aad; + AAssetDir *aad; String current_dir; String current; static DirAccess *create_fs(); public: - virtual Error list_dir_begin(); ///< This starts dir listing virtual String get_next(); virtual bool current_is_dir() const; @@ -61,10 +58,8 @@ public: virtual Error change_dir(String p_dir); ///< can be relative or absolute, return false on success virtual String get_current_dir(); ///< return current dir location - virtual bool file_exists(String p_file); - virtual Error make_dir(String p_dir); virtual Error rename(String p_from, String p_to); diff --git a/platform/android/dir_access_jandroid.cpp b/platform/android/dir_access_jandroid.cpp index 2528b18248..68446302ff 100644 --- a/platform/android/dir_access_jandroid.cpp +++ b/platform/android/dir_access_jandroid.cpp @@ -30,17 +30,15 @@ #include "dir_access_jandroid.h" #include "file_access_jandroid.h" -#include "thread_jandroid.h" #include "print_string.h" +#include "thread_jandroid.h" - -jobject DirAccessJAndroid::io=NULL; -jclass DirAccessJAndroid::cls=NULL; -jmethodID DirAccessJAndroid::_dir_open=NULL; -jmethodID DirAccessJAndroid::_dir_next=NULL; -jmethodID DirAccessJAndroid::_dir_close=NULL; -jmethodID DirAccessJAndroid::_dir_is_dir=NULL; - +jobject DirAccessJAndroid::io = NULL; +jclass DirAccessJAndroid::cls = NULL; +jmethodID DirAccessJAndroid::_dir_open = NULL; +jmethodID DirAccessJAndroid::_dir_next = NULL; +jmethodID DirAccessJAndroid::_dir_close = NULL; +jmethodID DirAccessJAndroid::_dir_is_dir = NULL; DirAccess *DirAccessJAndroid::create_fs() { @@ -53,118 +51,113 @@ Error DirAccessJAndroid::list_dir_begin() { JNIEnv *env = ThreadAndroid::get_env(); jstring js = env->NewStringUTF(current_dir.utf8().get_data()); - int res = env->CallIntMethod(io,_dir_open,js); - if (res<=0) + int res = env->CallIntMethod(io, _dir_open, js); + if (res <= 0) return ERR_CANT_OPEN; - id=res; + id = res; return OK; } -String DirAccessJAndroid::get_next(){ +String DirAccessJAndroid::get_next() { - ERR_FAIL_COND_V(id==0,""); + ERR_FAIL_COND_V(id == 0, ""); JNIEnv *env = ThreadAndroid::get_env(); - jstring str= (jstring)env->CallObjectMethod(io,_dir_next,id); + jstring str = (jstring)env->CallObjectMethod(io, _dir_next, id); if (!str) return ""; - String ret = String::utf8(env->GetStringUTFChars( (jstring)str, NULL )); + String ret = String::utf8(env->GetStringUTFChars((jstring)str, NULL)); env->DeleteLocalRef((jobject)str); return ret; - } -bool DirAccessJAndroid::current_is_dir() const{ - +bool DirAccessJAndroid::current_is_dir() const { JNIEnv *env = ThreadAndroid::get_env(); - return env->CallBooleanMethod(io,_dir_is_dir,id); - + return env->CallBooleanMethod(io, _dir_is_dir, id); } bool DirAccessJAndroid::current_is_hidden() const { - return current!="." && current!=".." && current.begins_with("."); + return current != "." && current != ".." && current.begins_with("."); } -void DirAccessJAndroid::list_dir_end(){ +void DirAccessJAndroid::list_dir_end() { - if (id==0) + if (id == 0) return; JNIEnv *env = ThreadAndroid::get_env(); - env->CallVoidMethod(io,_dir_close,id); - id=0; - - + env->CallVoidMethod(io, _dir_close, id); + id = 0; } -int DirAccessJAndroid::get_drive_count(){ +int DirAccessJAndroid::get_drive_count() { return 0; } -String DirAccessJAndroid::get_drive(int p_drive){ +String DirAccessJAndroid::get_drive(int p_drive) { return ""; } -Error DirAccessJAndroid::change_dir(String p_dir){ +Error DirAccessJAndroid::change_dir(String p_dir) { JNIEnv *env = ThreadAndroid::get_env(); - p_dir=p_dir.simplify_path(); + p_dir = p_dir.simplify_path(); - if (p_dir=="" || p_dir=="." || (p_dir==".." && current_dir=="")) + if (p_dir == "" || p_dir == "." || (p_dir == ".." && current_dir == "")) return OK; String new_dir; - if (p_dir!="res://" && p_dir.length()>1 && p_dir.ends_with("/")) - p_dir=p_dir.substr(0,p_dir.length()-1); + if (p_dir != "res://" && p_dir.length() > 1 && p_dir.ends_with("/")) + p_dir = p_dir.substr(0, p_dir.length() - 1); if (p_dir.begins_with("/")) - new_dir=p_dir.substr(1,p_dir.length()); + new_dir = p_dir.substr(1, p_dir.length()); else if (p_dir.begins_with("res://")) - new_dir=p_dir.substr(6,p_dir.length()); - else if (current_dir=="") - new_dir=p_dir; + new_dir = p_dir.substr(6, p_dir.length()); + else if (current_dir == "") + new_dir = p_dir; else - new_dir=current_dir.plus_file(p_dir); + new_dir = current_dir.plus_file(p_dir); //print_line("new dir is: "+new_dir); -//test if newdir exists - new_dir=new_dir.simplify_path(); + //test if newdir exists + new_dir = new_dir.simplify_path(); jstring js = env->NewStringUTF(new_dir.utf8().get_data()); - int res = env->CallIntMethod(io,_dir_open,js); + int res = env->CallIntMethod(io, _dir_open, js); env->DeleteLocalRef(js); - if (res<=0) + if (res <= 0) return ERR_INVALID_PARAMETER; - env->CallVoidMethod(io,_dir_close,res); + env->CallVoidMethod(io, _dir_close, res); - current_dir=new_dir; + current_dir = new_dir; return OK; } -String DirAccessJAndroid::get_current_dir(){ +String DirAccessJAndroid::get_current_dir() { - return "res://"+current_dir; + return "res://" + current_dir; } -bool DirAccessJAndroid::file_exists(String p_file){ +bool DirAccessJAndroid::file_exists(String p_file) { JNIEnv *env = ThreadAndroid::get_env(); String sd; - if (current_dir=="") - sd=p_file; + if (current_dir == "") + sd = p_file; else - sd=current_dir.plus_file(p_file); + sd = current_dir.plus_file(p_file); FileAccessJAndroid *f = memnew(FileAccessJAndroid); bool exists = f->file_exists(sd); @@ -179,45 +172,44 @@ bool DirAccessJAndroid::dir_exists(String p_dir) { String sd; - - if (current_dir=="") - sd=p_dir; + if (current_dir == "") + sd = p_dir; else { if (p_dir.is_rel_path()) - sd=current_dir.plus_file(p_dir); + sd = current_dir.plus_file(p_dir); else - sd=fix_path(p_dir); + sd = fix_path(p_dir); } - String path=sd.simplify_path(); + String path = sd.simplify_path(); if (path.begins_with("/")) - path=path.substr(1,path.length()); + path = path.substr(1, path.length()); else if (path.begins_with("res://")) - path=path.substr(6,path.length()); + path = path.substr(6, path.length()); jstring js = env->NewStringUTF(path.utf8().get_data()); - int res = env->CallIntMethod(io,_dir_open,js); + int res = env->CallIntMethod(io, _dir_open, js); env->DeleteLocalRef(js); - if (res<=0) + if (res <= 0) return false; - env->CallVoidMethod(io,_dir_close,res); + env->CallVoidMethod(io, _dir_close, res); return true; } -Error DirAccessJAndroid::make_dir(String p_dir){ +Error DirAccessJAndroid::make_dir(String p_dir) { ERR_FAIL_V(ERR_UNAVAILABLE); } -Error DirAccessJAndroid::rename(String p_from, String p_to){ +Error DirAccessJAndroid::rename(String p_from, String p_to) { ERR_FAIL_V(ERR_UNAVAILABLE); } -Error DirAccessJAndroid::remove(String p_name){ +Error DirAccessJAndroid::remove(String p_name) { ERR_FAIL_V(ERR_UNAVAILABLE); } @@ -228,42 +220,39 @@ size_t DirAccessJAndroid::get_space_left() { return 0; } - -void DirAccessJAndroid::setup( jobject p_io) { - +void DirAccessJAndroid::setup(jobject p_io) { JNIEnv *env = ThreadAndroid::get_env(); - io=p_io; - __android_log_print(ANDROID_LOG_INFO,"godot","STEP7"); + io = p_io; + __android_log_print(ANDROID_LOG_INFO, "godot", "STEP7"); jclass c = env->GetObjectClass(io); cls = (jclass)env->NewGlobalRef(c); - __android_log_print(ANDROID_LOG_INFO,"godot","STEP8"); + __android_log_print(ANDROID_LOG_INFO, "godot", "STEP8"); _dir_open = env->GetMethodID(cls, "dir_open", "(Ljava/lang/String;)I"); - if(_dir_open != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _dir_open ok!!"); + if (_dir_open != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _dir_open ok!!"); } _dir_next = env->GetMethodID(cls, "dir_next", "(I)Ljava/lang/String;"); - if(_dir_next != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _dir_next ok!!"); + if (_dir_next != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _dir_next ok!!"); } _dir_close = env->GetMethodID(cls, "dir_close", "(I)V"); - if(_dir_close != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _dir_close ok!!"); + if (_dir_close != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _dir_close ok!!"); } _dir_is_dir = env->GetMethodID(cls, "dir_is_dir", "(I)Z"); - if(_dir_is_dir != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _dir_is_dir ok!!"); + if (_dir_is_dir != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _dir_is_dir ok!!"); } //(*env)->CallVoidMethod(env,obj,aMethodID, myvar); } - DirAccessJAndroid::DirAccessJAndroid() { - id=0; + id = 0; } DirAccessJAndroid::~DirAccessJAndroid() { diff --git a/platform/android/dir_access_jandroid.h b/platform/android/dir_access_jandroid.h index 5db32b945c..096858ddf7 100644 --- a/platform/android/dir_access_jandroid.h +++ b/platform/android/dir_access_jandroid.h @@ -31,13 +31,11 @@ #ifndef ANDROID_NATIVE_ACTIVITY - #include "java_glue.h" #include "os/dir_access.h" #include <stdio.h> - -class DirAccessJAndroid : public DirAccess { +class DirAccessJAndroid : public DirAccess { //AAssetDir* aad; @@ -57,7 +55,6 @@ class DirAccessJAndroid : public DirAccess { static DirAccess *create_fs(); public: - virtual Error list_dir_begin(); ///< This starts dir listing virtual String get_next(); virtual bool current_is_dir() const; @@ -70,7 +67,6 @@ public: virtual Error change_dir(String p_dir); ///< can be relative or absolute, return false on success virtual String get_current_dir(); ///< return current dir location - virtual bool file_exists(String p_file); virtual bool dir_exists(String p_dir); @@ -82,8 +78,7 @@ public: //virtual FileType get_file_type() const; size_t get_space_left(); - - static void setup( jobject io); + static void setup(jobject io); DirAccessJAndroid(); ~DirAccessJAndroid(); diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index 3fc822860d..31fa4c18bd 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -26,17 +26,17 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "version.h" #include "export.h" -#include "editor/editor_settings.h" #include "editor/editor_export.h" #include "editor/editor_node.h" -#include "io/zip_io.h" -#include "io/marshalls.h" +#include "editor/editor_settings.h" #include "global_config.h" +#include "io/marshalls.h" +#include "io/zip_io.h" #include "os/file_access.h" #include "os/os.h" #include "platform/android/logo.h" +#include "version.h" #include <string.h> #if 0 @@ -938,11 +938,6 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool p_manifest=ret; - - - - - #if 0 uint32_t header[9]; for(int i=0;i<9;i++) { @@ -972,7 +967,6 @@ void EditorExportPlatformAndroid::_fix_manifest(Vector<uint8_t>& p_manifest,bool string_table[i]=ucstring.ptr(); } - #endif } @@ -1917,4 +1911,3 @@ void register_android_exporter() { EditorImportExport::get_singleton()->add_export_platform(exporter); #endif } - diff --git a/platform/android/file_access_android.cpp b/platform/android/file_access_android.cpp index 2828d3c074..4426af4dad 100644 --- a/platform/android/file_access_android.cpp +++ b/platform/android/file_access_android.cpp @@ -29,40 +29,34 @@ #include "file_access_android.h" #include "print_string.h" - - - -AAssetManager *FileAccessAndroid::asset_manager=NULL; - +AAssetManager *FileAccessAndroid::asset_manager = NULL; /*void FileAccessAndroid::make_default() { create_func=create_android; }*/ -FileAccess* FileAccessAndroid::create_android() { +FileAccess *FileAccessAndroid::create_android() { return memnew(FileAccessAndroid); } +Error FileAccessAndroid::_open(const String &p_path, int p_mode_flags) { -Error FileAccessAndroid::_open(const String& p_path, int p_mode_flags) { - - String path=fix_path(p_path).simplify_path(); + String path = fix_path(p_path).simplify_path(); if (path.begins_with("/")) - path=path.substr(1,path.length()); + path = path.substr(1, path.length()); else if (path.begins_with("res://")) - path=path.substr(6,path.length()); + path = path.substr(6, path.length()); - - ERR_FAIL_COND_V(p_mode_flags&FileAccess::WRITE,ERR_UNAVAILABLE); //can't write on android.. - a=AAssetManager_open(asset_manager,path.utf8().get_data(),AASSET_MODE_STREAMING); + ERR_FAIL_COND_V(p_mode_flags & FileAccess::WRITE, ERR_UNAVAILABLE); //can't write on android.. + a = AAssetManager_open(asset_manager, path.utf8().get_data(), AASSET_MODE_STREAMING); if (!a) return ERR_CANT_OPEN; //ERR_FAIL_COND_V(!a,ERR_FILE_NOT_FOUND); - len=AAsset_getLength(a); - pos=0; - eof=false; + len = AAsset_getLength(a); + pos = 0; + eof = false; return OK; } @@ -72,34 +66,32 @@ void FileAccessAndroid::close() { if (!a) return; AAsset_close(a); - a=NULL; + a = NULL; } bool FileAccessAndroid::is_open() const { - return a!=NULL; + return a != NULL; } void FileAccessAndroid::seek(size_t p_position) { ERR_FAIL_COND(!a); - AAsset_seek(a,p_position,SEEK_SET); - pos=p_position; - if (pos>len) { - pos=len; - eof=true; + AAsset_seek(a, p_position, SEEK_SET); + pos = p_position; + if (pos > len) { + pos = len; + eof = true; } else { - eof=false; + eof = false; } - } void FileAccessAndroid::seek_end(int64_t p_position) { ERR_FAIL_COND(!a); - AAsset_seek(a,p_position,SEEK_END); - pos=len+p_position; - + AAsset_seek(a, p_position, SEEK_END); + pos = len + p_position; } size_t FileAccessAndroid::get_pos() const { @@ -119,79 +111,67 @@ bool FileAccessAndroid::eof_reached() const { uint8_t FileAccessAndroid::get_8() const { - - if (pos>=len) { - eof=true; + if (pos >= len) { + eof = true; return 0; } - uint8_t byte; - AAsset_read(a,&byte,1); + AAsset_read(a, &byte, 1); pos++; return byte; - } int FileAccessAndroid::get_buffer(uint8_t *p_dst, int p_length) const { + off_t r = AAsset_read(a, p_dst, p_length); - off_t r = AAsset_read(a,p_dst,p_length); - - if (pos+p_length >len ) { - eof=true; + if (pos + p_length > len) { + eof = true; } - if (r>=0) { + if (r >= 0) { - pos+=r; - if (pos>len) { - pos=len; + pos += r; + if (pos > len) { + pos = len; } - } return r; - } Error FileAccessAndroid::get_error() const { - return eof?ERR_FILE_EOF:OK; //not sure what else it may happen + return eof ? ERR_FILE_EOF : OK; //not sure what else it may happen } void FileAccessAndroid::store_8(uint8_t p_dest) { ERR_FAIL(); - } -bool FileAccessAndroid::file_exists(const String& p_path) { +bool FileAccessAndroid::file_exists(const String &p_path) { - String path=fix_path(p_path).simplify_path(); + String path = fix_path(p_path).simplify_path(); if (path.begins_with("/")) - path=path.substr(1,path.length()); + path = path.substr(1, path.length()); else if (path.begins_with("res://")) - path=path.substr(6,path.length()); + path = path.substr(6, path.length()); - AAsset *at=AAssetManager_open(asset_manager,path.utf8().get_data(),AASSET_MODE_STREAMING); + AAsset *at = AAssetManager_open(asset_manager, path.utf8().get_data(), AASSET_MODE_STREAMING); if (!at) return false; AAsset_close(at); return true; - } - FileAccessAndroid::FileAccessAndroid() { - a=NULL; - eof=false; + a = NULL; + eof = false; } - -FileAccessAndroid::~FileAccessAndroid() -{ +FileAccessAndroid::~FileAccessAndroid() { close(); } - diff --git a/platform/android/file_access_android.h b/platform/android/file_access_android.h index 3d54eb2027..de131f19bc 100644 --- a/platform/android/file_access_android.h +++ b/platform/android/file_access_android.h @@ -29,33 +29,29 @@ #ifndef FILE_ACCESS_ANDROID_H #define FILE_ACCESS_ANDROID_H - - #include "os/file_access.h" -#include <stdio.h> #include <android/asset_manager.h> #include <android/log.h> +#include <stdio.h> //#include <android_native_app_glue.h> - class FileAccessAndroid : public FileAccess { - static FileAccess* create_android(); + static FileAccess *create_android(); mutable AAsset *a; mutable size_t len; mutable size_t pos; mutable bool eof; public: - static AAssetManager *asset_manager; - virtual Error _open(const String& p_path, int p_mode_flags); ///< open a file + virtual Error _open(const String &p_path, int p_mode_flags); ///< open a file virtual void close(); ///< close a file virtual bool is_open() const; ///< true when file is open virtual void seek(size_t p_position); ///< seek to a given position - virtual void seek_end(int64_t p_position=0); ///< seek from the end of file + virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file virtual size_t get_pos() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file @@ -68,9 +64,9 @@ public: virtual void store_8(uint8_t p_dest); ///< store a byte - virtual bool file_exists(const String& p_path); ///< return true if a file exists + virtual bool file_exists(const String &p_path); ///< return true if a file exists - virtual uint64_t _get_modified_time(const String& p_file) { return 0; } + virtual uint64_t _get_modified_time(const String &p_file) { return 0; } //static void make_default(); @@ -79,4 +75,3 @@ public: }; #endif // FILE_ACCESS_ANDROID_H - diff --git a/platform/android/file_access_jandroid.cpp b/platform/android/file_access_jandroid.cpp index a4e9c191e9..b3624e9f26 100644 --- a/platform/android/file_access_jandroid.cpp +++ b/platform/android/file_access_jandroid.cpp @@ -30,51 +30,46 @@ #include "file_access_jandroid.h" #include "os/os.h" -#include <unistd.h> #include "thread_jandroid.h" +#include <unistd.h> -jobject FileAccessJAndroid::io=NULL; +jobject FileAccessJAndroid::io = NULL; jclass FileAccessJAndroid::cls; -jmethodID FileAccessJAndroid::_file_open=0; -jmethodID FileAccessJAndroid::_file_get_size=0; -jmethodID FileAccessJAndroid::_file_seek=0; -jmethodID FileAccessJAndroid::_file_read=0; -jmethodID FileAccessJAndroid::_file_tell=0; -jmethodID FileAccessJAndroid::_file_eof=0; -jmethodID FileAccessJAndroid::_file_close=0; - +jmethodID FileAccessJAndroid::_file_open = 0; +jmethodID FileAccessJAndroid::_file_get_size = 0; +jmethodID FileAccessJAndroid::_file_seek = 0; +jmethodID FileAccessJAndroid::_file_read = 0; +jmethodID FileAccessJAndroid::_file_tell = 0; +jmethodID FileAccessJAndroid::_file_eof = 0; +jmethodID FileAccessJAndroid::_file_close = 0; -FileAccess* FileAccessJAndroid::create_jandroid() { +FileAccess *FileAccessJAndroid::create_jandroid() { return memnew(FileAccessJAndroid); } -Error FileAccessJAndroid::_open(const String& p_path, int p_mode_flags) { +Error FileAccessJAndroid::_open(const String &p_path, int p_mode_flags) { if (is_open()) close(); - String path=fix_path(p_path).simplify_path(); + String path = fix_path(p_path).simplify_path(); if (path.begins_with("/")) - path=path.substr(1,path.length()); + path = path.substr(1, path.length()); else if (path.begins_with("res://")) - path=path.substr(6,path.length()); + path = path.substr(6, path.length()); JNIEnv *env = ThreadAndroid::get_env(); - - jstring js = env->NewStringUTF(path.utf8().get_data()); - int res = env->CallIntMethod(io,_file_open,js,p_mode_flags&WRITE?true:false); + int res = env->CallIntMethod(io, _file_open, js, p_mode_flags & WRITE ? true : false); env->DeleteLocalRef(js); - OS::get_singleton()->print("fopen: '%s' ret %i\n",path.utf8().get_data(),res); + OS::get_singleton()->print("fopen: '%s' ret %i\n", path.utf8().get_data(), res); - - if (res<=0) + if (res <= 0) return ERR_FILE_CANT_OPEN; - id=res; - + id = res; return OK; } @@ -86,14 +81,13 @@ void FileAccessJAndroid::close() { JNIEnv *env = ThreadAndroid::get_env(); - env->CallVoidMethod(io,_file_close,id); - id=0; - + env->CallVoidMethod(io, _file_close, id); + id = 0; } bool FileAccessJAndroid::is_open() const { - return id!=0; + return id != 0; } void FileAccessJAndroid::seek(size_t p_position) { @@ -101,7 +95,7 @@ void FileAccessJAndroid::seek(size_t p_position) { JNIEnv *env = ThreadAndroid::get_env(); ERR_FAIL_COND(!is_open()); - env->CallVoidMethod(io,_file_seek,id,p_position); + env->CallVoidMethod(io, _file_seek, id, p_position); } void FileAccessJAndroid::seek_end(int64_t p_position) { @@ -109,56 +103,50 @@ void FileAccessJAndroid::seek_end(int64_t p_position) { ERR_FAIL_COND(!is_open()); seek(get_len()); - } size_t FileAccessJAndroid::get_pos() const { JNIEnv *env = ThreadAndroid::get_env(); - ERR_FAIL_COND_V(!is_open(),0); - return env->CallIntMethod(io,_file_tell,id); - + ERR_FAIL_COND_V(!is_open(), 0); + return env->CallIntMethod(io, _file_tell, id); } size_t FileAccessJAndroid::get_len() const { JNIEnv *env = ThreadAndroid::get_env(); - ERR_FAIL_COND_V(!is_open(),0); - return env->CallIntMethod(io,_file_get_size,id); - + ERR_FAIL_COND_V(!is_open(), 0); + return env->CallIntMethod(io, _file_get_size, id); } bool FileAccessJAndroid::eof_reached() const { JNIEnv *env = ThreadAndroid::get_env(); - ERR_FAIL_COND_V(!is_open(),0); - return env->CallIntMethod(io,_file_eof,id); - + ERR_FAIL_COND_V(!is_open(), 0); + return env->CallIntMethod(io, _file_eof, id); } uint8_t FileAccessJAndroid::get_8() const { - ERR_FAIL_COND_V(!is_open(),0); + ERR_FAIL_COND_V(!is_open(), 0); uint8_t byte; - get_buffer(&byte,1); + get_buffer(&byte, 1); return byte; } int FileAccessJAndroid::get_buffer(uint8_t *p_dst, int p_length) const { - ERR_FAIL_COND_V(!is_open(),0); - if (p_length==0) + ERR_FAIL_COND_V(!is_open(), 0); + if (p_length == 0) return 0; JNIEnv *env = ThreadAndroid::get_env(); - jbyteArray jca = (jbyteArray)env->CallObjectMethod(io,_file_read,id,p_length); - + jbyteArray jca = (jbyteArray)env->CallObjectMethod(io, _file_read, id, p_length); int len = env->GetArrayLength(jca); - env->GetByteArrayRegion(jca,0,len,(jbyte*)p_dst); + env->GetByteArrayRegion(jca, 0, len, (jbyte *)p_dst); env->DeleteLocalRef((jobject)jca); return len; - } Error FileAccessJAndroid::get_error() const { @@ -169,80 +157,76 @@ Error FileAccessJAndroid::get_error() const { } void FileAccessJAndroid::store_8(uint8_t p_dest) { - } -bool FileAccessJAndroid::file_exists(const String& p_path) { +bool FileAccessJAndroid::file_exists(const String &p_path) { JNIEnv *env = ThreadAndroid::get_env(); - String path=fix_path(p_path).simplify_path(); + String path = fix_path(p_path).simplify_path(); if (path.begins_with("/")) - path=path.substr(1,path.length()); + path = path.substr(1, path.length()); else if (path.begins_with("res://")) - path=path.substr(6,path.length()); + path = path.substr(6, path.length()); jstring js = env->NewStringUTF(path.utf8().get_data()); - int res = env->CallIntMethod(io,_file_open,js,false); - if (res<=0) { + int res = env->CallIntMethod(io, _file_open, js, false); + if (res <= 0) { env->DeleteLocalRef(js); return false; } - env->CallVoidMethod(io,_file_close,res); + env->CallVoidMethod(io, _file_close, res); env->DeleteLocalRef(js); return true; - } +void FileAccessJAndroid::setup(jobject p_io) { -void FileAccessJAndroid::setup( jobject p_io) { - - io=p_io; + io = p_io; JNIEnv *env = ThreadAndroid::get_env(); - __android_log_print(ANDROID_LOG_INFO,"godot","STEP5"); + __android_log_print(ANDROID_LOG_INFO, "godot", "STEP5"); jclass c = env->GetObjectClass(io); - __android_log_print(ANDROID_LOG_INFO,"godot","STEP6"); - cls=(jclass)env->NewGlobalRef(c); + __android_log_print(ANDROID_LOG_INFO, "godot", "STEP6"); + cls = (jclass)env->NewGlobalRef(c); _file_open = env->GetMethodID(cls, "file_open", "(Ljava/lang/String;Z)I"); - if(_file_open != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_open ok!!"); + if (_file_open != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _file_open ok!!"); } _file_get_size = env->GetMethodID(cls, "file_get_size", "(I)I"); - if(_file_get_size != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_get_size ok!!"); + if (_file_get_size != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _file_get_size ok!!"); } _file_tell = env->GetMethodID(cls, "file_tell", "(I)I"); - if(_file_tell != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_tell ok!!"); + if (_file_tell != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _file_tell ok!!"); } _file_eof = env->GetMethodID(cls, "file_eof", "(I)Z"); - if(_file_eof != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_eof ok!!"); + if (_file_eof != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _file_eof ok!!"); } _file_seek = env->GetMethodID(cls, "file_seek", "(II)V"); - if(_file_seek != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_seek ok!!"); + if (_file_seek != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _file_seek ok!!"); } _file_read = env->GetMethodID(cls, "file_read", "(II)[B"); - if(_file_read != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_read ok!!"); + if (_file_read != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _file_read ok!!"); } _file_close = env->GetMethodID(cls, "file_close", "(I)V"); - if(_file_close != 0) { - __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_close ok!!"); + if (_file_close != 0) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*******GOT METHOD _file_close ok!!"); } //(*env)->CallVoidMethod(env,obj,aMethodID, myvar); } - FileAccessJAndroid::FileAccessJAndroid() { - id=0; + id = 0; } FileAccessJAndroid::~FileAccessJAndroid() { @@ -251,5 +235,4 @@ FileAccessJAndroid::~FileAccessJAndroid() { close(); } - #endif diff --git a/platform/android/file_access_jandroid.h b/platform/android/file_access_jandroid.h index 38f441ea71..b78d5e603c 100644 --- a/platform/android/file_access_jandroid.h +++ b/platform/android/file_access_jandroid.h @@ -47,17 +47,15 @@ class FileAccessJAndroid : public FileAccess { static jmethodID _file_close; int id; - static FileAccess* create_jandroid(); - + static FileAccess *create_jandroid(); public: - - virtual Error _open(const String& p_path, int p_mode_flags); ///< open a file + virtual Error _open(const String &p_path, int p_mode_flags); ///< open a file virtual void close(); ///< close a file virtual bool is_open() const; ///< true when file is open virtual void seek(size_t p_position); ///< seek to a given position - virtual void seek_end(int64_t p_position=0); ///< seek from the end of file + virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file virtual size_t get_pos() const; ///< get position in the file virtual size_t get_len() const; ///< get size of the file @@ -70,13 +68,11 @@ public: virtual void store_8(uint8_t p_dest); ///< store a byte - virtual bool file_exists(const String& p_path); ///< return true if a file exists - - + virtual bool file_exists(const String &p_path); ///< return true if a file exists - static void setup( jobject io); + static void setup(jobject io); - virtual uint64_t _get_modified_time(const String& p_file) { return 0; } + virtual uint64_t _get_modified_time(const String &p_file) { return 0; } FileAccessJAndroid(); ~FileAccessJAndroid(); diff --git a/platform/android/globals/global_defaults.cpp b/platform/android/globals/global_defaults.cpp index 01daac9260..60d7d8cb6b 100644 --- a/platform/android/globals/global_defaults.cpp +++ b/platform/android/globals/global_defaults.cpp @@ -29,10 +29,9 @@ #include "global_defaults.h" #include "global_config.h" - void register_android_global_defaults() { -/* GLOBAL_DEF("rasterizer.Android/use_fragment_lighting",false); + /* GLOBAL_DEF("rasterizer.Android/use_fragment_lighting",false); GLOBAL_DEF("rasterizer.Android/fp16_framebuffer",false); GLOBAL_DEF("display.Android/driver","GLES2"); //GLOBAL_DEF("rasterizer.Android/trilinear_mipmap_filter",false); diff --git a/platform/android/godot_android.cpp b/platform/android/godot_android.cpp index 83d5a413c0..9d300940b0 100644 --- a/platform/android/godot_android.cpp +++ b/platform/android/godot_android.cpp @@ -28,139 +28,130 @@ /*************************************************************************/ #ifdef ANDROID_NATIVE_ACTIVITY -#include <jni.h> #include <errno.h> +#include <jni.h> #include <EGL/egl.h> #include <GLES2/gl2.h> +#include "file_access_android.h" +#include "global_config.h" +#include "main/main.h" +#include "os_android.h" +#include <android/log.h> #include <android/sensor.h> #include <android/window.h> -#include <android/log.h> #include <android_native_app_glue.h> -#include "file_access_android.h" +#include <stdlib.h> #include <string.h> #include <unistd.h> -#include <stdlib.h> -#include "os_android.h" -#include "global_config.h" -#include "main/main.h" #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "godot", __VA_ARGS__)) #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "godot", __VA_ARGS__)) - extern "C" { - JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerSingleton(JNIEnv * env, jobject obj, jstring name,jobject p_object); - JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerMethod(JNIEnv * env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args); - JNIEXPORT jstring JNICALL Java_org_godotengine_godot_Godot_getGlobal(JNIEnv * env, jobject obj, jstring path); +JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerSingleton(JNIEnv *env, jobject obj, jstring name, jobject p_object); +JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerMethod(JNIEnv *env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args); +JNIEXPORT jstring JNICALL Java_org_godotengine_godot_Godot_getGlobal(JNIEnv *env, jobject obj, jstring path); }; class JNISingleton : public Object { - GDCLASS( JNISingleton, Object ); - + GDCLASS(JNISingleton, Object); struct MethodData { - jmethodID method; Variant::Type ret_type; Vector<Variant::Type> argtypes; }; jobject instance; - Map<StringName,MethodData> method_map; + Map<StringName, MethodData> method_map; JNIEnv *env; public: + void update_env(JNIEnv *p_env) { env = p_env; } - void update_env(JNIEnv *p_env) { env=p_env; } + virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { - virtual Variant call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error) { + print_line("attempt to call " + String(p_method)); - print_line("attempt to call "+String(p_method)); + r_error.error = Variant::CallError::CALL_OK; - r_error.error=Variant::CallError::CALL_OK; - - Map<StringName,MethodData >::Element *E=method_map.find(p_method); + Map<StringName, MethodData>::Element *E = method_map.find(p_method); if (!E) { print_line("no exists"); - r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; return Variant(); } - int ac = E->get().argtypes.size(); - if (ac<p_argcount) { + if (ac < p_argcount) { print_line("fewargs"); - r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument=ac; + r_error.error = Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument = ac; return Variant(); } - if (ac>p_argcount) { + if (ac > p_argcount) { print_line("manyargs"); - r_error.error=Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS; - r_error.argument=ac; + r_error.error = Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS; + r_error.argument = ac; return Variant(); } + for (int i = 0; i < p_argcount; i++) { + if (!Variant::can_convert(p_args[i]->get_type(), E->get().argtypes[i])) { - for(int i=0;i<p_argcount;i++) { - - if (!Variant::can_convert(p_args[i]->get_type(),E->get().argtypes[i])) { - - r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; - r_error.argument=i; - r_error.expected=E->get().argtypes[i]; + r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument = i; + r_error.expected = E->get().argtypes[i]; } } - - jvalue *v=NULL; + jvalue *v = NULL; if (p_argcount) { - v=(jvalue*)alloca( sizeof(jvalue)*p_argcount ); + v = (jvalue *)alloca(sizeof(jvalue) * p_argcount); } - for(int i=0;i<p_argcount;i++) { - + for (int i = 0; i < p_argcount; i++) { - switch(E->get().argtypes[i]) { + switch (E->get().argtypes[i]) { case Variant::BOOL: { - v[i].z=*p_args[i]; + v[i].z = *p_args[i]; } break; case Variant::INT: { - v[i].i=*p_args[i]; + v[i].i = *p_args[i]; } break; case Variant::REAL: { - v[i].f=*p_args[i]; + v[i].f = *p_args[i]; } break; case Variant::STRING: { String s = *p_args[i]; jstring jStr = env->NewStringUTF(s.utf8().get_data()); - v[i].l=jStr; + v[i].l = jStr; } break; case Variant::STRING_ARRAY: { PoolVector<String> sarray = *p_args[i]; - jobjectArray arr = env->NewObjectArray(sarray.size(),env->FindClass("java/lang/String"),env->NewStringUTF("")); + jobjectArray arr = env->NewObjectArray(sarray.size(), env->FindClass("java/lang/String"), env->NewStringUTF("")); - for(int j=0;j<sarray.size();j++) { + for (int j = 0; j < sarray.size(); j++) { - env->SetObjectArrayElement(arr,j,env->NewStringUTF( sarray[i].utf8().get_data() )); + env->SetObjectArrayElement(arr, j, env->NewStringUTF(sarray[i].utf8().get_data())); } - v[i].l=arr; + v[i].l = arr; } break; case Variant::INT_ARRAY: { @@ -168,8 +159,8 @@ public: PoolVector<int> array = *p_args[i]; jintArray arr = env->NewIntArray(array.size()); PoolVector<int>::Read r = array.read(); - env->SetIntArrayRegion(arr,0,array.size(),r.ptr()); - v[i].l=arr; + env->SetIntArrayRegion(arr, 0, array.size(), r.ptr()); + v[i].l = arr; } break; case Variant::REAL_ARRAY: { @@ -177,15 +168,14 @@ public: PoolVector<float> array = *p_args[i]; jfloatArray arr = env->NewFloatArray(array.size()); PoolVector<float>::Read r = array.read(); - env->SetFloatArrayRegion(arr,0,array.size(),r.ptr()); - v[i].l=arr; + env->SetFloatArrayRegion(arr, 0, array.size(), r.ptr()); + v[i].l = arr; } break; default: { ERR_FAIL_V(Variant()); } break; - } } @@ -193,78 +183,76 @@ public: Variant ret; - switch(E->get().ret_type) { + switch (E->get().ret_type) { case Variant::NIL: { - print_line("call void"); - env->CallVoidMethodA(instance,E->get().method,v); + env->CallVoidMethodA(instance, E->get().method, v); } break; case Variant::BOOL: { - ret = env->CallBooleanMethodA(instance,E->get().method,v); + ret = env->CallBooleanMethodA(instance, E->get().method, v); print_line("call bool"); } break; case Variant::INT: { - ret = env->CallIntMethodA(instance,E->get().method,v); + ret = env->CallIntMethodA(instance, E->get().method, v); print_line("call int"); } break; case Variant::REAL: { - ret = env->CallFloatMethodA(instance,E->get().method,v); + ret = env->CallFloatMethodA(instance, E->get().method, v); } break; case Variant::STRING: { - jobject o = env->CallObjectMethodA(instance,E->get().method,v); - String singname = env->GetStringUTFChars((jstring)o, NULL ); + jobject o = env->CallObjectMethodA(instance, E->get().method, v); + String singname = env->GetStringUTFChars((jstring)o, NULL); } break; case Variant::STRING_ARRAY: { - jobjectArray arr = (jobjectArray)env->CallObjectMethodA(instance,E->get().method,v); + jobjectArray arr = (jobjectArray)env->CallObjectMethodA(instance, E->get().method, v); int stringCount = env->GetArrayLength(arr); PoolVector<String> sarr; - for (int i=0; i<stringCount; i++) { - jstring string = (jstring) env->GetObjectArrayElement(arr, i); + 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)); } - ret=sarr; + ret = sarr; } break; case Variant::INT_ARRAY: { - jintArray arr = (jintArray)env->CallObjectMethodA(instance,E->get().method,v); + jintArray arr = (jintArray)env->CallObjectMethodA(instance, E->get().method, v); int fCount = env->GetArrayLength(arr); PoolVector<int> sarr; sarr.resize(fCount); PoolVector<int>::Write w = sarr.write(); - env->GetIntArrayRegion(arr,0,fCount,w.ptr()); + env->GetIntArrayRegion(arr, 0, fCount, w.ptr()); w = PoolVector<int>::Write(); - ret=sarr; + ret = sarr; } break; case Variant::REAL_ARRAY: { - jfloatArray arr = (jfloatArray)env->CallObjectMethodA(instance,E->get().method,v); + jfloatArray arr = (jfloatArray)env->CallObjectMethodA(instance, E->get().method, v); int fCount = env->GetArrayLength(arr); PoolVector<float> sarr; sarr.resize(fCount); PoolVector<float>::Write w = sarr.write(); - env->GetFloatArrayRegion(arr,0,fCount,w.ptr()); + env->GetFloatArrayRegion(arr, 0, fCount, w.ptr()); w = PoolVector<float>::Write(); - ret=sarr; + ret = sarr; } break; default: { - print_line("failure.."); ERR_FAIL_V(Variant()); } break; @@ -275,270 +263,251 @@ public: return ret; } - jobject get_instance() const { return instance; } void set_instance(jobject p_instance) { - instance=p_instance; + instance = p_instance; } - - void add_method(const StringName& p_name, jmethodID p_method,const Vector<Variant::Type>& p_args, Variant::Type p_ret_type) { + void add_method(const StringName &p_name, jmethodID p_method, const Vector<Variant::Type> &p_args, Variant::Type p_ret_type) { MethodData md; - md.method=p_method; - md.argtypes=p_args; - md.ret_type=p_ret_type; - method_map[p_name]=md; - + md.method = p_method; + md.argtypes = p_args; + md.ret_type = p_ret_type; + method_map[p_name] = md; } - JNISingleton() {} - }; //JNIEnv *JNISingleton::env=NULL; -static HashMap<String,JNISingleton*> jni_singletons; - +static HashMap<String, JNISingleton *> jni_singletons; struct engine { - struct android_app* app; - OS_Android *os; - JNIEnv *jni; - - ASensorManager* sensorManager; - const ASensor* accelerometerSensor; - const ASensor* magnetometerSensor; - const ASensor* gyroscopeSensor; - ASensorEventQueue* sensorEventQueue; - - bool display_active; - bool requested_quit; - int animating; - EGLDisplay display; - EGLSurface surface; - EGLContext context; - int32_t width; - int32_t height; - + struct android_app *app; + OS_Android *os; + JNIEnv *jni; + + ASensorManager *sensorManager; + const ASensor *accelerometerSensor; + const ASensor *magnetometerSensor; + const ASensor *gyroscopeSensor; + ASensorEventQueue *sensorEventQueue; + + bool display_active; + bool requested_quit; + int animating; + EGLDisplay display; + EGLSurface surface; + EGLContext context; + int32_t width; + int32_t height; }; /** * Initialize an EGL context for the current display. */ -static int engine_init_display(struct engine* engine,bool p_gl2) { - // initialize OpenGL ES and EGL +static int engine_init_display(struct engine *engine, bool p_gl2) { + // initialize OpenGL ES and EGL - /* + /* * Here specify the attributes of the desired configuration. * Below, we select an EGLConfig with at least 8 bits per color * component compatible with on-screen windows */ - const EGLint gl2_attribs[] = { - // EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - EGL_BLUE_SIZE, 4, - EGL_GREEN_SIZE, 4, - EGL_RED_SIZE, 4, - EGL_ALPHA_SIZE, 0, - EGL_DEPTH_SIZE, 16, - EGL_STENCIL_SIZE, EGL_DONT_CARE, - EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL_NONE - }; - - const EGLint gl1_attribs[] = { - // EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - EGL_BLUE_SIZE, 4, - EGL_GREEN_SIZE, 4, - EGL_RED_SIZE, 4, - EGL_ALPHA_SIZE, 0, - EGL_DEPTH_SIZE, 16, - EGL_STENCIL_SIZE, EGL_DONT_CARE, - EGL_NONE - }; - - const EGLint *attribs=p_gl2?gl2_attribs:gl1_attribs; - - - EGLint w, h, dummy, format; - EGLint numConfigs; - EGLConfig config; - EGLSurface surface; - EGLContext context; - - EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); - - eglInitialize(display, 0, 0); - - - /* Here, the application chooses the configuration it desires. In this + const EGLint gl2_attribs[] = { + // EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_BLUE_SIZE, 4, + EGL_GREEN_SIZE, 4, + EGL_RED_SIZE, 4, + EGL_ALPHA_SIZE, 0, + EGL_DEPTH_SIZE, 16, + EGL_STENCIL_SIZE, EGL_DONT_CARE, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL_NONE + }; + + const EGLint gl1_attribs[] = { + // EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_BLUE_SIZE, 4, + EGL_GREEN_SIZE, 4, + EGL_RED_SIZE, 4, + EGL_ALPHA_SIZE, 0, + EGL_DEPTH_SIZE, 16, + EGL_STENCIL_SIZE, EGL_DONT_CARE, + EGL_NONE + }; + + const EGLint *attribs = p_gl2 ? gl2_attribs : gl1_attribs; + + EGLint w, h, dummy, format; + EGLint numConfigs; + EGLConfig config; + EGLSurface surface; + EGLContext context; + + EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); + + eglInitialize(display, 0, 0); + + /* Here, the application chooses the configuration it desires. In this * sample, we have a very simplified selection process, where we pick * the first EGLConfig that matches our criteria */ - eglChooseConfig(display, attribs, &config, 1, &numConfigs); + eglChooseConfig(display, attribs, &config, 1, &numConfigs); - LOGI("Num configs: %i\n",numConfigs); + LOGI("Num configs: %i\n", numConfigs); - /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is + /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is * guaranteed to be accepted by ANativeWindow_setBuffersGeometry(). * As soon as we picked a EGLConfig, we can safely reconfigure the * ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */ - eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format); + eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format); - ANativeWindow_setBuffersGeometry(engine->app->window, 0, 0, format); - //ANativeWindow_setFlags(engine->app->window, 0, 0, format|); + ANativeWindow_setBuffersGeometry(engine->app->window, 0, 0, format); + //ANativeWindow_setFlags(engine->app->window, 0, 0, format|); - surface = eglCreateWindowSurface(display, config, engine->app->window, NULL); + surface = eglCreateWindowSurface(display, config, engine->app->window, NULL); - const EGLint context_attribs[] = { - EGL_CONTEXT_CLIENT_VERSION,2, - EGL_NONE - }; - context = eglCreateContext(display, config, EGL_NO_CONTEXT, p_gl2?context_attribs:NULL); - - if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) { - LOGW("Unable to eglMakeCurrent"); - return -1; - } + const EGLint context_attribs[] = { + EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_NONE + }; + context = eglCreateContext(display, config, EGL_NO_CONTEXT, p_gl2 ? context_attribs : NULL); - eglQuerySurface(display, surface, EGL_WIDTH, &w); - eglQuerySurface(display, surface, EGL_HEIGHT, &h); - print_line("INIT VIDEO MODE: "+itos(w)+","+itos(h)); + if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) { + LOGW("Unable to eglMakeCurrent"); + return -1; + } - //engine->os->set_egl_extensions(eglQueryString(display,EGL_EXTENSIONS)); - engine->os->init_video_mode(w,h); + eglQuerySurface(display, surface, EGL_WIDTH, &w); + eglQuerySurface(display, surface, EGL_HEIGHT, &h); + print_line("INIT VIDEO MODE: " + itos(w) + "," + itos(h)); + //engine->os->set_egl_extensions(eglQueryString(display,EGL_EXTENSIONS)); + engine->os->init_video_mode(w, h); - engine->display = display; - engine->context = context; - engine->surface = surface; - engine->width = w; - engine->height = h; - engine->display_active=true; + engine->display = display; + engine->context = context; + engine->surface = surface; + engine->width = w; + engine->height = h; + engine->display_active = true; - //engine->state.angle = 0; + //engine->state.angle = 0; - // Initialize GL state. - //glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); - glEnable(GL_CULL_FACE); - // glShadeModel(GL_SMOOTH); - glDisable(GL_DEPTH_TEST); - LOGI("GL Version: %s - %s %s\n", glGetString(GL_VERSION),glGetString(GL_VENDOR), glGetString(GL_RENDERER)); + // Initialize GL state. + //glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); + glEnable(GL_CULL_FACE); + // glShadeModel(GL_SMOOTH); + glDisable(GL_DEPTH_TEST); + LOGI("GL Version: %s - %s %s\n", glGetString(GL_VERSION), glGetString(GL_VENDOR), glGetString(GL_RENDERER)); - return 0; + return 0; } +static void engine_draw_frame(struct engine *engine) { + if (engine->display == NULL) { + // No display. + return; + } -static void engine_draw_frame(struct engine* engine) { - if (engine->display == NULL) { - // No display. - return; - } - - // Just fill the screen with a color. - //glClearColor(0,1,0,1); - //glClear(GL_COLOR_BUFFER_BIT); - if (engine->os && engine->os->main_loop_iterate()==true) { + // Just fill the screen with a color. + //glClearColor(0,1,0,1); + //glClear(GL_COLOR_BUFFER_BIT); + if (engine->os && engine->os->main_loop_iterate() == true) { - engine->requested_quit=true; - return; //should exit instead - } + engine->requested_quit = true; + return; //should exit instead + } - eglSwapBuffers(engine->display, engine->surface); + eglSwapBuffers(engine->display, engine->surface); } - -static void engine_term_display(struct engine* engine) { - if (engine->display != EGL_NO_DISPLAY) { - eglMakeCurrent(engine->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - if (engine->context != EGL_NO_CONTEXT) { - eglDestroyContext(engine->display, engine->context); - } - if (engine->surface != EGL_NO_SURFACE) { - eglDestroySurface(engine->display, engine->surface); +static void engine_term_display(struct engine *engine) { + if (engine->display != EGL_NO_DISPLAY) { + eglMakeCurrent(engine->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + if (engine->context != EGL_NO_CONTEXT) { + eglDestroyContext(engine->display, engine->context); + } + if (engine->surface != EGL_NO_SURFACE) { + eglDestroySurface(engine->display, engine->surface); + } + eglTerminate(engine->display); } - eglTerminate(engine->display); - } - - engine->animating = 0; - engine->display = EGL_NO_DISPLAY; - engine->context = EGL_NO_CONTEXT; - engine->surface = EGL_NO_SURFACE; - engine->display_active=false; + engine->animating = 0; + engine->display = EGL_NO_DISPLAY; + engine->context = EGL_NO_CONTEXT; + engine->surface = EGL_NO_SURFACE; + engine->display_active = false; } /** * Process the next input event. */ -static int32_t engine_handle_input(struct android_app* app, AInputEvent* event) { - struct engine* engine = (struct engine*)app->userData; +static int32_t engine_handle_input(struct android_app *app, AInputEvent *event) { + struct engine *engine = (struct engine *)app->userData; if (!engine->os) return 0; - switch(AInputEvent_getType(event)) { + switch (AInputEvent_getType(event)) { case AINPUT_EVENT_TYPE_KEY: { int ac = AKeyEvent_getAction(event); - switch(ac) { + switch (ac) { case AKEY_EVENT_ACTION_DOWN: { int32_t code = AKeyEvent_getKeyCode(event); - if (code==AKEYCODE_BACK) { + if (code == AKEYCODE_BACK) { //AInputQueue_finishEvent(AInputQueue* queue, AInputEvent* event, int handled); if (engine->os) engine->os->main_loop_request_quit(); return 1; - } - } break; case AKEY_EVENT_ACTION_UP: { - } break; } - } break; case AINPUT_EVENT_TYPE_MOTION: { - Vector<OS_Android::TouchPos> touchvec; int pc = AMotionEvent_getPointerCount(event); touchvec.resize(pc); - for(int i=0;i<pc;i++) { + for (int i = 0; i < pc; i++) { - touchvec[i].pos.x=AMotionEvent_getX(event,i); - touchvec[i].pos.y=AMotionEvent_getY(event,i); - touchvec[i].id=AMotionEvent_getPointerId(event,i); + touchvec[i].pos.x = AMotionEvent_getX(event, i); + touchvec[i].pos.y = AMotionEvent_getY(event, i); + touchvec[i].id = AMotionEvent_getPointerId(event, i); } - //System.out.printf("gaction: %d\n",event.getAction()); - int pidx=(AMotionEvent_getAction(event)&AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)>>8; - switch(AMotionEvent_getAction(event)&AMOTION_EVENT_ACTION_MASK) { + int pidx = (AMotionEvent_getAction(event) & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK) >> 8; + switch (AMotionEvent_getAction(event) & AMOTION_EVENT_ACTION_MASK) { case AMOTION_EVENT_ACTION_DOWN: { - engine->os->process_touch(0,0,touchvec); + engine->os->process_touch(0, 0, touchvec); //System.out.printf("action down at: %f,%f\n", event.getX(),event.getY()); } break; case AMOTION_EVENT_ACTION_MOVE: { - engine->os->process_touch(1,0,touchvec); + engine->os->process_touch(1, 0, touchvec); /* for(int i=0;i<event.getPointerCount();i++) { System.out.printf("%d - moved to: %f,%f\n",i, event.getX(i),event.getY(i)); @@ -547,16 +516,16 @@ static int32_t engine_handle_input(struct android_app* app, AInputEvent* event) } break; case AMOTION_EVENT_ACTION_POINTER_UP: { - engine->os->process_touch(4,pidx,touchvec); + engine->os->process_touch(4, pidx, touchvec); //System.out.printf("%d - s.up at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx)); } break; case AMOTION_EVENT_ACTION_POINTER_DOWN: { - engine->os->process_touch(3,pidx,touchvec); + engine->os->process_touch(3, pidx, touchvec); //System.out.printf("%d - s.down at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx)); } break; case AMOTION_EVENT_ACTION_CANCEL: case AMOTION_EVENT_ACTION_UP: { - engine->os->process_touch(2,0,touchvec); + engine->os->process_touch(2, 0, touchvec); /* for(int i=0;i<event.getPointerCount();i++) { System.out.printf("%d - up! %f,%f\n",i, event.getX(i),event.getY(i)); @@ -567,34 +536,33 @@ static int32_t engine_handle_input(struct android_app* app, AInputEvent* event) return 1; } break; - } - return 0; + return 0; } /** * Process the next main command. */ -static void _gfx_init(void *ud,bool p_gl2) { +static void _gfx_init(void *ud, bool p_gl2) { - struct engine* engine = (struct engine*)ud; - engine_init_display(engine,p_gl2); + struct engine *engine = (struct engine *)ud; + engine_init_display(engine, p_gl2); } -static void engine_handle_cmd(struct android_app* app, int32_t cmd) { - struct engine* engine = (struct engine*)app->userData; - // LOGI("**** CMD %i\n",cmd); - switch (cmd) { - case APP_CMD_SAVE_STATE: - // The system has asked us to save our current state. Do so. - //engine->app->savedState = malloc(sizeof(struct saved_state)); - //*((struct saved_state*)engine->app->savedState) = engine->state; - //engine->app->savedStateSize = sizeof(struct saved_state); - break; - case APP_CMD_CONFIG_CHANGED: - case APP_CMD_WINDOW_RESIZED: { +static void engine_handle_cmd(struct android_app *app, int32_t cmd) { + struct engine *engine = (struct engine *)app->userData; + // LOGI("**** CMD %i\n",cmd); + switch (cmd) { + case APP_CMD_SAVE_STATE: + // The system has asked us to save our current state. Do so. + //engine->app->savedState = malloc(sizeof(struct saved_state)); + //*((struct saved_state*)engine->app->savedState) = engine->state; + //engine->app->savedStateSize = sizeof(struct saved_state); + break; + case APP_CMD_CONFIG_CHANGED: + case APP_CMD_WINDOW_RESIZED: { #if 0 // android blows @@ -610,26 +578,22 @@ static void engine_handle_cmd(struct android_app* app, int32_t cmd) { } #else - if (engine->display_active) { + if (engine->display_active) { - - EGLint w,h; - eglQuerySurface(engine->display, engine->surface, EGL_WIDTH, &w); - eglQuerySurface(engine->display, engine->surface, EGL_HEIGHT, &h); - // if (w==engine->os->get_video_mode().width && h==engine->os->get_video_mode().height) + EGLint w, h; + eglQuerySurface(engine->display, engine->surface, EGL_WIDTH, &w); + eglQuerySurface(engine->display, engine->surface, EGL_HEIGHT, &h); + // if (w==engine->os->get_video_mode().width && h==engine->os->get_video_mode().height) // break; - engine_term_display(engine); - - - } - + engine_term_display(engine); + } - engine->os->reload_gfx(); - engine_draw_frame(engine); - engine->animating=1; + engine->os->reload_gfx(); + engine_draw_frame(engine); + engine->animating = 1; - /* +/* EGLint w,h; eglQuerySurface(engine->display, engine->surface, EGL_WIDTH, &w); eglQuerySurface(engine->display, engine->surface, EGL_HEIGHT, &h); @@ -640,309 +604,285 @@ static void engine_handle_cmd(struct android_app* app, int32_t cmd) { #endif - } break; - case APP_CMD_INIT_WINDOW: - //The window is being shown, get it ready. - //LOGI("INIT WINDOW"); - if (engine->app->window != NULL) { + } break; + case APP_CMD_INIT_WINDOW: + //The window is being shown, get it ready. + //LOGI("INIT WINDOW"); + if (engine->app->window != NULL) { - if (engine->os==NULL) { + if (engine->os == NULL) { - //do initialization here, when there's OpenGL! hackish but the only way - engine->os = new OS_Android(_gfx_init,engine); + //do initialization here, when there's OpenGL! hackish but the only way + engine->os = new OS_Android(_gfx_init, engine); - //char *args[]={"-test","gui",NULL}; - __android_log_print(ANDROID_LOG_INFO,"godot","pre asdasd setup..."); + //char *args[]={"-test","gui",NULL}; + __android_log_print(ANDROID_LOG_INFO, "godot", "pre asdasd setup..."); #if 0 Error err = Main::setup("apk",2,args); #else - Error err = Main::setup("apk",0,NULL); - - String modules = GlobalConfig::get_singleton()->get("android/modules"); - Vector<String> mods = modules.split(",",false); - mods.push_back("GodotOS"); - __android_log_print(ANDROID_LOG_INFO,"godot","mod count: %i",mods.size()); - - if (mods.size()) { + Error err = Main::setup("apk", 0, NULL); - jclass activityClass = engine->jni->FindClass("android/app/NativeActivity"); + String modules = GlobalConfig::get_singleton()->get("android/modules"); + Vector<String> mods = modules.split(",", false); + mods.push_back("GodotOS"); + __android_log_print(ANDROID_LOG_INFO, "godot", "mod count: %i", mods.size()); - jmethodID getClassLoader = engine->jni->GetMethodID(activityClass,"getClassLoader", "()Ljava/lang/ClassLoader;"); + if (mods.size()) { - jobject cls = engine->jni->CallObjectMethod(app->activity->clazz, getClassLoader); + jclass activityClass = engine->jni->FindClass("android/app/NativeActivity"); - jclass classLoader = engine->jni->FindClass("java/lang/ClassLoader"); + jmethodID getClassLoader = engine->jni->GetMethodID(activityClass, "getClassLoader", "()Ljava/lang/ClassLoader;"); - jmethodID findClass = engine->jni->GetMethodID(classLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); + jobject cls = engine->jni->CallObjectMethod(app->activity->clazz, getClassLoader); + jclass classLoader = engine->jni->FindClass("java/lang/ClassLoader"); - static JNINativeMethod methods[] = { - {"registerSingleton", "(Ljava/lang/String;Ljava/lang/Object;)V",(void *)&Java_org_godotengine_godot_Godot_registerSingleton}, - {"registerMethod", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V",(void *)&Java_org_godotengine_godot_Godot_registerMethod}, - {"getGlobal", "(Ljava/lang/String;)Ljava/lang/String;", (void *)&Java_org_godotengine_godot_Godot_getGlobal}, - }; + jmethodID findClass = engine->jni->GetMethodID(classLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); - jstring gstrClassName = engine->jni->NewStringUTF("org/godotengine/godot/Godot"); - jclass GodotClass = (jclass)engine->jni->CallObjectMethod(cls, findClass, gstrClassName); + static JNINativeMethod methods[] = { + { "registerSingleton", "(Ljava/lang/String;Ljava/lang/Object;)V", (void *)&Java_org_godotengine_godot_Godot_registerSingleton }, + { "registerMethod", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V", (void *)&Java_org_godotengine_godot_Godot_registerMethod }, + { "getGlobal", "(Ljava/lang/String;)Ljava/lang/String;", (void *)&Java_org_godotengine_godot_Godot_getGlobal }, + }; - __android_log_print(ANDROID_LOG_INFO,"godot","godot ****^*^*?^*^*class data %x",GodotClass); + jstring gstrClassName = engine->jni->NewStringUTF("org/godotengine/godot/Godot"); + jclass GodotClass = (jclass)engine->jni->CallObjectMethod(cls, findClass, gstrClassName); - engine->jni->RegisterNatives(GodotClass,methods,sizeof(methods)/sizeof(methods[0])); + __android_log_print(ANDROID_LOG_INFO, "godot", "godot ****^*^*?^*^*class data %x", GodotClass); - for (int i=0;i<mods.size();i++) { + engine->jni->RegisterNatives(GodotClass, methods, sizeof(methods) / sizeof(methods[0])); - String m = mods[i]; - //jclass singletonClass = engine->jni->FindClass(m.utf8().get_data()); + for (int i = 0; i < mods.size(); i++) { - jstring strClassName = engine->jni->NewStringUTF(m.utf8().get_data()); - jclass singletonClass = (jclass)engine->jni->CallObjectMethod(cls, findClass, strClassName); + String m = mods[i]; + //jclass singletonClass = engine->jni->FindClass(m.utf8().get_data()); - __android_log_print(ANDROID_LOG_INFO,"godot","****^*^*?^*^*class data %x",singletonClass); - jmethodID initialize = engine->jni->GetStaticMethodID(singletonClass, "initialize", "(Landroid/app/Activity;)Lorg/godotengine/godot/Godot$SingletonBase;"); - - - jobject obj = engine->jni->CallStaticObjectMethod(singletonClass,initialize,app->activity->clazz); - __android_log_print(ANDROID_LOG_INFO,"godot","****^*^*?^*^*class instance %x",obj); - jobject gob = engine->jni->NewGlobalRef(obj); + jstring strClassName = engine->jni->NewStringUTF(m.utf8().get_data()); + jclass singletonClass = (jclass)engine->jni->CallObjectMethod(cls, findClass, strClassName); + __android_log_print(ANDROID_LOG_INFO, "godot", "****^*^*?^*^*class data %x", singletonClass); + jmethodID initialize = engine->jni->GetStaticMethodID(singletonClass, "initialize", "(Landroid/app/Activity;)Lorg/godotengine/godot/Godot$SingletonBase;"); + jobject obj = engine->jni->CallStaticObjectMethod(singletonClass, initialize, app->activity->clazz); + __android_log_print(ANDROID_LOG_INFO, "godot", "****^*^*?^*^*class instance %x", obj); + jobject gob = engine->jni->NewGlobalRef(obj); + } } - } - #endif + if (!Main::start()) + return; //should exit instead and print the error - if (!Main::start()) - return; //should exit instead and print the error + engine->os->main_loop_begin(); + } else { + //i guess recreate resources? + engine->os->reload_gfx(); + } - engine->os->main_loop_begin(); - } else { - //i guess recreate resources? - engine->os->reload_gfx(); + engine->animating = 1; + engine_draw_frame(engine); } - - - engine->animating=1; + break; + case APP_CMD_TERM_WINDOW: + // The window is being hidden or closed, clean it up. + //LOGI("TERM WINDOW"); + engine_term_display(engine); + break; + case APP_CMD_GAINED_FOCUS: + // When our app gains focus, we start monitoring the accelerometer. + if (engine->accelerometerSensor != NULL) { + ASensorEventQueue_enableSensor(engine->sensorEventQueue, + engine->accelerometerSensor); + // We'd like to get 60 events per second (in us). + ASensorEventQueue_setEventRate(engine->sensorEventQueue, + engine->accelerometerSensor, (1000L / 60) * 1000); + } + // Also start monitoring the magnetometer. + if (engine->magnetometerSensor != NULL) { + ASensorEventQueue_enableSensor(engine->sensorEventQueue, + engine->magnetometerSensor); + // We'd like to get 60 events per second (in us). + ASensorEventQueue_setEventRate(engine->sensorEventQueue, + engine->magnetometerSensor, (1000L / 60) * 1000); + } + // And the gyroscope. + if (engine->gyroscopeSensor != NULL) { + ASensorEventQueue_enableSensor(engine->sensorEventQueue, + engine->gyroscopeSensor); + // We'd like to get 60 events per second (in us). + ASensorEventQueue_setEventRate(engine->sensorEventQueue, + engine->gyroscopeSensor, (1000L / 60) * 1000); + } + engine->animating = 1; + break; + case APP_CMD_LOST_FOCUS: + // When our app loses focus, we stop monitoring the sensors. + // This is to avoid consuming battery while not being used. + if (engine->accelerometerSensor != NULL) { + ASensorEventQueue_disableSensor(engine->sensorEventQueue, + engine->accelerometerSensor); + } + if (engine->magnetometerSensor != NULL) { + ASensorEventQueue_disableSensor(engine->sensorEventQueue, + engine->magnetometerSensor); + } + if (engine->gyroscopeSensor != NULL) { + ASensorEventQueue_disableSensor(engine->sensorEventQueue, + engine->gyroscopeSensor); + } + // Also stop animating. + engine->animating = 0; engine_draw_frame(engine); - } - break; - case APP_CMD_TERM_WINDOW: - // The window is being hidden or closed, clean it up. - //LOGI("TERM WINDOW"); - engine_term_display(engine); - break; - case APP_CMD_GAINED_FOCUS: - // When our app gains focus, we start monitoring the accelerometer. - if (engine->accelerometerSensor != NULL) { - ASensorEventQueue_enableSensor(engine->sensorEventQueue, - engine->accelerometerSensor); - // We'd like to get 60 events per second (in us). - ASensorEventQueue_setEventRate(engine->sensorEventQueue, - engine->accelerometerSensor, (1000L/60)*1000); - - } - // Also start monitoring the magnetometer. - if (engine->magnetometerSensor != NULL) { - ASensorEventQueue_enableSensor(engine->sensorEventQueue, - engine->magnetometerSensor); - // We'd like to get 60 events per second (in us). - ASensorEventQueue_setEventRate(engine->sensorEventQueue, - engine->magnetometerSensor, (1000L/60)*1000); - - } - // And the gyroscope. - if (engine->gyroscopeSensor != NULL) { - ASensorEventQueue_enableSensor(engine->sensorEventQueue, - engine->gyroscopeSensor); - // We'd like to get 60 events per second (in us). - ASensorEventQueue_setEventRate(engine->sensorEventQueue, - engine->gyroscopeSensor, (1000L/60)*1000); - - } - engine->animating = 1; - break; - case APP_CMD_LOST_FOCUS: - // When our app loses focus, we stop monitoring the sensors. - // This is to avoid consuming battery while not being used. - if (engine->accelerometerSensor != NULL) { - ASensorEventQueue_disableSensor(engine->sensorEventQueue, - engine->accelerometerSensor); - } - if (engine->magnetometerSensor != NULL) { - ASensorEventQueue_disableSensor(engine->sensorEventQueue, - engine->magnetometerSensor); - } - if (engine->gyroscopeSensor != NULL) { - ASensorEventQueue_disableSensor(engine->sensorEventQueue, - engine->gyroscopeSensor); - } - // Also stop animating. - engine->animating = 0; - engine_draw_frame(engine); - break; - } + break; + } } -void android_main(struct android_app* state) { - struct engine engine; - // Make sure glue isn't stripped. - app_dummy(); - - memset(&engine, 0, sizeof(engine)); - state->userData = &engine; - state->onAppCmd = engine_handle_cmd; - state->onInputEvent = engine_handle_input; - engine.app = state; - engine.requested_quit=false; - engine.os=NULL; - engine.display_active=false; - - FileAccessAndroid::asset_manager=state->activity->assetManager; - - // Prepare to monitor sensors - engine.sensorManager = ASensorManager_getInstance(); - engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager, - ASENSOR_TYPE_ACCELEROMETER); - engine.magnetometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager, - ASENSOR_TYPE_MAGNETIC_FIELD); - engine.gyroscopeSensor = ASensorManager_getDefaultSensor(engine.sensorManager, - ASENSOR_TYPE_GYROSCOPE); - engine.sensorEventQueue = ASensorManager_createEventQueue(engine.sensorManager, - state->looper, LOOPER_ID_USER, NULL, NULL); - - - ANativeActivity_setWindowFlags(state->activity,AWINDOW_FLAG_FULLSCREEN|AWINDOW_FLAG_KEEP_SCREEN_ON,0); +void android_main(struct android_app *state) { + struct engine engine; + // Make sure glue isn't stripped. + app_dummy(); + + memset(&engine, 0, sizeof(engine)); + state->userData = &engine; + state->onAppCmd = engine_handle_cmd; + state->onInputEvent = engine_handle_input; + engine.app = state; + engine.requested_quit = false; + engine.os = NULL; + engine.display_active = false; + + FileAccessAndroid::asset_manager = state->activity->assetManager; + + // Prepare to monitor sensors + engine.sensorManager = ASensorManager_getInstance(); + engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager, + ASENSOR_TYPE_ACCELEROMETER); + engine.magnetometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager, + ASENSOR_TYPE_MAGNETIC_FIELD); + engine.gyroscopeSensor = ASensorManager_getDefaultSensor(engine.sensorManager, + ASENSOR_TYPE_GYROSCOPE); + engine.sensorEventQueue = ASensorManager_createEventQueue(engine.sensorManager, + state->looper, LOOPER_ID_USER, NULL, NULL); + + ANativeActivity_setWindowFlags(state->activity, AWINDOW_FLAG_FULLSCREEN | AWINDOW_FLAG_KEEP_SCREEN_ON, 0); state->activity->vm->AttachCurrentThread(&engine.jni, NULL); + // loop waiting for stuff to do. + while (1) { + // Read all pending events. + int ident; + int events; + struct android_poll_source *source; - // loop waiting for stuff to do. - - while (1) { - // Read all pending events. - int ident; - int events; - struct android_poll_source* source; - - // If not animating, we will block forever waiting for events. - // If animating, we loop until all events are read, then continue - // to draw the next frame of animation. - - int nullmax=50; - while ((ident=ALooper_pollAll(engine.animating ? 0 : -1, NULL, &events, - (void**)&source)) >= 0) { + // If not animating, we will block forever waiting for events. + // If animating, we loop until all events are read, then continue + // to draw the next frame of animation. - // Process this event. + int nullmax = 50; + while ((ident = ALooper_pollAll(engine.animating ? 0 : -1, NULL, &events, + (void **)&source)) >= 0) { - if (source != NULL) { - // LOGI("process\n"); - source->process(state, source); - } else { - nullmax--; - if (nullmax<0) - break; - } - - // If a sensor has data, process it now. - // LOGI("events\n"); - if (ident == LOOPER_ID_USER) { - if (engine.accelerometerSensor != NULL || engine.magnetometerSensor != NULL || engine.gyroscopeSensor != NULL) { - ASensorEvent event; - while (ASensorEventQueue_getEvents(engine.sensorEventQueue, - &event, 1) > 0) { - - - if (engine.os) { - if (event.acceleration != NULL) { - engine.os->process_accelerometer(Vector3(event.acceleration.x, event.acceleration.y, - event.acceleration.z)); - } - if (event.magnetic != NULL) { - engine.os->process_magnetometer(Vector3(event.magnetic.x, event.magnetic.y, - event.magnetic.z)); - } - if (event.vector != NULL) { - engine.os->process_gyroscope(Vector3(event.vector.x, event.vector.y, - event.vector.z)); - } - } - - } - } - } - - // Check if we are exiting. - if (state->destroyRequested != 0) { - if (engine.os) { - engine.os->main_loop_request_quit(); - } - state->destroyRequested=0; - } - - if (engine.requested_quit) { - engine_term_display(&engine); - exit(0); - return; - } + // Process this event. - // LOGI("end\n"); + if (source != NULL) { + // LOGI("process\n"); + source->process(state, source); + } else { + nullmax--; + if (nullmax < 0) + break; + } + // If a sensor has data, process it now. + // LOGI("events\n"); + if (ident == LOOPER_ID_USER) { + if (engine.accelerometerSensor != NULL || engine.magnetometerSensor != NULL || engine.gyroscopeSensor != NULL) { + ASensorEvent event; + while (ASensorEventQueue_getEvents(engine.sensorEventQueue, + &event, 1) > 0) { + + if (engine.os) { + if (event.acceleration != NULL) { + engine.os->process_accelerometer(Vector3(event.acceleration.x, event.acceleration.y, + event.acceleration.z)); + } + if (event.magnetic != NULL) { + engine.os->process_magnetometer(Vector3(event.magnetic.x, event.magnetic.y, + event.magnetic.z)); + } + if (event.vector != NULL) { + engine.os->process_gyroscope(Vector3(event.vector.x, event.vector.y, + event.vector.z)); + } + } + } + } + } - } + // Check if we are exiting. + if (state->destroyRequested != 0) { + if (engine.os) { + engine.os->main_loop_request_quit(); + } + state->destroyRequested = 0; + } - // LOGI("engine animating? %i\n",engine.animating); + if (engine.requested_quit) { + engine_term_display(&engine); + exit(0); + return; + } - if (engine.animating) { - //do os render + // LOGI("end\n"); + } - engine_draw_frame(&engine); - //LOGI("TERM WINDOW"); + // LOGI("engine animating? %i\n",engine.animating); - } - } + if (engine.animating) { + //do os render + engine_draw_frame(&engine); + //LOGI("TERM WINDOW"); + } + } } +JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerSingleton(JNIEnv *env, jobject obj, jstring name, jobject p_object) { - - -JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerSingleton(JNIEnv * env, jobject obj, jstring name,jobject p_object){ - - String singname = env->GetStringUTFChars( name, NULL ); - JNISingleton *s = memnew( JNISingleton ); + String singname = env->GetStringUTFChars(name, NULL); + JNISingleton *s = memnew(JNISingleton); s->update_env(env); s->set_instance(env->NewGlobalRef(p_object)); - jni_singletons[singname]=s; - - GlobalConfig::get_singleton()->add_singleton(GlobalConfig::Singleton(singname,s)); + jni_singletons[singname] = s; + GlobalConfig::get_singleton()->add_singleton(GlobalConfig::Singleton(singname, s)); } - -static Variant::Type get_jni_type(const String& p_type) { +static Variant::Type get_jni_type(const String &p_type) { static struct { const char *name; Variant::Type type; - } _type_to_vtype[]={ - {"void",Variant::NIL}, - {"boolean",Variant::BOOL}, - {"int",Variant::INT}, - {"float",Variant::REAL}, - {"java.lang.String",Variant::STRING}, - {"[I",Variant::INT_ARRAY}, - {"[F",Variant::REAL_ARRAY}, - {"[Ljava.lang.String;",Variant::STRING_ARRAY}, - {NULL,Variant::NIL} + } _type_to_vtype[] = { + { "void", Variant::NIL }, + { "boolean", Variant::BOOL }, + { "int", Variant::INT }, + { "float", Variant::REAL }, + { "java.lang.String", Variant::STRING }, + { "[I", Variant::INT_ARRAY }, + { "[F", Variant::REAL_ARRAY }, + { "[Ljava.lang.String;", Variant::STRING_ARRAY }, + { NULL, Variant::NIL } }; - int idx=0; + int idx = 0; while (_type_to_vtype[idx].name) { - if (p_type==_type_to_vtype[idx].name) + if (p_type == _type_to_vtype[idx].name) return _type_to_vtype[idx].type; idx++; @@ -951,88 +891,78 @@ static Variant::Type get_jni_type(const String& p_type) { return Variant::NIL; } - -static const char* get_jni_sig(const String& p_type) { +static const char *get_jni_sig(const String &p_type) { static struct { const char *name; const char *sig; - } _type_to_vtype[]={ - {"void","V"}, - {"boolean","Z"}, - {"int","I"}, - {"float","F"}, - {"java.lang.String","Ljava/lang/String;"}, - {"[I","[I"}, - {"[F","[F"}, - {"[Ljava.lang.String;","[Ljava/lang/String;"}, - {NULL,"V"} + } _type_to_vtype[] = { + { "void", "V" }, + { "boolean", "Z" }, + { "int", "I" }, + { "float", "F" }, + { "java.lang.String", "Ljava/lang/String;" }, + { "[I", "[I" }, + { "[F", "[F" }, + { "[Ljava.lang.String;", "[Ljava/lang/String;" }, + { NULL, "V" } }; - int idx=0; + int idx = 0; while (_type_to_vtype[idx].name) { - if (p_type==_type_to_vtype[idx].name) + if (p_type == _type_to_vtype[idx].name) return _type_to_vtype[idx].sig; idx++; } - return ""; } -JNIEXPORT jstring JNICALL Java_org_godotengine_godot_Godot_getGlobal(JNIEnv * env, jobject obj, jstring path) { +JNIEXPORT jstring JNICALL Java_org_godotengine_godot_Godot_getGlobal(JNIEnv *env, jobject obj, jstring path) { - String js = env->GetStringUTFChars( path, NULL ); + String js = env->GetStringUTFChars(path, NULL); return env->NewStringUTF(GlobalConfig::get_singleton()->get(js).operator String().utf8().get_data()); - - } +JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerMethod(JNIEnv *env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args) { - -JNIEXPORT void JNICALL Java_org_godotengine_godot_Godot_registerMethod(JNIEnv * env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args){ - - String singname = env->GetStringUTFChars( sname, NULL ); + String singname = env->GetStringUTFChars(sname, NULL); ERR_FAIL_COND(!jni_singletons.has(singname)); JNISingleton *s = jni_singletons.get(singname); - - String mname = env->GetStringUTFChars( name, NULL ); - String retval = env->GetStringUTFChars( ret, NULL ); + String mname = env->GetStringUTFChars(name, NULL); + String retval = env->GetStringUTFChars(ret, NULL); Vector<Variant::Type> types; - String cs="("; - + String cs = "("; int stringCount = env->GetArrayLength(args); - print_line("Singl: "+singname+" Method: "+mname+" RetVal: "+retval); - for (int i=0; i<stringCount; i++) { + print_line("Singl: " + singname + " Method: " + mname + " RetVal: " + retval); + for (int i = 0; i < stringCount; i++) { - jstring string = (jstring) env->GetObjectArrayElement(args, i); + jstring string = (jstring)env->GetObjectArrayElement(args, i); const char *rawString = env->GetStringUTFChars(string, 0); types.push_back(get_jni_type(String(rawString))); - cs+=get_jni_sig(String(rawString)); + cs += get_jni_sig(String(rawString)); } - cs+=")"; - cs+=get_jni_sig(retval); + cs += ")"; + cs += get_jni_sig(retval); jclass cls = env->GetObjectClass(s->get_instance()); - print_line("METHOD: "+mname+" sig: "+cs); + print_line("METHOD: " + mname + " sig: " + cs); jmethodID mid = env->GetMethodID(cls, mname.ascii().get_data(), cs.ascii().get_data()); if (!mid) { - print_line("FAILED GETTING METHOID "+mname); + print_line("FAILED GETTING METHOID " + mname); } - s->add_method(mname,mid,types,get_jni_type(retval)); - - + s->add_method(mname, mid, types, get_jni_type(retval)); } #endif diff --git a/platform/android/java_class_wrapper.cpp b/platform/android/java_class_wrapper.cpp index 2923ef6a91..eb208f0ee0 100644 --- a/platform/android/java_class_wrapper.cpp +++ b/platform/android/java_class_wrapper.cpp @@ -29,56 +29,55 @@ #include "java_class_wrapper.h" #include "thread_jandroid.h" +bool JavaClass::_call_method(JavaObject *p_instance, const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error, Variant &ret) { -bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error,Variant& ret) { - - Map<StringName,List<MethodInfo> >::Element *M=methods.find(p_method); + Map<StringName, List<MethodInfo> >::Element *M = methods.find(p_method); if (!M) return false; JNIEnv *env = ThreadAndroid::get_env(); - MethodInfo *method=NULL; - for (List<MethodInfo>::Element *E=M->get().front();E;E=E->next()) { + MethodInfo *method = NULL; + for (List<MethodInfo>::Element *E = M->get().front(); E; E = E->next()) { if (!p_instance && !E->get()._static) { - r_error.error=Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL; + r_error.error = Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL; continue; } int pc = E->get().param_types.size(); - if (pc>p_argcount) { + if (pc > p_argcount) { - r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument=pc; + r_error.error = Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument = pc; continue; } - if (pc<p_argcount) { + if (pc < p_argcount) { - r_error.error=Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS; - r_error.argument=pc; + r_error.error = Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS; + r_error.argument = pc; continue; } - uint32_t *ptypes=E->get().param_types.ptr(); - bool valid=true; + uint32_t *ptypes = E->get().param_types.ptr(); + bool valid = true; - for(int i=0;i<pc;i++) { + for (int i = 0; i < pc; i++) { - Variant::Type arg_expected=Variant::NIL; - switch(ptypes[i]) { + Variant::Type arg_expected = Variant::NIL; + switch (ptypes[i]) { case ARG_TYPE_VOID: { //bug? } break; case ARG_TYPE_BOOLEAN: { - if (p_args[i]->get_type()!=Variant::BOOL) - arg_expected=Variant::BOOL; + if (p_args[i]->get_type() != Variant::BOOL) + arg_expected = Variant::BOOL; } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_BYTE: - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_CHAR: - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_SHORT: - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_INT: - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_LONG: + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_BYTE: + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_CHAR: + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_SHORT: + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_INT: + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_LONG: case ARG_TYPE_BYTE: case ARG_TYPE_CHAR: case ARG_TYPE_SHORT: @@ -86,127 +85,119 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c case ARG_TYPE_LONG: { if (!p_args[i]->is_num()) - arg_expected=Variant::INT; + arg_expected = Variant::INT; } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_FLOAT: - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_DOUBLE: + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_FLOAT: + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_DOUBLE: case ARG_TYPE_FLOAT: case ARG_TYPE_DOUBLE: { if (!p_args[i]->is_num()) - arg_expected=Variant::REAL; + arg_expected = Variant::REAL; } break; case ARG_TYPE_STRING: { - if (p_args[i]->get_type()!=Variant::STRING) - arg_expected=Variant::STRING; + if (p_args[i]->get_type() != Variant::STRING) + arg_expected = Variant::STRING; } break; case ARG_TYPE_CLASS: { - if (p_args[i]->get_type()!=Variant::OBJECT) - arg_expected=Variant::OBJECT; + if (p_args[i]->get_type() != Variant::OBJECT) + arg_expected = Variant::OBJECT; else { Ref<Reference> ref = *p_args[i]; if (!ref.is_null()) { - if (ref->cast_to<JavaObject>() ) { + if (ref->cast_to<JavaObject>()) { - Ref<JavaObject> jo=ref; + Ref<JavaObject> jo = ref; //could be faster jclass c = env->FindClass(E->get().param_sigs[i].operator String().utf8().get_data()); - if (!c || !env->IsInstanceOf(jo->instance,c)) { + if (!c || !env->IsInstanceOf(jo->instance, c)) { - arg_expected=Variant::OBJECT; + arg_expected = Variant::OBJECT; } else { //ok } } else { - arg_expected=Variant::OBJECT; + arg_expected = Variant::OBJECT; } - } } } break; default: { - if (p_args[i]->get_type()!=Variant::ARRAY) - arg_expected=Variant::ARRAY; + if (p_args[i]->get_type() != Variant::ARRAY) + arg_expected = Variant::ARRAY; } break; - } - if (arg_expected!=Variant::NIL) { - r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; - r_error.argument=i; - r_error.expected=arg_expected; - valid=false; + if (arg_expected != Variant::NIL) { + r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument = i; + r_error.expected = arg_expected; + valid = false; break; - } - } if (!valid) continue; - - method=&E->get(); + method = &E->get(); break; - } if (!method) return true; //no version convinces + r_error.error = Variant::CallError::CALL_OK; - - r_error.error=Variant::CallError::CALL_OK; - - jvalue *argv=NULL; + jvalue *argv = NULL; if (method->param_types.size()) { - argv=(jvalue*)alloca( sizeof(jvalue)*method->param_types.size() ); + argv = (jvalue *)alloca(sizeof(jvalue) * method->param_types.size()); } List<jobject> to_free; - for(int i=0;i<method->param_types.size();i++) { + for (int i = 0; i < method->param_types.size(); i++) { - switch(method->param_types[i]) { - case ARG_TYPE_VOID: { + switch (method->param_types[i]) { + case ARG_TYPE_VOID: { //can't happen - argv[i].l=NULL; //I hope this works + argv[i].l = NULL; //I hope this works } break; case ARG_TYPE_BOOLEAN: { - argv[i].z=*p_args[i]; + argv[i].z = *p_args[i]; } break; case ARG_TYPE_BYTE: { - argv[i].b=*p_args[i]; + argv[i].b = *p_args[i]; } break; case ARG_TYPE_CHAR: { - argv[i].c=*p_args[i]; + argv[i].c = *p_args[i]; } break; case ARG_TYPE_SHORT: { - argv[i].s=*p_args[i]; + argv[i].s = *p_args[i]; } break; case ARG_TYPE_INT: { - argv[i].i=*p_args[i]; + argv[i].i = *p_args[i]; } break; case ARG_TYPE_LONG: { - argv[i].j=*p_args[i]; + argv[i].j = *p_args[i]; } break; case ARG_TYPE_FLOAT: { - argv[i].f=*p_args[i]; + argv[i].f = *p_args[i]; } break; case ARG_TYPE_DOUBLE: { - argv[i].d=*p_args[i]; + argv[i].d = *p_args[i]; } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_BOOLEAN: { + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_BOOLEAN: { jclass bclass = env->FindClass("java/lang/Boolean"); jmethodID ctor = env->GetMethodID(bclass, "<init>", "(Z)V"); jvalue val; @@ -215,7 +206,7 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c argv[i].l = obj; to_free.push_back(obj); } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_BYTE: { + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_BYTE: { jclass bclass = env->FindClass("java/lang/Byte"); jmethodID ctor = env->GetMethodID(bclass, "<init>", "(B)V"); jvalue val; @@ -224,7 +215,7 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c argv[i].l = obj; to_free.push_back(obj); } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_CHAR: { + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_CHAR: { jclass bclass = env->FindClass("java/lang/Character"); jmethodID ctor = env->GetMethodID(bclass, "<init>", "(C)V"); jvalue val; @@ -233,7 +224,7 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c argv[i].l = obj; to_free.push_back(obj); } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_SHORT: { + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_SHORT: { jclass bclass = env->FindClass("java/lang/Short"); jmethodID ctor = env->GetMethodID(bclass, "<init>", "(S)V"); jvalue val; @@ -242,7 +233,7 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c argv[i].l = obj; to_free.push_back(obj); } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_INT: { + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_INT: { jclass bclass = env->FindClass("java/lang/Integer"); jmethodID ctor = env->GetMethodID(bclass, "<init>", "(I)V"); jvalue val; @@ -251,7 +242,7 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c argv[i].l = obj; to_free.push_back(obj); } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_LONG: { + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_LONG: { jclass bclass = env->FindClass("java/lang/Long"); jmethodID ctor = env->GetMethodID(bclass, "<init>", "(J)V"); jvalue val; @@ -260,7 +251,7 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c argv[i].l = obj; to_free.push_back(obj); } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_FLOAT: { + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_FLOAT: { jclass bclass = env->FindClass("java/lang/Float"); jmethodID ctor = env->GetMethodID(bclass, "<init>", "(F)V"); jvalue val; @@ -269,7 +260,7 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c argv[i].l = obj; to_free.push_back(obj); } break; - case ARG_NUMBER_CLASS_BIT|ARG_TYPE_DOUBLE: { + case ARG_NUMBER_CLASS_BIT | ARG_TYPE_DOUBLE: { jclass bclass = env->FindClass("java/lang/Double"); jmethodID ctor = env->GetMethodID(bclass, "<init>", "(D)V"); jvalue val; @@ -281,217 +272,214 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c case ARG_TYPE_STRING: { String s = *p_args[i]; jstring jStr = env->NewStringUTF(s.utf8().get_data()); - argv[i].l=jStr; + argv[i].l = jStr; to_free.push_back(jStr); } break; case ARG_TYPE_CLASS: { - Ref<JavaObject> jo=*p_args[i]; + Ref<JavaObject> jo = *p_args[i]; if (jo.is_valid()) { - argv[i].l=jo->instance; + argv[i].l = jo->instance; } else { - argv[i].l=NULL; //I hope this works + argv[i].l = NULL; //I hope this works } } break; - case ARG_ARRAY_BIT|ARG_TYPE_BOOLEAN: { + case ARG_ARRAY_BIT | ARG_TYPE_BOOLEAN: { Array arr = *p_args[i]; jbooleanArray a = env->NewBooleanArray(arr.size()); - for(int j=0;j<arr.size();j++) { + for (int j = 0; j < arr.size(); j++) { jboolean val = arr[j]; - env->SetBooleanArrayRegion(a,j,1,&val); + env->SetBooleanArrayRegion(a, j, 1, &val); } - argv[i].l=a; + argv[i].l = a; to_free.push_back(a); } break; - case ARG_ARRAY_BIT|ARG_TYPE_BYTE: { + case ARG_ARRAY_BIT | ARG_TYPE_BYTE: { Array arr = *p_args[i]; jbyteArray a = env->NewByteArray(arr.size()); - for(int j=0;j<arr.size();j++) { + for (int j = 0; j < arr.size(); j++) { jbyte val = arr[j]; - env->SetByteArrayRegion(a,j,1,&val); + env->SetByteArrayRegion(a, j, 1, &val); } - argv[i].l=a; + argv[i].l = a; to_free.push_back(a); - } break; - case ARG_ARRAY_BIT|ARG_TYPE_CHAR: { + case ARG_ARRAY_BIT | ARG_TYPE_CHAR: { Array arr = *p_args[i]; jcharArray a = env->NewCharArray(arr.size()); - for(int j=0;j<arr.size();j++) { + for (int j = 0; j < arr.size(); j++) { jchar val = arr[j]; - env->SetCharArrayRegion(a,j,1,&val); + env->SetCharArrayRegion(a, j, 1, &val); } - argv[i].l=a; + argv[i].l = a; to_free.push_back(a); } break; - case ARG_ARRAY_BIT|ARG_TYPE_SHORT: { + case ARG_ARRAY_BIT | ARG_TYPE_SHORT: { Array arr = *p_args[i]; jshortArray a = env->NewShortArray(arr.size()); - for(int j=0;j<arr.size();j++) { + for (int j = 0; j < arr.size(); j++) { jshort val = arr[j]; - env->SetShortArrayRegion(a,j,1,&val); + env->SetShortArrayRegion(a, j, 1, &val); } - argv[i].l=a; + argv[i].l = a; to_free.push_back(a); } break; - case ARG_ARRAY_BIT|ARG_TYPE_INT: { + case ARG_ARRAY_BIT | ARG_TYPE_INT: { Array arr = *p_args[i]; jintArray a = env->NewIntArray(arr.size()); - for(int j=0;j<arr.size();j++) { + for (int j = 0; j < arr.size(); j++) { jint val = arr[j]; - env->SetIntArrayRegion(a,j,1,&val); + env->SetIntArrayRegion(a, j, 1, &val); } - argv[i].l=a; + argv[i].l = a; to_free.push_back(a); } break; - case ARG_ARRAY_BIT|ARG_TYPE_LONG: { + case ARG_ARRAY_BIT | ARG_TYPE_LONG: { Array arr = *p_args[i]; jlongArray a = env->NewLongArray(arr.size()); - for(int j=0;j<arr.size();j++) { + for (int j = 0; j < arr.size(); j++) { jlong val = arr[j]; - env->SetLongArrayRegion(a,j,1,&val); + env->SetLongArrayRegion(a, j, 1, &val); } - argv[i].l=a; + argv[i].l = a; to_free.push_back(a); } break; - case ARG_ARRAY_BIT|ARG_TYPE_FLOAT: { + case ARG_ARRAY_BIT | ARG_TYPE_FLOAT: { Array arr = *p_args[i]; jfloatArray a = env->NewFloatArray(arr.size()); - for(int j=0;j<arr.size();j++) { + for (int j = 0; j < arr.size(); j++) { jfloat val = arr[j]; - env->SetFloatArrayRegion(a,j,1,&val); + env->SetFloatArrayRegion(a, j, 1, &val); } - argv[i].l=a; + argv[i].l = a; to_free.push_back(a); - } break; - case ARG_ARRAY_BIT|ARG_TYPE_DOUBLE: { + case ARG_ARRAY_BIT | ARG_TYPE_DOUBLE: { Array arr = *p_args[i]; jdoubleArray a = env->NewDoubleArray(arr.size()); - for(int j=0;j<arr.size();j++) { + for (int j = 0; j < arr.size(); j++) { jdouble val = arr[j]; - env->SetDoubleArrayRegion(a,j,1,&val); + env->SetDoubleArrayRegion(a, j, 1, &val); } - argv[i].l=a; + argv[i].l = a; to_free.push_back(a); } break; - case ARG_ARRAY_BIT|ARG_TYPE_STRING: { + case ARG_ARRAY_BIT | ARG_TYPE_STRING: { Array arr = *p_args[i]; - jobjectArray a = env->NewObjectArray(arr.size(),env->FindClass("java/lang/String"),NULL); - for(int j=0;j<arr.size();j++) { + jobjectArray a = env->NewObjectArray(arr.size(), env->FindClass("java/lang/String"), NULL); + for (int j = 0; j < arr.size(); j++) { String s = arr[j]; jstring jStr = env->NewStringUTF(s.utf8().get_data()); - env->SetObjectArrayElement(a,j,jStr); + env->SetObjectArrayElement(a, j, jStr); to_free.push_back(jStr); } - argv[i].l=a; + argv[i].l = a; to_free.push_back(a); } break; - case ARG_ARRAY_BIT|ARG_TYPE_CLASS: { + case ARG_ARRAY_BIT | ARG_TYPE_CLASS: { - argv[i].l=NULL; + argv[i].l = NULL; } break; } } - r_error.error=Variant::CallError::CALL_OK; - bool success=true; - - switch(method->return_type) { + r_error.error = Variant::CallError::CALL_OK; + bool success = true; + switch (method->return_type) { case ARG_TYPE_VOID: { if (method->_static) { - env->CallStaticVoidMethodA(_class,method->method,argv); + env->CallStaticVoidMethodA(_class, method->method, argv); } else { - env->CallVoidMethodA(p_instance->instance,method->method,argv); + env->CallVoidMethodA(p_instance->instance, method->method, argv); } - ret=Variant(); + ret = Variant(); } break; case ARG_TYPE_BOOLEAN: { if (method->_static) { - ret=env->CallStaticBooleanMethodA(_class,method->method,argv); + ret = env->CallStaticBooleanMethodA(_class, method->method, argv); } else { - ret=env->CallBooleanMethodA(p_instance->instance,method->method,argv); + ret = env->CallBooleanMethodA(p_instance->instance, method->method, argv); } } break; case ARG_TYPE_BYTE: { if (method->_static) { - ret=env->CallStaticByteMethodA(_class,method->method,argv); + ret = env->CallStaticByteMethodA(_class, method->method, argv); } else { - ret=env->CallByteMethodA(p_instance->instance,method->method,argv); + ret = env->CallByteMethodA(p_instance->instance, method->method, argv); } } break; case ARG_TYPE_CHAR: { if (method->_static) { - ret=env->CallStaticCharMethodA(_class,method->method,argv); + ret = env->CallStaticCharMethodA(_class, method->method, argv); } else { - ret=env->CallCharMethodA(p_instance->instance,method->method,argv); + ret = env->CallCharMethodA(p_instance->instance, method->method, argv); } } break; case ARG_TYPE_SHORT: { if (method->_static) { - ret=env->CallStaticShortMethodA(_class,method->method,argv); + ret = env->CallStaticShortMethodA(_class, method->method, argv); } else { - ret=env->CallShortMethodA(p_instance->instance,method->method,argv); + ret = env->CallShortMethodA(p_instance->instance, method->method, argv); } } break; case ARG_TYPE_INT: { if (method->_static) { - ret=env->CallStaticIntMethodA(_class,method->method,argv); + ret = env->CallStaticIntMethodA(_class, method->method, argv); } else { - ret=env->CallIntMethodA(p_instance->instance,method->method,argv); + ret = env->CallIntMethodA(p_instance->instance, method->method, argv); } } break; case ARG_TYPE_LONG: { if (method->_static) { - ret=env->CallStaticLongMethodA(_class,method->method,argv); + ret = env->CallStaticLongMethodA(_class, method->method, argv); } else { - ret=env->CallLongMethodA(p_instance->instance,method->method,argv); + ret = env->CallLongMethodA(p_instance->instance, method->method, argv); } } break; case ARG_TYPE_FLOAT: { if (method->_static) { - ret=env->CallStaticFloatMethodA(_class,method->method,argv); + ret = env->CallStaticFloatMethodA(_class, method->method, argv); } else { - ret=env->CallFloatMethodA(p_instance->instance,method->method,argv); + ret = env->CallFloatMethodA(p_instance->instance, method->method, argv); } } break; case ARG_TYPE_DOUBLE: { if (method->_static) { - ret=env->CallStaticDoubleMethodA(_class,method->method,argv); + ret = env->CallStaticDoubleMethodA(_class, method->method, argv); } else { - ret=env->CallDoubleMethodA(p_instance->instance,method->method,argv); + ret = env->CallDoubleMethodA(p_instance->instance, method->method, argv); } } break; @@ -499,375 +487,366 @@ bool JavaClass::_call_method(JavaObject* p_instance,const StringName& p_method,c jobject obj; if (method->_static) { - obj=env->CallStaticObjectMethodA(_class,method->method,argv); + obj = env->CallStaticObjectMethodA(_class, method->method, argv); } else { - obj=env->CallObjectMethodA(p_instance->instance,method->method,argv); + obj = env->CallObjectMethodA(p_instance->instance, method->method, argv); } if (!obj) { - ret=Variant(); + ret = Variant(); } else { - if (!_convert_object_to_variant(env, obj, ret,method->return_type)) { - ret=Variant(); - r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; - success=false; + if (!_convert_object_to_variant(env, obj, ret, method->return_type)) { + ret = Variant(); + r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; + success = false; } env->DeleteLocalRef(obj); } } break; - } - for(List<jobject>::Element *E=to_free.front();E;E=E->next()) { + for (List<jobject>::Element *E = to_free.front(); E; E = E->next()) { env->DeleteLocalRef(E->get()); } return success; } -Variant JavaClass::call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error) { +Variant JavaClass::call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { Variant ret; - bool found = _call_method(NULL,p_method,p_args,p_argcount,r_error,ret); + bool found = _call_method(NULL, p_method, p_args, p_argcount, r_error, ret); if (found) { return ret; } - return Reference::call(p_method,p_args,p_argcount,r_error); + return Reference::call(p_method, p_args, p_argcount, r_error); } JavaClass::JavaClass() { - } ///////////////////// -Variant JavaObject::call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error){ +Variant JavaObject::call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { return Variant(); } -JavaObject::JavaObject(const Ref<JavaClass>& p_base,jobject *p_instance) { - +JavaObject::JavaObject(const Ref<JavaClass> &p_base, jobject *p_instance) { } -JavaObject::~JavaObject(){ - +JavaObject::~JavaObject() { } - //////////////////// void JavaClassWrapper::_bind_methods() { - ClassDB::bind_method(D_METHOD("wrap:JavaClass","name"),&JavaClassWrapper::wrap); + ClassDB::bind_method(D_METHOD("wrap:JavaClass", "name"), &JavaClassWrapper::wrap); } - -bool JavaClassWrapper::_get_type_sig(JNIEnv *env,jobject obj,uint32_t& sig,String&strsig) { +bool JavaClassWrapper::_get_type_sig(JNIEnv *env, jobject obj, uint32_t &sig, String &strsig) { jstring name2 = (jstring)env->CallObjectMethod(obj, Class_getName); - String str_type = env->GetStringUTFChars( name2, NULL ); - print_line("name: "+str_type); + String str_type = env->GetStringUTFChars(name2, NULL); + print_line("name: " + str_type); env->DeleteLocalRef(name2); - uint32_t t=0; + uint32_t t = 0; if (str_type.begins_with("[")) { - t=JavaClass::ARG_ARRAY_BIT; - strsig="["; - str_type=str_type.substr(1,str_type.length()-1); + t = JavaClass::ARG_ARRAY_BIT; + strsig = "["; + str_type = str_type.substr(1, str_type.length() - 1); if (str_type.begins_with("[")) { - print_line("Nested arrays not supported for type: "+str_type); + print_line("Nested arrays not supported for type: " + str_type); return false; } if (str_type.begins_with("L")) { - str_type=str_type.substr(1,str_type.length()-2); //ok it's a class + str_type = str_type.substr(1, str_type.length() - 2); //ok it's a class } } - if (str_type=="void" || str_type=="V") { - t|=JavaClass::ARG_TYPE_VOID; - strsig+="V"; - } else if (str_type=="boolean" || str_type=="Z") { - t|=JavaClass::ARG_TYPE_BOOLEAN; - strsig+="Z"; - } else if (str_type=="byte" || str_type=="B") { - t|=JavaClass::ARG_TYPE_BYTE; - strsig+="B"; - } else if (str_type=="char" || str_type=="C") { - t|=JavaClass::ARG_TYPE_CHAR; - strsig+="C"; - } else if (str_type=="short" || str_type=="S") { - t|=JavaClass::ARG_TYPE_SHORT; - strsig+="S"; - } else if (str_type=="int" || str_type=="I") { - t|=JavaClass::ARG_TYPE_INT; - strsig+="I"; - } else if (str_type=="long" || str_type=="J") { - t|=JavaClass::ARG_TYPE_LONG; - strsig+="J"; - } else if (str_type=="float" || str_type=="F") { - t|=JavaClass::ARG_TYPE_FLOAT; - strsig+="F"; - } else if (str_type=="double" || str_type=="D") { - t|=JavaClass::ARG_TYPE_DOUBLE; - strsig+="D"; - } else if (str_type=="java.lang.String") { - t|=JavaClass::ARG_TYPE_STRING; - strsig+="Ljava/lang/String;"; - } else if (str_type=="java.lang.Boolean") { - t|=JavaClass::ARG_TYPE_BOOLEAN|JavaClass::ARG_NUMBER_CLASS_BIT; - strsig+="Ljava/lang/Boolean;"; - } else if (str_type=="java.lang.Byte") { - t|=JavaClass::ARG_TYPE_BYTE|JavaClass::ARG_NUMBER_CLASS_BIT; - strsig+="Ljava/lang/Byte;"; - } else if (str_type=="java.lang.Character") { - t|=JavaClass::ARG_TYPE_CHAR|JavaClass::ARG_NUMBER_CLASS_BIT; - strsig+="Ljava/lang/Character;"; - } else if (str_type=="java.lang.Short") { - t|=JavaClass::ARG_TYPE_SHORT|JavaClass::ARG_NUMBER_CLASS_BIT; - strsig+="Ljava/lang/Short;"; - } else if (str_type=="java.lang.Integer") { - t|=JavaClass::ARG_TYPE_INT|JavaClass::ARG_NUMBER_CLASS_BIT; - strsig+="Ljava/lang/Integer;"; - } else if (str_type=="java.lang.Long") { - t|=JavaClass::ARG_TYPE_LONG|JavaClass::ARG_NUMBER_CLASS_BIT; - strsig+="Ljava/lang/Long;"; - } else if (str_type=="java.lang.Float") { - t|=JavaClass::ARG_TYPE_FLOAT|JavaClass::ARG_NUMBER_CLASS_BIT; - strsig+="Ljava/lang/Float;"; - } else if (str_type=="java.lang.Double") { - t|=JavaClass::ARG_TYPE_DOUBLE|JavaClass::ARG_NUMBER_CLASS_BIT; - strsig+="Ljava/lang/Double;"; + if (str_type == "void" || str_type == "V") { + t |= JavaClass::ARG_TYPE_VOID; + strsig += "V"; + } else if (str_type == "boolean" || str_type == "Z") { + t |= JavaClass::ARG_TYPE_BOOLEAN; + strsig += "Z"; + } else if (str_type == "byte" || str_type == "B") { + t |= JavaClass::ARG_TYPE_BYTE; + strsig += "B"; + } else if (str_type == "char" || str_type == "C") { + t |= JavaClass::ARG_TYPE_CHAR; + strsig += "C"; + } else if (str_type == "short" || str_type == "S") { + t |= JavaClass::ARG_TYPE_SHORT; + strsig += "S"; + } else if (str_type == "int" || str_type == "I") { + t |= JavaClass::ARG_TYPE_INT; + strsig += "I"; + } else if (str_type == "long" || str_type == "J") { + t |= JavaClass::ARG_TYPE_LONG; + strsig += "J"; + } else if (str_type == "float" || str_type == "F") { + t |= JavaClass::ARG_TYPE_FLOAT; + strsig += "F"; + } else if (str_type == "double" || str_type == "D") { + t |= JavaClass::ARG_TYPE_DOUBLE; + strsig += "D"; + } else if (str_type == "java.lang.String") { + t |= JavaClass::ARG_TYPE_STRING; + strsig += "Ljava/lang/String;"; + } else if (str_type == "java.lang.Boolean") { + t |= JavaClass::ARG_TYPE_BOOLEAN | JavaClass::ARG_NUMBER_CLASS_BIT; + strsig += "Ljava/lang/Boolean;"; + } else if (str_type == "java.lang.Byte") { + t |= JavaClass::ARG_TYPE_BYTE | JavaClass::ARG_NUMBER_CLASS_BIT; + strsig += "Ljava/lang/Byte;"; + } else if (str_type == "java.lang.Character") { + t |= JavaClass::ARG_TYPE_CHAR | JavaClass::ARG_NUMBER_CLASS_BIT; + strsig += "Ljava/lang/Character;"; + } else if (str_type == "java.lang.Short") { + t |= JavaClass::ARG_TYPE_SHORT | JavaClass::ARG_NUMBER_CLASS_BIT; + strsig += "Ljava/lang/Short;"; + } else if (str_type == "java.lang.Integer") { + t |= JavaClass::ARG_TYPE_INT | JavaClass::ARG_NUMBER_CLASS_BIT; + strsig += "Ljava/lang/Integer;"; + } else if (str_type == "java.lang.Long") { + t |= JavaClass::ARG_TYPE_LONG | JavaClass::ARG_NUMBER_CLASS_BIT; + strsig += "Ljava/lang/Long;"; + } else if (str_type == "java.lang.Float") { + t |= JavaClass::ARG_TYPE_FLOAT | JavaClass::ARG_NUMBER_CLASS_BIT; + strsig += "Ljava/lang/Float;"; + } else if (str_type == "java.lang.Double") { + t |= JavaClass::ARG_TYPE_DOUBLE | JavaClass::ARG_NUMBER_CLASS_BIT; + strsig += "Ljava/lang/Double;"; } else { //a class likely - strsig+="L"+str_type.replace(".","/")+";"; - t|=JavaClass::ARG_TYPE_CLASS; + strsig += "L" + str_type.replace(".", "/") + ";"; + t |= JavaClass::ARG_TYPE_CLASS; } - sig=t; - + sig = t; return true; - } -bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& var,uint32_t p_sig) { +bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &var, uint32_t p_sig) { if (!obj) { - var=Variant(); //seems null is just null... + var = Variant(); //seems null is just null... return true; } - - switch(p_sig) { + switch (p_sig) { case ARG_TYPE_VOID: { return Variant(); } break; - case ARG_TYPE_BOOLEAN|ARG_NUMBER_CLASS_BIT: { + case ARG_TYPE_BOOLEAN | ARG_NUMBER_CLASS_BIT: { var = env->CallBooleanMethod(obj, JavaClassWrapper::singleton->Boolean_booleanValue); return true; } break; - case ARG_TYPE_BYTE|ARG_NUMBER_CLASS_BIT: { + case ARG_TYPE_BYTE | ARG_NUMBER_CLASS_BIT: { var = env->CallByteMethod(obj, JavaClassWrapper::singleton->Byte_byteValue); return true; } break; - case ARG_TYPE_CHAR|ARG_NUMBER_CLASS_BIT: { + case ARG_TYPE_CHAR | ARG_NUMBER_CLASS_BIT: { var = env->CallCharMethod(obj, JavaClassWrapper::singleton->Character_characterValue); return true; } break; - case ARG_TYPE_SHORT|ARG_NUMBER_CLASS_BIT: { + case ARG_TYPE_SHORT | ARG_NUMBER_CLASS_BIT: { var = env->CallShortMethod(obj, JavaClassWrapper::singleton->Short_shortValue); return true; } break; - case ARG_TYPE_INT|ARG_NUMBER_CLASS_BIT: { + case ARG_TYPE_INT | ARG_NUMBER_CLASS_BIT: { var = env->CallIntMethod(obj, JavaClassWrapper::singleton->Integer_integerValue); return true; } break; - case ARG_TYPE_LONG|ARG_NUMBER_CLASS_BIT: { + case ARG_TYPE_LONG | ARG_NUMBER_CLASS_BIT: { var = env->CallLongMethod(obj, JavaClassWrapper::singleton->Long_longValue); return true; } break; - case ARG_TYPE_FLOAT|ARG_NUMBER_CLASS_BIT: { + case ARG_TYPE_FLOAT | ARG_NUMBER_CLASS_BIT: { var = env->CallFloatMethod(obj, JavaClassWrapper::singleton->Float_floatValue); return true; } break; - case ARG_TYPE_DOUBLE|ARG_NUMBER_CLASS_BIT: { + case ARG_TYPE_DOUBLE | ARG_NUMBER_CLASS_BIT: { var = env->CallDoubleMethod(obj, JavaClassWrapper::singleton->Double_doubleValue); return true; } break; case ARG_TYPE_STRING: { - var = String::utf8(env->GetStringUTFChars( (jstring)obj, NULL )); + var = String::utf8(env->GetStringUTFChars((jstring)obj, NULL)); return true; } break; case ARG_TYPE_CLASS: { return false; } break; - case ARG_ARRAY_BIT|ARG_TYPE_VOID: { + case ARG_ARRAY_BIT | ARG_TYPE_VOID: { var = Array(); // ? return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_BOOLEAN: { + case ARG_ARRAY_BIT | ARG_TYPE_BOOLEAN: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jboolean val; - env->GetBooleanArrayRegion((jbooleanArray)arr,0,1,&val); + env->GetBooleanArrayRegion((jbooleanArray)arr, 0, 1, &val); ret.push_back(val); } - var=ret; + var = ret; return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_BYTE: { + case ARG_ARRAY_BIT | ARG_TYPE_BYTE: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jbyte val; - env->GetByteArrayRegion((jbyteArray)arr,0,1,&val); + env->GetByteArrayRegion((jbyteArray)arr, 0, 1, &val); ret.push_back(val); } - var=ret; + var = ret; return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_CHAR: { + case ARG_ARRAY_BIT | ARG_TYPE_CHAR: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jchar val; - env->GetCharArrayRegion((jcharArray)arr,0,1,&val); + env->GetCharArrayRegion((jcharArray)arr, 0, 1, &val); ret.push_back(val); } - var=ret; + var = ret; return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_SHORT: { + case ARG_ARRAY_BIT | ARG_TYPE_SHORT: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jshort val; - env->GetShortArrayRegion((jshortArray)arr,0,1,&val); + env->GetShortArrayRegion((jshortArray)arr, 0, 1, &val); ret.push_back(val); } - var=ret; + var = ret; return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_INT: { + case ARG_ARRAY_BIT | ARG_TYPE_INT: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jint val; - env->GetIntArrayRegion((jintArray)arr,0,1,&val); + env->GetIntArrayRegion((jintArray)arr, 0, 1, &val); ret.push_back(val); } - var=ret; + var = ret; return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_LONG: { + case ARG_ARRAY_BIT | ARG_TYPE_LONG: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jlong val; - env->GetLongArrayRegion((jlongArray)arr,0,1,&val); + env->GetLongArrayRegion((jlongArray)arr, 0, 1, &val); ret.push_back(val); } - var=ret; + var = ret; return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_FLOAT: { + case ARG_ARRAY_BIT | ARG_TYPE_FLOAT: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jfloat val; - env->GetFloatArrayRegion((jfloatArray)arr,0,1,&val); + env->GetFloatArrayRegion((jfloatArray)arr, 0, 1, &val); ret.push_back(val); } - var=ret; + var = ret; return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_DOUBLE: { + case ARG_ARRAY_BIT | ARG_TYPE_DOUBLE: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jdouble val; - env->GetDoubleArrayRegion((jdoubleArray)arr,0,1,&val); + env->GetDoubleArrayRegion((jdoubleArray)arr, 0, 1, &val); ret.push_back(val); } - var=ret; + var = ret; return true; } break; - case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_BOOLEAN: { + case ARG_NUMBER_CLASS_BIT | ARG_ARRAY_BIT | ARG_TYPE_BOOLEAN: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject o = env->GetObjectArrayElement(arr, i); if (!o) @@ -875,23 +854,22 @@ bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& v else { bool val = env->CallBooleanMethod(o, JavaClassWrapper::singleton->Boolean_booleanValue); ret.push_back(val); - } env->DeleteLocalRef(o); } - var=ret; + var = ret; return true; } break; - case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_BYTE: { + case ARG_NUMBER_CLASS_BIT | ARG_ARRAY_BIT | ARG_TYPE_BYTE: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject o = env->GetObjectArrayElement(arr, i); if (!o) @@ -899,22 +877,21 @@ bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& v else { int val = env->CallByteMethod(o, JavaClassWrapper::singleton->Byte_byteValue); ret.push_back(val); - } env->DeleteLocalRef(o); } - var=ret; + var = ret; return true; } break; - case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_CHAR: { + case ARG_NUMBER_CLASS_BIT | ARG_ARRAY_BIT | ARG_TYPE_CHAR: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject o = env->GetObjectArrayElement(arr, i); if (!o) @@ -922,22 +899,21 @@ bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& v else { int val = env->CallCharMethod(o, JavaClassWrapper::singleton->Character_characterValue); ret.push_back(val); - } env->DeleteLocalRef(o); } - var=ret; + var = ret; return true; } break; - case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_SHORT: { + case ARG_NUMBER_CLASS_BIT | ARG_ARRAY_BIT | ARG_TYPE_SHORT: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject o = env->GetObjectArrayElement(arr, i); if (!o) @@ -945,22 +921,21 @@ bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& v else { int val = env->CallShortMethod(o, JavaClassWrapper::singleton->Short_shortValue); ret.push_back(val); - } env->DeleteLocalRef(o); } - var=ret; + var = ret; return true; } break; - case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_INT: { + case ARG_NUMBER_CLASS_BIT | ARG_ARRAY_BIT | ARG_TYPE_INT: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject o = env->GetObjectArrayElement(arr, i); if (!o) @@ -968,22 +943,21 @@ bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& v else { int val = env->CallIntMethod(o, JavaClassWrapper::singleton->Integer_integerValue); ret.push_back(val); - } env->DeleteLocalRef(o); } - var=ret; + var = ret; return true; } break; - case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_LONG: { + case ARG_NUMBER_CLASS_BIT | ARG_ARRAY_BIT | ARG_TYPE_LONG: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject o = env->GetObjectArrayElement(arr, i); if (!o) @@ -991,22 +965,21 @@ bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& v else { int64_t val = env->CallLongMethod(o, JavaClassWrapper::singleton->Long_longValue); ret.push_back(val); - } env->DeleteLocalRef(o); } - var=ret; + var = ret; return true; } break; - case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_FLOAT: { + case ARG_NUMBER_CLASS_BIT | ARG_ARRAY_BIT | ARG_TYPE_FLOAT: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject o = env->GetObjectArrayElement(arr, i); if (!o) @@ -1014,21 +987,20 @@ bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& v else { float val = env->CallFloatMethod(o, JavaClassWrapper::singleton->Float_floatValue); ret.push_back(val); - } env->DeleteLocalRef(o); } - var=ret; + var = ret; return true; } break; - case ARG_NUMBER_CLASS_BIT|ARG_ARRAY_BIT|ARG_TYPE_DOUBLE: { + case ARG_NUMBER_CLASS_BIT | ARG_ARRAY_BIT | ARG_TYPE_DOUBLE: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject o = env->GetObjectArrayElement(arr, i); if (!o) @@ -1036,58 +1008,53 @@ bool JavaClass::_convert_object_to_variant(JNIEnv * env, jobject obj, Variant& v else { double val = env->CallDoubleMethod(o, JavaClassWrapper::singleton->Double_doubleValue); ret.push_back(val); - } env->DeleteLocalRef(o); } - var=ret; + var = ret; return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_STRING: { + case ARG_ARRAY_BIT | ARG_TYPE_STRING: { Array ret; jobjectArray arr = (jobjectArray)obj; int count = env->GetArrayLength(arr); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject o = env->GetObjectArrayElement(arr, i); if (!o) ret.push_back(Variant()); else { - String val = String::utf8(env->GetStringUTFChars( (jstring)o, NULL )); + String val = String::utf8(env->GetStringUTFChars((jstring)o, NULL)); ret.push_back(val); - } env->DeleteLocalRef(o); } - var=ret; + var = ret; return true; } break; - case ARG_ARRAY_BIT|ARG_TYPE_CLASS: { + case ARG_ARRAY_BIT | ARG_TYPE_CLASS: { } break; } return false; - } - -Ref<JavaClass> JavaClassWrapper::wrap(const String& p_class) { +Ref<JavaClass> JavaClassWrapper::wrap(const String &p_class) { if (class_cache.has(p_class)) return class_cache[p_class]; - JNIEnv *env = ThreadAndroid::get_env(); jclass bclass = env->FindClass(p_class.utf8().get_data()); - ERR_FAIL_COND_V(!bclass,Ref<JavaClass>()); + ERR_FAIL_COND_V(!bclass, Ref<JavaClass>()); //jmethodID getDeclaredMethods = env->GetMethodID(bclass,"getDeclaredMethods", "()[Ljava/lang/reflect/Method;"); @@ -1095,130 +1062,121 @@ Ref<JavaClass> JavaClassWrapper::wrap(const String& p_class) { jobjectArray methods = (jobjectArray)env->CallObjectMethod(bclass, getDeclaredMethods); - ERR_FAIL_COND_V(!methods,Ref<JavaClass>()); + ERR_FAIL_COND_V(!methods, Ref<JavaClass>()); - - Ref<JavaClass> java_class = memnew( JavaClass ); + Ref<JavaClass> java_class = memnew(JavaClass); int count = env->GetArrayLength(methods); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject obj = env->GetObjectArrayElement(methods, i); ERR_CONTINUE(!obj); - jstring name = (jstring)env->CallObjectMethod(obj, getName); - String str_method = env->GetStringUTFChars( name, NULL ); + String str_method = env->GetStringUTFChars(name, NULL); env->DeleteLocalRef(name); Vector<String> params; - jint mods = env->CallIntMethod(obj,getModifiers); + jint mods = env->CallIntMethod(obj, getModifiers); - if (!(mods&0x0001)) { + if (!(mods & 0x0001)) { env->DeleteLocalRef(obj); continue; //not public bye } - - jobjectArray param_types = (jobjectArray)env->CallObjectMethod(obj, getParameterTypes); - int count2=env->GetArrayLength(param_types); + int count2 = env->GetArrayLength(param_types); if (!java_class->methods.has(str_method)) { - java_class->methods[str_method]=List<JavaClass::MethodInfo>(); + java_class->methods[str_method] = List<JavaClass::MethodInfo>(); } JavaClass::MethodInfo mi; - mi._static = (mods&0x8)!=0; - bool valid=true; - String signature="("; + mi._static = (mods & 0x8) != 0; + bool valid = true; + String signature = "("; - for(int j=0;j<count2;j++) { + for (int j = 0; j < count2; j++) { jobject obj2 = env->GetObjectArrayElement(param_types, j); String strsig; - uint32_t sig=0; - if (!_get_type_sig(env,obj2,sig,strsig)) { - valid=false; + uint32_t sig = 0; + if (!_get_type_sig(env, obj2, sig, strsig)) { + valid = false; env->DeleteLocalRef(obj2); break; } - signature+=strsig; + signature += strsig; mi.param_types.push_back(sig); mi.param_sigs.push_back(strsig); env->DeleteLocalRef(obj2); - } if (!valid) { - print_line("Method Can't be bound (unsupported arguments): "+p_class+"::"+str_method); + print_line("Method Can't be bound (unsupported arguments): " + p_class + "::" + str_method); env->DeleteLocalRef(obj); env->DeleteLocalRef(param_types); continue; } - signature+=")"; + signature += ")"; jobject return_type = (jobject)env->CallObjectMethod(obj, getReturnType); - String strsig; - uint32_t sig=0; - if (!_get_type_sig(env,return_type,sig,strsig)) { - print_line("Method Can't be bound (unsupported return type): "+p_class+"::"+str_method); + uint32_t sig = 0; + if (!_get_type_sig(env, return_type, sig, strsig)) { + print_line("Method Can't be bound (unsupported return type): " + p_class + "::" + str_method); env->DeleteLocalRef(obj); env->DeleteLocalRef(param_types); env->DeleteLocalRef(return_type); continue; } - signature+=strsig; - mi.return_type=sig; + signature += strsig; + mi.return_type = sig; - print_line("METHOD: "+str_method+" SIG: "+signature+" static: "+itos(mi._static)); + print_line("METHOD: " + str_method + " SIG: " + signature + " static: " + itos(mi._static)); - bool discard=false; + bool discard = false; - for(List<JavaClass::MethodInfo>::Element *E=java_class->methods[str_method].front();E;E=E->next()) { + for (List<JavaClass::MethodInfo>::Element *E = java_class->methods[str_method].front(); E; E = E->next()) { - float new_likeliness=0; - float existing_likeliness=0; + float new_likeliness = 0; + float existing_likeliness = 0; - if (E->get().param_types.size()!=mi.param_types.size()) + if (E->get().param_types.size() != mi.param_types.size()) continue; - bool valid=true; - for(int j=0;j<E->get().param_types.size();j++) { + bool valid = true; + for (int j = 0; j < E->get().param_types.size(); j++) { Variant::Type _new; float new_l; Variant::Type existing; float existing_l; - JavaClass::_convert_to_variant_type(E->get().param_types[j],existing,existing_l); - JavaClass::_convert_to_variant_type(mi.param_types[j],_new,new_l); - if (_new!=existing) { - valid=false; + JavaClass::_convert_to_variant_type(E->get().param_types[j], existing, existing_l); + JavaClass::_convert_to_variant_type(mi.param_types[j], _new, new_l); + if (_new != existing) { + valid = false; break; } - new_likeliness+=new_l; - existing_likeliness=existing_l; - + new_likeliness += new_l; + existing_likeliness = existing_l; } if (!valid) continue; - if (new_likeliness>existing_likeliness) { + if (new_likeliness > existing_likeliness) { java_class->methods[str_method].erase(E); print_line("replace old"); break; } else { - discard=true; + discard = true; print_line("old is better"); } - - } if (!discard) { @@ -1236,12 +1194,8 @@ Ref<JavaClass> JavaClassWrapper::wrap(const String& p_class) { env->DeleteLocalRef(param_types); env->DeleteLocalRef(return_type); - - - //args[i] = _jobject_to_variant(env, obj); //print_line("\targ"+itos(i)+": "+Variant::get_type_name(args[i].get_type())); - }; env->DeleteLocalRef(methods); @@ -1250,33 +1204,32 @@ Ref<JavaClass> JavaClassWrapper::wrap(const String& p_class) { count = env->GetArrayLength(fields); - for (int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { jobject obj = env->GetObjectArrayElement(fields, i); ERR_CONTINUE(!obj); jstring name = (jstring)env->CallObjectMethod(obj, Field_getName); - String str_field = env->GetStringUTFChars( name, NULL ); + String str_field = env->GetStringUTFChars(name, NULL); env->DeleteLocalRef(name); - print_line("FIELD: "+str_field); - int mods = env->CallIntMethod(obj,Field_getModifiers); - if ((mods&0x8) && (mods&0x10) && (mods&0x1)) { //static final public! + print_line("FIELD: " + str_field); + int mods = env->CallIntMethod(obj, Field_getModifiers); + if ((mods & 0x8) && (mods & 0x10) && (mods & 0x1)) { //static final public! - jobject objc = env->CallObjectMethod(obj, Field_get,NULL); + jobject objc = env->CallObjectMethod(obj, Field_get, NULL); if (objc) { - uint32_t sig; String strsig; jclass cl = env->GetObjectClass(objc); - if (JavaClassWrapper::_get_type_sig(env,cl,sig,strsig)) { + if (JavaClassWrapper::_get_type_sig(env, cl, sig, strsig)) { - if ((sig&JavaClass::ARG_TYPE_MASK)<=JavaClass::ARG_TYPE_STRING) { + if ((sig & JavaClass::ARG_TYPE_MASK) <= JavaClass::ARG_TYPE_STRING) { Variant value; - if (JavaClass::_convert_object_to_variant(env,objc,value,sig)) { + if (JavaClass::_convert_object_to_variant(env, objc, value, sig)) { - java_class->constant_map[str_field]=value; + java_class->constant_map[str_field] = value; } } } @@ -1284,49 +1237,46 @@ Ref<JavaClass> JavaClassWrapper::wrap(const String& p_class) { env->DeleteLocalRef(cl); } - env->DeleteLocalRef(objc); - } env->DeleteLocalRef(obj); } env->DeleteLocalRef(fields); - return Ref<JavaClass>(); } -JavaClassWrapper *JavaClassWrapper::singleton=NULL; +JavaClassWrapper *JavaClassWrapper::singleton = NULL; JavaClassWrapper::JavaClassWrapper(jobject p_activity) { - singleton=this; + singleton = this; JNIEnv *env = ThreadAndroid::get_env(); jclass activityClass = env->FindClass("org/godotengine/godot/Godot"); - jmethodID getClassLoader = env->GetMethodID(activityClass,"getClassLoader", "()Ljava/lang/ClassLoader;"); + jmethodID getClassLoader = env->GetMethodID(activityClass, "getClassLoader", "()Ljava/lang/ClassLoader;"); classLoader = env->CallObjectMethod(p_activity, getClassLoader); - classLoader=(jclass)env->NewGlobalRef(classLoader); + classLoader = (jclass)env->NewGlobalRef(classLoader); jclass classLoaderClass = env->FindClass("java/lang/ClassLoader"); findClass = env->GetMethodID(classLoaderClass, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); jclass bclass = env->FindClass("java/lang/Class"); - getDeclaredMethods = env->GetMethodID(bclass,"getDeclaredMethods", "()[Ljava/lang/reflect/Method;"); - getFields = env->GetMethodID(bclass,"getFields", "()[Ljava/lang/reflect/Field;"); - Class_getName = env->GetMethodID(bclass,"getName", "()Ljava/lang/String;"); + getDeclaredMethods = env->GetMethodID(bclass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;"); + getFields = env->GetMethodID(bclass, "getFields", "()[Ljava/lang/reflect/Field;"); + Class_getName = env->GetMethodID(bclass, "getName", "()Ljava/lang/String;"); // bclass = env->FindClass("java/lang/reflect/Method"); - getParameterTypes = env->GetMethodID(bclass,"getParameterTypes", "()[Ljava/lang/Class;"); - getReturnType = env->GetMethodID(bclass,"getReturnType", "()Ljava/lang/Class;"); - getName = env->GetMethodID(bclass,"getName", "()Ljava/lang/String;"); - getModifiers = env->GetMethodID(bclass,"getModifiers", "()I"); + getParameterTypes = env->GetMethodID(bclass, "getParameterTypes", "()[Ljava/lang/Class;"); + getReturnType = env->GetMethodID(bclass, "getReturnType", "()Ljava/lang/Class;"); + getName = env->GetMethodID(bclass, "getName", "()Ljava/lang/String;"); + getModifiers = env->GetMethodID(bclass, "getModifiers", "()I"); /// bclass = env->FindClass("java/lang/reflect/Field"); - Field_getName = env->GetMethodID(bclass,"getName", "()Ljava/lang/String;"); - Field_getModifiers = env->GetMethodID(bclass,"getModifiers", "()I"); - Field_get = env->GetMethodID(bclass,"get", "(Ljava/lang/Object;)Ljava/lang/Object;"); + Field_getName = env->GetMethodID(bclass, "getName", "()Ljava/lang/String;"); + Field_getModifiers = env->GetMethodID(bclass, "getModifiers", "()I"); + Field_get = env->GetMethodID(bclass, "get", "(Ljava/lang/Object;)Ljava/lang/Object;"); // each bclass = env->FindClass("java/lang/Boolean"); Boolean_booleanValue = env->GetMethodID(bclass, "booleanValue", "()Z"); @@ -1351,5 +1301,4 @@ JavaClassWrapper::JavaClassWrapper(jobject p_activity) { bclass = env->FindClass("java/lang/Double"); Double_doubleValue = env->GetMethodID(bclass, "doubleValue", "()D"); - } diff --git a/platform/android/java_class_wrapper.h b/platform/android/java_class_wrapper.h index f0156563b2..dcc9973446 100644 --- a/platform/android/java_class_wrapper.h +++ b/platform/android/java_class_wrapper.h @@ -30,14 +30,14 @@ #define JAVA_CLASS_WRAPPER_H #include "reference.h" -#include <jni.h> #include <android/log.h> +#include <jni.h> class JavaObject; class JavaClass : public Reference { - GDCLASS(JavaClass,Reference); + GDCLASS(JavaClass, Reference); enum ArgumentType { @@ -52,13 +52,12 @@ class JavaClass : public Reference { ARG_TYPE_DOUBLE, ARG_TYPE_STRING, //special case ARG_TYPE_CLASS, - ARG_ARRAY_BIT=1<<16, - ARG_NUMBER_CLASS_BIT=1<<17, - ARG_TYPE_MASK=(1<<16)-1 + ARG_ARRAY_BIT = 1 << 16, + ARG_NUMBER_CLASS_BIT = 1 << 17, + ARG_TYPE_MASK = (1 << 16) - 1 }; - - Map<StringName,Variant> constant_map; + Map<StringName, Variant> constant_map; struct MethodInfo { @@ -67,94 +66,126 @@ class JavaClass : public Reference { Vector<StringName> param_sigs; uint32_t return_type; jmethodID method; - }; - _FORCE_INLINE_ static void _convert_to_variant_type(int p_sig, Variant::Type& r_type, float& likelyhood) { - - likelyhood=1.0; - r_type=Variant::NIL; - - switch(p_sig) { - - case ARG_TYPE_VOID: r_type=Variant::NIL; break; - case ARG_TYPE_BOOLEAN|ARG_NUMBER_CLASS_BIT: - case ARG_TYPE_BOOLEAN: r_type=Variant::BOOL; break; - case ARG_TYPE_BYTE|ARG_NUMBER_CLASS_BIT: - case ARG_TYPE_BYTE: r_type=Variant::INT; likelyhood=0.1; break; - case ARG_TYPE_CHAR|ARG_NUMBER_CLASS_BIT: - case ARG_TYPE_CHAR: r_type=Variant::INT; likelyhood=0.2; break; - case ARG_TYPE_SHORT|ARG_NUMBER_CLASS_BIT: - case ARG_TYPE_SHORT: r_type=Variant::INT; likelyhood=0.3; break; - case ARG_TYPE_INT|ARG_NUMBER_CLASS_BIT: - case ARG_TYPE_INT: r_type=Variant::INT; likelyhood=1.0; break; - case ARG_TYPE_LONG|ARG_NUMBER_CLASS_BIT: - case ARG_TYPE_LONG: r_type=Variant::INT; likelyhood=0.5; break; - case ARG_TYPE_FLOAT|ARG_NUMBER_CLASS_BIT: - case ARG_TYPE_FLOAT: r_type=Variant::REAL; likelyhood=1.0; break; - case ARG_TYPE_DOUBLE|ARG_NUMBER_CLASS_BIT: - case ARG_TYPE_DOUBLE: r_type=Variant::REAL; likelyhood=0.5; break; - case ARG_TYPE_STRING: r_type=Variant::STRING; break; - case ARG_TYPE_CLASS: r_type=Variant::OBJECT; break; - case ARG_ARRAY_BIT|ARG_TYPE_VOID: r_type=Variant::NIL; break; - case ARG_ARRAY_BIT|ARG_TYPE_BOOLEAN: r_type=Variant::ARRAY; break; - case ARG_ARRAY_BIT|ARG_TYPE_BYTE: r_type=Variant::POOL_BYTE_ARRAY; likelyhood=1.0; break; - case ARG_ARRAY_BIT|ARG_TYPE_CHAR: r_type=Variant::POOL_BYTE_ARRAY; likelyhood=0.5; break; - case ARG_ARRAY_BIT|ARG_TYPE_SHORT: r_type=Variant::POOL_INT_ARRAY; likelyhood=0.3; break; - case ARG_ARRAY_BIT|ARG_TYPE_INT: r_type=Variant::POOL_INT_ARRAY; likelyhood=1.0; break; - case ARG_ARRAY_BIT|ARG_TYPE_LONG: r_type=Variant::POOL_INT_ARRAY; likelyhood=0.5; break; - case ARG_ARRAY_BIT|ARG_TYPE_FLOAT: r_type=Variant::POOL_REAL_ARRAY; likelyhood=1.0; break; - case ARG_ARRAY_BIT|ARG_TYPE_DOUBLE: r_type=Variant::POOL_REAL_ARRAY; likelyhood=0.5; break; - case ARG_ARRAY_BIT|ARG_TYPE_STRING: r_type=Variant::POOL_STRING_ARRAY; break; - case ARG_ARRAY_BIT|ARG_TYPE_CLASS: r_type=Variant::ARRAY; break; + _FORCE_INLINE_ static void _convert_to_variant_type(int p_sig, Variant::Type &r_type, float &likelyhood) { + + likelyhood = 1.0; + r_type = Variant::NIL; + + switch (p_sig) { + + case ARG_TYPE_VOID: r_type = Variant::NIL; break; + case ARG_TYPE_BOOLEAN | ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_BOOLEAN: r_type = Variant::BOOL; break; + case ARG_TYPE_BYTE | ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_BYTE: + r_type = Variant::INT; + likelyhood = 0.1; + break; + case ARG_TYPE_CHAR | ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_CHAR: + r_type = Variant::INT; + likelyhood = 0.2; + break; + case ARG_TYPE_SHORT | ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_SHORT: + r_type = Variant::INT; + likelyhood = 0.3; + break; + case ARG_TYPE_INT | ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_INT: + r_type = Variant::INT; + likelyhood = 1.0; + break; + case ARG_TYPE_LONG | ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_LONG: + r_type = Variant::INT; + likelyhood = 0.5; + break; + case ARG_TYPE_FLOAT | ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_FLOAT: + r_type = Variant::REAL; + likelyhood = 1.0; + break; + case ARG_TYPE_DOUBLE | ARG_NUMBER_CLASS_BIT: + case ARG_TYPE_DOUBLE: + r_type = Variant::REAL; + likelyhood = 0.5; + break; + case ARG_TYPE_STRING: r_type = Variant::STRING; break; + case ARG_TYPE_CLASS: r_type = Variant::OBJECT; break; + case ARG_ARRAY_BIT | ARG_TYPE_VOID: r_type = Variant::NIL; break; + case ARG_ARRAY_BIT | ARG_TYPE_BOOLEAN: r_type = Variant::ARRAY; break; + case ARG_ARRAY_BIT | ARG_TYPE_BYTE: + r_type = Variant::POOL_BYTE_ARRAY; + likelyhood = 1.0; + break; + case ARG_ARRAY_BIT | ARG_TYPE_CHAR: + r_type = Variant::POOL_BYTE_ARRAY; + likelyhood = 0.5; + break; + case ARG_ARRAY_BIT | ARG_TYPE_SHORT: + r_type = Variant::POOL_INT_ARRAY; + likelyhood = 0.3; + break; + case ARG_ARRAY_BIT | ARG_TYPE_INT: + r_type = Variant::POOL_INT_ARRAY; + likelyhood = 1.0; + break; + case ARG_ARRAY_BIT | ARG_TYPE_LONG: + r_type = Variant::POOL_INT_ARRAY; + likelyhood = 0.5; + break; + case ARG_ARRAY_BIT | ARG_TYPE_FLOAT: + r_type = Variant::POOL_REAL_ARRAY; + likelyhood = 1.0; + break; + case ARG_ARRAY_BIT | ARG_TYPE_DOUBLE: + r_type = Variant::POOL_REAL_ARRAY; + likelyhood = 0.5; + break; + case ARG_ARRAY_BIT | ARG_TYPE_STRING: r_type = Variant::POOL_STRING_ARRAY; break; + case ARG_ARRAY_BIT | ARG_TYPE_CLASS: r_type = Variant::ARRAY; break; } } - _FORCE_INLINE_ static bool _convert_object_to_variant(JNIEnv * env, jobject obj, Variant& var,uint32_t p_sig); + _FORCE_INLINE_ static bool _convert_object_to_variant(JNIEnv *env, jobject obj, Variant &var, uint32_t p_sig); + bool _call_method(JavaObject *p_instance, const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error, Variant &ret); - - bool _call_method(JavaObject* p_instance,const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error,Variant& ret); - -friend class JavaClassWrapper; - Map<StringName,List<MethodInfo> > methods; + friend class JavaClassWrapper; + Map<StringName, List<MethodInfo> > methods; jclass _class; public: - - virtual Variant call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error); + virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error); JavaClass(); - }; - class JavaObject : public Reference { - GDCLASS(JavaObject,Reference); + GDCLASS(JavaObject, Reference); Ref<JavaClass> base_class; -friend class JavaClass; + friend class JavaClass; jobject instance; public: + virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error); - virtual Variant call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error); - - JavaObject(const Ref<JavaClass>& p_base,jobject *p_instance); + JavaObject(const Ref<JavaClass> &p_base, jobject *p_instance); ~JavaObject(); - }; - class JavaClassWrapper : public Object { - GDCLASS(JavaClassWrapper,Object); + GDCLASS(JavaClassWrapper, Object); - - Map<String,Ref<JavaClass> > class_cache; -friend class JavaClass; + Map<String, Ref<JavaClass> > class_cache; + friend class JavaClass; jclass activityClass; jmethodID findClass; jmethodID getDeclaredMethods; @@ -177,20 +208,19 @@ friend class JavaClass; jmethodID Double_doubleValue; jobject classLoader; - bool _get_type_sig(JNIEnv *env, jobject obj, uint32_t& sig, String&strsig); + bool _get_type_sig(JNIEnv *env, jobject obj, uint32_t &sig, String &strsig); static JavaClassWrapper *singleton; protected: - static void _bind_methods(); -public: +public: static JavaClassWrapper *get_singleton() { return singleton; } - Ref<JavaClass> wrap(const String& p_class); + Ref<JavaClass> wrap(const String &p_class); - JavaClassWrapper(jobject p_activity=NULL); + JavaClassWrapper(jobject p_activity = NULL); }; #endif // JAVA_CLASS_WRAPPER_H diff --git a/platform/android/java_glue.cpp b/platform/android/java_glue.cpp index 41558cf86a..4016b44434 100644 --- a/platform/android/java_glue.cpp +++ b/platform/android/java_glue.cpp @@ -29,38 +29,35 @@ #ifndef ANDROID_NATIVE_ACTIVITY #include "java_glue.h" -#include "os_android.h" -#include "main/main.h" -#include <unistd.h> -#include "file_access_jandroid.h" -#include "file_access_android.h" -#include "dir_access_jandroid.h" +#include "android/asset_manager_jni.h" #include "audio_driver_jandroid.h" -#include "global_config.h" -#include "thread_jandroid.h" #include "core/os/keyboard.h" +#include "dir_access_jandroid.h" +#include "file_access_android.h" +#include "file_access_jandroid.h" +#include "global_config.h" #include "java_class_wrapper.h" -#include "android/asset_manager_jni.h" #include "main/input_default.h" +#include "main/main.h" +#include "os_android.h" +#include "thread_jandroid.h" +#include <unistd.h> -static JavaClassWrapper *java_class_wrapper=NULL; -static OS_Android *os_android=NULL; - +static JavaClassWrapper *java_class_wrapper = NULL; +static OS_Android *os_android = NULL; struct jvalret { jobject obj; jvalue val; - jvalret() { obj=NULL; } - - + jvalret() { obj = NULL; } }; -jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_arg, bool force_jobject = false) { +jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_arg, bool force_jobject = false) { jvalret v; - switch(p_type) { + switch (p_type) { case Variant::BOOL: { @@ -71,11 +68,10 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_a val.z = (bool)(*p_arg); jobject obj = env->NewObjectA(bclass, ctor, &val); v.val.l = obj; - v.obj=obj; + v.obj = obj; env->DeleteLocalRef(bclass); } else { - v.val.z=*p_arg; - + v.val.z = *p_arg; }; } break; case Variant::INT: { @@ -88,12 +84,11 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_a val.i = (int)(*p_arg); jobject obj = env->NewObjectA(bclass, ctor, &val); v.val.l = obj; - v.obj=obj; + v.obj = obj; env->DeleteLocalRef(bclass); } else { - v.val.i=*p_arg; - + v.val.i = *p_arg; }; } break; case Variant::REAL: { @@ -106,33 +101,33 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_a val.d = (double)(*p_arg); jobject obj = env->NewObjectA(bclass, ctor, &val); v.val.l = obj; - v.obj=obj; + v.obj = obj; env->DeleteLocalRef(bclass); } else { - v.val.f=*p_arg; + v.val.f = *p_arg; }; } break; case Variant::STRING: { String s = *p_arg; jstring jStr = env->NewStringUTF(s.utf8().get_data()); - v.val.l=jStr; - v.obj=jStr; + v.val.l = jStr; + v.obj = jStr; } break; case Variant::POOL_STRING_ARRAY: { PoolVector<String> sarray = *p_arg; - jobjectArray arr = env->NewObjectArray(sarray.size(),env->FindClass("java/lang/String"),env->NewStringUTF("")); + jobjectArray arr = env->NewObjectArray(sarray.size(), env->FindClass("java/lang/String"), env->NewStringUTF("")); - for(int j=0;j<sarray.size();j++) { + for (int j = 0; j < sarray.size(); j++) { - jstring str = env->NewStringUTF( sarray[j].utf8().get_data() ); - env->SetObjectArrayElement(arr,j,str); + jstring str = env->NewStringUTF(sarray[j].utf8().get_data()); + env->SetObjectArrayElement(arr, j, str); env->DeleteLocalRef(str); } - v.val.l=arr; - v.obj=arr; + v.val.l = arr; + v.obj = arr; } break; @@ -146,7 +141,7 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_a Array keys = dict.keys(); jobjectArray jkeys = env->NewObjectArray(keys.size(), env->FindClass("java/lang/String"), env->NewStringUTF("")); - for (int j=0; j<keys.size(); j++) { + for (int j = 0; j < keys.size(); j++) { jstring str = env->NewStringUTF(String(keys[j]).utf8().get_data()); env->SetObjectArrayElement(jkeys, j, str); env->DeleteLocalRef(str); @@ -160,7 +155,7 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_a jobjectArray jvalues = env->NewObjectArray(keys.size(), env->FindClass("java/lang/Object"), NULL); - for (int j=0; j<keys.size(); j++) { + for (int j = 0; j < keys.size(); j++) { Variant var = dict[keys[j]]; jvalret v = _variant_to_jvalue(env, var.get_type(), &var, true); env->SetObjectArrayElement(jvalues, j, v.val.l); @@ -176,7 +171,7 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_a env->DeleteLocalRef(dclass); v.val.l = jdict; - v.obj=jdict; + v.obj = jdict; } break; case Variant::POOL_INT_ARRAY: { @@ -184,18 +179,18 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_a PoolVector<int> array = *p_arg; jintArray arr = env->NewIntArray(array.size()); PoolVector<int>::Read r = array.read(); - env->SetIntArrayRegion(arr,0,array.size(),r.ptr()); - v.val.l=arr; - v.obj=arr; + env->SetIntArrayRegion(arr, 0, array.size(), r.ptr()); + v.val.l = arr; + v.obj = arr; } break; case Variant::POOL_BYTE_ARRAY: { PoolVector<uint8_t> array = *p_arg; jbyteArray arr = env->NewByteArray(array.size()); PoolVector<uint8_t>::Read r = array.read(); - env->SetByteArrayRegion(arr,0,array.size(),reinterpret_cast<const signed char*>(r.ptr())); - v.val.l=arr; - v.obj=arr; + env->SetByteArrayRegion(arr, 0, array.size(), reinterpret_cast<const signed char *>(r.ptr())); + v.val.l = arr; + v.obj = arr; } break; case Variant::POOL_REAL_ARRAY: { @@ -203,57 +198,53 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_a PoolVector<float> array = *p_arg; jfloatArray arr = env->NewFloatArray(array.size()); PoolVector<float>::Read r = array.read(); - env->SetFloatArrayRegion(arr,0,array.size(),r.ptr()); - v.val.l=arr; - v.obj=arr; + env->SetFloatArrayRegion(arr, 0, array.size(), r.ptr()); + v.val.l = arr; + v.obj = arr; } break; default: { v.val.i = 0; } break; - } return v; } -String _get_class_name(JNIEnv * env, jclass cls, bool* array) { +String _get_class_name(JNIEnv *env, jclass cls, bool *array) { jclass cclass = env->FindClass("java/lang/Class"); jmethodID getName = env->GetMethodID(cclass, "getName", "()Ljava/lang/String;"); - jstring clsName=(jstring) env->CallObjectMethod(cls, getName); + jstring clsName = (jstring)env->CallObjectMethod(cls, getName); if (array) { jmethodID isArray = env->GetMethodID(cclass, "isArray", "()Z"); jboolean isarr = env->CallBooleanMethod(cls, isArray); (*array) = isarr ? true : false; } - String name = env->GetStringUTFChars( clsName, NULL ); + String name = env->GetStringUTFChars(clsName, NULL); env->DeleteLocalRef(clsName); return name; - } - -Variant _jobject_to_variant(JNIEnv * env, jobject obj) { +Variant _jobject_to_variant(JNIEnv *env, jobject obj) { if (obj == NULL) { return Variant(); } - + jclass c = env->GetObjectClass(obj); bool array; String name = _get_class_name(env, c, &array); //print_line("name is " + name + ", array "+Variant(array)); - print_line("ARGNAME: "+name); + print_line("ARGNAME: " + name); if (name == "java.lang.String") { - return String::utf8(env->GetStringUTFChars( (jstring)obj, NULL )); + return String::utf8(env->GetStringUTFChars((jstring)obj, NULL)); }; - if (name == "[Ljava.lang.String;") { jobjectArray arr = (jobjectArray)obj; @@ -261,11 +252,10 @@ Variant _jobject_to_variant(JNIEnv * env, jobject obj) { //print_line("String array! " + String::num(stringCount)); PoolVector<String> sarr; - for (int i=0; i<stringCount; i++) { - jstring string = (jstring) env->GetObjectArrayElement(arr, i); + for (int i = 0; i < stringCount; i++) { + jstring string = (jstring)env->GetObjectArrayElement(arr, i); sarr.push_back(String::utf8(env->GetStringUTFChars(string, NULL))); env->DeleteLocalRef(string); - } return sarr; @@ -294,7 +284,7 @@ Variant _jobject_to_variant(JNIEnv * env, jobject obj) { sarr.resize(fCount); PoolVector<int>::Write w = sarr.write(); - env->GetIntArrayRegion(arr,0,fCount,w.ptr()); + env->GetIntArrayRegion(arr, 0, fCount, w.ptr()); w = PoolVector<int>::Write(); return sarr; }; @@ -307,7 +297,7 @@ Variant _jobject_to_variant(JNIEnv * env, jobject obj) { sarr.resize(fCount); PoolVector<uint8_t>::Write w = sarr.write(); - env->GetByteArrayRegion(arr,0,fCount,reinterpret_cast<signed char*>(w.ptr())); + env->GetByteArrayRegion(arr, 0, fCount, reinterpret_cast<signed char *>(w.ptr())); w = PoolVector<uint8_t>::Write(); return sarr; }; @@ -329,12 +319,11 @@ Variant _jobject_to_variant(JNIEnv * env, jobject obj) { PoolRealArray::Write w = sarr.write(); - for (int i=0; i<fCount; i++) { + for (int i = 0; i < fCount; i++) { double n; env->GetDoubleArrayRegion(arr, i, 1, &n); w.ptr()[i] = n; - }; return sarr; }; @@ -346,38 +335,34 @@ Variant _jobject_to_variant(JNIEnv * env, jobject obj) { PoolRealArray sarr; sarr.resize(fCount); - PoolRealArray::Write w = sarr.write(); - for (int i=0; i<fCount; i++) { + for (int i = 0; i < fCount; i++) { float n; env->GetFloatArrayRegion(arr, i, 1, &n); w.ptr()[i] = n; - }; return sarr; }; - if (name == "[Ljava.lang.Object;") { jobjectArray arr = (jobjectArray)obj; int objCount = env->GetArrayLength(arr); Array varr(true); - for (int i=0; i<objCount; i++) { + for (int i = 0; i < objCount; i++) { jobject jobj = env->GetObjectArrayElement(arr, i); Variant v = _jobject_to_variant(env, jobj); varr.push_back(v); env->DeleteLocalRef(jobj); - } return varr; }; - if (name == "java.util.HashMap" || name == "org.godotengine.godot.Dictionary") { + if (name == "java.util.HashMap" || name == "org.godotengine.godot.Dictionary") { Dictionary ret(true); jclass oclass = c; @@ -394,12 +379,11 @@ Variant _jobject_to_variant(JNIEnv * env, jobject obj) { env->DeleteLocalRef(arr); //print_line("adding " + String::num(keys.size()) + " to Dictionary!"); - for (int i=0; i<keys.size(); i++) { + for (int i = 0; i < keys.size(); i++) { ret[keys[i]] = vals[i]; }; - return ret; }; @@ -410,84 +394,77 @@ Variant _jobject_to_variant(JNIEnv * env, jobject obj) { class JNISingleton : public Object { - GDCLASS( JNISingleton, Object ); - + GDCLASS(JNISingleton, Object); struct MethodData { - jmethodID method; Variant::Type ret_type; Vector<Variant::Type> argtypes; }; jobject instance; - Map<StringName,MethodData> method_map; + Map<StringName, MethodData> method_map; public: - - virtual Variant call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error) { + virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { //print_line("attempt to call "+String(p_method)); - ERR_FAIL_COND_V(!instance,Variant()); + ERR_FAIL_COND_V(!instance, Variant()); - r_error.error=Variant::CallError::CALL_OK; + r_error.error = Variant::CallError::CALL_OK; - Map<StringName,MethodData >::Element *E=method_map.find(p_method); + Map<StringName, MethodData>::Element *E = method_map.find(p_method); if (!E) { print_line("no exists"); - r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD; + r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; return Variant(); } - - int ac = E->get().argtypes.size(); - if (ac<p_argcount) { + if (ac < p_argcount) { print_line("fewargs"); - r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; - r_error.argument=ac; + r_error.error = Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument = ac; return Variant(); } - if (ac>p_argcount) { + if (ac > p_argcount) { print_line("manyargs"); - r_error.error=Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS; - r_error.argument=ac; + r_error.error = Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS; + r_error.argument = ac; return Variant(); } + for (int i = 0; i < p_argcount; i++) { - for(int i=0;i<p_argcount;i++) { + if (!Variant::can_convert(p_args[i]->get_type(), E->get().argtypes[i])) { - if (!Variant::can_convert(p_args[i]->get_type(),E->get().argtypes[i])) { - - r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; - r_error.argument=i; - r_error.expected=E->get().argtypes[i]; + r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument = i; + r_error.expected = E->get().argtypes[i]; } } - - jvalue *v=NULL; + jvalue *v = NULL; if (p_argcount) { - v=(jvalue*)alloca( sizeof(jvalue)*p_argcount ); + v = (jvalue *)alloca(sizeof(jvalue) * p_argcount); } JNIEnv *env = ThreadAndroid::get_env(); int res = env->PushLocalFrame(16); - ERR_FAIL_COND_V(res!=0,Variant()); + 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++) { + for (int i = 0; i < p_argcount; i++) { jvalret vr = _variant_to_jvalue(env, E->get().argtypes[i], p_args[i]); v[i] = vr.val; @@ -499,37 +476,36 @@ public: Variant ret; - switch(E->get().ret_type) { + switch (E->get().ret_type) { case Variant::NIL: { - //print_line("call void"); - env->CallVoidMethodA(instance,E->get().method,v); + env->CallVoidMethodA(instance, E->get().method, v); } break; case Variant::BOOL: { - ret = env->CallBooleanMethodA(instance,E->get().method,v)==JNI_TRUE; + ret = env->CallBooleanMethodA(instance, E->get().method, v) == JNI_TRUE; //print_line("call bool"); } break; case Variant::INT: { - ret = env->CallIntMethodA(instance,E->get().method,v); + ret = env->CallIntMethodA(instance, E->get().method, v); //print_line("call int"); } break; case Variant::REAL: { - ret = env->CallFloatMethodA(instance,E->get().method,v); + ret = env->CallFloatMethodA(instance, E->get().method, v); } break; case Variant::STRING: { - jobject o = env->CallObjectMethodA(instance,E->get().method,v); + jobject o = env->CallObjectMethodA(instance, E->get().method, v); ret = String::utf8(env->GetStringUTFChars((jstring)o, NULL)); env->DeleteLocalRef(o); } break; case Variant::POOL_STRING_ARRAY: { - jobjectArray arr = (jobjectArray)env->CallObjectMethodA(instance,E->get().method,v); + jobjectArray arr = (jobjectArray)env->CallObjectMethodA(instance, E->get().method, v); ret = _jobject_to_variant(env, arr); @@ -537,30 +513,30 @@ public: } break; case Variant::POOL_INT_ARRAY: { - jintArray arr = (jintArray)env->CallObjectMethodA(instance,E->get().method,v); + jintArray arr = (jintArray)env->CallObjectMethodA(instance, E->get().method, v); int fCount = env->GetArrayLength(arr); PoolVector<int> sarr; sarr.resize(fCount); PoolVector<int>::Write w = sarr.write(); - env->GetIntArrayRegion(arr,0,fCount,w.ptr()); + env->GetIntArrayRegion(arr, 0, fCount, w.ptr()); w = PoolVector<int>::Write(); - ret=sarr; + ret = sarr; env->DeleteLocalRef(arr); } break; case Variant::POOL_REAL_ARRAY: { - jfloatArray arr = (jfloatArray)env->CallObjectMethodA(instance,E->get().method,v); + jfloatArray arr = (jfloatArray)env->CallObjectMethodA(instance, E->get().method, v); int fCount = env->GetArrayLength(arr); PoolVector<float> sarr; sarr.resize(fCount); PoolVector<float>::Write w = sarr.write(); - env->GetFloatArrayRegion(arr,0,fCount,w.ptr()); + env->GetFloatArrayRegion(arr, 0, fCount, w.ptr()); w = PoolVector<float>::Write(); - ret=sarr; + ret = sarr; env->DeleteLocalRef(arr); } break; @@ -574,7 +550,6 @@ public: } break; default: { - print_line("failure.."); env->PopLocalFrame(NULL); ERR_FAIL_V(Variant()); @@ -592,42 +567,35 @@ public: return ret; } - jobject get_instance() const { return instance; } void set_instance(jobject p_instance) { - instance=p_instance; + instance = p_instance; } - - void add_method(const StringName& p_name, jmethodID p_method,const Vector<Variant::Type>& p_args, Variant::Type p_ret_type) { + void add_method(const StringName &p_name, jmethodID p_method, const Vector<Variant::Type> &p_args, Variant::Type p_ret_type) { MethodData md; - md.method=p_method; - md.argtypes=p_args; - md.ret_type=p_ret_type; - method_map[p_name]=md; - + md.method = p_method; + md.argtypes = p_args; + md.ret_type = p_ret_type; + method_map[p_name] = md; } - JNISingleton() { - instance=NULL; - + instance = NULL; } - }; - struct TST { int a; TST() { - a=5; + a = 5; } }; @@ -643,114 +611,111 @@ struct JAndroidPointerEvent { static List<JAndroidPointerEvent> pointer_events; static List<InputEvent> key_events; static List<OS_Android::JoypadEvent> joy_events; -static bool initialized=false; -static Mutex *input_mutex=NULL; -static Mutex *suspend_mutex=NULL; -static int step=0; -static bool resized=false; -static bool resized_reload=false; -static bool go_back_request=false; +static bool initialized = false; +static Mutex *input_mutex = NULL; +static Mutex *suspend_mutex = NULL; +static int step = 0; +static bool resized = false; +static bool resized_reload = false; +static bool go_back_request = false; static Size2 new_size; static Vector3 accelerometer; static Vector3 magnetometer; static Vector3 gyroscope; -static HashMap<String,JNISingleton*> jni_singletons; +static HashMap<String, JNISingleton *> jni_singletons; static jobject godot_io; static Vector<int> joy_device_ids; -typedef void (*GFXInitFunc)(void *ud,bool gl2); +typedef void (*GFXInitFunc)(void *ud, bool gl2); -static jmethodID _on_video_init=0; +static jmethodID _on_video_init = 0; static jobject _godot_instance; -static jmethodID _openURI=0; -static jmethodID _getDataDir=0; -static jmethodID _getLocale=0; -static jmethodID _getModel=0; -static jmethodID _getScreenDPI=0; -static jmethodID _showKeyboard=0; -static jmethodID _hideKeyboard=0; -static jmethodID _setScreenOrientation=0; -static jmethodID _getUniqueID=0; -static jmethodID _getSystemDir=0; -static jmethodID _playVideo=0; -static jmethodID _isVideoPlaying=0; -static jmethodID _pauseVideo=0; -static jmethodID _stopVideo=0; -static jmethodID _setKeepScreenOn=0; -static jmethodID _alertDialog=0; - -static void _gfx_init_func(void* ud, bool gl2) { - +static jmethodID _openURI = 0; +static jmethodID _getDataDir = 0; +static jmethodID _getLocale = 0; +static jmethodID _getModel = 0; +static jmethodID _getScreenDPI = 0; +static jmethodID _showKeyboard = 0; +static jmethodID _hideKeyboard = 0; +static jmethodID _setScreenOrientation = 0; +static jmethodID _getUniqueID = 0; +static jmethodID _getSystemDir = 0; +static jmethodID _playVideo = 0; +static jmethodID _isVideoPlaying = 0; +static jmethodID _pauseVideo = 0; +static jmethodID _stopVideo = 0; +static jmethodID _setKeepScreenOn = 0; +static jmethodID _alertDialog = 0; + +static void _gfx_init_func(void *ud, bool gl2) { } - -static int _open_uri(const String& p_uri) { +static int _open_uri(const String &p_uri) { JNIEnv *env = ThreadAndroid::get_env(); jstring jStr = env->NewStringUTF(p_uri.utf8().get_data()); - return env->CallIntMethod(godot_io,_openURI,jStr) ; + return env->CallIntMethod(godot_io, _openURI, jStr); } static String _get_data_dir() { JNIEnv *env = ThreadAndroid::get_env(); - jstring s =(jstring)env->CallObjectMethod(godot_io,_getDataDir); - return String(env->GetStringUTFChars( s, NULL )); + jstring s = (jstring)env->CallObjectMethod(godot_io, _getDataDir); + return String(env->GetStringUTFChars(s, NULL)); } static String _get_locale() { JNIEnv *env = ThreadAndroid::get_env(); - jstring s =(jstring)env->CallObjectMethod(godot_io,_getLocale); - return String(env->GetStringUTFChars( s, NULL )); + jstring s = (jstring)env->CallObjectMethod(godot_io, _getLocale); + return String(env->GetStringUTFChars(s, NULL)); } static String _get_model() { - JNIEnv *env = ThreadAndroid::get_env(); - jstring s =(jstring)env->CallObjectMethod(godot_io,_getModel); - return String(env->GetStringUTFChars( s, NULL )); + JNIEnv *env = ThreadAndroid::get_env(); + jstring s = (jstring)env->CallObjectMethod(godot_io, _getModel); + return String(env->GetStringUTFChars(s, NULL)); } static int _get_screen_dpi() { JNIEnv *env = ThreadAndroid::get_env(); - return env->CallIntMethod(godot_io,_getScreenDPI); + return env->CallIntMethod(godot_io, _getScreenDPI); } static String _get_unique_id() { - JNIEnv *env = ThreadAndroid::get_env(); - jstring s =(jstring)env->CallObjectMethod(godot_io,_getUniqueID); - return String(env->GetStringUTFChars( s, NULL )); + JNIEnv *env = ThreadAndroid::get_env(); + jstring s = (jstring)env->CallObjectMethod(godot_io, _getUniqueID); + return String(env->GetStringUTFChars(s, NULL)); } -static void _show_vk(const String& p_existing) { +static void _show_vk(const String &p_existing) { - JNIEnv* env = ThreadAndroid::get_env(); + JNIEnv *env = ThreadAndroid::get_env(); jstring jStr = env->NewStringUTF(p_existing.utf8().get_data()); env->CallVoidMethod(godot_io, _showKeyboard, jStr); } static void _set_screen_orient(int p_orient) { - JNIEnv* env = ThreadAndroid::get_env(); - env->CallVoidMethod(godot_io, _setScreenOrientation, p_orient ); + JNIEnv *env = ThreadAndroid::get_env(); + env->CallVoidMethod(godot_io, _setScreenOrientation, p_orient); } static String _get_system_dir(int p_dir) { JNIEnv *env = ThreadAndroid::get_env(); - jstring s =(jstring)env->CallObjectMethod(godot_io,_getSystemDir,p_dir); - return String(env->GetStringUTFChars( s, NULL )); + jstring s = (jstring)env->CallObjectMethod(godot_io, _getSystemDir, p_dir); + return String(env->GetStringUTFChars(s, NULL)); } - static void _hide_vk() { - JNIEnv* env = ThreadAndroid::get_env(); + JNIEnv *env = ThreadAndroid::get_env(); env->CallVoidMethod(godot_io, _hideKeyboard); } @@ -759,52 +724,50 @@ static void _hide_vk() { // virtual void native_video_pause(); // virtual void native_video_stop(); -static void _play_video(const String& p_path) { - +static void _play_video(const String &p_path) { } static bool _is_video_playing() { - JNIEnv* env = ThreadAndroid::get_env(); + JNIEnv *env = ThreadAndroid::get_env(); return env->CallBooleanMethod(godot_io, _isVideoPlaying); //return false; } static void _pause_video() { - JNIEnv* env = ThreadAndroid::get_env(); + JNIEnv *env = ThreadAndroid::get_env(); env->CallVoidMethod(godot_io, _pauseVideo); } static void _stop_video() { - JNIEnv* env = ThreadAndroid::get_env(); + JNIEnv *env = ThreadAndroid::get_env(); env->CallVoidMethod(godot_io, _stopVideo); } static void _set_keep_screen_on(bool p_enabled) { - JNIEnv* env = ThreadAndroid::get_env(); + JNIEnv *env = ThreadAndroid::get_env(); env->CallVoidMethod(_godot_instance, _setKeepScreenOn, p_enabled); } -static void _alert(const String& p_message, const String& p_title) { - JNIEnv* env = ThreadAndroid::get_env(); +static void _alert(const String &p_message, const String &p_title) { + JNIEnv *env = ThreadAndroid::get_env(); jstring jStrMessage = env->NewStringUTF(p_message.utf8().get_data()); jstring jStrTitle = env->NewStringUTF(p_title.utf8().get_data()); env->CallVoidMethod(_godot_instance, _alertDialog, jStrMessage, jStrTitle); } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv * env, jobject obj, jobject activity,jboolean p_need_reload_hook, jobjectArray p_cmdline,jobject p_asset_manager) { - - __android_log_print(ANDROID_LOG_INFO,"godot","**INIT EVENT! - %p\n",env); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *env, jobject obj, jobject activity, jboolean p_need_reload_hook, jobjectArray p_cmdline, jobject p_asset_manager) { + __android_log_print(ANDROID_LOG_INFO, "godot", "**INIT EVENT! - %p\n", env); - initialized=true; + initialized = true; JavaVM *jvm; env->GetJavaVM(&jvm); - _godot_instance=env->NewGlobalRef(activity); + _godot_instance = env->NewGlobalRef(activity); //_godot_instance=activity; - __android_log_print(ANDROID_LOG_INFO,"godot","***************** HELLO FROM JNI!!!!!!!!"); + __android_log_print(ANDROID_LOG_INFO, "godot", "***************** HELLO FROM JNI!!!!!!!!"); { //setup IO Object @@ -812,41 +775,41 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv * e jclass cls = env->FindClass("org/godotengine/godot/Godot"); if (cls) { - cls=(jclass)env->NewGlobalRef(cls); - __android_log_print(ANDROID_LOG_INFO,"godot","*******CLASS FOUND!!!"); + cls = (jclass)env->NewGlobalRef(cls); + __android_log_print(ANDROID_LOG_INFO, "godot", "*******CLASS FOUND!!!"); } - __android_log_print(ANDROID_LOG_INFO,"godot","STEP2, %p",cls); + __android_log_print(ANDROID_LOG_INFO, "godot", "STEP2, %p", cls); jfieldID fid = env->GetStaticFieldID(cls, "io", "Lorg/godotengine/godot/GodotIO;"); - __android_log_print(ANDROID_LOG_INFO,"godot","STEP3 %i",fid); - jobject ob = env->GetStaticObjectField(cls,fid); - __android_log_print(ANDROID_LOG_INFO,"godot","STEP4, %p",ob); + __android_log_print(ANDROID_LOG_INFO, "godot", "STEP3 %i", fid); + jobject ob = env->GetStaticObjectField(cls, fid); + __android_log_print(ANDROID_LOG_INFO, "godot", "STEP4, %p", ob); jobject gob = env->NewGlobalRef(ob); - __android_log_print(ANDROID_LOG_INFO,"godot","STEP4.5, %p",gob); - godot_io=gob; + __android_log_print(ANDROID_LOG_INFO, "godot", "STEP4.5, %p", gob); + godot_io = gob; _on_video_init = env->GetMethodID(cls, "onVideoInit", "(Z)V"); - _setKeepScreenOn = env->GetMethodID(cls,"setKeepScreenOn","(Z)V"); - _alertDialog = env->GetMethodID(cls,"alert","(Ljava/lang/String;Ljava/lang/String;)V"); + _setKeepScreenOn = env->GetMethodID(cls, "setKeepScreenOn", "(Z)V"); + _alertDialog = env->GetMethodID(cls, "alert", "(Ljava/lang/String;Ljava/lang/String;)V"); jclass clsio = env->FindClass("org/godotengine/godot/Godot"); if (cls) { jclass c = env->GetObjectClass(gob); - _openURI = env->GetMethodID(c,"openURI","(Ljava/lang/String;)I"); - _getDataDir = env->GetMethodID(c,"getDataDir","()Ljava/lang/String;"); - _getLocale = env->GetMethodID(c,"getLocale","()Ljava/lang/String;"); - _getModel = env->GetMethodID(c,"getModel","()Ljava/lang/String;"); - _getScreenDPI = env->GetMethodID(c, "getScreenDPI","()I"); - _getUniqueID = env->GetMethodID(c,"getUniqueID","()Ljava/lang/String;"); - _showKeyboard = env->GetMethodID(c,"showKeyboard","(Ljava/lang/String;)V"); - _hideKeyboard = env->GetMethodID(c,"hideKeyboard","()V"); - _setScreenOrientation = env->GetMethodID(c,"setScreenOrientation","(I)V"); - _getSystemDir = env->GetMethodID(c,"getSystemDir","(I)Ljava/lang/String;"); - _playVideo = env->GetMethodID(c,"playVideo","(Ljava/lang/String;)V"); - _isVideoPlaying = env->GetMethodID(c,"isVideoPlaying","()Z"); - _pauseVideo = env->GetMethodID(c,"pauseVideo","()V"); - _stopVideo = env->GetMethodID(c,"stopVideo","()V"); + _openURI = env->GetMethodID(c, "openURI", "(Ljava/lang/String;)I"); + _getDataDir = env->GetMethodID(c, "getDataDir", "()Ljava/lang/String;"); + _getLocale = env->GetMethodID(c, "getLocale", "()Ljava/lang/String;"); + _getModel = env->GetMethodID(c, "getModel", "()Ljava/lang/String;"); + _getScreenDPI = env->GetMethodID(c, "getScreenDPI", "()I"); + _getUniqueID = env->GetMethodID(c, "getUniqueID", "()Ljava/lang/String;"); + _showKeyboard = env->GetMethodID(c, "showKeyboard", "(Ljava/lang/String;)V"); + _hideKeyboard = env->GetMethodID(c, "hideKeyboard", "()V"); + _setScreenOrientation = env->GetMethodID(c, "setScreenOrientation", "(I)V"); + _getSystemDir = env->GetMethodID(c, "getSystemDir", "(I)Ljava/lang/String;"); + _playVideo = env->GetMethodID(c, "playVideo", "(Ljava/lang/String;)V"); + _isVideoPlaying = env->GetMethodID(c, "isVideoPlaying", "()Z"); + _pauseVideo = env->GetMethodID(c, "pauseVideo", "()V"); + _stopVideo = env->GetMethodID(c, "stopVideo", "()V"); } ThreadAndroid::make_default(jvm); @@ -856,89 +819,84 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv * e jobject amgr = env->NewGlobalRef(p_asset_manager); - FileAccessAndroid::asset_manager=AAssetManager_fromJava(env,amgr); + FileAccessAndroid::asset_manager = AAssetManager_fromJava(env, amgr); #endif DirAccessJAndroid::setup(gob); AudioDriverAndroid::setup(gob); } - - const char ** cmdline=NULL; - int cmdlen=0; - bool use_apk_expansion=false; + const char **cmdline = NULL; + int cmdlen = 0; + bool use_apk_expansion = false; if (p_cmdline) { cmdlen = env->GetArrayLength(p_cmdline); if (cmdlen) { - cmdline = (const char**)malloc((env->GetArrayLength(p_cmdline)+1)*sizeof(const char*)); - cmdline[cmdlen]=NULL; + cmdline = (const char **)malloc((env->GetArrayLength(p_cmdline) + 1) * sizeof(const char *)); + cmdline[cmdlen] = NULL; - for (int i=0; i<cmdlen; i++) { + for (int i = 0; i < cmdlen; i++) { - jstring string = (jstring) env->GetObjectArrayElement(p_cmdline, i); + jstring string = (jstring)env->GetObjectArrayElement(p_cmdline, i); const char *rawString = env->GetStringUTFChars(string, 0); if (!rawString) { - __android_log_print(ANDROID_LOG_INFO,"godot","cmdline arg %i is null\n",i); + __android_log_print(ANDROID_LOG_INFO, "godot", "cmdline arg %i is null\n", i); } else { //__android_log_print(ANDROID_LOG_INFO,"godot","cmdline arg %i is: %s\n",i,rawString); - if (strcmp(rawString,"-main_pack")==0) - use_apk_expansion=true; + if (strcmp(rawString, "-main_pack") == 0) + use_apk_expansion = true; } - cmdline[i]=rawString; + cmdline[i] = rawString; } } } - __android_log_print(ANDROID_LOG_INFO,"godot","CMDLINE LEN %i - APK EXPANSION %I\n",cmdlen,int(use_apk_expansion)); + __android_log_print(ANDROID_LOG_INFO, "godot", "CMDLINE LEN %i - APK EXPANSION %I\n", cmdlen, int(use_apk_expansion)); - os_android = new OS_Android(_gfx_init_func,env,_open_uri,_get_data_dir,_get_locale, _get_model, _get_screen_dpi, _show_vk, _hide_vk,_set_screen_orient,_get_unique_id, _get_system_dir, _play_video,_is_video_playing, _pause_video, _stop_video, _set_keep_screen_on, _alert, use_apk_expansion); + os_android = new OS_Android(_gfx_init_func, env, _open_uri, _get_data_dir, _get_locale, _get_model, _get_screen_dpi, _show_vk, _hide_vk, _set_screen_orient, _get_unique_id, _get_system_dir, _play_video, _is_video_playing, _pause_video, _stop_video, _set_keep_screen_on, _alert, use_apk_expansion); os_android->set_need_reload_hooks(p_need_reload_hook); char wd[500]; - getcwd(wd,500); + getcwd(wd, 500); - __android_log_print(ANDROID_LOG_INFO,"godot","test construction %i\n",tst.a); - __android_log_print(ANDROID_LOG_INFO,"godot","running from dir %s\n",wd); - - __android_log_print(ANDROID_LOG_INFO,"godot","**SETUP"); + __android_log_print(ANDROID_LOG_INFO, "godot", "test construction %i\n", tst.a); + __android_log_print(ANDROID_LOG_INFO, "godot", "running from dir %s\n", wd); + __android_log_print(ANDROID_LOG_INFO, "godot", "**SETUP"); #if 0 char *args[]={"-test","render",NULL}; __android_log_print(ANDROID_LOG_INFO,"godot","pre asdasd setup..."); Error err = Main::setup("apk",2,args,false); #else - Error err = Main::setup("apk",cmdlen,(char**)cmdline,false); + Error err = Main::setup("apk", cmdlen, (char **)cmdline, false); #endif - if (err!=OK) { - __android_log_print(ANDROID_LOG_INFO,"godot","*****UNABLE TO SETUP"); + if (err != OK) { + __android_log_print(ANDROID_LOG_INFO, "godot", "*****UNABLE TO SETUP"); return; //should exit instead and print the error } - __android_log_print(ANDROID_LOG_INFO,"godot","*****SETUP OK"); + __android_log_print(ANDROID_LOG_INFO, "godot", "*****SETUP OK"); //video driver is determined here, because once initialized, it cant be changed String vd = GlobalConfig::get_singleton()->get("display/driver"); + env->CallVoidMethod(_godot_instance, _on_video_init, (jboolean) true); - env->CallVoidMethod(_godot_instance, _on_video_init, (jboolean)true); - - __android_log_print(ANDROID_LOG_INFO,"godot","**START"); - - input_mutex=Mutex::create(); - suspend_mutex=Mutex::create(); - + __android_log_print(ANDROID_LOG_INFO, "godot", "**START"); + input_mutex = Mutex::create(); + suspend_mutex = Mutex::create(); } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv * env, jobject obj, jint width, jint height, jboolean reload) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, jobject obj, jint width, jint height, jboolean reload) { - __android_log_print(ANDROID_LOG_INFO,"godot","^_^_^_^_^ resize %lld, %i, %i\n",Thread::get_caller_ID(),width,height); + __android_log_print(ANDROID_LOG_INFO, "godot", "^_^_^_^_^ resize %lld, %i, %i\n", Thread::get_caller_ID(), width, height); if (os_android) - os_android->set_display_size(Size2(width,height)); + os_android->set_display_size(Size2(width, height)); /*input_mutex->lock(); resized=true; @@ -946,12 +904,11 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv * env, resized_reload=true; new_size=Size2(width,height); input_mutex->unlock();*/ - } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv * env, jobject obj,bool p_32_bits) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *env, jobject obj, bool p_32_bits) { - __android_log_print(ANDROID_LOG_INFO,"godot","^_^_^_^_^ newcontext %lld\n",Thread::get_caller_ID()); + __android_log_print(ANDROID_LOG_INFO, "godot", "^_^_^_^_^ newcontext %lld\n", Thread::get_caller_ID()); if (os_android) { os_android->set_context_is_16_bits(!p_32_bits); @@ -961,24 +918,21 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv * e os_android->reload_gfx(); } - } - -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv * env, jobject obj) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv *env, jobject obj) { input_mutex->lock(); - go_back_request=true; + go_back_request = true; input_mutex->unlock(); - } static void _initialize_java_modules() { String modules = GlobalConfig::get_singleton()->get("android/modules"); - Vector<String> mods = modules.split(",",false); - print_line("ANDROID MODULES : " + modules); - __android_log_print(ANDROID_LOG_INFO,"godot","mod count: %i",mods.size()); + Vector<String> mods = modules.split(",", false); + print_line("ANDROID MODULES : " + modules); + __android_log_print(ANDROID_LOG_INFO, "godot", "mod count: %i", mods.size()); if (mods.size()) { @@ -986,7 +940,7 @@ static void _initialize_java_modules() { jclass activityClass = env->FindClass("org/godotengine/godot/Godot"); - jmethodID getClassLoader = env->GetMethodID(activityClass,"getClassLoader", "()Ljava/lang/ClassLoader;"); + jmethodID getClassLoader = env->GetMethodID(activityClass, "getClassLoader", "()Ljava/lang/ClassLoader;"); jobject cls = env->CallObjectMethod(_godot_instance, getClassLoader); //cls=env->NewGlobalRef(cls); @@ -996,52 +950,43 @@ static void _initialize_java_modules() { jmethodID findClass = env->GetMethodID(classLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); - for (int i=0;i<mods.size();i++) { + for (int i = 0; i < mods.size(); i++) { String m = mods[i]; //jclass singletonClass = env->FindClass(m.utf8().get_data()); - print_line("LOADING MODULE: "+m); + print_line("LOADING MODULE: " + m); jstring strClassName = env->NewStringUTF(m.utf8().get_data()); jclass singletonClass = (jclass)env->CallObjectMethod(cls, findClass, strClassName); if (!singletonClass) { - ERR_EXPLAIN("Couldn't find singleton for class: "+m); + ERR_EXPLAIN("Couldn't find singleton for class: " + m); ERR_CONTINUE(!singletonClass); } //singletonClass=(jclass)env->NewGlobalRef(singletonClass); - __android_log_print(ANDROID_LOG_INFO,"godot","****^*^*?^*^*class data %x",singletonClass); + __android_log_print(ANDROID_LOG_INFO, "godot", "****^*^*?^*^*class data %x", singletonClass); jmethodID initialize = env->GetStaticMethodID(singletonClass, "initialize", "(Landroid/app/Activity;)Lorg/godotengine/godot/Godot$SingletonBase;"); if (!initialize) { - ERR_EXPLAIN("Couldn't find proper initialize function 'public static Godot.SingletonBase Class::initialize(Activity p_activity)' initializer for singleton class: "+m); + ERR_EXPLAIN("Couldn't find proper initialize function 'public static Godot.SingletonBase Class::initialize(Activity p_activity)' initializer for singleton class: " + m); ERR_CONTINUE(!initialize); - } - jobject obj = env->CallStaticObjectMethod(singletonClass,initialize,_godot_instance); - __android_log_print(ANDROID_LOG_INFO,"godot","****^*^*?^*^*class instance %x",obj); + jobject obj = env->CallStaticObjectMethod(singletonClass, initialize, _godot_instance); + __android_log_print(ANDROID_LOG_INFO, "godot", "****^*^*?^*^*class instance %x", obj); jobject gob = env->NewGlobalRef(obj); - - } - } - } - -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv * env, jobject obj) -{ - +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, jobject obj) { ThreadAndroid::setup_thread(); //__android_log_print(ANDROID_LOG_INFO,"godot","**STEP EVENT! - %p-%i\n",env,Thread::get_caller_ID()); - suspend_mutex->lock(); input_mutex->lock(); //first time step happens, initialize @@ -1049,8 +994,8 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv * env, jo // ugly hack to initialize the rest of the engine // because of the way android forces you to do everything with threads - java_class_wrapper = memnew( JavaClassWrapper(_godot_instance )); - GlobalConfig::get_singleton()->add_singleton(GlobalConfig::Singleton("JavaClassWrapper",java_class_wrapper)); + java_class_wrapper = memnew(JavaClassWrapper(_godot_instance)); + GlobalConfig::get_singleton()->add_singleton(GlobalConfig::Singleton("JavaClassWrapper", java_class_wrapper)); _initialize_java_modules(); Main::setup2(); @@ -1071,10 +1016,10 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv * env, jo ++step; } - while(pointer_events.size()) { + while (pointer_events.size()) { - JAndroidPointerEvent jpe=pointer_events.front()->get(); - os_android->process_touch(jpe.what,jpe.pointer,jpe.points); + JAndroidPointerEvent jpe = pointer_events.front()->get(); + os_android->process_touch(jpe.what, jpe.pointer, jpe.points); pointer_events.pop_front(); } @@ -1098,10 +1043,9 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv * env, jo if (go_back_request) { os_android->main_loop_request_go_back(); - go_back_request=false; + go_back_request = false; } - input_mutex->unlock(); os_android->process_accelerometer(accelerometer); @@ -1110,41 +1054,36 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv * env, jo os_android->process_gyroscope(gyroscope); - if (os_android->main_loop_iterate()==true) { + if (os_android->main_loop_iterate() == true) { jclass cls = env->FindClass("org/godotengine/godot/Godot"); jmethodID _finish = env->GetMethodID(cls, "forceQuit", "()V"); env->CallVoidMethod(_godot_instance, _finish); - __android_log_print(ANDROID_LOG_INFO,"godot","**FINISH REQUEST!!! - %p-%i\n",env,Thread::get_caller_ID()); - + __android_log_print(ANDROID_LOG_INFO, "godot", "**FINISH REQUEST!!! - %p-%i\n", env, Thread::get_caller_ID()); } suspend_mutex->unlock(); - } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch(JNIEnv * env, jobject obj, jint ev,jint pointer, jint count, jintArray positions) { - - +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch(JNIEnv *env, jobject obj, jint ev, jint pointer, jint count, jintArray positions) { //__android_log_print(ANDROID_LOG_INFO,"godot","**TOUCH EVENT! - %p-%i\n",env,Thread::get_caller_ID()); - Vector<OS_Android::TouchPos> points; - for(int i=0;i<count;i++) { + for (int i = 0; i < count; i++) { jint p[3]; - env->GetIntArrayRegion(positions,i*3,3,p); + env->GetIntArrayRegion(positions, i * 3, 3, p); OS_Android::TouchPos tp; - tp.pos=Point2(p[1],p[2]); - tp.id=p[0]; + tp.pos = Point2(p[1], p[2]); + tp.id = p[0]; points.push_back(tp); } JAndroidPointerEvent jpe; - jpe.pointer=pointer; - jpe.points=points; - jpe.what=ev; + jpe.pointer = pointer; + jpe.points = points; + jpe.what = ev; input_mutex->lock(); @@ -1155,127 +1094,126 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch(JNIEnv * env, j if (os_android) os_android->process_touch(ev,pointer,points); */ - } /* * Android Key codes. */ enum { - AKEYCODE_UNKNOWN = 0, - AKEYCODE_SOFT_LEFT = 1, - AKEYCODE_SOFT_RIGHT = 2, - AKEYCODE_HOME = 3, - AKEYCODE_BACK = 4, - AKEYCODE_CALL = 5, - AKEYCODE_ENDCALL = 6, - AKEYCODE_0 = 7, - AKEYCODE_1 = 8, - AKEYCODE_2 = 9, - AKEYCODE_3 = 10, - AKEYCODE_4 = 11, - AKEYCODE_5 = 12, - AKEYCODE_6 = 13, - AKEYCODE_7 = 14, - AKEYCODE_8 = 15, - AKEYCODE_9 = 16, - AKEYCODE_STAR = 17, - AKEYCODE_POUND = 18, - AKEYCODE_DPAD_UP = 19, - AKEYCODE_DPAD_DOWN = 20, - AKEYCODE_DPAD_LEFT = 21, - AKEYCODE_DPAD_RIGHT = 22, - AKEYCODE_DPAD_CENTER = 23, - AKEYCODE_VOLUME_UP = 24, - AKEYCODE_VOLUME_DOWN = 25, - AKEYCODE_POWER = 26, - AKEYCODE_CAMERA = 27, - AKEYCODE_CLEAR = 28, - AKEYCODE_A = 29, - AKEYCODE_B = 30, - AKEYCODE_C = 31, - AKEYCODE_D = 32, - AKEYCODE_E = 33, - AKEYCODE_F = 34, - AKEYCODE_G = 35, - AKEYCODE_H = 36, - AKEYCODE_I = 37, - AKEYCODE_J = 38, - AKEYCODE_K = 39, - AKEYCODE_L = 40, - AKEYCODE_M = 41, - AKEYCODE_N = 42, - AKEYCODE_O = 43, - AKEYCODE_P = 44, - AKEYCODE_Q = 45, - AKEYCODE_R = 46, - AKEYCODE_S = 47, - AKEYCODE_T = 48, - AKEYCODE_U = 49, - AKEYCODE_V = 50, - AKEYCODE_W = 51, - AKEYCODE_X = 52, - AKEYCODE_Y = 53, - AKEYCODE_Z = 54, - AKEYCODE_COMMA = 55, - AKEYCODE_PERIOD = 56, - AKEYCODE_ALT_LEFT = 57, - AKEYCODE_ALT_RIGHT = 58, - AKEYCODE_SHIFT_LEFT = 59, - AKEYCODE_SHIFT_RIGHT = 60, - AKEYCODE_TAB = 61, - AKEYCODE_SPACE = 62, - AKEYCODE_SYM = 63, - AKEYCODE_EXPLORER = 64, - AKEYCODE_ENVELOPE = 65, - AKEYCODE_ENTER = 66, - AKEYCODE_DEL = 67, - AKEYCODE_GRAVE = 68, - AKEYCODE_MINUS = 69, - AKEYCODE_EQUALS = 70, - AKEYCODE_LEFT_BRACKET = 71, - AKEYCODE_RIGHT_BRACKET = 72, - AKEYCODE_BACKSLASH = 73, - AKEYCODE_SEMICOLON = 74, - AKEYCODE_APOSTROPHE = 75, - AKEYCODE_SLASH = 76, - AKEYCODE_AT = 77, - AKEYCODE_NUM = 78, - AKEYCODE_HEADSETHOOK = 79, - AKEYCODE_FOCUS = 80, // *Camera* focus - AKEYCODE_PLUS = 81, - AKEYCODE_MENU = 82, - AKEYCODE_NOTIFICATION = 83, - AKEYCODE_SEARCH = 84, - AKEYCODE_MEDIA_PLAY_PAUSE= 85, - AKEYCODE_MEDIA_STOP = 86, - AKEYCODE_MEDIA_NEXT = 87, - AKEYCODE_MEDIA_PREVIOUS = 88, - AKEYCODE_MEDIA_REWIND = 89, - AKEYCODE_MEDIA_FAST_FORWARD = 90, - AKEYCODE_MUTE = 91, - AKEYCODE_PAGE_UP = 92, - AKEYCODE_PAGE_DOWN = 93, - AKEYCODE_PICTSYMBOLS = 94, - AKEYCODE_SWITCH_CHARSET = 95, - AKEYCODE_BUTTON_A = 96, - AKEYCODE_BUTTON_B = 97, - AKEYCODE_BUTTON_C = 98, - AKEYCODE_BUTTON_X = 99, - AKEYCODE_BUTTON_Y = 100, - AKEYCODE_BUTTON_Z = 101, - AKEYCODE_BUTTON_L1 = 102, - AKEYCODE_BUTTON_R1 = 103, - AKEYCODE_BUTTON_L2 = 104, - AKEYCODE_BUTTON_R2 = 105, - AKEYCODE_BUTTON_THUMBL = 106, - AKEYCODE_BUTTON_THUMBR = 107, - AKEYCODE_BUTTON_START = 108, - AKEYCODE_BUTTON_SELECT = 109, - AKEYCODE_BUTTON_MODE = 110, - - // NOTE: If you add a new keycode here you must also add it to several other files. - // Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list. + AKEYCODE_UNKNOWN = 0, + AKEYCODE_SOFT_LEFT = 1, + AKEYCODE_SOFT_RIGHT = 2, + AKEYCODE_HOME = 3, + AKEYCODE_BACK = 4, + AKEYCODE_CALL = 5, + AKEYCODE_ENDCALL = 6, + AKEYCODE_0 = 7, + AKEYCODE_1 = 8, + AKEYCODE_2 = 9, + AKEYCODE_3 = 10, + AKEYCODE_4 = 11, + AKEYCODE_5 = 12, + AKEYCODE_6 = 13, + AKEYCODE_7 = 14, + AKEYCODE_8 = 15, + AKEYCODE_9 = 16, + AKEYCODE_STAR = 17, + AKEYCODE_POUND = 18, + AKEYCODE_DPAD_UP = 19, + AKEYCODE_DPAD_DOWN = 20, + AKEYCODE_DPAD_LEFT = 21, + AKEYCODE_DPAD_RIGHT = 22, + AKEYCODE_DPAD_CENTER = 23, + AKEYCODE_VOLUME_UP = 24, + AKEYCODE_VOLUME_DOWN = 25, + AKEYCODE_POWER = 26, + AKEYCODE_CAMERA = 27, + AKEYCODE_CLEAR = 28, + AKEYCODE_A = 29, + AKEYCODE_B = 30, + AKEYCODE_C = 31, + AKEYCODE_D = 32, + AKEYCODE_E = 33, + AKEYCODE_F = 34, + AKEYCODE_G = 35, + AKEYCODE_H = 36, + AKEYCODE_I = 37, + AKEYCODE_J = 38, + AKEYCODE_K = 39, + AKEYCODE_L = 40, + AKEYCODE_M = 41, + AKEYCODE_N = 42, + AKEYCODE_O = 43, + AKEYCODE_P = 44, + AKEYCODE_Q = 45, + AKEYCODE_R = 46, + AKEYCODE_S = 47, + AKEYCODE_T = 48, + AKEYCODE_U = 49, + AKEYCODE_V = 50, + AKEYCODE_W = 51, + AKEYCODE_X = 52, + AKEYCODE_Y = 53, + AKEYCODE_Z = 54, + AKEYCODE_COMMA = 55, + AKEYCODE_PERIOD = 56, + AKEYCODE_ALT_LEFT = 57, + AKEYCODE_ALT_RIGHT = 58, + AKEYCODE_SHIFT_LEFT = 59, + AKEYCODE_SHIFT_RIGHT = 60, + AKEYCODE_TAB = 61, + AKEYCODE_SPACE = 62, + AKEYCODE_SYM = 63, + AKEYCODE_EXPLORER = 64, + AKEYCODE_ENVELOPE = 65, + AKEYCODE_ENTER = 66, + AKEYCODE_DEL = 67, + AKEYCODE_GRAVE = 68, + AKEYCODE_MINUS = 69, + AKEYCODE_EQUALS = 70, + AKEYCODE_LEFT_BRACKET = 71, + AKEYCODE_RIGHT_BRACKET = 72, + AKEYCODE_BACKSLASH = 73, + AKEYCODE_SEMICOLON = 74, + AKEYCODE_APOSTROPHE = 75, + AKEYCODE_SLASH = 76, + AKEYCODE_AT = 77, + AKEYCODE_NUM = 78, + AKEYCODE_HEADSETHOOK = 79, + AKEYCODE_FOCUS = 80, // *Camera* focus + AKEYCODE_PLUS = 81, + AKEYCODE_MENU = 82, + AKEYCODE_NOTIFICATION = 83, + AKEYCODE_SEARCH = 84, + AKEYCODE_MEDIA_PLAY_PAUSE = 85, + AKEYCODE_MEDIA_STOP = 86, + AKEYCODE_MEDIA_NEXT = 87, + AKEYCODE_MEDIA_PREVIOUS = 88, + AKEYCODE_MEDIA_REWIND = 89, + AKEYCODE_MEDIA_FAST_FORWARD = 90, + AKEYCODE_MUTE = 91, + AKEYCODE_PAGE_UP = 92, + AKEYCODE_PAGE_DOWN = 93, + AKEYCODE_PICTSYMBOLS = 94, + AKEYCODE_SWITCH_CHARSET = 95, + AKEYCODE_BUTTON_A = 96, + AKEYCODE_BUTTON_B = 97, + AKEYCODE_BUTTON_C = 98, + AKEYCODE_BUTTON_X = 99, + AKEYCODE_BUTTON_Y = 100, + AKEYCODE_BUTTON_Z = 101, + AKEYCODE_BUTTON_L1 = 102, + AKEYCODE_BUTTON_R1 = 103, + AKEYCODE_BUTTON_L2 = 104, + AKEYCODE_BUTTON_R2 = 105, + AKEYCODE_BUTTON_THUMBL = 106, + AKEYCODE_BUTTON_THUMBR = 107, + AKEYCODE_BUTTON_START = 108, + AKEYCODE_BUTTON_SELECT = 109, + AKEYCODE_BUTTON_MODE = 110, + + // NOTE: If you add a new keycode here you must also add it to several other files. + // Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list. }; struct _WinTranslatePair { @@ -1284,96 +1222,96 @@ struct _WinTranslatePair { unsigned int keycode; }; - -static _WinTranslatePair _ak_to_keycode[]={ -{ KEY_TAB, AKEYCODE_TAB }, -{ KEY_ENTER, AKEYCODE_ENTER }, -{ KEY_SHIFT, AKEYCODE_SHIFT_LEFT }, -{ KEY_SHIFT, AKEYCODE_SHIFT_RIGHT }, -{ KEY_ALT, AKEYCODE_ALT_LEFT }, -{ KEY_ALT, AKEYCODE_ALT_RIGHT }, -{ KEY_MENU, AKEYCODE_MENU }, -{ KEY_PAUSE, AKEYCODE_MEDIA_PLAY_PAUSE }, -{ KEY_ESCAPE, AKEYCODE_BACK }, -{ KEY_SPACE, AKEYCODE_SPACE }, -{ KEY_PAGEUP, AKEYCODE_PAGE_UP }, -{ KEY_PAGEDOWN, AKEYCODE_PAGE_DOWN }, -{ KEY_HOME, AKEYCODE_HOME },//(0x24) -{ KEY_LEFT, AKEYCODE_DPAD_LEFT }, -{ KEY_UP, AKEYCODE_DPAD_UP }, -{ KEY_RIGHT, AKEYCODE_DPAD_RIGHT }, -{ KEY_DOWN, AKEYCODE_DPAD_DOWN}, -{ KEY_PERIODCENTERED, AKEYCODE_DPAD_CENTER }, -{ KEY_BACKSPACE, AKEYCODE_DEL}, -{ KEY_0, AKEYCODE_0 },////0 key -{ KEY_1, AKEYCODE_1 },////1 key -{ KEY_2, AKEYCODE_2 },////2 key -{ KEY_3, AKEYCODE_3 },////3 key -{ KEY_4, AKEYCODE_4 },////4 key -{ KEY_5, AKEYCODE_5 },////5 key -{ KEY_6, AKEYCODE_6 },////6 key -{ KEY_7, AKEYCODE_7 },////7 key -{ KEY_8, AKEYCODE_8 },////8 key -{ KEY_9, AKEYCODE_9 },////9 key -{ KEY_A, AKEYCODE_A },////A key -{ KEY_B, AKEYCODE_B },////B key -{ KEY_C, AKEYCODE_C },////C key -{ KEY_D, AKEYCODE_D },////D key -{ KEY_E, AKEYCODE_E },////E key -{ KEY_F, AKEYCODE_F },////F key -{ KEY_G, AKEYCODE_G },////G key -{ KEY_H, AKEYCODE_H },////H key -{ KEY_I, AKEYCODE_I },////I key -{ KEY_J, AKEYCODE_J },////J key -{ KEY_K, AKEYCODE_K },////K key -{ KEY_L, AKEYCODE_L },////L key -{ KEY_M, AKEYCODE_M },////M key -{ KEY_N, AKEYCODE_N },////N key -{ KEY_O, AKEYCODE_O },////O key -{ KEY_P, AKEYCODE_P },////P key -{ KEY_Q, AKEYCODE_Q },////Q key -{ KEY_R, AKEYCODE_R },////R key -{ KEY_S, AKEYCODE_S },////S key -{ KEY_T, AKEYCODE_T },////T key -{ KEY_U, AKEYCODE_U },////U key -{ KEY_V, AKEYCODE_V },////V key -{ KEY_W, AKEYCODE_W },////W key -{ KEY_X, AKEYCODE_X },////X key -{ KEY_Y, AKEYCODE_Y },////Y key -{ KEY_Z, AKEYCODE_Z },////Z key -{ KEY_HOMEPAGE, AKEYCODE_EXPLORER}, -{ KEY_LAUNCH0, AKEYCODE_BUTTON_A}, -{ KEY_LAUNCH1, AKEYCODE_BUTTON_B}, -{ KEY_LAUNCH2, AKEYCODE_BUTTON_C}, -{ KEY_LAUNCH3, AKEYCODE_BUTTON_X}, -{ KEY_LAUNCH4, AKEYCODE_BUTTON_Y}, -{ KEY_LAUNCH5, AKEYCODE_BUTTON_Z}, -{ KEY_LAUNCH6, AKEYCODE_BUTTON_L1}, -{ KEY_LAUNCH7, AKEYCODE_BUTTON_R1}, -{ KEY_LAUNCH8, AKEYCODE_BUTTON_L2}, -{ KEY_LAUNCH9, AKEYCODE_BUTTON_R2}, -{ KEY_LAUNCHA, AKEYCODE_BUTTON_THUMBL}, -{ KEY_LAUNCHB, AKEYCODE_BUTTON_THUMBR}, -{ KEY_LAUNCHC, AKEYCODE_BUTTON_START}, -{ KEY_LAUNCHD, AKEYCODE_BUTTON_SELECT}, -{ KEY_LAUNCHE, AKEYCODE_BUTTON_MODE}, -{ KEY_VOLUMEMUTE, AKEYCODE_MUTE}, -{ KEY_VOLUMEDOWN, AKEYCODE_VOLUME_DOWN}, -{ KEY_VOLUMEUP, AKEYCODE_VOLUME_UP}, -{ KEY_BACK, AKEYCODE_MEDIA_REWIND }, -{ KEY_FORWARD, AKEYCODE_MEDIA_FAST_FORWARD }, -{ KEY_MEDIANEXT, AKEYCODE_MEDIA_NEXT }, -{ KEY_MEDIAPREVIOUS, AKEYCODE_MEDIA_PREVIOUS }, -{ KEY_MEDIASTOP, AKEYCODE_MEDIA_STOP }, -{ KEY_PLUS, AKEYCODE_PLUS }, -{ KEY_EQUAL, AKEYCODE_EQUALS},// the '+' key -{ KEY_COMMA, AKEYCODE_COMMA},// the ',' key -{ KEY_MINUS, AKEYCODE_MINUS},// the '-' key -{ KEY_SLASH, AKEYCODE_SLASH},// the '/?' key -{ KEY_BACKSLASH, AKEYCODE_BACKSLASH}, -{ KEY_BRACKETLEFT, AKEYCODE_LEFT_BRACKET}, -{ KEY_BRACKETRIGHT, AKEYCODE_RIGHT_BRACKET}, -{ KEY_UNKNOWN, 0} }; +static _WinTranslatePair _ak_to_keycode[] = { + { KEY_TAB, AKEYCODE_TAB }, + { KEY_ENTER, AKEYCODE_ENTER }, + { KEY_SHIFT, AKEYCODE_SHIFT_LEFT }, + { KEY_SHIFT, AKEYCODE_SHIFT_RIGHT }, + { KEY_ALT, AKEYCODE_ALT_LEFT }, + { KEY_ALT, AKEYCODE_ALT_RIGHT }, + { KEY_MENU, AKEYCODE_MENU }, + { KEY_PAUSE, AKEYCODE_MEDIA_PLAY_PAUSE }, + { KEY_ESCAPE, AKEYCODE_BACK }, + { KEY_SPACE, AKEYCODE_SPACE }, + { KEY_PAGEUP, AKEYCODE_PAGE_UP }, + { KEY_PAGEDOWN, AKEYCODE_PAGE_DOWN }, + { KEY_HOME, AKEYCODE_HOME }, //(0x24) + { KEY_LEFT, AKEYCODE_DPAD_LEFT }, + { KEY_UP, AKEYCODE_DPAD_UP }, + { KEY_RIGHT, AKEYCODE_DPAD_RIGHT }, + { KEY_DOWN, AKEYCODE_DPAD_DOWN }, + { KEY_PERIODCENTERED, AKEYCODE_DPAD_CENTER }, + { KEY_BACKSPACE, AKEYCODE_DEL }, + { KEY_0, AKEYCODE_0 }, ////0 key + { KEY_1, AKEYCODE_1 }, ////1 key + { KEY_2, AKEYCODE_2 }, ////2 key + { KEY_3, AKEYCODE_3 }, ////3 key + { KEY_4, AKEYCODE_4 }, ////4 key + { KEY_5, AKEYCODE_5 }, ////5 key + { KEY_6, AKEYCODE_6 }, ////6 key + { KEY_7, AKEYCODE_7 }, ////7 key + { KEY_8, AKEYCODE_8 }, ////8 key + { KEY_9, AKEYCODE_9 }, ////9 key + { KEY_A, AKEYCODE_A }, ////A key + { KEY_B, AKEYCODE_B }, ////B key + { KEY_C, AKEYCODE_C }, ////C key + { KEY_D, AKEYCODE_D }, ////D key + { KEY_E, AKEYCODE_E }, ////E key + { KEY_F, AKEYCODE_F }, ////F key + { KEY_G, AKEYCODE_G }, ////G key + { KEY_H, AKEYCODE_H }, ////H key + { KEY_I, AKEYCODE_I }, ////I key + { KEY_J, AKEYCODE_J }, ////J key + { KEY_K, AKEYCODE_K }, ////K key + { KEY_L, AKEYCODE_L }, ////L key + { KEY_M, AKEYCODE_M }, ////M key + { KEY_N, AKEYCODE_N }, ////N key + { KEY_O, AKEYCODE_O }, ////O key + { KEY_P, AKEYCODE_P }, ////P key + { KEY_Q, AKEYCODE_Q }, ////Q key + { KEY_R, AKEYCODE_R }, ////R key + { KEY_S, AKEYCODE_S }, ////S key + { KEY_T, AKEYCODE_T }, ////T key + { KEY_U, AKEYCODE_U }, ////U key + { KEY_V, AKEYCODE_V }, ////V key + { KEY_W, AKEYCODE_W }, ////W key + { KEY_X, AKEYCODE_X }, ////X key + { KEY_Y, AKEYCODE_Y }, ////Y key + { KEY_Z, AKEYCODE_Z }, ////Z key + { KEY_HOMEPAGE, AKEYCODE_EXPLORER }, + { KEY_LAUNCH0, AKEYCODE_BUTTON_A }, + { KEY_LAUNCH1, AKEYCODE_BUTTON_B }, + { KEY_LAUNCH2, AKEYCODE_BUTTON_C }, + { KEY_LAUNCH3, AKEYCODE_BUTTON_X }, + { KEY_LAUNCH4, AKEYCODE_BUTTON_Y }, + { KEY_LAUNCH5, AKEYCODE_BUTTON_Z }, + { KEY_LAUNCH6, AKEYCODE_BUTTON_L1 }, + { KEY_LAUNCH7, AKEYCODE_BUTTON_R1 }, + { KEY_LAUNCH8, AKEYCODE_BUTTON_L2 }, + { KEY_LAUNCH9, AKEYCODE_BUTTON_R2 }, + { KEY_LAUNCHA, AKEYCODE_BUTTON_THUMBL }, + { KEY_LAUNCHB, AKEYCODE_BUTTON_THUMBR }, + { KEY_LAUNCHC, AKEYCODE_BUTTON_START }, + { KEY_LAUNCHD, AKEYCODE_BUTTON_SELECT }, + { KEY_LAUNCHE, AKEYCODE_BUTTON_MODE }, + { KEY_VOLUMEMUTE, AKEYCODE_MUTE }, + { KEY_VOLUMEDOWN, AKEYCODE_VOLUME_DOWN }, + { KEY_VOLUMEUP, AKEYCODE_VOLUME_UP }, + { KEY_BACK, AKEYCODE_MEDIA_REWIND }, + { KEY_FORWARD, AKEYCODE_MEDIA_FAST_FORWARD }, + { KEY_MEDIANEXT, AKEYCODE_MEDIA_NEXT }, + { KEY_MEDIAPREVIOUS, AKEYCODE_MEDIA_PREVIOUS }, + { KEY_MEDIASTOP, AKEYCODE_MEDIA_STOP }, + { KEY_PLUS, AKEYCODE_PLUS }, + { KEY_EQUAL, AKEYCODE_EQUALS }, // the '+' key + { KEY_COMMA, AKEYCODE_COMMA }, // the ',' key + { KEY_MINUS, AKEYCODE_MINUS }, // the '-' key + { KEY_SLASH, AKEYCODE_SLASH }, // the '/?' key + { KEY_BACKSLASH, AKEYCODE_BACKSLASH }, + { KEY_BRACKETLEFT, AKEYCODE_LEFT_BRACKET }, + { KEY_BRACKETRIGHT, AKEYCODE_RIGHT_BRACKET }, + { KEY_UNKNOWN, 0 } +}; /* TODO: map these android key: AKEYCODE_SOFT_LEFT = 1, @@ -1401,20 +1339,19 @@ TODO: map these android key: */ static unsigned int android_get_keysym(unsigned int p_code) { - for(int i=0;_ak_to_keycode[i].keysym!=KEY_UNKNOWN;i++) { + for (int i = 0; _ak_to_keycode[i].keysym != KEY_UNKNOWN; i++) { - if (_ak_to_keycode[i].keycode==p_code) { + if (_ak_to_keycode[i].keycode == p_code) { //print_line("outcode: " + _ak_to_keycode[i].keysym); return _ak_to_keycode[i].keysym; } } - return KEY_UNKNOWN; } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv * env, jobject obj, jint p_device, jint p_button, jboolean p_pressed) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env, jobject obj, jint p_device, jint p_button, jboolean p_pressed) { OS_Android::JoypadEvent jevent; jevent.device = p_device; @@ -1427,7 +1364,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv * en input_mutex->unlock(); } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv * env, jobject obj, jint p_device, jint p_axis, jfloat p_value) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env, jobject obj, jint p_device, jint p_axis, jfloat p_value) { OS_Android::JoypadEvent jevent; jevent.device = p_device; @@ -1440,18 +1377,22 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv * env, input_mutex->unlock(); } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv * env, jobject obj, jint p_device, jint p_hat_x, jint p_hat_y) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv *env, jobject obj, jint p_device, jint p_hat_x, jint p_hat_y) { OS_Android::JoypadEvent jevent; jevent.device = p_device; jevent.type = OS_Android::JOY_EVENT_HAT; int hat = 0; if (p_hat_x != 0) { - if (p_hat_x < 0) hat |= InputDefault::HAT_MASK_LEFT; - else hat |= InputDefault::HAT_MASK_RIGHT; + if (p_hat_x < 0) + hat |= InputDefault::HAT_MASK_LEFT; + else + hat |= InputDefault::HAT_MASK_RIGHT; } if (p_hat_y != 0) { - if (p_hat_y < 0) hat |= InputDefault::HAT_MASK_UP; - else hat |= InputDefault::HAT_MASK_DOWN; + if (p_hat_y < 0) + hat |= InputDefault::HAT_MASK_UP; + else + hat |= InputDefault::HAT_MASK_DOWN; } jevent.hat = hat; input_mutex->lock(); @@ -1459,14 +1400,14 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv * env, input_mutex->unlock(); } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyconnectionchanged(JNIEnv * env, jobject obj, jint p_device, jboolean p_connected, jstring p_name) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyconnectionchanged(JNIEnv *env, jobject obj, jint p_device, jboolean p_connected, jstring p_name) { if (os_android) { - String name = env->GetStringUTFChars( p_name, NULL ); + String name = env->GetStringUTFChars(p_name, NULL); os_android->joy_connection_changed(p_device, p_connected, name); } } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv * env, jobject obj, jint p_scancode, jint p_unicode_char, jboolean p_pressed) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv *env, jobject obj, jint p_scancode, jint p_unicode_char, jboolean p_pressed) { InputEvent ievent; ievent.type = InputEvent::KEY; @@ -1479,56 +1420,51 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv * env, job print_line("Scancode: " + String::num(p_scancode) + ":" + String::num(ievent.key.scancode) + " Unicode: " + String::num(val)); - ievent.key.mod.shift=false; - ievent.key.mod.alt=false; - ievent.key.mod.control=false; - ievent.key.echo=false; + ievent.key.mod.shift = false; + ievent.key.mod.alt = false; + ievent.key.mod.control = false; + ievent.key.echo = false; - if (val == '\n') - { + if (val == '\n') { ievent.key.scancode = KEY_ENTER; - }else if (val == 61448) { + } else if (val == 61448) { ievent.key.scancode = KEY_BACKSPACE; ievent.key.unicode = KEY_BACKSPACE; } else if (val == 61453) { ievent.key.scancode = KEY_ENTER; ievent.key.unicode = KEY_ENTER; - } else if (p_scancode==4) { + } else if (p_scancode == 4) { - go_back_request=true; - } + go_back_request = true; + } input_mutex->lock(); key_events.push_back(ievent); input_mutex->unlock(); } - -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_accelerometer(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_accelerometer(JNIEnv *env, jobject obj, jfloat x, jfloat y, jfloat z) { input_mutex->lock(); - accelerometer=Vector3(x,y,z); + accelerometer = Vector3(x, y, z); input_mutex->unlock(); - } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_magnetometer(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_magnetometer(JNIEnv *env, jobject obj, jfloat x, jfloat y, jfloat z) { input_mutex->lock(); - magnetometer=Vector3(x,y,z); + magnetometer = Vector3(x, y, z); input_mutex->unlock(); - } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_gyroscope(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_gyroscope(JNIEnv *env, jobject obj, jfloat x, jfloat y, jfloat z) { input_mutex->lock(); - gyroscope=Vector3(x,y,z); + gyroscope = Vector3(x, y, z); input_mutex->unlock(); - } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv * env, jobject obj){ +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv *env, jobject obj) { if (!suspend_mutex) return; @@ -1540,7 +1476,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv * env, suspend_mutex->unlock(); } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv * env, jobject obj){ +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv *env, jobject obj) { if (!suspend_mutex) return; @@ -1550,58 +1486,50 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv * env os_android->main_loop_focusout(); suspend_mutex->unlock(); - } - - -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_audio(JNIEnv * env, jobject obj) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_audio(JNIEnv *env, jobject obj) { ThreadAndroid::setup_thread(); AudioDriverAndroid::thread_func(env); - - } +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_singleton(JNIEnv *env, jobject obj, jstring name, jobject p_object) { -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_singleton(JNIEnv * env, jobject obj, jstring name,jobject p_object){ - - String singname = env->GetStringUTFChars( name, NULL ); - JNISingleton *s = memnew( JNISingleton ); + String singname = env->GetStringUTFChars(name, NULL); + JNISingleton *s = memnew(JNISingleton); s->set_instance(env->NewGlobalRef(p_object)); - jni_singletons[singname]=s; - - GlobalConfig::get_singleton()->add_singleton(GlobalConfig::Singleton(singname,s)); - GlobalConfig::get_singleton()->set(singname,s); + jni_singletons[singname] = s; + GlobalConfig::get_singleton()->add_singleton(GlobalConfig::Singleton(singname, s)); + GlobalConfig::get_singleton()->set(singname, s); } - -static Variant::Type get_jni_type(const String& p_type) { +static Variant::Type get_jni_type(const String &p_type) { static struct { const char *name; Variant::Type type; - } _type_to_vtype[]={ - {"void",Variant::NIL}, - {"boolean",Variant::BOOL}, - {"int",Variant::INT}, - {"float",Variant::REAL}, - {"double", Variant::REAL}, - {"java.lang.String",Variant::STRING}, - {"[I",Variant::POOL_INT_ARRAY}, - {"[B",Variant::POOL_BYTE_ARRAY}, - {"[F",Variant::POOL_REAL_ARRAY}, - {"[Ljava.lang.String;",Variant::POOL_STRING_ARRAY}, - {"org.godotengine.godot.Dictionary", Variant::DICTIONARY}, - {NULL,Variant::NIL} + } _type_to_vtype[] = { + { "void", Variant::NIL }, + { "boolean", Variant::BOOL }, + { "int", Variant::INT }, + { "float", Variant::REAL }, + { "double", Variant::REAL }, + { "java.lang.String", Variant::STRING }, + { "[I", Variant::POOL_INT_ARRAY }, + { "[B", Variant::POOL_BYTE_ARRAY }, + { "[F", Variant::POOL_REAL_ARRAY }, + { "[Ljava.lang.String;", Variant::POOL_STRING_ARRAY }, + { "org.godotengine.godot.Dictionary", Variant::DICTIONARY }, + { NULL, Variant::NIL } }; - int idx=0; + int idx = 0; while (_type_to_vtype[idx].name) { - if (p_type==_type_to_vtype[idx].name) + if (p_type == _type_to_vtype[idx].name) return _type_to_vtype[idx].type; idx++; @@ -1610,145 +1538,131 @@ static Variant::Type get_jni_type(const String& p_type) { return Variant::NIL; } - -static const char* get_jni_sig(const String& p_type) { - +static const char *get_jni_sig(const String &p_type) { static struct { const char *name; const char *sig; - } _type_to_vtype[]={ - {"void","V"}, - {"boolean","Z"}, - {"int","I"}, - {"float","F"}, - {"double","D"}, - {"java.lang.String","Ljava/lang/String;"}, - {"org.godotengine.godot.Dictionary", "Lorg/godotengine/godot/Dictionary;"}, - {"[I","[I"}, - {"[B","[B"}, - {"[F","[F"}, - {"[Ljava.lang.String;","[Ljava/lang/String;"}, - {NULL,"V"} + } _type_to_vtype[] = { + { "void", "V" }, + { "boolean", "Z" }, + { "int", "I" }, + { "float", "F" }, + { "double", "D" }, + { "java.lang.String", "Ljava/lang/String;" }, + { "org.godotengine.godot.Dictionary", "Lorg/godotengine/godot/Dictionary;" }, + { "[I", "[I" }, + { "[B", "[B" }, + { "[F", "[F" }, + { "[Ljava.lang.String;", "[Ljava/lang/String;" }, + { NULL, "V" } }; - int idx=0; + int idx = 0; while (_type_to_vtype[idx].name) { - if (p_type==_type_to_vtype[idx].name) + if (p_type == _type_to_vtype[idx].name) return _type_to_vtype[idx].sig; idx++; } - return "Ljava/lang/Object;"; } -JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv * env, jobject obj, jstring path) { +JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv *env, jobject obj, jstring path) { - String js = env->GetStringUTFChars( path, NULL ); + String js = env->GetStringUTFChars(path, NULL); return env->NewStringUTF(GlobalConfig::get_singleton()->get(js).operator String().utf8().get_data()); - - } +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_method(JNIEnv *env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args) { -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_method(JNIEnv * env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args){ - - String singname = env->GetStringUTFChars( sname, NULL ); + String singname = env->GetStringUTFChars(sname, NULL); ERR_FAIL_COND(!jni_singletons.has(singname)); JNISingleton *s = jni_singletons.get(singname); - - String mname = env->GetStringUTFChars( name, NULL ); - String retval = env->GetStringUTFChars( ret, NULL ); + String mname = env->GetStringUTFChars(name, NULL); + String retval = env->GetStringUTFChars(ret, NULL); Vector<Variant::Type> types; - String cs="("; - + String cs = "("; int stringCount = env->GetArrayLength(args); - print_line("Singl: "+singname+" Method: "+mname+" RetVal: "+retval); - for (int i=0; i<stringCount; i++) { + print_line("Singl: " + singname + " Method: " + mname + " RetVal: " + retval); + for (int i = 0; i < stringCount; i++) { - jstring string = (jstring) env->GetObjectArrayElement(args, i); + jstring string = (jstring)env->GetObjectArrayElement(args, i); const char *rawString = env->GetStringUTFChars(string, 0); types.push_back(get_jni_type(String(rawString))); - cs+=get_jni_sig(String(rawString)); + cs += get_jni_sig(String(rawString)); } - cs+=")"; - cs+=get_jni_sig(retval); + cs += ")"; + cs += get_jni_sig(retval); jclass cls = env->GetObjectClass(s->get_instance()); - print_line("METHOD: "+mname+" sig: "+cs); + print_line("METHOD: " + mname + " sig: " + cs); jmethodID mid = env->GetMethodID(cls, mname.ascii().get_data(), cs.ascii().get_data()); if (!mid) { - print_line("FAILED GETTING METHOID "+mname); + print_line("FAILED GETTING METHOID " + mname); } - s->add_method(mname,mid,types,get_jni_type(retval)); - - + s->add_method(mname, mid, types, get_jni_type(retval)); } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv * env, jobject p_obj, jint ID, jstring method, jobjectArray params) { +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv *env, jobject p_obj, jint ID, jstring method, jobjectArray params) { - Object* obj = ObjectDB::get_instance(ID); + 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 ); + 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); - for (int i=0; i<count; i++) { + Variant *vlist = (Variant *)alloca(sizeof(Variant) * count); + Variant **vptr = (Variant **)alloca(sizeof(Variant *) * count); + for (int i = 0; i < count; i++) { jobject obj = env->GetObjectArrayElement(params, i); Variant v; if (obj) - v=_jobject_to_variant(env, obj); + v = _jobject_to_variant(env, obj); memnew_placement(&vlist[i], Variant); vlist[i] = v; vptr[i] = &vlist[i]; env->DeleteLocalRef(obj); - }; Variant::CallError err; - obj->call(str_method, (const Variant**)vptr, count, err); + obj->call(str_method, (const Variant **)vptr, count, err); // something env->PopLocalFrame(NULL); - } -JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv * env, jobject p_obj, jint ID, jstring method, jobjectArray params) { - +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv *env, jobject p_obj, jint ID, jstring method, jobjectArray params) { - Object* obj = ObjectDB::get_instance(ID); + Object *obj = ObjectDB::get_instance(ID); ERR_FAIL_COND(!obj); int res = env->PushLocalFrame(16); - ERR_FAIL_COND(res!=0); + ERR_FAIL_COND(res != 0); - String str_method = env->GetStringUTFChars( method, NULL ); + String str_method = env->GetStringUTFChars(method, NULL); int count = env->GetArrayLength(params); Variant args[VARIANT_ARG_MAX]; - //print_line("Java->GD call: "+obj->get_type()+"::"+str_method+" argc "+itos(count)); + //print_line("Java->GD call: "+obj->get_type()+"::"+str_method+" argc "+itos(count)); - for (int i=0; i<MIN(count,VARIANT_ARG_MAX); i++) { + for (int i = 0; i < MIN(count, VARIANT_ARG_MAX); i++) { jobject obj = env->GetObjectArrayElement(params, i); if (obj) @@ -1756,15 +1670,11 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv * env->DeleteLocalRef(obj); //print_line("\targ"+itos(i)+": "+Variant::get_type_name(args[i].get_type())); - }; - - - obj->call_deferred(str_method, args[0],args[1],args[2],args[3],args[4]); + 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/android/java_glue.h b/platform/android/java_glue.h index bc4628b9d4..51a2031867 100644 --- a/platform/android/java_glue.h +++ b/platform/android/java_glue.h @@ -31,35 +31,33 @@ #ifndef JAVA_GLUE_H #define JAVA_GLUE_H -#include <jni.h> #include <android/log.h> - +#include <jni.h> extern "C" { - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv * env, jobject obj, jobject activity,jboolean p_need_reload_hook, jobjectArray p_cmdline,jobject p_asset_manager); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv * env, jobject obj, jint width, jint height, jboolean reload); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv * env, jobject obj, bool p_32_bits); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv * env, jobject obj); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_quit(JNIEnv * env, jobject obj); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch(JNIEnv * env, jobject obj, jint ev,jint pointer, jint count, jintArray positions); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv * env, jobject obj, jint p_scancode, jint p_unicode_char, jboolean p_pressed); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv * env, jobject obj, jint p_device, jint p_button, jboolean p_pressed); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv * env, jobject obj, jint p_device, jint p_axis, jfloat p_value); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv * env, jobject obj, jint p_device, jint p_hat_x, jint p_hat_y); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyconnectionchanged(JNIEnv * env, jobject obj, jint p_device, jboolean p_connected, jstring p_name); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_audio(JNIEnv * env, jobject obj); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_accelerometer(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_magnetometer(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_gyroscope(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv * env, jobject obj); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv * env, jobject obj); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_singleton(JNIEnv * env, jobject obj, jstring name,jobject p_object); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_method(JNIEnv * env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args); - JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv * env, jobject obj, jstring path); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv * env, jobject obj, jint ID, jstring method, jobjectArray params); - JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv * env, jobject obj, jint ID, jstring method, jobjectArray params); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_initialize(JNIEnv *env, jobject obj, jobject activity, jboolean p_need_reload_hook, jobjectArray p_cmdline, jobject p_asset_manager); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, jobject obj, jint width, jint height, jboolean reload); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *env, jobject obj, bool p_32_bits); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, jobject obj); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_quit(JNIEnv *env, jobject obj); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch(JNIEnv *env, jobject obj, jint ev, jint pointer, jint count, jintArray positions); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv *env, jobject obj, jint p_scancode, jint p_unicode_char, jboolean p_pressed); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env, jobject obj, jint p_device, jint p_button, jboolean p_pressed); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env, jobject obj, jint p_device, jint p_axis, jfloat p_value); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv *env, jobject obj, jint p_device, jint p_hat_x, jint p_hat_y); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyconnectionchanged(JNIEnv *env, jobject obj, jint p_device, jboolean p_connected, jstring p_name); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_audio(JNIEnv *env, jobject obj); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_accelerometer(JNIEnv *env, jobject obj, jfloat x, jfloat y, jfloat z); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_magnetometer(JNIEnv *env, jobject obj, jfloat x, jfloat y, jfloat z); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_gyroscope(JNIEnv *env, jobject obj, jfloat x, jfloat y, jfloat z); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv *env, jobject obj); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv *env, jobject obj); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_singleton(JNIEnv *env, jobject obj, jstring name, jobject p_object); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_method(JNIEnv *env, jobject obj, jstring sname, jstring name, jstring ret, jobjectArray args); +JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv *env, jobject obj, jstring path); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv *env, jobject obj, jint ID, jstring method, jobjectArray params); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv *env, jobject obj, jint ID, jstring method, jobjectArray params); } - #endif #endif // JAVA_GLUE_H diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index a10f27424c..60719f6d42 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -28,22 +28,22 @@ /*************************************************************************/ #include "os_android.h" -#include "drivers/gles2/rasterizer_gles2.h" +#include "core/global_config.h" #include "core/io/file_access_buffered_fa.h" -#include "drivers/unix/file_access_unix.h" +#include "drivers/gles2/rasterizer_gles2.h" #include "drivers/unix/dir_access_unix.h" +#include "drivers/unix/file_access_unix.h" +#include "file_access_android.h" +#include "main/main.h" #include "servers/visual/visual_server_raster.h" #include "servers/visual/visual_server_wrap_mt.h" -#include "main/main.h" -#include "file_access_android.h" -#include "core/global_config.h" #ifdef ANDROID_NATIVE_ACTIVITY -#include "file_access_android.h" #include "dir_access_android.h" +#include "file_access_android.h" #else -#include "file_access_jandroid.h" #include "dir_access_jandroid.h" +#include "file_access_jandroid.h" #endif int OS_Android::get_video_driver_count() const { @@ -51,7 +51,7 @@ int OS_Android::get_video_driver_count() const { return 1; } -const char * OS_Android::get_video_driver_name(int p_driver) const { +const char *OS_Android::get_video_driver_name(int p_driver) const { return "GLES2"; } @@ -66,7 +66,7 @@ int OS_Android::get_audio_driver_count() const { return 1; } -const char * OS_Android::get_audio_driver_name(int p_driver) const { +const char *OS_Android::get_audio_driver_name(int p_driver) const { return "Android"; } @@ -108,35 +108,31 @@ void OS_Android::initialize_core() { DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_FILESYSTEM); #endif - } -void OS_Android::set_opengl_extensions(const char* p_gl_extensions) { +void OS_Android::set_opengl_extensions(const char *p_gl_extensions) { ERR_FAIL_COND(!p_gl_extensions); - gl_extensions=p_gl_extensions; + gl_extensions = p_gl_extensions; } -void OS_Android::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) { - - - use_gl2=p_video_driver!=1; +void OS_Android::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { + use_gl2 = p_video_driver != 1; if (gfx_init_func) - gfx_init_func(gfx_init_ud,use_gl2); + gfx_init_func(gfx_init_ud, use_gl2); AudioDriverManager::add_driver(&audio_driver_android); - - RasterizerGLES2 *rasterizer_gles22=memnew( RasterizerGLES2(false,use_reload_hooks,false,use_reload_hooks ) ); + RasterizerGLES2 *rasterizer_gles22 = memnew(RasterizerGLES2(false, use_reload_hooks, false, use_reload_hooks)); if (gl_extensions) rasterizer_gles22->set_extensions(gl_extensions); rasterizer = rasterizer_gles22; rasterizer->set_force_16_bits_fbo(use_16bits_fbo); - visual_server = memnew( VisualServerRaster(rasterizer) ); + visual_server = memnew(VisualServerRaster(rasterizer)); if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { visual_server = memnew(VisualServerWrapMT(visual_server, false)); @@ -146,26 +142,26 @@ void OS_Android::initialize(const VideoMode& p_desired,int p_video_driver,int p_ AudioDriverManager::get_driver(p_audio_driver)->set_singleton(); - if (AudioDriverManager::get_driver(p_audio_driver)->init()!=OK) { + if (AudioDriverManager::get_driver(p_audio_driver)->init() != OK) { ERR_PRINT("Initializing audio failed."); } - physics_server = memnew( PhysicsServerSW ); + physics_server = memnew(PhysicsServerSW); physics_server->init(); //physics_2d_server = memnew( Physics2DServerSW ); physics_2d_server = Physics2DServerWrapMT::init_server<Physics2DServerSW>(); physics_2d_server->init(); - input = memnew( InputDefault ); + input = memnew(InputDefault); input->set_fallback_mapping("Default Android Gamepad"); - - power_manager = memnew( power_android ); + + power_manager = memnew(power_android); } -void OS_Android::set_main_loop( MainLoop * p_main_loop ) { +void OS_Android::set_main_loop(MainLoop *p_main_loop) { - main_loop=p_main_loop; + main_loop = p_main_loop; input->set_main_loop(p_main_loop); #if 0 @@ -204,12 +200,11 @@ void OS_Android::set_main_loop( MainLoop * p_main_loop ) { } #endif - } void OS_Android::delete_main_loop() { - memdelete( main_loop ); + memdelete(main_loop); } void OS_Android::finalize() { @@ -217,29 +212,26 @@ void OS_Android::finalize() { memdelete(input); } +void OS_Android::vprint(const char *p_format, va_list p_list, bool p_stderr) { -void OS_Android::vprint(const char* p_format, va_list p_list, bool p_stderr) { - - __android_log_vprint(p_stderr?ANDROID_LOG_ERROR:ANDROID_LOG_INFO,"godot",p_format,p_list); + __android_log_vprint(p_stderr ? ANDROID_LOG_ERROR : ANDROID_LOG_INFO, "godot", p_format, p_list); } -void OS_Android::print(const char *p_format, ... ) { +void OS_Android::print(const char *p_format, ...) { va_list argp; va_start(argp, p_format); - __android_log_vprint(ANDROID_LOG_INFO,"godot",p_format,argp); + __android_log_vprint(ANDROID_LOG_INFO, "godot", p_format, argp); va_end(argp); - } -void OS_Android::alert(const String& p_alert,const String& p_title) { +void OS_Android::alert(const String &p_alert, const String &p_title) { - print("ALERT: %s\n",p_alert.utf8().get_data()); + print("ALERT: %s\n", p_alert.utf8().get_data()); if (alert_func) alert_func(p_alert, p_title); } - void OS_Android::set_mouse_show(bool p_show) { //android has no mouse... @@ -265,16 +257,14 @@ int OS_Android::get_mouse_button_state() const { return 0; } -void OS_Android::set_window_title(const String& p_title) { - +void OS_Android::set_window_title(const String &p_title) { } //interesting byt not yet //void set_clipboard(const String& p_text); //String get_clipboard() const; -void OS_Android::set_video_mode(const VideoMode& p_video_mode,int p_screen) { - +void OS_Android::set_video_mode(const VideoMode &p_video_mode, int p_screen) { } OS::VideoMode OS_Android::get_video_mode(int p_screen) const { @@ -282,7 +272,7 @@ OS::VideoMode OS_Android::get_video_mode(int p_screen) const { return default_videomode; } -void OS_Android::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const { +void OS_Android::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const { p_list->push_back(default_videomode); } @@ -297,7 +287,7 @@ void OS_Android::set_keep_screen_on(bool p_enabled) { Size2 OS_Android::get_window_size() const { - return Vector2(default_videomode.width,default_videomode.height); + return Vector2(default_videomode.width, default_videomode.height); } String OS_Android::get_name() { @@ -337,7 +327,6 @@ void OS_Android::main_loop_end() { if (main_loop) main_loop->finish(); - } void OS_Android::main_loop_focusout() { @@ -345,34 +334,32 @@ void OS_Android::main_loop_focusout() { if (main_loop) main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); audio_driver_android.set_pause(true); - } -void OS_Android::main_loop_focusin(){ +void OS_Android::main_loop_focusin() { if (main_loop) main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN); audio_driver_android.set_pause(false); - } void OS_Android::process_joy_event(OS_Android::JoypadEvent p_event) { switch (p_event.type) { - case JOY_EVENT_BUTTON: - last_id = input->joy_button(last_id, p_event.device, p_event.index, p_event.pressed); - break; - case JOY_EVENT_AXIS: - InputDefault::JoyAxis value; - value.min = -1; - value.value = p_event.value; - last_id = input->joy_axis(last_id, p_event.device, p_event.index, value); - break; - case JOY_EVENT_HAT: - last_id = input->joy_hat(last_id, p_event.device, p_event.hat); - break; - default: - return; + case JOY_EVENT_BUTTON: + last_id = input->joy_button(last_id, p_event.device, p_event.index, p_event.pressed); + break; + case JOY_EVENT_AXIS: + InputDefault::JoyAxis value; + value.min = -1; + value.value = p_event.value; + last_id = input->joy_axis(last_id, p_event.device, p_event.index, value); + break; + case JOY_EVENT_HAT: + last_id = input->joy_hat(last_id, p_event.device, p_event.hat); + break; + default: + return; } } @@ -382,163 +369,152 @@ void OS_Android::process_event(InputEvent p_event) { input->parse_input_event(p_event); } - -void OS_Android::process_touch(int p_what,int p_pointer, const Vector<TouchPos>& p_points) { +void OS_Android::process_touch(int p_what, int p_pointer, const Vector<TouchPos> &p_points) { //print_line("ev: "+itos(p_what)+" pnt: "+itos(p_pointer)+" pointc: "+itos(p_points.size())); - switch(p_what) { + switch (p_what) { case 0: { //gesture begin if (touch.size()) { //end all if exist InputEvent ev; - ev.type=InputEvent::MOUSE_BUTTON; - ev.ID=last_id++; - ev.mouse_button.button_index=BUTTON_LEFT; - ev.mouse_button.button_mask=BUTTON_MASK_LEFT; - ev.mouse_button.pressed=false; - ev.mouse_button.x=touch[0].pos.x; - ev.mouse_button.y=touch[0].pos.y; - ev.mouse_button.global_x=touch[0].pos.x; - ev.mouse_button.global_y=touch[0].pos.y; + ev.type = InputEvent::MOUSE_BUTTON; + ev.ID = last_id++; + ev.mouse_button.button_index = BUTTON_LEFT; + ev.mouse_button.button_mask = BUTTON_MASK_LEFT; + ev.mouse_button.pressed = false; + ev.mouse_button.x = touch[0].pos.x; + ev.mouse_button.y = touch[0].pos.y; + ev.mouse_button.global_x = touch[0].pos.x; + ev.mouse_button.global_y = touch[0].pos.y; input->parse_input_event(ev); - - for(int i=0;i<touch.size();i++) { + for (int i = 0; i < touch.size(); i++) { InputEvent ev; - ev.type=InputEvent::SCREEN_TOUCH; - ev.ID=last_id++; - ev.screen_touch.index=touch[i].id; - ev.screen_touch.pressed=false; - ev.screen_touch.x=touch[i].pos.x; - ev.screen_touch.y=touch[i].pos.y; + ev.type = InputEvent::SCREEN_TOUCH; + ev.ID = last_id++; + ev.screen_touch.index = touch[i].id; + ev.screen_touch.pressed = false; + ev.screen_touch.x = touch[i].pos.x; + ev.screen_touch.y = touch[i].pos.y; input->parse_input_event(ev); - } } touch.resize(p_points.size()); - for(int i=0;i<p_points.size();i++) { - touch[i].id=p_points[i].id; - touch[i].pos=p_points[i].pos; + for (int i = 0; i < p_points.size(); i++) { + touch[i].id = p_points[i].id; + touch[i].pos = p_points[i].pos; } { //send mouse InputEvent ev; - ev.type=InputEvent::MOUSE_BUTTON; - ev.ID=last_id++; - ev.mouse_button.button_index=BUTTON_LEFT; - ev.mouse_button.button_mask=BUTTON_MASK_LEFT; - ev.mouse_button.pressed=true; - ev.mouse_button.x=touch[0].pos.x; - ev.mouse_button.y=touch[0].pos.y; - ev.mouse_button.global_x=touch[0].pos.x; - ev.mouse_button.global_y=touch[0].pos.y; - last_mouse=touch[0].pos; + ev.type = InputEvent::MOUSE_BUTTON; + ev.ID = last_id++; + ev.mouse_button.button_index = BUTTON_LEFT; + ev.mouse_button.button_mask = BUTTON_MASK_LEFT; + ev.mouse_button.pressed = true; + ev.mouse_button.x = touch[0].pos.x; + ev.mouse_button.y = touch[0].pos.y; + ev.mouse_button.global_x = touch[0].pos.x; + ev.mouse_button.global_y = touch[0].pos.y; + last_mouse = touch[0].pos; input->parse_input_event(ev); } - //send touch - for(int i=0;i<touch.size();i++) { + for (int i = 0; i < touch.size(); i++) { InputEvent ev; - ev.type=InputEvent::SCREEN_TOUCH; - ev.ID=last_id++; - ev.screen_touch.index=touch[i].id; - ev.screen_touch.pressed=true; - ev.screen_touch.x=touch[i].pos.x; - ev.screen_touch.y=touch[i].pos.y; + ev.type = InputEvent::SCREEN_TOUCH; + ev.ID = last_id++; + ev.screen_touch.index = touch[i].id; + ev.screen_touch.pressed = true; + ev.screen_touch.x = touch[i].pos.x; + ev.screen_touch.y = touch[i].pos.y; input->parse_input_event(ev); } } break; case 1: { //motion - if (p_points.size()) { //send mouse, should look for point 0? InputEvent ev; - ev.type=InputEvent::MOUSE_MOTION; - ev.ID=last_id++; - ev.mouse_motion.button_mask=BUTTON_MASK_LEFT; - ev.mouse_motion.x=p_points[0].pos.x; - ev.mouse_motion.y=p_points[0].pos.y; - input->set_mouse_pos(Point2(ev.mouse_motion.x,ev.mouse_motion.y)); - ev.mouse_motion.speed_x=input->get_last_mouse_speed().x; - ev.mouse_motion.speed_y=input->get_last_mouse_speed().y; - ev.mouse_motion.relative_x=p_points[0].pos.x-last_mouse.x; - ev.mouse_motion.relative_y=p_points[0].pos.y-last_mouse.y; - last_mouse=p_points[0].pos; + ev.type = InputEvent::MOUSE_MOTION; + ev.ID = last_id++; + ev.mouse_motion.button_mask = BUTTON_MASK_LEFT; + ev.mouse_motion.x = p_points[0].pos.x; + ev.mouse_motion.y = p_points[0].pos.y; + input->set_mouse_pos(Point2(ev.mouse_motion.x, ev.mouse_motion.y)); + ev.mouse_motion.speed_x = input->get_last_mouse_speed().x; + ev.mouse_motion.speed_y = input->get_last_mouse_speed().y; + ev.mouse_motion.relative_x = p_points[0].pos.x - last_mouse.x; + ev.mouse_motion.relative_y = p_points[0].pos.y - last_mouse.y; + last_mouse = p_points[0].pos; input->parse_input_event(ev); } - ERR_FAIL_COND(touch.size()!=p_points.size()); + ERR_FAIL_COND(touch.size() != p_points.size()); - for(int i=0;i<touch.size();i++) { + for (int i = 0; i < touch.size(); i++) { - int idx=-1; - for(int j=0;j<p_points.size();j++) { + int idx = -1; + for (int j = 0; j < p_points.size(); j++) { - if (touch[i].id==p_points[j].id) { - idx=j; + if (touch[i].id == p_points[j].id) { + idx = j; break; } - } - ERR_CONTINUE(idx==-1); + ERR_CONTINUE(idx == -1); - if (touch[i].pos==p_points[idx].pos) + if (touch[i].pos == p_points[idx].pos) continue; //no move unncesearily InputEvent ev; - ev.type=InputEvent::SCREEN_DRAG; - ev.ID=last_id++; - ev.screen_drag.index=touch[i].id; - ev.screen_drag.x=p_points[idx].pos.x; - ev.screen_drag.y=p_points[idx].pos.y; - ev.screen_drag.relative_x=p_points[idx].pos.x - touch[i].pos.x; - ev.screen_drag.relative_y=p_points[idx].pos.y - touch[i].pos.y; + ev.type = InputEvent::SCREEN_DRAG; + ev.ID = last_id++; + ev.screen_drag.index = touch[i].id; + ev.screen_drag.x = p_points[idx].pos.x; + ev.screen_drag.y = p_points[idx].pos.y; + ev.screen_drag.relative_x = p_points[idx].pos.x - touch[i].pos.x; + ev.screen_drag.relative_y = p_points[idx].pos.y - touch[i].pos.y; input->parse_input_event(ev); - touch[i].pos=p_points[idx].pos; + touch[i].pos = p_points[idx].pos; } - } break; case 2: { //release - - if (touch.size()) { //end all if exist InputEvent ev; - ev.type=InputEvent::MOUSE_BUTTON; - ev.ID=last_id++; - ev.mouse_button.button_index=BUTTON_LEFT; - ev.mouse_button.button_mask=BUTTON_MASK_LEFT; - ev.mouse_button.pressed=false; - ev.mouse_button.x=touch[0].pos.x; - ev.mouse_button.y=touch[0].pos.y; - ev.mouse_button.global_x=touch[0].pos.x; - ev.mouse_button.global_y=touch[0].pos.y; + ev.type = InputEvent::MOUSE_BUTTON; + ev.ID = last_id++; + ev.mouse_button.button_index = BUTTON_LEFT; + ev.mouse_button.button_mask = BUTTON_MASK_LEFT; + ev.mouse_button.pressed = false; + ev.mouse_button.x = touch[0].pos.x; + ev.mouse_button.y = touch[0].pos.y; + ev.mouse_button.global_x = touch[0].pos.x; + ev.mouse_button.global_y = touch[0].pos.y; input->parse_input_event(ev); - - for(int i=0;i<touch.size();i++) { + for (int i = 0; i < touch.size(); i++) { InputEvent ev; - ev.type=InputEvent::SCREEN_TOUCH; - ev.ID=last_id++; - ev.screen_touch.index=touch[i].id; - ev.screen_touch.pressed=false; - ev.screen_touch.x=touch[i].pos.x; - ev.screen_touch.y=touch[i].pos.y; + ev.type = InputEvent::SCREEN_TOUCH; + ev.ID = last_id++; + ev.screen_touch.index = touch[i].id; + ev.screen_touch.pressed = false; + ev.screen_touch.x = touch[i].pos.x; + ev.screen_touch.y = touch[i].pos.y; input->parse_input_event(ev); - } touch.clear(); } @@ -546,38 +522,33 @@ void OS_Android::process_touch(int p_what,int p_pointer, const Vector<TouchPos>& } break; case 3: { // add tuchi + ERR_FAIL_INDEX(p_pointer, p_points.size()); - - - - ERR_FAIL_INDEX(p_pointer,p_points.size()); - - TouchPos tp=p_points[p_pointer]; + TouchPos tp = p_points[p_pointer]; touch.push_back(tp); InputEvent ev; - ev.type=InputEvent::SCREEN_TOUCH; - ev.ID=last_id++; - ev.screen_touch.index=tp.id; - ev.screen_touch.pressed=true; - ev.screen_touch.x=tp.pos.x; - ev.screen_touch.y=tp.pos.y; + ev.type = InputEvent::SCREEN_TOUCH; + ev.ID = last_id++; + ev.screen_touch.index = tp.id; + ev.screen_touch.pressed = true; + ev.screen_touch.x = tp.pos.x; + ev.screen_touch.y = tp.pos.y; input->parse_input_event(ev); } break; case 4: { - - for(int i=0;i<touch.size();i++) { - if (touch[i].id==p_pointer) { + for (int i = 0; i < touch.size(); i++) { + if (touch[i].id == p_pointer) { InputEvent ev; - ev.type=InputEvent::SCREEN_TOUCH; - ev.ID=last_id++; - ev.screen_touch.index=touch[i].id; - ev.screen_touch.pressed=false; - ev.screen_touch.x=touch[i].pos.x; - ev.screen_touch.y=touch[i].pos.y; + ev.type = InputEvent::SCREEN_TOUCH; + ev.ID = last_id++; + ev.screen_touch.index = touch[i].id; + ev.screen_touch.pressed = false; + ev.screen_touch.x = touch[i].pos.x; + ev.screen_touch.y = touch[i].pos.y; input->parse_input_event(ev); touch.remove(i); i--; @@ -585,22 +556,20 @@ void OS_Android::process_touch(int p_what,int p_pointer, const Vector<TouchPos>& } } break; - } - } -void OS_Android::process_accelerometer(const Vector3& p_accelerometer) { +void OS_Android::process_accelerometer(const Vector3 &p_accelerometer) { input->set_accelerometer(p_accelerometer); } -void OS_Android::process_magnetometer(const Vector3& p_magnetometer) { +void OS_Android::process_magnetometer(const Vector3 &p_magnetometer) { input->set_magnetometer(p_magnetometer); } -void OS_Android::process_gyroscope(const Vector3& p_gyroscope) { +void OS_Android::process_gyroscope(const Vector3 &p_gyroscope) { input->set_gyroscope(p_gyroscope); } @@ -615,7 +584,7 @@ bool OS_Android::has_virtual_keyboard() const { return true; } -void OS_Android::show_virtual_keyboard(const String& p_existing_text,const Rect2& p_screen_rect) { +void OS_Android::show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect) { if (show_virtual_keyboard_func) { show_virtual_keyboard_func(p_existing_text); @@ -636,13 +605,12 @@ void OS_Android::hide_virtual_keyboard() { }; } +void OS_Android::init_video_mode(int p_video_width, int p_video_height) { -void OS_Android::init_video_mode(int p_video_width,int p_video_height) { - - default_videomode.width=p_video_width; - default_videomode.height=p_video_height; - default_videomode.fullscreen=true; - default_videomode.resizable=false; + default_videomode.width = p_video_width; + default_videomode.height = p_video_height; + default_videomode.fullscreen = true; + default_videomode.resizable = false; } void OS_Android::main_loop_request_go_back() { @@ -653,14 +621,14 @@ void OS_Android::main_loop_request_go_back() { void OS_Android::set_display_size(Size2 p_size) { - default_videomode.width=p_size.x; - default_videomode.height=p_size.y; + default_videomode.width = p_size.x; + default_videomode.height = p_size.y; } void OS_Android::reload_gfx() { if (gfx_init_func) - gfx_init_func(gfx_init_ud,use_gl2); + gfx_init_func(gfx_init_ud, use_gl2); if (rasterizer) rasterizer->reload_vram(); } @@ -668,7 +636,7 @@ void OS_Android::reload_gfx() { Error OS_Android::shell_open(String p_uri) { if (open_uri_func) - return open_uri_func(p_uri)?ERR_CANT_OPEN:OK; + return open_uri_func(p_uri) ? ERR_CANT_OPEN : OK; return ERR_UNAVAILABLE; } @@ -686,9 +654,9 @@ String OS_Android::get_locale() const { String OS_Android::get_model_name() const { - if (get_model_func) - return get_model_func(); - return OS_Unix::get_model_name(); + if (get_model_func) + return get_model_func(); + return OS_Unix::get_model_name(); } int OS_Android::get_screen_dpi(int p_screen) const { @@ -701,27 +669,27 @@ int OS_Android::get_screen_dpi(int p_screen) const { void OS_Android::set_need_reload_hooks(bool p_needs_them) { - use_reload_hooks=p_needs_them; + use_reload_hooks = p_needs_them; } String OS_Android::get_data_dir() const { - if (data_dir_cache!=String()) + if (data_dir_cache != String()) return data_dir_cache; if (get_data_dir_func) { - String data_dir=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); + 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); + getcwd(data_current_dir_name, 2048); //cache by parsing utf8 data_dir_cache.parse_utf8(data_current_dir_name); @@ -732,19 +700,16 @@ String OS_Android::get_data_dir() const { return data_dir_cache; } - return "."; //return GlobalConfig::get_singleton()->get_singleton_object("GodotOS")->call("get_data_dir"); } - void OS_Android::set_screen_orientation(ScreenOrientation p_orientation) { if (set_screen_orientation_func) set_screen_orientation_func(p_orientation); } - String OS_Android::get_unique_ID() const { if (get_unique_id_func) @@ -755,13 +720,13 @@ String OS_Android::get_unique_ID() const { Error OS_Android::native_video_play(String p_path, float p_volume) { if (video_play_func) video_play_func(p_path); - return OK; + return OK; } bool OS_Android::native_video_is_playing() { if (video_is_playing_func) return video_is_playing_func(); - return false; + return false; } void OS_Android::native_video_pause() { @@ -783,7 +748,7 @@ void OS_Android::native_video_stop() { void OS_Android::set_context_is_16_bits(bool p_is_16) { - use_16bits_fbo=p_is_16; + use_16bits_fbo = p_is_16; if (rasterizer) rasterizer->set_force_16_bits_fbo(p_is_16); } @@ -800,29 +765,29 @@ String OS_Android::get_joy_guid(int p_device) const { return input->get_joy_guid_remapped(p_device); } -OS_Android::OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func,GetLocaleFunc p_get_locale_func,GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient,GetUniqueIDFunc p_get_unique_id,GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, AlertFunc p_alert_func, bool p_use_apk_expansion) { +OS_Android::OS_Android(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func, GetLocaleFunc p_get_locale_func, GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient, GetUniqueIDFunc p_get_unique_id, GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, AlertFunc p_alert_func, bool p_use_apk_expansion) { - use_apk_expansion=p_use_apk_expansion; - default_videomode.width=800; - default_videomode.height=600; - default_videomode.fullscreen=true; - default_videomode.resizable=false; + use_apk_expansion = p_use_apk_expansion; + default_videomode.width = 800; + default_videomode.height = 600; + default_videomode.fullscreen = true; + default_videomode.resizable = false; - gfx_init_func=p_gfx_init_func; - gfx_init_ud=p_gfx_init_ud; - main_loop=NULL; - last_id=1; - gl_extensions=NULL; - rasterizer=NULL; - use_gl2=false; + gfx_init_func = p_gfx_init_func; + gfx_init_ud = p_gfx_init_ud; + main_loop = NULL; + last_id = 1; + gl_extensions = NULL; + rasterizer = NULL; + use_gl2 = false; - open_uri_func=p_open_uri_func; - get_data_dir_func=p_get_data_dir_func; - get_locale_func=p_get_locale_func; - get_model_func=p_get_model_func; + open_uri_func = p_open_uri_func; + get_data_dir_func = p_get_data_dir_func; + get_locale_func = p_get_locale_func; + get_model_func = p_get_model_func; get_screen_dpi_func = p_get_screen_dpi_func; - get_unique_id_func=p_get_unique_id; - get_system_dir_func=p_get_sdir_func; + get_unique_id_func = p_get_unique_id; + get_system_dir_func = p_get_sdir_func; video_play_func = p_video_play_func; video_is_playing_func = p_video_is_playing_func; @@ -832,13 +797,11 @@ OS_Android::OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFu show_virtual_keyboard_func = p_show_vk; hide_virtual_keyboard_func = p_hide_vk; - set_screen_orientation_func=p_screen_orient; + set_screen_orientation_func = p_screen_orient; set_keep_screen_on_func = p_set_keep_screen_on_func; alert_func = p_alert_func; - use_reload_hooks=false; - + use_reload_hooks = false; } OS_Android::~OS_Android() { - } diff --git a/platform/android/os_android.h b/platform/android/os_android.h index ead3969744..2c0be8e3c1 100644 --- a/platform/android/os_android.h +++ b/platform/android/os_android.h @@ -29,47 +29,46 @@ #ifndef OS_ANDROID_H #define OS_ANDROID_H -#include "os/input.h" +#include "audio_driver_jandroid.h" +#include "audio_driver_opensl.h" #include "drivers/unix/os_unix.h" +#include "main/input_default.h" +#include "os/input.h" #include "os/main_loop.h" #include "power_android.h" -#include "servers/physics/physics_server_sw.h" #include "servers/audio_server.h" +#include "servers/physics/physics_server_sw.h" #include "servers/physics_2d/physics_2d_server_sw.h" #include "servers/physics_2d/physics_2d_server_wrap_mt.h" #include "servers/visual/rasterizer.h" -#include "main/input_default.h" -#include "audio_driver_jandroid.h" -#include "audio_driver_opensl.h" #ifdef ANDROID_NATIVE_ACTIVITY -#include <android/sensor.h> #include <android/log.h> +#include <android/sensor.h> #include <android_native_app_glue.h> #endif -typedef void (*GFXInitFunc)(void *ud,bool gl2); -typedef int (*OpenURIFunc)(const String&); +typedef void (*GFXInitFunc)(void *ud, bool gl2); +typedef int (*OpenURIFunc)(const String &); typedef String (*GetDataDirFunc)(); typedef String (*GetLocaleFunc)(); typedef String (*GetModelFunc)(); typedef int (*GetScreenDPIFunc)(); typedef String (*GetUniqueIDFunc)(); -typedef void (*ShowVirtualKeyboardFunc)(const String&); +typedef void (*ShowVirtualKeyboardFunc)(const String &); typedef void (*HideVirtualKeyboardFunc)(); typedef void (*SetScreenOrientationFunc)(int); typedef String (*GetSystemDirFunc)(int); -typedef void (*VideoPlayFunc)(const String&); +typedef void (*VideoPlayFunc)(const String &); typedef bool (*VideoIsPlayingFunc)(); typedef void (*VideoPauseFunc)(); typedef void (*VideoStopFunc)(); typedef void (*SetKeepScreenOnFunc)(bool p_enabled); -typedef void (*AlertFunc)(const String&, const String&); +typedef void (*AlertFunc)(const String &, const String &); class OS_Android : public OS_Unix { public: - struct TouchPos { int id; Point2 pos; @@ -92,13 +91,12 @@ public: }; private: - Vector<TouchPos> touch; Point2 last_mouse; unsigned int last_id; GFXInitFunc gfx_init_func; - void*gfx_init_ud; + void *gfx_init_ud; bool use_gl2; bool use_reload_hooks; @@ -119,11 +117,11 @@ private: AudioDriverOpenSL audio_driver_android; #endif - const char* gl_extensions; + const char *gl_extensions; InputDefault *input; VideoMode default_videomode; - MainLoop * main_loop; + MainLoop *main_loop; OpenURIFunc open_uri_func; GetDataDirFunc get_data_dir_func; @@ -146,47 +144,44 @@ private: power_android *power_manager; public: - // functions used by main to initialize/deintialize the OS virtual int get_video_driver_count() const; - virtual const char * get_video_driver_name(int p_driver) const; + virtual const char *get_video_driver_name(int p_driver) const; virtual VideoMode get_default_video_mode() const; virtual int get_audio_driver_count() const; - virtual const char * get_audio_driver_name(int p_driver) const; + virtual const char *get_audio_driver_name(int p_driver) const; virtual void initialize_core(); - virtual void initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver); + virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver); - virtual void set_main_loop( MainLoop * p_main_loop ); + virtual void set_main_loop(MainLoop *p_main_loop); virtual void delete_main_loop(); virtual void finalize(); - typedef int64_t ProcessID; - static OS* get_singleton(); - - virtual void vprint(const char* p_format, va_list p_list, bool p_stderr=false); - virtual void print(const char *p_format, ... ); - virtual void alert(const String& p_alert,const String& p_title="ALERT!"); + static OS *get_singleton(); + virtual void vprint(const char *p_format, va_list p_list, bool p_stderr = false); + virtual void print(const char *p_format, ...); + virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); virtual void set_mouse_show(bool p_show); virtual void set_mouse_grab(bool p_grab); virtual bool is_mouse_grab_enabled() const; virtual Point2 get_mouse_pos() const; virtual int get_mouse_button_state() const; - virtual void set_window_title(const String& p_title); + virtual void set_window_title(const String &p_title); //virtual void set_clipboard(const String& p_text); //virtual String get_clipboard() const; - virtual void set_video_mode(const VideoMode& p_video_mode,int p_screen=0); - virtual VideoMode get_video_mode(int p_screen=0) const; - virtual void get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen=0) const; + virtual void set_video_mode(const VideoMode &p_video_mode, int p_screen = 0); + virtual VideoMode get_video_mode(int p_screen = 0) const; + virtual void get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen = 0) const; virtual void set_keep_screen_on(bool p_enabled); @@ -209,10 +204,10 @@ public: virtual bool has_touchscreen_ui_hint() const; virtual bool has_virtual_keyboard() const; - virtual void show_virtual_keyboard(const String& p_existing_text,const Rect2& p_screen_rect=Rect2()); + virtual void show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect = Rect2()); virtual void hide_virtual_keyboard(); - void set_opengl_extensions(const char* p_gl_extensions); + void set_opengl_extensions(const char *p_gl_extensions); void set_display_size(Size2 p_size); void reload_gfx(); @@ -226,20 +221,19 @@ public: virtual String get_resource_dir() const; virtual String get_locale() const; virtual String get_model_name() const; - virtual int get_screen_dpi(int p_screen=0) const; + virtual int get_screen_dpi(int p_screen = 0) const; virtual String get_unique_ID() const; virtual String get_system_dir(SystemDir p_dir) const; - - void process_accelerometer(const Vector3& p_accelerometer); - void process_magnetometer(const Vector3& p_magnetometer); - void process_gyroscope(const Vector3& p_gyroscope); - void process_touch(int p_what,int p_pointer, const Vector<TouchPos>& p_points); + void process_accelerometer(const Vector3 &p_accelerometer); + void process_magnetometer(const Vector3 &p_magnetometer); + void process_gyroscope(const Vector3 &p_gyroscope); + void process_touch(int p_what, int p_pointer, const Vector<TouchPos> &p_points); void process_joy_event(JoypadEvent p_event); void process_event(InputEvent p_event); - void init_video_mode(int p_video_width,int p_video_height); + void init_video_mode(int p_video_width, int p_video_height); virtual Error native_video_play(String p_path, float p_volume); virtual bool native_video_is_playing(); @@ -250,9 +244,8 @@ public: virtual String get_joy_guid(int p_device) const; void joy_connection_changed(int p_device, bool p_connected, String p_name); - OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func,GetLocaleFunc p_get_locale_func,GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient,GetUniqueIDFunc p_get_unique_id,GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, AlertFunc p_alert_func, bool p_use_apk_expansion); + OS_Android(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func, GetLocaleFunc p_get_locale_func, GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient, GetUniqueIDFunc p_get_unique_id, GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, AlertFunc p_alert_func, bool p_use_apk_expansion); ~OS_Android(); - }; #endif diff --git a/platform/android/power_android.cpp b/platform/android/power_android.cpp index dc3a4ec90c..aa37dc51e2 100644 --- a/platform/android/power_android.cpp +++ b/platform/android/power_android.cpp @@ -32,51 +32,45 @@ #include "power_android.h" static void LocalReferenceHolder_Cleanup(struct LocalReferenceHolder *refholder) { - if (refholder->m_env) { - JNIEnv* env = refholder->m_env; - (*env)->PopLocalFrame(env, NULL); - --s_active; - } + if (refholder->m_env) { + JNIEnv *env = refholder->m_env; + (*env)->PopLocalFrame(env, NULL); + --s_active; + } } -static struct LocalReferenceHolder LocalReferenceHolder_Setup(const char *func) -{ - struct LocalReferenceHolder refholder; - refholder.m_env = NULL; - refholder.m_func = func; - return refholder; +static struct LocalReferenceHolder LocalReferenceHolder_Setup(const char *func) { + struct LocalReferenceHolder refholder; + refholder.m_env = NULL; + refholder.m_func = func; + return refholder; } -static bool LocalReferenceHolder_Init(struct LocalReferenceHolder *refholder, JNIEnv *env) -{ - const int capacity = 16; - if ((*env)->PushLocalFrame(env, capacity) < 0) { - return false; - } - ++s_active; - refholder->m_env = env; - return true; +static bool LocalReferenceHolder_Init(struct LocalReferenceHolder *refholder, JNIEnv *env) { + const int capacity = 16; + if ((*env)->PushLocalFrame(env, capacity) < 0) { + return false; + } + ++s_active; + refholder->m_env = env; + return true; } - -static SDL_bool LocalReferenceHolder_IsActive(void) -{ - return s_active > 0; +static SDL_bool LocalReferenceHolder_IsActive(void) { + return s_active > 0; } -ANativeWindow* Android_JNI_GetNativeWindow(void) -{ - ANativeWindow* anw; - jobject s; - JNIEnv *env = Android_JNI_GetEnv(); - - s = (*env)->CallStaticObjectMethod(env, mActivityClass, midGetNativeSurface); - anw = ANativeWindow_fromSurface(env, s); - (*env)->DeleteLocalRef(env, s); - - return anw; -} +ANativeWindow *Android_JNI_GetNativeWindow(void) { + ANativeWindow *anw; + jobject s; + JNIEnv *env = Android_JNI_GetEnv(); + s = (*env)->CallStaticObjectMethod(env, mActivityClass, midGetNativeSurface); + anw = ANativeWindow_fromSurface(env, s); + (*env)->DeleteLocalRef(env, s); + + return anw; +} /* * CODE CHUNK IMPORTED FROM SDL 2.0 @@ -84,11 +78,10 @@ ANativeWindow* Android_JNI_GetNativeWindow(void) * returns truthy or falsy value in plugged, charged and battery * returns the value in seconds and percent or -1 if not available */ -int Android_JNI_GetPowerInfo(int* plugged, int* charged, int* battery, int* seconds, int* percent) -{ +int Android_JNI_GetPowerInfo(int *plugged, int *charged, int *battery, int *seconds, int *percent) { env = Android_JNI_GetEnv(); refs = LocalReferenceHolder_Setup(__FUNCTION__); - + if (!LocalReferenceHolder_Init(&refs, env)) { LocalReferenceHolder_Cleanup(&refs); return -1; @@ -105,17 +98,17 @@ int Android_JNI_GetPowerInfo(int* plugged, int* charged, int* battery, int* seco (*env)->DeleteLocalRef(env, filter); cls = (*env)->GetObjectClass(env, intent); imid = (*env)->GetMethodID(env, cls, "getIntExtra", "(Ljava/lang/String;I)I"); - // Watch out for C89 scoping rules because of the macro -#define GET_INT_EXTRA(var, key) \ - int var; \ - iname = (*env)->NewStringUTF(env, key); \ +// Watch out for C89 scoping rules because of the macro +#define GET_INT_EXTRA(var, key) \ + int var; \ + iname = (*env)->NewStringUTF(env, key); \ var = (*env)->CallIntMethod(env, intent, imid, iname, -1); \ (*env)->DeleteLocalRef(env, iname); bmid = (*env)->GetMethodID(env, cls, "getBooleanExtra", "(Ljava/lang/String;Z)Z"); - // Watch out for C89 scoping rules because of the macro -#define GET_BOOL_EXTRA(var, key) \ - int var; \ - bname = (*env)->NewStringUTF(env, key); \ +// Watch out for C89 scoping rules because of the macro +#define GET_BOOL_EXTRA(var, key) \ + int var; \ + bname = (*env)->NewStringUTF(env, key); \ var = (*env)->CallBooleanMethod(env, intent, bmid, bname, JNI_FALSE); \ (*env)->DeleteLocalRef(env, bname); if (plugged) { @@ -167,11 +160,10 @@ int Android_JNI_GetPowerInfo(int* plugged, int* charged, int* battery, int* seco } (*env)->DeleteLocalRef(env, intent); LocalReferenceHolder_Cleanup(&refs); - + return 0; } - bool power_android::GetPowerInfo_Android() { int battery; int plugged; @@ -203,8 +195,7 @@ bool power_android::GetPowerInfo_Android() { PowerState power_android::get_power_state() { if (GetPowerInfo_Android()) { return power_state; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to POWERSTATE_UNKNOWN"); return POWERSTATE_UNKNOWN; } @@ -213,8 +204,7 @@ PowerState power_android::get_power_state() { int power_android::get_power_seconds_left() { if (GetPowerInfo_Android()) { return nsecs_left; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to -1"); return -1; } @@ -223,15 +213,14 @@ int power_android::get_power_seconds_left() { int power_android::get_power_percent_left() { if (GetPowerInfo_Android()) { return percent_left; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to -1"); return -1; } } -power_android::power_android() : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { - +power_android::power_android() + : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { } power_android::~power_android() { diff --git a/platform/android/power_android.h b/platform/android/power_android.h index c59bdf3888..df4983bbf3 100644 --- a/platform/android/power_android.h +++ b/platform/android/power_android.h @@ -35,15 +35,14 @@ class power_android { -struct LocalReferenceHolder -{ - JNIEnv *m_env; - const char *m_func; -}; + struct LocalReferenceHolder { + JNIEnv *m_env; + const char *m_func; + }; private: static struct LocalReferenceHolder refs; - static JNIEnv* env; + static JNIEnv *env; static jmethodID mid; static jobject context; static jstring action; @@ -55,7 +54,6 @@ private: static jstring bname; static jmethodID bmid; - int nsecs_left; int percent_left; PowerState power_state; @@ -64,9 +62,7 @@ private: bool UpdatePowerInfo(); public: - static int s_active; - power_android(); virtual ~power_android(); diff --git a/platform/android/thread_jandroid.cpp b/platform/android/thread_jandroid.cpp index aa40d995d9..854cdb1e34 100644 --- a/platform/android/thread_jandroid.cpp +++ b/platform/android/thread_jandroid.cpp @@ -36,29 +36,29 @@ Thread::ID ThreadAndroid::get_ID() const { return id; } -Thread* ThreadAndroid::create_thread_jandroid() { +Thread *ThreadAndroid::create_thread_jandroid() { - return memnew( ThreadAndroid ); + return memnew(ThreadAndroid); } void *ThreadAndroid::thread_callback(void *userdata) { - ThreadAndroid *t=reinterpret_cast<ThreadAndroid*>(userdata); + ThreadAndroid *t = reinterpret_cast<ThreadAndroid *>(userdata); setup_thread(); ScriptServer::thread_enter(); //scripts may need to attach a stack - t->id=(ID)pthread_self(); + t->id = (ID)pthread_self(); t->callback(t->user); ScriptServer::thread_exit(); return NULL; } -Thread* ThreadAndroid::create_func_jandroid(ThreadCreateCallback p_callback,void *p_user,const Settings&) { +Thread *ThreadAndroid::create_func_jandroid(ThreadCreateCallback p_callback, void *p_user, const Settings &) { - ThreadAndroid *tr= memnew(ThreadAndroid); - tr->callback=p_callback; - tr->user=p_user; + ThreadAndroid *tr = memnew(ThreadAndroid); + tr->callback = p_callback; + tr->user = p_user; pthread_attr_init(&tr->pthread_attr); - pthread_attr_setdetachstate(&tr->pthread_attr, PTHREAD_CREATE_JOINABLE); + pthread_attr_setdetachstate(&tr->pthread_attr, PTHREAD_CREATE_JOINABLE); pthread_create(&tr->pthread, &tr->pthread_attr, thread_callback, tr); @@ -70,29 +70,28 @@ Thread::ID ThreadAndroid::get_thread_ID_func_jandroid() { return (ID)pthread_self(); } -void ThreadAndroid::wait_to_finish_func_jandroid(Thread* p_thread) { +void ThreadAndroid::wait_to_finish_func_jandroid(Thread *p_thread) { - ThreadAndroid *tp=static_cast<ThreadAndroid*>(p_thread); + ThreadAndroid *tp = static_cast<ThreadAndroid *>(p_thread); ERR_FAIL_COND(!tp); - ERR_FAIL_COND(tp->pthread==0); + ERR_FAIL_COND(tp->pthread == 0); - pthread_join(tp->pthread,NULL); - tp->pthread=0; + pthread_join(tp->pthread, NULL); + tp->pthread = 0; } -void ThreadAndroid::_thread_destroyed(void* value) { +void ThreadAndroid::_thread_destroyed(void *value) { /* The thread is being destroyed, detach it from the Java VM and set the mThreadKey value to NULL as required */ - JNIEnv *env = (JNIEnv*) value; + JNIEnv *env = (JNIEnv *)value; if (env != NULL) { java_vm->DetachCurrentThread(); pthread_setspecific(jvm_key, NULL); } - } pthread_key_t ThreadAndroid::jvm_key; -JavaVM* ThreadAndroid::java_vm=NULL; +JavaVM *ThreadAndroid::java_vm = NULL; void ThreadAndroid::setup_thread() { @@ -100,19 +99,17 @@ void ThreadAndroid::setup_thread() { return; //already setup JNIEnv *env; java_vm->AttachCurrentThread(&env, NULL); - pthread_setspecific(jvm_key, (void*) env); - + pthread_setspecific(jvm_key, (void *)env); } -void ThreadAndroid::make_default(JavaVM* p_java_vm) { +void ThreadAndroid::make_default(JavaVM *p_java_vm) { - java_vm=p_java_vm; - create_func=create_func_jandroid; - get_thread_ID_func=get_thread_ID_func_jandroid; - wait_to_finish_func=wait_to_finish_func_jandroid; + java_vm = p_java_vm; + create_func = create_func_jandroid; + get_thread_ID_func = get_thread_ID_func_jandroid; + wait_to_finish_func = wait_to_finish_func_jandroid; pthread_key_create(&jvm_key, _thread_destroyed); setup_thread(); - } JNIEnv *ThreadAndroid::get_env() { @@ -121,20 +118,15 @@ JNIEnv *ThreadAndroid::get_env() { setup_thread(); } - JNIEnv *env=NULL; + JNIEnv *env = NULL; int status = java_vm->AttachCurrentThread(&env, NULL); return env; } - ThreadAndroid::ThreadAndroid() { - pthread=0; + pthread = 0; } - ThreadAndroid::~ThreadAndroid() { - } - - diff --git a/platform/android/thread_jandroid.h b/platform/android/thread_jandroid.h index 6f52b730f1..a8d8a4d8b1 100644 --- a/platform/android/thread_jandroid.h +++ b/platform/android/thread_jandroid.h @@ -33,11 +33,10 @@ @author Juan Linietsky <reduzio@gmail.com> */ - -#include <sys/types.h> -#include <pthread.h> #include "os/thread.h" #include <jni.h> +#include <pthread.h> +#include <sys/types.h> class ThreadAndroid : public Thread { @@ -47,36 +46,28 @@ class ThreadAndroid : public Thread { void *user; ID id; - static Thread* create_thread_jandroid(); - + static Thread *create_thread_jandroid(); static void *thread_callback(void *userdata); - static Thread* create_func_jandroid(ThreadCreateCallback p_callback,void *,const Settings&); + static Thread *create_func_jandroid(ThreadCreateCallback p_callback, void *, const Settings &); static ID get_thread_ID_func_jandroid(); - static void wait_to_finish_func_jandroid(Thread* p_thread); + static void wait_to_finish_func_jandroid(Thread *p_thread); - static void _thread_destroyed(void* value); + static void _thread_destroyed(void *value); ThreadAndroid(); static pthread_key_t jvm_key; - static JavaVM* java_vm; -public: - - - + static JavaVM *java_vm; +public: virtual ID get_ID() const; - static void make_default(JavaVM* p_java_vm); + static void make_default(JavaVM *p_java_vm); static void setup_thread(); static JNIEnv *get_env(); - ~ThreadAndroid(); - }; - - #endif |