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 | |
parent | 45438e9918d421b244bfd7776a30e67dc7f2d3e3 (diff) | |
download | redot-engine-5dbf1809c6e3e905b94b8764e99491e608122261.tar.gz |
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')
141 files changed, 7252 insertions, 8475 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 diff --git a/platform/bb10/audio_driver_bb10.cpp b/platform/bb10/audio_driver_bb10.cpp index b6ea0bc267..5416fc5f02 100644 --- a/platform/bb10/audio_driver_bb10.cpp +++ b/platform/bb10/audio_driver_bb10.cpp @@ -34,11 +34,11 @@ Error AudioDriverBB10::init() { return init(NULL); }; -Error AudioDriverBB10::init(const char* p_name) { +Error AudioDriverBB10::init(const char *p_name) { - active=false; - thread_exited=false; - exit_thread=false; + active = false; + thread_exited = false; + exit_thread = false; pcm_open = false; samples_in = NULL; samples_out = NULL; @@ -46,11 +46,11 @@ Error AudioDriverBB10::init(const char* p_name) { mix_rate = 44100; speaker_mode = SPEAKER_MODE_STEREO; - char* dev_name; + char *dev_name; if (p_name == NULL) { dev_name = "pcmPreferred"; } else { - dev_name = (char *) p_name; + dev_name = (char *)p_name; } printf("******** reconnecting to device %s\n", dev_name); int ret = snd_pcm_open_name(&pcm_handle, dev_name, SND_PCM_OPEN_PLAYBACK); @@ -58,7 +58,7 @@ Error AudioDriverBB10::init(const char* p_name) { pcm_open = true; snd_pcm_channel_info_t cinfo; - zeromem(&cinfo, sizeof (cinfo)); + zeromem(&cinfo, sizeof(cinfo)); cinfo.channel = SND_PCM_CHANNEL_PLAYBACK; snd_pcm_plugin_info(pcm_handle, &cinfo); @@ -117,9 +117,9 @@ Error AudioDriverBB10::init(const char* p_name) { return OK; }; -void AudioDriverBB10::thread_func(void* p_udata) { +void AudioDriverBB10::thread_func(void *p_udata) { - AudioDriverBB10* ad = (AudioDriverBB10*)p_udata; + AudioDriverBB10 *ad = (AudioDriverBB10 *)p_udata; int channels = speaker_mode; int frame_count = ad->sample_buf_count / channels; @@ -127,10 +127,9 @@ void AudioDriverBB10::thread_func(void* p_udata) { while (!ad->exit_thread) { - if (!ad->active) { - for (int i=0; i < ad->sample_buf_count; i++) { + for (int i = 0; i < ad->sample_buf_count; i++) { ad->samples_out[i] = 0; }; @@ -142,20 +141,19 @@ void AudioDriverBB10::thread_func(void* p_udata) { ad->unlock(); - for(int i=0;i<frame_count*channels;i++) { + for (int i = 0; i < frame_count * channels; i++) { - ad->samples_out[i]=ad->samples_in[i]>>16; + ad->samples_out[i] = ad->samples_in[i] >> 16; } }; - int todo = bytes_out; int total = 0; while (todo) { - uint8_t* src = (uint8_t*)ad->samples_out; - int wrote = snd_pcm_plugin_write(ad->pcm_handle, (void*)(src + total), todo); + uint8_t *src = (uint8_t *)ad->samples_out; + int wrote = snd_pcm_plugin_write(ad->pcm_handle, (void *)(src + total), todo); if (wrote < 0) { // error? break; @@ -179,7 +177,7 @@ void AudioDriverBB10::thread_func(void* p_udata) { break; }; if (status.status == SND_PCM_STATUS_READY || - status.status == SND_PCM_STATUS_UNDERRUN) { + status.status == SND_PCM_STATUS_UNDERRUN) { snd_pcm_plugin_prepare(ad->pcm_handle, SND_PCM_CHANNEL_PLAYBACK); } else { break; @@ -188,9 +186,9 @@ void AudioDriverBB10::thread_func(void* p_udata) { }; }; - snd_pcm_plugin_flush (ad->pcm_handle, SND_PCM_CHANNEL_PLAYBACK); + snd_pcm_plugin_flush(ad->pcm_handle, SND_PCM_CHANNEL_PLAYBACK); - ad->thread_exited=true; + ad->thread_exited = true; printf("**************** audio thread exit\n"); }; @@ -253,4 +251,3 @@ AudioDriverBB10::~AudioDriverBB10() { memdelete(mutex); mutex = NULL; }; - diff --git a/platform/bb10/audio_driver_bb10.h b/platform/bb10/audio_driver_bb10.h index efb98b1b91..2a0ed9c545 100644 --- a/platform/bb10/audio_driver_bb10.h +++ b/platform/bb10/audio_driver_bb10.h @@ -28,23 +28,23 @@ /*************************************************************************/ #include "servers/audio_server.h" -#include "core/os/thread.h" #include "core/os/mutex.h" +#include "core/os/thread.h" #include <sys/asoundlib.h> class AudioDriverBB10 : public AudioDriver { - Thread* thread; - Mutex* mutex; + Thread *thread; + Mutex *mutex; - snd_pcm_t* pcm_handle; + snd_pcm_t *pcm_handle; - int32_t* samples_in; - int16_t* samples_out; + int32_t *samples_in; + int16_t *samples_out; int sample_buf_count; - static void thread_func(void* p_udata); + static void thread_func(void *p_udata); int mix_rate; SpeakerMode speaker_mode; @@ -58,13 +58,12 @@ class AudioDriverBB10 : public AudioDriver { bool pcm_open; public: - - const char* get_name() const { + const char *get_name() const { return "BB10"; }; virtual Error init(); - virtual Error init(const char* p_name); + virtual Error init(const char *p_name); virtual void start(); virtual int get_mix_rate() const; virtual SpeakerMode get_speaker_mode() const; @@ -75,4 +74,3 @@ public: AudioDriverBB10(); ~AudioDriverBB10(); }; - diff --git a/platform/bb10/export/export.cpp b/platform/bb10/export/export.cpp index cf8e2fcc0a..c958bf7ff4 100644 --- a/platform/bb10/export/export.cpp +++ b/platform/bb10/export/export.cpp @@ -26,18 +26,18 @@ /* 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/xml_parser.h" +#include "io/zip_io.h" #include "os/file_access.h" #include "os/os.h" #include "platform/bb10/logo.h" -#include "io/xml_parser.h" +#include "version.h" #define MAX_DEVICES 5 #if 0 @@ -826,5 +826,3 @@ void register_bb10_exporter() { #endif } - - diff --git a/platform/bb10/godot_bb10.cpp b/platform/bb10/godot_bb10.cpp index 4b8270b495..e1826450a6 100644 --- a/platform/bb10/godot_bb10.cpp +++ b/platform/bb10/godot_bb10.cpp @@ -31,12 +31,12 @@ #include <unistd.h> -int main(int argc, char* argv[]) { +int main(int argc, char *argv[]) { OSBB10 os; - Error err = Main::setup(argv[0],argc-1,&argv[1]); - if (err!=OK) + Error err = Main::setup(argv[0], argc - 1, &argv[1]); + if (err != OK) return 255; if (Main::start()) @@ -45,4 +45,3 @@ int main(int argc, char* argv[]) { return os.get_exit_code(); } - diff --git a/platform/bb10/os_bb10.cpp b/platform/bb10/os_bb10.cpp index bf7bfb6909..80e846d3cd 100644 --- a/platform/bb10/os_bb10.cpp +++ b/platform/bb10/os_bb10.cpp @@ -28,37 +28,37 @@ /*************************************************************************/ #include "os_bb10.h" -#include "drivers/gles2/rasterizer_gles2.h" -#include "servers/visual/visual_server_raster.h" -#include "core/os/dir_access.h" -#include "core/global_config.h" -#include "main/main.h" #include "bbutil.h" +#include "core/global_config.h" +#include "core/os/dir_access.h" #include "core/os/keyboard.h" +#include "drivers/gles2/rasterizer_gles2.h" +#include "main/main.h" +#include "servers/visual/visual_server_raster.h" -#include <stdlib.h> -#include <stdbool.h> #include <assert.h> +#include <bps/accelerometer.h> +#include <bps/audiodevice.h> #include <bps/bps.h> -#include <bps/screen.h> #include <bps/navigator.h> -#include <bps/accelerometer.h> #include <bps/orientation.h> +#include <bps/screen.h> #include <bps/virtualkeyboard.h> -#include <bps/audiodevice.h> +#include <stdbool.h> +#include <stdlib.h> #ifdef BB10_SCORELOOP_ENABLED #include "modules/scoreloop/scoreloop_bb10.h" #endif static char launch_dir[512]; -char* launch_dir_ptr; +char *launch_dir_ptr; int OSBB10::get_video_driver_count() const { return 1; } -const char * OSBB10::get_video_driver_name(int p_driver) const { +const char *OSBB10::get_video_driver_name(int p_driver) const { return "GLES2"; } @@ -72,26 +72,26 @@ int OSBB10::get_audio_driver_count() const { return 1; } -const char * OSBB10::get_audio_driver_name(int p_driver) const { +const char *OSBB10::get_audio_driver_name(int p_driver) const { return "BB10"; } -void OSBB10::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) { +void OSBB10::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { data_dir = getenv("HOME"); //Create a screen context that will be used to create an EGL surface to to receive libscreen events - screen_create_context(&screen_cxt,0); + screen_create_context(&screen_cxt, 0); //Initialize BPS library bps_initialize(); //Use utility code to initialize EGL for 2D rendering with GL ES 1.1 enum RENDERING_API api = GL_ES_2; - #ifdef BB10_LGLES_OVERRIDE +#ifdef BB10_LGLES_OVERRIDE api = GL_ES_1; - #endif +#endif if (EXIT_SUCCESS != bbutil_init(screen_cxt, api)) { bbutil_terminate(); screen_destroy_context(screen_cxt); @@ -116,9 +116,9 @@ void OSBB10::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi virtualkeyboard_request_events(0); audiodevice_request_events(0); - #ifdef DEBUG_ENABLED +#ifdef DEBUG_ENABLED bps_set_verbosity(3); - #endif +#endif accel_supported = accelerometer_is_supported(); if (accel_supported) @@ -126,13 +126,13 @@ void OSBB10::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi pitch = 0; roll = 0; - #ifdef BB10_LGLES_OVERRIDE - rasterizer = memnew( RasterizerGLES1(false) ); - #else - rasterizer = memnew( RasterizerGLES2(false, false) ); - #endif +#ifdef BB10_LGLES_OVERRIDE + rasterizer = memnew(RasterizerGLES1(false)); +#else + rasterizer = memnew(RasterizerGLES2(false, false)); +#endif - visual_server = memnew( VisualServerRaster(rasterizer) ); + visual_server = memnew(VisualServerRaster(rasterizer)); visual_server->init(); visual_server->cursor_set_visible(false, 0); @@ -140,39 +140,38 @@ void OSBB10::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi audio_driver->set_singleton(); audio_driver->init(NULL); - physics_server = memnew( PhysicsServerSW ); + physics_server = memnew(PhysicsServerSW); physics_server->init(); - physics_2d_server = memnew( Physics2DServerSW ); + physics_2d_server = memnew(Physics2DServerSW); physics_2d_server->init(); - input = memnew( InputDefault ); - - power_manager = memnew( PowerBB10 ); + input = memnew(InputDefault); + + power_manager = memnew(PowerBB10); - #ifdef PAYMENT_SERVICE_ENABLED +#ifdef PAYMENT_SERVICE_ENABLED payment_service = memnew(PaymentService); Globals::get_singleton()->add_singleton(Globals::Singleton("InAppStore", payment_service)); - #endif - +#endif } -void OSBB10::set_main_loop( MainLoop * p_main_loop ) { +void OSBB10::set_main_loop(MainLoop *p_main_loop) { input->set_main_loop(p_main_loop); - main_loop=p_main_loop; + main_loop = p_main_loop; } void OSBB10::delete_main_loop() { - memdelete( main_loop ); + memdelete(main_loop); main_loop = NULL; } void OSBB10::finalize() { - if(main_loop) + if (main_loop) memdelete(main_loop); - main_loop=NULL; + main_loop = NULL; /* if (debugger_connection_console) { @@ -190,9 +189,9 @@ void OSBB10::finalize() { physics_2d_server->finish(); memdelete(physics_2d_server); - #ifdef PAYMENT_SERVICE_ENABLED +#ifdef PAYMENT_SERVICE_ENABLED memdelete(payment_service); - #endif +#endif memdelete(input); @@ -225,16 +224,14 @@ int OSBB10::get_mouse_button_state() const { return 0; } -void OSBB10::set_window_title(const String& p_title) { - - +void OSBB10::set_window_title(const String &p_title) { } //interesting byt not yet //void set_clipboard(const String& p_text); //String get_clipboard() const; -void OSBB10::set_video_mode(const VideoMode& p_video_mode,int p_screen) { +void OSBB10::set_video_mode(const VideoMode &p_video_mode, int p_screen) { default_videomode = p_video_mode; } @@ -243,7 +240,7 @@ OS::VideoMode OSBB10::get_video_mode(int p_screen) const { return default_videomode; } -void OSBB10::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const { +void OSBB10::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const { p_list->push_back(default_videomode); } @@ -278,128 +275,125 @@ void OSBB10::handle_screen_event(bps_event_t *event) { int pos[2]; switch (screen_val) { - case SCREEN_EVENT_MTOUCH_TOUCH: - case SCREEN_EVENT_MTOUCH_RELEASE: { - - screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_POSITION, pos); - - InputEvent ievent; - ievent.type = InputEvent::SCREEN_TOUCH; - ievent.ID = ++last_id; - ievent.device = 0; - ievent.screen_touch.pressed = (screen_val == SCREEN_EVENT_MTOUCH_TOUCH); - ievent.screen_touch.x = pos[0]; - ievent.screen_touch.y = pos[1]; - Point2 mpos(ievent.screen_touch.x, ievent.screen_touch.y); + case SCREEN_EVENT_MTOUCH_TOUCH: + case SCREEN_EVENT_MTOUCH_RELEASE: { - screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TOUCH_ID, &pos[0]); - ievent.screen_touch.index = pos[0]; - - last_touch_x[pos[0]] = ievent.screen_touch.x; - last_touch_y[pos[0]] = ievent.screen_touch.y; - - input->parse_input_event( ievent ); - - if (ievent.screen_touch.index == 0) { + screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_POSITION, pos); InputEvent ievent; - ievent.type = InputEvent::MOUSE_BUTTON; + ievent.type = InputEvent::SCREEN_TOUCH; ievent.ID = ++last_id; ievent.device = 0; - ievent.mouse_button.pressed = (screen_val == SCREEN_EVENT_MTOUCH_TOUCH); - ievent.mouse_button.button_index = BUTTON_LEFT; - ievent.mouse_button.doubleclick = 0; - ievent.mouse_button.x = ievent.mouse_button.global_x = mpos.x; - ievent.mouse_button.y = ievent.mouse_button.global_y = mpos.y; - input->parse_input_event( ievent ); - }; - + ievent.screen_touch.pressed = (screen_val == SCREEN_EVENT_MTOUCH_TOUCH); + ievent.screen_touch.x = pos[0]; + ievent.screen_touch.y = pos[1]; + Point2 mpos(ievent.screen_touch.x, ievent.screen_touch.y); + + screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TOUCH_ID, &pos[0]); + ievent.screen_touch.index = pos[0]; + + last_touch_x[pos[0]] = ievent.screen_touch.x; + last_touch_y[pos[0]] = ievent.screen_touch.y; + + input->parse_input_event(ievent); + + if (ievent.screen_touch.index == 0) { + + InputEvent ievent; + ievent.type = InputEvent::MOUSE_BUTTON; + ievent.ID = ++last_id; + ievent.device = 0; + ievent.mouse_button.pressed = (screen_val == SCREEN_EVENT_MTOUCH_TOUCH); + ievent.mouse_button.button_index = BUTTON_LEFT; + ievent.mouse_button.doubleclick = 0; + ievent.mouse_button.x = ievent.mouse_button.global_x = mpos.x; + ievent.mouse_button.y = ievent.mouse_button.global_y = mpos.y; + input->parse_input_event(ievent); + }; - } break; - case SCREEN_EVENT_MTOUCH_MOVE: { + } break; + case SCREEN_EVENT_MTOUCH_MOVE: { - screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_POSITION, pos); + screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_POSITION, pos); - InputEvent ievent; - ievent.type = InputEvent::SCREEN_DRAG; - ievent.ID = ++last_id; - ievent.device = 0; - ievent.screen_drag.x = pos[0]; - ievent.screen_drag.y = pos[1]; + InputEvent ievent; + ievent.type = InputEvent::SCREEN_DRAG; + ievent.ID = ++last_id; + ievent.device = 0; + ievent.screen_drag.x = pos[0]; + ievent.screen_drag.y = pos[1]; - /* + /* screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_SOURCE_POSITION, pos); ievent.screen_drag.relative_x = ievent.screen_drag.x - pos[0]; ievent.screen_drag.relative_y = ievent.screen_drag.y - pos[1]; */ - screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TOUCH_ID, &pos[0]); - ievent.screen_drag.index = pos[0]; + screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TOUCH_ID, &pos[0]); + ievent.screen_drag.index = pos[0]; + + ievent.screen_drag.relative_x = ievent.screen_drag.x - last_touch_x[ievent.screen_drag.index]; + ievent.screen_drag.relative_y = ievent.screen_drag.y - last_touch_y[ievent.screen_drag.index]; + + last_touch_x[ievent.screen_drag.index] = ievent.screen_drag.x; + last_touch_y[ievent.screen_drag.index] = ievent.screen_drag.y; + Point2 mpos(ievent.screen_drag.x, ievent.screen_drag.y); + Point2 mrel(ievent.screen_drag.relative_x, ievent.screen_drag.relative_y); - ievent.screen_drag.relative_x = ievent.screen_drag.x - last_touch_x[ievent.screen_drag.index]; - ievent.screen_drag.relative_y = ievent.screen_drag.y - last_touch_y[ievent.screen_drag.index]; + input->parse_input_event(ievent); - last_touch_x[ievent.screen_drag.index] = ievent.screen_drag.x; - last_touch_y[ievent.screen_drag.index] = ievent.screen_drag.y; + if (ievent.screen_touch.index == 0) { - Point2 mpos(ievent.screen_drag.x, ievent.screen_drag.y); - Point2 mrel(ievent.screen_drag.relative_x, ievent.screen_drag.relative_y); + InputEvent ievent; + ievent.type = InputEvent::MOUSE_MOTION; + ievent.ID = ++last_id; + ievent.device = 0; + ievent.mouse_motion.x = ievent.mouse_motion.global_x = mpos.x; + ievent.mouse_motion.y = ievent.mouse_motion.global_y = mpos.y; + input->set_mouse_pos(Point2(ievent.mouse_motion.x, ievent.mouse_motion.y)); + ievent.mouse_motion.speed_x = input->get_last_mouse_speed().x; + ievent.mouse_motion.speed_y = input->get_last_mouse_speed().y; + ievent.mouse_motion.relative_x = mrel.x; + ievent.mouse_motion.relative_y = mrel.y; + ievent.mouse_motion.button_mask = 1; // pressed - input->parse_input_event( ievent ); + input->parse_input_event(ievent); + }; + } break; - if (ievent.screen_touch.index == 0) { + case SCREEN_EVENT_KEYBOARD: { InputEvent ievent; - ievent.type = InputEvent::MOUSE_MOTION; + ievent.type = InputEvent::KEY; ievent.ID = ++last_id; ievent.device = 0; - ievent.mouse_motion.x = ievent.mouse_motion.global_x = mpos.x; - ievent.mouse_motion.y = ievent.mouse_motion.global_y = mpos.y; - input->set_mouse_pos(Point2(ievent.mouse_motion.x,ievent.mouse_motion.y)); - ievent.mouse_motion.speed_x=input->get_last_mouse_speed().x; - ievent.mouse_motion.speed_y=input->get_last_mouse_speed().y; - ievent.mouse_motion.relative_x = mrel.x; - ievent.mouse_motion.relative_y = mrel.y; - ievent.mouse_motion.button_mask = 1; // pressed - - input->parse_input_event( ievent ); - }; - } break; - - case SCREEN_EVENT_KEYBOARD: { - - InputEvent ievent; - ievent.type = InputEvent::KEY; - ievent.ID = ++last_id; - ievent.device = 0; - int val = 0; - screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_SCAN, &val); - ievent.key.scancode = val; - screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_SYM, &val); - ievent.key.unicode = val; - if (val == 61448) { - ievent.key.scancode = KEY_BACKSPACE; - ievent.key.unicode = KEY_BACKSPACE; - }; - if (val == 61453) { - ievent.key.scancode = KEY_ENTER; - ievent.key.unicode = KEY_ENTER; - }; - - int flags; - screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_FLAGS, &flags); - ievent.key.pressed = flags & 1; // bit 1 is pressed apparently + int val = 0; + screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_SCAN, &val); + ievent.key.scancode = val; + screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_SYM, &val); + ievent.key.unicode = val; + if (val == 61448) { + ievent.key.scancode = KEY_BACKSPACE; + ievent.key.unicode = KEY_BACKSPACE; + }; + if (val == 61453) { + ievent.key.scancode = KEY_ENTER; + ievent.key.unicode = KEY_ENTER; + }; - int mod; - screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_MODIFIERS, &mod); + int flags; + screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_FLAGS, &flags); + ievent.key.pressed = flags & 1; // bit 1 is pressed apparently - input->parse_input_event( ievent ); - } break; + int mod; + screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_MODIFIERS, &mod); - default: - break; + input->parse_input_event(ievent); + } break; + default: + break; } }; @@ -419,8 +413,7 @@ void OSBB10::handle_accelerometer() { //input->set_accelerometer(Vector3(force_y, flip_accelerometer?force_x:(-force_x), force_z)); }; - -void OSBB10::_resize(bps_event_t* event) { +void OSBB10::_resize(bps_event_t *event) { int angle = navigator_event_get_orientation_angle(event); bbutil_rotate_screen_surface(angle); @@ -449,16 +442,16 @@ void OSBB10::process_events() { if (!event) break; - #ifdef BB10_SCORELOOP_ENABLED - ScoreloopBB10* sc = Globals::get_singleton()->get_singleton_object("Scoreloop")->cast_to<ScoreloopBB10>(); +#ifdef BB10_SCORELOOP_ENABLED + ScoreloopBB10 *sc = Globals::get_singleton()->get_singleton_object("Scoreloop")->cast_to<ScoreloopBB10>(); if (sc->handle_event(event)) continue; - #endif +#endif - #ifdef PAYMENT_SERVICE_ENABLED +#ifdef PAYMENT_SERVICE_ENABLED if (payment_service->handle_event(event)) continue; - #endif +#endif int domain = bps_event_get_domain(event); if (domain == screen_get_domain()) { @@ -473,7 +466,7 @@ void OSBB10::process_events() { bps_event_destroy(event); exit(0); return; - /* + /* } else if (bps_event_get_code(event) == NAVIGATOR_ORIENTATION_CHECK) { int angle = navigator_event_get_orientation_angle(event); @@ -504,7 +497,7 @@ void OSBB10::process_events() { }; } else if (domain == audiodevice_get_domain()) { - const char * audiodevice_path = audiodevice_event_get_path(event); + const char *audiodevice_path = audiodevice_event_get_path(event); printf("************* got audiodevice event, path %s\n", audiodevice_path); audio_driver->finish(); audio_driver->init(audiodevice_path); @@ -520,7 +513,7 @@ bool OSBB10::has_virtual_keyboard() const { return true; }; -void OSBB10::show_virtual_keyboard(const String& p_existing_text,const Rect2& p_screen_rect) { +void OSBB10::show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect) { virtualkeyboard_show(); }; @@ -551,11 +544,10 @@ void OSBB10::run() { }; */ - while (true) { process_events(); // get rid of pending events - if (Main::iteration()==true) + if (Main::iteration() == true) break; bbutil_swap(); //#ifdef DEBUG_ENABLED @@ -564,7 +556,6 @@ void OSBB10::run() { }; main_loop->finish(); - }; bool OSBB10::has_touchscreen_ui_hint() const { @@ -574,7 +565,7 @@ bool OSBB10::has_touchscreen_ui_hint() const { Error OSBB10::shell_open(String p_uri) { - char* msg = NULL; + char *msg = NULL; int ret = navigator_invoke(p_uri.utf8().get_data(), &msg); return ret == BPS_SUCCESS ? OK : FAILED; @@ -603,15 +594,14 @@ int OSBB10::get_power_percent_left() { OSBB10::OSBB10() { - main_loop=NULL; - last_id=1; + main_loop = NULL; + last_id = 1; minimized = false; fullscreen = true; flip_accelerometer = true; fullscreen_mixer_volume = 1; fullscreen_stream_volume = 1; - printf("godot bb10!\n"); getcwd(launch_dir, sizeof(launch_dir)); printf("launch dir %s\n", launch_dir); @@ -620,7 +610,4 @@ OSBB10::OSBB10() { } OSBB10::~OSBB10() { - - } - diff --git a/platform/bb10/os_bb10.h b/platform/bb10/os_bb10.h index 678b8c9fc2..313f9c9e6b 100644 --- a/platform/bb10/os_bb10.h +++ b/platform/bb10/os_bb10.h @@ -29,22 +29,22 @@ #ifndef OS_BB10_H #define OS_BB10_H -#include "os/input.h" +#include "audio_driver_bb10.h" #include "drivers/unix/os_unix.h" -#include "os/main_loop.h" #include "main/input_default.h" -#include "servers/physics/physics_server_sw.h" +#include "os/input.h" +#include "os/main_loop.h" +#include "payment_service.h" +#include "power_bb10.h" #include "servers/audio_server.h" +#include "servers/physics/physics_server_sw.h" #include "servers/physics_2d/physics_2d_server_sw.h" #include "servers/visual/rasterizer.h" -#include "audio_driver_bb10.h" -#include "payment_service.h" -#include "power_bb10.h" -#include <screen/screen.h> -#include <sys/platform.h> #include <bps/event.h> +#include <screen/screen.h> #include <stdint.h> +#include <sys/platform.h> class OSBB10 : public OS_Unix { @@ -58,15 +58,15 @@ class OSBB10 : public OS_Unix { VisualServer *visual_server; PhysicsServer *physics_server; Physics2DServer *physics_2d_server; - AudioDriverBB10* audio_driver; + AudioDriverBB10 *audio_driver; PowerBB10 *power_manager; #ifdef PAYMENT_SERVICE_ENABLED - PaymentService* payment_service; + PaymentService *payment_service; #endif VideoMode default_videomode; - MainLoop * main_loop; + MainLoop *main_loop; void process_events(); @@ -87,48 +87,47 @@ class OSBB10 : public OS_Unix { String data_dir; InputDefault *input; -public: +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 String get_data_dir() 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(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(); + static OS *get_singleton(); 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 bool has_virtual_keyboard() const; - virtual void show_virtual_keyboard(const String& p_existing_text,const Rect2& p_screen_rect); + virtual void show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect); virtual void hide_virtual_keyboard(); - 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 Size2 get_window_size() const; virtual String get_name(); @@ -150,8 +149,6 @@ public: OSBB10(); ~OSBB10(); - }; #endif - diff --git a/platform/bb10/payment_service.cpp b/platform/bb10/payment_service.cpp index 131c9712a5..e78326e8b1 100644 --- a/platform/bb10/payment_service.cpp +++ b/platform/bb10/payment_service.cpp @@ -31,18 +31,18 @@ #include "payment_service.h" #include "bbutil.h" -#include <string.h> #include <errno.h> +#include <string.h> #include <unistd.h> -extern char* launch_dir_ptr; +extern char *launch_dir_ptr; void PaymentService::_bind_methods() { - ClassDB::bind_method(D_METHOD("request_product_info"),&PaymentService::request_product_info); - ClassDB::bind_method(D_METHOD("purchase"),&PaymentService::purchase); + ClassDB::bind_method(D_METHOD("request_product_info"), &PaymentService::request_product_info); + ClassDB::bind_method(D_METHOD("purchase"), &PaymentService::purchase); - ClassDB::bind_method(D_METHOD("get_pending_event_count"),&PaymentService::get_pending_event_count); - ClassDB::bind_method(D_METHOD("pop_pending_event"),&PaymentService::pop_pending_event); + ClassDB::bind_method(D_METHOD("get_pending_event_count"), &PaymentService::get_pending_event_count); + ClassDB::bind_method(D_METHOD("pop_pending_event"), &PaymentService::pop_pending_event); }; Error PaymentService::request_product_info(Variant p_params) { @@ -55,16 +55,16 @@ Error PaymentService::purchase(Variant p_params) { Dictionary params = p_params; ERR_FAIL_COND_V((!params.has("product_id")) && (!params.has("product_sku")), ERR_INVALID_PARAMETER); - char* id = NULL; - char* sku = NULL; + char *id = NULL; + char *sku = NULL; - CharString p_id = params.has("product_id")?String(params["product_id"]).ascii():CharString(); - CharString p_sku = params.has("product_sku")?String(params["product_sku"]).ascii():CharString(); + CharString p_id = params.has("product_id") ? String(params["product_id"]).ascii() : CharString(); + CharString p_sku = params.has("product_sku") ? String(params["product_sku"]).ascii() : CharString(); unsigned int request_id; chdir(launch_dir_ptr); int ret = paymentservice_purchase_request(params.has("product_sku") ? NULL : p_id.get_data(), - params.has("product_sku") ? p_sku.get_data() : NULL, - NULL, NULL, NULL, NULL, get_window_group_id(), &request_id); + params.has("product_sku") ? p_sku.get_data() : NULL, + NULL, NULL, NULL, NULL, get_window_group_id(), &request_id); chdir("app/native"); if (ret != BPS_SUCCESS) { @@ -76,8 +76,7 @@ Error PaymentService::purchase(Variant p_params) { return OK; }; - -bool PaymentService::handle_event(bps_event_t* p_event) { +bool PaymentService::handle_event(bps_event_t *p_event) { if (bps_event_get_domain(p_event) != paymentservice_get_domain()) { return false; @@ -91,12 +90,12 @@ bool PaymentService::handle_event(bps_event_t* p_event) { res = bps_event_get_code(p_event); if (res == PURCHASE_RESPONSE) { dict["type"] = "purchase"; - const char* pid = paymentservice_event_get_digital_good_id(p_event, 0); - dict["product_id"] = String(pid?pid:""); + const char *pid = paymentservice_event_get_digital_good_id(p_event, 0); + dict["product_id"] = String(pid ? pid : ""); }; } else { - const char* desc = paymentservice_event_get_error_text(p_event); + const char *desc = paymentservice_event_get_error_text(p_event); if (strcmp(desc, "alreadyPurchased") == 0) { dict["result"] = "ok"; } else { @@ -142,9 +141,8 @@ PaymentService::PaymentService() { #endif }; -PaymentService::~PaymentService() { +PaymentService::~PaymentService(){ }; - #endif diff --git a/platform/bb10/payment_service.h b/platform/bb10/payment_service.h index b31a954ef8..d5b4cc3d60 100644 --- a/platform/bb10/payment_service.h +++ b/platform/bb10/payment_service.h @@ -46,24 +46,18 @@ class PaymentService : public Object { List<Variant> pending_events; public: - Error request_product_info(Variant p_params); Error purchase(Variant p_params); int get_pending_event_count(); Variant pop_pending_event(); - bool handle_event(bps_event_t* p_event); + bool handle_event(bps_event_t *p_event); PaymentService(); ~PaymentService(); }; - - #endif - #endif - - diff --git a/platform/bb10/power_bb10.cpp b/platform/bb10/power_bb10.cpp index 5cd84d6246..29c1fe370d 100644 --- a/platform/bb10/power_bb10.cpp +++ b/platform/bb10/power_bb10.cpp @@ -31,7 +31,6 @@ #include "core/error_macros.h" - bool PowerBB10::UpdatePowerInfo() { return false; @@ -40,8 +39,7 @@ bool PowerBB10::UpdatePowerInfo() { PowerState PowerBB10::get_power_state() { if (UpdatePowerInfo()) { return power_state; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to POWERSTATE_UNKNOWN"); return POWERSTATE_UNKNOWN; } @@ -50,8 +48,7 @@ PowerState PowerBB10::get_power_state() { int PowerBB10::get_power_seconds_left() { if (UpdatePowerInfo()) { return nsecs_left; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to -1"); return -1; } @@ -60,17 +57,15 @@ int PowerBB10::get_power_seconds_left() { int PowerBB10::get_power_percent_left() { if (UpdatePowerInfo()) { return percent_left; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to -1"); return -1; } } -PowerBB10::PowerBB10() : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { - +PowerBB10::PowerBB10() + : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { } PowerBB10::~PowerBB10() { } - diff --git a/platform/bb10/power_bb10.h b/platform/bb10/power_bb10.h index 0e6eb53d03..6c13f6e997 100644 --- a/platform/bb10/power_bb10.h +++ b/platform/bb10/power_bb10.h @@ -37,6 +37,7 @@ private: PowerState power_state; bool UpdatePowerInfo(); + public: PowerBB10(); virtual ~PowerBB10(); diff --git a/platform/haiku/audio_driver_media_kit.cpp b/platform/haiku/audio_driver_media_kit.cpp index bd485214c8..0f969d25ab 100644 --- a/platform/haiku/audio_driver_media_kit.cpp +++ b/platform/haiku/audio_driver_media_kit.cpp @@ -32,7 +32,7 @@ #include "global_config.h" -int32_t* AudioDriverMediaKit::samples_in = NULL; +int32_t *AudioDriverMediaKit::samples_in = NULL; Error AudioDriverMediaKit::init() { active = false; @@ -54,12 +54,11 @@ Error AudioDriverMediaKit::init() { format.buffer_size = buffer_size * sizeof(int32_t) * channels; player = new BSoundPlayer( - &format, - "godot_sound_server", - AudioDriverMediaKit::PlayBuffer, - NULL, - this - ); + &format, + "godot_sound_server", + AudioDriverMediaKit::PlayBuffer, + NULL, + this); if (player->InitCheck() != B_OK) { fprintf(stderr, "MediaKit ERR: can not create a BSoundPlayer instance\n"); @@ -72,9 +71,9 @@ Error AudioDriverMediaKit::init() { return OK; } -void AudioDriverMediaKit::PlayBuffer(void* cookie, void* buffer, size_t size, const media_raw_audio_format& format) { - AudioDriverMediaKit* ad = (AudioDriverMediaKit*) cookie; - int32_t* buf = (int32_t*) buffer; +void AudioDriverMediaKit::PlayBuffer(void *cookie, void *buffer, size_t size, const media_raw_audio_format &format) { + AudioDriverMediaKit *ad = (AudioDriverMediaKit *)cookie; + int32_t *buf = (int32_t *)buffer; if (!ad->active) { for (unsigned int i = 0; i < ad->buffer_size * ad->channels; i++) { @@ -136,7 +135,6 @@ AudioDriverMediaKit::AudioDriverMediaKit() { } AudioDriverMediaKit::~AudioDriverMediaKit() { - } #endif diff --git a/platform/haiku/audio_driver_media_kit.h b/platform/haiku/audio_driver_media_kit.h index ce760f8dd7..e9282c8471 100644 --- a/platform/haiku/audio_driver_media_kit.h +++ b/platform/haiku/audio_driver_media_kit.h @@ -30,19 +30,19 @@ #ifdef MEDIA_KIT_ENABLED -#include "core/os/thread.h" #include "core/os/mutex.h" +#include "core/os/thread.h" -#include <kernel/image.h> // needed for image_id #include <SoundPlayer.h> +#include <kernel/image.h> // needed for image_id class AudioDriverMediaKit : public AudioDriver { - Mutex* mutex; + Mutex *mutex; - BSoundPlayer* player; - static int32_t* samples_in; + BSoundPlayer *player; + static int32_t *samples_in; - static void PlayBuffer(void* cookie, void* buffer, size_t size, const media_raw_audio_format& format); + static void PlayBuffer(void *cookie, void *buffer, size_t size, const media_raw_audio_format &format); unsigned int mix_rate; SpeakerMode speaker_mode; @@ -52,8 +52,7 @@ class AudioDriverMediaKit : public AudioDriver { bool active; public: - - const char* get_name() const { + const char *get_name() const { return "MediaKit"; }; diff --git a/platform/haiku/context_gl_haiku.cpp b/platform/haiku/context_gl_haiku.cpp index c43e3f3928..f345928005 100644 --- a/platform/haiku/context_gl_haiku.cpp +++ b/platform/haiku/context_gl_haiku.cpp @@ -30,12 +30,12 @@ #if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) -ContextGL_Haiku::ContextGL_Haiku(HaikuDirectWindow* p_window) { +ContextGL_Haiku::ContextGL_Haiku(HaikuDirectWindow *p_window) { window = p_window; uint32 type = BGL_RGB | BGL_DOUBLE | BGL_DEPTH; view = new HaikuGLView(window->Bounds(), type); - + use_vsync = false; } diff --git a/platform/haiku/context_gl_haiku.h b/platform/haiku/context_gl_haiku.h index 1fd62e89ba..c0030fad41 100644 --- a/platform/haiku/context_gl_haiku.h +++ b/platform/haiku/context_gl_haiku.h @@ -38,13 +38,13 @@ class ContextGL_Haiku : public ContextGL { private: - HaikuGLView* view; - HaikuDirectWindow* window; - + HaikuGLView *view; + HaikuDirectWindow *window; + bool use_vsync; public: - ContextGL_Haiku(HaikuDirectWindow* p_window); + ContextGL_Haiku(HaikuDirectWindow *p_window); ~ContextGL_Haiku(); virtual Error initialize(); @@ -53,7 +53,7 @@ public: virtual void swap_buffers(); virtual int get_window_width(); virtual int get_window_height(); - + virtual void set_use_vsync(bool p_use); virtual bool is_using_vsync() const; }; diff --git a/platform/haiku/godot_haiku.cpp b/platform/haiku/godot_haiku.cpp index fccfa4336f..47cfbe55d7 100644 --- a/platform/haiku/godot_haiku.cpp +++ b/platform/haiku/godot_haiku.cpp @@ -29,10 +29,10 @@ #include "main/main.h" #include "os_haiku.h" -int main(int argc, char* argv[]) { +int main(int argc, char *argv[]) { OS_Haiku os; - Error error = Main::setup(argv[0], argc-1, &argv[1]); + Error error = Main::setup(argv[0], argc - 1, &argv[1]); if (error != OK) { return 255; } diff --git a/platform/haiku/haiku_application.cpp b/platform/haiku/haiku_application.cpp index 1f35c6f58e..f675d4216d 100644 --- a/platform/haiku/haiku_application.cpp +++ b/platform/haiku/haiku_application.cpp @@ -29,7 +29,5 @@ #include "haiku_application.h" HaikuApplication::HaikuApplication() - : BApplication("application/x-vnd.godot") -{ - + : BApplication("application/x-vnd.godot") { } diff --git a/platform/haiku/haiku_application.h b/platform/haiku/haiku_application.h index d85e6e4829..7fbce5dcbc 100644 --- a/platform/haiku/haiku_application.h +++ b/platform/haiku/haiku_application.h @@ -29,13 +29,12 @@ #ifndef HAIKU_APPLICATION_H #define HAIKU_APPLICATION_H -#include <kernel/image.h> // needed for image_id #include <Application.h> +#include <kernel/image.h> // needed for image_id -class HaikuApplication : public BApplication -{ +class HaikuApplication : public BApplication { public: - HaikuApplication(); + HaikuApplication(); }; #endif diff --git a/platform/haiku/haiku_direct_window.cpp b/platform/haiku/haiku_direct_window.cpp index e7ff65e3ba..bc2dbb9b8f 100644 --- a/platform/haiku/haiku_direct_window.cpp +++ b/platform/haiku/haiku_direct_window.cpp @@ -28,43 +28,41 @@ /*************************************************************************/ #include <UnicodeChar.h> -#include "main/main.h" -#include "os/keyboard.h" #include "haiku_direct_window.h" #include "key_mapping_haiku.h" +#include "main/main.h" +#include "os/keyboard.h" HaikuDirectWindow::HaikuDirectWindow(BRect p_frame) - : BDirectWindow(p_frame, "Godot", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) -{ + : BDirectWindow(p_frame, "Godot", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) { last_mouse_pos_valid = false; last_buttons_state = 0; last_button_mask = 0; last_key_modifier_state = 0; } - HaikuDirectWindow::~HaikuDirectWindow() { delete update_runner; } -void HaikuDirectWindow::SetHaikuGLView(HaikuGLView* p_view) { +void HaikuDirectWindow::SetHaikuGLView(HaikuGLView *p_view) { view = p_view; } void HaikuDirectWindow::StartMessageRunner() { update_runner = new BMessageRunner(BMessenger(this), - new BMessage(REDRAW_MSG), 1000000/30 /* 30 fps */); + new BMessage(REDRAW_MSG), 1000000 / 30 /* 30 fps */); } void HaikuDirectWindow::StopMessageRunner() { delete update_runner; } -void HaikuDirectWindow::SetInput(InputDefault* p_input) { +void HaikuDirectWindow::SetInput(InputDefault *p_input) { input = p_input; } -void HaikuDirectWindow::SetMainLoop(MainLoop* p_main_loop) { +void HaikuDirectWindow::SetMainLoop(MainLoop *p_main_loop) { main_loop = p_main_loop; } @@ -73,12 +71,12 @@ bool HaikuDirectWindow::QuitRequested() { return false; } -void HaikuDirectWindow::DirectConnected(direct_buffer_info* info) { +void HaikuDirectWindow::DirectConnected(direct_buffer_info *info) { view->DirectConnected(info); view->EnableDirectMode(true); } -void HaikuDirectWindow::MessageReceived(BMessage* message) { +void HaikuDirectWindow::MessageReceived(BMessage *message) { switch (message->what) { case REDRAW_MSG: if (Main::iteration() == true) { @@ -92,7 +90,7 @@ void HaikuDirectWindow::MessageReceived(BMessage* message) { } } -void HaikuDirectWindow::DispatchMessage(BMessage* message, BHandler* handler) { +void HaikuDirectWindow::DispatchMessage(BMessage *message, BHandler *handler) { switch (message->what) { case B_MOUSE_DOWN: case B_MOUSE_UP: @@ -133,7 +131,7 @@ void HaikuDirectWindow::DispatchMessage(BMessage* message, BHandler* handler) { } } -void HaikuDirectWindow::HandleMouseButton(BMessage* message) { +void HaikuDirectWindow::HandleMouseButton(BMessage *message) { BPoint where; if (message->FindPoint("where", &where) != B_OK) { return; @@ -185,14 +183,14 @@ void HaikuDirectWindow::HandleMouseButton(BMessage* message) { int32 clicks = message->FindInt32("clicks"); if (clicks > 1) { - mouse_event.mouse_button.doubleclick=true; + mouse_event.mouse_button.doubleclick = true; } } input->parse_input_event(mouse_event); } -void HaikuDirectWindow::HandleMouseMoved(BMessage* message) { +void HaikuDirectWindow::HandleMouseMoved(BMessage *message) { BPoint where; if (message->FindPoint("where", &where) != B_OK) { return; @@ -232,7 +230,7 @@ void HaikuDirectWindow::HandleMouseMoved(BMessage* message) { input->parse_input_event(motion_event); } -void HaikuDirectWindow::HandleMouseWheelChanged(BMessage* message) { +void HaikuDirectWindow::HandleMouseWheelChanged(BMessage *message) { float wheel_delta_y = 0; if (message->FindFloat("be:wheel_delta_y", &wheel_delta_y) != B_OK) { return; @@ -259,7 +257,7 @@ void HaikuDirectWindow::HandleMouseWheelChanged(BMessage* message) { input->parse_input_event(mouse_event); } -void HaikuDirectWindow::HandleKeyboardEvent(BMessage* message) { +void HaikuDirectWindow::HandleKeyboardEvent(BMessage *message) { int32 raw_char = 0; int32 key = 0; int32 modifiers = 0; @@ -286,21 +284,21 @@ void HaikuDirectWindow::HandleKeyboardEvent(BMessage* message) { event.key.echo = message->HasInt32("be:key_repeat"); event.key.unicode = 0; - const char* bytes = NULL; + const char *bytes = NULL; if (message->FindString("bytes", &bytes) == B_OK) { event.key.unicode = BUnicodeChar::FromUTF8(&bytes); } //make it consistent accross platforms. - if (event.key.scancode==KEY_BACKTAB) { - event.key.scancode=KEY_TAB; - event.key.mod.shift=true; + if (event.key.scancode == KEY_BACKTAB) { + event.key.scancode = KEY_TAB; + event.key.mod.shift = true; } input->parse_input_event(event); } -void HaikuDirectWindow::HandleKeyboardModifierEvent(BMessage* message) { +void HaikuDirectWindow::HandleKeyboardModifierEvent(BMessage *message) { int32 old_modifiers = 0; int32 modifiers = 0; @@ -327,7 +325,7 @@ void HaikuDirectWindow::HandleKeyboardModifierEvent(BMessage* message) { input->parse_input_event(event); } -void HaikuDirectWindow::HandleWindowResized(BMessage* message) { +void HaikuDirectWindow::HandleWindowResized(BMessage *message) { int32 width = 0; int32 height = 0; diff --git a/platform/haiku/haiku_direct_window.h b/platform/haiku/haiku_direct_window.h index 49785f79cb..7fcea7a6f6 100644 --- a/platform/haiku/haiku_direct_window.h +++ b/platform/haiku/haiku_direct_window.h @@ -29,8 +29,8 @@ #ifndef HAIKU_DIRECT_WINDOW_H #define HAIKU_DIRECT_WINDOW_H -#include <kernel/image.h> // needed for image_id #include <DirectWindow.h> +#include <kernel/image.h> // needed for image_id #include "core/os/os.h" #include "main/input_default.h" @@ -41,8 +41,7 @@ #define LOCKGL_MSG 'glck' #define UNLOCKGL_MSG 'ulck' -class HaikuDirectWindow : public BDirectWindow -{ +class HaikuDirectWindow : public BDirectWindow { private: unsigned int event_id; Point2i last_mouse_position; @@ -50,19 +49,19 @@ private: uint32 last_buttons_state; uint32 last_key_modifier_state; int last_button_mask; - OS::VideoMode* current_video_mode; + OS::VideoMode *current_video_mode; - MainLoop* main_loop; - InputDefault* input; - HaikuGLView* view; - BMessageRunner* update_runner; + MainLoop *main_loop; + InputDefault *input; + HaikuGLView *view; + BMessageRunner *update_runner; - void HandleMouseButton(BMessage* message); - void HandleMouseMoved(BMessage* message); - void HandleMouseWheelChanged(BMessage* message); - void HandleWindowResized(BMessage* message); - void HandleKeyboardEvent(BMessage* message); - void HandleKeyboardModifierEvent(BMessage* message); + void HandleMouseButton(BMessage *message); + void HandleMouseMoved(BMessage *message); + void HandleMouseWheelChanged(BMessage *message); + void HandleWindowResized(BMessage *message); + void HandleKeyboardEvent(BMessage *message); + void HandleKeyboardModifierEvent(BMessage *message); inline InputModifierState GetKeyModifierState(uint32 p_state); inline int GetMouseButtonState(uint32 p_state); @@ -70,16 +69,16 @@ public: HaikuDirectWindow(BRect p_frame); ~HaikuDirectWindow(); - void SetHaikuGLView(HaikuGLView* p_view); + void SetHaikuGLView(HaikuGLView *p_view); void StartMessageRunner(); void StopMessageRunner(); - void SetInput(InputDefault* p_input); - void SetMainLoop(MainLoop* p_main_loop); - inline void SetVideoMode(OS::VideoMode* video_mode) { current_video_mode = video_mode; }; + void SetInput(InputDefault *p_input); + void SetMainLoop(MainLoop *p_main_loop); + inline void SetVideoMode(OS::VideoMode *video_mode) { current_video_mode = video_mode; }; virtual bool QuitRequested(); - virtual void DirectConnected(direct_buffer_info* info); - virtual void MessageReceived(BMessage* message); - virtual void DispatchMessage(BMessage* message, BHandler* handler); + virtual void DirectConnected(direct_buffer_info *info); + virtual void MessageReceived(BMessage *message); + virtual void DispatchMessage(BMessage *message, BHandler *handler); inline Point2i GetLastMousePosition() { return last_mouse_position; }; inline int GetLastButtonMask() { return last_button_mask; }; diff --git a/platform/haiku/haiku_gl_view.cpp b/platform/haiku/haiku_gl_view.cpp index 66c143ea67..ded15e12a7 100644 --- a/platform/haiku/haiku_gl_view.cpp +++ b/platform/haiku/haiku_gl_view.cpp @@ -26,12 +26,11 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "main/main.h" #include "haiku_gl_view.h" +#include "main/main.h" HaikuGLView::HaikuGLView(BRect frame, uint32 type) - : BGLView(frame, "GodotGLView", B_FOLLOW_ALL_SIDES, 0, type) -{ + : BGLView(frame, "GodotGLView", B_FOLLOW_ALL_SIDES, 0, type) { } void HaikuGLView::AttachedToWindow(void) { diff --git a/platform/haiku/haiku_gl_view.h b/platform/haiku/haiku_gl_view.h index 6d64aab42e..f06bc64794 100644 --- a/platform/haiku/haiku_gl_view.h +++ b/platform/haiku/haiku_gl_view.h @@ -29,11 +29,10 @@ #ifndef HAIKU_GL_VIEW_H #define HAIKU_GL_VIEW_H -#include <kernel/image.h> // needed for image_id #include <GLView.h> +#include <kernel/image.h> // needed for image_id -class HaikuGLView : public BGLView -{ +class HaikuGLView : public BGLView { public: HaikuGLView(BRect frame, uint32 type); virtual void AttachedToWindow(void); diff --git a/platform/haiku/key_mapping_haiku.cpp b/platform/haiku/key_mapping_haiku.cpp index f41a77c3fb..1bc3467914 100644 --- a/platform/haiku/key_mapping_haiku.cpp +++ b/platform/haiku/key_mapping_haiku.cpp @@ -136,7 +136,7 @@ static _HaikuTranslatePair _hb_to_keycode[] = { { KEY_Y, (0x79) }, { KEY_Z, (0x7A) }, -/* + /* { KEY_PLAY, VK_PLAY},// (0xFA) { KEY_STANDBY,VK_SLEEP },//(0x5F) { KEY_BACK,VK_BROWSER_BACK},// (0xA6) @@ -177,22 +177,48 @@ static _HaikuTranslatePair _hb_to_keycode[] = { }; unsigned int KeyMappingHaiku::get_keysym(int32 raw_char, int32 key) { - if (raw_char == B_INSERT && key == 0x64) { return KEY_KP_0; } - if (raw_char == B_END && key == 0x58) { return KEY_KP_1; } - if (raw_char == B_DOWN_ARROW && key == 0x59) { return KEY_KP_2; } - if (raw_char == B_PAGE_DOWN && key == 0x5A) { return KEY_KP_3; } - if (raw_char == B_LEFT_ARROW && key == 0x48) { return KEY_KP_4; } - if (raw_char == 0x35 && key == 0x49) { return KEY_KP_5; } - if (raw_char == B_RIGHT_ARROW && key == 0x4A) { return KEY_KP_6; } - if (raw_char == B_HOME && key == 0x37) { return KEY_KP_7; } - if (raw_char == B_UP_ARROW && key == 0x38) { return KEY_KP_8; } - if (raw_char == B_PAGE_UP && key == 0x39) { return KEY_KP_9; } - if (raw_char == 0x2F && key == 0x23) { return KEY_KP_DIVIDE; } - if (raw_char == 0x2D && key == 0x25) { return KEY_KP_SUBTRACT; } - if (raw_char == B_DELETE && key == 0x65) { return KEY_KP_PERIOD; } + if (raw_char == B_INSERT && key == 0x64) { + return KEY_KP_0; + } + if (raw_char == B_END && key == 0x58) { + return KEY_KP_1; + } + if (raw_char == B_DOWN_ARROW && key == 0x59) { + return KEY_KP_2; + } + if (raw_char == B_PAGE_DOWN && key == 0x5A) { + return KEY_KP_3; + } + if (raw_char == B_LEFT_ARROW && key == 0x48) { + return KEY_KP_4; + } + if (raw_char == 0x35 && key == 0x49) { + return KEY_KP_5; + } + if (raw_char == B_RIGHT_ARROW && key == 0x4A) { + return KEY_KP_6; + } + if (raw_char == B_HOME && key == 0x37) { + return KEY_KP_7; + } + if (raw_char == B_UP_ARROW && key == 0x38) { + return KEY_KP_8; + } + if (raw_char == B_PAGE_UP && key == 0x39) { + return KEY_KP_9; + } + if (raw_char == 0x2F && key == 0x23) { + return KEY_KP_DIVIDE; + } + if (raw_char == 0x2D && key == 0x25) { + return KEY_KP_SUBTRACT; + } + if (raw_char == B_DELETE && key == 0x65) { + return KEY_KP_PERIOD; + } if (raw_char == 0x10) { - for(int i = 0; _fn_to_keycode[i].keysym != KEY_UNKNOWN; i++) { + for (int i = 0; _fn_to_keycode[i].keysym != KEY_UNKNOWN; i++) { if (_fn_to_keycode[i].keycode == key) { return _fn_to_keycode[i].keysym; } @@ -201,7 +227,7 @@ unsigned int KeyMappingHaiku::get_keysym(int32 raw_char, int32 key) { return KEY_UNKNOWN; } - for(int i = 0; _hb_to_keycode[i].keysym != KEY_UNKNOWN; i++) { + for (int i = 0; _hb_to_keycode[i].keysym != KEY_UNKNOWN; i++) { if (_hb_to_keycode[i].keycode == raw_char) { return _hb_to_keycode[i].keysym; } @@ -211,7 +237,7 @@ unsigned int KeyMappingHaiku::get_keysym(int32 raw_char, int32 key) { } unsigned int KeyMappingHaiku::get_modifier_keysym(int32 key) { - for(int i = 0; _mod_to_keycode[i].keysym != KEY_UNKNOWN; i++) { + for (int i = 0; _mod_to_keycode[i].keysym != KEY_UNKNOWN; i++) { if ((_mod_to_keycode[i].keycode & key) != 0) { return _mod_to_keycode[i].keysym; } diff --git a/platform/haiku/key_mapping_haiku.h b/platform/haiku/key_mapping_haiku.h index 81f5569fd0..0f2e2e64bd 100644 --- a/platform/haiku/key_mapping_haiku.h +++ b/platform/haiku/key_mapping_haiku.h @@ -29,9 +29,8 @@ #ifndef KEY_MAPPING_HAIKU_H #define KEY_MAPPING_HAIKU_H -class KeyMappingHaiku -{ - KeyMappingHaiku() {}; +class KeyMappingHaiku { + KeyMappingHaiku(){}; public: static unsigned int get_keysym(int32 raw_char, int32 key); diff --git a/platform/haiku/os_haiku.cpp b/platform/haiku/os_haiku.cpp index b9b95ddacd..0853fac393 100644 --- a/platform/haiku/os_haiku.cpp +++ b/platform/haiku/os_haiku.cpp @@ -28,16 +28,15 @@ /*************************************************************************/ #include <Screen.h> -#include "servers/visual/visual_server_raster.h" -#include "servers/visual/visual_server_wrap_mt.h" #include "drivers/gles2/rasterizer_gles2.h" #include "servers/physics/physics_server_sw.h" +#include "servers/visual/visual_server_raster.h" +#include "servers/visual/visual_server_wrap_mt.h" //#include "servers/physics_2d/physics_2d_server_wrap_mt.h" #include "main/main.h" #include "os_haiku.h" - OS_Haiku::OS_Haiku() { #ifdef MEDIA_KIT_ENABLED AudioDriverManager::add_driver(&driver_media_kit); @@ -53,8 +52,8 @@ void OS_Haiku::run() { context_gl->release_current(); // TODO: clean up - BMessenger* bms = new BMessenger(window); - BMessage* msg = new BMessage(); + BMessenger *bms = new BMessenger(window); + BMessage *msg = new BMessage(); bms->SendMessage(LOCKGL_MSG, msg); window->StartMessageRunner(); @@ -76,7 +75,7 @@ int OS_Haiku::get_video_driver_count() const { return 1; } -const char* OS_Haiku::get_video_driver_name(int p_driver) const { +const char *OS_Haiku::get_video_driver_name(int p_driver) const { return "GLES2"; } @@ -84,7 +83,7 @@ OS::VideoMode OS_Haiku::get_default_video_mode() const { return OS::VideoMode(800, 600, false); } -void OS_Haiku::initialize(const VideoMode& p_desired, int p_video_driver, int p_audio_driver) { +void OS_Haiku::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { main_loop = NULL; current_video_mode = p_desired; @@ -143,8 +142,8 @@ void OS_Haiku::initialize(const VideoMode& p_desired, int p_video_driver, int p_ if (AudioDriverManager::get_driver(p_audio_driver)->init() != OK) { ERR_PRINT("Initializing audio failed."); } - - power_manager = memnew( PowerHaiku ); + + power_manager = memnew(PowerHaiku); } void OS_Haiku::finalize() { @@ -171,13 +170,13 @@ void OS_Haiku::finalize() { #endif } -void OS_Haiku::set_main_loop(MainLoop* p_main_loop) { +void OS_Haiku::set_main_loop(MainLoop *p_main_loop) { main_loop = p_main_loop; input->set_main_loop(p_main_loop); window->SetMainLoop(p_main_loop); } -MainLoop* OS_Haiku::get_main_loop() const { +MainLoop *OS_Haiku::get_main_loop() const { return main_loop; } @@ -235,7 +234,7 @@ void OS_Haiku::set_current_screen(int p_screen) { Point2 OS_Haiku::get_screen_position(int p_screen) const { // TODO: make this work with the p_screen parameter - BScreen* screen = new BScreen(window); + BScreen *screen = new BScreen(window); BRect frame = screen->Frame(); delete screen; return Point2i(frame.left, frame.top); @@ -243,13 +242,13 @@ Point2 OS_Haiku::get_screen_position(int p_screen) const { Size2 OS_Haiku::get_screen_size(int p_screen) const { // TODO: make this work with the p_screen parameter - BScreen* screen = new BScreen(window); + BScreen *screen = new BScreen(window); BRect frame = screen->Frame(); delete screen; return Size2i(frame.IntegerWidth() + 1, frame.IntegerHeight() + 1); } -void OS_Haiku::set_window_title(const String& p_title) { +void OS_Haiku::set_window_title(const String &p_title) { window->SetTitle(p_title.utf8().get_data()); } @@ -269,7 +268,7 @@ Point2 OS_Haiku::get_window_position() const { return Point2i(point.x, point.y); } -void OS_Haiku::set_window_position(const Point2& p_position) { +void OS_Haiku::set_window_position(const Point2 &p_position) { window->MoveTo(p_position.x, p_position.y); } @@ -316,7 +315,7 @@ bool OS_Haiku::is_window_maximized() const { return !window->IsMinimized(); } -void OS_Haiku::set_video_mode(const VideoMode& p_video_mode, int p_screen) { +void OS_Haiku::set_video_mode(const VideoMode &p_video_mode, int p_screen) { ERR_PRINT("set_video_mode() NOT IMPLEMENTED"); } diff --git a/platform/haiku/os_haiku.h b/platform/haiku/os_haiku.h index 2c84e95ac3..827814c7e9 100644 --- a/platform/haiku/os_haiku.h +++ b/platform/haiku/os_haiku.h @@ -29,52 +29,51 @@ #ifndef OS_HAIKU_H #define OS_HAIKU_H -#include "drivers/unix/os_unix.h" -#include "servers/visual_server.h" -#include "servers/visual/rasterizer.h" -#include "servers/physics_server.h" -#include "servers/physics_2d/physics_2d_server_sw.h" -#include "servers/audio_server.h" -#include "main/input_default.h" #include "audio_driver_media_kit.h" #include "context_gl_haiku.h" +#include "drivers/unix/os_unix.h" #include "haiku_application.h" #include "haiku_direct_window.h" +#include "main/input_default.h" #include "power_haiku.h" - +#include "servers/audio_server.h" +#include "servers/physics_2d/physics_2d_server_sw.h" +#include "servers/physics_server.h" +#include "servers/visual/rasterizer.h" +#include "servers/visual_server.h" class OS_Haiku : public OS_Unix { private: - HaikuApplication* app; - HaikuDirectWindow* window; - MainLoop* main_loop; - InputDefault* input; - Rasterizer* rasterizer; - VisualServer* visual_server; + HaikuApplication *app; + HaikuDirectWindow *window; + MainLoop *main_loop; + InputDefault *input; + Rasterizer *rasterizer; + VisualServer *visual_server; VideoMode current_video_mode; - PhysicsServer* physics_server; - Physics2DServer* physics_2d_server; - PowerHaiku* power_manager; + PhysicsServer *physics_server; + Physics2DServer *physics_2d_server; + PowerHaiku *power_manager; #ifdef MEDIA_KIT_ENABLED AudioDriverMediaKit driver_media_kit; #endif #if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) - ContextGL_Haiku* context_gl; + ContextGL_Haiku *context_gl; #endif virtual void delete_main_loop(); protected: 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 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 finalize(); - virtual void set_main_loop(MainLoop* p_main_loop); + virtual void set_main_loop(MainLoop *p_main_loop); public: OS_Haiku(); @@ -82,7 +81,7 @@ public: virtual String get_name(); - virtual MainLoop* get_main_loop() const; + virtual MainLoop *get_main_loop() const; virtual bool can_draw() const; virtual void release_rendering_thread(); @@ -96,13 +95,13 @@ public: virtual int get_screen_count() const; virtual int get_current_screen() const; virtual void set_current_screen(int p_screen); - virtual Point2 get_screen_position(int p_screen=0) const; - virtual Size2 get_screen_size(int p_screen=0) const; - virtual void set_window_title(const String& p_title); + virtual Point2 get_screen_position(int p_screen = 0) const; + virtual Size2 get_screen_size(int p_screen = 0) const; + virtual void set_window_title(const String &p_title); virtual Size2 get_window_size() const; virtual void set_window_size(const Size2 p_size); virtual Point2 get_window_position() const; - virtual void set_window_position(const Point2& p_position); + virtual void set_window_position(const Point2 &p_position); virtual void set_window_fullscreen(bool p_enabled); virtual bool is_window_fullscreen() const; virtual void set_window_resizable(bool p_enabled); @@ -112,11 +111,11 @@ public: virtual void set_window_maximized(bool p_enabled); virtual bool is_window_maximized() 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 String get_executable_path() const; - + virtual PowerState get_power_state(); virtual int get_power_seconds_left(); virtual int get_power_percent_left(); diff --git a/platform/haiku/power_haiku.cpp b/platform/haiku/power_haiku.cpp index 6a54c7b360..d70aad9d5f 100644 --- a/platform/haiku/power_haiku.cpp +++ b/platform/haiku/power_haiku.cpp @@ -39,8 +39,7 @@ bool PowerHaiku::UpdatePowerInfo() { PowerState PowerHaiku::get_power_state() { if (UpdatePowerInfo()) { return power_state; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to POWERSTATE_UNKNOWN"); return POWERSTATE_UNKNOWN; } @@ -49,8 +48,7 @@ PowerState PowerHaiku::get_power_state() { int PowerX11::get_power_seconds_left() { if (UpdatePowerInfo()) { return nsecs_left; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to -1"); return -1; } @@ -59,15 +57,14 @@ int PowerX11::get_power_seconds_left() { int PowerX11::get_power_percent_left() { if (UpdatePowerInfo()) { return percent_left; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to -1"); return -1; } } -PowerHaiku::PowerHaiku() : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { - +PowerHaiku::PowerHaiku() + : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { } PowerHaiku::~PowerHaiku() { diff --git a/platform/haiku/power_haiku.h b/platform/haiku/power_haiku.h index b46cfa3454..8e7b050cd6 100644 --- a/platform/haiku/power_haiku.h +++ b/platform/haiku/power_haiku.h @@ -37,6 +37,7 @@ private: PowerState power_state; bool UpdatePowerInfo(); + public: PowerHaiku(); virtual ~PowerHaiku(); diff --git a/platform/iphone/app_delegate.h b/platform/iphone/app_delegate.h index 1b2ca42ab6..eaa74946ee 100644 --- a/platform/iphone/app_delegate.h +++ b/platform/iphone/app_delegate.h @@ -26,19 +26,19 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#import <UIKit/UIKit.h> #import "gl_view.h" #import "view_controller.h" +#import <UIKit/UIKit.h> #import <CoreMotion/CoreMotion.h> @interface AppDelegate : NSObject <UIApplicationDelegate, GLViewDelegate> { //@property (strong, nonatomic) UIWindow *window; - ViewController* view_controller; + ViewController *view_controller; }; -@property (strong, nonatomic) UIWindow *window; +@property(strong, nonatomic) UIWindow *window; -+ (ViewController*)getViewController; ++ (ViewController *)getViewController; @end diff --git a/platform/iphone/audio_driver_iphone.cpp b/platform/iphone/audio_driver_iphone.cpp index eda3897841..eff91fa40f 100644 --- a/platform/iphone/audio_driver_iphone.cpp +++ b/platform/iphone/audio_driver_iphone.cpp @@ -41,9 +41,9 @@ Error AudioDriverIphone::init() { strdesc.mFramesPerPacket = 1; strdesc.mBitsPerChannel = 16; strdesc.mBytesPerFrame = - strdesc.mBitsPerChannel * strdesc.mChannelsPerFrame / 8; + strdesc.mBitsPerChannel * strdesc.mChannelsPerFrame / 8; strdesc.mBytesPerPacket = - strdesc.mBytesPerFrame * strdesc.mFramesPerPacket; + strdesc.mBytesPerFrame * strdesc.mFramesPerPacket; OSStatus result = noErr; AURenderCallbackStruct callback; @@ -55,7 +55,7 @@ Error AudioDriverIphone::init() { zeromem(&desc, sizeof(desc)); desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_RemoteIO; /* !!! FIXME: ? */ + desc.componentSubType = kAudioUnitSubType_RemoteIO; /* !!! FIXME: ? */ comp = AudioComponentFindNext(NULL, &desc); desc.componentManufacturer = kAudioUnitManufacturer_Apple; @@ -64,16 +64,16 @@ Error AudioDriverIphone::init() { ERR_FAIL_COND_V(comp == NULL, FAILED); result = AudioUnitSetProperty(audio_unit, - kAudioUnitProperty_StreamFormat, - scope, bus, &strdesc, sizeof(strdesc)); + kAudioUnitProperty_StreamFormat, + scope, bus, &strdesc, sizeof(strdesc)); ERR_FAIL_COND_V(result != noErr, FAILED); zeromem(&callback, sizeof(AURenderCallbackStruct)); callback.inputProc = &AudioDriverIphone::output_callback; callback.inputProcRefCon = this; result = AudioUnitSetProperty(audio_unit, - kAudioUnitProperty_SetRenderCallback, - scope, bus, &callback, sizeof(callback)); + kAudioUnitProperty_SetRenderCallback, + scope, bus, &callback, sizeof(callback)); ERR_FAIL_COND_V(result != noErr, FAILED); result = AudioUnitInitialize(audio_unit); @@ -90,14 +90,13 @@ Error AudioDriverIphone::init() { }; OSStatus AudioDriverIphone::output_callback(void *inRefCon, - AudioUnitRenderActionFlags * ioActionFlags, - const AudioTimeStamp * inTimeStamp, - UInt32 inBusNumber, UInt32 inNumberFrames, - AudioBufferList * ioData) { - + AudioUnitRenderActionFlags *ioActionFlags, + const AudioTimeStamp *inTimeStamp, + UInt32 inBusNumber, UInt32 inNumberFrames, + AudioBufferList *ioData) { AudioBuffer *abuf; - AudioDriverIphone* ad = (AudioDriverIphone*)inRefCon; + AudioDriverIphone *ad = (AudioDriverIphone *)inRefCon; bool mix = true; @@ -107,7 +106,6 @@ OSStatus AudioDriverIphone::output_callback(void *inRefCon, mix = ad->mutex->try_lock() == OK; }; - if (!mix) { for (unsigned int i = 0; i < ioData->mNumberBuffers; i++) { abuf = &ioData->mBuffers[i]; @@ -122,7 +120,7 @@ OSStatus AudioDriverIphone::output_callback(void *inRefCon, abuf = &ioData->mBuffers[i]; frames_left = inNumberFrames; - int16_t* out = (int16_t*)abuf->mData; + int16_t *out = (int16_t *)abuf->mData; while (frames_left) { @@ -131,9 +129,9 @@ OSStatus AudioDriverIphone::output_callback(void *inRefCon, ad->audio_server_process(frames, ad->samples_in); //ad->unlock(); - for(int i = 0; i < frames * ad->channels; i++) { + for (int i = 0; i < frames * ad->channels; i++) { - out[i] = ad->samples_in[i]>>16; + out[i] = ad->samples_in[i] >> 16; } frames_left -= frames; @@ -175,12 +173,11 @@ void AudioDriverIphone::finish() { memdelete_arr(samples_in); }; - AudioDriverIphone::AudioDriverIphone() { - mutex=Mutex::create();//NULL; + mutex = Mutex::create(); //NULL; }; -AudioDriverIphone::~AudioDriverIphone() { +AudioDriverIphone::~AudioDriverIphone(){ }; diff --git a/platform/iphone/audio_driver_iphone.h b/platform/iphone/audio_driver_iphone.h index 4c0cbfcb22..8a0d92e070 100644 --- a/platform/iphone/audio_driver_iphone.h +++ b/platform/iphone/audio_driver_iphone.h @@ -38,19 +38,17 @@ class AudioDriverIphone : public AudioDriver { Mutex *mutex; int channels; - int32_t* samples_in; - int buffer_frames; + int32_t *samples_in; + int buffer_frames; static OSStatus output_callback(void *inRefCon, - AudioUnitRenderActionFlags * ioActionFlags, - const AudioTimeStamp * inTimeStamp, - UInt32 inBusNumber, UInt32 inNumberFrames, - AudioBufferList * ioData); - + AudioUnitRenderActionFlags *ioActionFlags, + const AudioTimeStamp *inTimeStamp, + UInt32 inBusNumber, UInt32 inNumberFrames, + AudioBufferList *ioData); public: - - const char* get_name() const { + const char *get_name() const { return "IPhone"; }; @@ -65,4 +63,3 @@ public: AudioDriverIphone(); ~AudioDriverIphone(); }; - diff --git a/platform/iphone/game_center.h b/platform/iphone/game_center.h index abbeaaf86f..a732a97a4c 100644 --- a/platform/iphone/game_center.h +++ b/platform/iphone/game_center.h @@ -37,7 +37,7 @@ class GameCenter : public Object { GDCLASS(GameCenter, Object); - static GameCenter* instance; + static GameCenter *instance; static void _bind_methods(); List<Variant> pending_events; @@ -45,7 +45,6 @@ class GameCenter : public Object { bool connected; public: - Error connect(); bool is_connected(); @@ -61,13 +60,12 @@ public: int get_pending_event_count(); Variant pop_pending_event(); - static GameCenter* get_singleton(); + static GameCenter *get_singleton(); GameCenter(); ~GameCenter(); }; - #endif #endif diff --git a/platform/iphone/gl_view.h b/platform/iphone/gl_view.h index 49e7810f08..555e34a895 100755..100644 --- a/platform/iphone/gl_view.h +++ b/platform/iphone/gl_view.h @@ -27,18 +27,17 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#import <UIKit/UIKit.h> +#import <AVFoundation/AVFoundation.h> +#import <MediaPlayer/MediaPlayer.h> #import <OpenGLES/EAGL.h> #import <OpenGLES/ES1/gl.h> #import <OpenGLES/ES1/glext.h> -#import <MediaPlayer/MediaPlayer.h> -#import <AVFoundation/AVFoundation.h> +#import <UIKit/UIKit.h> @protocol GLViewDelegate; -@interface GLView : UIView<UIKeyInput> -{ - @private +@interface GLView : UIView <UIKeyInput> { +@private // The pixel dimensions of the backbuffer GLint backingWidth; GLint backingHeight; @@ -83,9 +82,9 @@ @property(strong, nonatomic) MPMoviePlayerController *moviePlayerController; @property(strong, nonatomic) UIWindow *backgroundWindow; --(void)startAnimation; --(void)stopAnimation; --(void)drawView; +- (void)startAnimation; +- (void)stopAnimation; +- (void)drawView; - (BOOL)canBecomeFirstResponder; @@ -99,23 +98,23 @@ - (BOOL)createFramebuffer; - (void)destroyFramebuffer; -- (void)audioRouteChangeListenerCallback:(NSNotification*)notification; +- (void)audioRouteChangeListenerCallback:(NSNotification *)notification; @property NSTimeInterval animationInterval; @property(nonatomic, assign) BOOL useCADisplayLink; @end -@protocol GLViewDelegate<NSObject> +@protocol GLViewDelegate <NSObject> @required // Draw with OpenGL ES --(void)drawView:(GLView*)view; +- (void)drawView:(GLView *)view; @optional // Called whenever you need to do some initialization before rendering. --(void)setupView:(GLView*)view; +- (void)setupView:(GLView *)view; @end diff --git a/platform/iphone/globals/global_defaults.cpp b/platform/iphone/globals/global_defaults.cpp index bf716c36f0..b3067dc0c4 100755..100644 --- a/platform/iphone/globals/global_defaults.cpp +++ b/platform/iphone/globals/global_defaults.cpp @@ -29,7 +29,6 @@ #include "global_defaults.h" #include "global_config.h" - void register_iphone_global_defaults() { /*GLOBAL_DEF("rasterizer.iOS/use_fragment_lighting",false); diff --git a/platform/iphone/godot_iphone.cpp b/platform/iphone/godot_iphone.cpp index 27804e5c03..626c78fdf4 100644 --- a/platform/iphone/godot_iphone.cpp +++ b/platform/iphone/godot_iphone.cpp @@ -26,36 +26,36 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "os_iphone.h" #include "main/main.h" +#include "os_iphone.h" #include <stdio.h> -#include <unistd.h> #include <string.h> +#include <unistd.h> -static OSIPhone* os = NULL; +static OSIPhone *os = NULL; extern "C" { -int add_path(int p_argc, char** p_args); -int add_cmdline(int p_argc, char** p_args); +int add_path(int p_argc, char **p_args); +int add_cmdline(int p_argc, char **p_args); }; -int iphone_main(int, int, int, char**); +int iphone_main(int, int, int, char **); -int iphone_main(int width, int height, int argc, char** argv) { +int iphone_main(int width, int height, int argc, char **argv) { int len = strlen(argv[0]); - while (len--){ + while (len--) { if (argv[0][len] == '/') break; } - if (len>=0) { - char path[512]; - memcpy(path, argv[0], len>sizeof(path)?sizeof(path):len); - path[len]=0; - printf("Path: %s\n", path); - chdir(path); + if (len >= 0) { + char path[512]; + memcpy(path, argv[0], len > sizeof(path) ? sizeof(path) : len); + path[len] = 0; + printf("Path: %s\n", path); + chdir(path); } printf("godot_iphone %s\n", argv[0]); @@ -64,8 +64,8 @@ int iphone_main(int width, int height, int argc, char** argv) { printf("cwd %s\n", cwd); os = new OSIPhone(width, height); - char* fargv[64]; - for (int i=0; i<argc; i++) { + char *fargv[64]; + for (int i = 0; i < argc; i++) { fargv[i] = argv[i]; }; fargv[argc] = NULL; @@ -73,15 +73,14 @@ int iphone_main(int width, int height, int argc, char** argv) { argc = add_cmdline(argc, fargv); printf("os created\n"); - Error err = Main::setup(fargv[0], argc - 1, &fargv[1], false); + Error err = Main::setup(fargv[0], argc - 1, &fargv[1], false); printf("setup %i\n", err); - if (err!=OK) + if (err != OK) return 255; return 0; }; - void iphone_finish() { printf("iphone_finish\n"); diff --git a/platform/iphone/icloud.h b/platform/iphone/icloud.h index ba50c4be15..743a9a5de3 100644 --- a/platform/iphone/icloud.h +++ b/platform/iphone/icloud.h @@ -33,18 +33,16 @@ #include "core/object.h" - class ICloud : public Object { GDCLASS(ICloud, Object); - static ICloud* instance; + static ICloud *instance; static void _bind_methods(); List<Variant> pending_events; public: - Error remove_key(Variant p_param); Variant set_key_values(Variant p_param); Variant get_key_value(Variant p_param); @@ -54,13 +52,12 @@ public: int get_pending_event_count(); Variant pop_pending_event(); - static ICloud* get_singleton(); + static ICloud *get_singleton(); ICloud(); ~ICloud(); }; - #endif #endif diff --git a/platform/iphone/in_app_store.h b/platform/iphone/in_app_store.h index 59a745c0f7..b2ed6f70e4 100644 --- a/platform/iphone/in_app_store.h +++ b/platform/iphone/in_app_store.h @@ -37,25 +37,24 @@ class InAppStore : public Object { GDCLASS(InAppStore, Object); - static InAppStore* instance; + static InAppStore *instance; static void _bind_methods(); List<Variant> pending_events; public: - Error request_product_info(Variant p_params); Error purchase(Variant p_params); int get_pending_event_count(); Variant pop_pending_event(); void finish_transaction(String product_id); - void set_auto_finish_transaction(bool b); + void set_auto_finish_transaction(bool b); void _post_event(Variant p_event); void _record_purchase(String product_id); - static InAppStore* get_singleton(); + static InAppStore *get_singleton(); InAppStore(); ~InAppStore(); @@ -63,6 +62,4 @@ public: #endif - #endif - diff --git a/platform/iphone/ios.h b/platform/iphone/ios.h index 345bf127f2..e5baf8f4d2 100644 --- a/platform/iphone/ios.h +++ b/platform/iphone/ios.h @@ -38,11 +38,9 @@ class iOS : public Object { static void _bind_methods(); public: - String get_rate_url(int p_app_id) const; iOS(); - }; #endif diff --git a/platform/iphone/os_iphone.cpp b/platform/iphone/os_iphone.cpp index 816e456838..57862131f9 100644 --- a/platform/iphone/os_iphone.cpp +++ b/platform/iphone/os_iphone.cpp @@ -34,13 +34,13 @@ #include "servers/visual/visual_server_raster.h" //#include "servers/visual/visual_server_wrap_mt.h" -#include "main/main.h" #include "audio_driver_iphone.h" +#include "main/main.h" +#include "core/global_config.h" +#include "core/io/file_access_pack.h" #include "core/os/dir_access.h" #include "core/os/file_access.h" -#include "core/io/file_access_pack.h" -#include "core/global_config.h" #include "sem_iphone.h" @@ -51,17 +51,16 @@ int OSIPhone::get_video_driver_count() const { return 1; }; -const char * OSIPhone::get_video_driver_name(int p_driver) const { +const char *OSIPhone::get_video_driver_name(int p_driver) const { return "GLES2"; }; -OSIPhone* OSIPhone::get_singleton() { +OSIPhone *OSIPhone::get_singleton() { - return (OSIPhone*)OS::get_singleton(); + return (OSIPhone *)OS::get_singleton(); }; - OS::VideoMode OSIPhone::get_default_video_mode() const { return video_mode; @@ -76,7 +75,7 @@ extern int gl_view_base_fb; // from gl_view.mm void OSIPhone::set_data_dir(String p_dir) { - DirAccess* da = DirAccess::open(p_dir); + DirAccess *da = DirAccess::open(p_dir); data_dir = da->get_current_dir(); printf("setting data dir to %ls from %ls\n", data_dir.c_str(), p_dir.c_str()); @@ -99,19 +98,19 @@ void OSIPhone::initialize_core() { SemaphoreIphone::make_default(); }; -void OSIPhone::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) { +void OSIPhone::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { supported_orientations = 0; - supported_orientations |= ((GLOBAL_DEF("video_mode/allow_horizontal", true)?1:0) << LandscapeLeft); - supported_orientations |= ((GLOBAL_DEF("video_mode/allow_horizontal_flipped", false)?1:0) << LandscapeRight); - supported_orientations |= ((GLOBAL_DEF("video_mode/allow_vertical", false)?1:0) << PortraitDown); - supported_orientations |= ((GLOBAL_DEF("video_mode/allow_vertical_flipped", false)?1:0) << PortraitUp); + supported_orientations |= ((GLOBAL_DEF("video_mode/allow_horizontal", true) ? 1 : 0) << LandscapeLeft); + supported_orientations |= ((GLOBAL_DEF("video_mode/allow_horizontal_flipped", false) ? 1 : 0) << LandscapeRight); + supported_orientations |= ((GLOBAL_DEF("video_mode/allow_vertical", false) ? 1 : 0) << PortraitDown); + supported_orientations |= ((GLOBAL_DEF("video_mode/allow_vertical_flipped", false) ? 1 : 0) << PortraitUp); RasterizerGLES3::register_config(); RasterizerGLES3::make_current(); RasterizerStorageGLES3::system_fbo = gl_view_base_fb; - visual_server = memnew( VisualServerRaster() ); + visual_server = memnew(VisualServerRaster()); /* FIXME: Reimplement threaded rendering? Or remove? if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { @@ -127,15 +126,15 @@ void OSIPhone::initialize(const VideoMode& p_desired,int p_video_driver,int p_au audio_driver->init(); // init physics servers - 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); - /* +/* #ifdef IOS_SCORELOOP_ENABLED scoreloop = memnew(ScoreloopIOS); GlobalConfig::get_singleton()->add_singleton(GlobalConfig::Singleton("Scoreloop", scoreloop)); @@ -157,7 +156,7 @@ void OSIPhone::initialize(const VideoMode& p_desired,int p_video_driver,int p_au #ifdef ICLOUD_ENABLED icloud = memnew(ICloud); GlobalConfig::get_singleton()->add_singleton(GlobalConfig::Singleton("ICloud", icloud)); - //icloud->connect(); +//icloud->connect(); #endif GlobalConfig::get_singleton()->add_singleton(GlobalConfig::Singleton("iOS", memnew(iOS))); }; @@ -167,8 +166,7 @@ MainLoop *OSIPhone::get_main_loop() const { return main_loop; }; - -void OSIPhone::set_main_loop( MainLoop * p_main_loop ) { +void OSIPhone::set_main_loop(MainLoop *p_main_loop) { main_loop = p_main_loop; @@ -178,14 +176,13 @@ void OSIPhone::set_main_loop( MainLoop * p_main_loop ) { } }; - bool OSIPhone::iterate() { if (!main_loop) return true; if (main_loop) { - for (int i=0; i<event_count; i++) { + for (int i = 0; i < event_count; i++) { input->parse_input_event(event_queue[i]); }; @@ -213,10 +210,10 @@ void OSIPhone::mouse_button(int p_idx, int p_x, int p_y, bool p_pressed, bool p_ InputEvent ev; ev.type = InputEvent::SCREEN_TOUCH; ev.ID = ++last_event_id; - ev.screen_touch.index=p_idx; - ev.screen_touch.pressed=p_pressed; - ev.screen_touch.x=p_x; - ev.screen_touch.y=p_y; + ev.screen_touch.index = p_idx; + ev.screen_touch.pressed = p_pressed; + ev.screen_touch.x = p_x; + ev.screen_touch.y = p_y; queue_event(ev); }; @@ -238,7 +235,7 @@ void OSIPhone::mouse_button(int p_idx, int p_x, int p_y, bool p_pressed, bool p_ //mouse_list.pressed[p_idx] = p_pressed; - input->set_mouse_pos(Point2(ev.mouse_motion.x,ev.mouse_motion.y)); + input->set_mouse_pos(Point2(ev.mouse_motion.x, ev.mouse_motion.y)); ev.mouse_button.button_index = BUTTON_LEFT; ev.mouse_button.doubleclick = p_doubleclick; ev.mouse_button.pressed = p_pressed; @@ -252,11 +249,11 @@ void OSIPhone::mouse_move(int p_idx, int p_prev_x, int p_prev_y, int p_x, int p_ if (!GLOBAL_DEF("debug/disable_touch", false)) { InputEvent ev; - ev.type=InputEvent::SCREEN_DRAG; + ev.type = InputEvent::SCREEN_DRAG; ev.ID = ++last_event_id; - ev.screen_drag.index=p_idx; - ev.screen_drag.x=p_x; - ev.screen_drag.y=p_y; + ev.screen_drag.index = p_idx; + ev.screen_drag.x = p_x; + ev.screen_drag.y = p_y; ev.screen_drag.relative_x = p_x - p_prev_x; ev.screen_drag.relative_y = p_y - p_prev_y; queue_event(ev); @@ -283,25 +280,25 @@ void OSIPhone::mouse_move(int p_idx, int p_prev_x, int p_prev_y, int p_x, int p_ ev.mouse_motion.relative_y = ev.mouse_motion.y - p_prev_x; }; - 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; + 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.button_mask = 1; // pressed queue_event(ev); }; }; -void OSIPhone::queue_event(const InputEvent& p_event) { +void OSIPhone::queue_event(const InputEvent &p_event) { - ERR_FAIL_INDEX( event_count, MAX_EVENTS ); + ERR_FAIL_INDEX(event_count, MAX_EVENTS); event_queue[event_count++] = p_event; }; void OSIPhone::touches_cancelled() { - for (int i=0; i<MAX_MOUSE_COUNT; i++) { + for (int i = 0; i < MAX_MOUSE_COUNT; i++) { if (mouse_list.pressed[i]) { @@ -379,12 +376,12 @@ void OSIPhone::delete_main_loop() { void OSIPhone::finalize() { - if(main_loop) // should not happen? + if (main_loop) // should not happen? memdelete(main_loop); visual_server->finish(); memdelete(visual_server); -// memdelete(rasterizer); + // memdelete(rasterizer); physics_server->finish(); memdelete(physics_server); @@ -393,11 +390,10 @@ void OSIPhone::finalize() { memdelete(physics_2d_server); memdelete(input); - }; -void OSIPhone::set_mouse_show(bool p_show) { }; -void OSIPhone::set_mouse_grab(bool p_grab) { }; +void OSIPhone::set_mouse_show(bool p_show){}; +void OSIPhone::set_mouse_grab(bool p_grab){}; bool OSIPhone::is_mouse_grab_enabled() const { @@ -414,9 +410,9 @@ int OSIPhone::get_mouse_button_state() const { return mouse_list.pressed[0]; }; -void OSIPhone::set_window_title(const String& p_title) { }; +void OSIPhone::set_window_title(const String &p_title){}; -void OSIPhone::set_video_mode(const VideoMode& p_video_mode, int p_screen) { +void OSIPhone::set_video_mode(const VideoMode &p_video_mode, int p_screen) { video_mode = p_video_mode; }; @@ -454,7 +450,7 @@ extern void _hide_keyboard(); extern Error _shell_open(String p_uri); extern void _set_keep_screen_on(bool p_enabled); -void OSIPhone::show_virtual_keyboard(const String& p_existing_text,const Rect2& p_screen_rect) { +void OSIPhone::show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect) { _show_keyboard(p_existing_text); }; @@ -471,8 +467,7 @@ void OSIPhone::set_keep_screen_on(bool p_enabled) { _set_keep_screen_on(p_enabled); }; -void OSIPhone::set_cursor_shape(CursorShape p_shape) { - +void OSIPhone::set_cursor_shape(CursorShape p_shape){ }; @@ -496,8 +491,7 @@ bool OSIPhone::has_touchscreen_ui_hint() const { return true; } -void OSIPhone::set_locale(String p_locale) -{ +void OSIPhone::set_locale(String p_locale) { locale_code = p_locale; } @@ -513,7 +507,7 @@ extern void _stop_video(); extern void _focus_out_video(); Error OSIPhone::native_video_play(String p_path, float p_volume, String p_audio_track, String p_subtitle_track) { - FileAccess* f = FileAccess::open(p_path, FileAccess::READ); + FileAccess *f = FileAccess::open(p_path, FileAccess::READ); bool exists = f && f->is_open(); String tempFile = get_data_dir(); @@ -533,18 +527,18 @@ Error OSIPhone::native_video_play(String p_path, float p_volume, String p_audio_ memdelete(f); print("Playing video: %S\n", p_path.c_str()); - if (_play_video(p_path, p_volume, p_audio_track, p_subtitle_track) ) + if (_play_video(p_path, p_volume, p_audio_track, p_subtitle_track)) return OK; return FAILED; } bool OSIPhone::native_video_is_playing() const { - return _is_video_playing(); + return _is_video_playing(); } void OSIPhone::native_video_pause() { if (native_video_is_playing()) - _pause_video(); + _pause_video(); } void OSIPhone::native_video_unpause() { @@ -557,7 +551,7 @@ void OSIPhone::native_video_focus_out() { void OSIPhone::native_video_stop() { if (native_video_is_playing()) - _stop_video(); + _stop_video(); } OSIPhone::OSIPhone(int width, int height) { @@ -576,7 +570,6 @@ OSIPhone::OSIPhone(int width, int height) { }; OSIPhone::~OSIPhone() { - } #endif diff --git a/platform/iphone/os_iphone.h b/platform/iphone/os_iphone.h index 65dcc884bb..36261a62c2 100644 --- a/platform/iphone/os_iphone.h +++ b/platform/iphone/os_iphone.h @@ -31,20 +31,19 @@ #ifndef OS_IPHONE_H #define OS_IPHONE_H -#include "os/input.h" #include "drivers/unix/os_unix.h" +#include "os/input.h" -#include "servers/visual_server.h" -#include "servers/visual/rasterizer.h" +#include "game_center.h" +#include "icloud.h" +#include "in_app_store.h" +#include "main/input_default.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/audio_server.h" -#include "main/input_default.h" -#include "game_center.h" -#include "in_app_store.h" -#include "icloud.h" - +#include "servers/visual/rasterizer.h" +#include "servers/visual_server.h" class AudioDriverIphone; // class RasterizerGLES2; @@ -52,55 +51,53 @@ class AudioDriverIphone; class OSIPhone : public OS_Unix { public: - enum Orientations { PortraitDown, PortraitUp, LandscapeLeft, LandscapeRight, }; -private: +private: enum { - MAX_MOUSE_COUNT = 8, - MAX_EVENTS = 64, + MAX_MOUSE_COUNT = 8, + MAX_EVENTS = 64, }; uint8_t supported_orientations; -// Rasterizer *rasterizer; -// RasterizerGLES2* rasterizer_gles22; + // Rasterizer *rasterizer; + // RasterizerGLES2* rasterizer_gles22; VisualServer *visual_server; - PhysicsServer* physics_server; + PhysicsServer *physics_server; Physics2DServer *physics_2d_server; - AudioDriverIphone* audio_driver; + AudioDriverIphone *audio_driver; #ifdef GAME_CENTER_ENABLED - GameCenter* game_center; + GameCenter *game_center; #endif #ifdef STOREKIT_ENABLED - InAppStore* store_kit; + InAppStore *store_kit; #endif #ifdef ICLOUD_ENABLED - ICloud* icloud; + ICloud *icloud; #endif MainLoop *main_loop; VideoMode video_mode; - 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 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 MainLoop *get_main_loop() const; virtual void delete_main_loop(); @@ -111,7 +108,7 @@ private: bool pressed[MAX_MOUSE_COUNT]; MouseList() { - for (int i=0; i<MAX_MOUSE_COUNT; i++) + for (int i = 0; i < MAX_MOUSE_COUNT; i++) pressed[i] = false; }; }; @@ -123,7 +120,7 @@ private: InputEvent event_queue[MAX_EVENTS]; int event_count; int last_event_id; - void queue_event(const InputEvent& p_event); + void queue_event(const InputEvent &p_event); String data_dir; String unique_ID; @@ -132,7 +129,6 @@ private: InputDefault *input; public: - bool iterate(); uint8_t get_orientations() const; @@ -149,25 +145,25 @@ public: void update_magnetometer(float p_x, float p_y, float p_z); void update_gyroscope(float p_x, float p_y, float p_z); - static OSIPhone* get_singleton(); + static OSIPhone *get_singleton(); 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_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); virtual bool can_draw() 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(); virtual void set_cursor_shape(CursorShape p_shape); diff --git a/platform/iphone/platform_refcount.h b/platform/iphone/platform_refcount.h index d32fb4514c..6cfdc49369 100644 --- a/platform/iphone/platform_refcount.h +++ b/platform/iphone/platform_refcount.h @@ -31,15 +31,15 @@ #ifdef IPHONE_ENABLED #define REFCOUNT_T int -#define REFCOUNT_GET_T int const volatile& +#define REFCOUNT_GET_T int const volatile & #include <libkern/OSAtomic.h> -inline int atomic_conditional_increment(volatile int* v) { - return (*v==0)? 0 : OSAtomicIncrement32(v); +inline int atomic_conditional_increment(volatile int *v) { + return (*v == 0) ? 0 : OSAtomicIncrement32(v); } -inline int atomic_decrement(volatile int* v) { +inline int atomic_decrement(volatile int *v) { return OSAtomicDecrement32(v); } diff --git a/platform/iphone/power_iphone.cpp b/platform/iphone/power_iphone.cpp index db555f30c2..7b1f9246f4 100644 --- a/platform/iphone/power_iphone.cpp +++ b/platform/iphone/power_iphone.cpp @@ -33,12 +33,10 @@ bool PowerState::UpdatePowerInfo() { return false; } - PowerState PowerIphone::get_power_state() { if (UpdatePowerInfo()) { return power_state; - } - else { + } else { return POWERSTATE_UNKNOWN; } } @@ -46,8 +44,7 @@ PowerState PowerIphone::get_power_state() { int PowerIphone::get_power_seconds_left() { if (UpdatePowerInfo()) { return nsecs_left; - } - else { + } else { return -1; } } @@ -55,15 +52,14 @@ int PowerIphone::get_power_seconds_left() { int PowerIphone::get_power_percent_left() { if (UpdatePowerInfo()) { return percent_left; - } - else { + } else { return -1; } } -PowerIphone::PowerIphone() : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { +PowerIphone::PowerIphone() + : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { // TODO Auto-generated constructor stub - } PowerIphone::~PowerIphone() { diff --git a/platform/iphone/rasterizer_iphone.cpp b/platform/iphone/rasterizer_iphone.cpp index b8f3dd0d05..1a619f4305 100644 --- a/platform/iphone/rasterizer_iphone.cpp +++ b/platform/iphone/rasterizer_iphone.cpp @@ -29,13 +29,13 @@ #ifdef IPHONE_ENABLED #include "rasterizer_iphone.h" -#include "os/os.h" #include "global_config.h" +#include "os/os.h" #include <stdio.h> -_FORCE_INLINE_ static void _gl_load_transform(const Transform& tr) { +_FORCE_INLINE_ static void _gl_load_transform(const Transform &tr) { - GLfloat matrix[16]={ /* build a 16x16 matrix */ + GLfloat matrix[16] = { /* build a 16x16 matrix */ tr.basis.elements[0][0], tr.basis.elements[1][0], tr.basis.elements[2][0], @@ -57,9 +57,9 @@ _FORCE_INLINE_ static void _gl_load_transform(const Transform& tr) { glLoadMatrixf(matrix); }; -_FORCE_INLINE_ static void _gl_mult_transform(const Transform& tr) { +_FORCE_INLINE_ static void _gl_mult_transform(const Transform &tr) { - GLfloat matrix[16]={ /* build a 16x16 matrix */ + GLfloat matrix[16] = { /* build a 16x16 matrix */ tr.basis.elements[0][0], tr.basis.elements[1][0], tr.basis.elements[2][0], @@ -81,42 +81,41 @@ _FORCE_INLINE_ static void _gl_mult_transform(const Transform& tr) { glMultMatrixf(matrix); }; -static const GLenum prim_type[]={GL_POINTS,GL_LINES,GL_TRIANGLES,GL_TRIANGLE_FAN}; +static const GLenum prim_type[] = { GL_POINTS, GL_LINES, GL_TRIANGLES, GL_TRIANGLE_FAN }; -static void _draw_primitive(int p_points, const float *p_vertices, const float *p_normals, const float* p_colors, const float *p_uvs,const Plane *p_tangents=NULL,int p_instanced=1) { +static void _draw_primitive(int p_points, const float *p_vertices, const float *p_normals, const float *p_colors, const float *p_uvs, const Plane *p_tangents = NULL, int p_instanced = 1) { ERR_FAIL_COND(!p_vertices); - ERR_FAIL_COND(p_points <1 || p_points>4); + ERR_FAIL_COND(p_points < 1 || p_points > 4); GLenum type = prim_type[p_points - 1]; - if (!p_colors) { glColor4f(1, 1, 1, 1); }; glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(3, GL_FLOAT, 0, (GLvoid*)p_vertices); + glVertexPointer(3, GL_FLOAT, 0, (GLvoid *)p_vertices); if (p_normals) { - glEnableClientState(GL_NORMAL_ARRAY); - glNormalPointer(GL_FLOAT, 0, (GLvoid*)p_normals); + glEnableClientState(GL_NORMAL_ARRAY); + glNormalPointer(GL_FLOAT, 0, (GLvoid *)p_normals); }; if (p_colors) { - glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4,GL_FLOAT, 0, p_colors); + glEnableClientState(GL_COLOR_ARRAY); + glColorPointer(4, GL_FLOAT, 0, p_colors); }; if (p_uvs) { - glClientActiveTexture(GL_TEXTURE0); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, 0, p_uvs); + glClientActiveTexture(GL_TEXTURE0); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexCoordPointer(2, GL_FLOAT, 0, p_uvs); }; - glDrawArrays( type, 0, p_points); + glDrawArrays(type, 0, p_points); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); @@ -124,61 +123,61 @@ static void _draw_primitive(int p_points, const float *p_vertices, const float * glDisableClientState(GL_TEXTURE_COORD_ARRAY); }; - /* TEXTURE API */ -static Image _get_gl_image_and_format(const Image& p_image, Image::Format p_format, uint32_t p_flags,GLenum& r_gl_format,int &r_gl_components,bool &r_has_alpha_cache) { +static Image _get_gl_image_and_format(const Image &p_image, Image::Format p_format, uint32_t p_flags, GLenum &r_gl_format, int &r_gl_components, bool &r_has_alpha_cache) { - r_has_alpha_cache=false; - Image image=p_image; + r_has_alpha_cache = false; + Image image = p_image; - switch(p_format) { + switch (p_format) { case Image::FORMAT_L8: { - r_gl_components=1; - r_gl_format=GL_LUMINANCE; + r_gl_components = 1; + r_gl_format = GL_LUMINANCE; } break; case Image::FORMAT_INTENSITY: { image.convert(Image::FORMAT_RGBA8); - r_gl_components=4; - r_gl_format=GL_RGBA; - r_has_alpha_cache=true; + r_gl_components = 4; + r_gl_format = GL_RGBA; + r_has_alpha_cache = true; } break; case Image::FORMAT_LA8: { image.convert(Image::FORMAT_RGBA8); - r_gl_components=4; - r_gl_format=GL_RGBA; - r_has_alpha_cache=true; + r_gl_components = 4; + r_gl_format = GL_RGBA; + r_has_alpha_cache = true; } break; case Image::FORMAT_INDEXED: { image.convert(Image::FORMAT_RGB8); - r_gl_components=3; - r_gl_format=GL_RGB; + r_gl_components = 3; + r_gl_format = GL_RGB; } break; case Image::FORMAT_INDEXED_ALPHA: { image.convert(Image::FORMAT_RGBA8); - r_gl_components=4; - r_gl_format=GL_RGB; - r_has_alpha_cache=true; + r_gl_components = 4; + r_gl_format = GL_RGB; + r_has_alpha_cache = true; } break; case Image::FORMAT_RGB8: { - r_gl_components=3; r_gl_format=GL_RGB; + r_gl_components = 3; + r_gl_format = GL_RGB; } break; case Image::FORMAT_RGBA8: { - r_gl_components=4; - r_gl_format=GL_RGBA; - r_has_alpha_cache=true; + r_gl_components = 4; + r_gl_format = GL_RGBA; + r_has_alpha_cache = true; } break; default: { @@ -192,45 +191,43 @@ static Image _get_gl_image_and_format(const Image& p_image, Image::Format p_form RID RasterizerIPhone::texture_create() { Texture *texture = memnew(Texture); - ERR_FAIL_COND_V(!texture,RID()); + ERR_FAIL_COND_V(!texture, RID()); glGenTextures(1, &texture->tex_id); - texture->active=false; - - return texture_owner.make_rid( texture ); + texture->active = false; + return texture_owner.make_rid(texture); } -void RasterizerIPhone::texture_allocate(RID p_texture,int p_width, int p_height,Image::Format p_format,uint32_t p_flags) { +void RasterizerIPhone::texture_allocate(RID p_texture, int p_width, int p_height, Image::Format p_format, uint32_t p_flags) { bool has_alpha_cache; int components; GLenum format; - Texture *texture = texture_owner.get( p_texture ); + Texture *texture = texture_owner.get(p_texture); ERR_FAIL_COND(!texture); - texture->width=p_width; - texture->height=p_height; - texture->format=p_format; - texture->flags=p_flags; + texture->width = p_width; + texture->height = p_height; + texture->format = p_format; + texture->flags = p_flags; //texture->target = (p_flags & VS::TEXTURE_FLAG_CUBEMAP) ? GL_TEXTURE_CUBE_MAP : GL_TEXTURE_2D; texture->target = GL_TEXTURE_2D; - _get_gl_image_and_format(Image(),texture->format,texture->flags,format,components,has_alpha_cache); + _get_gl_image_and_format(Image(), texture->format, texture->flags, format, components, has_alpha_cache); - texture->gl_components_cache=components; - texture->gl_format_cache=format; - texture->format_has_alpha=has_alpha_cache; - texture->has_alpha=false; //by default it doesn't have alpha unless something with alpha is blitteds + texture->gl_components_cache = components; + texture->gl_format_cache = format; + texture->format_has_alpha = has_alpha_cache; + texture->has_alpha = false; //by default it doesn't have alpha unless something with alpha is blitteds glBindTexture(texture->target, texture->tex_id); - if (texture->flags&VS::TEXTURE_FLAG_MIPMAPS) { - glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE ); + if (texture->flags & VS::TEXTURE_FLAG_MIPMAPS) { + glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); } - - if (texture->target==GL_TEXTURE_2D) { - glTexImage2D(texture->target, 0, format, texture->width, texture->height, 0, format, GL_UNSIGNED_BYTE,NULL); + if (texture->target == GL_TEXTURE_2D) { + glTexImage2D(texture->target, 0, format, texture->width, texture->height, 0, format, GL_UNSIGNED_BYTE, NULL); } /* @@ -241,138 +238,131 @@ void RasterizerIPhone::texture_allocate(RID p_texture,int p_width, int p_height, } */ - glTexParameteri(texture->target,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // Linear Filtering + glTexParameteri(texture->target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // Linear Filtering - if (texture->flags&VS::TEXTURE_FLAG_FILTER) { + if (texture->flags & VS::TEXTURE_FLAG_FILTER) { - glTexParameteri(texture->target,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // Linear Filtering - if (texture->flags&VS::TEXTURE_FLAG_MIPMAPS) { + glTexParameteri(texture->target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Linear Filtering + if (texture->flags & VS::TEXTURE_FLAG_MIPMAPS) { //glTexParameteri(texture->target,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); }; } + if (texture->flags & VS::TEXTURE_FLAG_REPEAT /* && texture->target != GL_TEXTURE_CUBE_MAP*/) { - - if (texture->flags&VS::TEXTURE_FLAG_REPEAT /* && texture->target != GL_TEXTURE_CUBE_MAP*/) { - - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); } else { //glTexParameterf( texture->target, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE ); - glTexParameterf( texture->target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameterf( texture->target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + glTexParameterf(texture->target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(texture->target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } - texture->active=true; + texture->active = true; } -void RasterizerIPhone::texture_blit_rect(RID p_texture,int p_x,int p_y, const Image& p_image,VS::CubeMapSide p_cube_side) { +void RasterizerIPhone::texture_blit_rect(RID p_texture, int p_x, int p_y, const Image &p_image, VS::CubeMapSide p_cube_side) { - Texture * texture = texture_owner.get(p_texture); + Texture *texture = texture_owner.get(p_texture); ERR_FAIL_COND(!texture); ERR_FAIL_COND(!texture->active); - ERR_FAIL_COND(texture->format != p_image.get_format() ); + ERR_FAIL_COND(texture->format != p_image.get_format()); int components; GLenum format; bool alpha; - Image img = _get_gl_image_and_format(p_image, p_image.get_format(),texture->flags,format,components,alpha); + Image img = _get_gl_image_and_format(p_image, p_image.get_format(), texture->flags, format, components, alpha); if (img.detect_alpha()) - texture->has_alpha=true; + texture->has_alpha = true; GLenum blit_target = GL_TEXTURE_2D; //(texture->target == GL_TEXTURE_CUBE_MAP)?_cube_side_enum[p_cube_side]:GL_TEXTURE_2D; PoolVector<uint8_t>::Read read = img.get_data().read(); glBindTexture(texture->target, texture->tex_id); - glTexSubImage2D( blit_target, 0, p_x,p_y,img.get_width(),img.get_height(),format,GL_UNSIGNED_BYTE,read.ptr() ); + glTexSubImage2D(blit_target, 0, p_x, p_y, img.get_width(), img.get_height(), format, GL_UNSIGNED_BYTE, read.ptr()); //glGenerateMipmap( texture->target ); } -Image RasterizerIPhone::texture_get_rect(RID p_texture,int p_x,int p_y,int p_width, int p_height,VS::CubeMapSide p_cube_side) const { - +Image RasterizerIPhone::texture_get_rect(RID p_texture, int p_x, int p_y, int p_width, int p_height, VS::CubeMapSide p_cube_side) const { return Image(); } -void RasterizerIPhone::texture_set_flags(RID p_texture,uint32_t p_flags) { +void RasterizerIPhone::texture_set_flags(RID p_texture, uint32_t p_flags) { - Texture *texture = texture_owner.get( p_texture ); + Texture *texture = texture_owner.get(p_texture); ERR_FAIL_COND(!texture); glBindTexture(texture->target, texture->tex_id); uint32_t cube = texture->flags & VS::TEXTURE_FLAG_CUBEMAP; - texture->flags=p_flags|cube; // can't remove a cube from being a cube + texture->flags = p_flags | cube; // can't remove a cube from being a cube - if (texture->flags&VS::TEXTURE_FLAG_REPEAT /*&& texture->target != GL_TEXTURE_CUBE_MAP*/) { + if (texture->flags & VS::TEXTURE_FLAG_REPEAT /*&& texture->target != GL_TEXTURE_CUBE_MAP*/) { - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); } else { //glTexParameterf( texture->target, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE ); - glTexParameterf( texture->target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameterf( texture->target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - + glTexParameterf(texture->target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(texture->target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } + if (texture->flags & VS::TEXTURE_FLAG_FILTER) { - if (texture->flags&VS::TEXTURE_FLAG_FILTER) { - - glTexParameteri(texture->target,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // Linear Filtering - if (texture->flags&VS::TEXTURE_FLAG_MIPMAPS) - glTexParameteri(texture->target,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(texture->target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Linear Filtering + if (texture->flags & VS::TEXTURE_FLAG_MIPMAPS) + glTexParameteri(texture->target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); } else { - glTexParameteri(texture->target,GL_TEXTURE_MAG_FILTER,GL_NEAREST); // nearest + glTexParameteri(texture->target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // nearest } } uint32_t RasterizerIPhone::texture_get_flags(RID p_texture) const { - Texture * texture = texture_owner.get(p_texture); + Texture *texture = texture_owner.get(p_texture); - ERR_FAIL_COND_V(!texture,0); + ERR_FAIL_COND_V(!texture, 0); return texture->flags; - } Image::Format RasterizerIPhone::texture_get_format(RID p_texture) const { - Texture * texture = texture_owner.get(p_texture); + Texture *texture = texture_owner.get(p_texture); - ERR_FAIL_COND_V(!texture,Image::FORMAT_L8); + ERR_FAIL_COND_V(!texture, Image::FORMAT_L8); return texture->format; } uint32_t RasterizerIPhone::texture_get_width(RID p_texture) const { - Texture * texture = texture_owner.get(p_texture); + Texture *texture = texture_owner.get(p_texture); - ERR_FAIL_COND_V(!texture,0); + ERR_FAIL_COND_V(!texture, 0); return texture->width; } uint32_t RasterizerIPhone::texture_get_height(RID p_texture) const { - Texture * texture = texture_owner.get(p_texture); + Texture *texture = texture_owner.get(p_texture); - ERR_FAIL_COND_V(!texture,0); + ERR_FAIL_COND_V(!texture, 0); return texture->height; } bool RasterizerIPhone::texture_has_alpha(RID p_texture) const { - Texture * texture = texture_owner.get(p_texture); + Texture *texture = texture_owner.get(p_texture); - ERR_FAIL_COND_V(!texture,0); + ERR_FAIL_COND_V(!texture, 0); return texture->has_alpha; - } /* SHADER API */ @@ -382,97 +372,68 @@ RID RasterizerIPhone::shader_create() { return RID(); } -void RasterizerIPhone::shader_node_add(RID p_shader,VS::ShaderNodeType p_type,int p_id) { - - +void RasterizerIPhone::shader_node_add(RID p_shader, VS::ShaderNodeType p_type, int p_id) { } -void RasterizerIPhone::shader_node_remove(RID p_shader,int p_id) { - - +void RasterizerIPhone::shader_node_remove(RID p_shader, int p_id) { } void RasterizerIPhone::shader_node_change_type(RID p_shader, int p_id, VS::ShaderNodeType p_type) { - - } -void RasterizerIPhone::shader_node_set_param(RID p_shader, int p_id, const Variant& p_value) { - - +void RasterizerIPhone::shader_node_set_param(RID p_shader, int p_id, const Variant &p_value) { } -void RasterizerIPhone::shader_get_node_list(RID p_shader,List<int> *p_node_list) const { - - +void RasterizerIPhone::shader_get_node_list(RID p_shader, List<int> *p_node_list) const { } -VS::ShaderNodeType RasterizerIPhone::shader_node_get_type(RID p_shader,int p_id) const { - +VS::ShaderNodeType RasterizerIPhone::shader_node_get_type(RID p_shader, int p_id) const { return VS::NODE_ADD; } -Variant RasterizerIPhone::shader_node_get_param(RID p_shader,int p_id) const { +Variant RasterizerIPhone::shader_node_get_param(RID p_shader, int p_id) const { return Variant(); } -void RasterizerIPhone::shader_connect(RID p_shader,int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot) { - - +void RasterizerIPhone::shader_connect(RID p_shader, int p_src_id, int p_src_slot, int p_dst_id, int p_dst_slot) { } -bool RasterizerIPhone::shader_is_connected(RID p_shader,int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot) const { +bool RasterizerIPhone::shader_is_connected(RID p_shader, int p_src_id, int p_src_slot, int p_dst_id, int p_dst_slot) const { return false; } -void RasterizerIPhone::shader_disconnect(RID p_shader,int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot) { - - +void RasterizerIPhone::shader_disconnect(RID p_shader, int p_src_id, int p_src_slot, int p_dst_id, int p_dst_slot) { } -void RasterizerIPhone::shader_get_connections(RID p_shader,List<VS::ShaderConnection> *p_connections) const { - - +void RasterizerIPhone::shader_get_connections(RID p_shader, List<VS::ShaderConnection> *p_connections) const { } void RasterizerIPhone::shader_clear(RID p_shader) { - - } /* COMMON MATERIAL API */ -void RasterizerIPhone::material_set_param(RID p_material, const StringName& p_param, const Variant& p_value) { - - +void RasterizerIPhone::material_set_param(RID p_material, const StringName &p_param, const Variant &p_value) { } -Variant RasterizerIPhone::material_get_param(RID p_material, const StringName& p_param) const { +Variant RasterizerIPhone::material_get_param(RID p_material, const StringName &p_param) const { return Variant(); } void RasterizerIPhone::material_get_param_list(RID p_material, List<String> *p_param_list) const { - - } -void RasterizerIPhone::material_set_flag(RID p_material, VS::MaterialFlag p_flag,bool p_enabled) { - - +void RasterizerIPhone::material_set_flag(RID p_material, VS::MaterialFlag p_flag, bool p_enabled) { } -bool RasterizerIPhone::material_get_flag(RID p_material,VS::MaterialFlag p_flag) const { +bool RasterizerIPhone::material_get_flag(RID p_material, VS::MaterialFlag p_flag) const { return false; } -void RasterizerIPhone::material_set_blend_mode(RID p_material,VS::MaterialBlendMode p_mode) { - - +void RasterizerIPhone::material_set_blend_mode(RID p_material, VS::MaterialBlendMode p_mode) { } VS::MaterialBlendMode RasterizerIPhone::material_get_blend_mode(RID p_material) const { return VS::MATERIAL_BLEND_MODE_ADD; } -void RasterizerIPhone::material_set_line_width(RID p_material,float p_line_width) { - - +void RasterizerIPhone::material_set_line_width(RID p_material, float p_line_width) { } float RasterizerIPhone::material_get_line_width(RID p_material) const { @@ -483,78 +444,78 @@ float RasterizerIPhone::material_get_line_width(RID p_material) const { RID RasterizerIPhone::material_create() { - return material_owner.make_rid( memnew( Material ) ); + return material_owner.make_rid(memnew(Material)); } -void RasterizerIPhone::fixed_material_set_parameter(RID p_material, VS::FixedSpatialMaterialParam p_parameter, const Variant& p_value) { +void RasterizerIPhone::fixed_material_set_parameter(RID p_material, VS::FixedSpatialMaterialParam p_parameter, const Variant &p_value) { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND(!m); ERR_FAIL_INDEX(p_parameter, VisualServer::FIXED_MATERIAL_PARAM_MAX); m->parameters[p_parameter] = p_value; } -Variant RasterizerIPhone::fixed_material_get_parameter(RID p_material,VS::FixedSpatialMaterialParam p_parameter) const { +Variant RasterizerIPhone::fixed_material_get_parameter(RID p_material, VS::FixedSpatialMaterialParam p_parameter) const { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND_V(!m, Variant()); ERR_FAIL_INDEX_V(p_parameter, VisualServer::FIXED_MATERIAL_PARAM_MAX, Variant()); return m->parameters[p_parameter]; } -void RasterizerIPhone::fixed_material_set_texture(RID p_material,VS::FixedSpatialMaterialParam p_parameter, RID p_texture) { +void RasterizerIPhone::fixed_material_set_texture(RID p_material, VS::FixedSpatialMaterialParam p_parameter, RID p_texture) { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND(!m); ERR_FAIL_INDEX(p_parameter, VisualServer::FIXED_MATERIAL_PARAM_MAX); m->textures[p_parameter] = p_texture; } -RID RasterizerIPhone::fixed_material_get_texture(RID p_material,VS::FixedSpatialMaterialParam p_parameter) const { +RID RasterizerIPhone::fixed_material_get_texture(RID p_material, VS::FixedSpatialMaterialParam p_parameter) const { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND_V(!m, RID()); ERR_FAIL_INDEX_V(p_parameter, VisualServer::FIXED_MATERIAL_PARAM_MAX, Variant()); return m->textures[p_parameter]; } -void RasterizerIPhone::fixed_material_set_detail_blend_mode(RID p_material,VS::MaterialBlendMode p_mode) { +void RasterizerIPhone::fixed_material_set_detail_blend_mode(RID p_material, VS::MaterialBlendMode p_mode) { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND(!m); m->detail_blend_mode = p_mode; } VS::MaterialBlendMode RasterizerIPhone::fixed_material_get_detail_blend_mode(RID p_material) const { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND_V(!m, VS::MATERIAL_BLEND_MODE_MIX); return m->detail_blend_mode; } -void RasterizerIPhone::fixed_material_set_texcoord_mode(RID p_material,VS::FixedSpatialMaterialParam p_parameter, VS::FixedSpatialMaterialTexCoordMode p_mode) { +void RasterizerIPhone::fixed_material_set_texcoord_mode(RID p_material, VS::FixedSpatialMaterialParam p_parameter, VS::FixedSpatialMaterialTexCoordMode p_mode) { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND(!m); ERR_FAIL_INDEX(p_parameter, VisualServer::FIXED_MATERIAL_PARAM_MAX); m->texcoord_mode[p_parameter] = p_mode; } -VS::FixedSpatialMaterialTexCoordMode RasterizerIPhone::fixed_material_get_texcoord_mode(RID p_material,VS::FixedSpatialMaterialParam p_parameter) const { +VS::FixedSpatialMaterialTexCoordMode RasterizerIPhone::fixed_material_get_texcoord_mode(RID p_material, VS::FixedSpatialMaterialParam p_parameter) const { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND_V(!m, VS::FIXED_MATERIAL_TEXCOORD_TEXGEN); ERR_FAIL_INDEX_V(p_parameter, VisualServer::FIXED_MATERIAL_PARAM_MAX, VS::FIXED_MATERIAL_TEXCOORD_UV); return m->texcoord_mode[p_parameter]; // for now } -void RasterizerIPhone::fixed_material_set_texgen_mode(RID p_material,VS::FixedSpatialMaterialTexGenMode p_mode) { +void RasterizerIPhone::fixed_material_set_texgen_mode(RID p_material, VS::FixedSpatialMaterialTexGenMode p_mode) { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND(!m); m->texgen_mode = p_mode; @@ -562,23 +523,22 @@ void RasterizerIPhone::fixed_material_set_texgen_mode(RID p_material,VS::FixedSp VS::FixedSpatialMaterialTexGenMode RasterizerIPhone::fixed_material_get_texgen_mode(RID p_material) const { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND_V(!m, VS::FIXED_MATERIAL_TEXGEN_SPHERE); return m->texgen_mode; }; +void RasterizerIPhone::fixed_material_set_uv_transform(RID p_material, const Transform &p_transform) { -void RasterizerIPhone::fixed_material_set_uv_transform(RID p_material,const Transform& p_transform) { - - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND(!m); m->uv_transform = p_transform; } Transform RasterizerIPhone::fixed_material_get_uv_transform(RID p_material) const { - Material *m=material_owner.get( p_material ); + Material *m = material_owner.get(p_material); ERR_FAIL_COND_V(!m, Transform()); return m->uv_transform; @@ -591,529 +551,505 @@ RID RasterizerIPhone::shader_material_create() const { return RID(); } -void RasterizerIPhone::shader_material_set_vertex_shader(RID p_material,RID p_shader,bool p_owned) { - - +void RasterizerIPhone::shader_material_set_vertex_shader(RID p_material, RID p_shader, bool p_owned) { } RID RasterizerIPhone::shader_material_get_vertex_shader(RID p_material) const { return RID(); } -void RasterizerIPhone::shader_material_set_fragment_shader(RID p_material,RID p_shader,bool p_owned) { - - +void RasterizerIPhone::shader_material_set_fragment_shader(RID p_material, RID p_shader, bool p_owned) { } RID RasterizerIPhone::shader_material_get_fragment_shader(RID p_material) const { return RID(); } - /* MESH API */ RID RasterizerIPhone::mesh_create() { - - return mesh_owner.make_rid( memnew( Mesh ) ); + return mesh_owner.make_rid(memnew(Mesh)); } -void RasterizerIPhone::mesh_add_surface(RID p_mesh,VS::PrimitiveType p_primitive,uint32_t p_format,int p_array_len,int p_index_array_len) { +void RasterizerIPhone::mesh_add_surface(RID p_mesh, VS::PrimitiveType p_primitive, uint32_t p_format, int p_array_len, int p_index_array_len) { - Mesh *mesh = mesh_owner.get( p_mesh ); + Mesh *mesh = mesh_owner.get(p_mesh); ERR_FAIL_COND(!mesh); - ERR_FAIL_COND((p_format&VS::ARRAY_FORMAT_VERTEX)==0); // mandatory - ERR_FAIL_COND( p_array_len<=0 ); - ERR_FAIL_COND( p_index_array_len==0 ); - ERR_FAIL_INDEX( p_primitive, VS::PRIMITIVE_MAX ); + ERR_FAIL_COND((p_format & VS::ARRAY_FORMAT_VERTEX) == 0); // mandatory + ERR_FAIL_COND(p_array_len <= 0); + ERR_FAIL_COND(p_index_array_len == 0); + ERR_FAIL_INDEX(p_primitive, VS::PRIMITIVE_MAX); - Surface *surface = memnew( Surface ); - ERR_FAIL_COND( !surface ); + Surface *surface = memnew(Surface); + ERR_FAIL_COND(!surface); - int total_elem_size=0; + int total_elem_size = 0; - bool use_VBO=true; //glGenBuffersARB!=NULL; // TODO detect if it's in there - if (p_format&VS::ARRAY_FORMAT_WEIGHTS) { + bool use_VBO = true; //glGenBuffersARB!=NULL; // TODO detect if it's in there + if (p_format & VS::ARRAY_FORMAT_WEIGHTS) { - use_VBO=false; + use_VBO = false; } + for (int i = 0; i < VS::ARRAY_MAX; i++) { - for (int i=0;i<VS::ARRAY_MAX;i++) { - + Surface::ArrayData &ad = surface->array[i]; + ad.size = 0; + ad.configured = false; + ad.ofs = 0; + int elem_size = 0; + int elem_count = 0; - Surface::ArrayData&ad=surface->array[i]; - ad.size=0; - ad.configured=false; - ad.ofs=0; - int elem_size=0; - int elem_count=0; - - if (!(p_format&(1<<i))) // no array + if (!(p_format & (1 << i))) // no array continue; - - switch(i) { + switch (i) { case VS::ARRAY_VERTEX: case VS::ARRAY_NORMAL: { - elem_size=3*sizeof(GLfloat); // vertex - elem_count=3; + elem_size = 3 * sizeof(GLfloat); // vertex + elem_count = 3; } break; case VS::ARRAY_TANGENT: { - elem_size=4*sizeof(GLfloat); // vertex - elem_count=4; + elem_size = 4 * sizeof(GLfloat); // vertex + elem_count = 4; } break; case VS::ARRAY_COLOR: { - elem_size=4; /* RGBA */ - elem_count=4; + elem_size = 4; /* RGBA */ + elem_count = 4; } break; case VS::ARRAY_TEX_UV: { - elem_size=2*sizeof(GLfloat); - elem_count=2; + elem_size = 2 * sizeof(GLfloat); + elem_count = 2; } break; case VS::ARRAY_WEIGHTS: case VS::ARRAY_BONES: { - elem_size=VS::ARRAY_WEIGHTS_SIZE*sizeof(GLfloat); - elem_count=VS::ARRAY_WEIGHTS_SIZE; + elem_size = VS::ARRAY_WEIGHTS_SIZE * sizeof(GLfloat); + elem_count = VS::ARRAY_WEIGHTS_SIZE; } break; case VS::ARRAY_INDEX: { - if (p_index_array_len<=0) { + if (p_index_array_len <= 0) { ERR_PRINT("p_index_array_len==NO_INDEX_ARRAY"); break; } /* determine wether using 8 or 16 bits indices */ - if (p_index_array_len>(1<<8)) { + if (p_index_array_len > (1 << 8)) { - elem_size=2; + elem_size = 2; } else { - elem_size=1; + elem_size = 1; } if (use_VBO) { - glGenBuffers(1,&surface->index_id); - ERR_FAIL_COND(surface->index_id==0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,surface->index_id); - glBufferData(GL_ELEMENT_ARRAY_BUFFER,p_index_array_len*elem_size,NULL,GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); //unbind + glGenBuffers(1, &surface->index_id); + ERR_FAIL_COND(surface->index_id == 0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, surface->index_id); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, p_index_array_len * elem_size, NULL, GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //unbind } else { - surface->index_array_local = (uint8_t*)memalloc(p_index_array_len*elem_size); + surface->index_array_local = (uint8_t *)memalloc(p_index_array_len * elem_size); }; - surface->index_array_len=p_index_array_len; // only way it can exist - ad.ofs=0; - ad.size=elem_size; - ad.configured=false; - ad.components=1; + surface->index_array_len = p_index_array_len; // only way it can exist + ad.ofs = 0; + ad.size = elem_size; + ad.configured = false; + ad.components = 1; continue; } break; default: { - ERR_FAIL( ); + ERR_FAIL(); } } - ad.ofs=total_elem_size; - ad.size=elem_size; - ad.components=elem_count; - total_elem_size+=elem_size; - ad.configured=false; + ad.ofs = total_elem_size; + ad.size = elem_size; + ad.components = elem_count; + total_elem_size += elem_size; + ad.configured = false; } - surface->stride=total_elem_size; - surface->array_len=p_array_len; - surface->format=p_format; - surface->primitive=p_primitive; - + surface->stride = total_elem_size; + surface->array_len = p_array_len; + surface->format = p_format; + surface->primitive = p_primitive; /* bind the bigass buffers */ if (use_VBO) { - glGenBuffers(1,&surface->vertex_id); - ERR_FAIL_COND(surface->vertex_id==0); - glBindBuffer(GL_ARRAY_BUFFER,surface->vertex_id); - glBufferData(GL_ARRAY_BUFFER,surface->array_len*surface->stride,NULL,GL_STATIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER,0); //unbind + glGenBuffers(1, &surface->vertex_id); + ERR_FAIL_COND(surface->vertex_id == 0); + glBindBuffer(GL_ARRAY_BUFFER, surface->vertex_id); + glBufferData(GL_ARRAY_BUFFER, surface->array_len * surface->stride, NULL, GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, 0); //unbind } else { - surface->array_local = (uint8_t*)memalloc(surface->array_len*surface->stride); + surface->array_local = (uint8_t *)memalloc(surface->array_len * surface->stride); }; mesh->surfaces.push_back(surface); } -Error RasterizerIPhone::mesh_surface_set_array(RID p_mesh, int p_surface,VS::ArrayType p_type,const Variant& p_array) { +Error RasterizerIPhone::mesh_surface_set_array(RID p_mesh, int p_surface, VS::ArrayType p_type, const Variant &p_array) { - ERR_FAIL_INDEX_V(p_type, VS::ARRAY_MAX, ERR_INVALID_PARAMETER ); + ERR_FAIL_INDEX_V(p_type, VS::ARRAY_MAX, ERR_INVALID_PARAMETER); - Mesh *mesh = mesh_owner.get( p_mesh ); - ERR_FAIL_COND_V(!mesh,ERR_INVALID_PARAMETER); - ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), ERR_INVALID_PARAMETER ); + Mesh *mesh = mesh_owner.get(p_mesh); + ERR_FAIL_COND_V(!mesh, ERR_INVALID_PARAMETER); + ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), ERR_INVALID_PARAMETER); Surface *surface = mesh->surfaces[p_surface]; - ERR_FAIL_COND_V( !surface, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(!surface, ERR_INVALID_PARAMETER); - ERR_FAIL_COND_V( surface->array[p_type].size==0, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(surface->array[p_type].size == 0, ERR_INVALID_PARAMETER); - Surface::ArrayData &a=surface->array[p_type]; + Surface::ArrayData &a = surface->array[p_type]; - switch(p_type) { + switch (p_type) { case VS::ARRAY_INDEX: { - ERR_FAIL_COND_V( surface->index_array_len<=0, ERR_INVALID_DATA ); - ERR_FAIL_COND_V( p_array.get_type() != Variant::INT_ARRAY, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(surface->index_array_len <= 0, ERR_INVALID_DATA); + ERR_FAIL_COND_V(p_array.get_type() != Variant::INT_ARRAY, ERR_INVALID_PARAMETER); PoolVector<int> indices = p_array; - ERR_FAIL_COND_V( indices.size() == 0, ERR_INVALID_PARAMETER ); - ERR_FAIL_COND_V( indices.size() != surface->index_array_len, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(indices.size() == 0, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V(indices.size() != surface->index_array_len, ERR_INVALID_PARAMETER); /* determine wether using 16 or 32 bits indices */ if (surface->index_array_local == 0) { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,surface->index_id); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, surface->index_id); }; PoolVector<int>::Read read = indices.read(); - const int *src=read.ptr(); + const int *src = read.ptr(); - for (int i=0;i<surface->index_array_len;i++) { + for (int i = 0; i < surface->index_array_len; i++) { if (surface->index_array_local) { - if (a.size<=(1<<8)) { - uint8_t v=src[i]; + if (a.size <= (1 << 8)) { + uint8_t v = src[i]; - copymem(&surface->array_local[i*a.size], &v, a.size); + copymem(&surface->array_local[i * a.size], &v, a.size); } else { - uint16_t v=src[i]; + uint16_t v = src[i]; - copymem(&surface->array_local[i*a.size], &v, a.size); + copymem(&surface->array_local[i * a.size], &v, a.size); } } else { - if (a.size<=(1<<8)) { - uint8_t v=src[i]; + if (a.size <= (1 << 8)) { + uint8_t v = src[i]; - glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, i*a.size, a.size, &v ); + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, i * a.size, a.size, &v); } else { - uint16_t v=src[i]; - - glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, i*a.size, a.size, &v ); + uint16_t v = src[i]; + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, i * a.size, a.size, &v); } }; } if (surface->index_array_local == 0) { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); }; - a.configured=true; + a.configured = true; return OK; } break; case VS::ARRAY_VERTEX: case VS::ARRAY_NORMAL: { - ERR_FAIL_COND_V( p_array.get_type() != Variant::VECTOR3_ARRAY, ERR_INVALID_PARAMETER ); - + ERR_FAIL_COND_V(p_array.get_type() != Variant::VECTOR3_ARRAY, ERR_INVALID_PARAMETER); PoolVector<Vector3> array = p_array; - ERR_FAIL_COND_V( array.size() != surface->array_len, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(array.size() != surface->array_len, ERR_INVALID_PARAMETER); if (surface->array_local == 0) { - glBindBuffer(GL_ARRAY_BUFFER,surface->vertex_id); + glBindBuffer(GL_ARRAY_BUFFER, surface->vertex_id); }; PoolVector<Vector3>::Read read = array.read(); - const Vector3* src=read.ptr(); + const Vector3 *src = read.ptr(); // setting vertices means regenerating the AABB - if (p_type==VS::ARRAY_VERTEX) - surface->aabb=AABB(); - - for (int i=0;i<surface->array_len;i++) { + if (p_type == VS::ARRAY_VERTEX) + surface->aabb = AABB(); + for (int i = 0; i < surface->array_len; i++) { - GLfloat vector[3]={ src[i].x, src[i].y, src[i].z }; + GLfloat vector[3] = { src[i].x, src[i].y, src[i].z }; if (surface->array_local == 0) { - glBufferSubData( GL_ARRAY_BUFFER, a.ofs+i*surface->stride, a.size , vector ); + glBufferSubData(GL_ARRAY_BUFFER, a.ofs + i * surface->stride, a.size, vector); } else { - copymem(&surface->array_local[a.ofs+i*surface->stride], vector, a.size); + copymem(&surface->array_local[a.ofs + i * surface->stride], vector, a.size); } - if (p_type==VS::ARRAY_VERTEX) { + if (p_type == VS::ARRAY_VERTEX) { - if (i==0) { + if (i == 0) { - surface->aabb=AABB(src[i],Vector3()); + surface->aabb = AABB(src[i], Vector3()); } else { - surface->aabb.expand_to( src[i] ); + surface->aabb.expand_to(src[i]); } } } if (surface->array_local == 0) { - glBindBuffer(GL_ARRAY_BUFFER,0); + glBindBuffer(GL_ARRAY_BUFFER, 0); }; } break; case VS::ARRAY_TANGENT: { - ERR_FAIL_COND_V( p_array.get_type() != Variant::REAL_ARRAY, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(p_array.get_type() != Variant::REAL_ARRAY, ERR_INVALID_PARAMETER); PoolVector<real_t> array = p_array; - ERR_FAIL_COND_V( array.size() != surface->array_len*4, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(array.size() != surface->array_len * 4, ERR_INVALID_PARAMETER); if (surface->array_local == 0) { - glBindBuffer(GL_ARRAY_BUFFER,surface->vertex_id); + glBindBuffer(GL_ARRAY_BUFFER, surface->vertex_id); }; - PoolVector<real_t>::Read read = array.read(); - const real_t* src = read.ptr(); + const real_t *src = read.ptr(); - for (int i=0;i<surface->array_len;i++) { + for (int i = 0; i < surface->array_len; i++) { - GLfloat xyzw[4]={ - src[i*4+0], - src[i*4+1], - src[i*4+2], - src[i*4+3] + GLfloat xyzw[4] = { + src[i * 4 + 0], + src[i * 4 + 1], + src[i * 4 + 2], + src[i * 4 + 3] }; if (surface->array_local == 0) { - glBufferSubData( GL_ARRAY_BUFFER, a.ofs+i*surface->stride, a.size , xyzw ); + glBufferSubData(GL_ARRAY_BUFFER, a.ofs + i * surface->stride, a.size, xyzw); } else { - copymem(&surface->array_local[a.ofs+i*surface->stride], xyzw, a.size); + copymem(&surface->array_local[a.ofs + i * surface->stride], xyzw, a.size); }; - } if (surface->array_local == 0) { - glBindBuffer(GL_ARRAY_BUFFER,0); + glBindBuffer(GL_ARRAY_BUFFER, 0); }; } break; case VS::ARRAY_COLOR: { - ERR_FAIL_COND_V( p_array.get_type() != Variant::COLOR_ARRAY, ERR_INVALID_PARAMETER ); - + ERR_FAIL_COND_V(p_array.get_type() != Variant::COLOR_ARRAY, ERR_INVALID_PARAMETER); PoolVector<Color> array = p_array; - ERR_FAIL_COND_V( array.size() != surface->array_len, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(array.size() != surface->array_len, ERR_INVALID_PARAMETER); if (surface->array_local == 0) - glBindBuffer(GL_ARRAY_BUFFER,surface->vertex_id); - + glBindBuffer(GL_ARRAY_BUFFER, surface->vertex_id); PoolVector<Color>::Read read = array.read(); - const Color* src = read.ptr(); - surface->has_alpha_cache=false; + const Color *src = read.ptr(); + surface->has_alpha_cache = false; - for (int i=0;i<surface->array_len;i++) { + for (int i = 0; i < surface->array_len; i++) { - if (src[i].a<0.98) // tolerate alpha a bit, for crappy exporters - surface->has_alpha_cache=true; - uint8_t colors[4]={ src[i].r * 255.0 , src[i].g * 255.0, src[i].b * 255.0, src[i].a * 255.0 }; + if (src[i].a < 0.98) // tolerate alpha a bit, for crappy exporters + surface->has_alpha_cache = true; + uint8_t colors[4] = { src[i].r * 255.0, src[i].g * 255.0, src[i].b * 255.0, src[i].a * 255.0 }; // I'm not sure if this is correct, endianness-wise, i should re-check the GL spec if (surface->array_local == 0) - glBufferSubData( GL_ARRAY_BUFFER, a.ofs+i*surface->stride, a.size , colors ); + glBufferSubData(GL_ARRAY_BUFFER, a.ofs + i * surface->stride, a.size, colors); else - copymem(&surface->array_local[a.ofs+i*surface->stride], colors, a.size); - + copymem(&surface->array_local[a.ofs + i * surface->stride], colors, a.size); } if (surface->array_local == 0) - glBindBuffer(GL_ARRAY_BUFFER,0); - + glBindBuffer(GL_ARRAY_BUFFER, 0); } break; case VS::ARRAY_TEX_UV: { - ERR_FAIL_COND_V( p_array.get_type() != Variant::VECTOR3_ARRAY, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(p_array.get_type() != Variant::VECTOR3_ARRAY, ERR_INVALID_PARAMETER); PoolVector<Vector3> array = p_array; - ERR_FAIL_COND_V( array.size() != surface->array_len , ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V(array.size() != surface->array_len, ERR_INVALID_PARAMETER); if (surface->array_local == 0) - glBindBuffer(GL_ARRAY_BUFFER,surface->vertex_id); + glBindBuffer(GL_ARRAY_BUFFER, surface->vertex_id); PoolVector<Vector3>::Read read = array.read(); - const Vector3 * src=read.ptr(); + const Vector3 *src = read.ptr(); - for (int i=0;i<surface->array_len;i++) { + for (int i = 0; i < surface->array_len; i++) { - GLfloat uv[2]={ src[i].x , src[i].y }; + GLfloat uv[2] = { src[i].x, src[i].y }; if (surface->array_local == 0) - glBufferSubData( GL_ARRAY_BUFFER, a.ofs+i*surface->stride, a.size , uv ); + glBufferSubData(GL_ARRAY_BUFFER, a.ofs + i * surface->stride, a.size, uv); else - copymem(&surface->array_local[a.ofs+i*surface->stride], uv, a.size); - + copymem(&surface->array_local[a.ofs + i * surface->stride], uv, a.size); } if (surface->array_local == 0) - glBindBuffer(GL_ARRAY_BUFFER,0); + glBindBuffer(GL_ARRAY_BUFFER, 0); } break; case VS::ARRAY_BONES: case VS::ARRAY_WEIGHTS: { - - ERR_FAIL_COND_V( p_array.get_type() != Variant::REAL_ARRAY, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(p_array.get_type() != Variant::REAL_ARRAY, ERR_INVALID_PARAMETER); PoolVector<real_t> array = p_array; - ERR_FAIL_COND_V( array.size() != surface->array_len*VS::ARRAY_WEIGHTS_SIZE, ERR_INVALID_PARAMETER ); + ERR_FAIL_COND_V(array.size() != surface->array_len * VS::ARRAY_WEIGHTS_SIZE, ERR_INVALID_PARAMETER); if (surface->array_local == 0) - glBindBuffer(GL_ARRAY_BUFFER,surface->vertex_id); + glBindBuffer(GL_ARRAY_BUFFER, surface->vertex_id); PoolVector<real_t>::Read read = array.read(); - const real_t * src = read.ptr(); + const real_t *src = read.ptr(); - for (int i=0;i<surface->array_len;i++) { + for (int i = 0; i < surface->array_len; i++) { GLfloat data[VS::ARRAY_WEIGHTS_SIZE]; - for (int j=0;j<VS::ARRAY_WEIGHTS_SIZE;j++) - data[j]=src[i*VS::ARRAY_WEIGHTS_SIZE+j]; + for (int j = 0; j < VS::ARRAY_WEIGHTS_SIZE; j++) + data[j] = src[i * VS::ARRAY_WEIGHTS_SIZE + j]; if (surface->array_local == 0) - glBufferSubData( GL_ARRAY_BUFFER, a.ofs+i*surface->stride, a.size , data ); + glBufferSubData(GL_ARRAY_BUFFER, a.ofs + i * surface->stride, a.size, data); else - copymem(&surface->array_local[a.ofs+i*surface->stride], data, a.size); - - + copymem(&surface->array_local[a.ofs + i * surface->stride], data, a.size); } if (surface->array_local == 0) - glBindBuffer(GL_ARRAY_BUFFER,0); + glBindBuffer(GL_ARRAY_BUFFER, 0); } break; - default: { ERR_FAIL_V(ERR_INVALID_PARAMETER);} + default: { ERR_FAIL_V(ERR_INVALID_PARAMETER); } } - a.configured=true; + a.configured = true; return OK; } -Variant RasterizerIPhone::mesh_surface_get_array(RID p_mesh, int p_surface,VS::ArrayType p_type) const { +Variant RasterizerIPhone::mesh_surface_get_array(RID p_mesh, int p_surface, VS::ArrayType p_type) const { return Variant(); } -void RasterizerIPhone::mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material,bool p_owned) { +void RasterizerIPhone::mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material, bool p_owned) { - Mesh *mesh = mesh_owner.get( p_mesh ); + Mesh *mesh = mesh_owner.get(p_mesh); ERR_FAIL_COND(!mesh); - ERR_FAIL_INDEX(p_surface, mesh->surfaces.size() ); + ERR_FAIL_INDEX(p_surface, mesh->surfaces.size()); Surface *surface = mesh->surfaces[p_surface]; - ERR_FAIL_COND( !surface); + ERR_FAIL_COND(!surface); if (surface->material_owned && surface->material.is_valid()) free(surface->material); - surface->material_owned=p_owned; + surface->material_owned = p_owned; - surface->material=p_material; + surface->material = p_material; } RID RasterizerIPhone::mesh_surface_get_material(RID p_mesh, int p_surface) const { - Mesh *mesh = mesh_owner.get( p_mesh ); - ERR_FAIL_COND_V(!mesh,RID()); - ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), RID() ); + Mesh *mesh = mesh_owner.get(p_mesh); + ERR_FAIL_COND_V(!mesh, RID()); + ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), RID()); Surface *surface = mesh->surfaces[p_surface]; - ERR_FAIL_COND_V( !surface, RID() ); + ERR_FAIL_COND_V(!surface, RID()); return surface->material; } int RasterizerIPhone::mesh_surface_get_array_len(RID p_mesh, int p_surface) const { - Mesh *mesh = mesh_owner.get( p_mesh ); - ERR_FAIL_COND_V(!mesh,-1); - ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), -1 ); + Mesh *mesh = mesh_owner.get(p_mesh); + ERR_FAIL_COND_V(!mesh, -1); + ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), -1); Surface *surface = mesh->surfaces[p_surface]; - ERR_FAIL_COND_V( !surface, -1 ); + ERR_FAIL_COND_V(!surface, -1); return surface->array_len; } int RasterizerIPhone::mesh_surface_get_array_index_len(RID p_mesh, int p_surface) const { - Mesh *mesh = mesh_owner.get( p_mesh ); - ERR_FAIL_COND_V(!mesh,-1); - ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), -1 ); - Surface *surface = mesh->surfaces[p_surface]; - ERR_FAIL_COND_V( !surface, -1 ); + Mesh *mesh = mesh_owner.get(p_mesh); + ERR_FAIL_COND_V(!mesh, -1); + ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), -1); + Surface *surface = mesh->surfaces[p_surface]; + ERR_FAIL_COND_V(!surface, -1); - return surface->index_array_len; + return surface->index_array_len; } uint32_t RasterizerIPhone::mesh_surface_get_format(RID p_mesh, int p_surface) const { - Mesh *mesh = mesh_owner.get( p_mesh ); - ERR_FAIL_COND_V(!mesh,0); - ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), 0 ); + Mesh *mesh = mesh_owner.get(p_mesh); + ERR_FAIL_COND_V(!mesh, 0); + ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), 0); Surface *surface = mesh->surfaces[p_surface]; - ERR_FAIL_COND_V( !surface, 0 ); + ERR_FAIL_COND_V(!surface, 0); return surface->format; } VS::PrimitiveType RasterizerIPhone::mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const { - Mesh *mesh = mesh_owner.get( p_mesh ); - ERR_FAIL_COND_V(!mesh,VS::PRIMITIVE_POINTS); - ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), VS::PRIMITIVE_POINTS ); + Mesh *mesh = mesh_owner.get(p_mesh); + ERR_FAIL_COND_V(!mesh, VS::PRIMITIVE_POINTS); + ERR_FAIL_INDEX_V(p_surface, mesh->surfaces.size(), VS::PRIMITIVE_POINTS); Surface *surface = mesh->surfaces[p_surface]; - ERR_FAIL_COND_V( !surface, VS::PRIMITIVE_POINTS ); + ERR_FAIL_COND_V(!surface, VS::PRIMITIVE_POINTS); return surface->primitive; } -void RasterizerIPhone::mesh_erase_surface(RID p_mesh,int p_index) { +void RasterizerIPhone::mesh_erase_surface(RID p_mesh, int p_index) { - Mesh *mesh = mesh_owner.get( p_mesh ); + Mesh *mesh = mesh_owner.get(p_mesh); ERR_FAIL_COND(!mesh); - ERR_FAIL_INDEX(p_index, mesh->surfaces.size() ); + ERR_FAIL_INDEX(p_index, mesh->surfaces.size()); Surface *surface = mesh->surfaces[p_index]; - ERR_FAIL_COND( !surface); + ERR_FAIL_COND(!surface); - memdelete( mesh->surfaces[p_index] ); + memdelete(mesh->surfaces[p_index]); mesh->surfaces.remove(p_index); - } int RasterizerIPhone::mesh_get_surface_count(RID p_mesh) const { - Mesh *mesh = mesh_owner.get( p_mesh ); - ERR_FAIL_COND_V(!mesh,-1); + Mesh *mesh = mesh_owner.get(p_mesh); + ERR_FAIL_COND_V(!mesh, -1); return mesh->surfaces.size(); } AABB RasterizerIPhone::mesh_get_aabb(RID p_mesh) const { - Mesh *mesh = mesh_owner.get( p_mesh ); - ERR_FAIL_COND_V(!mesh,AABB()); + Mesh *mesh = mesh_owner.get(p_mesh); + ERR_FAIL_COND_V(!mesh, AABB()); AABB aabb; - for (int i=0;i<mesh->surfaces.size();i++) { + for (int i = 0; i < mesh->surfaces.size(); i++) { - if (i==0) - aabb=mesh->surfaces[i]->aabb; + if (i == 0) + aabb = mesh->surfaces[i]->aabb; else aabb.merge_with(mesh->surfaces[i]->aabb); } @@ -1128,30 +1064,20 @@ RID RasterizerIPhone::multimesh_create() { return RID(); } -void RasterizerIPhone::multimesh_set_instance_count(RID p_multimesh,int p_count) { - - +void RasterizerIPhone::multimesh_set_instance_count(RID p_multimesh, int p_count) { } int RasterizerIPhone::multimesh_get_instance_count(RID p_multimesh) const { return 0; } -void RasterizerIPhone::multimesh_set_mesh(RID p_multimesh,RID p_mesh) { - - +void RasterizerIPhone::multimesh_set_mesh(RID p_multimesh, RID p_mesh) { } -void RasterizerIPhone::multimesh_set_aabb(RID p_multimesh,const AABB& p_aabb) { - - +void RasterizerIPhone::multimesh_set_aabb(RID p_multimesh, const AABB &p_aabb) { } -void RasterizerIPhone::multimesh_instance_set_transform(RID p_multimesh,int p_index,const Transform& p_transform) { - - +void RasterizerIPhone::multimesh_instance_set_transform(RID p_multimesh, int p_index, const Transform &p_transform) { } -void RasterizerIPhone::multimesh_instance_set_color(RID p_multimesh,int p_index,const Color& p_color) { - - +void RasterizerIPhone::multimesh_instance_set_color(RID p_multimesh, int p_index, const Color &p_color) { } RID RasterizerIPhone::multimesh_get_mesh(RID p_multimesh) const { @@ -1163,11 +1089,11 @@ AABB RasterizerIPhone::multimesh_get_aabb(RID p_multimesh) const { return AABB(); } -Transform RasterizerIPhone::multimesh_instance_get_transform(RID p_multimesh,int p_index) const { +Transform RasterizerIPhone::multimesh_instance_get_transform(RID p_multimesh, int p_index) const { return Transform(); } -Color RasterizerIPhone::multimesh_instance_get_color(RID p_multimesh,int p_index) const { +Color RasterizerIPhone::multimesh_instance_get_color(RID p_multimesh, int p_index) const { return Color(); } @@ -1178,17 +1104,11 @@ RID RasterizerIPhone::poly_create() { return RID(); } -void RasterizerIPhone::poly_set_material(RID p_poly, RID p_material,bool p_owned) { - - +void RasterizerIPhone::poly_set_material(RID p_poly, RID p_material, bool p_owned) { } -void RasterizerIPhone::poly_add_primitive(RID p_poly, const Vector<Vector3>& p_points,const Vector<Vector3>& p_normals,const Vector<Color>& p_colors,const Vector<Vector3>& p_uvs) { - - +void RasterizerIPhone::poly_add_primitive(RID p_poly, const Vector<Vector3> &p_points, const Vector<Vector3> &p_normals, const Vector<Color> &p_colors, const Vector<Vector3> &p_uvs) { } void RasterizerIPhone::poly_clear(RID p_poly) { - - } AABB RasterizerIPhone::poly_get_aabb(RID p_poly) const { @@ -1196,7 +1116,6 @@ AABB RasterizerIPhone::poly_get_aabb(RID p_poly) const { return AABB(); } - /* PARTICLES API */ RID RasterizerIPhone::particles_create() { @@ -1205,8 +1124,6 @@ RID RasterizerIPhone::particles_create() { } void RasterizerIPhone::particles_set_amount(RID p_particles, int p_amount) { - - } int RasterizerIPhone::particles_get_amount(RID p_particles) const { @@ -1214,8 +1131,6 @@ int RasterizerIPhone::particles_get_amount(RID p_particles) const { } void RasterizerIPhone::particles_set_emitting(RID p_particles, bool p_emitting) { - - } bool RasterizerIPhone::particles_is_emitting(RID p_particles) const { @@ -1223,45 +1138,35 @@ bool RasterizerIPhone::particles_is_emitting(RID p_particles) const { return false; } -void RasterizerIPhone::particles_set_visibility_aabb(RID p_particles, const AABB& p_visibility) { - - +void RasterizerIPhone::particles_set_visibility_aabb(RID p_particles, const AABB &p_visibility) { } AABB RasterizerIPhone::particles_get_visibility_aabb(RID p_particles) const { return AABB(); } -void RasterizerIPhone::particles_set_emission_half_extents(RID p_particles, const Vector3& p_half_extents) { - - +void RasterizerIPhone::particles_set_emission_half_extents(RID p_particles, const Vector3 &p_half_extents) { } Vector3 RasterizerIPhone::particles_get_emission_half_extents(RID p_particles) const { return Vector3(); } -void RasterizerIPhone::particles_set_gravity_normal(RID p_particles, const Vector3& p_normal) { - - +void RasterizerIPhone::particles_set_gravity_normal(RID p_particles, const Vector3 &p_normal) { } Vector3 RasterizerIPhone::particles_get_gravity_normal(RID p_particles) const { return Vector3(); } -void RasterizerIPhone::particles_set_variable(RID p_particles, VS::ParticleVariable p_variable,float p_value) { - - +void RasterizerIPhone::particles_set_variable(RID p_particles, VS::ParticleVariable p_variable, float p_value) { } float RasterizerIPhone::particles_get_variable(RID p_particles, VS::ParticleVariable p_variable) const { return 0; } -void RasterizerIPhone::particles_set_randomness(RID p_particles, VS::ParticleVariable p_variable,float p_randomness) { - - +void RasterizerIPhone::particles_set_randomness(RID p_particles, VS::ParticleVariable p_variable, float p_randomness) { } float RasterizerIPhone::particles_get_randomness(RID p_particles, VS::ParticleVariable p_variable) const { @@ -1269,8 +1174,6 @@ float RasterizerIPhone::particles_get_randomness(RID p_particles, VS::ParticleVa } void RasterizerIPhone::particles_set_color_phase_pos(RID p_particles, int p_phase, float p_pos) { - - } float RasterizerIPhone::particles_get_color_phase_pos(RID p_particles, int p_phase) const { @@ -1278,17 +1181,13 @@ float RasterizerIPhone::particles_get_color_phase_pos(RID p_particles, int p_pha } void RasterizerIPhone::particles_set_color_phases(RID p_particles, int p_phases) { - - } int RasterizerIPhone::particles_get_color_phases(RID p_particles) const { return 0; } -void RasterizerIPhone::particles_set_color_phase_color(RID p_particles, int p_phase, const Color& p_color) { - - +void RasterizerIPhone::particles_set_color_phase_color(RID p_particles, int p_phase, const Color &p_color) { } Color RasterizerIPhone::particles_get_color_phase_color(RID p_particles, int p_phase) const { @@ -1296,35 +1195,27 @@ Color RasterizerIPhone::particles_get_color_phase_color(RID p_particles, int p_p } void RasterizerIPhone::particles_set_attractors(RID p_particles, int p_attractors) { - - } int RasterizerIPhone::particles_get_attractors(RID p_particles) const { return 0; } -void RasterizerIPhone::particles_set_attractor_pos(RID p_particles, int p_attractor, const Vector3& p_pos) { - - +void RasterizerIPhone::particles_set_attractor_pos(RID p_particles, int p_attractor, const Vector3 &p_pos) { } -Vector3 RasterizerIPhone::particles_get_attractor_pos(RID p_particles,int p_attractor) const { +Vector3 RasterizerIPhone::particles_get_attractor_pos(RID p_particles, int p_attractor) const { return Vector3(); } void RasterizerIPhone::particles_set_attractor_strength(RID p_particles, int p_attractor, float p_force) { - - } -float RasterizerIPhone::particles_get_attractor_strength(RID p_particles,int p_attractor) const { +float RasterizerIPhone::particles_get_attractor_strength(RID p_particles, int p_attractor) const { return 0; } -void RasterizerIPhone::particles_set_material(RID p_particles, RID p_material,bool p_owned) { - - +void RasterizerIPhone::particles_set_material(RID p_particles, RID p_material, bool p_owned) { } RID RasterizerIPhone::particles_get_material(RID p_particles) const { @@ -1344,30 +1235,22 @@ RID RasterizerIPhone::beam_create() { } void RasterizerIPhone::beam_set_point_count(RID p_beam, int p_count) { - - } int RasterizerIPhone::beam_get_point_count(RID p_beam) const { return 0; } void RasterizerIPhone::beam_clear(RID p_beam) { - - } -void RasterizerIPhone::beam_set_point(RID p_beam,int p_point,Vector3& p_pos) { - - +void RasterizerIPhone::beam_set_point(RID p_beam, int p_point, Vector3 &p_pos) { } -Vector3 RasterizerIPhone::beam_get_point(RID p_beam,int p_point) const { +Vector3 RasterizerIPhone::beam_get_point(RID p_beam, int p_point) const { return Vector3(); } -void RasterizerIPhone::beam_set_primitive(RID p_beam,VS::BeamPrimitive p_primitive) { - - +void RasterizerIPhone::beam_set_primitive(RID p_beam, VS::BeamPrimitive p_primitive) { } VS::BeamPrimitive RasterizerIPhone::beam_get_primitive(RID p_beam) const { @@ -1376,8 +1259,6 @@ VS::BeamPrimitive RasterizerIPhone::beam_get_primitive(RID p_beam) const { } void RasterizerIPhone::beam_set_material(RID p_beam, RID p_material) { - - } RID RasterizerIPhone::beam_get_material(RID p_beam) const { @@ -1392,154 +1273,151 @@ AABB RasterizerIPhone::beam_get_aabb(RID p_particles) const { RID RasterizerIPhone::skeleton_create() { - Skeleton *skeleton = memnew( Skeleton ); - ERR_FAIL_COND_V(!skeleton,RID()); - return skeleton_owner.make_rid( skeleton ); + Skeleton *skeleton = memnew(Skeleton); + ERR_FAIL_COND_V(!skeleton, RID()); + return skeleton_owner.make_rid(skeleton); } -void RasterizerIPhone::skeleton_resize(RID p_skeleton,int p_bones) { +void RasterizerIPhone::skeleton_resize(RID p_skeleton, int p_bones) { - Skeleton *skeleton = skeleton_owner.get( p_skeleton ); + Skeleton *skeleton = skeleton_owner.get(p_skeleton); ERR_FAIL_COND(!skeleton); if (p_bones == skeleton->bones.size()) { return; }; - ERR_FAIL_COND( p_bones<0 || p_bones>256); + ERR_FAIL_COND(p_bones < 0 || p_bones > 256); skeleton->bones.resize(p_bones); - } int RasterizerIPhone::skeleton_get_bone_count(RID p_skeleton) const { - Skeleton *skeleton = skeleton_owner.get( p_skeleton ); + Skeleton *skeleton = skeleton_owner.get(p_skeleton); ERR_FAIL_COND_V(!skeleton, -1); return skeleton->bones.size(); } -void RasterizerIPhone::skeleton_bone_set_transform(RID p_skeleton,int p_bone, const Transform& p_transform) { +void RasterizerIPhone::skeleton_bone_set_transform(RID p_skeleton, int p_bone, const Transform &p_transform) { - Skeleton *skeleton = skeleton_owner.get( p_skeleton ); + Skeleton *skeleton = skeleton_owner.get(p_skeleton); ERR_FAIL_COND(!skeleton); - ERR_FAIL_INDEX( p_bone, skeleton->bones.size() ); + ERR_FAIL_INDEX(p_bone, skeleton->bones.size()); skeleton->bones[p_bone] = p_transform; } -Transform RasterizerIPhone::skeleton_bone_get_transform(RID p_skeleton,int p_bone) { +Transform RasterizerIPhone::skeleton_bone_get_transform(RID p_skeleton, int p_bone) { - Skeleton *skeleton = skeleton_owner.get( p_skeleton ); + Skeleton *skeleton = skeleton_owner.get(p_skeleton); ERR_FAIL_COND_V(!skeleton, Transform()); - ERR_FAIL_INDEX_V( p_bone, skeleton->bones.size(), Transform() ); + ERR_FAIL_INDEX_V(p_bone, skeleton->bones.size(), Transform()); // something return skeleton->bones[p_bone]; } - /* LIGHT API */ RID RasterizerIPhone::light_create(VS::LightType p_type) { - Light *light = memnew( Light ); - light->type=p_type; + Light *light = memnew(Light); + light->type = p_type; return light_owner.make_rid(light); } VS::LightType RasterizerIPhone::light_get_type(RID p_light) const { Light *light = light_owner.get(p_light); - ERR_FAIL_COND_V(!light,VS::LIGHT_OMNI); + ERR_FAIL_COND_V(!light, VS::LIGHT_OMNI); return light->type; } -void RasterizerIPhone::light_set_color(RID p_light,VS::LightColor p_type, const Color& p_color) { +void RasterizerIPhone::light_set_color(RID p_light, VS::LightColor p_type, const Color &p_color) { Light *light = light_owner.get(p_light); ERR_FAIL_COND(!light); - ERR_FAIL_INDEX( p_type, 3 ); - light->colors[p_type]=p_color; + ERR_FAIL_INDEX(p_type, 3); + light->colors[p_type] = p_color; } -Color RasterizerIPhone::light_get_color(RID p_light,VS::LightColor p_type) const { +Color RasterizerIPhone::light_get_color(RID p_light, VS::LightColor p_type) const { Light *light = light_owner.get(p_light); ERR_FAIL_COND_V(!light, Color()); - ERR_FAIL_INDEX_V( p_type, 3, Color() ); + ERR_FAIL_INDEX_V(p_type, 3, Color()); return light->colors[p_type]; } -void RasterizerIPhone::light_set_shadow(RID p_light,bool p_enabled) { +void RasterizerIPhone::light_set_shadow(RID p_light, bool p_enabled) { Light *light = light_owner.get(p_light); ERR_FAIL_COND(!light); - light->shadow_enabled=p_enabled; + light->shadow_enabled = p_enabled; } bool RasterizerIPhone::light_has_shadow(RID p_light) const { Light *light = light_owner.get(p_light); - ERR_FAIL_COND_V(!light,false); + ERR_FAIL_COND_V(!light, false); return light->shadow_enabled; } -void RasterizerIPhone::light_set_volumetric(RID p_light,bool p_enabled) { +void RasterizerIPhone::light_set_volumetric(RID p_light, bool p_enabled) { Light *light = light_owner.get(p_light); ERR_FAIL_COND(!light); - light->volumetric_enabled=p_enabled; - + light->volumetric_enabled = p_enabled; } bool RasterizerIPhone::light_is_volumetric(RID p_light) const { Light *light = light_owner.get(p_light); - ERR_FAIL_COND_V(!light,false); + ERR_FAIL_COND_V(!light, false); return light->volumetric_enabled; } -void RasterizerIPhone::light_set_projector(RID p_light,RID p_texture) { +void RasterizerIPhone::light_set_projector(RID p_light, RID p_texture) { Light *light = light_owner.get(p_light); ERR_FAIL_COND(!light); - light->projector=p_texture; + light->projector = p_texture; } RID RasterizerIPhone::light_get_projector(RID p_light) const { Light *light = light_owner.get(p_light); - ERR_FAIL_COND_V(!light,RID()); + ERR_FAIL_COND_V(!light, RID()); return light->projector; } void RasterizerIPhone::light_set_var(RID p_light, VS::LightParam p_var, float p_value) { - Light * light = light_owner.get( p_light ); + Light *light = light_owner.get(p_light); ERR_FAIL_COND(!light); - ERR_FAIL_INDEX( p_var, VS::LIGHT_PARAM_MAX ); + ERR_FAIL_INDEX(p_var, VS::LIGHT_PARAM_MAX); - light->vars[p_var]=p_value; + light->vars[p_var] = p_value; } float RasterizerIPhone::light_get_var(RID p_light, VS::LightParam p_var) const { - Light * light = light_owner.get( p_light ); - ERR_FAIL_COND_V(!light,0); + Light *light = light_owner.get(p_light); + ERR_FAIL_COND_V(!light, 0); - ERR_FAIL_INDEX_V( p_var, VS::LIGHT_PARAM_MAX,0 ); + ERR_FAIL_INDEX_V(p_var, VS::LIGHT_PARAM_MAX, 0); return light->vars[p_var]; } AABB RasterizerIPhone::light_get_aabb(RID p_light) const { - Light *light = light_owner.get( p_light ); - ERR_FAIL_COND_V(!light,AABB()); + Light *light = light_owner.get(p_light); + ERR_FAIL_COND_V(!light, AABB()); - switch( light->type ) { + switch (light->type) { case VS::LIGHT_SPOT: { - float len=light->vars[VS::LIGHT_PARAM_RADIUS]; - float size=Math::tan(Math::deg2rad(light->vars[VS::LIGHT_PARAM_SPOT_ANGLE]))*len; - return AABB( Vector3( -size,-size,-len ), Vector3( size*2, size*2, len ) ); + float len = light->vars[VS::LIGHT_PARAM_RADIUS]; + float size = Math::tan(Math::deg2rad(light->vars[VS::LIGHT_PARAM_SPOT_ANGLE])) * len; + return AABB(Vector3(-size, -size, -len), Vector3(size * 2, size * 2, len)); } break; case VS::LIGHT_OMNI: { float r = light->vars[VS::LIGHT_PARAM_RADIUS]; - return AABB( -Vector3(r,r,r), Vector3(r,r,r)*2 ); + return AABB(-Vector3(r, r, r), Vector3(r, r, r) * 2); } break; case VS::LIGHT_DIRECTIONAL: { @@ -1548,37 +1426,34 @@ AABB RasterizerIPhone::light_get_aabb(RID p_light) const { default: {} } - ERR_FAIL_V( AABB() ); + ERR_FAIL_V(AABB()); } - RID RasterizerIPhone::light_instance_create(RID p_light) { - Light *light = light_owner.get( p_light ); + Light *light = light_owner.get(p_light); ERR_FAIL_COND_V(!light, RID()); - LightInstance *light_instance = memnew( LightInstance ); + LightInstance *light_instance = memnew(LightInstance); - light_instance->light=p_light; - light_instance->base=light; - light_instance->last_pass=0; + light_instance->light = p_light; + light_instance->base = light; + light_instance->last_pass = 0; - return light_instance_owner.make_rid( light_instance ); + return light_instance_owner.make_rid(light_instance); } -void RasterizerIPhone::light_instance_set_transform(RID p_light_instance,const Transform& p_transform) { +void RasterizerIPhone::light_instance_set_transform(RID p_light_instance, const Transform &p_transform) { - LightInstance *lighti = light_instance_owner.get( p_light_instance ); + LightInstance *lighti = light_instance_owner.get(p_light_instance); ERR_FAIL_COND(!lighti); - lighti->transform=p_transform; - + lighti->transform = p_transform; } void RasterizerIPhone::light_instance_set_active_hint(RID p_light_instance) { - LightInstance *lighti = light_instance_owner.get( p_light_instance ); + LightInstance *lighti = light_instance_owner.get(p_light_instance); ERR_FAIL_COND(!lighti); - lighti->last_pass=frame; - + lighti->last_pass = frame; } bool RasterizerIPhone::light_instance_has_shadow(RID p_light_instance) const { @@ -1596,9 +1471,7 @@ int RasterizerIPhone::light_instance_get_shadow_passes(RID p_light_instance) con return 0; } -void RasterizerIPhone::light_instance_set_pssm_split_info(RID p_light_instance, int p_split, float p_near,float p_far, const CameraMatrix& p_camera, const Transform& p_transform) { - - +void RasterizerIPhone::light_instance_set_pssm_split_info(RID p_light_instance, int p_split, float p_near, float p_far, const CameraMatrix &p_camera, const Transform &p_transform) { } /* PARTICLES INSTANCE */ @@ -1607,32 +1480,30 @@ RID RasterizerIPhone::particles_instance_create(RID p_particles) { return RID(); } -void RasterizerIPhone::particles_instance_set_transform(RID p_particles_instance,const Transform& p_transform) { - - +void RasterizerIPhone::particles_instance_set_transform(RID p_particles_instance, const Transform &p_transform) { } /* RENDER API */ /* all calls (inside begin/end shadow) are always warranted to be in the following order: */ -static GLfloat rtri; // Angle For The Triangle ( NEW ) -static GLfloat rquad; // Angle For The Quad ( NEW ) +static GLfloat rtri; // Angle For The Triangle ( NEW ) +static GLfloat rquad; // Angle For The Quad ( NEW ) void RasterizerIPhone::begin_frame() { - window_size = Size2( OS::get_singleton()->get_video_mode().width, OS::get_singleton()->get_video_mode().height ); + window_size = Size2(OS::get_singleton()->get_video_mode().width, OS::get_singleton()->get_video_mode().height); - double time = (OS::get_singleton()->get_ticks_usec()/1000); // get msec - time/=1000.0; // make secs - time_delta=time-last_time; - last_time=time; + double time = (OS::get_singleton()->get_ticks_usec() / 1000); // get msec + time /= 1000.0; // make secs + time_delta = time - last_time; + last_time = time; frame++; - glClearColor(0,0,1,1); + glClearColor(0, 0, 1, 1); glClear(GL_COLOR_BUFFER_BIT); - /* nehe ?*/ +/* nehe ?*/ - #if 0 +#if 0 glViewport(0,0,window_size.width,window_size.height); // Reset The Current Viewport glMatrixMode(GL_PROJECTION); // Select The Projection Matrix @@ -1723,50 +1594,46 @@ void RasterizerIPhone::begin_frame() { rtri+=0.2f; // Increase The Rotation Variable For The Triangle ( NEW ) rquad-=0.15f; // Decrease The Rotation Variable For The Quad ( NEW ) - #endif - +#endif } -void RasterizerIPhone::set_viewport(const VS::ViewportRect& p_viewport) { - +void RasterizerIPhone::set_viewport(const VS::ViewportRect &p_viewport) { - viewport=p_viewport; - canvas_transform=Transform(); + viewport = p_viewport; + canvas_transform = Transform(); canvas_transform.translate(-(viewport.width / 2.0f), -(viewport.height / 2.0f), 0.0f); - canvas_transform.scale( Vector3( 2.0f / viewport.width, -2.0f / viewport.height, 1.0f ) ); + canvas_transform.scale(Vector3(2.0f / viewport.width, -2.0f / viewport.height, 1.0f)); - glViewport( viewport.x, window_size.height-(viewport.height+viewport.y), viewport.width,viewport.height ); + glViewport(viewport.x, window_size.height - (viewport.height + viewport.y), viewport.width, viewport.height); } -void RasterizerIPhone::begin_scene(RID p_fx,VS::ScenarioDebugMode p_debug) { +void RasterizerIPhone::begin_scene(RID p_fx, VS::ScenarioDebugMode p_debug) { opaque_render_list.clear(); alpha_render_list.clear(); - light_instance_count=0; + light_instance_count = 0; scene_fx = p_fx.is_valid() ? fx_owner.get(p_fx) : NULL; }; -void RasterizerIPhone::begin_shadow_map( RID p_light_instance, int p_shadow_pass ) { - - +void RasterizerIPhone::begin_shadow_map(RID p_light_instance, int p_shadow_pass) { } -void RasterizerIPhone::set_camera(const Transform& p_world,const CameraMatrix& p_projection) { +void RasterizerIPhone::set_camera(const Transform &p_world, const CameraMatrix &p_projection) { - camera_transform=p_world; - camera_transform_inverse=camera_transform.inverse(); - camera_projection=p_projection; - camera_plane = Plane( camera_transform.origin, camera_transform.basis.get_axis(2) ); - camera_z_near=camera_projection.get_z_near(); -camera_z_far=camera_projection.get_z_far(); - camera_projection.get_viewport_size(camera_vp_size.x,camera_vp_size.y); + camera_transform = p_world; + camera_transform_inverse = camera_transform.inverse(); + camera_projection = p_projection; + camera_plane = Plane(camera_transform.origin, camera_transform.basis.get_axis(2)); + camera_z_near = camera_projection.get_z_near(); + camera_z_far = camera_projection.get_z_far(); + camera_projection.get_viewport_size(camera_vp_size.x, camera_vp_size.y); } -void RasterizerIPhone::add_light( RID p_light_instance ) { +void RasterizerIPhone::add_light(RID p_light_instance) { #define LIGHT_FADE_TRESHOLD 0.05 - ERR_FAIL_COND( light_instance_count >= MAX_LIGHTS ); + ERR_FAIL_COND(light_instance_count >= MAX_LIGHTS); LightInstance *li = light_instance_owner.get(p_light_instance); ERR_FAIL_COND(!li); @@ -1776,200 +1643,193 @@ void RasterizerIPhone::add_light( RID p_light_instance ) { // actually, not really a hash, but helps to sort the lights // and avoid recompiling redudant shader versions - li->hash_aux=li->base->type; + li->hash_aux = li->base->type; if (li->base->shadow_enabled) - li->hash_aux|=(1<<3); + li->hash_aux |= (1 << 3); - if (li->base->projector.is_valid()) - li->hash_aux|=(1<<4); + if (li->base->projector.is_valid()) + li->hash_aux |= (1 << 4); - if (li->base->shadow_enabled && li->base->volumetric_enabled) - li->hash_aux|=(1<<5); + if (li->base->shadow_enabled && li->base->volumetric_enabled) + li->hash_aux |= (1 << 5); - switch(li->base->type) { + switch (li->base->type) { case VisualServer::LIGHT_DIRECTIONAL: { Vector3 dir = li->transform.basis.get_axis(2); - li->light_vector.x=dir.x; - li->light_vector.y=dir.y; - li->light_vector.z=dir.z; + li->light_vector.x = dir.x; + li->light_vector.y = dir.y; + li->light_vector.z = dir.z; } break; case VisualServer::LIGHT_OMNI: { - float radius = li->base->vars[VisualServer::LIGHT_PARAM_RADIUS]; - if (radius==0) - radius=0.0001; - li->linear_att=(1/LIGHT_FADE_TRESHOLD)/radius; - li->light_vector.x=li->transform.origin.x; - li->light_vector.y=li->transform.origin.y; - li->light_vector.z=li->transform.origin.z; + float radius = li->base->vars[VisualServer::LIGHT_PARAM_RADIUS]; + if (radius == 0) + radius = 0.0001; + li->linear_att = (1 / LIGHT_FADE_TRESHOLD) / radius; + li->light_vector.x = li->transform.origin.x; + li->light_vector.y = li->transform.origin.y; + li->light_vector.z = li->transform.origin.z; } break; case VisualServer::LIGHT_SPOT: { float radius = li->base->vars[VisualServer::LIGHT_PARAM_RADIUS]; - if (radius==0) - radius=0.0001; - li->linear_att=(1/LIGHT_FADE_TRESHOLD)/radius; - li->light_vector.x=li->transform.origin.x; - li->light_vector.y=li->transform.origin.y; - li->light_vector.z=li->transform.origin.z; + if (radius == 0) + radius = 0.0001; + li->linear_att = (1 / LIGHT_FADE_TRESHOLD) / radius; + li->light_vector.x = li->transform.origin.x; + li->light_vector.y = li->transform.origin.y; + li->light_vector.z = li->transform.origin.z; Vector3 dir = -li->transform.basis.get_axis(2); - li->spot_vector.x=dir.x; - li->spot_vector.y=dir.y; - li->spot_vector.z=dir.z; + li->spot_vector.x = dir.x; + li->spot_vector.y = dir.y; + li->spot_vector.z = dir.z; } break; - } + } - light_instances[light_instance_count++]=li; + light_instances[light_instance_count++] = li; } -void RasterizerIPhone::_add_geometry( const Geometry* p_geometry, const Transform& p_world, uint32_t p_vertex_format, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides,const Skeleton* p_skeleton, GeometryOwner *p_owner) { +void RasterizerIPhone::_add_geometry(const Geometry *p_geometry, const Transform &p_world, uint32_t p_vertex_format, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides, const Skeleton *p_skeleton, GeometryOwner *p_owner) { - Material *m=NULL; + Material *m = NULL; - if (p_geometry->material.is_valid()) - m=material_owner.get( p_geometry->material ); + if (p_geometry->material.is_valid()) + m = material_owner.get(p_geometry->material); - if (!m) { - m=material_owner.get( default_material ); - } + if (!m) { + m = material_owner.get(default_material); + } ERR_FAIL_COND(!m); LightInstance *lights[RenderList::MAX_LIGHTS]; - int light_count=0; + int light_count = 0; - RenderList *render_list=&opaque_render_list; - if (p_geometry->has_alpha || m->detail_blend_mode!=VS::MATERIAL_BLEND_MODE_MIX) { + RenderList *render_list = &opaque_render_list; + if (p_geometry->has_alpha || m->detail_blend_mode != VS::MATERIAL_BLEND_MODE_MIX) { render_list = &alpha_render_list; }; if (!m->flags[VS::MATERIAL_FLAG_UNSHADED]) { - light_count=p_light_count; - for(int i=0;i<light_count;i++) { - lights[i]=light_instance_owner.get( p_light_instances[i] ); + light_count = p_light_count; + for (int i = 0; i < light_count; i++) { + lights[i] = light_instance_owner.get(p_light_instances[i]); } } - render_list->add_element( p_geometry, m, p_world, lights, light_count, p_material_overrides,p_skeleton, camera_plane.distance(p_world.origin), p_owner ); + render_list->add_element(p_geometry, m, p_world, lights, light_count, p_material_overrides, p_skeleton, camera_plane.distance(p_world.origin), p_owner); } -void RasterizerIPhone::add_mesh( RID p_mesh, const Transform* p_world, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides, RID p_skeleton) { +void RasterizerIPhone::add_mesh(RID p_mesh, const Transform *p_world, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides, RID p_skeleton) { Mesh *mesh = mesh_owner.get(p_mesh); int ssize = mesh->surfaces.size(); - for (int i=0;i<ssize;i++) { + for (int i = 0; i < ssize; i++) { Surface *s = mesh->surfaces[i]; - Skeleton *sk = p_skeleton.is_valid()?skeleton_owner.get(p_skeleton):NULL; + Skeleton *sk = p_skeleton.is_valid() ? skeleton_owner.get(p_skeleton) : NULL; - _add_geometry(s,*p_world,s->format,p_light_instances,p_light_count,p_material_overrides,sk,NULL); + _add_geometry(s, *p_world, s->format, p_light_instances, p_light_count, p_material_overrides, sk, NULL); } - mesh->last_pass=frame; + mesh->last_pass = frame; } -void RasterizerIPhone::add_multimesh( RID p_multimesh, const Transform* p_world, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides) { - - +void RasterizerIPhone::add_multimesh(RID p_multimesh, const Transform *p_world, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides) { } -void RasterizerIPhone::add_poly( RID p_poly, const Transform* p_world, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides) { +void RasterizerIPhone::add_poly(RID p_poly, const Transform *p_world, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides) { Poly *p = poly_owner.get(p_poly); if (!p->primitives.empty()) { const Poly::Primitive *pp = &p->primitives[0]; - uint32_t format=VisualServer::ARRAY_FORMAT_VERTEX; + uint32_t format = VisualServer::ARRAY_FORMAT_VERTEX; if (!pp->normals.empty()) - format|=VisualServer::ARRAY_FORMAT_NORMAL; + format |= VisualServer::ARRAY_FORMAT_NORMAL; if (!pp->colors.empty()) - format|=VisualServer::ARRAY_FORMAT_COLOR; + format |= VisualServer::ARRAY_FORMAT_COLOR; if (!pp->uvs.empty()) - format|=VisualServer::ARRAY_TEX_UV; + format |= VisualServer::ARRAY_TEX_UV; - _add_geometry(p,*p_world,format,p_light_instances,p_light_count,p_material_overrides,NULL, NULL); + _add_geometry(p, *p_world, format, p_light_instances, p_light_count, p_material_overrides, NULL, NULL); } } -void RasterizerIPhone::add_beam( RID p_beam, const Transform* p_world, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides) { - - +void RasterizerIPhone::add_beam(RID p_beam, const Transform *p_world, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides) { } -void RasterizerIPhone::add_particles( RID p_particle_instance, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides) { - - +void RasterizerIPhone::add_particles(RID p_particle_instance, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides) { } -void RasterizerIPhone::_setup_material(const Geometry *p_geometry,const Material *p_material) { +void RasterizerIPhone::_setup_material(const Geometry *p_geometry, const Material *p_material) { if (p_material->flags[VS::MATERIAL_FLAG_DOUBLE_SIDED]) glDisable(GL_CULL_FACE); else { glEnable(GL_CULL_FACE); - glCullFace( (p_material->flags[VS::MATERIAL_FLAG_INVERT_FACES])?GL_FRONT:GL_BACK); + glCullFace((p_material->flags[VS::MATERIAL_FLAG_INVERT_FACES]) ? GL_FRONT : GL_BACK); } glEnable(GL_COLOR_MATERIAL); /* unused, unless color array */ //glColorMaterial( GL_FRONT_AND_BACK, GL_DIFFUSE ); - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); - + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); ///ambient @TODO offer global ambient group option - float ambient_rgba[4]={ + float ambient_rgba[4] = { 1, 1, 1, 1.0 }; - glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,ambient_rgba); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient_rgba); ///diffuse - const Color &diffuse_color=p_material->parameters[VS::FIXED_MATERIAL_PARAM_DIFFUSE]; - float diffuse_rgba[4]={ + const Color &diffuse_color = p_material->parameters[VS::FIXED_MATERIAL_PARAM_DIFFUSE]; + float diffuse_rgba[4] = { (float)diffuse_color.r, - (float)diffuse_color.g, - (float)diffuse_color.b, - (float)diffuse_color.a + (float)diffuse_color.g, + (float)diffuse_color.b, + (float)diffuse_color.a }; - glColor4f( diffuse_rgba[0],diffuse_rgba[1],diffuse_rgba[2],diffuse_rgba[3]); + glColor4f(diffuse_rgba[0], diffuse_rgba[1], diffuse_rgba[2], diffuse_rgba[3]); - glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,diffuse_rgba); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse_rgba); //specular - const Color &specular_color=p_material->parameters[VS::FIXED_MATERIAL_PARAM_SPECULAR]; - float specular_rgba[4]={ + const Color &specular_color = p_material->parameters[VS::FIXED_MATERIAL_PARAM_SPECULAR]; + float specular_rgba[4] = { (float)specular_color.r, (float)specular_color.g, (float)specular_color.b, 1.0 }; - glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,specular_rgba); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular_rgba); - const Color &emission_color=p_material->parameters[VS::FIXED_MATERIAL_PARAM_EMISSION]; - float emission_rgba[4]={ + const Color &emission_color = p_material->parameters[VS::FIXED_MATERIAL_PARAM_EMISSION]; + float emission_rgba[4] = { (float)emission_color.r, (float)emission_color.g, (float)emission_color.b, 1.0 }; - glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emission_rgba); + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission_rgba); - glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,p_material->parameters[VS::FIXED_MATERIAL_PARAM_SPECULAR_EXP]); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, p_material->parameters[VS::FIXED_MATERIAL_PARAM_SPECULAR_EXP]); if (p_material->flags[VS::MATERIAL_FLAG_UNSHADED]) { glDisable(GL_LIGHTING); @@ -1987,26 +1847,24 @@ void RasterizerIPhone::_setup_material(const Geometry *p_geometry,const Material */ if (p_material->textures[VS::FIXED_MATERIAL_PARAM_DIFFUSE]) { - Texture *texture = texture_owner.get( p_material->textures[VS::FIXED_MATERIAL_PARAM_DIFFUSE] ); + Texture *texture = texture_owner.get(p_material->textures[VS::FIXED_MATERIAL_PARAM_DIFFUSE]); ERR_FAIL_COND(!texture); glActiveTexture(GL_TEXTURE0); glEnable(GL_TEXTURE_2D); - glBindTexture( GL_TEXTURE_2D,texture->tex_id ); + glBindTexture(GL_TEXTURE_2D, texture->tex_id); }; }; -void RasterizerIPhone::_setup_light(LightInstance* p_instance, int p_idx) { +void RasterizerIPhone::_setup_light(LightInstance *p_instance, int p_idx) { - Light* ld = p_instance->base; + Light *ld = p_instance->base; int glid = GL_LIGHT0 + p_idx; - glLightfv(glid , GL_AMBIENT, ld->colors[VS::LIGHT_COLOR_AMBIENT].components ); - glLightfv(glid, GL_DIFFUSE, ld->colors[VS::LIGHT_COLOR_DIFFUSE].components ); - glLightfv(glid, GL_SPECULAR, ld->colors[VS::LIGHT_COLOR_SPECULAR].components ); - - + glLightfv(glid, GL_AMBIENT, ld->colors[VS::LIGHT_COLOR_AMBIENT].components); + glLightfv(glid, GL_DIFFUSE, ld->colors[VS::LIGHT_COLOR_DIFFUSE].components); + glLightfv(glid, GL_SPECULAR, ld->colors[VS::LIGHT_COLOR_SPECULAR].components); - switch(ld->type) { + switch (ld->type) { case VS::LIGHT_DIRECTIONAL: { /* This doesnt have attenuation */ @@ -2014,75 +1872,72 @@ void RasterizerIPhone::_setup_light(LightInstance* p_instance, int p_idx) { glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); - Vector3 v(0.0,0.0,-1.0); // directional lights point up by default - v = p_instance->transform.get_basis().xform( v ); - v = camera_transform_inverse.get_basis().xform( v ); + Vector3 v(0.0, 0.0, -1.0); // directional lights point up by default + v = p_instance->transform.get_basis().xform(v); + v = camera_transform_inverse.get_basis().xform(v); v.normalize(); // this sucks, so it will be optimized at some point v = -v; - float lightpos[4]={v.x,v.y,v.z,0.0}; + float lightpos[4] = { v.x, v.y, v.z, 0.0 }; - glLightfv(glid,GL_POSITION,lightpos); //at modelview + glLightfv(glid, GL_POSITION, lightpos); //at modelview glPopMatrix(); } break; case VS::LIGHT_OMNI: { - glLightf(glid,GL_SPOT_CUTOFF,180.0); - glLightf(glid,GL_CONSTANT_ATTENUATION, ld->vars[VS::LIGHT_PARAM_ATTENUATION]); - glLightf(glid,GL_LINEAR_ATTENUATION, ld->vars[VS::LIGHT_PARAM_RADIUS]); - glLightf(glid,GL_QUADRATIC_ATTENUATION, ld->vars[VS::LIGHT_PARAM_ENERGY]); // wut? + glLightf(glid, GL_SPOT_CUTOFF, 180.0); + glLightf(glid, GL_CONSTANT_ATTENUATION, ld->vars[VS::LIGHT_PARAM_ATTENUATION]); + glLightf(glid, GL_LINEAR_ATTENUATION, ld->vars[VS::LIGHT_PARAM_RADIUS]); + glLightf(glid, GL_QUADRATIC_ATTENUATION, ld->vars[VS::LIGHT_PARAM_ENERGY]); // wut? glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); Vector3 pos = p_instance->transform.get_origin(); pos = camera_transform_inverse.xform(pos); - float lightpos[4]={pos.x,pos.y,pos.z,1.0}; - glLightfv(glid,GL_POSITION,lightpos); //at modelview + float lightpos[4] = { pos.x, pos.y, pos.z, 1.0 }; + glLightfv(glid, GL_POSITION, lightpos); //at modelview glPopMatrix(); } break; case VS::LIGHT_SPOT: { - glLightf(glid,GL_SPOT_CUTOFF, ld->vars[VS::LIGHT_PARAM_SPOT_ANGLE]); - glLightf(glid,GL_SPOT_EXPONENT, ld->vars[VS::LIGHT_PARAM_SPOT_ATTENUATION]); - glLightf(glid,GL_CONSTANT_ATTENUATION, ld->vars[VS::LIGHT_PARAM_ATTENUATION]); - glLightf(glid,GL_LINEAR_ATTENUATION, ld->vars[VS::LIGHT_PARAM_RADIUS]); - glLightf(glid,GL_QUADRATIC_ATTENUATION, ld->vars[VS::LIGHT_PARAM_ENERGY]); // wut? - + glLightf(glid, GL_SPOT_CUTOFF, ld->vars[VS::LIGHT_PARAM_SPOT_ANGLE]); + glLightf(glid, GL_SPOT_EXPONENT, ld->vars[VS::LIGHT_PARAM_SPOT_ATTENUATION]); + glLightf(glid, GL_CONSTANT_ATTENUATION, ld->vars[VS::LIGHT_PARAM_ATTENUATION]); + glLightf(glid, GL_LINEAR_ATTENUATION, ld->vars[VS::LIGHT_PARAM_RADIUS]); + glLightf(glid, GL_QUADRATIC_ATTENUATION, ld->vars[VS::LIGHT_PARAM_ENERGY]); // wut? glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); - Vector3 v(0.0,0.0,-1.0); // directional lights point up by default - v = p_instance->transform.get_basis().xform( v ); - v = camera_transform_inverse.get_basis().xform( v ); + Vector3 v(0.0, 0.0, -1.0); // directional lights point up by default + v = p_instance->transform.get_basis().xform(v); + v = camera_transform_inverse.get_basis().xform(v); v.normalize(); // this sucks, so it will be optimized at some point - float lightdir[4]={v.x, v.y, v.z, 1.0}; - glLightfv(glid,GL_SPOT_DIRECTION,lightdir); //at modelview + float lightdir[4] = { v.x, v.y, v.z, 1.0 }; + glLightfv(glid, GL_SPOT_DIRECTION, lightdir); //at modelview v = p_instance->transform.get_origin(); v = camera_transform_inverse.xform(v); - float lightpos[4]={v.x,v.y,v.z,1.0}; - glLightfv(glid,GL_POSITION,lightpos); //at modelview - + float lightpos[4] = { v.x, v.y, v.z, 1.0 }; + glLightfv(glid, GL_POSITION, lightpos); //at modelview glPopMatrix(); - } break; default: break; } }; -void RasterizerIPhone::_setup_lights(LightInstance **p_lights,int p_light_count) { +void RasterizerIPhone::_setup_lights(LightInstance **p_lights, int p_light_count) { - for (int i=0; i<MAX_LIGHTS; i++) { + for (int i = 0; i < MAX_LIGHTS; i++) { - if (i<p_light_count) { + if (i < p_light_count) { glEnable(GL_LIGHT0 + i); _setup_light(p_lights[i], i); } else { @@ -2104,16 +1959,15 @@ static const int gl_client_states[] = { -1, // ARRAY_INDEX }; -void RasterizerIPhone::_setup_geometry(const Geometry *p_geometry, const Material* p_material) { +void RasterizerIPhone::_setup_geometry(const Geometry *p_geometry, const Material *p_material) { - - switch(p_geometry->type) { + switch (p_geometry->type) { case Geometry::GEOMETRY_SURFACE: { - Surface *surf = (Surface*)p_geometry; - uint8_t *base=0; - bool use_VBO = (surf->array_local==0); + Surface *surf = (Surface *)p_geometry; + uint8_t *base = 0; + bool use_VBO = (surf->array_local == 0); if (!use_VBO) { @@ -2125,17 +1979,17 @@ void RasterizerIPhone::_setup_geometry(const Geometry *p_geometry, const Materia glBindBuffer(GL_ARRAY_BUFFER, surf->vertex_id); }; - const Surface::ArrayData* a=surf->array; - for (int i=0;i<VS::ARRAY_MAX;i++) { + const Surface::ArrayData *a = surf->array; + for (int i = 0; i < VS::ARRAY_MAX; i++) { - const Surface::ArrayData& ad=surf->array[i]; - if (ad.size==0) { + const Surface::ArrayData &ad = surf->array[i]; + if (ad.size == 0) { if (gl_client_states[i] != -1) { glDisableClientState(gl_client_states[i]); }; continue; // this one is disabled. } - ERR_CONTINUE( !ad.configured ); + ERR_CONTINUE(!ad.configured); if (gl_client_states[i] != -1) { glEnableClientState(gl_client_states[i]); @@ -2143,55 +1997,52 @@ void RasterizerIPhone::_setup_geometry(const Geometry *p_geometry, const Materia switch (i) { - case VS::ARRAY_VERTEX: - if (!use_VBO) - glVertexPointer(3,GL_FLOAT,surf->stride,(GLvoid*)&base[a->ofs]); - else - if (surf->array[VS::ARRAY_BONES].size) + case VS::ARRAY_VERTEX: + if (!use_VBO) + glVertexPointer(3, GL_FLOAT, surf->stride, (GLvoid *)&base[a->ofs]); + else if (surf->array[VS::ARRAY_BONES].size) glVertexPointer(3, GL_FLOAT, 0, skinned_buffer); else - glVertexPointer(3,GL_FLOAT,surf->stride,(GLvoid*)a->ofs); - break; + glVertexPointer(3, GL_FLOAT, surf->stride, (GLvoid *)a->ofs); + break; - case VS::ARRAY_NORMAL: - if (use_VBO) - glNormalPointer(GL_FLOAT,surf->stride,(GLvoid*)a->ofs); - else - glNormalPointer(GL_FLOAT,surf->stride,(GLvoid*)&base[a->ofs]); - break; - case VS::ARRAY_TANGENT: - break; - case VS::ARRAY_COLOR: - if (use_VBO) - glColorPointer(4,GL_UNSIGNED_BYTE,surf->stride,(GLvoid*)a->ofs); - else - glColorPointer(4,GL_UNSIGNED_BYTE,surf->stride,(GLvoid*)&base[a->ofs]); - break; - case VS::ARRAY_TEX_UV: - case VS::ARRAY_TEX_UV2: - if (use_VBO) - glTexCoordPointer(2,GL_FLOAT,surf->stride,(GLvoid*)a->ofs); - else - glTexCoordPointer(2,GL_FLOAT,surf->stride,&base[a->ofs]); - break; - case VS::ARRAY_BONES: - case VS::ARRAY_WEIGHTS: - case VS::ARRAY_INDEX: - break; + case VS::ARRAY_NORMAL: + if (use_VBO) + glNormalPointer(GL_FLOAT, surf->stride, (GLvoid *)a->ofs); + else + glNormalPointer(GL_FLOAT, surf->stride, (GLvoid *)&base[a->ofs]); + break; + case VS::ARRAY_TANGENT: + break; + case VS::ARRAY_COLOR: + if (use_VBO) + glColorPointer(4, GL_UNSIGNED_BYTE, surf->stride, (GLvoid *)a->ofs); + else + glColorPointer(4, GL_UNSIGNED_BYTE, surf->stride, (GLvoid *)&base[a->ofs]); + break; + case VS::ARRAY_TEX_UV: + case VS::ARRAY_TEX_UV2: + if (use_VBO) + glTexCoordPointer(2, GL_FLOAT, surf->stride, (GLvoid *)a->ofs); + else + glTexCoordPointer(2, GL_FLOAT, surf->stride, &base[a->ofs]); + break; + case VS::ARRAY_BONES: + case VS::ARRAY_WEIGHTS: + case VS::ARRAY_INDEX: + break; }; } - // process skeleton here } break; default: break; - }; }; -static const GLenum gl_primitive[]={ +static const GLenum gl_primitive[] = { GL_POINTS, GL_LINES, GL_LINE_STRIP, @@ -2201,64 +2052,60 @@ static const GLenum gl_primitive[]={ GL_TRIANGLE_FAN }; -void RasterizerIPhone::_render(const Geometry *p_geometry,const Material *p_material, const Skeleton* p_skeleton) { - +void RasterizerIPhone::_render(const Geometry *p_geometry, const Material *p_material, const Skeleton *p_skeleton) { - switch(p_geometry->type) { + switch (p_geometry->type) { case Geometry::GEOMETRY_SURFACE: { + Surface *s = (Surface *)p_geometry; - Surface *s = (Surface*)p_geometry; - - if (s->index_array_len>0) { + if (s->index_array_len > 0) { if (s->index_array_local) { - glDrawElements(gl_primitive[s->primitive], s->index_array_len, (s->index_array_len>(1<<8))?GL_UNSIGNED_SHORT:GL_UNSIGNED_BYTE, s->index_array_local); + glDrawElements(gl_primitive[s->primitive], s->index_array_len, (s->index_array_len > (1 << 8)) ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE, s->index_array_local); } else { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,s->index_id); - glDrawElements(gl_primitive[s->primitive],s->index_array_len, (s->index_array_len>(1<<8))?GL_UNSIGNED_SHORT:GL_UNSIGNED_BYTE,0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, s->index_id); + glDrawElements(gl_primitive[s->primitive], s->index_array_len, (s->index_array_len > (1 << 8)) ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE, 0); } - } else { - glDrawArrays(gl_primitive[s->primitive],0,s->array_len); - + glDrawArrays(gl_primitive[s->primitive], 0, s->array_len); }; } break; - default: break; + default: break; }; }; void RasterizerIPhone::_render_list_forward(RenderList *p_render_list) { - const Material *prev_material=NULL; - uint64_t prev_light_hash=0; - const Skeleton *prev_skeleton=NULL; - const Geometry *prev_geometry=NULL; - const ParamOverrideMap* prev_overrides=NULL; // make it diferent than NULL + const Material *prev_material = NULL; + uint64_t prev_light_hash = 0; + const Skeleton *prev_skeleton = NULL; + const Geometry *prev_geometry = NULL; + const ParamOverrideMap *prev_overrides = NULL; // make it diferent than NULL - Geometry::Type prev_geometry_type=Geometry::GEOMETRY_INVALID; + Geometry::Type prev_geometry_type = Geometry::GEOMETRY_INVALID; glMatrixMode(GL_PROJECTION); glLoadMatrixf(&camera_projection.matrix[0][0]); - for (int i=0;i<p_render_list->element_count;i++) { + for (int i = 0; i < p_render_list->element_count; i++) { RenderList::Element *e = p_render_list->elements[i]; const Material *material = e->material; uint64_t light_hash = e->light_hash; const Skeleton *skeleton = e->skeleton; const Geometry *geometry = e->geometry; - const ParamOverrideMap* material_overrides=e->material_overrides; + const ParamOverrideMap *material_overrides = e->material_overrides; - if (material!=prev_material || geometry->type!=prev_geometry_type) { - _setup_material(e->geometry,material); + if (material != prev_material || geometry->type != prev_geometry_type) { + _setup_material(e->geometry, material); //_setup_material_overrides(e->material,NULL,material_overrides); //_setup_material_skeleton(material,skeleton); } else { @@ -2268,18 +2115,18 @@ void RasterizerIPhone::_render_list_forward(RenderList *p_render_list) { //_setup_material_overrides(e->material,prev_overrides,material_overrides); } - if (prev_skeleton!=skeleton) { + if (prev_skeleton != skeleton) { //_setup_material_skeleton(material,skeleton); }; } - if (geometry!=prev_geometry || geometry->type!=prev_geometry_type) { + if (geometry != prev_geometry || geometry->type != prev_geometry_type) { _setup_geometry(geometry, material); }; - if (i==0 || light_hash!=prev_light_hash) - _setup_lights(e->lights,e->light_count); + if (i == 0 || light_hash != prev_light_hash) + _setup_lights(e->lights, e->light_count); glMatrixMode(GL_MODELVIEW); _gl_load_transform(camera_transform_inverse); @@ -2287,12 +2134,12 @@ void RasterizerIPhone::_render_list_forward(RenderList *p_render_list) { _render(geometry, material, skeleton); - prev_material=material; - prev_skeleton=skeleton; - prev_geometry=geometry; - prev_light_hash=e->light_hash; - prev_geometry_type=geometry->type; - prev_overrides=material_overrides; + prev_material = material; + prev_skeleton = skeleton; + prev_geometry = geometry; + prev_light_hash = e->light_hash; + prev_geometry_type = geometry->type; + prev_overrides = material_overrides; } }; @@ -2309,12 +2156,8 @@ void RasterizerIPhone::end_scene() { alpha_render_list.sort_z(); _render_list_forward(&alpha_render_list); - - } void RasterizerIPhone::end_shadow_map() { - - } void RasterizerIPhone::end_frame() { @@ -2337,11 +2180,9 @@ void RasterizerIPhone::canvas_begin() { glLoadIdentity(); } void RasterizerIPhone::canvas_set_transparency(float p_transparency) { - - } -void RasterizerIPhone::canvas_set_rect(const Rect2& p_rect, bool p_clip) { +void RasterizerIPhone::canvas_set_rect(const Rect2 &p_rect, bool p_clip) { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); @@ -2351,177 +2192,166 @@ void RasterizerIPhone::canvas_set_rect(const Rect2& p_rect, bool p_clip) { if (p_clip) { glEnable(GL_SCISSOR_TEST); - glScissor(viewport.x+p_rect.pos.x,viewport.y+ (viewport.height-(p_rect.pos.y+p_rect.size.height)), - p_rect.size.width,p_rect.size.height); + glScissor(viewport.x + p_rect.pos.x, viewport.y + (viewport.height - (p_rect.pos.y + p_rect.size.height)), + p_rect.size.width, p_rect.size.height); } else { glDisable(GL_SCISSOR_TEST); } - - } -void RasterizerIPhone::canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) { +void RasterizerIPhone::canvas_draw_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width) { glColor4f(1, 1, 1, 1); - float verts[6]={ - p_from.x,p_from.y,0, - p_to.x,p_to.y,0 + float verts[6] = { + p_from.x, p_from.y, 0, + p_to.x, p_to.y, 0 }; - float colors[]={ + float colors[] = { p_color.r, p_color.g, p_color.b, p_color.a, p_color.r, p_color.g, p_color.b, p_color.a, }; glLineWidth(p_width); - _draw_primitive(2,verts,0,colors,0); + _draw_primitive(2, verts, 0, colors, 0); } -static void _draw_textured_quad(const Rect2& p_rect, const Rect2& p_src_region, const Size2& p_tex_size ) { +static void _draw_textured_quad(const Rect2 &p_rect, const Rect2 &p_src_region, const Size2 &p_tex_size) { - float texcoords[]= { - p_src_region.pos.x/p_tex_size.width, - p_src_region.pos.y/p_tex_size.height, + float texcoords[] = { + p_src_region.pos.x / p_tex_size.width, + p_src_region.pos.y / p_tex_size.height, - (p_src_region.pos.x+p_src_region.size.width)/p_tex_size.width, - p_src_region.pos.y/p_tex_size.height, + (p_src_region.pos.x + p_src_region.size.width) / p_tex_size.width, + p_src_region.pos.y / p_tex_size.height, - (p_src_region.pos.x+p_src_region.size.width)/p_tex_size.width, - (p_src_region.pos.y+p_src_region.size.height)/p_tex_size.height, + (p_src_region.pos.x + p_src_region.size.width) / p_tex_size.width, + (p_src_region.pos.y + p_src_region.size.height) / p_tex_size.height, - p_src_region.pos.x/p_tex_size.width, - (p_src_region.pos.y+p_src_region.size.height)/p_tex_size.height, + p_src_region.pos.x / p_tex_size.width, + (p_src_region.pos.y + p_src_region.size.height) / p_tex_size.height, }; - float coords[]= { + float coords[] = { p_rect.pos.x, p_rect.pos.y, 0, - p_rect.pos.x+p_rect.size.width, p_rect.pos.y, 0, - p_rect.pos.x+p_rect.size.width, p_rect.pos.y+p_rect.size.height, 0, - p_rect.pos.x,p_rect.pos.y+p_rect.size.height, 0 + p_rect.pos.x + p_rect.size.width, p_rect.pos.y, 0, + p_rect.pos.x + p_rect.size.width, p_rect.pos.y + p_rect.size.height, 0, + p_rect.pos.x, p_rect.pos.y + p_rect.size.height, 0 }; - _draw_primitive(4,coords,0,0,texcoords); + _draw_primitive(4, coords, 0, 0, texcoords); } -static void _draw_quad(const Rect2& p_rect) { +static void _draw_quad(const Rect2 &p_rect) { - float coords[]= { - p_rect.pos.x,p_rect.pos.y, 0, - p_rect.pos.x+p_rect.size.width,p_rect.pos.y, 0, - p_rect.pos.x+p_rect.size.width,p_rect.pos.y+p_rect.size.height, 0, - p_rect.pos.x,p_rect.pos.y+p_rect.size.height, 0 + float coords[] = { + p_rect.pos.x, p_rect.pos.y, 0, + p_rect.pos.x + p_rect.size.width, p_rect.pos.y, 0, + p_rect.pos.x + p_rect.size.width, p_rect.pos.y + p_rect.size.height, 0, + p_rect.pos.x, p_rect.pos.y + p_rect.size.height, 0 }; - _draw_primitive(4,coords,0,0,0); - + _draw_primitive(4, coords, 0, 0, 0); } -void RasterizerIPhone::canvas_draw_rect(const Rect2& p_rect, bool p_region, const Rect2& p_source,bool p_tile,RID p_texture,const Color& p_modulate) { +void RasterizerIPhone::canvas_draw_rect(const Rect2 &p_rect, bool p_region, const Rect2 &p_source, bool p_tile, RID p_texture, const Color &p_modulate) { glColor4f(p_modulate.r, p_modulate.g, p_modulate.b, p_modulate.a); - if ( p_texture.is_valid() ) { + if (p_texture.is_valid()) { glEnable(GL_TEXTURE_2D); - Texture *texture = texture_owner.get( p_texture ); + Texture *texture = texture_owner.get(p_texture); ERR_FAIL_COND(!texture); glActiveTexture(GL_TEXTURE0); - glBindTexture( GL_TEXTURE_2D,texture->tex_id ); + glBindTexture(GL_TEXTURE_2D, texture->tex_id); if (!p_region) { - Rect2 region = Rect2(0,0,texture->width,texture->height); - _draw_textured_quad(p_rect,region,region.size); + Rect2 region = Rect2(0, 0, texture->width, texture->height); + _draw_textured_quad(p_rect, region, region.size); } else { - _draw_textured_quad(p_rect, p_source, Size2(texture->width,texture->height) ); - + _draw_textured_quad(p_rect, p_source, Size2(texture->width, texture->height)); } } else { - _draw_quad( p_rect ); - + _draw_quad(p_rect); } - - } -void RasterizerIPhone::canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margin, bool p_draw_center) { +void RasterizerIPhone::canvas_draw_style_box(const Rect2 &p_rect, const Rect2 &p_src_region, RID p_texture, const float *p_margin, bool p_draw_center) { glColor4f(1, 1, 1, 1); - Texture *texture = texture_owner.get( p_texture ); + Texture *texture = texture_owner.get(p_texture); ERR_FAIL_COND(!texture); glEnable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); - glBindTexture( GL_TEXTURE_2D,texture->tex_id ); - + glBindTexture(GL_TEXTURE_2D, texture->tex_id); Rect2 region = p_src_region; - if (region.size.width <= 0 ) - region.size.width = texture->width; + if (region.size.width <= 0) + region.size.width = texture->width; if (region.size.height <= 0) - region.size.height = texture->height; + region.size.height = texture->height; /* CORNERS */ _draw_textured_quad( // top left - Rect2( p_rect.pos, Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_TOP])), - Rect2( region.pos, Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_TOP])), - Size2( texture->width, texture->height ) ); + Rect2(p_rect.pos, Size2(p_margin[MARGIN_LEFT], p_margin[MARGIN_TOP])), + Rect2(region.pos, Size2(p_margin[MARGIN_LEFT], p_margin[MARGIN_TOP])), + Size2(texture->width, texture->height)); _draw_textured_quad( // top right - Rect2( Point2( p_rect.pos.x + p_rect.size.width - p_margin[MARGIN_RIGHT], p_rect.pos.y), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_TOP])), - Rect2( Point2(region.pos.x+region.size.width-p_margin[MARGIN_RIGHT], region.pos.y), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_TOP])), - Size2( texture->width, texture->height ) ); - + Rect2(Point2(p_rect.pos.x + p_rect.size.width - p_margin[MARGIN_RIGHT], p_rect.pos.y), Size2(p_margin[MARGIN_RIGHT], p_margin[MARGIN_TOP])), + Rect2(Point2(region.pos.x + region.size.width - p_margin[MARGIN_RIGHT], region.pos.y), Size2(p_margin[MARGIN_RIGHT], p_margin[MARGIN_TOP])), + Size2(texture->width, texture->height)); _draw_textured_quad( // bottom left - Rect2( Point2(p_rect.pos.x,p_rect.pos.y + p_rect.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_BOTTOM])), - Rect2( Point2(region.pos.x, region.pos.y+region.size.height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT],p_margin[MARGIN_BOTTOM])), - Size2( texture->width, texture->height ) ); + Rect2(Point2(p_rect.pos.x, p_rect.pos.y + p_rect.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT], p_margin[MARGIN_BOTTOM])), + Rect2(Point2(region.pos.x, region.pos.y + region.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_LEFT], p_margin[MARGIN_BOTTOM])), + Size2(texture->width, texture->height)); _draw_textured_quad( // bottom right - Rect2( Point2( p_rect.pos.x + p_rect.size.width - p_margin[MARGIN_RIGHT], p_rect.pos.y + p_rect.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_BOTTOM])), - Rect2( Point2(region.pos.x+region.size.width-p_margin[MARGIN_RIGHT], region.pos.y+region.size.height-p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT],p_margin[MARGIN_BOTTOM])), - Size2( texture->width, texture->height ) ); - - Rect2 rect_center( p_rect.pos+Point2( p_margin[MARGIN_LEFT], p_margin[MARGIN_TOP]), Size2( p_rect.size.width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], p_rect.size.height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM] )); + Rect2(Point2(p_rect.pos.x + p_rect.size.width - p_margin[MARGIN_RIGHT], p_rect.pos.y + p_rect.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT], p_margin[MARGIN_BOTTOM])), + Rect2(Point2(region.pos.x + region.size.width - p_margin[MARGIN_RIGHT], region.pos.y + region.size.height - p_margin[MARGIN_BOTTOM]), Size2(p_margin[MARGIN_RIGHT], p_margin[MARGIN_BOTTOM])), + Size2(texture->width, texture->height)); - Rect2 src_center( Point2(region.pos.x+p_margin[MARGIN_LEFT], region.pos.y+p_margin[MARGIN_TOP]), Size2(region.size.width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], region.size.height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM] )); + Rect2 rect_center(p_rect.pos + Point2(p_margin[MARGIN_LEFT], p_margin[MARGIN_TOP]), Size2(p_rect.size.width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], p_rect.size.height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM])); + Rect2 src_center(Point2(region.pos.x + p_margin[MARGIN_LEFT], region.pos.y + p_margin[MARGIN_TOP]), Size2(region.size.width - p_margin[MARGIN_LEFT] - p_margin[MARGIN_RIGHT], region.size.height - p_margin[MARGIN_TOP] - p_margin[MARGIN_BOTTOM])); _draw_textured_quad( // top - Rect2( Point2(rect_center.pos.x,p_rect.pos.y),Size2(rect_center.size.width,p_margin[MARGIN_TOP])), - Rect2( Point2(src_center.pos.x,region.pos.y), Size2(src_center.size.width,p_margin[MARGIN_TOP])), - Size2( texture->width, texture->height ) ); + Rect2(Point2(rect_center.pos.x, p_rect.pos.y), Size2(rect_center.size.width, p_margin[MARGIN_TOP])), + Rect2(Point2(src_center.pos.x, region.pos.y), Size2(src_center.size.width, p_margin[MARGIN_TOP])), + Size2(texture->width, texture->height)); _draw_textured_quad( // bottom - Rect2( Point2(rect_center.pos.x,rect_center.pos.y+rect_center.size.height),Size2(rect_center.size.width,p_margin[MARGIN_BOTTOM])), - Rect2( Point2(src_center.pos.x,src_center.pos.y+src_center.size.height), Size2(src_center.size.width,p_margin[MARGIN_BOTTOM])), - Size2( texture->width, texture->height ) ); + Rect2(Point2(rect_center.pos.x, rect_center.pos.y + rect_center.size.height), Size2(rect_center.size.width, p_margin[MARGIN_BOTTOM])), + Rect2(Point2(src_center.pos.x, src_center.pos.y + src_center.size.height), Size2(src_center.size.width, p_margin[MARGIN_BOTTOM])), + Size2(texture->width, texture->height)); _draw_textured_quad( // left - Rect2( Point2(p_rect.pos.x,rect_center.pos.y),Size2(p_margin[MARGIN_LEFT],rect_center.size.height)), - Rect2( Point2(region.pos.x,region.pos.y+p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_LEFT],src_center.size.height)), - Size2( texture->width, texture->height ) ); + Rect2(Point2(p_rect.pos.x, rect_center.pos.y), Size2(p_margin[MARGIN_LEFT], rect_center.size.height)), + Rect2(Point2(region.pos.x, region.pos.y + p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_LEFT], src_center.size.height)), + Size2(texture->width, texture->height)); _draw_textured_quad( // right - Rect2( Point2(rect_center.pos.x+rect_center.size.width,rect_center.pos.y),Size2(p_margin[MARGIN_RIGHT],rect_center.size.height)), - Rect2( Point2(src_center.pos.x+src_center.size.width,region.pos.y+p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_RIGHT],src_center.size.height)), - Size2( texture->width, texture->height ) ); + Rect2(Point2(rect_center.pos.x + rect_center.size.width, rect_center.pos.y), Size2(p_margin[MARGIN_RIGHT], rect_center.size.height)), + Rect2(Point2(src_center.pos.x + src_center.size.width, region.pos.y + p_margin[MARGIN_TOP]), Size2(p_margin[MARGIN_RIGHT], src_center.size.height)), + Size2(texture->width, texture->height)); if (p_draw_center) { _draw_textured_quad( - rect_center, - src_center, - Size2( texture->width, texture->height )); + rect_center, + src_center, + Size2(texture->width, texture->height)); } - } -void RasterizerIPhone::canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture) { +void RasterizerIPhone::canvas_draw_primitive(const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, RID p_texture) { - ERR_FAIL_COND(p_points.size()<1); + ERR_FAIL_COND(p_points.size() < 1); float verts[12]; float uvs[8]; float colors[16]; @@ -2529,22 +2359,22 @@ void RasterizerIPhone::canvas_draw_primitive(const Vector<Point2>& p_points, con glColor4f(1, 1, 1, 1); int idx = 0; - for(int i=0;i<p_points.size();i++) { + for (int i = 0; i < p_points.size(); i++) { - verts[idx++]=p_points[i].x; - verts[idx++]=p_points[i].y; - verts[idx++]=0; + verts[idx++] = p_points[i].x; + verts[idx++] = p_points[i].y; + verts[idx++] = 0; } idx = 0; - for(int i=0;i<p_uvs.size();i++) { + for (int i = 0; i < p_uvs.size(); i++) { uvs[idx++] = p_uvs[i].x; uvs[idx++] = p_uvs[i].y; } idx = 0; - for (int i=0; i<p_colors.size(); i++) { + for (int i = 0; i < p_colors.size(); i++) { colors[idx++] = p_colors[i].r; colors[idx++] = p_colors[i].g; @@ -2554,15 +2384,14 @@ void RasterizerIPhone::canvas_draw_primitive(const Vector<Point2>& p_points, con if (p_texture.is_valid()) { glEnable(GL_TEXTURE_2D); - Texture *texture = texture_owner.get( p_texture ); + Texture *texture = texture_owner.get(p_texture); if (texture) { glActiveTexture(GL_TEXTURE0); - glBindTexture( GL_TEXTURE_2D,texture->tex_id ); + glBindTexture(GL_TEXTURE_2D, texture->tex_id); } } - _draw_primitive(p_points.size(),&verts[0],NULL,p_colors.size()?&colors[0]:NULL,p_uvs.size()?uvs:NULL); - + _draw_primitive(p_points.size(), &verts[0], NULL, p_colors.size() ? &colors[0] : NULL, p_uvs.size() ? uvs : NULL); } /* FX */ @@ -2571,50 +2400,42 @@ RID RasterizerIPhone::fx_create() { return RID(); } -void RasterizerIPhone::fx_get_effects(RID p_fx,List<String> *p_effects) const { - - +void RasterizerIPhone::fx_get_effects(RID p_fx, List<String> *p_effects) const { } -void RasterizerIPhone::fx_set_active(RID p_fx,const String& p_effect, bool p_active) { - - +void RasterizerIPhone::fx_set_active(RID p_fx, const String &p_effect, bool p_active) { } -bool RasterizerIPhone::fx_is_active(RID p_fx,const String& p_effect) const { +bool RasterizerIPhone::fx_is_active(RID p_fx, const String &p_effect) const { return false; } -void RasterizerIPhone::fx_get_effect_params(RID p_fx,const String& p_effect,List<PropertyInfo> *p_params) const { - - +void RasterizerIPhone::fx_get_effect_params(RID p_fx, const String &p_effect, List<PropertyInfo> *p_params) const { } -Variant RasterizerIPhone::fx_get_effect_param(RID p_fx,const String& p_effect,const String& p_param) const { +Variant RasterizerIPhone::fx_get_effect_param(RID p_fx, const String &p_effect, const String &p_param) const { return Variant(); } -void RasterizerIPhone::fx_set_effect_param(RID p_fx,const String& p_effect, const String& p_param, const Variant& p_pvalue) { - - +void RasterizerIPhone::fx_set_effect_param(RID p_fx, const String &p_effect, const String &p_param, const Variant &p_pvalue) { } /*MISC*/ -bool RasterizerIPhone::is_texture(const RID& p_rid) const { +bool RasterizerIPhone::is_texture(const RID &p_rid) const { return texture_owner.owns(p_rid); } -bool RasterizerIPhone::is_material(const RID& p_rid) const { +bool RasterizerIPhone::is_material(const RID &p_rid) const { return material_owner.owns(p_rid); } -bool RasterizerIPhone::is_mesh(const RID& p_rid) const { +bool RasterizerIPhone::is_mesh(const RID &p_rid) const { return mesh_owner.owns(p_rid); } -bool RasterizerIPhone::is_multimesh(const RID& p_rid) const { +bool RasterizerIPhone::is_multimesh(const RID &p_rid) const { return false; } -bool RasterizerIPhone::is_poly(const RID& p_rid) const { +bool RasterizerIPhone::is_poly(const RID &p_rid) const { return poly_owner.owns(p_rid); } @@ -2628,46 +2449,46 @@ bool RasterizerIPhone::is_beam(const RID &p_beam) const { return false; } -bool RasterizerIPhone::is_light(const RID& p_rid) const { +bool RasterizerIPhone::is_light(const RID &p_rid) const { return light_owner.owns(p_rid); } -bool RasterizerIPhone::is_light_instance(const RID& p_rid) const { +bool RasterizerIPhone::is_light_instance(const RID &p_rid) const { return light_instance_owner.owns(p_rid); } -bool RasterizerIPhone::is_particles_instance(const RID& p_rid) const { +bool RasterizerIPhone::is_particles_instance(const RID &p_rid) const { return false; } -bool RasterizerIPhone::is_skeleton(const RID& p_rid) const { +bool RasterizerIPhone::is_skeleton(const RID &p_rid) const { return skeleton_owner.owns(p_rid); } -bool RasterizerIPhone::is_fx(const RID& p_rid) const { +bool RasterizerIPhone::is_fx(const RID &p_rid) const { return fx_owner.owns(p_rid); } -bool RasterizerIPhone::is_shader(const RID& p_rid) const { +bool RasterizerIPhone::is_shader(const RID &p_rid) const { return false; } -void RasterizerIPhone::free(const RID& p_rid) const { +void RasterizerIPhone::free(const RID &p_rid) const { if (texture_owner.owns(p_rid)) { // delete the texture Texture *texture = texture_owner.get(p_rid); - glDeleteTextures( 1,&texture->tex_id ); + glDeleteTextures(1, &texture->tex_id); texture_owner.free(p_rid); memdelete(texture); } else if (material_owner.owns(p_rid)) { - Material *material = material_owner.get( p_rid ); + Material *material = material_owner.get(p_rid); ERR_FAIL_COND(!material); material_owner.free(p_rid); @@ -2677,7 +2498,7 @@ void RasterizerIPhone::free(const RID& p_rid) const { Mesh *mesh = mesh_owner.get(p_rid); ERR_FAIL_COND(!mesh); - for (int i=0;i<mesh->surfaces.size();i++) { + for (int i = 0; i < mesh->surfaces.size(); i++) { Surface *surface = mesh->surfaces[i]; if (surface->array_local != 0) { @@ -2688,11 +2509,11 @@ void RasterizerIPhone::free(const RID& p_rid) const { }; if (surface->vertex_id) - glDeleteBuffers(1,&surface->vertex_id); + glDeleteBuffers(1, &surface->vertex_id); if (surface->index_id) - glDeleteBuffers(1,&surface->index_id); + glDeleteBuffers(1, &surface->index_id); - memdelete( surface ); + memdelete(surface); }; mesh->surfaces.clear(); @@ -2702,7 +2523,7 @@ void RasterizerIPhone::free(const RID& p_rid) const { } else if (skeleton_owner.owns(p_rid)) { - Skeleton *skeleton = skeleton_owner.get( p_rid ); + Skeleton *skeleton = skeleton_owner.get(p_rid); ERR_FAIL_COND(!skeleton) skeleton_owner.free(p_rid); @@ -2710,7 +2531,7 @@ void RasterizerIPhone::free(const RID& p_rid) const { } else if (light_owner.owns(p_rid)) { - Light *light = light_owner.get( p_rid ); + Light *light = light_owner.get(p_rid); ERR_FAIL_COND(!light) light_owner.free(p_rid); @@ -2718,20 +2539,19 @@ void RasterizerIPhone::free(const RID& p_rid) const { } else if (light_instance_owner.owns(p_rid)) { - LightInstance *light_instance = light_instance_owner.get( p_rid ); + LightInstance *light_instance = light_instance_owner.get(p_rid); ERR_FAIL_COND(!light_instance); light_instance_owner.free(p_rid); - memdelete( light_instance ); + memdelete(light_instance); } else if (fx_owner.owns(p_rid)) { - FX *fx = fx_owner.get( p_rid ); + FX *fx = fx_owner.get(p_rid); ERR_FAIL_COND(!fx); fx_owner.free(p_rid); - memdelete( fx ); - + memdelete(fx); }; } @@ -2745,10 +2565,9 @@ void RasterizerIPhone::init() { } void RasterizerIPhone::finish() { - } - int RasterizerIPhone::get_render_info(VS::RenderInfo p_info) { +int RasterizerIPhone::get_render_info(VS::RenderInfo p_info) { return false; } @@ -2758,9 +2577,8 @@ RasterizerIPhone::RasterizerIPhone() { frame = 0; }; -RasterizerIPhone::~RasterizerIPhone() { +RasterizerIPhone::~RasterizerIPhone(){ }; - #endif diff --git a/platform/iphone/rasterizer_iphone.h b/platform/iphone/rasterizer_iphone.h index 299a11e895..02cb985dc8 100644 --- a/platform/iphone/rasterizer_iphone.h +++ b/platform/iphone/rasterizer_iphone.h @@ -33,12 +33,12 @@ #include "servers/visual/rasterizer.h" +#include "camera_matrix.h" #include "image.h" -#include "rid.h" -#include "servers/visual_server.h" #include "list.h" #include "map.h" -#include "camera_matrix.h" +#include "rid.h" +#include "servers/visual_server.h" #include "sort.h" #include <ES1/gl.h> @@ -57,7 +57,7 @@ class RasterizerIPhone : public Rasterizer { struct Texture { uint32_t flags; - int width,height; + int width, height; Image::Format format; GLenum target; @@ -72,21 +72,21 @@ class RasterizerIPhone : public Rasterizer { Texture() { - flags=width=height=0; - tex_id=0; - format=Image::FORMAT_L8; - gl_components_cache=0; - format_has_alpha=false; - has_alpha=false; - active=false; - mipmap_dirty=true; + flags = width = height = 0; + tex_id = 0; + format = Image::FORMAT_L8; + gl_components_cache = 0; + format_has_alpha = false; + has_alpha = false; + active = false; + mipmap_dirty = true; } ~Texture() { - if (tex_id!=0) { + if (tex_id != 0) { - glDeleteTextures(1,&tex_id); + glDeleteTextures(1, &tex_id); } } }; @@ -108,16 +108,16 @@ class RasterizerIPhone : public Rasterizer { Material() { - flags[VS::MATERIAL_FLAG_VISIBLE]=true; - flags[VS::MATERIAL_FLAG_DOUBLE_SIDED]=false; - flags[VS::MATERIAL_FLAG_INVERT_FACES]=false; - flags[VS::MATERIAL_FLAG_UNSHADED]=false; - flags[VS::MATERIAL_FLAG_WIREFRAME]=false; + flags[VS::MATERIAL_FLAG_VISIBLE] = true; + flags[VS::MATERIAL_FLAG_DOUBLE_SIDED] = false; + flags[VS::MATERIAL_FLAG_INVERT_FACES] = false; + flags[VS::MATERIAL_FLAG_UNSHADED] = false; + flags[VS::MATERIAL_FLAG_WIREFRAME] = false; parameters[VS::FIXED_MATERIAL_PARAM_DIFFUSE] = Color(0.8, 0.8, 0.8); parameters[VS::FIXED_MATERIAL_PARAM_SPECULAR_EXP] = 12; - for (int i=0; i<VisualServer::FIXED_MATERIAL_PARAM_MAX; i++) { + for (int i = 0; i < VisualServer::FIXED_MATERIAL_PARAM_MAX; i++) { texcoord_mode[i] = VS::FIXED_MATERIAL_TEXCOORD_UV; }; detail_blend_mode = VS::MATERIAL_BLEND_MODE_MIX; @@ -126,7 +126,6 @@ class RasterizerIPhone : public Rasterizer { }; mutable RID_Owner<Material> material_owner; - struct Geometry { enum Type { @@ -146,8 +145,12 @@ class RasterizerIPhone : public Rasterizer { Vector3 scale; Vector3 uv_scale; - Geometry() : scale(1, 1, 1) { has_alpha=false; material_owned = false; } - virtual ~Geometry() {}; + Geometry() + : scale(1, 1, 1) { + has_alpha = false; + material_owned = false; + } + virtual ~Geometry(){}; }; struct GeometryOwner { @@ -155,15 +158,18 @@ class RasterizerIPhone : public Rasterizer { virtual ~GeometryOwner() {} }; - struct Surface : public Geometry { struct ArrayData { - uint32_t ofs,size; + uint32_t ofs, size; bool configured; int components; - ArrayData() { ofs=0; size=0; configured=false; } + ArrayData() { + ofs = 0; + size = 0; + configured = false; + } }; ArrayData array[VS::ARRAY_MAX]; @@ -196,34 +202,32 @@ class RasterizerIPhone : public Rasterizer { Surface() { - array_len=0; - type=GEOMETRY_SURFACE; - primitive=VS::PRIMITIVE_POINTS; - index_array_len=VS::NO_INDEX_ARRAY; - format=0; - stride=0; + array_len = 0; + type = GEOMETRY_SURFACE; + primitive = VS::PRIMITIVE_POINTS; + index_array_len = VS::NO_INDEX_ARRAY; + format = 0; + stride = 0; array_local = index_array_local = 0; vertex_id = index_id = 0; - active=false; + active = false; } ~Surface() { - } }; - struct Mesh { bool active; - Vector<Surface*> surfaces; + Vector<Surface *> surfaces; mutable uint64_t last_pass; Mesh() { - last_pass=0; - active=false; + last_pass = 0; + active = false; } }; mutable RID_Owner<Mesh> mesh_owner; @@ -236,29 +240,25 @@ class RasterizerIPhone : public Rasterizer { Vector<Vector3> normals; Vector<Vector3> uvs; Vector<Color> colors; - }; AABB aabb; List<Primitive> primitives; Poly() { - type=GEOMETRY_POLY; + type = GEOMETRY_POLY; } }; mutable RID_Owner<Poly> poly_owner; - struct Skeleton { Vector<Transform> bones; - }; mutable RID_Owner<Skeleton> skeleton_owner; - struct Light { VS::LightType type; @@ -269,19 +269,18 @@ class RasterizerIPhone : public Rasterizer { bool volumetric_enabled; Color volumetric_color; - Light() { - vars[VS::LIGHT_PARAM_SPOT_ATTENUATION]=1; - vars[VS::LIGHT_PARAM_SPOT_ANGLE]=45; - vars[VS::LIGHT_PARAM_ATTENUATION]=1.0; - vars[VS::LIGHT_PARAM_ENERGY]=1.0; - vars[VS::LIGHT_PARAM_RADIUS]=1.0; - colors[VS::LIGHT_COLOR_AMBIENT]=Color(0,0,0); - colors[VS::LIGHT_COLOR_DIFFUSE]=Color(1,1,1); - colors[VS::LIGHT_COLOR_SPECULAR]=Color(1,1,1); - shadow_enabled=false; - volumetric_enabled=false; + vars[VS::LIGHT_PARAM_SPOT_ATTENUATION] = 1; + vars[VS::LIGHT_PARAM_SPOT_ANGLE] = 45; + vars[VS::LIGHT_PARAM_ATTENUATION] = 1.0; + vars[VS::LIGHT_PARAM_ENERGY] = 1.0; + vars[VS::LIGHT_PARAM_RADIUS] = 1.0; + colors[VS::LIGHT_COLOR_AMBIENT] = Color(0, 0, 0); + colors[VS::LIGHT_COLOR_DIFFUSE] = Color(1, 1, 1); + colors[VS::LIGHT_COLOR_SPECULAR] = Color(1, 1, 1); + shadow_enabled = false; + volumetric_enabled = false; } }; @@ -302,7 +301,6 @@ class RasterizerIPhone : public Rasterizer { uint64_t last_pass; Transform transform; - CameraMatrix projection; Vector<SplitInfo> splits; @@ -321,8 +319,8 @@ class RasterizerIPhone : public Rasterizer { struct RenderList { enum { - MAX_ELEMENTS=4096, - MAX_LIGHTS=4 + MAX_ELEMENTS = 4096, + MAX_LIGHTS = 4 }; struct Element { @@ -330,28 +328,27 @@ class RasterizerIPhone : public Rasterizer { float depth; const Skeleton *skeleton; Transform transform; - LightInstance* lights[MAX_LIGHTS]; + LightInstance *lights[MAX_LIGHTS]; int light_count; const Geometry *geometry; const Material *material; uint64_t light_hash; GeometryOwner *owner; - const ParamOverrideMap* material_overrides; + const ParamOverrideMap *material_overrides; }; - Element _elements[MAX_ELEMENTS]; Element *elements[MAX_ELEMENTS]; int element_count; void clear() { - element_count=0; + element_count = 0; } struct SortZ { - _FORCE_INLINE_ bool operator()(const Element* A, const Element* B ) const { + _FORCE_INLINE_ bool operator()(const Element *A, const Element *B) const { return A->depth > B->depth; } @@ -359,37 +356,37 @@ class RasterizerIPhone : public Rasterizer { void sort_z() { - SortArray<Element*,SortZ> sorter; - sorter.sort(elements,element_count); + SortArray<Element *, SortZ> sorter; + sorter.sort(elements, element_count); } struct SortSkel { - _FORCE_INLINE_ bool operator()(const Element* A, const Element* B ) const { + _FORCE_INLINE_ bool operator()(const Element *A, const Element *B) const { if (A->geometry < B->geometry) return true; else if (A->geometry > B->geometry) return false; - else return (!A->skeleton && B->skeleton); + else + return (!A->skeleton && B->skeleton); } }; void sort_skel() { - SortArray<Element*,SortSkel> sorter; - sorter.sort(elements,element_count); + SortArray<Element *, SortSkel> sorter; + sorter.sort(elements, element_count); } struct SortMat { - _FORCE_INLINE_ bool operator()(const Element* A, const Element* B ) const { + _FORCE_INLINE_ bool operator()(const Element *A, const Element *B) const { if (A->geometry == B->geometry) { if (A->material == B->material) { - return (A->material_overrides < B->material_overrides); } else { @@ -404,13 +401,13 @@ class RasterizerIPhone : public Rasterizer { void sort_mat() { - SortArray<Element*,SortMat> sorter; - sorter.sort(elements,element_count); + SortArray<Element *, SortMat> sorter; + sorter.sort(elements, element_count); } struct SortMatLight { - _FORCE_INLINE_ bool operator()(const Element* A, const Element* B ) const { + _FORCE_INLINE_ bool operator()(const Element *A, const Element *B) const { if (A->geometry == B->geometry) { @@ -419,7 +416,7 @@ class RasterizerIPhone : public Rasterizer { if (A->light_hash == B->light_hash) return (A->material_overrides < B->material_overrides); else - return A->light_hash<B->light_hash; + return A->light_hash < B->light_hash; } else { return (A->material < B->material); @@ -433,57 +430,54 @@ class RasterizerIPhone : public Rasterizer { void sort_mat_light() { - SortArray<Element*,SortMatLight> sorter; - sorter.sort(elements,element_count); + SortArray<Element *, SortMatLight> sorter; + sorter.sort(elements, element_count); } struct LISort { - _FORCE_INLINE_ bool operator ()(const LightInstance *A, const LightInstance *B) const { + _FORCE_INLINE_ bool operator()(const LightInstance *A, const LightInstance *B) const { return (A->hash_aux < B->hash_aux); } }; - _FORCE_INLINE_ void add_element( const Geometry *p_geometry, const Material* p_material,const Transform& p_transform, LightInstance **p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides, const Skeleton *p_skeleton, float p_depth, GeometryOwner *p_owner=NULL) { + _FORCE_INLINE_ void add_element(const Geometry *p_geometry, const Material *p_material, const Transform &p_transform, LightInstance **p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides, const Skeleton *p_skeleton, float p_depth, GeometryOwner *p_owner = NULL) { - - ERR_FAIL_COND( element_count >= MAX_ELEMENTS ); + ERR_FAIL_COND(element_count >= MAX_ELEMENTS); Element *e = elements[element_count++]; - e->geometry=p_geometry; - e->material=p_material; - e->transform=p_transform; - e->skeleton=p_skeleton; - e->light_hash=0; - e->light_count=p_light_count; - e->owner=p_owner; - e->material_overrides=p_material_overrides; + e->geometry = p_geometry; + e->material = p_material; + e->transform = p_transform; + e->skeleton = p_skeleton; + e->light_hash = 0; + e->light_count = p_light_count; + e->owner = p_owner; + e->material_overrides = p_material_overrides; - if (e->light_count>0) { + if (e->light_count > 0) { - SortArray<LightInstance*,LISort> light_sort; - light_sort.sort(p_light_instances,p_light_count); + SortArray<LightInstance *, LISort> light_sort; + light_sort.sort(p_light_instances, p_light_count); //@TODO OPTIOMIZE - for (int i=0;i<p_light_count;i++) { + for (int i = 0; i < p_light_count; i++) { - e->lights[i]=p_light_instances[i]; + e->lights[i] = p_light_instances[i]; - if (i==0) - e->light_hash=hash_djb2_one_64( make_uint64_t(e->lights[i]) ); + if (i == 0) + e->light_hash = hash_djb2_one_64(make_uint64_t(e->lights[i])); else - e->light_hash=hash_djb2_one_64( make_uint64_t(e->lights[i]),e->light_hash); + e->light_hash = hash_djb2_one_64(make_uint64_t(e->lights[i]), e->light_hash); } - } - } RenderList() { - for (int i=0;i<MAX_ELEMENTS;i++) - elements[i]=&_elements[i]; // assign elements + for (int i = 0; i < MAX_ELEMENTS; i++) + elements[i] = &_elements[i]; // assign elements } }; @@ -532,11 +526,9 @@ class RasterizerIPhone : public Rasterizer { float edge_size; FX(); - }; mutable RID_Owner<FX> fx_owner; - FX *scene_fx; CameraMatrix camera_projection; Transform camera_transform; @@ -547,16 +539,15 @@ class RasterizerIPhone : public Rasterizer { Plane camera_plane; - void _add_geometry( const Geometry* p_geometry, const Transform& p_world, uint32_t p_vertex_format, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides,const Skeleton* p_skeleton,GeometryOwner *p_owner); + void _add_geometry(const Geometry *p_geometry, const Transform &p_world, uint32_t p_vertex_format, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides, const Skeleton *p_skeleton, GeometryOwner *p_owner); void _render_list_forward(RenderList *p_render_list); - void _setup_light(LightInstance* p_instance, int p_idx); - void _setup_lights(LightInstance **p_lights,int p_light_count); - void _setup_material(const Geometry *p_geometry,const Material *p_material); - - void _setup_geometry(const Geometry *p_geometry, const Material* p_material); - void _render(const Geometry *p_geometry,const Material *p_material, const Skeleton* p_skeleton); + void _setup_light(LightInstance *p_instance, int p_idx); + void _setup_lights(LightInstance **p_lights, int p_light_count); + void _setup_material(const Geometry *p_geometry, const Material *p_material); + void _setup_geometry(const Geometry *p_geometry, const Material *p_material); + void _render(const Geometry *p_geometry, const Material *p_material, const Skeleton *p_skeleton); /*********/ /* FRAME */ @@ -570,14 +561,13 @@ class RasterizerIPhone : public Rasterizer { uint64_t frame; public: - /* TEXTURE API */ virtual RID texture_create(); - virtual void texture_allocate(RID p_texture,int p_width, int p_height,Image::Format p_format,uint32_t p_flags=VS::TEXTURE_FLAGS_DEFAULT); - virtual void texture_blit_rect(RID p_texture,int p_x,int p_y, const Image& p_image,VS::CubeMapSide p_cube_side=VS::CUBEMAP_LEFT); - virtual Image texture_get_rect(RID p_texture,int p_x,int p_y,int p_width, int p_height,VS::CubeMapSide p_cube_side=VS::CUBEMAP_LEFT) const; - virtual void texture_set_flags(RID p_texture,uint32_t p_flags); + virtual void texture_allocate(RID p_texture, int p_width, int p_height, Image::Format p_format, uint32_t p_flags = VS::TEXTURE_FLAGS_DEFAULT); + virtual void texture_blit_rect(RID p_texture, int p_x, int p_y, const Image &p_image, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT); + virtual Image texture_get_rect(RID p_texture, int p_x, int p_y, int p_width, int p_height, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) const; + virtual void texture_set_flags(RID p_texture, uint32_t p_flags); virtual uint32_t texture_get_flags(RID p_texture) const; virtual Image::Format texture_get_format(RID p_texture) const; virtual uint32_t texture_get_width(RID p_texture) const; @@ -588,81 +578,80 @@ public: virtual RID shader_create(); - virtual void shader_node_add(RID p_shader,VS::ShaderNodeType p_type,int p_id); - virtual void shader_node_remove(RID p_shader,int p_id); + virtual void shader_node_add(RID p_shader, VS::ShaderNodeType p_type, int p_id); + virtual void shader_node_remove(RID p_shader, int p_id); virtual void shader_node_change_type(RID p_shader, int p_id, VS::ShaderNodeType p_type); - virtual void shader_node_set_param(RID p_shader, int p_id, const Variant& p_value); + virtual void shader_node_set_param(RID p_shader, int p_id, const Variant &p_value); - virtual void shader_get_node_list(RID p_shader,List<int> *p_node_list) const; - virtual VS::ShaderNodeType shader_node_get_type(RID p_shader,int p_id) const; - virtual Variant shader_node_get_param(RID p_shader,int p_id) const; + virtual void shader_get_node_list(RID p_shader, List<int> *p_node_list) const; + virtual VS::ShaderNodeType shader_node_get_type(RID p_shader, int p_id) const; + virtual Variant shader_node_get_param(RID p_shader, int p_id) const; - virtual void shader_connect(RID p_shader,int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot); - virtual bool shader_is_connected(RID p_shader,int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot) const; - virtual void shader_disconnect(RID p_shader,int p_src_id,int p_src_slot, int p_dst_id,int p_dst_slot); + virtual void shader_connect(RID p_shader, int p_src_id, int p_src_slot, int p_dst_id, int p_dst_slot); + virtual bool shader_is_connected(RID p_shader, int p_src_id, int p_src_slot, int p_dst_id, int p_dst_slot) const; + virtual void shader_disconnect(RID p_shader, int p_src_id, int p_src_slot, int p_dst_id, int p_dst_slot); - virtual void shader_get_connections(RID p_shader,List<VS::ShaderConnection> *p_connections) const; + virtual void shader_get_connections(RID p_shader, List<VS::ShaderConnection> *p_connections) const; virtual void shader_clear(RID p_shader); /* COMMON MATERIAL API */ - virtual void material_set_param(RID p_material, const StringName& p_param, const Variant& p_value); - virtual Variant material_get_param(RID p_material, const StringName& p_param) const; + virtual void material_set_param(RID p_material, const StringName &p_param, const Variant &p_value); + virtual Variant material_get_param(RID p_material, const StringName &p_param) const; virtual void material_get_param_list(RID p_material, List<String> *p_param_list) const; - virtual void material_set_flag(RID p_material, VS::MaterialFlag p_flag,bool p_enabled); - virtual bool material_get_flag(RID p_material,VS::MaterialFlag p_flag) const; + virtual void material_set_flag(RID p_material, VS::MaterialFlag p_flag, bool p_enabled); + virtual bool material_get_flag(RID p_material, VS::MaterialFlag p_flag) const; - virtual void material_set_blend_mode(RID p_material,VS::MaterialBlendMode p_mode); + virtual void material_set_blend_mode(RID p_material, VS::MaterialBlendMode p_mode); virtual VS::MaterialBlendMode material_get_blend_mode(RID p_material) const; - virtual void material_set_line_width(RID p_material,float p_line_width); + virtual void material_set_line_width(RID p_material, float p_line_width); virtual float material_get_line_width(RID p_material) const; /* FIXED MATERIAL */ virtual RID material_create(); - virtual void fixed_material_set_parameter(RID p_material, VS::FixedSpatialMaterialParam p_parameter, const Variant& p_value); - virtual Variant fixed_material_get_parameter(RID p_material,VS::FixedSpatialMaterialParam p_parameter) const; + virtual void fixed_material_set_parameter(RID p_material, VS::FixedSpatialMaterialParam p_parameter, const Variant &p_value); + virtual Variant fixed_material_get_parameter(RID p_material, VS::FixedSpatialMaterialParam p_parameter) const; - virtual void fixed_material_set_texture(RID p_material,VS::FixedSpatialMaterialParam p_parameter, RID p_texture); - virtual RID fixed_material_get_texture(RID p_material,VS::FixedSpatialMaterialParam p_parameter) const; + virtual void fixed_material_set_texture(RID p_material, VS::FixedSpatialMaterialParam p_parameter, RID p_texture); + virtual RID fixed_material_get_texture(RID p_material, VS::FixedSpatialMaterialParam p_parameter) const; - virtual void fixed_material_set_detail_blend_mode(RID p_material,VS::MaterialBlendMode p_mode); + virtual void fixed_material_set_detail_blend_mode(RID p_material, VS::MaterialBlendMode p_mode); virtual VS::MaterialBlendMode fixed_material_get_detail_blend_mode(RID p_material) const; - virtual void fixed_material_set_texgen_mode(RID p_material,VS::FixedSpatialMaterialTexGenMode p_mode); + virtual void fixed_material_set_texgen_mode(RID p_material, VS::FixedSpatialMaterialTexGenMode p_mode); virtual VS::FixedSpatialMaterialTexGenMode fixed_material_get_texgen_mode(RID p_material) const; - virtual void fixed_material_set_texcoord_mode(RID p_material,VS::FixedSpatialMaterialParam p_parameter, VS::FixedSpatialMaterialTexCoordMode p_mode); - virtual VS::FixedSpatialMaterialTexCoordMode fixed_material_get_texcoord_mode(RID p_material,VS::FixedSpatialMaterialParam p_parameter) const; + virtual void fixed_material_set_texcoord_mode(RID p_material, VS::FixedSpatialMaterialParam p_parameter, VS::FixedSpatialMaterialTexCoordMode p_mode); + virtual VS::FixedSpatialMaterialTexCoordMode fixed_material_get_texcoord_mode(RID p_material, VS::FixedSpatialMaterialParam p_parameter) const; - virtual void fixed_material_set_uv_transform(RID p_material,const Transform& p_transform); + virtual void fixed_material_set_uv_transform(RID p_material, const Transform &p_transform); virtual Transform fixed_material_get_uv_transform(RID p_material) const; /* SHADER MATERIAL */ virtual RID shader_material_create() const; - virtual void shader_material_set_vertex_shader(RID p_material,RID p_shader,bool p_owned=false); + virtual void shader_material_set_vertex_shader(RID p_material, RID p_shader, bool p_owned = false); virtual RID shader_material_get_vertex_shader(RID p_material) const; - virtual void shader_material_set_fragment_shader(RID p_material,RID p_shader,bool p_owned=false); + virtual void shader_material_set_fragment_shader(RID p_material, RID p_shader, bool p_owned = false); virtual RID shader_material_get_fragment_shader(RID p_material) const; - /* MESH API */ virtual RID mesh_create(); - virtual void mesh_add_surface(RID p_mesh,VS::PrimitiveType p_primitive,uint32_t p_format,int p_array_len,int p_index_array_len=VS::NO_INDEX_ARRAY); + virtual void mesh_add_surface(RID p_mesh, VS::PrimitiveType p_primitive, uint32_t p_format, int p_array_len, int p_index_array_len = VS::NO_INDEX_ARRAY); - virtual Error mesh_surface_set_array(RID p_mesh, int p_surface,VS::ArrayType p_type,const Variant& p_array) ; - virtual Variant mesh_surface_get_array(RID p_mesh, int p_surface,VS::ArrayType p_type) const; + virtual Error mesh_surface_set_array(RID p_mesh, int p_surface, VS::ArrayType p_type, const Variant &p_array); + virtual Variant mesh_surface_get_array(RID p_mesh, int p_surface, VS::ArrayType p_type) const; - virtual void mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material,bool p_owned=false); + virtual void mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material, bool p_owned = false); virtual RID mesh_surface_get_material(RID p_mesh, int p_surface) const; virtual int mesh_surface_get_array_len(RID p_mesh, int p_surface) const; @@ -670,7 +659,7 @@ public: virtual uint32_t mesh_surface_get_format(RID p_mesh, int p_surface) const; virtual VS::PrimitiveType mesh_surface_get_primitive_type(RID p_mesh, int p_surface) const; - virtual void mesh_erase_surface(RID p_mesh,int p_index); + virtual void mesh_erase_surface(RID p_mesh, int p_index); virtual int mesh_get_surface_count(RID p_mesh) const; virtual AABB mesh_get_aabb(RID p_mesh) const; @@ -679,30 +668,29 @@ public: virtual RID multimesh_create(); - virtual void multimesh_set_instance_count(RID p_multimesh,int p_count); + virtual void multimesh_set_instance_count(RID p_multimesh, int p_count); virtual int multimesh_get_instance_count(RID p_multimesh) const; - virtual void multimesh_set_mesh(RID p_multimesh,RID p_mesh); - virtual void multimesh_set_aabb(RID p_multimesh,const AABB& p_aabb); - virtual void multimesh_instance_set_transform(RID p_multimesh,int p_index,const Transform& p_transform); - virtual void multimesh_instance_set_color(RID p_multimesh,int p_index,const Color& p_color); + virtual void multimesh_set_mesh(RID p_multimesh, RID p_mesh); + virtual void multimesh_set_aabb(RID p_multimesh, const AABB &p_aabb); + virtual void multimesh_instance_set_transform(RID p_multimesh, int p_index, const Transform &p_transform); + virtual void multimesh_instance_set_color(RID p_multimesh, int p_index, const Color &p_color); virtual RID multimesh_get_mesh(RID p_multimesh) const; virtual AABB multimesh_get_aabb(RID p_multimesh) const; - virtual Transform multimesh_instance_get_transform(RID p_multimesh,int p_index) const; - virtual Color multimesh_instance_get_color(RID p_multimesh,int p_index) const; + virtual Transform multimesh_instance_get_transform(RID p_multimesh, int p_index) const; + virtual Color multimesh_instance_get_color(RID p_multimesh, int p_index) const; /* POLY API */ virtual RID poly_create(); - virtual void poly_set_material(RID p_poly, RID p_material,bool p_owned=false); - virtual void poly_add_primitive(RID p_poly, const Vector<Vector3>& p_points,const Vector<Vector3>& p_normals,const Vector<Color>& p_colors,const Vector<Vector3>& p_uvs); + virtual void poly_set_material(RID p_poly, RID p_material, bool p_owned = false); + virtual void poly_add_primitive(RID p_poly, const Vector<Vector3> &p_points, const Vector<Vector3> &p_normals, const Vector<Color> &p_colors, const Vector<Vector3> &p_uvs); virtual void poly_clear(RID p_poly); virtual AABB poly_get_aabb(RID p_poly) const; - /* PARTICLES API */ virtual RID particles_create(); @@ -713,19 +701,19 @@ public: virtual void particles_set_emitting(RID p_particles, bool p_emitting); virtual bool particles_is_emitting(RID p_particles) const; - virtual void particles_set_visibility_aabb(RID p_particles, const AABB& p_visibility); + virtual void particles_set_visibility_aabb(RID p_particles, const AABB &p_visibility); virtual AABB particles_get_visibility_aabb(RID p_particles) const; - virtual void particles_set_emission_half_extents(RID p_particles, const Vector3& p_half_extents); + virtual void particles_set_emission_half_extents(RID p_particles, const Vector3 &p_half_extents); virtual Vector3 particles_get_emission_half_extents(RID p_particles) const; - virtual void particles_set_gravity_normal(RID p_particles, const Vector3& p_normal); + virtual void particles_set_gravity_normal(RID p_particles, const Vector3 &p_normal); virtual Vector3 particles_get_gravity_normal(RID p_particles) const; - virtual void particles_set_variable(RID p_particles, VS::ParticleVariable p_variable,float p_value); + virtual void particles_set_variable(RID p_particles, VS::ParticleVariable p_variable, float p_value); virtual float particles_get_variable(RID p_particles, VS::ParticleVariable p_variable) const; - virtual void particles_set_randomness(RID p_particles, VS::ParticleVariable p_variable,float p_randomness); + virtual void particles_set_randomness(RID p_particles, VS::ParticleVariable p_variable, float p_randomness); virtual float particles_get_randomness(RID p_particles, VS::ParticleVariable p_variable) const; virtual void particles_set_color_phase_pos(RID p_particles, int p_phase, float p_pos); @@ -734,19 +722,19 @@ public: virtual void particles_set_color_phases(RID p_particles, int p_phases); virtual int particles_get_color_phases(RID p_particles) const; - virtual void particles_set_color_phase_color(RID p_particles, int p_phase, const Color& p_color); + virtual void particles_set_color_phase_color(RID p_particles, int p_phase, const Color &p_color); virtual Color particles_get_color_phase_color(RID p_particles, int p_phase) const; virtual void particles_set_attractors(RID p_particles, int p_attractors); virtual int particles_get_attractors(RID p_particles) const; - virtual void particles_set_attractor_pos(RID p_particles, int p_attractor, const Vector3& p_pos); - virtual Vector3 particles_get_attractor_pos(RID p_particles,int p_attractor) const; + virtual void particles_set_attractor_pos(RID p_particles, int p_attractor, const Vector3 &p_pos); + virtual Vector3 particles_get_attractor_pos(RID p_particles, int p_attractor) const; virtual void particles_set_attractor_strength(RID p_particles, int p_attractor, float p_force); - virtual float particles_get_attractor_strength(RID p_particles,int p_attractor) const; + virtual float particles_get_attractor_strength(RID p_particles, int p_attractor) const; - virtual void particles_set_material(RID p_particles, RID p_material,bool p_owned=false); + virtual void particles_set_material(RID p_particles, RID p_material, bool p_owned = false); virtual RID particles_get_material(RID p_particles) const; virtual AABB particles_get_aabb(RID p_particles) const; @@ -758,10 +746,10 @@ public: virtual int beam_get_point_count(RID p_beam) const; virtual void beam_clear(RID p_beam); - virtual void beam_set_point(RID p_beam,int p_point,Vector3& p_pos); - virtual Vector3 beam_get_point(RID p_beam,int p_point) const; + virtual void beam_set_point(RID p_beam, int p_point, Vector3 &p_pos); + virtual Vector3 beam_get_point(RID p_beam, int p_point) const; - virtual void beam_set_primitive(RID p_beam,VS::BeamPrimitive p_primitive); + virtual void beam_set_primitive(RID p_beam, VS::BeamPrimitive p_primitive); virtual VS::BeamPrimitive beam_get_primitive(RID p_beam) const; virtual void beam_set_material(RID p_beam, RID p_material); @@ -771,27 +759,26 @@ public: /* SKELETON API */ virtual RID skeleton_create(); - virtual void skeleton_resize(RID p_skeleton,int p_bones); + virtual void skeleton_resize(RID p_skeleton, int p_bones); virtual int skeleton_get_bone_count(RID p_skeleton) const; - virtual void skeleton_bone_set_transform(RID p_skeleton,int p_bone, const Transform& p_transform); - virtual Transform skeleton_bone_get_transform(RID p_skeleton,int p_bone); - + virtual void skeleton_bone_set_transform(RID p_skeleton, int p_bone, const Transform &p_transform); + virtual Transform skeleton_bone_get_transform(RID p_skeleton, int p_bone); /* LIGHT API */ virtual RID light_create(VS::LightType p_type); virtual VS::LightType light_get_type(RID p_light) const; - virtual void light_set_color(RID p_light,VS::LightColor p_type, const Color& p_color); - virtual Color light_get_color(RID p_light,VS::LightColor p_type) const; + virtual void light_set_color(RID p_light, VS::LightColor p_type, const Color &p_color); + virtual Color light_get_color(RID p_light, VS::LightColor p_type) const; - virtual void light_set_shadow(RID p_light,bool p_enabled); + virtual void light_set_shadow(RID p_light, bool p_enabled); virtual bool light_has_shadow(RID p_light) const; - virtual void light_set_volumetric(RID p_light,bool p_enabled); + virtual void light_set_volumetric(RID p_light, bool p_enabled); virtual bool light_is_volumetric(RID p_light) const; - virtual void light_set_projector(RID p_light,RID p_texture); + virtual void light_set_projector(RID p_light, RID p_texture); virtual RID light_get_projector(RID p_light) const; virtual void light_set_var(RID p_light, VS::LightParam p_var, float p_value); @@ -799,43 +786,42 @@ public: virtual AABB light_get_aabb(RID p_poly) const; - virtual RID light_instance_create(RID p_light); - virtual void light_instance_set_transform(RID p_light_instance,const Transform& p_transform); + virtual void light_instance_set_transform(RID p_light_instance, const Transform &p_transform); virtual void light_instance_set_active_hint(RID p_light_instance); virtual bool light_instance_has_shadow(RID p_light_instance) const; virtual bool light_instance_assign_shadow(RID p_light_instance); virtual ShadowType light_instance_get_shadow_type(RID p_light_instance) const; virtual int light_instance_get_shadow_passes(RID p_light_instance) const; - virtual void light_instance_set_pssm_split_info(RID p_light_instance, int p_split, float p_near,float p_far, const CameraMatrix& p_camera, const Transform& p_transform); + virtual void light_instance_set_pssm_split_info(RID p_light_instance, int p_split, float p_near, float p_far, const CameraMatrix &p_camera, const Transform &p_transform); /* PARTICLES INSTANCE */ virtual RID particles_instance_create(RID p_particles); - virtual void particles_instance_set_transform(RID p_particles_instance,const Transform& p_transform); + virtual void particles_instance_set_transform(RID p_particles_instance, const Transform &p_transform); /* RENDER API */ /* all calls (inside begin/end shadow) are always warranted to be in the following order: */ virtual void begin_frame(); - virtual void set_viewport(const VS::ViewportRect& p_viewport); + virtual void set_viewport(const VS::ViewportRect &p_viewport); - virtual void begin_scene(RID p_fx=RID(),VS::ScenarioDebugMode p_debug=VS::SCENARIO_DEBUG_DISABLED); - virtual void begin_shadow_map( RID p_light_instance, int p_shadow_pass ); + virtual void begin_scene(RID p_fx = RID(), VS::ScenarioDebugMode p_debug = VS::SCENARIO_DEBUG_DISABLED); + virtual void begin_shadow_map(RID p_light_instance, int p_shadow_pass); - virtual void set_camera(const Transform& p_world,const CameraMatrix& p_projection); + virtual void set_camera(const Transform &p_world, const CameraMatrix &p_projection); - virtual void add_light( RID p_light_instance ); ///< all "add_light" calls happen before add_geometry calls + virtual void add_light(RID p_light_instance); ///< all "add_light" calls happen before add_geometry calls - typedef Map<StringName,Variant> ParamOverrideMap; + typedef Map<StringName, Variant> ParamOverrideMap; - virtual void add_mesh( RID p_mesh, const Transform* p_world, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides = NULL, RID p_skeleton=RID()); - virtual void add_multimesh( RID p_multimesh, const Transform* p_world, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides = NULL); - virtual void add_poly( RID p_poly, const Transform* p_world, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides = NULL); - virtual void add_beam( RID p_beam, const Transform* p_world, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides = NULL); - virtual void add_particles( RID p_particle_instance, const RID* p_light_instances, int p_light_count, const ParamOverrideMap* p_material_overrides = NULL); + virtual void add_mesh(RID p_mesh, const Transform *p_world, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides = NULL, RID p_skeleton = RID()); + virtual void add_multimesh(RID p_multimesh, const Transform *p_world, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides = NULL); + virtual void add_poly(RID p_poly, const Transform *p_world, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides = NULL); + virtual void add_beam(RID p_beam, const Transform *p_world, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides = NULL); + virtual void add_particles(RID p_particle_instance, const RID *p_light_instances, int p_light_count, const ParamOverrideMap *p_material_overrides = NULL); virtual void end_scene(); virtual void end_shadow_map(); @@ -846,40 +832,40 @@ public: virtual void canvas_begin(); virtual void canvas_set_transparency(float p_transparency); - virtual void canvas_set_rect(const Rect2& p_rect, bool p_clip); - virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width); - virtual void canvas_draw_rect(const Rect2& p_rect, bool p_region, const Rect2& p_source,bool p_tile,RID p_texture,const Color& p_modulate); - virtual void canvas_draw_style_box(const Rect2& p_rect, RID p_texture,const float *p_margins, bool p_draw_center=true); - virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture); + virtual void canvas_set_rect(const Rect2 &p_rect, bool p_clip); + virtual void canvas_draw_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width); + virtual void canvas_draw_rect(const Rect2 &p_rect, bool p_region, const Rect2 &p_source, bool p_tile, RID p_texture, const Color &p_modulate); + virtual void canvas_draw_style_box(const Rect2 &p_rect, RID p_texture, const float *p_margins, bool p_draw_center = true); + virtual void canvas_draw_primitive(const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, RID p_texture); /* FX */ virtual RID fx_create(); - virtual void fx_get_effects(RID p_fx,List<String> *p_effects) const; - virtual void fx_set_active(RID p_fx,const String& p_effect, bool p_active); - virtual bool fx_is_active(RID p_fx,const String& p_effect) const; - virtual void fx_get_effect_params(RID p_fx,const String& p_effect,List<PropertyInfo> *p_params) const; - virtual Variant fx_get_effect_param(RID p_fx,const String& p_effect,const String& p_param) const; - virtual void fx_set_effect_param(RID p_fx,const String& p_effect, const String& p_param, const Variant& p_pvalue); + virtual void fx_get_effects(RID p_fx, List<String> *p_effects) const; + virtual void fx_set_active(RID p_fx, const String &p_effect, bool p_active); + virtual bool fx_is_active(RID p_fx, const String &p_effect) const; + virtual void fx_get_effect_params(RID p_fx, const String &p_effect, List<PropertyInfo> *p_params) const; + virtual Variant fx_get_effect_param(RID p_fx, const String &p_effect, const String &p_param) const; + virtual void fx_set_effect_param(RID p_fx, const String &p_effect, const String &p_param, const Variant &p_pvalue); /*MISC*/ - virtual bool is_texture(const RID& p_rid) const; - virtual bool is_material(const RID& p_rid) const; - virtual bool is_mesh(const RID& p_rid) const; - virtual bool is_multimesh(const RID& p_rid) const; - virtual bool is_poly(const RID& p_rid) const; + virtual bool is_texture(const RID &p_rid) const; + virtual bool is_material(const RID &p_rid) const; + virtual bool is_mesh(const RID &p_rid) const; + virtual bool is_multimesh(const RID &p_rid) const; + virtual bool is_poly(const RID &p_rid) const; virtual bool is_particles(const RID &p_beam) const; virtual bool is_beam(const RID &p_beam) const; - virtual bool is_light(const RID& p_rid) const; - virtual bool is_light_instance(const RID& p_rid) const; - virtual bool is_particles_instance(const RID& p_rid) const; - virtual bool is_skeleton(const RID& p_rid) const; - virtual bool is_fx(const RID& p_rid) const; - virtual bool is_shader(const RID& p_rid) const; + virtual bool is_light(const RID &p_rid) const; + virtual bool is_light_instance(const RID &p_rid) const; + virtual bool is_particles_instance(const RID &p_rid) const; + virtual bool is_skeleton(const RID &p_rid) const; + virtual bool is_fx(const RID &p_rid) const; + virtual bool is_shader(const RID &p_rid) const; - virtual void free(const RID& p_rid) const; + virtual void free(const RID &p_rid) const; virtual void init(); virtual void finish(); diff --git a/platform/iphone/sem_iphone.cpp b/platform/iphone/sem_iphone.cpp index d8913feb5f..e74c696607 100644 --- a/platform/iphone/sem_iphone.cpp +++ b/platform/iphone/sem_iphone.cpp @@ -28,16 +28,15 @@ /*************************************************************************/ #include "sem_iphone.h" -#include <unistd.h> #include <fcntl.h> +#include <unistd.h> -void cgsem_init(cgsem_t*); -void cgsem_post(cgsem_t*); -void cgsem_wait(cgsem_t*); -void cgsem_destroy(cgsem_t*); +void cgsem_init(cgsem_t *); +void cgsem_post(cgsem_t *); +void cgsem_wait(cgsem_t *); +void cgsem_destroy(cgsem_t *); -void cgsem_init(cgsem_t *cgsem) -{ +void cgsem_init(cgsem_t *cgsem) { int flags, fd, i; pipe(cgsem->pipefd); @@ -52,31 +51,26 @@ void cgsem_init(cgsem_t *cgsem) } } -void cgsem_post(cgsem_t *cgsem) -{ +void cgsem_post(cgsem_t *cgsem) { const char buf = 1; write(cgsem->pipefd[1], &buf, 1); } -void cgsem_wait(cgsem_t *cgsem) -{ +void cgsem_wait(cgsem_t *cgsem) { char buf; read(cgsem->pipefd[0], &buf, 1); } -void cgsem_destroy(cgsem_t *cgsem) -{ +void cgsem_destroy(cgsem_t *cgsem) { close(cgsem->pipefd[1]); close(cgsem->pipefd[0]); } - #include "os/memory.h" #include <errno.h> - Error SemaphoreIphone::wait() { cgsem_wait(&sem); @@ -94,15 +88,14 @@ int SemaphoreIphone::get() const { return 0; } - Semaphore *SemaphoreIphone::create_semaphore_iphone() { - return memnew( SemaphoreIphone ); + return memnew(SemaphoreIphone); } void SemaphoreIphone::make_default() { - create_func=create_semaphore_iphone; + create_func = create_semaphore_iphone; } SemaphoreIphone::SemaphoreIphone() { @@ -110,11 +103,7 @@ SemaphoreIphone::SemaphoreIphone() { cgsem_init(&sem); } - SemaphoreIphone::~SemaphoreIphone() { cgsem_destroy(&sem); } - - - diff --git a/platform/iphone/sem_iphone.h b/platform/iphone/sem_iphone.h index e00dd8f3dd..8a87ab47ca 100644 --- a/platform/iphone/sem_iphone.h +++ b/platform/iphone/sem_iphone.h @@ -44,7 +44,6 @@ class SemaphoreIphone : public Semaphore { static Semaphore *create_semaphore_iphone(); public: - virtual Error wait(); virtual Error post(); virtual int get() const; @@ -53,8 +52,6 @@ public: SemaphoreIphone(); ~SemaphoreIphone(); - }; - #endif diff --git a/platform/iphone/view_controller.h b/platform/iphone/view_controller.h index f919c06af2..ca05818040 100644 --- a/platform/iphone/view_controller.h +++ b/platform/iphone/view_controller.h @@ -26,11 +26,10 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#import <UIKit/UIKit.h> #import <GameKit/GameKit.h> +#import <UIKit/UIKit.h> @interface ViewController : UIViewController <GKGameCenterControllerDelegate> { - }; - (BOOL)shouldAutorotateToInterfaceOrientation: diff --git a/platform/javascript/audio_driver_javascript.cpp b/platform/javascript/audio_driver_javascript.cpp index bff01d7c37..80bc7047ae 100644 --- a/platform/javascript/audio_driver_javascript.cpp +++ b/platform/javascript/audio_driver_javascript.cpp @@ -37,21 +37,17 @@ //AudioDriverJavaScript* AudioDriverJavaScript::s_ad=NULL; -const char* AudioDriverJavaScript::get_name() const { +const char *AudioDriverJavaScript::get_name() const { return "JavaScript"; } -Error AudioDriverJavaScript::init(){ +Error AudioDriverJavaScript::init() { return OK; - } -void AudioDriverJavaScript::start(){ - - - +void AudioDriverJavaScript::start() { } int AudioDriverJavaScript::get_mix_rate() const { @@ -59,18 +55,17 @@ int AudioDriverJavaScript::get_mix_rate() const { return 44100; } -AudioDriver::SpeakerMode AudioDriverJavaScript::get_speaker_mode() const{ +AudioDriver::SpeakerMode AudioDriverJavaScript::get_speaker_mode() const { return SPEAKER_MODE_STEREO; } -void AudioDriverJavaScript::lock(){ +void AudioDriverJavaScript::lock() { /* if (active && mutex) mutex->lock(); */ - } void AudioDriverJavaScript::unlock() { @@ -79,16 +74,10 @@ void AudioDriverJavaScript::unlock() { if (active && mutex) mutex->unlock(); */ - } -void AudioDriverJavaScript::finish(){ - +void AudioDriverJavaScript::finish() { } -AudioDriverJavaScript::AudioDriverJavaScript() -{ +AudioDriverJavaScript::AudioDriverJavaScript() { } - - - diff --git a/platform/javascript/audio_driver_javascript.h b/platform/javascript/audio_driver_javascript.h index 4c2064663a..ca5dba7e5c 100644 --- a/platform/javascript/audio_driver_javascript.h +++ b/platform/javascript/audio_driver_javascript.h @@ -35,20 +35,17 @@ class AudioDriverJavaScript : public AudioDriver { public: - - 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(); virtual void finish(); - AudioDriverJavaScript(); }; - #endif diff --git a/platform/javascript/audio_server_javascript.cpp b/platform/javascript/audio_server_javascript.cpp index bb238ede0c..7dfd562402 100644 --- a/platform/javascript/audio_server_javascript.cpp +++ b/platform/javascript/audio_server_javascript.cpp @@ -767,7 +767,7 @@ void AudioServerJavascript::driver_process_chunk(int p_frames) { int32_t stream_vol_scale=(stream_volume*stream_volume_scale*E->get()->volume_scale)*(1<<STREAM_SCALE_BITS); -#define STRSCALE(m_val) ((((m_val>>STREAM_SCALE_BITS)*stream_vol_scale)>>8)/8388608.0) +#define STRSCALE(m_val) ((((m_val >> STREAM_SCALE_BITS) * stream_vol_scale) >> 8) / 8388608.0) switch(channels) { case 1: { diff --git a/platform/javascript/dom_keys.h b/platform/javascript/dom_keys.h index 5ef212ce4a..53a2705577 100644 --- a/platform/javascript/dom_keys.h +++ b/platform/javascript/dom_keys.h @@ -236,7 +236,7 @@ int dom2godot_scancode(int dom_keycode) { return KEY_F1 + (dom_keycode - DOM_VK_F1); } - switch(dom_keycode) { + switch (dom_keycode) { //case DOM_VK_CANCEL: return KEY_UNKNOWN; case DOM_VK_HELP: return KEY_HELP; case DOM_VK_BACK_SPACE: return KEY_BACKSPACE; @@ -258,7 +258,8 @@ int dom2godot_scancode(int dom_keycode) { return KEY_ALT; case DOM_VK_PAUSE: return KEY_PAUSE; - case DOM_VK_CAPS_LOCK: return KEY_CAPSLOCK; + case DOM_VK_CAPS_LOCK: + return KEY_CAPSLOCK; /* case DOM_VK_KANA: return KEY_UNKNOWN; @@ -270,7 +271,8 @@ int dom2godot_scancode(int dom_keycode) { case DOM_VK_KANJI: return KEY_UNKNOWN; */ - case DOM_VK_ESCAPE: return KEY_ESCAPE; + case DOM_VK_ESCAPE: + return KEY_ESCAPE; /* case DOM_VK_CONVERT: return KEY_UNKNOWN; case DOM_VK_NONCONVERT: return KEY_UNKNOWN; @@ -286,7 +288,8 @@ int dom2godot_scancode(int dom_keycode) { case DOM_VK_LEFT: return KEY_LEFT; case DOM_VK_UP: return KEY_UP; case DOM_VK_RIGHT: return KEY_RIGHT; - case DOM_VK_DOWN: return KEY_DOWN; + case DOM_VK_DOWN: + return KEY_DOWN; //case DOM_VK_SELECT: return KEY_UNKNOWN; @@ -303,15 +306,18 @@ int dom2godot_scancode(int dom_keycode) { return KEY_META; case DOM_VK_CONTEXT_MENU: return KEY_MENU; - case DOM_VK_SLEEP: return KEY_STANDBY; + case DOM_VK_SLEEP: + return KEY_STANDBY; // these are numpad keys according to MDN case DOM_VK_MULTIPLY: return KEY_KP_MULTIPLY; case DOM_VK_ADD: return KEY_KP_ADD; - case DOM_VK_SEPARATOR: return KEY_KP_PERIOD; // good enough? + case DOM_VK_SEPARATOR: + return KEY_KP_PERIOD; // good enough? case DOM_VK_SUBTRACT: return KEY_KP_SUBTRACT; case DOM_VK_DECIMAL: return KEY_KP_PERIOD; - case DOM_VK_DIVIDE: return KEY_KP_DIVIDE; + case DOM_VK_DIVIDE: + return KEY_KP_DIVIDE; /* case DOM_VK_F17: return KEY_UNKNOWN; @@ -325,7 +331,8 @@ int dom2godot_scancode(int dom_keycode) { */ case DOM_VK_NUM_LOCK: return KEY_NUMLOCK; - case DOM_VK_SCROLL_LOCK: return KEY_SCROLLLOCK; + case DOM_VK_SCROLL_LOCK: + return KEY_SCROLLLOCK; /* case DOM_VK_WIN_OEM_FJ_JISHO: return KEY_UNKNOWN; @@ -364,7 +371,8 @@ int dom2godot_scancode(int dom_keycode) { case DOM_VK_OPEN_BRACKET: return KEY_BRACKETLEFT; case DOM_VK_BACK_SLASH: return KEY_BACKSLASH; case DOM_VK_CLOSE_BRACKET: return KEY_BRACKETRIGHT; - case DOM_VK_QUOTE: return KEY_APOSTROPHE; + case DOM_VK_QUOTE: + return KEY_APOSTROPHE; // rest is OEM/unusual diff --git a/platform/javascript/export/export.cpp b/platform/javascript/export/export.cpp index b9ef63fe2f..4fdb6f39c8 100644 --- a/platform/javascript/export/export.cpp +++ b/platform/javascript/export/export.cpp @@ -26,19 +26,18 @@ /* 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/javascript/logo.h" #include "string.h" - +#include "version.h" #if 0 class EditorExportPlatformJavaScript : public EditorExportPlatform { @@ -420,11 +419,6 @@ EditorExportPlatformJavaScript::~EditorExportPlatformJavaScript() { #endif void register_javascript_exporter() { - //Ref<EditorExportPlatformJavaScript> exporter = Ref<EditorExportPlatformJavaScript>( memnew(EditorExportPlatformJavaScript) ); //EditorImportExport::get_singleton()->add_export_platform(exporter); - - } - - diff --git a/platform/javascript/javascript_eval.cpp b/platform/javascript/javascript_eval.cpp index d84c8bf040..897c2276bb 100644 --- a/platform/javascript/javascript_eval.cpp +++ b/platform/javascript/javascript_eval.cpp @@ -31,16 +31,20 @@ #include "javascript_eval.h" #include "emscripten.h" -JavaScript *JavaScript::singleton=NULL; +JavaScript *JavaScript::singleton = NULL; JavaScript *JavaScript::get_singleton() { return singleton; } -Variant JavaScript::eval(const String& p_code, bool p_use_global_exec_context) { +Variant JavaScript::eval(const String &p_code, bool p_use_global_exec_context) { - union { int i; double d; char* s; } js_data[4]; + union { + int i; + double d; + char *s; + } js_data[4]; /* clang-format off */ Variant::Type return_type = static_cast<Variant::Type>(EM_ASM_INT({ @@ -127,21 +131,20 @@ Variant JavaScript::eval(const String& p_code, bool p_use_global_exec_context) { }, js_data, sizeof *js_data, p_code.utf8().get_data(), p_use_global_exec_context)); /* clang-format on */ - switch(return_type) { + switch (return_type) { case Variant::BOOL: return !!js_data->i; case Variant::INT: return js_data->i; case Variant::REAL: return js_data->d; - case Variant::STRING: - { - String str = String::utf8(js_data->s); - /* clang-format off */ + case Variant::STRING: { + String str = String::utf8(js_data->s); + /* clang-format off */ EM_ASM_({ _free($0); }, js_data->s); - /* clang-format on */ - return str; - } + /* clang-format on */ + return str; + } case Variant::VECTOR2: return Vector2(js_data[0].d, js_data[1].d); case Variant::VECTOR3: @@ -149,7 +152,7 @@ Variant JavaScript::eval(const String& p_code, bool p_use_global_exec_context) { case Variant::RECT2: return Rect2(js_data[0].d, js_data[1].d, js_data[2].d, js_data[3].d); case Variant::COLOR: - return Color(js_data[0].d/255., js_data[1].d/255., js_data[2].d/255., js_data[3].d); + return Color(js_data[0].d / 255., js_data[1].d / 255., js_data[2].d / 255., js_data[3].d); } return Variant(); } @@ -166,7 +169,6 @@ JavaScript::JavaScript() { } JavaScript::~JavaScript() { - } #endif // JAVASCRIPT_EVAL_ENABLED diff --git a/platform/javascript/javascript_eval.h b/platform/javascript/javascript_eval.h index 679224d519..0050b855d8 100644 --- a/platform/javascript/javascript_eval.h +++ b/platform/javascript/javascript_eval.h @@ -35,16 +35,15 @@ class JavaScript : public Object { private: - GDCLASS( JavaScript, Object ); + GDCLASS(JavaScript, Object); static JavaScript *singleton; - protected: static void _bind_methods(); public: - Variant eval(const String& p_code, bool p_use_global_exec_context = false); + Variant eval(const String &p_code, bool p_use_global_exec_context = false); static JavaScript *get_singleton(); JavaScript(); diff --git a/platform/javascript/javascript_main.cpp b/platform/javascript/javascript_main.cpp index 076f93f0df..00e531baa1 100644 --- a/platform/javascript/javascript_main.cpp +++ b/platform/javascript/javascript_main.cpp @@ -26,92 +26,88 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include <GL/glut.h> -#include "os_javascript.h" -#include "main/main.h" -#include "io/resource_loader.h" #include "emscripten.h" +#include "io/resource_loader.h" +#include "main/main.h" +#include "os_javascript.h" +#include <GL/glut.h> #include <string.h> -OS_JavaScript *os=NULL; +OS_JavaScript *os = NULL; -static void _gfx_init(void *ud,bool gl2,int w, int h,bool fs) { +static void _gfx_init(void *ud, bool gl2, int w, int h, bool fs) { glutInitWindowSize(w, h); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutCreateWindow("godot"); - } -static uint32_t _mouse_button_mask=0; +static uint32_t _mouse_button_mask = 0; static void _glut_mouse_button(int button, int state, int x, int y) { InputEvent ev; - ev.type=InputEvent::MOUSE_BUTTON; - switch(button) { - case GLUT_LEFT_BUTTON: ev.mouse_button.button_index=BUTTON_LEFT; break; - case GLUT_MIDDLE_BUTTON: ev.mouse_button.button_index=BUTTON_MIDDLE; break; - case GLUT_RIGHT_BUTTON: ev.mouse_button.button_index=BUTTON_RIGHT; break; - case 3: ev.mouse_button.button_index=BUTTON_WHEEL_UP; break; - case 4: ev.mouse_button.button_index=BUTTON_WHEEL_DOWN; break; + ev.type = InputEvent::MOUSE_BUTTON; + switch (button) { + case GLUT_LEFT_BUTTON: ev.mouse_button.button_index = BUTTON_LEFT; break; + case GLUT_MIDDLE_BUTTON: ev.mouse_button.button_index = BUTTON_MIDDLE; break; + case GLUT_RIGHT_BUTTON: ev.mouse_button.button_index = BUTTON_RIGHT; break; + case 3: ev.mouse_button.button_index = BUTTON_WHEEL_UP; break; + case 4: ev.mouse_button.button_index = BUTTON_WHEEL_DOWN; break; } + ev.mouse_button.pressed = state == GLUT_DOWN; + ev.mouse_button.x = x; + ev.mouse_button.y = y; + ev.mouse_button.global_x = x; + ev.mouse_button.global_y = y; - ev.mouse_button.pressed=state==GLUT_DOWN; - ev.mouse_button.x=x; - ev.mouse_button.y=y; - ev.mouse_button.global_x=x; - ev.mouse_button.global_y=y; - - if (ev.mouse_button.button_index<4) { + if (ev.mouse_button.button_index < 4) { if (ev.mouse_button.pressed) { - _mouse_button_mask |= 1 << (ev.mouse_button.button_index-1); + _mouse_button_mask |= 1 << (ev.mouse_button.button_index - 1); } else { - _mouse_button_mask &= ~(1 << (ev.mouse_button.button_index-1)); + _mouse_button_mask &= ~(1 << (ev.mouse_button.button_index - 1)); } } - ev.mouse_button.button_mask=_mouse_button_mask; + ev.mouse_button.button_mask = _mouse_button_mask; uint32_t m = glutGetModifiers(); - ev.mouse_button.mod.alt=(m&GLUT_ACTIVE_ALT)!=0; - ev.mouse_button.mod.shift=(m&GLUT_ACTIVE_SHIFT)!=0; - ev.mouse_button.mod.control=(m&GLUT_ACTIVE_CTRL)!=0; + ev.mouse_button.mod.alt = (m & GLUT_ACTIVE_ALT) != 0; + ev.mouse_button.mod.shift = (m & GLUT_ACTIVE_SHIFT) != 0; + ev.mouse_button.mod.control = (m & GLUT_ACTIVE_CTRL) != 0; os->push_input(ev); - if (ev.mouse_button.button_index==BUTTON_WHEEL_UP || ev.mouse_button.button_index==BUTTON_WHEEL_DOWN) { + if (ev.mouse_button.button_index == BUTTON_WHEEL_UP || ev.mouse_button.button_index == BUTTON_WHEEL_DOWN) { // GLUT doesn't send release events for mouse wheel, so send manually - ev.mouse_button.pressed=false; + ev.mouse_button.pressed = false; os->push_input(ev); } } - -static int _glut_prev_x=0; -static int _glut_prev_y=0; +static int _glut_prev_x = 0; +static int _glut_prev_y = 0; static void _glut_mouse_motion(int x, int y) { InputEvent ev; - ev.type=InputEvent::MOUSE_MOTION; - ev.mouse_motion.button_mask=_mouse_button_mask; - ev.mouse_motion.x=x; - ev.mouse_motion.y=y; - ev.mouse_motion.global_x=x; - ev.mouse_motion.global_y=y; - ev.mouse_motion.relative_x=x-_glut_prev_x; - ev.mouse_motion.relative_y=y-_glut_prev_y; - _glut_prev_x=x; - _glut_prev_y=y; + ev.type = InputEvent::MOUSE_MOTION; + ev.mouse_motion.button_mask = _mouse_button_mask; + ev.mouse_motion.x = x; + ev.mouse_motion.y = y; + ev.mouse_motion.global_x = x; + ev.mouse_motion.global_y = y; + ev.mouse_motion.relative_x = x - _glut_prev_x; + ev.mouse_motion.relative_y = y - _glut_prev_y; + _glut_prev_x = x; + _glut_prev_y = y; uint32_t m = glutGetModifiers(); - ev.mouse_motion.mod.alt=(m&GLUT_ACTIVE_ALT)!=0; - ev.mouse_motion.mod.shift=(m&GLUT_ACTIVE_SHIFT)!=0; - ev.mouse_motion.mod.control=(m&GLUT_ACTIVE_CTRL)!=0; + ev.mouse_motion.mod.alt = (m & GLUT_ACTIVE_ALT) != 0; + ev.mouse_motion.mod.shift = (m & GLUT_ACTIVE_SHIFT) != 0; + ev.mouse_motion.mod.control = (m & GLUT_ACTIVE_CTRL) != 0; os->push_input(ev); - } static void _gfx_idle() { @@ -119,47 +115,43 @@ static void _gfx_idle() { glutPostRedisplay(); } -int start_step=0; +int start_step = 0; static void _godot_draw(void) { - if (start_step==1) { - start_step=2; + if (start_step == 1) { + start_step = 2; Main::start(); - os->main_loop_begin(); + os->main_loop_begin(); } - if (start_step==2) { + if (start_step == 2) { os->main_loop_iterate(); } glutSwapBuffers(); } - - extern "C" { void main_after_fs_sync() { - start_step=1; + start_step = 1; } - } int main(int argc, char *argv[]) { - /* Initialize the window */ printf("let it go dude!\n"); glutInit(&argc, argv); - os = new OS_JavaScript(_gfx_init,NULL,NULL); + os = new OS_JavaScript(_gfx_init, NULL, NULL); #if 0 char *args[]={"-test","gui","-v",NULL}; Error err = Main::setup("apk",3,args); #else - char *args[]={"-main_pack","data.pck",NULL}; //pass location of main pack manually, because it wont get an executable name - Error err = Main::setup("",2,args); + char *args[] = { "-main_pack", "data.pck", NULL }; //pass location of main pack manually, because it wont get an executable name + Error err = Main::setup("", 2, args); #endif ResourceLoader::set_abort_on_missing_resources(false); //ease up compatibility @@ -168,13 +160,11 @@ int main(int argc, char *argv[]) { glutMotionFunc(_glut_mouse_motion); glutPassiveMotionFunc(_glut_mouse_motion); - - - /* Set up glut callback functions */ - glutIdleFunc (_gfx_idle); -// glutReshapeFunc(gears_reshape); + /* Set up glut callback functions */ + glutIdleFunc(_gfx_idle); + // glutReshapeFunc(gears_reshape); glutDisplayFunc(_godot_draw); - //glutSpecialFunc(gears_special); + //glutSpecialFunc(gears_special); //mount persistent file system /* clang-format off */ @@ -200,12 +190,9 @@ int main(int argc, char *argv[]) { glutMainLoop(); - - return 0; } - /* * *09] <azakai|2__> reduz: yes, define TOTAL_MEMORY on Module. for example var Module = { TOTAL_MEMORY: 12345.. }; before the main diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp index d570d64acf..83072c30aa 100644 --- a/platform/javascript/os_javascript.cpp +++ b/platform/javascript/os_javascript.cpp @@ -28,24 +28,24 @@ /*************************************************************************/ #include "os_javascript.h" -#include "drivers/gles3/rasterizer_gles3.h" +#include "core/global_config.h" #include "core/io/file_access_buffered_fa.h" -#include "drivers/unix/file_access_unix.h" +#include "dom_keys.h" +#include "drivers/gles3/rasterizer_gles3.h" #include "drivers/unix/dir_access_unix.h" -#include "servers/visual/visual_server_raster.h" +#include "drivers/unix/file_access_unix.h" #include "main/main.h" -#include "core/global_config.h" -#include "dom_keys.h" +#include "servers/visual/visual_server_raster.h" -#include <stdlib.h> #include <emscripten.h> +#include <stdlib.h> int OS_JavaScript::get_video_driver_count() const { return 1; } -const char * OS_JavaScript::get_video_driver_name(int p_driver) const { +const char *OS_JavaScript::get_video_driver_name(int p_driver) const { return "GLES3"; } @@ -60,7 +60,7 @@ int OS_JavaScript::get_audio_driver_count() const { return 1; } -const char * OS_JavaScript::get_audio_driver_name(int p_driver) const { +const char *OS_JavaScript::get_audio_driver_name(int p_driver) const { return "JavaScript"; } @@ -69,20 +69,19 @@ void OS_JavaScript::initialize_core() { OS_Unix::initialize_core(); FileAccess::make_default<FileAccessBufferedFA<FileAccessUnix> >(FileAccess::ACCESS_RESOURCES); - } -void OS_JavaScript::set_opengl_extensions(const char* p_gl_extensions) { +void OS_JavaScript::set_opengl_extensions(const char *p_gl_extensions) { ERR_FAIL_COND(!p_gl_extensions); - gl_extensions=p_gl_extensions; + gl_extensions = p_gl_extensions; } static EM_BOOL _browser_resize_callback(int event_type, const EmscriptenUiEvent *ui_event, void *user_data) { - ERR_FAIL_COND_V(event_type!=EMSCRIPTEN_EVENT_RESIZE, false); + ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_RESIZE, false); - OS_JavaScript* os = static_cast<OS_JavaScript*>(user_data); + OS_JavaScript *os = static_cast<OS_JavaScript *>(user_data); // the order in which _browser_resize_callback and // _fullscreen_change_callback are called is browser-dependent, @@ -102,13 +101,13 @@ static Size2 _windowed_size; static EM_BOOL _fullscreen_change_callback(int event_type, const EmscriptenFullscreenChangeEvent *event, void *user_data) { - ERR_FAIL_COND_V(event_type!=EMSCRIPTEN_EVENT_FULLSCREENCHANGE, false); + ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_FULLSCREENCHANGE, false); - OS_JavaScript* os = static_cast<OS_JavaScript*>(user_data); + OS_JavaScript *os = static_cast<OS_JavaScript *>(user_data); String id = String::utf8(event->id); // empty id is canvas - if (id.empty() || id=="canvas") { + if (id.empty() || id == "canvas") { OS::VideoMode vm = os->get_video_mode(); // this event property is the only reliable information on @@ -120,8 +119,7 @@ static EM_BOOL _fullscreen_change_callback(int event_type, const EmscriptenFulls vm.height = event->screenHeight; os->set_video_mode(vm); emscripten_set_canvas_size(vm.width, vm.height); - } - else { + } else { os->set_video_mode(vm); if (!os->is_window_maximized()) { os->set_window_size(_windowed_size); @@ -144,12 +142,12 @@ static InputEvent _setup_key_event(const EmscriptenKeyboardEvent *emscripten_eve String unicode = String::utf8(emscripten_event->key); // check if empty or multi-character (e.g. `CapsLock`) - if (unicode.length()!=1) { + if (unicode.length() != 1) { // might be empty as well, but better than nonsense unicode = String::utf8(emscripten_event->charValue); } - if (unicode.length()==1) { - ev.key.unicode=unicode[0]; + if (unicode.length() == 1) { + ev.key.unicode = unicode[0]; } return ev; @@ -159,59 +157,58 @@ static InputEvent deferred_key_event; static EM_BOOL _keydown_callback(int event_type, const EmscriptenKeyboardEvent *key_event, void *user_data) { - ERR_FAIL_COND_V(event_type!=EMSCRIPTEN_EVENT_KEYDOWN, false); + ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_KEYDOWN, false); InputEvent ev = _setup_key_event(key_event); ev.key.pressed = true; - if (ev.key.unicode==0 && keycode_has_unicode(ev.key.scancode)) { + if (ev.key.unicode == 0 && keycode_has_unicode(ev.key.scancode)) { // defer to keypress event for legacy unicode retrieval deferred_key_event = ev; return false; // do not suppress keypress event } - static_cast<OS_JavaScript*>(user_data)->push_input(ev); + static_cast<OS_JavaScript *>(user_data)->push_input(ev); return true; } static EM_BOOL _keypress_callback(int event_type, const EmscriptenKeyboardEvent *key_event, void *user_data) { - ERR_FAIL_COND_V(event_type!=EMSCRIPTEN_EVENT_KEYPRESS, false); + ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_KEYPRESS, false); deferred_key_event.key.unicode = key_event->charCode; - static_cast<OS_JavaScript*>(user_data)->push_input(deferred_key_event); + static_cast<OS_JavaScript *>(user_data)->push_input(deferred_key_event); return true; } static EM_BOOL _keyup_callback(int event_type, const EmscriptenKeyboardEvent *key_event, void *user_data) { - ERR_FAIL_COND_V(event_type!=EMSCRIPTEN_EVENT_KEYUP, false); + ERR_FAIL_COND_V(event_type != EMSCRIPTEN_EVENT_KEYUP, false); InputEvent ev = _setup_key_event(key_event); ev.key.pressed = false; - static_cast<OS_JavaScript*>(user_data)->push_input(ev); - return ev.key.scancode!=KEY_UNKNOWN && ev.key.scancode!=0; - + static_cast<OS_JavaScript *>(user_data)->push_input(ev); + return ev.key.scancode != KEY_UNKNOWN && ev.key.scancode != 0; } static EM_BOOL joy_callback_func(int p_type, const EmscriptenGamepadEvent *p_event, void *p_user) { - OS_JavaScript *os = (OS_JavaScript*) OS::get_singleton(); + OS_JavaScript *os = (OS_JavaScript *)OS::get_singleton(); if (os) { return os->joy_connection_changed(p_type, p_event); } return false; } -void OS_JavaScript::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) { +void OS_JavaScript::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { print_line("Init OS"); if (gfx_init_func) - gfx_init_func(gfx_init_ud,use_gl2,p_desired.width,p_desired.height,p_desired.fullscreen); + gfx_init_func(gfx_init_ud, use_gl2, p_desired.width, p_desired.height, p_desired.fullscreen); // nothing to do here, can't fulfil fullscreen request due to // browser security, window size is already set from HTML - video_mode=p_desired; - video_mode.fullscreen=false; - _windowed_size=get_window_size(); + video_mode = p_desired; + video_mode.fullscreen = false; + _windowed_size = get_window_size(); // find locale, emscripten only sets "C" char locale_ptr[16]; @@ -248,24 +245,29 @@ void OS_JavaScript::initialize(const VideoMode& p_desired,int p_video_driver,int print_line("Init VS"); - visual_server = memnew( VisualServerRaster() ); + visual_server = memnew(VisualServerRaster()); visual_server->cursor_set_visible(false, 0); print_line("Init Physicsserver"); - physics_server = memnew( PhysicsServerSW ); + physics_server = memnew(PhysicsServerSW); physics_server->init(); - physics_2d_server = memnew( Physics2DServerSW ); + physics_2d_server = memnew(Physics2DServerSW); physics_2d_server->init(); - input = memnew( InputDefault ); - - power_manager = memnew( PowerJavascript ); + input = memnew(InputDefault); + + power_manager = memnew(PowerJavascript); -#define EM_CHECK(ev) if (result!=EMSCRIPTEN_RESULT_SUCCESS)\ +#define EM_CHECK(ev) \ + if (result != EMSCRIPTEN_RESULT_SUCCESS) \ ERR_PRINTS("Error while setting " #ev " callback: Code " + itos(result)) -#define SET_EM_CALLBACK(ev, cb) result = emscripten_set_##ev##_callback(NULL, this, true, &cb); EM_CHECK(ev) -#define SET_EM_CALLBACK_NODATA(ev, cb) result = emscripten_set_##ev##_callback(NULL, true, &cb); EM_CHECK(ev) +#define SET_EM_CALLBACK(ev, cb) \ + result = emscripten_set_##ev##_callback(NULL, this, true, &cb); \ + EM_CHECK(ev) +#define SET_EM_CALLBACK_NODATA(ev, cb) \ + result = emscripten_set_##ev##_callback(NULL, true, &cb); \ + EM_CHECK(ev) EMSCRIPTEN_RESULT result; SET_EM_CALLBACK(keydown, _keydown_callback) @@ -288,16 +290,15 @@ void OS_JavaScript::initialize(const VideoMode& p_desired,int p_video_driver,int visual_server->init(); } -void OS_JavaScript::set_main_loop( MainLoop * p_main_loop ) { +void OS_JavaScript::set_main_loop(MainLoop *p_main_loop) { - main_loop=p_main_loop; + main_loop = p_main_loop; input->set_main_loop(p_main_loop); - } void OS_JavaScript::delete_main_loop() { - memdelete( main_loop ); + memdelete(main_loop); } void OS_JavaScript::finalize() { @@ -305,7 +306,7 @@ void OS_JavaScript::finalize() { memdelete(input); } -void OS_JavaScript::alert(const String& p_alert,const String& p_title) { +void OS_JavaScript::alert(const String &p_alert, const String &p_title) { /* clang-format off */ EM_ASM_({ @@ -314,7 +315,6 @@ void OS_JavaScript::alert(const String& p_alert,const String& p_title) { /* clang-format on */ } - void OS_JavaScript::set_mouse_show(bool p_show) { //javascript has no mouse... @@ -341,7 +341,7 @@ int OS_JavaScript::get_mouse_button_state() const { return last_button_mask; } -void OS_JavaScript::set_window_title(const String& p_title) { +void OS_JavaScript::set_window_title(const String &p_title) { /* clang-format off */ EM_ASM_({ @@ -354,7 +354,7 @@ void OS_JavaScript::set_window_title(const String& p_title) { //void set_clipboard(const String& p_text); //String get_clipboard() const; -void OS_JavaScript::set_video_mode(const VideoMode& p_video_mode,int p_screen) { +void OS_JavaScript::set_video_mode(const VideoMode &p_video_mode, int p_screen) { video_mode = p_video_mode; } @@ -366,11 +366,11 @@ OS::VideoMode OS_JavaScript::get_video_mode(int p_screen) const { Size2 OS_JavaScript::get_screen_size(int p_screen) const { - ERR_FAIL_COND_V(p_screen!=0, Size2()); + ERR_FAIL_COND_V(p_screen != 0, Size2()); EmscriptenFullscreenChangeEvent ev; EMSCRIPTEN_RESULT result = emscripten_get_fullscreen_status(&ev); - ERR_FAIL_COND_V(result!=EMSCRIPTEN_RESULT_SUCCESS, Size2()); + ERR_FAIL_COND_V(result != EMSCRIPTEN_RESULT_SUCCESS, Size2()); return Size2(ev.screenWidth, ev.screenHeight); } @@ -389,7 +389,7 @@ void OS_JavaScript::set_window_size(const Size2 p_size) { Size2 OS_JavaScript::get_window_size() const { int canvas[3]; - emscripten_get_canvas_size(canvas, canvas+1, canvas+2); + emscripten_get_canvas_size(canvas, canvas + 1, canvas + 2); return Size2(canvas[0], canvas[1]); } @@ -401,23 +401,21 @@ void OS_JavaScript::set_window_maximized(bool p_enabled) { if (is_window_fullscreen()) { // _browser_resize callback will set canvas size set_window_fullscreen(false); - } - else { + } else { /* clang-format off */ video_mode.width = EM_ASM_INT_V(return window.innerWidth); video_mode.height = EM_ASM_INT_V(return window.innerHeight); /* clang-format on */ emscripten_set_canvas_size(video_mode.width, video_mode.height); } - } - else { + } else { set_window_size(_windowed_size); } } void OS_JavaScript::set_window_fullscreen(bool p_enable) { - if (p_enable==is_window_fullscreen()) { + if (p_enable == is_window_fullscreen()) { return; } @@ -428,10 +426,9 @@ void OS_JavaScript::set_window_fullscreen(bool p_enable) { /* clang-format off */ EM_ASM(Module.requestFullscreen(false, false);); /* clang-format on */ - } - else { + } else { result = emscripten_exit_fullscreen(); - if (result!=EMSCRIPTEN_RESULT_SUCCESS) { + if (result != EMSCRIPTEN_RESULT_SUCCESS) { ERR_PRINTS("Failed to exit fullscreen: Code " + itos(result)); } } @@ -442,7 +439,7 @@ bool OS_JavaScript::is_window_fullscreen() const { return video_mode.fullscreen; } -void OS_JavaScript::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const { +void OS_JavaScript::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const { Size2 screen = get_screen_size(); p_list->push_back(OS::VideoMode(screen.width, screen.height, true)); @@ -478,14 +475,14 @@ bool OS_JavaScript::main_loop_iterate() { if (!main_loop) return false; - if (time_to_save_sync>=0) { + if (time_to_save_sync >= 0) { int64_t newtime = get_ticks_msec(); int64_t elapsed = newtime - last_sync_time; - last_sync_time=newtime; + last_sync_time = newtime; - time_to_save_sync-=elapsed; + time_to_save_sync -= elapsed; - if (time_to_save_sync<0) { + if (time_to_save_sync < 0) { //time to sync, for real /* clang-format off */ EM_ASM( @@ -495,8 +492,6 @@ bool OS_JavaScript::main_loop_iterate() { ); /* clang-format on */ } - - } process_joypads(); return Main::iteration(); @@ -506,7 +501,6 @@ void OS_JavaScript::main_loop_end() { if (main_loop) main_loop->finish(); - } void OS_JavaScript::main_loop_focusout() { @@ -514,186 +508,173 @@ void OS_JavaScript::main_loop_focusout() { if (main_loop) main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); //audio_driver_javascript.set_pause(true); - } -void OS_JavaScript::main_loop_focusin(){ +void OS_JavaScript::main_loop_focusin() { if (main_loop) main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN); //audio_driver_javascript.set_pause(false); - } -void OS_JavaScript::push_input(const InputEvent& p_ev) { +void OS_JavaScript::push_input(const InputEvent &p_ev) { InputEvent ev = p_ev; - ev.ID=last_id++; - if (ev.type==InputEvent::MOUSE_MOTION) { + ev.ID = last_id++; + if (ev.type == InputEvent::MOUSE_MOTION) { input->set_mouse_pos(Point2(ev.mouse_motion.x, ev.mouse_motion.y)); - } - else if (ev.type==InputEvent::MOUSE_BUTTON) { + } else if (ev.type == InputEvent::MOUSE_BUTTON) { last_button_mask = ev.mouse_button.button_mask; } input->parse_input_event(p_ev); } -void OS_JavaScript::process_touch(int p_what,int p_pointer, const Vector<TouchPos>& p_points) { +void OS_JavaScript::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(); } @@ -701,38 +682,33 @@ void OS_JavaScript::process_touch(int p_what,int p_pointer, const Vector<TouchPo } 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--; @@ -740,12 +716,10 @@ void OS_JavaScript::process_touch(int p_what,int p_pointer, const Vector<TouchPo } } break; - } - } -void OS_JavaScript::process_accelerometer(const Vector3& p_accelerometer) { +void OS_JavaScript::process_accelerometer(const Vector3 &p_accelerometer) { input->set_accelerometer(p_accelerometer); } @@ -790,12 +764,12 @@ String OS_JavaScript::get_executable_path() const { return String(); } -void OS_JavaScript::_close_notification_funcs(const String& p_file,int p_flags) { +void OS_JavaScript::_close_notification_funcs(const String &p_file, int p_flags) { - print_line("close "+p_file+" flags "+itos(p_flags)); - if (p_file.begins_with("/userfs") && p_flags&FileAccess::WRITE) { - static_cast<OS_JavaScript*>(get_singleton())->last_sync_time=OS::get_singleton()->get_ticks_msec(); - static_cast<OS_JavaScript*>(get_singleton())->time_to_save_sync=5000; //five seconds since last save + print_line("close " + p_file + " flags " + itos(p_flags)); + if (p_file.begins_with("/userfs") && p_flags & FileAccess::WRITE) { + static_cast<OS_JavaScript *>(get_singleton())->last_sync_time = OS::get_singleton()->get_ticks_msec(); + static_cast<OS_JavaScript *>(get_singleton())->time_to_save_sync = 5000; //five seconds since last save } } @@ -817,8 +791,7 @@ void OS_JavaScript::process_joypads() { jx.min = 0; jx.value = value; last_id = input->joy_axis(last_id, i, j, jx); - } - else { + } else { last_id = input->joy_button(last_id, i, j, value); } } @@ -840,8 +813,7 @@ bool OS_JavaScript::joy_connection_changed(int p_type, const EmscriptenGamepadEv if (String(p_event->mapping) == "standard") guid = "Default HTML5 Gamepad"; input->joy_connection_changed(p_event->index, true, String(p_event->id), guid); - } - else { + } else { input->joy_connection_changed(p_event->index, false, ""); } return true; @@ -867,22 +839,20 @@ int OS_JavaScript::get_power_percent_left() { return power_manager->get_power_percent_left(); } -OS_JavaScript::OS_JavaScript(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, GetDataDirFunc p_get_data_dir_func) { - gfx_init_func=p_gfx_init_func; - gfx_init_ud=p_gfx_init_ud; - last_button_mask=0; - main_loop=NULL; - last_id=1; - gl_extensions=NULL; - window_maximized=false; +OS_JavaScript::OS_JavaScript(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, GetDataDirFunc p_get_data_dir_func) { + gfx_init_func = p_gfx_init_func; + gfx_init_ud = p_gfx_init_ud; + last_button_mask = 0; + main_loop = NULL; + last_id = 1; + gl_extensions = NULL; + window_maximized = false; - get_data_dir_func=p_get_data_dir_func; - FileAccessUnix::close_notification_func=_close_notification_funcs; + get_data_dir_func = p_get_data_dir_func; + FileAccessUnix::close_notification_func = _close_notification_funcs; - time_to_save_sync=-1; + time_to_save_sync = -1; } OS_JavaScript::~OS_JavaScript() { - - } diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h index 5f6051bedb..b16918b2da 100644 --- a/platform/javascript/os_javascript.h +++ b/platform/javascript/os_javascript.h @@ -29,40 +29,38 @@ #ifndef OS_JAVASCRIPT_H #define OS_JAVASCRIPT_H -#include "os/input.h" +#include "audio_driver_javascript.h" +#include "audio_server_javascript.h" #include "drivers/unix/os_unix.h" +#include "javascript_eval.h" +#include "main/input_default.h" +#include "os/input.h" #include "os/main_loop.h" #include "power_javascript.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/visual/rasterizer.h" -#include "audio_server_javascript.h" -#include "audio_driver_javascript.h" -#include "main/input_default.h" -#include "javascript_eval.h" #include <emscripten/html5.h> -typedef void (*GFXInitFunc)(void *ud,bool gl2,int w, int h, bool fs); +typedef void (*GFXInitFunc)(void *ud, bool gl2, int w, int h, bool fs); typedef String (*GetDataDirFunc)(); class OS_JavaScript : public OS_Unix { public: - struct TouchPos { int id; Point2 pos; }; private: - Vector<TouchPos> touch; Point2 last_mouse; int last_button_mask; unsigned int last_id; GFXInitFunc gfx_init_func; - void*gfx_init_ud; + void *gfx_init_ud; bool use_gl2; @@ -73,72 +71,69 @@ private: PhysicsServer *physics_server; Physics2DServer *physics_2d_server; AudioDriverJavaScript audio_driver_javascript; - const char* gl_extensions; + const char *gl_extensions; InputDefault *input; bool window_maximized; VideoMode video_mode; - MainLoop * main_loop; + MainLoop *main_loop; GetDataDirFunc get_data_dir_func; PowerJavascript *power_manager; #ifdef JAVASCRIPT_EVAL_ENABLED - JavaScript* javascript_eval; + JavaScript *javascript_eval; #endif - static void _close_notification_funcs(const String& p_file,int p_flags); + static void _close_notification_funcs(const String &p_file, int p_flags); void process_joypads(); 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 print_error(const char* p_function, const char* p_file, int p_line, const char *p_code, const char* p_rationale, ErrorType p_type) { + virtual void print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { OS::print_error(p_function, p_file, p_line, p_code, p_rationale, p_type); } - virtual void alert(const String& p_alert,const String& p_title="ALERT!"); - + 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 Size2 get_screen_size(int p_screen=0) const; + virtual Size2 get_screen_size(int p_screen = 0) const; virtual void set_window_size(const Size2); virtual Size2 get_window_size() const; @@ -163,28 +158,27 @@ public: virtual bool has_touchscreen_ui_hint() const; - void set_opengl_extensions(const char* p_gl_extensions); + void set_opengl_extensions(const char *p_gl_extensions); virtual Error shell_open(String p_uri); virtual String get_data_dir() const; String get_executable_path() const; virtual String get_resource_dir() const; - void process_accelerometer(const Vector3& p_accelerometer); - void process_touch(int p_what,int p_pointer, const Vector<TouchPos>& p_points); - void push_input(const InputEvent& p_ev); + void process_accelerometer(const Vector3 &p_accelerometer); + void process_touch(int p_what, int p_pointer, const Vector<TouchPos> &p_points); + void push_input(const InputEvent &p_ev); virtual bool is_joy_known(int p_device); virtual String get_joy_guid(int p_device) const; bool joy_connection_changed(int p_type, const EmscriptenGamepadEvent *p_event); - + virtual PowerState get_power_state(); virtual int get_power_seconds_left(); virtual int get_power_percent_left(); - OS_JavaScript(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, GetDataDirFunc p_get_data_dir_func); + OS_JavaScript(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, GetDataDirFunc p_get_data_dir_func); ~OS_JavaScript(); - }; #endif diff --git a/platform/javascript/power_javascript.cpp b/platform/javascript/power_javascript.cpp index 9d2d0364aa..d734999917 100644 --- a/platform/javascript/power_javascript.cpp +++ b/platform/javascript/power_javascript.cpp @@ -27,10 +27,8 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ - -#include "core/error_macros.h" #include "power_javascript.h" - +#include "core/error_macros.h" bool PowerJavascript::UpdatePowerInfo() { // TODO Javascript implementation @@ -40,8 +38,7 @@ bool PowerJavascript::UpdatePowerInfo() { PowerState PowerJavascript::get_power_state() { if (UpdatePowerInfo()) { return power_state; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to POWERSTATE_UNKNOWN"); return POWERSTATE_UNKNOWN; } @@ -50,8 +47,7 @@ PowerState PowerJavascript::get_power_state() { int PowerJavascript::get_power_seconds_left() { if (UpdatePowerInfo()) { return nsecs_left; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to -1"); return -1; } @@ -60,16 +56,14 @@ int PowerJavascript::get_power_seconds_left() { int PowerJavascript::get_power_percent_left() { if (UpdatePowerInfo()) { return percent_left; - } - else { + } else { WARN_PRINT("Power management is not implemented on this platform, defaulting to -1"); return -1; } } - -PowerJavascript::PowerJavascript() : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { - +PowerJavascript::PowerJavascript() + : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { } PowerJavascript::~PowerJavascript() { diff --git a/platform/javascript/power_javascript.h b/platform/javascript/power_javascript.h index bdef2be7e1..53c702b98e 100644 --- a/platform/javascript/power_javascript.h +++ b/platform/javascript/power_javascript.h @@ -27,7 +27,6 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ - #ifndef PLATFORM_JAVASCRIPT_POWER_JAVASCRIPT_H_ #define PLATFORM_JAVASCRIPT_POWER_JAVASCRIPT_H_ diff --git a/platform/osx/audio_driver_osx.cpp b/platform/osx/audio_driver_osx.cpp index 4ad3a5b8fc..7ef0669656 100644 --- a/platform/osx/audio_driver_osx.cpp +++ b/platform/osx/audio_driver_osx.cpp @@ -43,9 +43,9 @@ Error AudioDriverOSX::init() { strdesc.mFramesPerPacket = 1; strdesc.mBitsPerChannel = 16; strdesc.mBytesPerFrame = - strdesc.mBitsPerChannel * strdesc.mChannelsPerFrame / 8; + strdesc.mBitsPerChannel * strdesc.mChannelsPerFrame / 8; strdesc.mBytesPerPacket = - strdesc.mBytesPerFrame * strdesc.mFramesPerPacket; + strdesc.mBytesPerFrame * strdesc.mFramesPerPacket; OSStatus result = noErr; AURenderCallbackStruct callback; @@ -57,7 +57,7 @@ Error AudioDriverOSX::init() { zeromem(&desc, sizeof(desc)); desc.componentType = kAudioUnitType_Output; - desc.componentSubType = 0; /* !!! FIXME: ? */ + desc.componentSubType = 0; /* !!! FIXME: ? */ comp = AudioComponentFindNext(NULL, &desc); desc.componentManufacturer = kAudioUnitManufacturer_Apple; @@ -66,16 +66,16 @@ Error AudioDriverOSX::init() { ERR_FAIL_COND_V(comp == NULL, FAILED); result = AudioUnitSetProperty(audio_unit, - kAudioUnitProperty_StreamFormat, - scope, bus, &strdesc, sizeof(strdesc)); + kAudioUnitProperty_StreamFormat, + scope, bus, &strdesc, sizeof(strdesc)); ERR_FAIL_COND_V(result != noErr, FAILED); zeromem(&callback, sizeof(AURenderCallbackStruct)); callback.inputProc = &AudioDriverOSX::output_callback; callback.inputProcRefCon = this; result = AudioUnitSetProperty(audio_unit, - kAudioUnitProperty_SetRenderCallback, - scope, bus, &callback, sizeof(callback)); + kAudioUnitProperty_SetRenderCallback, + scope, bus, &callback, sizeof(callback)); ERR_FAIL_COND_V(result != noErr, FAILED); result = AudioUnitInitialize(audio_unit); @@ -92,14 +92,13 @@ Error AudioDriverOSX::init() { }; OSStatus AudioDriverOSX::output_callback(void *inRefCon, - AudioUnitRenderActionFlags * ioActionFlags, - const AudioTimeStamp * inTimeStamp, - UInt32 inBusNumber, UInt32 inNumberFrames, - AudioBufferList * ioData) { - + AudioUnitRenderActionFlags *ioActionFlags, + const AudioTimeStamp *inTimeStamp, + UInt32 inBusNumber, UInt32 inNumberFrames, + AudioBufferList *ioData) { AudioBuffer *abuf; - AudioDriverOSX* ad = (AudioDriverOSX*)inRefCon; + AudioDriverOSX *ad = (AudioDriverOSX *)inRefCon; bool mix = true; @@ -109,7 +108,6 @@ OSStatus AudioDriverOSX::output_callback(void *inRefCon, mix = ad->mutex->try_lock() == OK; }; - if (!mix) { for (unsigned int i = 0; i < ioData->mNumberBuffers; i++) { abuf = &ioData->mBuffers[i]; @@ -124,7 +122,7 @@ OSStatus AudioDriverOSX::output_callback(void *inRefCon, abuf = &ioData->mBuffers[i]; frames_left = inNumberFrames; - int16_t* out = (int16_t*)abuf->mData; + int16_t *out = (int16_t *)abuf->mData; while (frames_left) { @@ -133,9 +131,9 @@ OSStatus AudioDriverOSX::output_callback(void *inRefCon, ad->audio_server_process(frames, ad->samples_in); //ad->unlock(); - for(int i = 0; i < frames * ad->channels; i++) { + for (int i = 0; i < frames * ad->channels; i++) { - out[i] = ad->samples_in[i]>>16; + out[i] = ad->samples_in[i] >> 16; } frames_left -= frames; @@ -180,10 +178,10 @@ void AudioDriverOSX::finish() { AudioDriverOSX::AudioDriverOSX() { - mutex=Mutex::create();//NULL; + mutex = Mutex::create(); //NULL; }; -AudioDriverOSX::~AudioDriverOSX() { +AudioDriverOSX::~AudioDriverOSX(){ }; diff --git a/platform/osx/audio_driver_osx.h b/platform/osx/audio_driver_osx.h index 9e9bb63726..b030570a6e 100644 --- a/platform/osx/audio_driver_osx.h +++ b/platform/osx/audio_driver_osx.h @@ -42,19 +42,17 @@ class AudioDriverOSX : public AudioDriver { Mutex *mutex; int channels; - int32_t* samples_in; - int buffer_frames; + int32_t *samples_in; + int buffer_frames; static OSStatus output_callback(void *inRefCon, - AudioUnitRenderActionFlags * ioActionFlags, - const AudioTimeStamp * inTimeStamp, - UInt32 inBusNumber, UInt32 inNumberFrames, - AudioBufferList * ioData); - + AudioUnitRenderActionFlags *ioActionFlags, + const AudioTimeStamp *inTimeStamp, + UInt32 inBusNumber, UInt32 inNumberFrames, + AudioBufferList *ioData); public: - - const char* get_name() const { + const char *get_name() const { return "AudioUnit"; }; diff --git a/platform/osx/context_gl_osx.cpp b/platform/osx/context_gl_osx.cpp index d0819bbfb6..0737e3d3c6 100644 --- a/platform/osx/context_gl_osx.cpp +++ b/platform/osx/context_gl_osx.cpp @@ -31,58 +31,58 @@ #ifdef OSX_ENABLED #if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) #include <stdio.h> -#include <unistd.h> #include <stdlib.h> +#include <unistd.h> -#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 void ContextGL_OSX::release_current() { - aglSetCurrentContext( context ); + aglSetCurrentContext(context); } void ContextGL_OSX::make_current() { - aglSetCurrentContext( NULL ); + aglSetCurrentContext(NULL); } void ContextGL_OSX::swap_buffers() { - aglSwapBuffers( context ); + aglSwapBuffers(context); } Error ContextGL_OSX::initialize() { - if ( (Ptr) kUnresolvedCFragSymbolAddress == (Ptr) aglChoosePixelFormat ) + if ((Ptr)kUnresolvedCFragSymbolAddress == (Ptr)aglChoosePixelFormat) return FAILED; GLint attributes[] = { AGL_RGBA, - AGL_DOUBLEBUFFER, - AGL_DEPTH_SIZE, 32, - AGL_NO_RECOVERY, - AGL_NONE, - AGL_NONE }; + AGL_DOUBLEBUFFER, + AGL_DEPTH_SIZE, 32, + AGL_NO_RECOVERY, + AGL_NONE, + AGL_NONE }; AGLPixelFormat format = NULL; - format = aglChoosePixelFormat( NULL, 0, attributes ); + format = aglChoosePixelFormat(NULL, 0, attributes); - if ( !format ) + if (!format) return FAILED; - context = aglCreateContext( format, 0 ); + context = aglCreateContext(format, 0); - if ( !context ) + if (!context) return FAILED; - aglDestroyPixelFormat( format ); + aglDestroyPixelFormat(format); - aglSetWindowRef( context, window ); + aglSetWindowRef(context, window); GLint swapInterval = 1; - aglSetInteger( context, AGL_SWAP_INTERVAL, &swapInterval ); + aglSetInteger(context, AGL_SWAP_INTERVAL, &swapInterval); - aglSetCurrentContext( context ); + aglSetCurrentContext(context); return OK; } @@ -92,13 +92,11 @@ ContextGL_OSX::ContextGL_OSX(WindowRef p_window) { window = p_window; } - ContextGL_OSX::~ContextGL_OSX() { if (context) aglDestroyContext(context); } - #endif #endif diff --git a/platform/osx/context_gl_osx.h b/platform/osx/context_gl_osx.h index 6a02aa23d1..66da8b1ecf 100644 --- a/platform/osx/context_gl_osx.h +++ b/platform/osx/context_gl_osx.h @@ -36,8 +36,8 @@ #if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) -#include "os/os.h" #include "drivers/gl_context/context_gl.h" +#include "os/os.h" #include <AGL/agl.h> #include <Carbon/Carbon.h> @@ -47,7 +47,6 @@ class ContextGL_OSX : public ContextGL { WindowRef window; public: - virtual void release_current(); virtual void make_current(); virtual void swap_buffers(); @@ -56,7 +55,6 @@ public: ContextGL_OSX(WindowRef window); ~ContextGL_OSX(); - }; #endif diff --git a/platform/osx/dir_access_osx.h b/platform/osx/dir_access_osx.h index c30d380dd3..56a8e057dd 100644 --- a/platform/osx/dir_access_osx.h +++ b/platform/osx/dir_access_osx.h @@ -31,26 +31,21 @@ #if defined(UNIX_ENABLED) || defined(LIBC_FILEIO_ENABLED) -#include <sys/types.h> +#include <dirent.h> #include <sys/stat.h> +#include <sys/types.h> #include <unistd.h> -#include <dirent.h> -#include "os/dir_access.h" #include "drivers/unix/dir_access_unix.h" - +#include "os/dir_access.h" /** @author Juan Linietsky <reduzio@gmail.com> */ class DirAccessOSX : public DirAccessUnix { protected: - - virtual String fix_unicode_name(const char* p_name) const; - + virtual String fix_unicode_name(const char *p_name) const; }; - - #endif //UNIX ENABLED #endif diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp index 4af2aaca63..ba4ef0300c 100644 --- a/platform/osx/export/export.cpp +++ b/platform/osx/export/export.cpp @@ -26,19 +26,19 @@ /* 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 "editor/editor_settings.h" +#include "global_config.h" #include "io/marshalls.h" #include "io/resource_saver.h" -#include "global_config.h" +#include "io/zip_io.h" #include "os/file_access.h" #include "os/os.h" #include "platform/osx/logo.h" #include "string.h" +#include "version.h" #if 0 class EditorExportPlatformOSX : public EditorExportPlatform { @@ -543,7 +543,4 @@ void register_osx_exporter() { Ref<EditorExportPlatformOSX> exporter = Ref<EditorExportPlatformOSX>( memnew(EditorExportPlatformOSX) ); EditorImportExport::get_singleton()->add_export_platform(exporter); #endif - } - - diff --git a/platform/osx/joypad_osx.cpp b/platform/osx/joypad_osx.cpp index 98bcc8dc73..c2b0e1f052 100644 --- a/platform/osx/joypad_osx.cpp +++ b/platform/osx/joypad_osx.cpp @@ -32,7 +32,7 @@ #define GODOT_JOY_LOOP_RUN_MODE CFSTR("GodotJoypad") -static JoypadOSX* self = NULL; +static JoypadOSX *self = NULL; joypad::joypad() { device_ref = NULL; @@ -83,7 +83,7 @@ int joypad::get_hid_element_state(rec_element *p_element) const { if (p_element && p_element->ref) { IOHIDValueRef valueRef; if (IOHIDDeviceGetValue(device_ref, p_element->ref, &valueRef) == kIOReturnSuccess) { - value = (SInt32) IOHIDValueGetIntegerValue(valueRef); + value = (SInt32)IOHIDValueGetIntegerValue(valueRef); /* record min and max for auto calibration */ if (value < p_element->min) { @@ -106,91 +106,89 @@ void joypad::add_hid_element(IOHIDElementRef p_element) { Vector<rec_element> *list = NULL; switch (IOHIDElementGetType(p_element)) { - case kIOHIDElementTypeInput_Misc: - case kIOHIDElementTypeInput_Button: - case kIOHIDElementTypeInput_Axis: { - switch (usagePage) { - case kHIDPage_GenericDesktop: - switch (usage) { - case kHIDUsage_GD_X: - case kHIDUsage_GD_Y: - case kHIDUsage_GD_Z: - case kHIDUsage_GD_Rx: - case kHIDUsage_GD_Ry: - case kHIDUsage_GD_Rz: - case kHIDUsage_GD_Slider: - case kHIDUsage_GD_Dial: - case kHIDUsage_GD_Wheel: - if (!has_element(cookie, &axis_elements)) { - list = &axis_elements; - } - break; - - case kHIDUsage_GD_Hatswitch: - if (!has_element(cookie, &hat_elements)) { - list = &hat_elements; - } - break; - case kHIDUsage_GD_DPadUp: - case kHIDUsage_GD_DPadDown: - case kHIDUsage_GD_DPadRight: - case kHIDUsage_GD_DPadLeft: - case kHIDUsage_GD_Start: - case kHIDUsage_GD_Select: - if (!has_element(cookie, &button_elements)) { - list = &button_elements; - } - break; + case kIOHIDElementTypeInput_Misc: + case kIOHIDElementTypeInput_Button: + case kIOHIDElementTypeInput_Axis: { + switch (usagePage) { + case kHIDPage_GenericDesktop: + switch (usage) { + case kHIDUsage_GD_X: + case kHIDUsage_GD_Y: + case kHIDUsage_GD_Z: + case kHIDUsage_GD_Rx: + case kHIDUsage_GD_Ry: + case kHIDUsage_GD_Rz: + case kHIDUsage_GD_Slider: + case kHIDUsage_GD_Dial: + case kHIDUsage_GD_Wheel: + if (!has_element(cookie, &axis_elements)) { + list = &axis_elements; + } + break; + + case kHIDUsage_GD_Hatswitch: + if (!has_element(cookie, &hat_elements)) { + list = &hat_elements; + } + break; + case kHIDUsage_GD_DPadUp: + case kHIDUsage_GD_DPadDown: + case kHIDUsage_GD_DPadRight: + case kHIDUsage_GD_DPadLeft: + case kHIDUsage_GD_Start: + case kHIDUsage_GD_Select: + if (!has_element(cookie, &button_elements)) { + list = &button_elements; + } + break; + } + break; + + case kHIDPage_Simulation: + switch (usage) { + case kHIDUsage_Sim_Rudder: + case kHIDUsage_Sim_Throttle: + if (!has_element(cookie, &axis_elements)) { + list = &axis_elements; + } + break; + + default: + break; + } + break; + + case kHIDPage_Button: + case kHIDPage_Consumer: + if (!has_element(cookie, &button_elements)) { + list = &button_elements; + } + break; + + default: + break; } - break; - - case kHIDPage_Simulation: - switch (usage) { - case kHIDUsage_Sim_Rudder: - case kHIDUsage_Sim_Throttle: - if (!has_element(cookie, &axis_elements)) { - list = &axis_elements; - } - break; - - default: - break; - } - break; + } break; - case kHIDPage_Button: - case kHIDPage_Consumer: - if (!has_element(cookie, &button_elements)) { - list = &button_elements; + case kIOHIDElementTypeCollection: { + CFArrayRef array = IOHIDElementGetChildren(p_element); + if (array) { + add_hid_elements(array); } - break; + } break; default: break; - } - } - break; - - case kIOHIDElementTypeCollection: { - CFArrayRef array = IOHIDElementGetChildren(p_element); - if (array) { - add_hid_elements(array); - } - } - break; - - default: - break; } - if (list) { /* add to list */ + if (list) { /* add to list */ rec_element element; element.ref = p_element; element.usage = usage; - element.min = (SInt32) IOHIDElementGetLogicalMin(p_element); - element.max = (SInt32) IOHIDElementGetLogicalMax(p_element); + element.min = (SInt32)IOHIDElementGetLogicalMin(p_element); + element.max = (SInt32)IOHIDElementGetLogicalMax(p_element); element.cookie = IOHIDElementGetCookie(p_element); list->push_back(element); list->sort_custom<rec_element::Comparator>(); @@ -199,21 +197,20 @@ void joypad::add_hid_element(IOHIDElementRef p_element) { } static void hid_element_added(const void *p_value, void *p_parameter) { - joypad *joy = (joypad*) p_parameter; - joy->add_hid_element((IOHIDElementRef) p_value); + joypad *joy = (joypad *)p_parameter; + joy->add_hid_element((IOHIDElementRef)p_value); } void joypad::add_hid_elements(CFArrayRef p_array) { CFRange range = { 0, CFArrayGetCount(p_array) }; - CFArrayApplyFunction(p_array, range,hid_element_added,this); + CFArrayApplyFunction(p_array, range, hid_element_added, this); } static void joypad_removed_callback(void *ctx, IOReturn result, void *sender) { - int id = (intptr_t) ctx; + int id = (intptr_t)ctx; self->_device_removed(id); } - static void joypad_added_callback(void *ctx, IOReturn res, void *sender, IOHIDDeviceRef ioHIDDeviceObject) { self->_device_added(res, ioHIDDeviceObject); } @@ -224,7 +221,7 @@ static bool is_joypad(IOHIDDeviceRef p_device_ref) { int usage = 0; refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDPrimaryUsagePageKey)); if (refCF) { - CFNumberGetValue((CFNumberRef) refCF, kCFNumberSInt32Type, &usage_page); + CFNumberGetValue((CFNumberRef)refCF, kCFNumberSInt32Type, &usage_page); } if (usage_page != kHIDPage_GenericDesktop) { return false; @@ -232,11 +229,11 @@ static bool is_joypad(IOHIDDeviceRef p_device_ref) { refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDPrimaryUsageKey)); if (refCF) { - CFNumberGetValue((CFNumberRef) refCF, kCFNumberSInt32Type, &usage); + CFNumberGetValue((CFNumberRef)refCF, kCFNumberSInt32Type, &usage); } if ((usage != kHIDUsage_GD_Joystick && - usage != kHIDUsage_GD_GamePad && - usage != kHIDUsage_GD_MultiAxisController)) { + usage != kHIDUsage_GD_GamePad && + usage != kHIDUsage_GD_MultiAxisController)) { return false; } return true; @@ -255,7 +252,7 @@ void JoypadOSX::_device_added(IOReturn p_res, IOHIDDeviceRef p_device) { if (IOHIDDeviceGetService != NULL) { #endif const io_service_t ioservice = IOHIDDeviceGetService(p_device); - if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK) && new_joypad.config_force_feedback(ioservice)) { + if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK) && new_joypad.config_force_feedback(ioservice)) { new_joypad.ffservice = ioservice; } #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 @@ -263,7 +260,7 @@ void JoypadOSX::_device_added(IOReturn p_res, IOHIDDeviceRef p_device) { #endif device_list.push_back(new_joypad); } - IOHIDDeviceRegisterRemovalCallback(p_device, joypad_removed_callback, (void*) (intptr_t) new_joypad.id); + IOHIDDeviceRegisterRemovalCallback(p_device, joypad_removed_callback, (void *)(intptr_t)new_joypad.id); IOHIDDeviceScheduleWithRunLoop(p_device, CFRunLoopGetCurrent(), GODOT_JOY_LOOP_RUN_MODE); } @@ -279,17 +276,17 @@ void JoypadOSX::_device_removed(int p_id) { static String _hex_str(uint8_t p_byte) { - static const char* dict = "0123456789abcdef"; + static const char *dict = "0123456789abcdef"; char ret[3]; ret[2] = 0; - ret[0] = dict[p_byte>>4]; + ret[0] = dict[p_byte >> 4]; ret[1] = dict[p_byte & 0xF]; return ret; } -bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad* p_joy) { +bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad *p_joy) { CFTypeRef refCF = NULL; @@ -301,7 +298,7 @@ bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad* p_joy) { if (!refCF) { refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDManufacturerKey)); } - if ((!refCF) || (!CFStringGetCString((CFStringRef) refCF, c_name, sizeof (c_name), kCFStringEncodingUTF8))) { + if ((!refCF) || (!CFStringGetCString((CFStringRef)refCF, c_name, sizeof(c_name), kCFStringEncodingUTF8))) { name = "Unidentified Joypad"; } name = c_name; @@ -322,15 +319,16 @@ bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad* p_joy) { } if (vendor && product_id) { char uid[128]; - sprintf(uid, "%04x%08x%04x%08x", OSSwapHostToBigInt32(vendor),0, OSSwapHostToBigInt32(product_id), 0); + sprintf(uid, "%04x%08x%04x%08x", OSSwapHostToBigInt32(vendor), 0, OSSwapHostToBigInt32(product_id), 0); input->joy_connection_changed(id, true, name, uid); - } - else { + } else { //bluetooth device String guid = "05000000"; for (int i = 0; i < 12; i++) { - if (i < name.size()) guid += _hex_str(name[i]); - else guid += "00"; + if (i < name.size()) + guid += _hex_str(name[i]); + else + guid += "00"; } input->joy_connection_changed(id, true, name, guid); } @@ -344,7 +342,13 @@ bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad* p_joy) { return true; } -#define FF_ERR() { if (ret != FF_OK) { FFReleaseDevice(ff_device); return false; } } +#define FF_ERR() \ + { \ + if (ret != FF_OK) { \ + FFReleaseDevice(ff_device); \ + return false; \ + } \ + } bool joypad::config_force_feedback(io_service_t p_service) { HRESULT ret = FFCreateDevice(p_service, &ff_device); @@ -376,8 +380,8 @@ bool joypad::check_ff_features() { ret = FFDeviceGetForceFeedbackProperty(ff_device, FFPROP_FFGAIN, &val, sizeof(val)); if (ret != FF_OK) return false; int num_axes = features.numFfAxes; - ff_axes = (DWORD*) memalloc(sizeof(DWORD) * num_axes); - ff_directions = (LONG*) memalloc(sizeof(LONG) * num_axes); + ff_axes = (DWORD *)memalloc(sizeof(DWORD) * num_axes); + ff_directions = (LONG *)memalloc(sizeof(LONG) * num_axes); for (int i = 0; i < num_axes; i++) { ff_axes[i] = features.ffAxes[i]; @@ -401,39 +405,39 @@ static int process_hat_value(int p_min, int p_max, int p_value) { } switch (value) { - case 0: - hat_value = InputDefault::HAT_MASK_UP; - break; - case 1: - hat_value = InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_RIGHT; - break; - case 2: - hat_value = InputDefault::HAT_MASK_RIGHT; - break; - case 3: - hat_value = InputDefault::HAT_MASK_DOWN | InputDefault::HAT_MASK_RIGHT; - break; - case 4: - hat_value = InputDefault::HAT_MASK_DOWN; - break; - case 5: - hat_value = InputDefault::HAT_MASK_DOWN | InputDefault::HAT_MASK_LEFT; - break; - case 6: - hat_value = InputDefault::HAT_MASK_LEFT; - break; - case 7: - hat_value = InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_LEFT; - break; - default: - hat_value = InputDefault::HAT_MASK_CENTER; - break; + case 0: + hat_value = InputDefault::HAT_MASK_UP; + break; + case 1: + hat_value = InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_RIGHT; + break; + case 2: + hat_value = InputDefault::HAT_MASK_RIGHT; + break; + case 3: + hat_value = InputDefault::HAT_MASK_DOWN | InputDefault::HAT_MASK_RIGHT; + break; + case 4: + hat_value = InputDefault::HAT_MASK_DOWN; + break; + case 5: + hat_value = InputDefault::HAT_MASK_DOWN | InputDefault::HAT_MASK_LEFT; + break; + case 6: + hat_value = InputDefault::HAT_MASK_LEFT; + break; + case 7: + hat_value = InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_LEFT; + break; + default: + hat_value = InputDefault::HAT_MASK_CENTER; + break; } return hat_value; } void JoypadOSX::poll_joypads() const { - while (CFRunLoopRunInMode(GODOT_JOY_LOOP_RUN_MODE,0,TRUE) == kCFRunLoopRunHandledSource) { + while (CFRunLoopRunInMode(GODOT_JOY_LOOP_RUN_MODE, 0, TRUE) == kCFRunLoopRunHandledSource) { /* no-op. Pending callbacks will fire. */ } } @@ -443,18 +447,18 @@ static const InputDefault::JoyAxis axis_correct(int p_value, int p_min, int p_ma if (p_min < 0) { jx.min = -1; if (p_value < 0) { - jx.value = (float) -p_value / p_min; - } - else jx.value = (float) p_value / p_max; + jx.value = (float)-p_value / p_min; + } else + jx.value = (float)p_value / p_max; } if (p_min == 0) { jx.min = 0; - jx.value = 0.0f + (float) p_value / p_max; + jx.value = 0.0f + (float)p_value / p_max; } return jx; } -uint32_t JoypadOSX::process_joypads(uint32_t p_last_id){ +uint32_t JoypadOSX::process_joypads(uint32_t p_last_id) { poll_joypads(); for (int i = 0; i < device_list.size(); i++) { @@ -467,7 +471,7 @@ uint32_t JoypadOSX::process_joypads(uint32_t p_last_id){ } for (int j = 0; j < joy.button_elements.size(); j++) { int value = joy.get_hid_element_state(&joy.button_elements[j]); - p_last_id = input->joy_button(p_last_id, joy.id, j, (value>=1)); + p_last_id = input->joy_button(p_last_id, joy.id, j, (value >= 1)); } for (int j = 0; j < joy.hat_elements.size(); j++) { rec_element &elem = joy.hat_elements[j]; @@ -483,8 +487,7 @@ uint32_t JoypadOSX::process_joypads(uint32_t p_last_id){ float duration = input->get_joy_vibration_duration(joy.id); if (strength.x == 0 && strength.y == 0) { joypad_vibration_stop(joy.id, timestamp); - } - else { + } else { float gain = MAX(strength.x, strength.y); joypad_vibration_start(joy.id, gain, duration, timestamp); } @@ -504,7 +507,7 @@ void JoypadOSX::joypad_vibration_start(int p_id, float p_magnitude, float p_dura } void JoypadOSX::joypad_vibration_stop(int p_id, uint64_t p_timestamp) { - joypad* joy = &device_list[get_joy_index(p_id)]; + joypad *joy = &device_list[get_joy_index(p_id)]; joy->ff_timestamp = p_timestamp; FFEffectStop(joy->ff_object); } @@ -525,13 +528,12 @@ bool JoypadOSX::have_device(IOHIDDeviceRef p_device) const { return false; } -static CFDictionaryRef create_match_dictionary(const UInt32 page, const UInt32 usage, int *okay) -{ +static CFDictionaryRef create_match_dictionary(const UInt32 page, const UInt32 usage, int *okay) { CFDictionaryRef retval = NULL; CFNumberRef pageNumRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &page); CFNumberRef usageNumRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &usage); - const void *keys[2] = { (void *) CFSTR(kIOHIDDeviceUsagePageKey), (void *) CFSTR(kIOHIDDeviceUsageKey) }; - const void *vals[2] = { (void *) pageNumRef, (void *) usageNumRef }; + const void *keys[2] = { (void *)CFSTR(kIOHIDDeviceUsagePageKey), (void *)CFSTR(kIOHIDDeviceUsageKey) }; + const void *vals[2] = { (void *)pageNumRef, (void *)usageNumRef }; if (pageNumRef && usageNumRef) { retval = CFDictionaryCreate(kCFAllocatorDefault, keys, vals, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); @@ -561,28 +563,27 @@ void JoypadOSX::config_hid_manager(CFArrayRef p_matching_array) const { IOHIDManagerRegisterDeviceMatchingCallback(hid_manager, joypad_added_callback, NULL); IOHIDManagerScheduleWithRunLoop(hid_manager, runloop, GODOT_JOY_LOOP_RUN_MODE); - while (CFRunLoopRunInMode(GODOT_JOY_LOOP_RUN_MODE,0,TRUE) == kCFRunLoopRunHandledSource) { + while (CFRunLoopRunInMode(GODOT_JOY_LOOP_RUN_MODE, 0, TRUE) == kCFRunLoopRunHandledSource) { /* no-op. Callback fires once per existing device. */ } } -JoypadOSX::JoypadOSX() -{ +JoypadOSX::JoypadOSX() { self = this; - input = (InputDefault*)Input::get_singleton(); + input = (InputDefault *)Input::get_singleton(); int okay = 1; const void *vals[] = { - (void *) create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick, &okay), - (void *) create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_GamePad, &okay), - (void *) create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_MultiAxisController, &okay), + (void *)create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick, &okay), + (void *)create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_GamePad, &okay), + (void *)create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_MultiAxisController, &okay), }; - const size_t n_elements = sizeof(vals)/sizeof(vals[0]); + const size_t n_elements = sizeof(vals) / sizeof(vals[0]); CFArrayRef array = okay ? CFArrayCreate(kCFAllocatorDefault, vals, n_elements, &kCFTypeArrayCallBacks) : NULL; for (int i = 0; i < n_elements; i++) { if (vals[i]) { - CFRelease((CFTypeRef) vals[i]); + CFRelease((CFTypeRef)vals[i]); } } @@ -606,4 +607,3 @@ JoypadOSX::~JoypadOSX() { CFRelease(hid_manager); hid_manager = NULL; } - diff --git a/platform/osx/joypad_osx.h b/platform/osx/joypad_osx.h index 71a0335316..dabd1b8aec 100644 --- a/platform/osx/joypad_osx.h +++ b/platform/osx/joypad_osx.h @@ -34,9 +34,9 @@ #else #include <Kernel/IOKit/hidsystem/IOHIDUsageTables.h> #endif -#include <IOKit/hid/IOHIDLib.h> #include <ForceFeedback/ForceFeedback.h> #include <ForceFeedback/ForceFeedbackConstants.h> +#include <IOKit/hid/IOHIDLib.h> #include "main/input_default.h" @@ -63,7 +63,7 @@ struct joypad { int id; - io_service_t ffservice; /* Interface for force feedback, 0 = no ff */ + io_service_t ffservice; /* Interface for force feedback, 0 = no ff */ FFCONSTANTFORCE ff_constant_force; FFDeviceObjectReference ff_device; FFEffectObjectReference ff_object; diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index 9941774b40..2c7ad09b89 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -29,22 +29,21 @@ #ifndef OS_OSX_H #define OS_OSX_H - -#include "os/input.h" -#include "joypad_osx.h" -#include "power_osx.h" #include "drivers/unix/os_unix.h" +#include "joypad_osx.h" #include "main/input_default.h" +#include "os/input.h" +#include "power_osx.h" #include "servers/visual_server.h" // #include "servers/visual/visual_server_wrap_mt.h" -#include "servers/visual/rasterizer.h" -#include "servers/physics_server.h" -#include "servers/audio_server.h" -#include "drivers/rtaudio/audio_driver_rtaudio.h" #include "drivers/alsa/audio_driver_alsa.h" +#include "drivers/rtaudio/audio_driver_rtaudio.h" +#include "platform/osx/audio_driver_osx.h" +#include "servers/audio_server.h" #include "servers/physics_2d/physics_2d_server_sw.h" #include "servers/physics_2d/physics_2d_server_wrap_mt.h" -#include "platform/osx/audio_driver_osx.h" +#include "servers/physics_server.h" +#include "servers/visual/rasterizer.h" #include <ApplicationServices/ApplicationServices.h> //bitch @@ -56,7 +55,7 @@ class OS_OSX : public OS_Unix { public: bool force_quit; -// rasterizer seems to no longer be given to visual server, its using GLES3 directly? + // rasterizer seems to no longer be given to visual server, its using GLES3 directly? //Rasterizer *rasterizer; VisualServer *visual_server; @@ -80,8 +79,8 @@ public: void process_events(); - void* framework; -// pthread_key_t current; + void *framework; + // pthread_key_t current; bool mouse_grab; Point2 mouse_pos; uint32_t last_id; @@ -108,60 +107,58 @@ public: Size2 window_size; int current_screen; Rect2 restore_rect; - + power_osx *power_manager; float _mouse_scale(float p_scale) { - if (display_scale>1.0) + if (display_scale > 1.0) return p_scale; else return 1.0; } float display_scale; -protected: +protected: 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 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 finalize(); - virtual void set_main_loop( MainLoop * p_main_loop ); + virtual void set_main_loop(MainLoop *p_main_loop); virtual void delete_main_loop(); public: - - - static OS_OSX* singleton; + static OS_OSX *singleton; void wm_minimized(bool p_minimized); virtual String get_name(); - virtual void alert(const String& p_alert, const String& p_title="ALERT!"); + virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); virtual void set_cursor_shape(CursorShape p_shape); virtual void set_mouse_show(bool p_show); virtual void set_mouse_grab(bool p_grab); virtual bool is_mouse_grab_enabled() const; - virtual void warp_mouse_pos(const Point2& p_to); + virtual void warp_mouse_pos(const Point2 &p_to); 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 Size2 get_window_size() const; - virtual void set_icon(const Image& p_icon); + virtual void set_icon(const Image &p_icon); virtual MainLoop *get_main_loop() const; virtual bool can_draw() const; - virtual void set_clipboard(const String& p_text); + virtual void set_clipboard(const String &p_text); virtual String get_clipboard() const; virtual void release_rendering_thread(); @@ -169,13 +166,13 @@ public: virtual void swap_buffers(); Error shell_open(String p_uri); - void push_input(const InputEvent& p_event); + void push_input(const InputEvent &p_event); String get_locale() 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 String get_executable_path() const; @@ -186,12 +183,12 @@ public: virtual int get_screen_count() const; virtual int get_current_screen() const; virtual void set_current_screen(int p_screen); - virtual Point2 get_screen_position(int p_screen=0) const; - virtual Size2 get_screen_size(int p_screen=0) const; - virtual int get_screen_dpi(int p_screen=0) const; + virtual Point2 get_screen_position(int p_screen = 0) const; + virtual Size2 get_screen_size(int p_screen = 0) const; + virtual int get_screen_dpi(int p_screen = 0) const; virtual Point2 get_window_position() const; - virtual void set_window_position(const Point2& p_position); + virtual void set_window_position(const Point2 &p_position); virtual void set_window_size(const Size2 p_size); virtual void set_window_fullscreen(bool p_enabled); virtual bool is_window_fullscreen() const; @@ -203,15 +200,15 @@ public: virtual bool is_window_maximized() const; virtual void request_attention(); virtual String get_joy_guid(int p_device) const; - + virtual PowerState get_power_state(); virtual int get_power_seconds_left(); virtual int get_power_percent_left(); void run(); - void set_mouse_mode(MouseMode p_mode); - MouseMode get_mouse_mode() const; + void set_mouse_mode(MouseMode p_mode); + MouseMode get_mouse_mode() const; OS_OSX(); }; diff --git a/platform/osx/power_osx.cpp b/platform/osx/power_osx.cpp index 5c8f067f24..de9bcaf6fc 100644 --- a/platform/osx/power_osx.cpp +++ b/platform/osx/power_osx.cpp @@ -29,20 +29,19 @@ #include "power_osx.h" #include <CoreFoundation/CoreFoundation.h> -#include <IOKit/ps/IOPowerSources.h> #include <IOKit/ps/IOPSKeys.h> +#include <IOKit/ps/IOPowerSources.h> // CODE CHUNK IMPORTED FROM SDL 2.0 /* CoreFoundation is so verbose... */ -#define STRMATCH(a,b) (CFStringCompare(a, b, 0) == kCFCompareEqualTo) -#define GETVAL(k,v) \ - CFDictionaryGetValueIfPresent(dict, CFSTR(k), (const void **) v) +#define STRMATCH(a, b) (CFStringCompare(a, b, 0) == kCFCompareEqualTo) +#define GETVAL(k, v) \ + CFDictionaryGetValueIfPresent(dict, CFSTR(k), (const void **)v) /* Note that AC power sources also include a laptop battery it is charging. */ -void power_osx::checkps(CFDictionaryRef dict, bool * have_ac, bool * have_battery, bool * charging) -{ - CFStringRef strval; /* don't CFRelease() this. */ +void power_osx::checkps(CFDictionaryRef dict, bool *have_ac, bool *have_battery, bool *charging) { + CFStringRef strval; /* don't CFRelease() this. */ CFBooleanRef bval; CFNumberRef numval; bool charge = false; @@ -53,7 +52,7 @@ void power_osx::checkps(CFDictionaryRef dict, bool * have_ac, bool * have_batter int pct = -1; if ((GETVAL(kIOPSIsPresentKey, &bval)) && (bval == kCFBooleanFalse)) { - return; /* nothing to see here. */ + return; /* nothing to see here. */ } if (!GETVAL(kIOPSPowerSourceStateKey, &strval)) { @@ -63,7 +62,7 @@ void power_osx::checkps(CFDictionaryRef dict, bool * have_ac, bool * have_batter if (STRMATCH(strval, CFSTR(kIOPSACPowerValue))) { is_ac = *have_ac = true; } else if (!STRMATCH(strval, CFSTR(kIOPSBatteryPowerValue))) { - return; /* not a battery? */ + return; /* not a battery? */ } if ((GETVAL(kIOPSIsChargingKey, &bval)) && (bval == kCFBooleanTrue)) { @@ -75,7 +74,7 @@ void power_osx::checkps(CFDictionaryRef dict, bool * have_ac, bool * have_batter CFNumberGetValue(numval, kCFNumberSInt32Type, &val); if (val > 0) { *have_battery = true; - maxpct = (int) val; + maxpct = (int)val; } } @@ -84,7 +83,7 @@ void power_osx::checkps(CFDictionaryRef dict, bool * have_ac, bool * have_batter CFNumberGetValue(numval, kCFNumberSInt32Type, &val); if (val > 0) { *have_battery = true; - maxpct = (int) val; + maxpct = (int)val; } } @@ -93,24 +92,24 @@ void power_osx::checkps(CFDictionaryRef dict, bool * have_ac, bool * have_batter CFNumberGetValue(numval, kCFNumberSInt32Type, &val); /* Mac OS X reports 0 minutes until empty if you're plugged in. :( */ - if ((val == 0) && (is_ac)) { - val = -1; /* !!! FIXME: calc from timeToFull and capacity? */ - } + if ((val == 0) && (is_ac)) { + val = -1; /* !!! FIXME: calc from timeToFull and capacity? */ + } - secs = (int) val; - if (secs > 0) { - secs *= 60; /* value is in minutes, so convert to seconds. */ - } + secs = (int)val; + if (secs > 0) { + secs *= 60; /* value is in minutes, so convert to seconds. */ + } } if (GETVAL(kIOPSCurrentCapacityKey, &numval)) { SInt32 val = -1; CFNumberGetValue(numval, kCFNumberSInt32Type, &val); - pct = (int) val; + pct = (int)val; } if ((pct > 0) && (maxpct > 0)) { - pct = (int) ((((double) pct) / ((double) maxpct)) * 100.0); + pct = (int)((((double)pct) / ((double)maxpct)) * 100.0); } if (pct > 100) { @@ -123,7 +122,7 @@ void power_osx::checkps(CFDictionaryRef dict, bool * have_ac, bool * have_batter */ if ((secs < 0) && (nsecs_left < 0)) { if ((pct < 0) && (percent_left < 0)) { - choose = true; /* at least we know there's a battery. */ + choose = true; /* at least we know there's a battery. */ } if (pct > percent_left) { choose = true; @@ -143,8 +142,7 @@ void power_osx::checkps(CFDictionaryRef dict, bool * have_ac, bool * have_batter #undef STRMATCH // CODE CHUNK IMPORTED FROM SDL 2.0 -bool power_osx::GetPowerInfo_MacOSX() -{ +bool power_osx::GetPowerInfo_MacOSX() { CFTypeRef blob = IOPSCopyPowerSourcesInfo(); nsecs_left = -1; @@ -161,7 +159,7 @@ bool power_osx::GetPowerInfo_MacOSX() const CFIndex total = CFArrayGetCount(list); CFIndex i; for (i = 0; i < total; i++) { - CFTypeRef ps = (CFTypeRef) CFArrayGetValueAtIndex(list, i); + CFTypeRef ps = (CFTypeRef)CFArrayGetValueAtIndex(list, i); CFDictionaryRef dict = IOPSGetPowerSourceDescription(blob, ps); if (dict != NULL) { checkps(dict, &have_ac, &have_battery, &charging); @@ -183,11 +181,9 @@ bool power_osx::GetPowerInfo_MacOSX() CFRelease(blob); } - return true; /* always the definitive answer on Mac OS X. */ + return true; /* always the definitive answer on Mac OS X. */ } - - bool power_osx::UpdatePowerInfo() { if (GetPowerInfo_MacOSX()) { return true; @@ -195,12 +191,10 @@ bool power_osx::UpdatePowerInfo() { return false; } - PowerState power_osx::get_power_state() { if (UpdatePowerInfo()) { return power_state; - } - else { + } else { return POWERSTATE_UNKNOWN; } } @@ -208,8 +202,7 @@ PowerState power_osx::get_power_state() { int power_osx::get_power_seconds_left() { if (UpdatePowerInfo()) { return nsecs_left; - } - else { + } else { return -1; } } @@ -217,17 +210,14 @@ int power_osx::get_power_seconds_left() { int power_osx::get_power_percent_left() { if (UpdatePowerInfo()) { return percent_left; - } - else { + } else { return -1; } } - -power_osx::power_osx() : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { - +power_osx::power_osx() + : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { } power_osx::~power_osx() { - } diff --git a/platform/osx/power_osx.h b/platform/osx/power_osx.h index a4aee31117..c638dc675a 100644 --- a/platform/osx/power_osx.h +++ b/platform/osx/power_osx.h @@ -41,7 +41,7 @@ private: int nsecs_left; int percent_left; PowerState power_state; - void checkps(CFDictionaryRef dict, bool * have_ac, bool * have_battery, bool * charging); + void checkps(CFDictionaryRef dict, bool *have_ac, bool *have_battery, bool *charging); bool GetPowerInfo_MacOSX(/*PowerState * state, int *seconds, int *percent*/); bool UpdatePowerInfo(); diff --git a/platform/osx/sem_osx.cpp b/platform/osx/sem_osx.cpp index ca710d8b1e..069e3a5153 100644 --- a/platform/osx/sem_osx.cpp +++ b/platform/osx/sem_osx.cpp @@ -28,11 +28,10 @@ /*************************************************************************/ #include "sem_osx.h" -#include <unistd.h> #include <fcntl.h> +#include <unistd.h> -void cgsem_init(cgsem_t *cgsem) -{ +void cgsem_init(cgsem_t *cgsem) { int flags, fd, i; pipe(cgsem->pipefd); @@ -47,31 +46,26 @@ void cgsem_init(cgsem_t *cgsem) } } -void cgsem_post(cgsem_t *cgsem) -{ +void cgsem_post(cgsem_t *cgsem) { const char buf = 1; write(cgsem->pipefd[1], &buf, 1); } -void cgsem_wait(cgsem_t *cgsem) -{ +void cgsem_wait(cgsem_t *cgsem) { char buf; read(cgsem->pipefd[0], &buf, 1); } -void cgsem_destroy(cgsem_t *cgsem) -{ +void cgsem_destroy(cgsem_t *cgsem) { close(cgsem->pipefd[1]); close(cgsem->pipefd[0]); } - #include "os/memory.h" #include <errno.h> - Error SemaphoreOSX::wait() { cgsem_wait(&sem); @@ -89,15 +83,14 @@ int SemaphoreOSX::get() const { return 0; } - Semaphore *SemaphoreOSX::create_semaphore_osx() { - return memnew( SemaphoreOSX ); + return memnew(SemaphoreOSX); } void SemaphoreOSX::make_default() { - create_func=create_semaphore_osx; + create_func = create_semaphore_osx; } SemaphoreOSX::SemaphoreOSX() { @@ -105,11 +98,7 @@ SemaphoreOSX::SemaphoreOSX() { cgsem_init(&sem); } - SemaphoreOSX::~SemaphoreOSX() { cgsem_destroy(&sem); } - - - diff --git a/platform/osx/sem_osx.h b/platform/osx/sem_osx.h index da2fac434c..a30f3fcc98 100644 --- a/platform/osx/sem_osx.h +++ b/platform/osx/sem_osx.h @@ -44,7 +44,6 @@ class SemaphoreOSX : public Semaphore { static Semaphore *create_semaphore_osx(); public: - virtual Error wait(); virtual Error post(); virtual int get() const; @@ -53,8 +52,6 @@ public: SemaphoreOSX(); ~SemaphoreOSX(); - }; - #endif diff --git a/platform/server/godot_server.cpp b/platform/server/godot_server.cpp index 37e73d663d..d06ade4a57 100644 --- a/platform/server/godot_server.cpp +++ b/platform/server/godot_server.cpp @@ -29,12 +29,12 @@ #include "main/main.h" #include "os_server.h" -int main(int argc, char* argv[]) { +int main(int argc, char *argv[]) { OS_Server os; - Error err = Main::setup(argv[0],argc-1,&argv[1]); - if (err!=OK) + Error err = Main::setup(argv[0], argc - 1, &argv[1]); + if (err != OK) return 255; if (Main::start()) diff --git a/platform/server/os_server.cpp b/platform/server/os_server.cpp index ee80080b4e..f44d976bd6 100644 --- a/platform/server/os_server.cpp +++ b/platform/server/os_server.cpp @@ -29,10 +29,10 @@ //#include "servers/visual/visual_server_raster.h" //#include "servers/visual/rasterizer_dummy.h" #include "os_server.h" -#include <stdio.h> -#include <stdlib.h> #include "print_string.h" #include "servers/physics/physics_server_sw.h" +#include <stdio.h> +#include <stdlib.h> #include "main/main.h" @@ -42,20 +42,20 @@ int OS_Server::get_video_driver_count() const { return 1; } -const char * OS_Server::get_video_driver_name(int p_driver) const { +const char *OS_Server::get_video_driver_name(int p_driver) const { return "Dummy"; } OS::VideoMode OS_Server::get_default_video_mode() const { - return OS::VideoMode(800,600,false); + return OS::VideoMode(800, 600, false); } -void OS_Server::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) { +void OS_Server::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { - args=OS::get_singleton()->get_cmdline_args(); - current_videomode=p_desired; - main_loop=NULL; + args = OS::get_singleton()->get_cmdline_args(); + current_videomode = p_desired; + main_loop = NULL; //rasterizer = memnew( RasterizerDummy ); @@ -63,40 +63,37 @@ void OS_Server::initialize(const VideoMode& p_desired,int p_video_driver,int p_a 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."); } - sample_manager = memnew( SampleManagerMallocSW ); - audio_server = memnew( AudioServerSW(sample_manager) ); + sample_manager = memnew(SampleManagerMallocSW); + audio_server = memnew(AudioServerSW(sample_manager)); audio_server->init(); - spatial_sound_server = memnew( SpatialSoundServerSW ); + spatial_sound_server = memnew(SpatialSoundServerSW); spatial_sound_server->init(); - spatial_sound_2d_server = memnew( SpatialSound2DServerSW ); + spatial_sound_2d_server = memnew(SpatialSound2DServerSW); spatial_sound_2d_server->init(); - ERR_FAIL_COND(!visual_server); visual_server->init(); // - physics_server = memnew( PhysicsServerSW ); + physics_server = memnew(PhysicsServerSW); physics_server->init(); - physics_2d_server = memnew( Physics2DServerSW ); + physics_2d_server = memnew(Physics2DServerSW); physics_2d_server->init(); - input = memnew( InputDefault ); + input = memnew(InputDefault); _ensure_data_dir(); - - } void OS_Server::finalize() { - if(main_loop) + if (main_loop) memdelete(main_loop); - main_loop=NULL; + main_loop = NULL; spatial_sound_server->finish(); memdelete(spatial_sound_server); @@ -130,12 +127,10 @@ void OS_Server::finalize() { } void OS_Server::set_mouse_show(bool p_show) { - - } void OS_Server::set_mouse_grab(bool p_grab) { - grab=p_grab; + grab = p_grab; } bool OS_Server::is_mouse_grab_enabled() const { @@ -152,14 +147,10 @@ Point2 OS_Server::get_mouse_pos() const { return Point2(); } -void OS_Server::set_window_title(const String& p_title) { - - +void OS_Server::set_window_title(const String &p_title) { } -void OS_Server::set_video_mode(const VideoMode& p_video_mode,int p_screen) { - - +void OS_Server::set_video_mode(const VideoMode &p_video_mode, int p_screen) { } OS::VideoMode OS_Server::get_video_mode(int p_screen) const { @@ -168,15 +159,12 @@ OS::VideoMode OS_Server::get_video_mode(int p_screen) const { Size2 OS_Server::get_window_size() const { - return Vector2(current_videomode.width,current_videomode.height) ; + return Vector2(current_videomode.width, current_videomode.height); } -void OS_Server::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const { - - +void OS_Server::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const { } - MainLoop *OS_Server::get_main_loop() const { return main_loop; @@ -186,12 +174,12 @@ void OS_Server::delete_main_loop() { if (main_loop) memdelete(main_loop); - main_loop=NULL; + main_loop = NULL; } -void OS_Server::set_main_loop( MainLoop * p_main_loop ) { +void OS_Server::set_main_loop(MainLoop *p_main_loop) { - main_loop=p_main_loop; + main_loop = p_main_loop; input->set_main_loop(p_main_loop); } @@ -200,21 +188,15 @@ bool OS_Server::can_draw() const { return false; //can never draw }; - String OS_Server::get_name() { return "Server"; } - - void OS_Server::move_window_to_foreground() { - } void OS_Server::set_cursor_shape(CursorShape p_shape) { - - } PowerState OS_Server::get_power_state() { @@ -240,7 +222,7 @@ void OS_Server::run() { while (!force_quit) { - if (Main::iteration()==true) + if (Main::iteration() == true) break; }; @@ -251,6 +233,5 @@ OS_Server::OS_Server() { AudioDriverManager::add_driver(&driver_dummy); //adriver here - grab=false; - + grab = false; }; diff --git a/platform/server/os_server.h b/platform/server/os_server.h index a035076726..7484d70e06 100644 --- a/platform/server/os_server.h +++ b/platform/server/os_server.h @@ -29,16 +29,16 @@ #ifndef OS_SERVER_H #define OS_SERVER_H -#include "main/input_default.h" +#include "../x11/power_x11.h" +#include "drivers/rtaudio/audio_driver_rtaudio.h" #include "drivers/unix/os_unix.h" -#include "servers/visual_server.h" -#include "servers/visual/rasterizer.h" +#include "main/input_default.h" #include "servers/audio/audio_driver_dummy.h" -#include "servers/physics_server.h" #include "servers/audio_server.h" -#include "drivers/rtaudio/audio_driver_rtaudio.h" #include "servers/physics_2d/physics_2d_server_sw.h" -#include "../x11/power_x11.h" +#include "servers/physics_server.h" +#include "servers/visual/rasterizer.h" +#include "servers/visual_server.h" //bitch #undef CursorShape @@ -66,24 +66,20 @@ class OS_Server : public OS_Unix { bool force_quit; InputDefault *input; - - PowerX11 *power_manager; - + PowerX11 *power_manager; protected: - 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 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 finalize(); - virtual void set_main_loop( MainLoop * p_main_loop ); + virtual void set_main_loop(MainLoop *p_main_loop); public: - virtual String get_name(); virtual void set_cursor_shape(CursorShape p_shape); @@ -93,22 +89,22 @@ public: 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 MainLoop *get_main_loop() const; virtual bool can_draw() 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 Size2 get_window_size() const; virtual void move_window_to_foreground(); void run(); - + virtual PowerState get_power_state(); virtual int get_power_seconds_left(); virtual int get_power_percent_left(); diff --git a/platform/uwp/app.cpp b/platform/uwp/app.cpp index 0bae148c6b..35b25b1de5 100644 --- a/platform/uwp/app.cpp +++ b/platform/uwp/app.cpp @@ -32,10 +32,10 @@ #include "app.h" -#include "main/main.h" #include "core/os/dir_access.h" #include "core/os/file_access.h" #include "core/os/keyboard.h" +#include "main/main.h" #include "platform/windows/key_mapping_win.h" @@ -56,126 +56,113 @@ using namespace Microsoft::WRL; using namespace GodotUWP; // Helper to convert a length in device-independent pixels (DIPs) to a length in physical pixels. -inline float ConvertDipsToPixels(float dips, float dpi) -{ - static const float dipsPerInch = 96.0f; - return floor(dips * dpi / dipsPerInch + 0.5f); // Round to nearest integer. +inline float ConvertDipsToPixels(float dips, float dpi) { + static const float dipsPerInch = 96.0f; + return floor(dips * dpi / dipsPerInch + 0.5f); // Round to nearest integer. } // Implementation of the IFrameworkViewSource interface, necessary to run our app. -ref class GodotUWPViewSource sealed : Windows::ApplicationModel::Core::IFrameworkViewSource -{ +ref class GodotUWPViewSource sealed : Windows::ApplicationModel::Core::IFrameworkViewSource { public: - virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView() - { - return ref new App(); - } + virtual Windows::ApplicationModel::Core::IFrameworkView ^ CreateView() { + return ref new App(); + } }; // The main function creates an IFrameworkViewSource for our app, and runs the app. -[Platform::MTAThread] -int main(Platform::Array<Platform::String^>^) -{ - auto godotApplicationSource = ref new GodotUWPViewSource(); - CoreApplication::Run(godotApplicationSource); - return 0; +[Platform::MTAThread] int main(Platform::Array<Platform::String ^> ^) { + auto godotApplicationSource = ref new GodotUWPViewSource(); + CoreApplication::Run(godotApplicationSource); + return 0; } -App::App() : - mWindowClosed(false), - mWindowVisible(true), - mWindowWidth(0), - mWindowHeight(0), - mEglDisplay(EGL_NO_DISPLAY), - mEglContext(EGL_NO_CONTEXT), - mEglSurface(EGL_NO_SURFACE), - number_of_contacts(0) -{ +App::App() + : mWindowClosed(false), + mWindowVisible(true), + mWindowWidth(0), + mWindowHeight(0), + mEglDisplay(EGL_NO_DISPLAY), + mEglContext(EGL_NO_CONTEXT), + mEglSurface(EGL_NO_SURFACE), + number_of_contacts(0) { } // The first method called when the IFrameworkView is being created. -void App::Initialize(CoreApplicationView^ applicationView) -{ - // Register event handlers for app lifecycle. This example includes Activated, so that we - // can make the CoreWindow active and start rendering on the window. - applicationView->Activated += - ref new TypedEventHandler<CoreApplicationView^, IActivatedEventArgs^>(this, &App::OnActivated); +void App::Initialize(CoreApplicationView ^ applicationView) { + // Register event handlers for app lifecycle. This example includes Activated, so that we + // can make the CoreWindow active and start rendering on the window. + applicationView->Activated += + ref new TypedEventHandler<CoreApplicationView ^, IActivatedEventArgs ^>(this, &App::OnActivated); - // Logic for other event handlers could go here. - // Information about the Suspending and Resuming event handlers can be found here: - // http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh994930.aspx + // Logic for other event handlers could go here. + // Information about the Suspending and Resuming event handlers can be found here: + // http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh994930.aspx os = new OSUWP; - } // Called when the CoreWindow object is created (or re-created). -void App::SetWindow(CoreWindow^ p_window) -{ +void App::SetWindow(CoreWindow ^ p_window) { window = p_window; - window->VisibilityChanged += - ref new TypedEventHandler<CoreWindow^, VisibilityChangedEventArgs^>(this, &App::OnVisibilityChanged); + window->VisibilityChanged += + ref new TypedEventHandler<CoreWindow ^, VisibilityChangedEventArgs ^>(this, &App::OnVisibilityChanged); - window->Closed += - ref new TypedEventHandler<CoreWindow^, CoreWindowEventArgs^>(this, &App::OnWindowClosed); + window->Closed += + ref new TypedEventHandler<CoreWindow ^, CoreWindowEventArgs ^>(this, &App::OnWindowClosed); - window->SizeChanged += - ref new TypedEventHandler<CoreWindow^, WindowSizeChangedEventArgs^>(this, &App::OnWindowSizeChanged); + window->SizeChanged += + ref new TypedEventHandler<CoreWindow ^, WindowSizeChangedEventArgs ^>(this, &App::OnWindowSizeChanged); #if !(WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) - // Disable all pointer visual feedback for better performance when touching. - // This is not supported on Windows Phone applications. - auto pointerVisualizationSettings = PointerVisualizationSettings::GetForCurrentView(); - pointerVisualizationSettings->IsContactFeedbackEnabled = false; - pointerVisualizationSettings->IsBarrelButtonFeedbackEnabled = false; + // Disable all pointer visual feedback for better performance when touching. + // This is not supported on Windows Phone applications. + auto pointerVisualizationSettings = PointerVisualizationSettings::GetForCurrentView(); + pointerVisualizationSettings->IsContactFeedbackEnabled = false; + pointerVisualizationSettings->IsBarrelButtonFeedbackEnabled = false; #endif - window->PointerPressed += - ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerPressed); + ref new TypedEventHandler<CoreWindow ^, PointerEventArgs ^>(this, &App::OnPointerPressed); window->PointerMoved += - ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerMoved); + ref new TypedEventHandler<CoreWindow ^, PointerEventArgs ^>(this, &App::OnPointerMoved); window->PointerReleased += - ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerReleased); + ref new TypedEventHandler<CoreWindow ^, PointerEventArgs ^>(this, &App::OnPointerReleased); window->PointerWheelChanged += - ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerWheelChanged); + ref new TypedEventHandler<CoreWindow ^, PointerEventArgs ^>(this, &App::OnPointerWheelChanged); mouseChangedNotifier = SignalNotifier::AttachToEvent(L"os_mouse_mode_changed", ref new SignalHandler( - this, &App::OnMouseModeChanged - )); + this, &App::OnMouseModeChanged)); mouseChangedNotifier->Enable(); window->CharacterReceived += - ref new TypedEventHandler<CoreWindow^, CharacterReceivedEventArgs^>(this, &App::OnCharacterReceived); + ref new TypedEventHandler<CoreWindow ^, CharacterReceivedEventArgs ^>(this, &App::OnCharacterReceived); window->KeyDown += - ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &App::OnKeyDown); + ref new TypedEventHandler<CoreWindow ^, KeyEventArgs ^>(this, &App::OnKeyDown); window->KeyUp += - ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &App::OnKeyUp); - + ref new TypedEventHandler<CoreWindow ^, KeyEventArgs ^>(this, &App::OnKeyUp); unsigned int argc; - char** argv = get_command_line(&argc); + char **argv = get_command_line(&argc); Main::setup("uwp", argc, argv, false); // The CoreWindow has been created, so EGL can be initialized. - ContextEGL* context = memnew(ContextEGL(window)); + ContextEGL *context = memnew(ContextEGL(window)); os->set_gl_context(context); UpdateWindowSize(Size(window->Bounds.Width, window->Bounds.Height)); Main::setup2(); } -static int _get_button(Windows::UI::Input::PointerPoint ^pt) { +static int _get_button(Windows::UI::Input::PointerPoint ^ pt) { using namespace Windows::UI::Input; #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP return BUTTON_LEFT; #else - switch (pt->Properties->PointerUpdateKind) - { + switch (pt->Properties->PointerUpdateKind) { case PointerUpdateKind::LeftButtonPressed: case PointerUpdateKind::LeftButtonReleased: return BUTTON_LEFT; @@ -204,7 +191,7 @@ static int _get_button(Windows::UI::Input::PointerPoint ^pt) { return 0; }; -static bool _is_touch(Windows::UI::Input::PointerPoint ^pointerPoint) { +static bool _is_touch(Windows::UI::Input::PointerPoint ^ pointerPoint) { #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP return true; #else @@ -219,20 +206,18 @@ static bool _is_touch(Windows::UI::Input::PointerPoint ^pointerPoint) { #endif } - -static Windows::Foundation::Point _get_pixel_position(CoreWindow^ window, Windows::Foundation::Point rawPosition, OS* os) { +static Windows::Foundation::Point _get_pixel_position(CoreWindow ^ window, Windows::Foundation::Point rawPosition, OS *os) { Windows::Foundation::Point outputPosition; - // Compute coordinates normalized from 0..1. - // If the coordinates need to be sized to the SDL window, - // we'll do that after. - #if 1 || WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP +// Compute coordinates normalized from 0..1. +// If the coordinates need to be sized to the SDL window, +// we'll do that after. +#if 1 || WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP outputPosition.X = rawPosition.X / window->Bounds.Width; outputPosition.Y = rawPosition.Y / window->Bounds.Height; - #else - switch (DisplayProperties::CurrentOrientation) - { +#else + switch (DisplayProperties::CurrentOrientation) { case DisplayOrientations::Portrait: outputPosition.X = rawPosition.X / window->Bounds.Width; outputPosition.Y = rawPosition.Y / window->Bounds.Height; @@ -252,7 +237,7 @@ static Windows::Foundation::Point _get_pixel_position(CoreWindow^ window, Window default: break; } - #endif +#endif OS::VideoMode vm = os->get_video_mode(); outputPosition.X *= vm.width; @@ -266,9 +251,9 @@ static int _get_finger(uint32_t p_touch_id) { return p_touch_id % 31; // for now }; -void App::pointer_event(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args, bool p_pressed, bool p_is_wheel) { +void App::pointer_event(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args, bool p_pressed, bool p_is_wheel) { - Windows::UI::Input::PointerPoint ^point = args->CurrentPoint; + Windows::UI::Input::PointerPoint ^ point = args->CurrentPoint; Windows::Foundation::Point pos = _get_pixel_position(window, point->Position, os); int but = _get_button(point); if (_is_touch(point)) { @@ -314,56 +299,51 @@ void App::pointer_event(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core os->input_event(event); }; - -void App::OnPointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) { +void App::OnPointerPressed(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args) { number_of_contacts++; pointer_event(sender, args, true); }; - -void App::OnPointerReleased(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) { +void App::OnPointerReleased(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args) { number_of_contacts--; pointer_event(sender, args, false); }; -void App::OnPointerWheelChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) { +void App::OnPointerWheelChanged(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args) { pointer_event(sender, args, true, true); } -void App::OnMouseModeChanged(Windows::System::Threading::Core::SignalNotifier^ signalNotifier, bool timedOut) { +void App::OnMouseModeChanged(Windows::System::Threading::Core::SignalNotifier ^ signalNotifier, bool timedOut) { OS::MouseMode mode = os->get_mouse_mode(); - SignalNotifier^ notifier = mouseChangedNotifier; + SignalNotifier ^ notifier = mouseChangedNotifier; window->Dispatcher->RunAsync( - CoreDispatcherPriority::High, - ref new DispatchedHandler( - [mode, notifier, this]() { - if (mode == OS::MOUSE_MODE_CAPTURED) { + CoreDispatcherPriority::High, + ref new DispatchedHandler( + [mode, notifier, this]() { + if (mode == OS::MOUSE_MODE_CAPTURED) { - this->MouseMovedToken = MouseDevice::GetForCurrentView()->MouseMoved += - ref new TypedEventHandler<MouseDevice^, MouseEventArgs^>(this, &App::OnMouseMoved); + this->MouseMovedToken = MouseDevice::GetForCurrentView()->MouseMoved += + ref new TypedEventHandler<MouseDevice ^, MouseEventArgs ^>(this, &App::OnMouseMoved); - } else { + } else { - MouseDevice::GetForCurrentView()->MouseMoved -= MouseMovedToken; + MouseDevice::GetForCurrentView()->MouseMoved -= MouseMovedToken; + } - } - - notifier->Enable(); - })); + notifier->Enable(); + })); ResetEvent(os->mouse_mode_changed); - - } -void App::OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args) { +void App::OnPointerMoved(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args) { - Windows::UI::Input::PointerPoint ^point = args->CurrentPoint; + Windows::UI::Input::PointerPoint ^ point = args->CurrentPoint; Windows::Foundation::Point pos = _get_pixel_position(window, point->Position, os); if (point->IsInContact && _is_touch(point)) { @@ -400,7 +380,6 @@ void App::OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Cor last_mouse_pos = pos; os->input_event(event); - } void App::OnMouseMoved(MouseDevice ^ mouse_device, MouseEventArgs ^ args) { @@ -428,8 +407,7 @@ void App::OnMouseMoved(MouseDevice ^ mouse_device, MouseEventArgs ^ args) { os->input_event(event); } -void App::key_event(Windows::UI::Core::CoreWindow^ sender, bool p_pressed, Windows::UI::Core::KeyEventArgs^ key_args, Windows::UI::Core::CharacterReceivedEventArgs^ char_args) -{ +void App::key_event(Windows::UI::Core::CoreWindow ^ sender, bool p_pressed, Windows::UI::Core::KeyEventArgs ^ key_args, Windows::UI::Core::CharacterReceivedEventArgs ^ char_args) { OSUWP::KeyEvent ke; @@ -442,9 +420,9 @@ void App::key_event(Windows::UI::Core::CoreWindow^ sender, bool p_pressed, Windo ke.mod_state = mod; ke.pressed = p_pressed; - + if (key_args != nullptr) { - + ke.type = OSUWP::KeyEvent::MessageType::KEY_EVENT_MESSAGE; ke.unicode = 0; ke.scancode = KeyMappingWindows::get_keysym((unsigned int)key_args->VirtualKey); @@ -459,92 +437,78 @@ void App::key_event(Windows::UI::Core::CoreWindow^ sender, bool p_pressed, Windo } os->queue_key_event(ke); - } -void App::OnKeyDown(CoreWindow^ sender, KeyEventArgs^ args) -{ +void App::OnKeyDown(CoreWindow ^ sender, KeyEventArgs ^ args) { key_event(sender, true, args); } -void App::OnKeyUp(CoreWindow^ sender, KeyEventArgs^ args) -{ +void App::OnKeyUp(CoreWindow ^ sender, KeyEventArgs ^ args) { key_event(sender, false, args); } -void App::OnCharacterReceived(CoreWindow^ sender, CharacterReceivedEventArgs^ args) -{ +void App::OnCharacterReceived(CoreWindow ^ sender, CharacterReceivedEventArgs ^ args) { key_event(sender, true, nullptr, args); } - // Initializes scene resources -void App::Load(Platform::String^ entryPoint) -{ - +void App::Load(Platform::String ^ entryPoint) { } // This method is called after the window becomes active. -void App::Run() -{ +void App::Run() { if (Main::start()) os->run(); } // Terminate events do not cause Uninitialize to be called. It will be called if your IFrameworkView // class is torn down while the app is in the foreground. -void App::Uninitialize() -{ +void App::Uninitialize() { Main::cleanup(); delete os; } // Application lifecycle event handler. -void App::OnActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args) -{ - // Run() won't start until the CoreWindow is activated. - CoreWindow::GetForCurrentThread()->Activate(); +void App::OnActivated(CoreApplicationView ^ applicationView, IActivatedEventArgs ^ args) { + // Run() won't start until the CoreWindow is activated. + CoreWindow::GetForCurrentThread()->Activate(); } // Window event handlers. -void App::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args) -{ - mWindowVisible = args->Visible; +void App::OnVisibilityChanged(CoreWindow ^ sender, VisibilityChangedEventArgs ^ args) { + mWindowVisible = args->Visible; } -void App::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args) -{ - mWindowClosed = true; +void App::OnWindowClosed(CoreWindow ^ sender, CoreWindowEventArgs ^ args) { + mWindowClosed = true; } -void App::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEventArgs^ args) -{ +void App::OnWindowSizeChanged(CoreWindow ^ sender, WindowSizeChangedEventArgs ^ args) { #if (WINAPI_FAMILY == WINAPI_FAMILY_PC_APP) - // On Windows 8.1, apps are resized when they are snapped alongside other apps, or when the device is rotated. - // The default framebuffer will be automatically resized when either of these occur. - // In particular, on a 90 degree rotation, the default framebuffer's width and height will switch. - UpdateWindowSize(args->Size); + // On Windows 8.1, apps are resized when they are snapped alongside other apps, or when the device is rotated. + // The default framebuffer will be automatically resized when either of these occur. + // In particular, on a 90 degree rotation, the default framebuffer's width and height will switch. + UpdateWindowSize(args->Size); #else if (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) - // On Windows Phone 8.1, the window size changes when the device is rotated. - // The default framebuffer will not be automatically resized when this occurs. - // It is therefore up to the app to handle rotation-specific logic in its rendering code. + // On Windows Phone 8.1, the window size changes when the device is rotated. + // The default framebuffer will not be automatically resized when this occurs. + // It is therefore up to the app to handle rotation-specific logic in its rendering code. //os->screen_size_changed(); UpdateWindowSize(args->Size); #endif } -void App::UpdateWindowSize(Size size) -{ +void App::UpdateWindowSize(Size size) { float dpi; #if (WINAPI_FAMILY == WINAPI_FAMILY_PC_APP) - DisplayInformation^ currentDisplayInformation = DisplayInformation::GetForCurrentView(); + DisplayInformation ^ currentDisplayInformation = DisplayInformation::GetForCurrentView(); dpi = currentDisplayInformation->LogicalDpi; #else if (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) dpi = DisplayProperties::LogicalDpi; #endif Size pixelSize(ConvertDipsToPixels(size.Width, dpi), ConvertDipsToPixels(size.Height, dpi)); - mWindowWidth = static_cast<GLsizei>(pixelSize.Width); - mWindowHeight = static_cast<GLsizei>(pixelSize.Height); + mWindowWidth = static_cast<GLsizei>(pixelSize.Width); + mWindowHeight = static_cast<GLsizei>(pixelSize.Height); OS::VideoMode vm; vm.width = mWindowWidth; @@ -554,12 +518,12 @@ void App::UpdateWindowSize(Size size) os->set_video_mode(vm); } -char** App::get_command_line(unsigned int* out_argc) { +char **App::get_command_line(unsigned int *out_argc) { - static char* fail_cl[] = { "-path", "game", NULL }; + static char *fail_cl[] = { "-path", "game", NULL }; *out_argc = 2; - FILE* f = _wfopen(L"__cl__.cl", L"rb"); + FILE *f = _wfopen(L"__cl__.cl", L"rb"); if (f == NULL) { @@ -573,12 +537,12 @@ char** App::get_command_line(unsigned int* out_argc) { uint8_t len[4]; int r = fread(len, sizeof(uint8_t), 4, f); - Platform::Collections::Vector<Platform::String^> cl; + Platform::Collections::Vector<Platform::String ^> cl; if (r < 4) { fclose(f); wprintf(L"Wrong cmdline length."); - return(fail_cl); + return (fail_cl); } int argc = READ_LE_4(len); @@ -590,7 +554,7 @@ char** App::get_command_line(unsigned int* out_argc) { if (r < 4) { fclose(f); wprintf(L"Wrong cmdline param length."); - return(fail_cl); + return (fail_cl); } int strlen = READ_LE_4(len); @@ -598,17 +562,17 @@ char** App::get_command_line(unsigned int* out_argc) { if (strlen > CMD_MAX_LEN) { fclose(f); wprintf(L"Wrong command length."); - return(fail_cl); + return (fail_cl); } - char* arg = new char[strlen + 1]; + char *arg = new char[strlen + 1]; r = fread(arg, sizeof(char), strlen, f); arg[strlen] = '\0'; if (r == strlen) { int warg_size = MultiByteToWideChar(CP_UTF8, 0, arg, -1, NULL, 0); - wchar_t* warg = new wchar_t[warg_size]; + wchar_t *warg = new wchar_t[warg_size]; MultiByteToWideChar(CP_UTF8, 0, arg, -1, warg, warg_size); @@ -619,7 +583,7 @@ char** App::get_command_line(unsigned int* out_argc) { delete[] arg; fclose(f); wprintf(L"Error reading command."); - return(fail_cl); + return (fail_cl); } } @@ -628,17 +592,16 @@ char** App::get_command_line(unsigned int* out_argc) { fclose(f); - char** ret = new char*[cl.Size + 1]; + char **ret = new char *[cl.Size + 1]; for (int i = 0; i < cl.Size; i++) { int arg_size = WideCharToMultiByte(CP_UTF8, 0, cl.GetAt(i)->Data(), -1, NULL, 0, NULL, NULL); - char* arg = new char[arg_size]; + char *arg = new char[arg_size]; WideCharToMultiByte(CP_UTF8, 0, cl.GetAt(i)->Data(), -1, arg, arg_size, NULL, NULL); ret[i] = arg; - } ret[cl.Size] = NULL; *out_argc = cl.Size; diff --git a/platform/uwp/export/export.cpp b/platform/uwp/export/export.cpp index 52a22a1942..a9b26056fc 100644 --- a/platform/uwp/export/export.cpp +++ b/platform/uwp/export/export.cpp @@ -66,21 +66,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *************************************************************************/ #if 0 -#include "version.h" #include "export.h" -#include "object.h" +#include "bind/core_bind.h" #include "editor/editor_import_export.h" #include "editor/editor_node.h" -#include "platform/uwp/logo.h" -#include "os/file_access.h" -#include "io/zip.h" -#include "io/unzip.h" -#include "io/zip_io.h" -#include "io/sha256.h" -#include "io/base64.h" -#include "bind/core_bind.h" #include "global_config.h" +#include "io/base64.h" #include "io/marshalls.h" +#include "io/sha256.h" +#include "io/unzip.h" +#include "io/zip.h" +#include "io/zip_io.h" +#include "object.h" +#include "os/file_access.h" +#include "platform/uwp/logo.h" +#include "version.h" #include <zlib.h> @@ -120,14 +120,14 @@ static const char* uwp_device_capabilites[] = { }; #ifdef OPENSSL_ENABLED -#include <openssl/bio.h> #include <openssl/asn1.h> -#include <openssl/pkcs7.h> -#include <openssl/pkcs12.h> -#include <openssl/err.h> #include <openssl/asn1t.h> -#include <openssl/x509.h> +#include <openssl/bio.h> +#include <openssl/err.h> #include <openssl/ossl_typ.h> +#include <openssl/pkcs12.h> +#include <openssl/pkcs7.h> +#include <openssl/x509.h> namespace asn1 { // https://msdn.microsoft.com/en-us/gg463180.aspx @@ -2391,4 +2391,3 @@ void register_uwp_exporter() { EditorImportExport::get_singleton()->add_export_platform(exporter); #endif } - diff --git a/platform/uwp/gl_context_egl.cpp b/platform/uwp/gl_context_egl.cpp index c9c03db8a1..6c9efc26b4 100644 --- a/platform/uwp/gl_context_egl.cpp +++ b/platform/uwp/gl_context_egl.cpp @@ -62,8 +62,7 @@ void ContextEGL::reset() { void ContextEGL::swap_buffers() { - if (eglSwapBuffers(mEglDisplay, mEglSurface) != EGL_TRUE) - { + if (eglSwapBuffers(mEglDisplay, mEglSurface) != EGL_TRUE) { cleanup(); window = CoreWindow::GetForCurrentThread(); @@ -102,69 +101,61 @@ Error ContextEGL::initialize() { try { const EGLint displayAttributes[] = - { - /*EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, + { + /*EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE, 9, EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE, 3, EGL_NONE,*/ - // These are the default display attributes, used to request ANGLE's D3D11 renderer. - // eglInitialize will only succeed with these attributes if the hardware supports D3D11 Feature Level 10_0+. - EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, - - // EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER is an optimization that can have large performance benefits on mobile devices. - // Its syntax is subject to change, though. Please update your Visual Studio templates if you experience compilation issues with it. - //EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER, EGL_TRUE, - - // EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE is an option that enables ANGLE to automatically call - // the IDXGIDevice3::Trim method on behalf of the application when it gets suspended. - // Calling IDXGIDevice3::Trim when an application is suspended is a Windows Store application certification requirement. - EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE, EGL_TRUE, - EGL_NONE, - }; + // These are the default display attributes, used to request ANGLE's D3D11 renderer. + // eglInitialize will only succeed with these attributes if the hardware supports D3D11 Feature Level 10_0+. + EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, + + // EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER is an optimization that can have large performance benefits on mobile devices. + // Its syntax is subject to change, though. Please update your Visual Studio templates if you experience compilation issues with it. + //EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER, EGL_TRUE, + + // EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE is an option that enables ANGLE to automatically call + // the IDXGIDevice3::Trim method on behalf of the application when it gets suspended. + // Calling IDXGIDevice3::Trim when an application is suspended is a Windows Store application certification requirement. + EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE, EGL_TRUE, + EGL_NONE, + }; PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(eglGetProcAddress("eglGetPlatformDisplayEXT")); - if (!eglGetPlatformDisplayEXT) - { + if (!eglGetPlatformDisplayEXT) { throw Exception::CreateException(E_FAIL, L"Failed to get function eglGetPlatformDisplayEXT"); } display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, displayAttributes); - if (display == EGL_NO_DISPLAY) - { + if (display == EGL_NO_DISPLAY) { throw Exception::CreateException(E_FAIL, L"Failed to get default EGL display"); } - if (eglInitialize(display, &majorVersion, &minorVersion) == EGL_FALSE) - { + if (eglInitialize(display, &majorVersion, &minorVersion) == EGL_FALSE) { throw Exception::CreateException(E_FAIL, L"Failed to initialize EGL"); } - if (eglGetConfigs(display, NULL, 0, &numConfigs) == EGL_FALSE) - { + if (eglGetConfigs(display, NULL, 0, &numConfigs) == EGL_FALSE) { throw Exception::CreateException(E_FAIL, L"Failed to get EGLConfig count"); } - if (eglChooseConfig(display, configAttribList, &config, 1, &numConfigs) == EGL_FALSE) - { + if (eglChooseConfig(display, configAttribList, &config, 1, &numConfigs) == EGL_FALSE) { throw Exception::CreateException(E_FAIL, L"Failed to choose first EGLConfig count"); } - surface = eglCreateWindowSurface(display, config, reinterpret_cast<IInspectable*>(window), surfaceAttribList); - if (surface == EGL_NO_SURFACE) - { + surface = eglCreateWindowSurface(display, config, reinterpret_cast<IInspectable *>(window), surfaceAttribList); + if (surface == EGL_NO_SURFACE) { throw Exception::CreateException(E_FAIL, L"Failed to create EGL fullscreen surface"); } context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs); - if (context == EGL_NO_CONTEXT) - { + if (context == EGL_NO_CONTEXT) { throw Exception::CreateException(E_FAIL, L"Failed to create EGL context"); } - if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) - { + if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) { throw Exception::CreateException(E_FAIL, L"Failed to make fullscreen EGLSurface current"); } } catch (...) { @@ -175,38 +166,34 @@ Error ContextEGL::initialize() { mEglSurface = surface; mEglContext = context; - eglQuerySurface(display,surface,EGL_WIDTH,&width); - eglQuerySurface(display,surface,EGL_HEIGHT,&height); + eglQuerySurface(display, surface, EGL_WIDTH, &width); + eglQuerySurface(display, surface, EGL_HEIGHT, &height); return OK; }; void ContextEGL::cleanup() { - if (mEglDisplay != EGL_NO_DISPLAY && mEglSurface != EGL_NO_SURFACE) - { + if (mEglDisplay != EGL_NO_DISPLAY && mEglSurface != EGL_NO_SURFACE) { eglDestroySurface(mEglDisplay, mEglSurface); mEglSurface = EGL_NO_SURFACE; } - if (mEglDisplay != EGL_NO_DISPLAY && mEglContext != EGL_NO_CONTEXT) - { + if (mEglDisplay != EGL_NO_DISPLAY && mEglContext != EGL_NO_CONTEXT) { eglDestroyContext(mEglDisplay, mEglContext); mEglContext = EGL_NO_CONTEXT; } - if (mEglDisplay != EGL_NO_DISPLAY) - { + if (mEglDisplay != EGL_NO_DISPLAY) { eglTerminate(mEglDisplay); mEglDisplay = EGL_NO_DISPLAY; } }; -ContextEGL::ContextEGL(CoreWindow^ p_window) : - mEglDisplay(EGL_NO_DISPLAY), - mEglContext(EGL_NO_CONTEXT), - mEglSurface(EGL_NO_SURFACE) - { +ContextEGL::ContextEGL(CoreWindow ^ p_window) + : mEglDisplay(EGL_NO_DISPLAY), + mEglContext(EGL_NO_CONTEXT), + mEglSurface(EGL_NO_SURFACE) { window = p_window; }; @@ -215,4 +202,3 @@ ContextEGL::~ContextEGL() { cleanup(); }; - diff --git a/platform/uwp/gl_context_egl.h b/platform/uwp/gl_context_egl.h index 858eaa6d12..c397c1206b 100644 --- a/platform/uwp/gl_context_egl.h +++ b/platform/uwp/gl_context_egl.h @@ -31,16 +31,16 @@ #include <wrl.h> -#include "os/os.h" #include "EGL/egl.h" -#include "error_list.h" #include "drivers/gl_context/context_gl.h" +#include "error_list.h" +#include "os/os.h" using namespace Windows::UI::Core; class ContextEGL : public ContextGL { - CoreWindow^ window; + CoreWindow ^ window; EGLDisplay mEglDisplay; EGLContext mEglContext; @@ -52,7 +52,6 @@ class ContextEGL : public ContextGL { bool vsync; public: - virtual void release_current(); virtual void make_current(); @@ -69,10 +68,8 @@ public: void cleanup(); - ContextEGL(CoreWindow^ p_window); + ContextEGL(CoreWindow ^ p_window); ~ContextEGL(); - }; #endif - diff --git a/platform/uwp/joypad_uwp.cpp b/platform/uwp/joypad_uwp.cpp index 7f0837d7be..dd57ed94ae 100644 --- a/platform/uwp/joypad_uwp.cpp +++ b/platform/uwp/joypad_uwp.cpp @@ -35,9 +35,9 @@ using namespace Windows::Foundation; void JoypadUWP::register_events() { Gamepad::GamepadAdded += - ref new EventHandler<Gamepad^>(this, &JoypadUWP::OnGamepadAdded); + ref new EventHandler<Gamepad ^>(this, &JoypadUWP::OnGamepadAdded); Gamepad::GamepadRemoved += - ref new EventHandler<Gamepad^>(this, &JoypadUWP::OnGamepadRemoved); + ref new EventHandler<Gamepad ^>(this, &JoypadUWP::OnGamepadRemoved); } uint32_t JoypadUWP::process_controllers(uint32_t p_last_id) { @@ -48,26 +48,26 @@ uint32_t JoypadUWP::process_controllers(uint32_t p_last_id) { switch (controllers[i].type) { - case ControllerType::GAMEPAD_CONTROLLER: { + case ControllerType::GAMEPAD_CONTROLLER: { - GamepadReading reading = ((Gamepad^)controllers[i].controller_reference)->GetCurrentReading(); + GamepadReading reading = ((Gamepad ^)controllers[i].controller_reference)->GetCurrentReading(); - int button_mask = (int)GamepadButtons::Menu; - for (int j = 0; j < 14; j++) { + int button_mask = (int)GamepadButtons::Menu; + for (int j = 0; j < 14; j++) { - p_last_id = input->joy_button(p_last_id, controllers[i].id, j,(int)reading.Buttons & button_mask); - button_mask *= 2; - } + p_last_id = input->joy_button(p_last_id, controllers[i].id, j, (int)reading.Buttons & button_mask); + button_mask *= 2; + } - p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_0, axis_correct(reading.LeftThumbstickX)); - p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_1, axis_correct(reading.LeftThumbstickY, true)); - p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_2, axis_correct(reading.RightThumbstickX)); - p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_3, axis_correct(reading.RightThumbstickY, true)); - p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_4, axis_correct(reading.LeftTrigger, false, true)); - p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_5, axis_correct(reading.RightTrigger, false, true)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_0, axis_correct(reading.LeftThumbstickX)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_1, axis_correct(reading.LeftThumbstickY, true)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_2, axis_correct(reading.RightThumbstickX)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_3, axis_correct(reading.RightThumbstickY, true)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_4, axis_correct(reading.LeftTrigger, false, true)); + p_last_id = input->joy_axis(p_last_id, controllers[i].id, JOY_AXIS_5, axis_correct(reading.RightTrigger, false, true)); - break; - } + break; + } } } @@ -80,7 +80,7 @@ JoypadUWP::JoypadUWP() { controllers[i].id = i; } -JoypadUWP::JoypadUWP(InputDefault * p_input) { +JoypadUWP::JoypadUWP(InputDefault *p_input) { input = p_input; diff --git a/platform/uwp/joypad_uwp.h b/platform/uwp/joypad_uwp.h index 5d81ac44c0..e5a961e70e 100644 --- a/platform/uwp/joypad_uwp.h +++ b/platform/uwp/joypad_uwp.h @@ -41,10 +41,9 @@ internal: /* clang-format on */ JoypadUWP(); - JoypadUWP(InputDefault* p_input); + JoypadUWP(InputDefault *p_input); private: - enum { MAX_CONTROLLERS = 4, }; @@ -57,7 +56,7 @@ private: struct ControllerDevice { - Windows::Gaming::Input::IGameController^ controller_reference; + Windows::Gaming::Input::IGameController ^ controller_reference; int id; bool connected; @@ -72,10 +71,10 @@ private: ControllerDevice controllers[MAX_CONTROLLERS]; - InputDefault* input; + InputDefault *input; - void OnGamepadAdded(Platform::Object^ sender, Windows::Gaming::Input::Gamepad^ value); - void OnGamepadRemoved(Platform::Object^ sender, Windows::Gaming::Input::Gamepad^ value); + void OnGamepadAdded(Platform::Object ^ sender, Windows::Gaming::Input::Gamepad ^ value); + void OnGamepadRemoved(Platform::Object ^ sender, Windows::Gaming::Input::Gamepad ^ value); InputDefault::JoyAxis axis_correct(double p_val, bool p_negate = false, bool p_trigger = false) const; }; diff --git a/platform/uwp/os_uwp.cpp b/platform/uwp/os_uwp.cpp index eb62164fd5..19ed2b57a3 100644 --- a/platform/uwp/os_uwp.cpp +++ b/platform/uwp/os_uwp.cpp @@ -26,28 +26,28 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "drivers/gles2/rasterizer_gles2.h" #include "os_uwp.h" -#include "os/memory_pool_dynamic_static.h" -#include "thread_uwp.h" -#include "drivers/windows/semaphore_windows.h" +#include "drivers/gles2/rasterizer_gles2.h" +#include "drivers/windows/dir_access_windows.h" +#include "drivers/windows/file_access_windows.h" #include "drivers/windows/mutex_windows.h" +#include "drivers/windows/semaphore_windows.h" #include "main/main.h" -#include "drivers/windows/file_access_windows.h" -#include "drivers/windows/dir_access_windows.h" -#include "servers/visual/visual_server_raster.h" +#include "os/memory_pool_dynamic_static.h" #include "servers/audio_server.h" +#include "servers/visual/visual_server_raster.h" +#include "thread_uwp.h" //#include "servers/visual/visual_server_wrap_mt.h" -#include "os/memory_pool_dynamic_prealloc.h" +#include "drivers/unix/ip_unix.h" #include "global_config.h" #include "io/marshalls.h" +#include "os/memory_pool_dynamic_prealloc.h" #include "platform/windows/packet_peer_udp_winsock.h" #include "platform/windows/stream_peer_winsock.h" #include "platform/windows/tcp_server_winsock.h" -#include "drivers/unix/ip_unix.h" -#include <wrl.h> #include <ppltasks.h> +#include <wrl.h> using namespace Windows::ApplicationModel::Core; using namespace Windows::ApplicationModel::Activation; @@ -63,12 +63,11 @@ using namespace Windows::Devices::Sensors; using namespace Windows::ApplicationModel::DataTransfer; using namespace concurrency; - int OSUWP::get_video_driver_count() const { return 1; } -const char * OSUWP::get_video_driver_name(int p_driver) const { +const char *OSUWP::get_video_driver_name(int p_driver) const { return "GLES2"; } @@ -91,7 +90,7 @@ void OSUWP::set_window_size(const Size2 p_size) { new_size.Width = p_size.width; new_size.Height = p_size.height; - ApplicationView^ view = ApplicationView::GetForCurrentView(); + ApplicationView ^ view = ApplicationView::GetForCurrentView(); if (view->TryResizeView(new_size)) { @@ -102,7 +101,7 @@ void OSUWP::set_window_size(const Size2 p_size) { void OSUWP::set_window_fullscreen(bool p_enabled) { - ApplicationView^ view = ApplicationView::GetForCurrentView(); + ApplicationView ^ view = ApplicationView::GetForCurrentView(); video_mode.fullscreen = view->IsFullScreenMode; @@ -117,7 +116,6 @@ void OSUWP::set_window_fullscreen(bool p_enabled) { view->ExitFullScreenMode(); video_mode.fullscreen = false; - } } @@ -143,20 +141,19 @@ int OSUWP::get_audio_driver_count() const { return AudioDriverManager::get_driver_count(); } -const char * OSUWP::get_audio_driver_name(int p_driver) const { +const char *OSUWP::get_audio_driver_name(int p_driver) const { - AudioDriver* driver = AudioDriverManager::get_driver(p_driver); - ERR_FAIL_COND_V( !driver, "" ); + AudioDriver *driver = AudioDriverManager::get_driver(p_driver); + ERR_FAIL_COND_V(!driver, ""); return AudioDriverManager::get_driver(p_driver)->get_name(); } -static MemoryPoolStatic *mempool_static=NULL; -static MemoryPoolDynamic *mempool_dynamic=NULL; +static MemoryPoolStatic *mempool_static = NULL; +static MemoryPoolDynamic *mempool_dynamic = NULL; void OSUWP::initialize_core() { - - last_button_state=0; + last_button_state = 0; //RedirectIOToConsole(); @@ -181,16 +178,16 @@ void OSUWP::initialize_core() { mempool_static = new MemoryPoolStaticMalloc; #if 1 - mempool_dynamic = memnew( MemoryPoolDynamicStatic ); + mempool_dynamic = memnew(MemoryPoolDynamicStatic); #else -#define DYNPOOL_SIZE 4*1024*1024 - void * buffer = malloc( DYNPOOL_SIZE ); - mempool_dynamic = memnew( MemoryPoolDynamicPrealloc(buffer,DYNPOOL_SIZE) ); +#define DYNPOOL_SIZE 4 * 1024 * 1024 + void *buffer = malloc(DYNPOOL_SIZE); + mempool_dynamic = memnew(MemoryPoolDynamicPrealloc(buffer, DYNPOOL_SIZE)); #endif - // We need to know how often the clock is updated - if( !QueryPerformanceFrequency((LARGE_INTEGER *)&ticks_per_second) ) + // We need to know how often the clock is updated + if (!QueryPerformanceFrequency((LARGE_INTEGER *)&ticks_per_second)) ticks_per_second = 1000; // If timeAtGameStart is 0 then we get the time since // the start of the computer when we call GetGameTime() @@ -199,7 +196,7 @@ void OSUWP::initialize_core() { IP_Unix::make_default(); - cursor_shape=CURSOR_ARROW; + cursor_shape = CURSOR_ARROW; } bool OSUWP::can_draw() const { @@ -207,8 +204,7 @@ bool OSUWP::can_draw() const { return !minimized; }; - -void OSUWP::set_gl_context(ContextEGL* p_context) { +void OSUWP::set_gl_context(ContextEGL *p_context) { gl_context = p_context; }; @@ -218,10 +214,10 @@ void OSUWP::screen_size_changed() { gl_context->reset(); }; -void OSUWP::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) { +void OSUWP::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { - main_loop=NULL; - outside=true; + main_loop = NULL; + outside = true; gl_context->initialize(); VideoMode vm; @@ -229,7 +225,7 @@ void OSUWP::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio vm.height = gl_context->get_window_height(); vm.resizable = false; - ApplicationView^ view = ApplicationView::GetForCurrentView(); + ApplicationView ^ view = ApplicationView::GetForCurrentView(); vm.fullscreen = view->IsFullScreenMode; view->SetDesiredBoundsMode(ApplicationViewBoundsMode::UseVisible); @@ -262,48 +258,47 @@ void OSUWP::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio set_video_mode(vm); gl_context->make_current(); - rasterizer = memnew( RasterizerGLES2 ); + rasterizer = memnew(RasterizerGLES2); - visual_server = memnew( VisualServerRaster(rasterizer) ); - if (get_render_thread_mode()!=RENDER_THREAD_UNSAFE) { + visual_server = memnew(VisualServerRaster(rasterizer)); + if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) { - visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD)); + visual_server = memnew(VisualServerWrapMT(visual_server, get_render_thread_mode() == RENDER_SEPARATE_THREAD)); } // - physics_server = memnew( PhysicsServerSW ); + physics_server = memnew(PhysicsServerSW); physics_server->init(); - physics_2d_server = memnew( Physics2DServerSW ); + physics_2d_server = memnew(Physics2DServerSW); physics_2d_server->init(); visual_server->init(); - input = memnew( InputDefault ); + input = memnew(InputDefault); joypad = ref new JoypadUWP(input); joypad->register_events(); 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."); } - power_manager = memnew ( PowerWinRT ); + power_manager = memnew(PowerWinRT); managed_object->update_clipboard(); - Clipboard::ContentChanged += ref new EventHandler<Platform::Object^>(managed_object, &ManagedType::on_clipboard_changed); + Clipboard::ContentChanged += ref new EventHandler<Platform::Object ^>(managed_object, &ManagedType::on_clipboard_changed); accelerometer = Accelerometer::GetDefault(); if (accelerometer != nullptr) { // 60 FPS accelerometer->ReportInterval = (1.0f / 60.0f) * 1000; accelerometer->ReadingChanged += - ref new TypedEventHandler<Accelerometer^, AccelerometerReadingChangedEventArgs^> - (managed_object, &ManagedType::on_accelerometer_reading_changed); + ref new TypedEventHandler<Accelerometer ^, AccelerometerReadingChangedEventArgs ^>(managed_object, &ManagedType::on_accelerometer_reading_changed); } magnetometer = Magnetometer::GetDefault(); @@ -311,8 +306,7 @@ void OSUWP::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio // 60 FPS magnetometer->ReportInterval = (1.0f / 60.0f) * 1000; magnetometer->ReadingChanged += - ref new TypedEventHandler<Magnetometer^, MagnetometerReadingChangedEventArgs^> - (managed_object, &ManagedType::on_magnetometer_reading_changed); + ref new TypedEventHandler<Magnetometer ^, MagnetometerReadingChangedEventArgs ^>(managed_object, &ManagedType::on_magnetometer_reading_changed); } gyrometer = Gyrometer::GetDefault(); @@ -320,8 +314,7 @@ void OSUWP::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio // 60 FPS gyrometer->ReportInterval = (1.0f / 60.0f) * 1000; gyrometer->ReadingChanged += - ref new TypedEventHandler<Gyrometer^, GyrometerReadingChangedEventArgs^> - (managed_object, &ManagedType::on_gyroscope_reading_changed); + ref new TypedEventHandler<Gyrometer ^, GyrometerReadingChangedEventArgs ^>(managed_object, &ManagedType::on_gyroscope_reading_changed); } _ensure_data_dir(); @@ -330,14 +323,13 @@ void OSUWP::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio display_request->RequestActive(); set_keep_screen_on(GLOBAL_DEF("display/keep_screen_on", true)); - } -void OSUWP::set_clipboard(const String& p_text) { +void OSUWP::set_clipboard(const String &p_text) { - DataPackage^ clip = ref new DataPackage(); + DataPackage ^ clip = ref new DataPackage(); clip->RequestedOperation = DataPackageOperation::Copy; - clip->SetText(ref new Platform::String((const wchar_t*)p_text.c_str())); + clip->SetText(ref new Platform::String((const wchar_t *)p_text.c_str())); Clipboard::SetContent(clip); }; @@ -350,14 +342,13 @@ String OSUWP::get_clipboard() const { return ""; }; - void OSUWP::input_event(InputEvent &p_event) { p_event.ID = ++last_id; input->parse_input_event(p_event); - if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.pressed && p_event.mouse_button.button_index>3) { + if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.pressed && p_event.mouse_button.button_index > 3) { //send release for mouse wheel p_event.mouse_button.pressed = false; @@ -370,21 +361,21 @@ void OSUWP::delete_main_loop() { if (main_loop) memdelete(main_loop); - main_loop=NULL; + main_loop = NULL; } -void OSUWP::set_main_loop( MainLoop * p_main_loop ) { +void OSUWP::set_main_loop(MainLoop *p_main_loop) { input->set_main_loop(p_main_loop); - main_loop=p_main_loop; + main_loop = p_main_loop; } void OSUWP::finalize() { - if(main_loop) + if (main_loop) memdelete(main_loop); - main_loop=NULL; + main_loop = NULL; visual_server->finish(); memdelete(visual_server); @@ -410,60 +401,57 @@ void OSUWP::finalize() { memdelete(physics_2d_server); joypad = nullptr; - } void OSUWP::finalize_core() { if (mempool_dynamic) - memdelete( mempool_dynamic ); + memdelete(mempool_dynamic); delete mempool_static; - } -void OSUWP::vprint(const char* p_format, va_list p_list, bool p_stderr) { +void OSUWP::vprint(const char *p_format, va_list p_list, bool p_stderr) { - char buf[16384+1]; - int len = vsnprintf(buf,16384,p_format,p_list); - if (len<=0) + char buf[16384 + 1]; + int len = vsnprintf(buf, 16384, p_format, p_list); + if (len <= 0) return; - buf[len]=0; + buf[len] = 0; - - int wlen = MultiByteToWideChar(CP_UTF8,0,buf,len,NULL,0); - if (wlen<0) + int wlen = MultiByteToWideChar(CP_UTF8, 0, buf, len, NULL, 0); + if (wlen < 0) return; - wchar_t *wbuf = (wchar_t*)malloc((len+1)*sizeof(wchar_t)); - MultiByteToWideChar(CP_UTF8,0,buf,len,wbuf,wlen); - wbuf[wlen]=0; + wchar_t *wbuf = (wchar_t *)malloc((len + 1) * sizeof(wchar_t)); + MultiByteToWideChar(CP_UTF8, 0, buf, len, wbuf, wlen); + wbuf[wlen] = 0; if (p_stderr) - fwprintf(stderr,L"%s",wbuf); + fwprintf(stderr, L"%s", wbuf); else - wprintf(L"%s",wbuf); + wprintf(L"%s", wbuf); free(wbuf); fflush(stdout); }; -void OSUWP::alert(const String& p_alert,const String& p_title) { +void OSUWP::alert(const String &p_alert, const String &p_title) { - Platform::String^ alert = ref new Platform::String(p_alert.c_str()); - Platform::String^ title = ref new Platform::String(p_title.c_str()); + Platform::String ^ alert = ref new Platform::String(p_alert.c_str()); + Platform::String ^ title = ref new Platform::String(p_title.c_str()); - MessageDialog^ msg = ref new MessageDialog(alert, title); + MessageDialog ^ msg = ref new MessageDialog(alert, title); - UICommand^ close = ref new UICommand("Close", ref new UICommandInvokedHandler(managed_object, &OSUWP::ManagedType::alert_close)); + UICommand ^ close = ref new UICommand("Close", ref new UICommandInvokedHandler(managed_object, &OSUWP::ManagedType::alert_close)); msg->Commands->Append(close); msg->DefaultCommandIndex = 0; - + managed_object->alert_close_handle = true; msg->ShowAsync(); } -void OSUWP::ManagedType::alert_close(IUICommand^ command) { +void OSUWP::ManagedType::alert_close(IUICommand ^ command) { alert_close_handle = false; } @@ -475,12 +463,11 @@ void OSUWP::ManagedType::on_clipboard_changed(Platform::Object ^ sender, Platfor void OSUWP::ManagedType::update_clipboard() { - DataPackageView^ data = Clipboard::GetContent(); + DataPackageView ^ data = Clipboard::GetContent(); if (data->Contains(StandardDataFormats::Text)) { - create_task(data->GetTextAsync()).then( - [this](Platform::String^ clipboard_content) { + create_task(data->GetTextAsync()).then([this](Platform::String ^ clipboard_content) { this->clipboard = clipboard_content; }); @@ -488,36 +475,33 @@ void OSUWP::ManagedType::update_clipboard() { } void OSUWP::ManagedType::on_accelerometer_reading_changed(Accelerometer ^ sender, AccelerometerReadingChangedEventArgs ^ args) { - - AccelerometerReading^ reading = args->Reading; + + AccelerometerReading ^ reading = args->Reading; os->input->set_accelerometer(Vector3( - reading->AccelerationX, - reading->AccelerationY, - reading->AccelerationZ - )); + reading->AccelerationX, + reading->AccelerationY, + reading->AccelerationZ)); } void OSUWP::ManagedType::on_magnetometer_reading_changed(Magnetometer ^ sender, MagnetometerReadingChangedEventArgs ^ args) { - MagnetometerReading^ reading = args->Reading; + MagnetometerReading ^ reading = args->Reading; os->input->set_magnetometer(Vector3( - reading->MagneticFieldX, - reading->MagneticFieldY, - reading->MagneticFieldZ - )); + reading->MagneticFieldX, + reading->MagneticFieldY, + reading->MagneticFieldZ)); } void OSUWP::ManagedType::on_gyroscope_reading_changed(Gyrometer ^ sender, GyrometerReadingChangedEventArgs ^ args) { - GyrometerReading^ reading = args->Reading; + GyrometerReading ^ reading = args->Reading; os->input->set_magnetometer(Vector3( - reading->AngularVelocityX, - reading->AngularVelocityY, - reading->AngularVelocityZ - )); + reading->AngularVelocityX, + reading->AngularVelocityY, + reading->AngularVelocityZ)); } void OSUWP::set_mouse_mode(MouseMode p_mode) { @@ -529,7 +513,6 @@ void OSUWP::set_mouse_mode(MouseMode p_mode) { } else { CoreWindow::GetForCurrentThread()->ReleasePointerCapture(); - } if (p_mode == MouseMode::MOUSE_MODE_CAPTURED || p_mode == MouseMode::MOUSE_MODE_HIDDEN) { @@ -546,13 +529,11 @@ void OSUWP::set_mouse_mode(MouseMode p_mode) { SetEvent(mouse_mode_changed); } -OSUWP::MouseMode OSUWP::get_mouse_mode() const{ +OSUWP::MouseMode OSUWP::get_mouse_mode() const { return mouse_mode; } - - Point2 OSUWP::get_mouse_pos() const { return Point2(old_x, old_y); @@ -563,11 +544,10 @@ int OSUWP::get_mouse_button_state() const { return last_button_state; } -void OSUWP::set_window_title(const String& p_title) { - +void OSUWP::set_window_title(const String &p_title) { } -void OSUWP::set_video_mode(const VideoMode& p_video_mode,int p_screen) { +void OSUWP::set_video_mode(const VideoMode &p_video_mode, int p_screen) { video_mode = p_video_mode; } @@ -575,20 +555,18 @@ OS::VideoMode OSUWP::get_video_mode(int p_screen) const { return video_mode; } -void OSUWP::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const { - - +void OSUWP::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const { } -void OSUWP::print_error(const char* p_function, const char* p_file, int p_line, const char* p_code, const char* p_rationale, ErrorType p_type) { +void OSUWP::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { - const char* err_details; + const char *err_details; if (p_rationale && p_rationale[0]) err_details = p_rationale; else err_details = p_code; - switch(p_type) { + switch (p_type) { case ERR_ERROR: print("ERROR: %s: %s\n", p_function, err_details); print(" At: %s:%i\n", p_file, p_line); @@ -604,7 +582,6 @@ void OSUWP::print_error(const char* p_function, const char* p_file, int p_line, } } - String OSUWP::get_name() { return "UWP"; @@ -619,11 +596,11 @@ OS::Date OSUWP::get_date(bool utc) const { GetLocalTime(&systemtime); Date date; - date.day=systemtime.wDay; - date.month=Month(systemtime.wMonth); - date.weekday=Weekday(systemtime.wDayOfWeek); - date.year=systemtime.wYear; - date.dst=false; + date.day = systemtime.wDay; + date.month = Month(systemtime.wMonth); + date.weekday = Weekday(systemtime.wDayOfWeek); + date.year = systemtime.wYear; + date.dst = false; return date; } OS::Time OSUWP::get_time(bool utc) const { @@ -635,9 +612,9 @@ OS::Time OSUWP::get_time(bool utc) const { GetLocalTime(&systemtime); Time time; - time.hour=systemtime.wHour; - time.min=systemtime.wMinute; - time.sec=systemtime.wSecond; + time.hour = systemtime.wHour; + time.min = systemtime.wMinute; + time.sec = systemtime.wSecond; return time; } @@ -677,7 +654,7 @@ uint64_t OSUWP::get_unix_time() const { FILETIME fep; SystemTimeToFileTime(&ep, &fep); - return (*(uint64_t*)&ft - *(uint64_t*)&fep) / 10000000; + return (*(uint64_t *)&ft - *(uint64_t *)&fep) / 10000000; }; void OSUWP::delay_usec(uint32_t p_usec) const { @@ -686,7 +663,6 @@ void OSUWP::delay_usec(uint32_t p_usec) const { // no Sleep() WaitForSingleObjectEx(GetCurrentThread(), msec, false); - } uint64_t OSUWP::get_ticks_usec() const { @@ -702,15 +678,13 @@ uint64_t OSUWP::get_ticks_usec() const { return time; } - void OSUWP::process_events() { last_id = joypad->process_controllers(last_id); process_key_events(); } -void OSUWP::process_key_events() -{ +void OSUWP::process_key_events() { for (int i = 0; i < key_event_pos; i++) { @@ -725,13 +699,11 @@ void OSUWP::process_key_events() iev.key.pressed = kev.pressed; input_event(iev); - } key_event_pos = 0; } -void OSUWP::queue_key_event(KeyEvent & p_event) -{ +void OSUWP::queue_key_event(KeyEvent &p_event) { // This merges Char events with the previous Key event, so // the unicode can be retrieved without sending duplicate events. if (p_event.type == KeyEvent::MessageType::CHAR_EVENT_MESSAGE && key_event_pos > 0) { @@ -780,17 +752,17 @@ void OSUWP::set_cursor_shape(CursorShape p_shape) { cursor_shape = p_shape; } -Error OSUWP::execute(const String& p_path, const List<String>& p_arguments,bool p_blocking,ProcessID *r_child_id,String* r_pipe,int *r_exitcode) { +Error OSUWP::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode) { return FAILED; }; -Error OSUWP::kill(const ProcessID& p_pid) { +Error OSUWP::kill(const ProcessID &p_pid) { return FAILED; }; -Error OSUWP::set_cwd(const String& p_cwd) { +Error OSUWP::set_cwd(const String &p_cwd) { return FAILED; } @@ -800,17 +772,15 @@ String OSUWP::get_executable_path() const { return ""; } -void OSUWP::set_icon(const Image& p_icon) { - +void OSUWP::set_icon(const Image &p_icon) { } - -bool OSUWP::has_environment(const String& p_var) const { +bool OSUWP::has_environment(const String &p_var) const { return false; }; -String OSUWP::get_environment(const String& p_var) const { +String OSUWP::get_environment(const String &p_var) const { return ""; }; @@ -820,9 +790,7 @@ String OSUWP::get_stdin_string(bool p_block) { return String(); } - void OSUWP::move_window_to_foreground() { - } Error OSUWP::shell_open(String p_uri) { @@ -830,13 +798,12 @@ Error OSUWP::shell_open(String p_uri) { return FAILED; } - String OSUWP::get_locale() const { #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP // this should work on phone 8.1, but it doesn't return "en"; #else - Platform::String ^language = Windows::Globalization::Language::CurrentInputMethodLanguageTag; + Platform::String ^ language = Windows::Globalization::Language::CurrentInputMethodLanguageTag; return String(language->Data()).replace("-", "_"); #endif } @@ -858,7 +825,7 @@ void OSUWP::swap_buffers() { bool OSUWP::has_touchscreen_ui_hint() const { - TouchCapabilities^ tc = ref new TouchCapabilities(); + TouchCapabilities ^ tc = ref new TouchCapabilities(); return tc->TouchPresent != 0 || UIViewSettings::GetForCurrentView()->UserInteractionMode == UserInteractionMode::Touch; } @@ -867,19 +834,18 @@ bool OSUWP::has_virtual_keyboard() const { return UIViewSettings::GetForCurrentView()->UserInteractionMode == UserInteractionMode::Touch; } -void OSUWP::show_virtual_keyboard(const String & p_existing_text, const Rect2 & p_screen_rect) { +void OSUWP::show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect) { - InputPane^ pane = InputPane::GetForCurrentView(); + InputPane ^ pane = InputPane::GetForCurrentView(); pane->TryShow(); } void OSUWP::hide_virtual_keyboard() { - InputPane^ pane = InputPane::GetForCurrentView(); + InputPane ^ pane = InputPane::GetForCurrentView(); pane->TryHide(); } - void OSUWP::run() { if (!main_loop) @@ -887,35 +853,31 @@ void OSUWP::run() { main_loop->init(); - uint64_t last_ticks=get_ticks_usec(); + uint64_t last_ticks = get_ticks_usec(); - int frames=0; - uint64_t frame=0; + int frames = 0; + uint64_t frame = 0; while (!force_quit) { CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent); if (managed_object->alert_close_handle) continue; process_events(); // get rid of pending events - if (Main::iteration()==true) + if (Main::iteration() == true) break; }; main_loop->finish(); - } - - MainLoop *OSUWP::get_main_loop() const { return main_loop; } - String OSUWP::get_data_dir() const { - Windows::Storage::StorageFolder ^data_folder = Windows::Storage::ApplicationData::Current->LocalFolder; + Windows::Storage::StorageFolder ^ data_folder = Windows::Storage::ApplicationData::Current->LocalFolder; return String(data_folder->Path->Data()).replace("\\", "/"); } @@ -932,24 +894,23 @@ int OSWinrt::get_power_percent_left() { return power_manager->get_power_percent_left(); } - OSUWP::OSUWP() { - key_event_pos=0; - force_quit=false; - alt_mem=false; - gr_mem=false; - shift_mem=false; - control_mem=false; - meta_mem=false; + key_event_pos = 0; + force_quit = false; + alt_mem = false; + gr_mem = false; + shift_mem = false; + control_mem = false; + meta_mem = false; minimized = false; - pressrc=0; - old_invalid=true; - last_id=0; - mouse_mode=MOUSE_MODE_VISIBLE; + pressrc = 0; + old_invalid = true; + last_id = 0; + mouse_mode = MOUSE_MODE_VISIBLE; #ifdef STDOUT_FILE - stdo=fopen("stdout.txt","wb"); + stdo = fopen("stdout.txt", "wb"); #endif gl_context = NULL; @@ -964,12 +925,8 @@ OSUWP::OSUWP() { AudioDriverManager::add_driver(&audio_driver); } - -OSUWP::~OSUWP() -{ +OSUWP::~OSUWP() { #ifdef STDOUT_FILE fclose(stdo); #endif } - - diff --git a/platform/uwp/os_uwp.h b/platform/uwp/os_uwp.h index 72cc8a7854..ebbb8af39c 100644 --- a/platform/uwp/os_uwp.h +++ b/platform/uwp/os_uwp.h @@ -29,26 +29,25 @@ #ifndef OSUWP_H #define OSUWP_H -#include "os/input.h" -#include "os/os.h" -#include "servers/visual_server.h" -#include "servers/visual/rasterizer.h" -#include "servers/physics/physics_server_sw.h" -#include "servers/audio_server.h" -#include "servers/physics_2d/physics_2d_server_sw.h" -#include "drivers/xaudio2/audio_driver_xaudio2.h" -#include "gl_context_egl.h" #include "core/math/math_2d.h" #include "core/ustring.h" -#include "main/input_default.h" +#include "drivers/xaudio2/audio_driver_xaudio2.h" +#include "gl_context_egl.h" #include "joypad_uwp.h" +#include "main/input_default.h" +#include "os/input.h" +#include "os/os.h" #include "power_winrt.h" +#include "servers/audio_server.h" +#include "servers/physics/physics_server_sw.h" +#include "servers/physics_2d/physics_2d_server_sw.h" +#include "servers/visual/rasterizer.h" +#include "servers/visual_server.h" -#include <windows.h> -#include <io.h> #include <fcntl.h> +#include <io.h> #include <stdio.h> - +#include <windows.h> /** @author Juan Linietsky <reduzio@gmail.com> @@ -56,11 +55,9 @@ class OSUWP : public OS { public: - struct KeyEvent { - enum MessageType - { + enum MessageType { KEY_EVENT_MESSAGE, CHAR_EVENT_MESSAGE }; @@ -72,16 +69,14 @@ public: unsigned int unicode; bool echo; CorePhysicalKeyStatus status; - }; private: - enum { JOYPADS_MAX = 8, JOY_AXIS_COUNT = 6, MAX_JOY_AXIS = 32768, // I've no idea - KEY_EVENT_BUFFER_SIZE=512 + KEY_EVENT_BUFFER_SIZE = 512 }; FILE *stdo; @@ -89,14 +84,13 @@ private: KeyEvent key_event_buffer[KEY_EVENT_BUFFER_SIZE]; int key_event_pos; - uint64_t ticks_start; uint64_t ticks_per_second; bool minimized; bool old_invalid; bool outside; - int old_x,old_y; + int old_x, old_y; Point2i center; unsigned int last_id; VisualServer *visual_server; @@ -105,7 +99,7 @@ private: Physics2DServer *physics_2d_server; int pressrc; - ContextEGL* gl_context; + ContextEGL *gl_context; VideoMode video_mode; @@ -128,52 +122,52 @@ private: InputDefault *input; - JoypadUWP^ joypad; + JoypadUWP ^ joypad; - Windows::System::Display::DisplayRequest^ display_request; + Windows::System::Display::DisplayRequest ^ display_request; void _post_dpad(DWORD p_dpad, int p_device, bool p_pressed); - void _drag_event(int idx,UINT uMsg, WPARAM wParam, LPARAM lParam); - void _touch_event(int idx, UINT uMsg, WPARAM wParam, LPARAM lParam); + void _drag_event(int idx, UINT uMsg, WPARAM wParam, LPARAM lParam); + void _touch_event(int idx, UINT uMsg, WPARAM wParam, LPARAM lParam); ref class ManagedType { public: property bool alert_close_handle; - property Platform::String^ clipboard; - void alert_close(Windows::UI::Popups::IUICommand^ command); - void on_clipboard_changed(Platform::Object^ sender, Platform::Object^ ev); + property Platform::String ^ clipboard; + void alert_close(Windows::UI::Popups::IUICommand ^ command); + void on_clipboard_changed(Platform::Object ^ sender, Platform::Object ^ ev); void update_clipboard(); - void on_accelerometer_reading_changed(Windows::Devices::Sensors::Accelerometer^ sender, Windows::Devices::Sensors::AccelerometerReadingChangedEventArgs^ args); - void on_magnetometer_reading_changed(Windows::Devices::Sensors::Magnetometer^ sender, Windows::Devices::Sensors::MagnetometerReadingChangedEventArgs^ args); - void on_gyroscope_reading_changed(Windows::Devices::Sensors::Gyrometer^ sender, Windows::Devices::Sensors::GyrometerReadingChangedEventArgs^ args); + void on_accelerometer_reading_changed(Windows::Devices::Sensors::Accelerometer ^ sender, Windows::Devices::Sensors::AccelerometerReadingChangedEventArgs ^ args); + void on_magnetometer_reading_changed(Windows::Devices::Sensors::Magnetometer ^ sender, Windows::Devices::Sensors::MagnetometerReadingChangedEventArgs ^ args); + void on_gyroscope_reading_changed(Windows::Devices::Sensors::Gyrometer ^ sender, Windows::Devices::Sensors::GyrometerReadingChangedEventArgs ^ args); - /** clang-format breaks this, it does not understand this token. */ - /* clang-format off */ + /** clang-format breaks this, it does not understand this token. */ + /* clang-format off */ internal: ManagedType() { alert_close_handle = false; } property OSUWP* os; - /* clang-format on */ + /* clang-format on */ }; - ManagedType^ managed_object; - Windows::Devices::Sensors::Accelerometer^ accelerometer; - Windows::Devices::Sensors::Magnetometer^ magnetometer; - Windows::Devices::Sensors::Gyrometer^ gyrometer; + ManagedType ^ managed_object; + Windows::Devices::Sensors::Accelerometer ^ accelerometer; + Windows::Devices::Sensors::Magnetometer ^ magnetometer; + Windows::Devices::Sensors::Gyrometer ^ gyrometer; // functions used by main to initialize/deintialize the OS protected: 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(); @@ -184,14 +178,13 @@ protected: void process_key_events(); public: - // Event to send to the app wrapper HANDLE mouse_mode_changed; - void print_error(const char* p_function,const char* p_file,int p_line,const char *p_code,const char*p_rationale,ErrorType p_type); + void print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type); - virtual void vprint(const char *p_format, va_list p_list, bool p_stderr=false); - virtual void alert(const String& p_alert,const String& p_title="ALERT!"); + virtual void vprint(const char *p_format, va_list p_list, bool p_stderr = false); + virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); String get_stdin_string(bool p_block); void set_mouse_mode(MouseMode p_mode); @@ -199,11 +192,11 @@ public: 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_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 Size2 get_window_size() const; virtual void set_window_size(const Size2 p_size); virtual void set_window_fullscreen(bool p_enabled); @@ -220,22 +213,22 @@ public: virtual uint64_t get_unix_time() const; virtual bool can_draw() const; - virtual Error set_cwd(const String& p_cwd); + virtual Error set_cwd(const String &p_cwd); virtual void delay_usec(uint32_t p_usec) const; virtual uint64_t get_ticks_usec() const; - virtual Error execute(const String& p_path, const List<String>& p_arguments,bool p_blocking,ProcessID *r_child_id=NULL,String* r_pipe=NULL,int *r_exitcode=NULL); - virtual Error kill(const ProcessID& p_pid); + virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL); + virtual Error kill(const ProcessID &p_pid); - virtual bool has_environment(const String& p_var) const; - virtual String get_environment(const String& p_var) const; + virtual bool has_environment(const String &p_var) const; + virtual String get_environment(const String &p_var) const; - virtual void set_clipboard(const String& p_text); + virtual void set_clipboard(const String &p_text); virtual String get_clipboard() const; void set_cursor_shape(CursorShape p_shape); - void set_icon(const Image& p_icon); + void set_icon(const Image &p_icon); virtual String get_executable_path() const; @@ -244,7 +237,7 @@ public: virtual void move_window_to_foreground(); virtual String get_data_dir() const; - void set_gl_context(ContextEGL* p_context); + void set_gl_context(ContextEGL *p_context); void screen_size_changed(); virtual void release_rendering_thread(); @@ -254,7 +247,7 @@ 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(); virtual Error shell_open(String p_uri); @@ -264,7 +257,7 @@ public: virtual bool get_swap_ok_cancel() { return true; } void input_event(InputEvent &p_event); - + virtual PowerState get_power_state(); virtual int get_power_seconds_left(); virtual int get_power_percent_left(); @@ -273,7 +266,6 @@ public: OSUWP(); ~OSUWP(); - }; #endif diff --git a/platform/uwp/thread_uwp.cpp b/platform/uwp/thread_uwp.cpp index 4008a1eeb0..ff079be375 100644 --- a/platform/uwp/thread_uwp.cpp +++ b/platform/uwp/thread_uwp.cpp @@ -30,10 +30,9 @@ #include "os/memory.h" -Thread* ThreadUWP::create_func_uwp(ThreadCreateCallback p_callback,void *p_user,const Settings&) { - - ThreadUWP* thread = memnew(ThreadUWP); +Thread *ThreadUWP::create_func_uwp(ThreadCreateCallback p_callback, void *p_user, const Settings &) { + ThreadUWP *thread = memnew(ThreadUWP); std::thread new_thread(p_callback, p_user); std::swap(thread->thread, new_thread); @@ -46,13 +45,12 @@ Thread::ID ThreadUWP::get_thread_ID_func_uwp() { return std::hash<std::thread::id>()(std::this_thread::get_id()); }; -void ThreadUWP::wait_to_finish_func_uwp(Thread* p_thread) { +void ThreadUWP::wait_to_finish_func_uwp(Thread *p_thread) { - ThreadUWP *tp=static_cast<ThreadUWP*>(p_thread); + ThreadUWP *tp = static_cast<ThreadUWP *>(p_thread); tp->thread.join(); }; - Thread::ID ThreadUWP::get_ID() const { return std::hash<std::thread::id>()(thread.get_id()); @@ -64,11 +62,10 @@ void ThreadUWP::make_default() { wait_to_finish_func = wait_to_finish_func_uwp; }; -ThreadUWP::ThreadUWP() { +ThreadUWP::ThreadUWP(){ }; -ThreadUWP::~ThreadUWP() { +ThreadUWP::~ThreadUWP(){ }; - diff --git a/platform/uwp/thread_uwp.h b/platform/uwp/thread_uwp.h index 06c19c0139..b4e67c8b5c 100644 --- a/platform/uwp/thread_uwp.h +++ b/platform/uwp/thread_uwp.h @@ -39,25 +39,20 @@ class ThreadUWP : public Thread { std::thread thread; - static Thread* create_func_uwp(ThreadCreateCallback p_callback,void *,const Settings&); + static Thread *create_func_uwp(ThreadCreateCallback p_callback, void *, const Settings &); static ID get_thread_ID_func_uwp(); - static void wait_to_finish_func_uwp(Thread* p_thread); + static void wait_to_finish_func_uwp(Thread *p_thread); ThreadUWP(); -public: - +public: virtual ID get_ID() const; static void make_default(); - ~ThreadUWP(); - }; - #endif #endif - diff --git a/platform/windows/context_gl_win.cpp b/platform/windows/context_gl_win.cpp index 7a81dfef77..d737502bf5 100644 --- a/platform/windows/context_gl_win.cpp +++ b/platform/windows/context_gl_win.cpp @@ -45,25 +45,21 @@ //#include "drivers/opengl/glwrapper.h" //#include "ctxgl_procaddr.h" -#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 -typedef HGLRC (APIENTRY* PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC, HGLRC, const int*); - +typedef HGLRC(APIENTRY *PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC, HGLRC, const int *); void ContextGL_Win::release_current() { - - wglMakeCurrent(hDC,NULL); - + wglMakeCurrent(hDC, NULL); } - void ContextGL_Win::make_current() { - wglMakeCurrent(hDC,hRC); + wglMakeCurrent(hDC, hRC); } int ContextGL_Win::get_window_width() { @@ -98,10 +94,9 @@ static GLWrapperFuncPtr wrapper_get_proc_address(const char* p_function) { void ContextGL_Win::set_use_vsync(bool p_use) { if (wglSwapIntervalEXT) { - wglSwapIntervalEXT(p_use?1:0); + wglSwapIntervalEXT(p_use ? 1 : 0); } - use_vsync=p_use; - + use_vsync = p_use; } bool ContextGL_Win::is_using_vsync() const { @@ -109,112 +104,109 @@ bool ContextGL_Win::is_using_vsync() const { return use_vsync; } -#define _WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 +#define _WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 Error ContextGL_Win::initialize() { - static PIXELFORMATDESCRIPTOR pfd= { - sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor + static PIXELFORMATDESCRIPTOR pfd = { + sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor 1, - PFD_DRAW_TO_WINDOW | // Format Must Support Window - PFD_SUPPORT_OPENGL | // Format Must Support OpenGL - PFD_DOUBLEBUFFER, + PFD_DRAW_TO_WINDOW | // Format Must Support Window + PFD_SUPPORT_OPENGL | // Format Must Support OpenGL + PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 24, - 0, 0, 0, 0, 0, 0, // Color Bits Ignored - 0,// No Alpha Buffer - 0,// Shift Bit Ignored - 0,// No Accumulation Buffer - 0, 0, 0, 0,// Accumulation Bits Ignored - 24,// 24Bit Z-Buffer (Depth Buffer) - 0,// No Stencil Buffer - 0,// No Auxiliary Buffer + 0, 0, 0, 0, 0, 0, // Color Bits Ignored + 0, // No Alpha Buffer + 0, // Shift Bit Ignored + 0, // No Accumulation Buffer + 0, 0, 0, 0, // Accumulation Bits Ignored + 24, // 24Bit Z-Buffer (Depth Buffer) + 0, // No Stencil Buffer + 0, // No Auxiliary Buffer PFD_MAIN_PLANE, // Main Drawing Layer - 0,// Reserved - 0, 0, 0 // Layer Masks Ignored + 0, // Reserved + 0, 0, 0 // Layer Masks Ignored }; - if (!(hDC=GetDC(hWnd))) { - MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return ERR_CANT_CREATE; // Return FALSE + if (!(hDC = GetDC(hWnd))) { + MessageBox(NULL, "Can't Create A GL Device Context.", "ERROR", MB_OK | MB_ICONEXCLAMATION); + return ERR_CANT_CREATE; // Return FALSE } - if (!(pixel_format=ChoosePixelFormat(hDC,&pfd))) // Did Windows Find A Matching Pixel Format? + if (!(pixel_format = ChoosePixelFormat(hDC, &pfd))) // Did Windows Find A Matching Pixel Format? { - MessageBox(NULL,"Can't Find A Suitable pixel_format.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return ERR_CANT_CREATE; // Return FALSE + MessageBox(NULL, "Can't Find A Suitable pixel_format.", "ERROR", MB_OK | MB_ICONEXCLAMATION); + return ERR_CANT_CREATE; // Return FALSE } - if(!SetPixelFormat(hDC,pixel_format,&pfd)) // Are We Able To Set The Pixel Format? + if (!SetPixelFormat(hDC, pixel_format, &pfd)) // Are We Able To Set The Pixel Format? { - MessageBox(NULL,"Can't Set The pixel_format.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return ERR_CANT_CREATE; // Return FALSE + MessageBox(NULL, "Can't Set The pixel_format.", "ERROR", MB_OK | MB_ICONEXCLAMATION); + return ERR_CANT_CREATE; // Return FALSE } - if (!(hRC=wglCreateContext(hDC))) // Are We Able To Get A Rendering Context? + if (!(hRC = wglCreateContext(hDC))) // Are We Able To Get A Rendering Context? { - MessageBox(NULL,"Can't Create A Temporary GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return ERR_CANT_CREATE; // Return FALSE + MessageBox(NULL, "Can't Create A Temporary GL Rendering Context.", "ERROR", MB_OK | MB_ICONEXCLAMATION); + return ERR_CANT_CREATE; // Return FALSE } - wglMakeCurrent(hDC,hRC); + wglMakeCurrent(hDC, hRC); if (opengl_3_context) { int attribs[] = { - WGL_CONTEXT_MAJOR_VERSION_ARB, 3,//we want a 3.3 context - WGL_CONTEXT_MINOR_VERSION_ARB, 3, - //and it shall be forward compatible so that we can only use up to date functionality - WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB|_WGL_CONTEXT_DEBUG_BIT_ARB, - 0}; //zero indicates the end of the array + WGL_CONTEXT_MAJOR_VERSION_ARB, 3, //we want a 3.3 context + WGL_CONTEXT_MINOR_VERSION_ARB, 3, + //and it shall be forward compatible so that we can only use up to date functionality + WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB | _WGL_CONTEXT_DEBUG_BIT_ARB, + 0 + }; //zero indicates the end of the array PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = NULL; //pointer to the method - wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress("wglCreateContextAttribsARB"); + wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB"); - if(wglCreateContextAttribsARB == NULL) //OpenGL 3.0 is not supported + if (wglCreateContextAttribsARB == NULL) //OpenGL 3.0 is not supported { - MessageBox(NULL,"Cannot get Proc Adress for CreateContextAttribs", "ERROR",MB_OK|MB_ICONEXCLAMATION); + MessageBox(NULL, "Cannot get Proc Adress for CreateContextAttribs", "ERROR", MB_OK | MB_ICONEXCLAMATION); wglDeleteContext(hRC); return ERR_CANT_CREATE; } HGLRC new_hRC; - if (!(new_hRC=wglCreateContextAttribsARB(hDC,0, attribs))) - { + if (!(new_hRC = wglCreateContextAttribsARB(hDC, 0, attribs))) { wglDeleteContext(hRC); - MessageBox(NULL,"Can't Create An OpenGL 3.3 Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return ERR_CANT_CREATE; // Return false + MessageBox(NULL, "Can't Create An OpenGL 3.3 Rendering Context.", "ERROR", MB_OK | MB_ICONEXCLAMATION); + return ERR_CANT_CREATE; // Return false } - wglMakeCurrent(hDC,NULL); + wglMakeCurrent(hDC, NULL); wglDeleteContext(hRC); - hRC=new_hRC; + hRC = new_hRC; - if (!wglMakeCurrent(hDC,hRC)) // Try To Activate The Rendering Context + if (!wglMakeCurrent(hDC, hRC)) // Try To Activate The Rendering Context { - MessageBox(NULL,"Can't Activate The GL 3.3 Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return ERR_CANT_CREATE; // Return FALSE + MessageBox(NULL, "Can't Activate The GL 3.3 Rendering Context.", "ERROR", MB_OK | MB_ICONEXCLAMATION); + return ERR_CANT_CREATE; // Return FALSE } printf("Activated GL 3.3 context"); } - wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) wglGetProcAddress ("wglSwapIntervalEXT"); + wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT"); //glWrapperInit(wrapper_get_proc_address); return OK; } -ContextGL_Win::ContextGL_Win(HWND hwnd,bool p_opengl_3_context) { +ContextGL_Win::ContextGL_Win(HWND hwnd, bool p_opengl_3_context) { - opengl_3_context=p_opengl_3_context; - hWnd=hwnd; - use_vsync=false; + opengl_3_context = p_opengl_3_context; + hWnd = hwnd; + use_vsync = false; } ContextGL_Win::~ContextGL_Win() { - - } - #endif diff --git a/platform/windows/context_gl_win.h b/platform/windows/context_gl_win.h index 96b54c6c14..383197ba7f 100644 --- a/platform/windows/context_gl_win.h +++ b/platform/windows/context_gl_win.h @@ -42,14 +42,13 @@ #ifndef CONTEXT_GL_WIN_H #define CONTEXT_GL_WIN_H - -#include "os/os.h" #include "drivers/gl_context/context_gl.h" #include "error_list.h" +#include "os/os.h" #include <windows.h> -typedef bool (APIENTRY *PFNWGLSWAPINTERVALEXTPROC) (int interval); +typedef bool(APIENTRY *PFNWGLSWAPINTERVALEXTPROC)(int interval); class ContextGL_Win : public ContextGL { @@ -60,11 +59,9 @@ class ContextGL_Win : public ContextGL { bool opengl_3_context; bool use_vsync; - PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT; -public: - +public: virtual void release_current(); virtual void make_current(); @@ -78,9 +75,8 @@ public: virtual void set_use_vsync(bool p_use); virtual bool is_using_vsync() const; - ContextGL_Win(HWND hwnd,bool p_opengl_3_context); + ContextGL_Win(HWND hwnd, bool p_opengl_3_context); ~ContextGL_Win(); - }; #endif diff --git a/platform/windows/ctxgl_procaddr.cpp b/platform/windows/ctxgl_procaddr.cpp index bc8611dce4..79c6f219f3 100644 --- a/platform/windows/ctxgl_procaddr.cpp +++ b/platform/windows/ctxgl_procaddr.cpp @@ -31,7 +31,7 @@ #include <GL/gl.h> #include <stdio.h> -static PROC _gl_procs[]={ +static PROC _gl_procs[] = { (PROC)glCullFace, (PROC)glFrontFace, (PROC)glHint, @@ -99,7 +99,7 @@ static PROC _gl_procs[]={ 0 }; -static const char* _gl_proc_names[]={ +static const char *_gl_proc_names[] = { "glCullFace", "glFrontFace", "glHint", @@ -167,15 +167,15 @@ static const char* _gl_proc_names[]={ 0 }; -PROC get_gl_proc_address(const char* p_address) { +PROC get_gl_proc_address(const char *p_address) { - PROC proc = wglGetProcAddress((const CHAR*)p_address); + PROC proc = wglGetProcAddress((const CHAR *)p_address); if (!proc) { - int i=0; - while(_gl_procs[i]) { + int i = 0; + while (_gl_procs[i]) { - if (strcmp(p_address,_gl_proc_names[i])==0) { + if (strcmp(p_address, _gl_proc_names[i]) == 0) { return _gl_procs[i]; } i++; diff --git a/platform/windows/ctxgl_procaddr.h b/platform/windows/ctxgl_procaddr.h index 72f39e71ac..da17fbcbbe 100644 --- a/platform/windows/ctxgl_procaddr.h +++ b/platform/windows/ctxgl_procaddr.h @@ -32,7 +32,6 @@ #ifdef OPENGL_ENABLED #include <windows.h> - -PROC get_gl_proc_address(const char* p_address); +PROC get_gl_proc_address(const char *p_address); #endif #endif // CTXGL_PROCADDR_H diff --git a/platform/windows/export/export.cpp b/platform/windows/export/export.cpp index 44c0acdb2e..bb51474a8c 100644 --- a/platform/windows/export/export.cpp +++ b/platform/windows/export/export.cpp @@ -27,8 +27,8 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "export.h" -#include "platform/windows/logo.h" #include "editor/editor_export.h" +#include "platform/windows/logo.h" void register_windows_exporter() { @@ -51,4 +51,3 @@ void register_windows_exporter() { #endif } - diff --git a/platform/windows/godot_win.cpp b/platform/windows/godot_win.cpp index 5260f7f641..f8f5fe8231 100644 --- a/platform/windows/godot_win.cpp +++ b/platform/windows/godot_win.cpp @@ -26,127 +26,123 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "os_windows.h" #include "main/main.h" -#include <stdio.h> +#include "os_windows.h" #include <locale.h> +#include <stdio.h> + +PCHAR * +CommandLineToArgvA( + PCHAR CmdLine, + int *_argc) { + PCHAR *argv; + PCHAR _argv; + ULONG len; + ULONG argc; + CHAR a; + ULONG i, j; + + BOOLEAN in_QM; + BOOLEAN in_TEXT; + BOOLEAN in_SPACE; + + len = strlen(CmdLine); + i = ((len + 2) / 2) * sizeof(PVOID) + sizeof(PVOID); + + argv = (PCHAR *)GlobalAlloc(GMEM_FIXED, + i + (len + 2) * sizeof(CHAR)); + + _argv = (PCHAR)(((PUCHAR)argv) + i); + + argc = 0; + argv[argc] = _argv; + in_QM = FALSE; + in_TEXT = FALSE; + in_SPACE = TRUE; + i = 0; + j = 0; + + while ((a = CmdLine[i])) { + if (in_QM) { + if (a == '\"') { + in_QM = FALSE; + } else { + _argv[j] = a; + j++; + } + } else { + switch (a) { + case '\"': + in_QM = TRUE; + in_TEXT = TRUE; + if (in_SPACE) { + argv[argc] = _argv + j; + argc++; + } + in_SPACE = FALSE; + break; + case ' ': + case '\t': + case '\n': + case '\r': + if (in_TEXT) { + _argv[j] = '\0'; + j++; + } + in_TEXT = FALSE; + in_SPACE = TRUE; + break; + default: + in_TEXT = TRUE; + if (in_SPACE) { + argv[argc] = _argv + j; + argc++; + } + _argv[j] = a; + j++; + in_SPACE = FALSE; + break; + } + } + i++; + } + _argv[j] = '\0'; + argv[argc] = NULL; + + (*_argc) = argc; + return argv; +} -PCHAR* - CommandLineToArgvA( - PCHAR CmdLine, - int* _argc - ) - { - PCHAR* argv; - PCHAR _argv; - ULONG len; - ULONG argc; - CHAR a; - ULONG i, j; - - BOOLEAN in_QM; - BOOLEAN in_TEXT; - BOOLEAN in_SPACE; - - len = strlen(CmdLine); - i = ((len+2)/2)*sizeof(PVOID) + sizeof(PVOID); - - argv = (PCHAR*)GlobalAlloc(GMEM_FIXED, - i + (len+2)*sizeof(CHAR)); - - _argv = (PCHAR)(((PUCHAR)argv)+i); - - argc = 0; - argv[argc] = _argv; - in_QM = FALSE; - in_TEXT = FALSE; - in_SPACE = TRUE; - i = 0; - j = 0; - - while( (a = CmdLine[i]) ) { - if(in_QM) { - if(a == '\"') { - in_QM = FALSE; - } else { - _argv[j] = a; - j++; - } - } else { - switch(a) { - case '\"': - in_QM = TRUE; - in_TEXT = TRUE; - if(in_SPACE) { - argv[argc] = _argv+j; - argc++; - } - in_SPACE = FALSE; - break; - case ' ': - case '\t': - case '\n': - case '\r': - if(in_TEXT) { - _argv[j] = '\0'; - j++; - } - in_TEXT = FALSE; - in_SPACE = TRUE; - break; - default: - in_TEXT = TRUE; - if(in_SPACE) { - argv[argc] = _argv+j; - argc++; - } - _argv[j] = a; - j++; - in_SPACE = FALSE; - break; - } - } - i++; - } - _argv[j] = '\0'; - argv[argc] = NULL; - - (*_argc) = argc; - return argv; - } - -char* wc_to_utf8(const wchar_t* wc) { - int ulen = WideCharToMultiByte(CP_UTF8,0,wc,-1,NULL,0,NULL,NULL); - char * ubuf = new char[ulen + 1]; - WideCharToMultiByte(CP_UTF8,0,wc,-1,ubuf,ulen,NULL,NULL); +char *wc_to_utf8(const wchar_t *wc) { + int ulen = WideCharToMultiByte(CP_UTF8, 0, wc, -1, NULL, 0, NULL, NULL); + char *ubuf = new char[ulen + 1]; + WideCharToMultiByte(CP_UTF8, 0, wc, -1, ubuf, ulen, NULL, NULL); ubuf[ulen] = 0; return ubuf; } -int widechar_main(int argc, wchar_t** argv) { +int widechar_main(int argc, wchar_t **argv) { OS_Windows os(NULL); setlocale(LC_CTYPE, ""); - char ** argv_utf8 = new char*[argc]; + char **argv_utf8 = new char *[argc]; - for(int i=0; i<argc; ++i) { + for (int i = 0; i < argc; ++i) { argv_utf8[i] = wc_to_utf8(argv[i]); } Error err = Main::setup(argv_utf8[0], argc - 1, &argv_utf8[1]); - if (err!=OK) + if (err != OK) return 255; - if (Main::start()) os.run(); Main::cleanup(); - - for (int i=0; i<argc; ++i) { + for (int i = 0; i < argc; ++i) { delete[] argv_utf8[i]; } delete[] argv_utf8; @@ -154,17 +150,17 @@ int widechar_main(int argc, wchar_t** argv) { return os.get_exit_code(); }; -int main(int _argc, char** _argv) { +int main(int _argc, char **_argv) { // _argc and _argv are ignored // we are going to use the WideChar version of them instead LPWSTR *wc_argv; - int argc; - int result; + int argc; + int result; wc_argv = CommandLineToArgvW(GetCommandLineW(), &argc); - if( NULL == wc_argv ) { + if (NULL == wc_argv) { wprintf(L"CommandLineToArgvW failed\n"); return 0; } @@ -177,7 +173,7 @@ int main(int _argc, char** _argv) { HINSTANCE godot_hinstance = NULL; -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { godot_hinstance = hInstance; - return main(0,NULL); + return main(0, NULL); } diff --git a/platform/windows/joypad.cpp b/platform/windows/joypad.cpp index 4c1eeb425a..2472940ef3 100644 --- a/platform/windows/joypad.cpp +++ b/platform/windows/joypad.cpp @@ -27,22 +27,25 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "joypad.h" -#include <iostream> -#include <wbemidl.h> #include <oleauto.h> +#include <wbemidl.h> +#include <iostream> #ifndef __GNUC__ #define __builtin_bswap32 _byteswap_ulong #endif -DWORD WINAPI _xinput_get_state(DWORD dwUserIndex, XINPUT_STATE* pState) { return ERROR_DEVICE_NOT_CONNECTED; } -DWORD WINAPI _xinput_set_state(DWORD dwUserIndex, XINPUT_VIBRATION* pVibration) { return ERROR_DEVICE_NOT_CONNECTED; } +DWORD WINAPI _xinput_get_state(DWORD dwUserIndex, XINPUT_STATE *pState) { + return ERROR_DEVICE_NOT_CONNECTED; +} +DWORD WINAPI _xinput_set_state(DWORD dwUserIndex, XINPUT_VIBRATION *pVibration) { + return ERROR_DEVICE_NOT_CONNECTED; +} JoypadWindows::JoypadWindows() { - } -JoypadWindows::JoypadWindows(InputDefault* _input, HWND* hwnd) { +JoypadWindows::JoypadWindows(InputDefault *_input, HWND *hwnd) { input = _input; hWnd = hwnd; @@ -57,9 +60,8 @@ JoypadWindows::JoypadWindows(InputDefault* _input, HWND* hwnd) { for (int i = 0; i < JOYPADS_MAX; i++) attached_joypads[i] = false; - HRESULT result; - result = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&dinput, NULL); + result = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void **)&dinput, NULL); if (FAILED(result)) { printf("failed init DINPUT: %ld\n", result); } @@ -73,7 +75,6 @@ JoypadWindows::~JoypadWindows() { unload_xinput(); } - bool JoypadWindows::have_device(const GUID &p_guid) { for (int i = 0; i < JOYPADS_MAX; i++) { @@ -87,7 +88,6 @@ bool JoypadWindows::have_device(const GUID &p_guid) { return false; } - // adapted from SDL2, works a lot better than the MSDN version bool JoypadWindows::is_xinput_device(const GUID *p_guid) { @@ -104,7 +104,7 @@ bool JoypadWindows::is_xinput_device(const GUID *p_guid) { if (GetRawInputDeviceList(NULL, &dev_list_count, sizeof(RAWINPUTDEVICELIST)) == -1) { return false; } - dev_list = (PRAWINPUTDEVICELIST) malloc(sizeof(RAWINPUTDEVICELIST) * dev_list_count); + dev_list = (PRAWINPUTDEVICELIST)malloc(sizeof(RAWINPUTDEVICELIST) * dev_list_count); if (!dev_list) return false; if (GetRawInputDeviceList(dev_list, &dev_list_count, sizeof(RAWINPUTDEVICELIST)) == -1) { @@ -119,7 +119,7 @@ bool JoypadWindows::is_xinput_device(const GUID *p_guid) { UINT nameSize = sizeof(dev_name); rdi.cbSize = rdiSize; - if ( (dev_list[i].dwType == RIM_TYPEHID) && + if ((dev_list[i].dwType == RIM_TYPEHID) && (GetRawInputDeviceInfoA(dev_list[i].hDevice, RIDI_DEVICEINFO, &rdi, &rdiSize) != (UINT)-1) && (MAKELONG(rdi.hid.dwVendorId, rdi.hid.dwProductId) == (LONG)p_guid->Data1) && (GetRawInputDeviceInfoA(dev_list[i].hDevice, RIDI_DEVICENAME, &dev_name, &nameSize) != (UINT)-1) && @@ -133,7 +133,7 @@ bool JoypadWindows::is_xinput_device(const GUID *p_guid) { return false; } -bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE* instance) { +bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE *instance) { HRESULT hr; int num = input->get_unused_joy_id(); @@ -142,7 +142,7 @@ bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE* instance) { return false; d_joypads[joypad_count] = dinput_gamepad(); - dinput_gamepad* joy = &d_joypads[joypad_count]; + dinput_gamepad *joy = &d_joypads[joypad_count]; const DWORD devtype = (instance->dwDevType & 0xFF); @@ -162,8 +162,8 @@ bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE* instance) { const GUID &guid = instance->guidProduct; char uid[128]; sprintf(uid, "%08lx%04hx%04hx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx", - __builtin_bswap32(guid.Data1), guid.Data2, guid.Data3, - guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], + __builtin_bswap32(guid.Data1), guid.Data2, guid.Data3, + guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); id_to_change = joypad_count; @@ -216,7 +216,6 @@ void JoypadWindows::setup_joypad_object(const DIDEVICEOBJECTINSTANCE *ob, int p_ dinput_gamepad &joy = d_joypads[p_joy_id]; - res = IDirectInputDevice8_SetProperty(joy.di_joy, DIPROP_RANGE, &prop_range.diph); if (FAILED(res)) return; @@ -235,10 +234,9 @@ void JoypadWindows::setup_joypad_object(const DIDEVICEOBJECTINSTANCE *ob, int p_ } } -BOOL CALLBACK JoypadWindows::enumCallback(const DIDEVICEINSTANCE* instance, void* pContext) { - +BOOL CALLBACK JoypadWindows::enumCallback(const DIDEVICEINSTANCE *instance, void *pContext) { - JoypadWindows* self = (JoypadWindows*)pContext; + JoypadWindows *self = (JoypadWindows *)pContext; if (self->is_xinput_device(&instance->guidProduct)) { return DIENUM_CONTINUE; } @@ -248,7 +246,7 @@ BOOL CALLBACK JoypadWindows::enumCallback(const DIDEVICEINSTANCE* instance, void BOOL CALLBACK JoypadWindows::objectsCallback(const DIDEVICEOBJECTINSTANCE *instance, void *context) { - JoypadWindows* self = (JoypadWindows*)context; + JoypadWindows *self = (JoypadWindows *)context; self->setup_joypad_object(instance, self->id_to_change); return DIENUM_CONTINUE; @@ -284,7 +282,7 @@ void JoypadWindows::probe_joypads() { ZeroMemory(&x_joypads[i].state, sizeof(XINPUT_STATE)); dwResult = xinput_get_state(i, &x_joypads[i].state); - if ( dwResult == ERROR_SUCCESS) { + if (dwResult == ERROR_SUCCESS) { int id = input->get_unused_joy_id(); if (id != -1 && !x_joypads[i].attached) { @@ -295,10 +293,9 @@ void JoypadWindows::probe_joypads() { x_joypads[i].ff_end_timestamp = 0; x_joypads[i].vibrating = false; attached_joypads[id] = true; - input->joy_connection_changed(id, true, "XInput Gamepad","__XINPUT_DEVICE__"); + input->joy_connection_changed(id, true, "XInput Gamepad", "__XINPUT_DEVICE__"); } - } - else if (x_joypads[i].attached) { + } else if (x_joypads[i].attached) { x_joypads[i].attached = false; attached_joypads[x_joypads[i].id] = false; @@ -344,12 +341,12 @@ unsigned int JoypadWindows::process_joypads(unsigned int p_last_id) { button_mask = button_mask * 2; } - p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_0, axis_correct(joy.state.Gamepad.sThumbLX, true)); - p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_1, axis_correct(joy.state.Gamepad.sThumbLY, true, false, true)); - p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_2, axis_correct(joy.state.Gamepad.sThumbRX, true)); - p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_3, axis_correct(joy.state.Gamepad.sThumbRY, true, false, true)); - p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_4, axis_correct(joy.state.Gamepad.bLeftTrigger, true, true)); - p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_5, axis_correct(joy.state.Gamepad.bRightTrigger, true, true)); + p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_0, axis_correct(joy.state.Gamepad.sThumbLX, true)); + p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_1, axis_correct(joy.state.Gamepad.sThumbLY, true, false, true)); + p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_2, axis_correct(joy.state.Gamepad.sThumbRX, true)); + p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_3, axis_correct(joy.state.Gamepad.sThumbRY, true, false, true)); + p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_4, axis_correct(joy.state.Gamepad.bLeftTrigger, true, true)); + p_last_id = input->joy_axis(p_last_id, joy.id, JOY_AXIS_5, axis_correct(joy.state.Gamepad.bRightTrigger, true, true)); joy.last_packet = joy.state.dwPacketNumber; } uint64_t timestamp = input->get_joy_vibration_timestamp(joy.id); @@ -370,7 +367,7 @@ unsigned int JoypadWindows::process_joypads(unsigned int p_last_id) { for (int i = 0; i < JOYPADS_MAX; i++) { - dinput_gamepad* joy = &d_joypads[i]; + dinput_gamepad *joy = &d_joypads[i]; if (!joy->attached) continue; @@ -398,8 +395,7 @@ unsigned int JoypadWindows::process_joypads(unsigned int p_last_id) { p_last_id = input->joy_button(p_last_id, joy->id, j, true); joy->last_buttons[j] = true; } - } - else { + } else { if (joy->last_buttons[j]) { @@ -416,7 +412,7 @@ unsigned int JoypadWindows::process_joypads(unsigned int p_last_id) { for (int j = 0; j < joy->joy_axis.size(); j++) { - for (int k=0; k<count; k++) { + for (int k = 0; k < count; k++) { if (joy->joy_axis[j] == axes[k]) { p_last_id = input->joy_axis(p_last_id, joy->id, j, axis_correct(values[k])); break; @@ -438,38 +434,31 @@ unsigned int JoypadWindows::post_hat(unsigned int p_last_id, int p_device, DWORD dpad_val = InputDefault::HAT_MASK_UP; - } - else if (p_dpad == 4500) { + } else if (p_dpad == 4500) { dpad_val = (InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_RIGHT); - } - else if (p_dpad == 9000) { + } else if (p_dpad == 9000) { dpad_val = InputDefault::HAT_MASK_RIGHT; - } - else if (p_dpad == 13500) { + } else if (p_dpad == 13500) { dpad_val = (InputDefault::HAT_MASK_RIGHT | InputDefault::HAT_MASK_DOWN); - } - else if (p_dpad == 18000) { + } else if (p_dpad == 18000) { dpad_val = InputDefault::HAT_MASK_DOWN; - } - else if (p_dpad == 22500) { + } else if (p_dpad == 22500) { dpad_val = (InputDefault::HAT_MASK_DOWN | InputDefault::HAT_MASK_LEFT); - } - else if (p_dpad == 27000) { + } else if (p_dpad == 27000) { dpad_val = InputDefault::HAT_MASK_LEFT; - } - else if (p_dpad == 31500) { + } else if (p_dpad == 31500) { dpad_val = (InputDefault::HAT_MASK_LEFT | InputDefault::HAT_MASK_UP); } @@ -494,8 +483,7 @@ InputDefault::JoyAxis JoypadWindows::axis_correct(int p_val, bool p_xinput, bool jx.min = -1; if (p_val < 0) { jx.value = (float)p_val / MAX_JOY_AXIS; - } - else { + } else { jx.value = (float)p_val / (MAX_JOY_AXIS - 1); } if (p_negate) { @@ -526,7 +514,7 @@ void JoypadWindows::joypad_vibration_stop_xinput(int p_device, uint64_t p_timest xinput_gamepad &joy = x_joypads[p_device]; if (joy.attached) { XINPUT_VIBRATION effect; - effect.wLeftMotorSpeed = 0; + effect.wLeftMotorSpeed = 0; effect.wRightMotorSpeed = 0; if (xinput_set_state(p_device, &effect) == ERROR_SUCCESS) { joy.ff_timestamp = p_timestamp; @@ -535,12 +523,11 @@ void JoypadWindows::joypad_vibration_stop_xinput(int p_device, uint64_t p_timest } } - void JoypadWindows::load_xinput() { xinput_get_state = &_xinput_get_state; xinput_set_state = &_xinput_set_state; - xinput_dll = LoadLibrary( "XInput1_4.dll" ); + xinput_dll = LoadLibrary("XInput1_4.dll"); if (!xinput_dll) { xinput_dll = LoadLibrary("XInput1_3.dll"); if (!xinput_dll) { diff --git a/platform/windows/joypad.h b/platform/windows/joypad.h index d6670c90db..7e4f6ff328 100644 --- a/platform/windows/joypad.h +++ b/platform/windows/joypad.h @@ -34,30 +34,28 @@ #include <dinput.h> #include <xinput.h> // on unix the file is called "xinput.h", on windows I'm sure it won't mind -#ifndef SAFE_RELEASE // when Windows Media Device M? is not present +#ifndef SAFE_RELEASE // when Windows Media Device M? is not present #define SAFE_RELEASE(x) \ -if(x != NULL) \ -{ \ - x->Release(); \ - x = NULL; \ -} + if (x != NULL) { \ + x->Release(); \ + x = NULL; \ + } #endif #ifndef XUSER_MAX_COUNT #define XUSER_MAX_COUNT 4 #endif -class JoypadWindows -{ +class JoypadWindows { public: JoypadWindows(); - JoypadWindows(InputDefault* _input, HWND* hwnd); + JoypadWindows(InputDefault *_input, HWND *hwnd); ~JoypadWindows(); void probe_joypads(); unsigned int process_joypads(unsigned int p_last_id); -private: +private: enum { JOYPADS_MAX = 16, JOY_AXIS_COUNT = 6, @@ -110,13 +108,13 @@ private: } }; - typedef DWORD (WINAPI *XInputGetState_t) (DWORD dwUserIndex, XINPUT_STATE* pState); - typedef DWORD (WINAPI *XInputSetState_t) (DWORD dwUserIndex, XINPUT_VIBRATION* pVibration); + typedef DWORD(WINAPI *XInputGetState_t)(DWORD dwUserIndex, XINPUT_STATE *pState); + typedef DWORD(WINAPI *XInputSetState_t)(DWORD dwUserIndex, XINPUT_VIBRATION *pVibration); - HWND* hWnd; + HWND *hWnd; HANDLE xinput_dll; LPDIRECTINPUT8 dinput; - InputDefault* input; + InputDefault *input; int id_to_change; int joypad_count; @@ -124,10 +122,10 @@ private: dinput_gamepad d_joypads[JOYPADS_MAX]; xinput_gamepad x_joypads[XUSER_MAX_COUNT]; - static BOOL CALLBACK enumCallback(const DIDEVICEINSTANCE* p_instance, void* p_context); - static BOOL CALLBACK objectsCallback(const DIDEVICEOBJECTINSTANCE* instance, void* context); + static BOOL CALLBACK enumCallback(const DIDEVICEINSTANCE *p_instance, void *p_context); + static BOOL CALLBACK objectsCallback(const DIDEVICEOBJECTINSTANCE *instance, void *context); - void setup_joypad_object(const DIDEVICEOBJECTINSTANCE* ob, int p_joy_id); + void setup_joypad_object(const DIDEVICEOBJECTINSTANCE *ob, int p_joy_id); void close_joypad(int id = -1); void load_xinput(); void unload_xinput(); @@ -135,8 +133,8 @@ private: unsigned int post_hat(unsigned int p_last_id, int p_device, DWORD p_dpad); bool have_device(const GUID &p_guid); - bool is_xinput_device(const GUID* p_guid); - bool setup_dinput_joypad(const DIDEVICEINSTANCE* instance); + bool is_xinput_device(const GUID *p_guid); + bool setup_dinput_joypad(const DIDEVICEINSTANCE *instance); void joypad_vibration_start_xinput(int p_device, float p_weak_magnitude, float p_strong_magnitude, float p_duration, uint64_t p_timestamp); void joypad_vibration_stop_xinput(int p_device, uint64_t p_timestamp); @@ -146,5 +144,3 @@ private: }; #endif - - diff --git a/platform/windows/key_mapping_win.cpp b/platform/windows/key_mapping_win.cpp index 9ab222e9ee..51cdba65d5 100644 --- a/platform/windows/key_mapping_win.cpp +++ b/platform/windows/key_mapping_win.cpp @@ -36,202 +36,198 @@ struct _WinTranslatePair { unsigned int keycode; }; +static _WinTranslatePair _vk_to_keycode[] = { -static _WinTranslatePair _vk_to_keycode[]={ + { KEY_BACKSPACE, VK_BACK }, // (0x08) // backspace + { KEY_TAB, VK_TAB }, //(0x09) -{ KEY_BACKSPACE, VK_BACK },// (0x08) // backspace -{ KEY_TAB, VK_TAB },//(0x09) + //VK_CLEAR (0x0C) -//VK_CLEAR (0x0C) + { KEY_RETURN, VK_RETURN }, //(0x0D) -{ KEY_RETURN, VK_RETURN },//(0x0D) + { KEY_SHIFT, VK_SHIFT }, //(0x10) -{ KEY_SHIFT, VK_SHIFT },//(0x10) + { KEY_CONTROL, VK_CONTROL }, //(0x11) + + { KEY_MENU, VK_MENU }, //(0x12) + + { KEY_PAUSE, VK_PAUSE }, //(0x13) + + { KEY_CAPSLOCK, VK_CAPITAL }, //(0x14) + + { KEY_ESCAPE, VK_ESCAPE }, //(0x1B) + + { KEY_SPACE, VK_SPACE }, //(0x20) + + { KEY_PAGEUP, VK_PRIOR }, //(0x21) + + { KEY_PAGEDOWN, VK_NEXT }, //(0x22) + + { KEY_END, VK_END }, //(0x23) + + { KEY_HOME, VK_HOME }, //(0x24) + + { KEY_LEFT, VK_LEFT }, //(0x25) + + { KEY_UP, VK_UP }, //(0x26) + + { KEY_RIGHT, VK_RIGHT }, //(0x27) + + { KEY_DOWN, VK_DOWN }, // (0x28) + + //VK_SELECT (0x29) + + { KEY_PRINT, VK_PRINT }, // (0x2A) + + //VK_EXECUTE (0x2B) + + { KEY_PRINT, VK_SNAPSHOT }, // (0x2C) + + { KEY_INSERT, VK_INSERT }, // (0x2D) + + { KEY_DELETE, VK_DELETE }, // (0x2E) + + { KEY_HELP, VK_HELP }, // (0x2F) + + { KEY_0, (0x30) }, ////0 key + { KEY_1, (0x31) }, ////1 key + { KEY_2, (0x32) }, ////2 key + { KEY_3, (0x33) }, ////3 key + { KEY_4, (0x34) }, ////4 key + { KEY_5, (0x35) }, ////5 key + { KEY_6, (0x36) }, ////6 key + { KEY_7, (0x37) }, ////7 key + { KEY_8, (0x38) }, ////8 key + { KEY_9, (0x39) }, ////9 key + { KEY_A, (0x41) }, ////A key + { KEY_B, (0x42) }, ////B key + { KEY_C, (0x43) }, ////C key + { KEY_D, (0x44) }, ////D key + { KEY_E, (0x45) }, ////E key + { KEY_F, (0x46) }, ////F key + { KEY_G, (0x47) }, ////G key + { KEY_H, (0x48) }, ////H key + { KEY_I, (0x49) }, ////I key + { KEY_J, (0x4A) }, ////J key + { KEY_K, (0x4B) }, ////K key + { KEY_L, (0x4C) }, ////L key + { KEY_M, (0x4D) }, ////M key + { KEY_N, (0x4E) }, ////N key + { KEY_O, (0x4F) }, ////O key + { KEY_P, (0x50) }, ////P key + { KEY_Q, (0x51) }, ////Q key + { KEY_R, (0x52) }, ////R key + { KEY_S, (0x53) }, ////S key + { KEY_T, (0x54) }, ////T key + { KEY_U, (0x55) }, ////U key + { KEY_V, (0x56) }, ////V key + { KEY_W, (0x57) }, ////W key + { KEY_X, (0x58) }, ////X key + { KEY_Y, (0x59) }, ////Y key + { KEY_Z, (0x5A) }, ////Z key -{ KEY_CONTROL, VK_CONTROL },//(0x11) - -{ KEY_MENU, VK_MENU },//(0x12) - -{ KEY_PAUSE, VK_PAUSE },//(0x13) - -{ KEY_CAPSLOCK, VK_CAPITAL },//(0x14) - -{ KEY_ESCAPE, VK_ESCAPE },//(0x1B) - -{ KEY_SPACE, VK_SPACE },//(0x20) - -{ KEY_PAGEUP,VK_PRIOR },//(0x21) - -{ KEY_PAGEDOWN, VK_NEXT },//(0x22) - -{ KEY_END, VK_END },//(0x23) - -{ KEY_HOME, VK_HOME },//(0x24) - -{ KEY_LEFT, VK_LEFT },//(0x25) - -{ KEY_UP, VK_UP },//(0x26) - -{ KEY_RIGHT,VK_RIGHT },//(0x27) - -{ KEY_DOWN, VK_DOWN},// (0x28) - -//VK_SELECT (0x29) - -{ KEY_PRINT, VK_PRINT},// (0x2A) - -//VK_EXECUTE (0x2B) - -{ KEY_PRINT, VK_SNAPSHOT},// (0x2C) - -{ KEY_INSERT, VK_INSERT},// (0x2D) - -{ KEY_DELETE, VK_DELETE},// (0x2E) - -{ KEY_HELP, VK_HELP},// (0x2F) - - -{ KEY_0, (0x30) },////0 key -{ KEY_1, (0x31) },////1 key -{ KEY_2, (0x32) },////2 key -{ KEY_3, (0x33) },////3 key -{ KEY_4, (0x34) },////4 key -{ KEY_5, (0x35) },////5 key -{ KEY_6, (0x36) },////6 key -{ KEY_7, (0x37) },////7 key -{ KEY_8, (0x38) },////8 key -{ KEY_9, (0x39) },////9 key -{ KEY_A, (0x41) },////A key -{ KEY_B, (0x42) },////B key -{ KEY_C, (0x43) },////C key -{ KEY_D, (0x44) },////D key -{ KEY_E, (0x45) },////E key -{ KEY_F, (0x46) },////F key -{ KEY_G, (0x47) },////G key -{ KEY_H, (0x48) },////H key -{ KEY_I, (0x49) },////I key -{ KEY_J, (0x4A) },////J key -{ KEY_K, (0x4B) },////K key -{ KEY_L, (0x4C) },////L key -{ KEY_M, (0x4D) },////M key -{ KEY_N, (0x4E) },////N key -{ KEY_O, (0x4F) },////O key -{ KEY_P, (0x50) },////P key -{ KEY_Q, (0x51) },////Q key -{ KEY_R, (0x52) },////R key -{ KEY_S, (0x53) },////S key -{ KEY_T, (0x54) },////T key -{ KEY_U, (0x55) },////U key -{ KEY_V, (0x56) },////V key -{ KEY_W, (0x57) },////W key -{ KEY_X, (0x58) },////X key -{ KEY_Y, (0x59) },////Y key -{ KEY_Z, (0x5A) },////Z key - -{ KEY_MASK_META, VK_LWIN },//(0x5B) -{ KEY_MASK_META, VK_RWIN },//(0x5C) -//VK_APPS (0x5D) -{ KEY_STANDBY,VK_SLEEP },//(0x5F) -{ KEY_KP_0,VK_NUMPAD0 },//(0x60) -{ KEY_KP_1,VK_NUMPAD1 },//(0x61) -{ KEY_KP_2,VK_NUMPAD2 },//(0x62) -{ KEY_KP_3,VK_NUMPAD3 },//(0x63) -{ KEY_KP_4,VK_NUMPAD4 },//(0x64) -{ KEY_KP_5,VK_NUMPAD5 },//(0x65) -{ KEY_KP_6,VK_NUMPAD6 },//(0x66) -{ KEY_KP_7,VK_NUMPAD7 },//(0x67) -{ KEY_KP_8,VK_NUMPAD8 },//(0x68) -{ KEY_KP_9,VK_NUMPAD9 },//(0x69) -{ KEY_KP_MULTIPLY,VK_MULTIPLY},// (0x6A) -{ KEY_KP_ADD,VK_ADD},// (0x6B) -//VK_SEPARATOR (0x6C) -{ KEY_KP_SUBTRACT,VK_SUBTRACT},// (0x6D) -{ KEY_KP_PERIOD,VK_DECIMAL},// (0x6E) -{ KEY_KP_DIVIDE,VK_DIVIDE},// (0x6F) -{ KEY_F1,VK_F1},// (0x70) -{ KEY_F2,VK_F2},// (0x71) -{ KEY_F3,VK_F3},// (0x72) -{ KEY_F4,VK_F4},// (0x73) -{ KEY_F5,VK_F5},// (0x74) -{ KEY_F6,VK_F6},// (0x75) -{ KEY_F7,VK_F7},// (0x76) -{ KEY_F8,VK_F8},// (0x77) -{ KEY_F9,VK_F9},// (0x78) -{ KEY_F10,VK_F10},// (0x79) -{ KEY_F11,VK_F11},// (0x7A) -{ KEY_F12,VK_F12},// (0x7B) -{ KEY_F13,VK_F13},// (0x7C) -{ KEY_F14,VK_F14},// (0x7D) -{ KEY_F15,VK_F15},// (0x7E) -{ KEY_F16,VK_F16},// (0x7F) -{ KEY_NUMLOCK,VK_NUMLOCK},// (0x90) -{ KEY_SCROLLLOCK,VK_SCROLL},// (0x91) -{ KEY_SHIFT,VK_LSHIFT},// (0xA0) -{ KEY_SHIFT,VK_RSHIFT},// (0xA1) -{ KEY_CONTROL,VK_LCONTROL},// (0xA2) -{ KEY_CONTROL,VK_RCONTROL},// (0xA3) -{ KEY_MENU,VK_LMENU},// (0xA4) -{ KEY_MENU,VK_RMENU},// (0xA5) - - -{ KEY_BACK,VK_BROWSER_BACK},// (0xA6) - -{ KEY_FORWARD,VK_BROWSER_FORWARD},// (0xA7) - -{ KEY_REFRESH,VK_BROWSER_REFRESH},// (0xA8) - -{ KEY_STOP,VK_BROWSER_STOP},// (0xA9) - -{ KEY_SEARCH,VK_BROWSER_SEARCH},// (0xAA) - -{ KEY_FAVORITES, VK_BROWSER_FAVORITES},// (0xAB) - -{ KEY_HOMEPAGE,VK_BROWSER_HOME},// (0xAC) - -{ KEY_VOLUMEMUTE,VK_VOLUME_MUTE},// (0xAD) - -{ KEY_VOLUMEDOWN,VK_VOLUME_DOWN},// (0xAE) - -{ KEY_VOLUMEUP,VK_VOLUME_UP},// (0xAF) - - -{ KEY_MEDIANEXT,VK_MEDIA_NEXT_TRACK},// (0xB0) - -{ KEY_MEDIAPREVIOUS,VK_MEDIA_PREV_TRACK},// (0xB1) - -{ KEY_MEDIASTOP,VK_MEDIA_STOP},// (0xB2) - -//VK_MEDIA_PLAY_PAUSE (0xB3) - -{ KEY_LAUNCHMAIL, VK_LAUNCH_MAIL},// (0xB4) - -{ KEY_LAUNCHMEDIA,VK_LAUNCH_MEDIA_SELECT},// (0xB5) - -{ KEY_LAUNCH0,VK_LAUNCH_APP1},// (0xB6) - -{ KEY_LAUNCH1,VK_LAUNCH_APP2},// (0xB7) - -{ KEY_SEMICOLON,VK_OEM_1},// (0xBA) - - -{ KEY_EQUAL, VK_OEM_PLUS},// (0xBB) // Windows 2000/XP: For any country/region, the '+' key -{ KEY_COLON,VK_OEM_COMMA},// (0xBC) // Windows 2000/XP: For any country/region, the ',' key -{ KEY_MINUS,VK_OEM_MINUS},// (0xBD) // Windows 2000/XP: For any country/region, the '-' key -{ KEY_PERIOD,VK_OEM_PERIOD},// (0xBE) // Windows 2000/XP: For any country/region, the '.' key -{ KEY_SLASH,VK_OEM_2},// (0xBF) //Windows 2000/XP: For the US standard keyboard, the '/?' key - -{KEY_QUOTELEFT, VK_OEM_3},// (0xC0) -{KEY_BRACELEFT,VK_OEM_4},// (0xDB) -{KEY_BACKSLASH,VK_OEM_5},// (0xDC) -{KEY_BRACERIGHT,VK_OEM_6},// (0xDD) -{KEY_APOSTROPHE, VK_OEM_7},// (0xDE) -/* + { KEY_MASK_META, VK_LWIN }, //(0x5B) + { KEY_MASK_META, VK_RWIN }, //(0x5C) + //VK_APPS (0x5D) + { KEY_STANDBY, VK_SLEEP }, //(0x5F) + { KEY_KP_0, VK_NUMPAD0 }, //(0x60) + { KEY_KP_1, VK_NUMPAD1 }, //(0x61) + { KEY_KP_2, VK_NUMPAD2 }, //(0x62) + { KEY_KP_3, VK_NUMPAD3 }, //(0x63) + { KEY_KP_4, VK_NUMPAD4 }, //(0x64) + { KEY_KP_5, VK_NUMPAD5 }, //(0x65) + { KEY_KP_6, VK_NUMPAD6 }, //(0x66) + { KEY_KP_7, VK_NUMPAD7 }, //(0x67) + { KEY_KP_8, VK_NUMPAD8 }, //(0x68) + { KEY_KP_9, VK_NUMPAD9 }, //(0x69) + { KEY_KP_MULTIPLY, VK_MULTIPLY }, // (0x6A) + { KEY_KP_ADD, VK_ADD }, // (0x6B) + //VK_SEPARATOR (0x6C) + { KEY_KP_SUBTRACT, VK_SUBTRACT }, // (0x6D) + { KEY_KP_PERIOD, VK_DECIMAL }, // (0x6E) + { KEY_KP_DIVIDE, VK_DIVIDE }, // (0x6F) + { KEY_F1, VK_F1 }, // (0x70) + { KEY_F2, VK_F2 }, // (0x71) + { KEY_F3, VK_F3 }, // (0x72) + { KEY_F4, VK_F4 }, // (0x73) + { KEY_F5, VK_F5 }, // (0x74) + { KEY_F6, VK_F6 }, // (0x75) + { KEY_F7, VK_F7 }, // (0x76) + { KEY_F8, VK_F8 }, // (0x77) + { KEY_F9, VK_F9 }, // (0x78) + { KEY_F10, VK_F10 }, // (0x79) + { KEY_F11, VK_F11 }, // (0x7A) + { KEY_F12, VK_F12 }, // (0x7B) + { KEY_F13, VK_F13 }, // (0x7C) + { KEY_F14, VK_F14 }, // (0x7D) + { KEY_F15, VK_F15 }, // (0x7E) + { KEY_F16, VK_F16 }, // (0x7F) + { KEY_NUMLOCK, VK_NUMLOCK }, // (0x90) + { KEY_SCROLLLOCK, VK_SCROLL }, // (0x91) + { KEY_SHIFT, VK_LSHIFT }, // (0xA0) + { KEY_SHIFT, VK_RSHIFT }, // (0xA1) + { KEY_CONTROL, VK_LCONTROL }, // (0xA2) + { KEY_CONTROL, VK_RCONTROL }, // (0xA3) + { KEY_MENU, VK_LMENU }, // (0xA4) + { KEY_MENU, VK_RMENU }, // (0xA5) + + { KEY_BACK, VK_BROWSER_BACK }, // (0xA6) + + { KEY_FORWARD, VK_BROWSER_FORWARD }, // (0xA7) + + { KEY_REFRESH, VK_BROWSER_REFRESH }, // (0xA8) + + { KEY_STOP, VK_BROWSER_STOP }, // (0xA9) + + { KEY_SEARCH, VK_BROWSER_SEARCH }, // (0xAA) + + { KEY_FAVORITES, VK_BROWSER_FAVORITES }, // (0xAB) + + { KEY_HOMEPAGE, VK_BROWSER_HOME }, // (0xAC) + + { KEY_VOLUMEMUTE, VK_VOLUME_MUTE }, // (0xAD) + + { KEY_VOLUMEDOWN, VK_VOLUME_DOWN }, // (0xAE) + + { KEY_VOLUMEUP, VK_VOLUME_UP }, // (0xAF) + + { KEY_MEDIANEXT, VK_MEDIA_NEXT_TRACK }, // (0xB0) + + { KEY_MEDIAPREVIOUS, VK_MEDIA_PREV_TRACK }, // (0xB1) + + { KEY_MEDIASTOP, VK_MEDIA_STOP }, // (0xB2) + + //VK_MEDIA_PLAY_PAUSE (0xB3) + + { KEY_LAUNCHMAIL, VK_LAUNCH_MAIL }, // (0xB4) + + { KEY_LAUNCHMEDIA, VK_LAUNCH_MEDIA_SELECT }, // (0xB5) + + { KEY_LAUNCH0, VK_LAUNCH_APP1 }, // (0xB6) + + { KEY_LAUNCH1, VK_LAUNCH_APP2 }, // (0xB7) + + { KEY_SEMICOLON, VK_OEM_1 }, // (0xBA) + + { KEY_EQUAL, VK_OEM_PLUS }, // (0xBB) // Windows 2000/XP: For any country/region, the '+' key + { KEY_COLON, VK_OEM_COMMA }, // (0xBC) // Windows 2000/XP: For any country/region, the ',' key + { KEY_MINUS, VK_OEM_MINUS }, // (0xBD) // Windows 2000/XP: For any country/region, the '-' key + { KEY_PERIOD, VK_OEM_PERIOD }, // (0xBE) // Windows 2000/XP: For any country/region, the '.' key + { KEY_SLASH, VK_OEM_2 }, // (0xBF) //Windows 2000/XP: For the US standard keyboard, the '/?' key + + { KEY_QUOTELEFT, VK_OEM_3 }, // (0xC0) + { KEY_BRACELEFT, VK_OEM_4 }, // (0xDB) + { KEY_BACKSLASH, VK_OEM_5 }, // (0xDC) + { KEY_BRACERIGHT, VK_OEM_6 }, // (0xDD) + { KEY_APOSTROPHE, VK_OEM_7 }, // (0xDE) + /* {VK_OEM_8 (0xDF) {VK_OEM_102 (0xE2) // Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard */ -//{ KEY_PLAY, VK_PLAY},// (0xFA) + //{ KEY_PLAY, VK_PLAY},// (0xFA) -{KEY_UNKNOWN, 0} }; + { KEY_UNKNOWN, 0 } +}; /* VK_ZOOM (0xFB) @@ -242,15 +238,14 @@ VK_OEM_CLEAR (0xFE) unsigned int KeyMappingWindows::get_keysym(unsigned int p_code) { - for(int i=0;_vk_to_keycode[i].keysym!=KEY_UNKNOWN;i++) { + for (int i = 0; _vk_to_keycode[i].keysym != KEY_UNKNOWN; i++) { - if (_vk_to_keycode[i].keycode==p_code) { + if (_vk_to_keycode[i].keycode == p_code) { //printf("outcode: %x\n",_vk_to_keycode[i].keysym); return _vk_to_keycode[i].keysym; } } - return KEY_UNKNOWN; } diff --git a/platform/windows/key_mapping_win.h b/platform/windows/key_mapping_win.h index 2f1b36d9f2..fbc79635c2 100644 --- a/platform/windows/key_mapping_win.h +++ b/platform/windows/key_mapping_win.h @@ -29,23 +29,18 @@ #ifndef KEY_MAPPING_WINDOWS_H #define KEY_MAPPING_WINDOWS_H - #include "os/keyboard.h" #include <windows.h> #include <winuser.h> - class KeyMappingWindows { - KeyMappingWindows() {}; -public: + KeyMappingWindows(){}; +public: static unsigned int get_keysym(unsigned int p_code); - }; - - #endif diff --git a/platform/windows/lang_table.h b/platform/windows/lang_table.h index bacbf89e85..7fe509d3e0 100644 --- a/platform/windows/lang_table.h +++ b/platform/windows/lang_table.h @@ -37,154 +37,154 @@ struct _WinLocale { int sublang; }; -static const _WinLocale _win_locales[]={ -{"ar", LANG_ARABIC,SUBLANG_NEUTRAL}, -{"ar_AE", LANG_ARABIC,SUBLANG_ARABIC_UAE}, -{"ar_BH", LANG_ARABIC,SUBLANG_ARABIC_BAHRAIN}, -{"ar_DZ", LANG_ARABIC,SUBLANG_ARABIC_ALGERIA}, -{"ar_EG", LANG_ARABIC,SUBLANG_ARABIC_EGYPT}, -{"ar_IQ", LANG_ARABIC,SUBLANG_ARABIC_IRAQ}, -{"ar_JO", LANG_ARABIC,SUBLANG_ARABIC_JORDAN}, -{"ar_KW", LANG_ARABIC,SUBLANG_ARABIC_KUWAIT}, -{"ar_LB", LANG_ARABIC,SUBLANG_ARABIC_LEBANON}, -{"ar_LY", LANG_ARABIC,SUBLANG_ARABIC_LIBYA}, -{"ar_MA", LANG_ARABIC,SUBLANG_ARABIC_MOROCCO}, -{"ar_OM", LANG_ARABIC,SUBLANG_ARABIC_OMAN}, -{"ar_QA", LANG_ARABIC,SUBLANG_ARABIC_QATAR}, -{"ar_SA", LANG_ARABIC,SUBLANG_ARABIC_SAUDI_ARABIA}, -//no sudan -{"ar_SY", LANG_ARABIC,SUBLANG_ARABIC_SYRIA}, -{"ar_TN", LANG_ARABIC,SUBLANG_ARABIC_TUNISIA}, -{"ar_YE", LANG_ARABIC,SUBLANG_ARABIC_YEMEN}, -{"be", LANG_BELARUSIAN,SUBLANG_NEUTRAL}, -{"be_BY", LANG_BELARUSIAN,SUBLANG_BELARUSIAN_BELARUS}, -{"bg", LANG_BULGARIAN,SUBLANG_NEUTRAL}, -{"bg_BG", LANG_BULGARIAN,SUBLANG_BULGARIAN_BULGARIA}, -{"ca", LANG_CATALAN,SUBLANG_NEUTRAL}, -{"ca_ES", LANG_CATALAN,SUBLANG_CATALAN_CATALAN}, -{"cs", LANG_CZECH,SUBLANG_NEUTRAL}, -{"cs_CZ", LANG_CZECH,SUBLANG_CZECH_CZECH_REPUBLIC}, -{"da", LANG_DANISH,SUBLANG_NEUTRAL}, -{"da_DK", LANG_DANISH,SUBLANG_DANISH_DENMARK}, -{"de", LANG_GERMAN,SUBLANG_NEUTRAL}, -{"de_AT", LANG_GERMAN,SUBLANG_GERMAN_AUSTRIAN}, -{"de_CH", LANG_GERMAN,SUBLANG_GERMAN_SWISS}, -{"de_DE", LANG_GERMAN,SUBLANG_GERMAN}, -{"de_LU", LANG_GERMAN,SUBLANG_GERMAN_LUXEMBOURG}, -{"el", LANG_GREEK,SUBLANG_NEUTRAL}, -{"el_GR", LANG_GREEK,SUBLANG_GREEK_GREECE}, -//{"en_029", LANG_ENGLISH,SUBLANG_ENGLISH_CARIBBEAN}, -{"en", LANG_ENGLISH,SUBLANG_NEUTRAL}, -{"en_AU", LANG_ENGLISH,SUBLANG_ENGLISH_AUS}, -{"en_CA", LANG_ENGLISH,SUBLANG_ENGLISH_CAN}, -{"en_GB", LANG_ENGLISH,SUBLANG_ENGLISH_UK}, -//{"en_IE", LANG_ENGLISH,SUBLANG_ENGLISH_IRELAND}, -{"en_IN", LANG_ENGLISH,SUBLANG_ENGLISH_INDIA}, -//MT -{"en_NZ", LANG_ENGLISH,SUBLANG_ENGLISH_NZ}, -{"en_PH", LANG_ENGLISH,SUBLANG_ENGLISH_PHILIPPINES}, -{"en_SG", LANG_ENGLISH,SUBLANG_ENGLISH_SINGAPORE}, -{"en_US", LANG_ENGLISH,SUBLANG_ENGLISH_US}, -{"en_ZA", LANG_ENGLISH,SUBLANG_ENGLISH_SOUTH_AFRICA}, -{"es", LANG_SPANISH,SUBLANG_NEUTRAL}, -{"es_AR", LANG_SPANISH,SUBLANG_SPANISH_ARGENTINA}, -{"es_BO", LANG_SPANISH,SUBLANG_SPANISH_BOLIVIA}, -{"es_CL", LANG_SPANISH,SUBLANG_SPANISH_CHILE}, -{"es_CO", LANG_SPANISH,SUBLANG_SPANISH_COLOMBIA}, -{"es_CR", LANG_SPANISH,SUBLANG_SPANISH_COSTA_RICA}, -{"es_DO", LANG_SPANISH,SUBLANG_SPANISH_DOMINICAN_REPUBLIC}, -{"es_EC", LANG_SPANISH,SUBLANG_SPANISH_ECUADOR}, -{"es_ES", LANG_SPANISH,SUBLANG_SPANISH}, -{"es_GT", LANG_SPANISH,SUBLANG_SPANISH_GUATEMALA}, -{"es_HN", LANG_SPANISH,SUBLANG_SPANISH_HONDURAS}, -{"es_MX", LANG_SPANISH,SUBLANG_SPANISH_MEXICAN}, -{"es_NI", LANG_SPANISH,SUBLANG_SPANISH_NICARAGUA}, -{"es_PA", LANG_SPANISH,SUBLANG_SPANISH_PANAMA}, -{"es_PE", LANG_SPANISH,SUBLANG_SPANISH_PERU}, -{"es_PR", LANG_SPANISH,SUBLANG_SPANISH_PUERTO_RICO}, -{"es_PY", LANG_SPANISH,SUBLANG_SPANISH_PARAGUAY}, -{"es_SV", LANG_SPANISH,SUBLANG_SPANISH_EL_SALVADOR}, -{"es_US", LANG_SPANISH,SUBLANG_SPANISH_US}, -{"es_UY", LANG_SPANISH,SUBLANG_SPANISH_URUGUAY}, -{"es_VE", LANG_SPANISH,SUBLANG_SPANISH_VENEZUELA}, -{"et", LANG_ESTONIAN,SUBLANG_NEUTRAL}, -{"et_EE", LANG_ESTONIAN,SUBLANG_ESTONIAN_ESTONIA}, -{"fi", LANG_FINNISH,SUBLANG_NEUTRAL}, -{"fi_FI", LANG_FINNISH,SUBLANG_FINNISH_FINLAND}, -{"fr", LANG_FRENCH,SUBLANG_NEUTRAL}, -{"fr_BE", LANG_FRENCH,SUBLANG_FRENCH_BELGIAN}, -{"fr_CA", LANG_FRENCH,SUBLANG_FRENCH_CANADIAN}, -{"fr_CH", LANG_FRENCH,SUBLANG_FRENCH_SWISS}, -{"fr_FR", LANG_FRENCH,SUBLANG_FRENCH}, -{"fr_LU", LANG_FRENCH,SUBLANG_FRENCH_LUXEMBOURG}, -{"ga", LANG_IRISH,SUBLANG_NEUTRAL}, -{"ga_IE", LANG_IRISH,SUBLANG_IRISH_IRELAND}, -{"hi", LANG_HINDI,SUBLANG_NEUTRAL}, -{"hi_IN", LANG_HINDI,SUBLANG_HINDI_INDIA}, -{"hr", LANG_CROATIAN,SUBLANG_NEUTRAL}, -{"hr_HR", LANG_CROATIAN,SUBLANG_CROATIAN_CROATIA}, -{"hu", LANG_HUNGARIAN,SUBLANG_NEUTRAL}, -{"hu_HU", LANG_HUNGARIAN,SUBLANG_HUNGARIAN_HUNGARY}, -{"in", LANG_ARMENIAN,SUBLANG_NEUTRAL}, -{"in_ID", LANG_INDONESIAN,SUBLANG_INDONESIAN_INDONESIA}, -{"is", LANG_ICELANDIC,SUBLANG_NEUTRAL}, -{"is_IS", LANG_ICELANDIC,SUBLANG_ICELANDIC_ICELAND}, -{"it", LANG_ITALIAN,SUBLANG_NEUTRAL}, -{"it_CH", LANG_ITALIAN,SUBLANG_ITALIAN_SWISS}, -{"it_IT", LANG_ITALIAN,SUBLANG_ITALIAN}, -{"iw", LANG_HEBREW,SUBLANG_NEUTRAL}, -{"iw_IL", LANG_HEBREW,SUBLANG_HEBREW_ISRAEL}, -{"ja", LANG_JAPANESE,SUBLANG_NEUTRAL}, -{"ja_JP", LANG_JAPANESE,SUBLANG_JAPANESE_JAPAN}, -{"ko", LANG_KOREAN,SUBLANG_NEUTRAL}, -{"ko_KR", LANG_KOREAN,SUBLANG_KOREAN}, -{"lt", LANG_LITHUANIAN,SUBLANG_NEUTRAL}, -//{"lt_LT", LANG_LITHUANIAN,SUBLANG_LITHUANIAN_LITHUANIA}, -{"lv", LANG_LATVIAN,SUBLANG_NEUTRAL}, -{"lv_LV", LANG_LATVIAN,SUBLANG_LATVIAN_LATVIA}, -{"mk", LANG_MACEDONIAN,SUBLANG_NEUTRAL}, -{"mk_MK", LANG_MACEDONIAN,SUBLANG_MACEDONIAN_MACEDONIA}, -{"ms", LANG_MALAY,SUBLANG_NEUTRAL}, -{"ms_MY", LANG_MALAY,SUBLANG_MALAY_MALAYSIA}, -{"mt", LANG_MALTESE,SUBLANG_NEUTRAL}, -{"mt_MT", LANG_MALTESE,SUBLANG_MALTESE_MALTA}, -{"nl", LANG_DUTCH,SUBLANG_NEUTRAL}, -{"nl_BE", LANG_DUTCH,SUBLANG_DUTCH_BELGIAN}, -{"nl_NL", LANG_DUTCH,SUBLANG_DUTCH}, -{"no", LANG_NORWEGIAN,SUBLANG_NEUTRAL}, -{"no_NO", LANG_NORWEGIAN,SUBLANG_NORWEGIAN_BOKMAL}, -{"no_NO_NY", LANG_NORWEGIAN,SUBLANG_NORWEGIAN_NYNORSK}, -{"pl", LANG_POLISH,SUBLANG_NEUTRAL}, -{"pl_PL", LANG_POLISH,SUBLANG_POLISH_POLAND}, -{"pt", LANG_PORTUGUESE,SUBLANG_NEUTRAL}, -{"pt_BR", LANG_PORTUGUESE,SUBLANG_PORTUGUESE_BRAZILIAN}, -{"pt_PT", LANG_PORTUGUESE,SUBLANG_PORTUGUESE}, -{"ro", LANG_ROMANIAN,SUBLANG_NEUTRAL}, -{"ro_RO", LANG_ROMANIAN,SUBLANG_ROMANIAN_ROMANIA}, -{"ru", LANG_RUSSIAN,SUBLANG_NEUTRAL}, -{"ru_RU", LANG_RUSSIAN,SUBLANG_RUSSIAN_RUSSIA}, -{"sk", LANG_SLOVAK,SUBLANG_NEUTRAL}, -{"sk_SK", LANG_SLOVAK,SUBLANG_SLOVAK_SLOVAKIA}, -{"sl", LANG_SLOVENIAN,SUBLANG_NEUTRAL}, -{"sl_SI", LANG_SLOVENIAN,SUBLANG_SLOVENIAN_SLOVENIA}, -{"sq", LANG_ALBANIAN,SUBLANG_NEUTRAL}, -{"sq_AL", LANG_ALBANIAN,SUBLANG_ALBANIAN_ALBANIA}, -{"sr", LANG_SERBIAN_NEUTRAL,SUBLANG_NEUTRAL}, -{"sv", LANG_SWEDISH,SUBLANG_NEUTRAL}, -{"sv_SE", LANG_SWEDISH,SUBLANG_SWEDISH}, -{"th", LANG_THAI,SUBLANG_NEUTRAL}, -{"th_TH", LANG_THAI,SUBLANG_THAI_THAILAND}, -{"tr", LANG_TURKISH,SUBLANG_NEUTRAL}, -{"tr_TR", LANG_TURKISH,SUBLANG_TURKISH_TURKEY}, -{"uk", LANG_UKRAINIAN,SUBLANG_NEUTRAL}, -{"uk_UA", LANG_UKRAINIAN,SUBLANG_UKRAINIAN_UKRAINE}, -{"vi", LANG_VIETNAMESE,SUBLANG_NEUTRAL}, -{"vi_VN", LANG_VIETNAMESE,SUBLANG_VIETNAMESE_VIETNAM}, -{"zh", LANG_CHINESE,SUBLANG_NEUTRAL}, -{"zh_CN", LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED}, -{"zh_HK", LANG_CHINESE,SUBLANG_CHINESE_HONGKONG}, -{"zh_SG", LANG_CHINESE,SUBLANG_CHINESE_SINGAPORE}, -{0, 0,0}, +static const _WinLocale _win_locales[] = { + { "ar", LANG_ARABIC, SUBLANG_NEUTRAL }, + { "ar_AE", LANG_ARABIC, SUBLANG_ARABIC_UAE }, + { "ar_BH", LANG_ARABIC, SUBLANG_ARABIC_BAHRAIN }, + { "ar_DZ", LANG_ARABIC, SUBLANG_ARABIC_ALGERIA }, + { "ar_EG", LANG_ARABIC, SUBLANG_ARABIC_EGYPT }, + { "ar_IQ", LANG_ARABIC, SUBLANG_ARABIC_IRAQ }, + { "ar_JO", LANG_ARABIC, SUBLANG_ARABIC_JORDAN }, + { "ar_KW", LANG_ARABIC, SUBLANG_ARABIC_KUWAIT }, + { "ar_LB", LANG_ARABIC, SUBLANG_ARABIC_LEBANON }, + { "ar_LY", LANG_ARABIC, SUBLANG_ARABIC_LIBYA }, + { "ar_MA", LANG_ARABIC, SUBLANG_ARABIC_MOROCCO }, + { "ar_OM", LANG_ARABIC, SUBLANG_ARABIC_OMAN }, + { "ar_QA", LANG_ARABIC, SUBLANG_ARABIC_QATAR }, + { "ar_SA", LANG_ARABIC, SUBLANG_ARABIC_SAUDI_ARABIA }, + //no sudan + { "ar_SY", LANG_ARABIC, SUBLANG_ARABIC_SYRIA }, + { "ar_TN", LANG_ARABIC, SUBLANG_ARABIC_TUNISIA }, + { "ar_YE", LANG_ARABIC, SUBLANG_ARABIC_YEMEN }, + { "be", LANG_BELARUSIAN, SUBLANG_NEUTRAL }, + { "be_BY", LANG_BELARUSIAN, SUBLANG_BELARUSIAN_BELARUS }, + { "bg", LANG_BULGARIAN, SUBLANG_NEUTRAL }, + { "bg_BG", LANG_BULGARIAN, SUBLANG_BULGARIAN_BULGARIA }, + { "ca", LANG_CATALAN, SUBLANG_NEUTRAL }, + { "ca_ES", LANG_CATALAN, SUBLANG_CATALAN_CATALAN }, + { "cs", LANG_CZECH, SUBLANG_NEUTRAL }, + { "cs_CZ", LANG_CZECH, SUBLANG_CZECH_CZECH_REPUBLIC }, + { "da", LANG_DANISH, SUBLANG_NEUTRAL }, + { "da_DK", LANG_DANISH, SUBLANG_DANISH_DENMARK }, + { "de", LANG_GERMAN, SUBLANG_NEUTRAL }, + { "de_AT", LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN }, + { "de_CH", LANG_GERMAN, SUBLANG_GERMAN_SWISS }, + { "de_DE", LANG_GERMAN, SUBLANG_GERMAN }, + { "de_LU", LANG_GERMAN, SUBLANG_GERMAN_LUXEMBOURG }, + { "el", LANG_GREEK, SUBLANG_NEUTRAL }, + { "el_GR", LANG_GREEK, SUBLANG_GREEK_GREECE }, + //{"en_029", LANG_ENGLISH,SUBLANG_ENGLISH_CARIBBEAN}, + { "en", LANG_ENGLISH, SUBLANG_NEUTRAL }, + { "en_AU", LANG_ENGLISH, SUBLANG_ENGLISH_AUS }, + { "en_CA", LANG_ENGLISH, SUBLANG_ENGLISH_CAN }, + { "en_GB", LANG_ENGLISH, SUBLANG_ENGLISH_UK }, + //{"en_IE", LANG_ENGLISH,SUBLANG_ENGLISH_IRELAND}, + { "en_IN", LANG_ENGLISH, SUBLANG_ENGLISH_INDIA }, + //MT + { "en_NZ", LANG_ENGLISH, SUBLANG_ENGLISH_NZ }, + { "en_PH", LANG_ENGLISH, SUBLANG_ENGLISH_PHILIPPINES }, + { "en_SG", LANG_ENGLISH, SUBLANG_ENGLISH_SINGAPORE }, + { "en_US", LANG_ENGLISH, SUBLANG_ENGLISH_US }, + { "en_ZA", LANG_ENGLISH, SUBLANG_ENGLISH_SOUTH_AFRICA }, + { "es", LANG_SPANISH, SUBLANG_NEUTRAL }, + { "es_AR", LANG_SPANISH, SUBLANG_SPANISH_ARGENTINA }, + { "es_BO", LANG_SPANISH, SUBLANG_SPANISH_BOLIVIA }, + { "es_CL", LANG_SPANISH, SUBLANG_SPANISH_CHILE }, + { "es_CO", LANG_SPANISH, SUBLANG_SPANISH_COLOMBIA }, + { "es_CR", LANG_SPANISH, SUBLANG_SPANISH_COSTA_RICA }, + { "es_DO", LANG_SPANISH, SUBLANG_SPANISH_DOMINICAN_REPUBLIC }, + { "es_EC", LANG_SPANISH, SUBLANG_SPANISH_ECUADOR }, + { "es_ES", LANG_SPANISH, SUBLANG_SPANISH }, + { "es_GT", LANG_SPANISH, SUBLANG_SPANISH_GUATEMALA }, + { "es_HN", LANG_SPANISH, SUBLANG_SPANISH_HONDURAS }, + { "es_MX", LANG_SPANISH, SUBLANG_SPANISH_MEXICAN }, + { "es_NI", LANG_SPANISH, SUBLANG_SPANISH_NICARAGUA }, + { "es_PA", LANG_SPANISH, SUBLANG_SPANISH_PANAMA }, + { "es_PE", LANG_SPANISH, SUBLANG_SPANISH_PERU }, + { "es_PR", LANG_SPANISH, SUBLANG_SPANISH_PUERTO_RICO }, + { "es_PY", LANG_SPANISH, SUBLANG_SPANISH_PARAGUAY }, + { "es_SV", LANG_SPANISH, SUBLANG_SPANISH_EL_SALVADOR }, + { "es_US", LANG_SPANISH, SUBLANG_SPANISH_US }, + { "es_UY", LANG_SPANISH, SUBLANG_SPANISH_URUGUAY }, + { "es_VE", LANG_SPANISH, SUBLANG_SPANISH_VENEZUELA }, + { "et", LANG_ESTONIAN, SUBLANG_NEUTRAL }, + { "et_EE", LANG_ESTONIAN, SUBLANG_ESTONIAN_ESTONIA }, + { "fi", LANG_FINNISH, SUBLANG_NEUTRAL }, + { "fi_FI", LANG_FINNISH, SUBLANG_FINNISH_FINLAND }, + { "fr", LANG_FRENCH, SUBLANG_NEUTRAL }, + { "fr_BE", LANG_FRENCH, SUBLANG_FRENCH_BELGIAN }, + { "fr_CA", LANG_FRENCH, SUBLANG_FRENCH_CANADIAN }, + { "fr_CH", LANG_FRENCH, SUBLANG_FRENCH_SWISS }, + { "fr_FR", LANG_FRENCH, SUBLANG_FRENCH }, + { "fr_LU", LANG_FRENCH, SUBLANG_FRENCH_LUXEMBOURG }, + { "ga", LANG_IRISH, SUBLANG_NEUTRAL }, + { "ga_IE", LANG_IRISH, SUBLANG_IRISH_IRELAND }, + { "hi", LANG_HINDI, SUBLANG_NEUTRAL }, + { "hi_IN", LANG_HINDI, SUBLANG_HINDI_INDIA }, + { "hr", LANG_CROATIAN, SUBLANG_NEUTRAL }, + { "hr_HR", LANG_CROATIAN, SUBLANG_CROATIAN_CROATIA }, + { "hu", LANG_HUNGARIAN, SUBLANG_NEUTRAL }, + { "hu_HU", LANG_HUNGARIAN, SUBLANG_HUNGARIAN_HUNGARY }, + { "in", LANG_ARMENIAN, SUBLANG_NEUTRAL }, + { "in_ID", LANG_INDONESIAN, SUBLANG_INDONESIAN_INDONESIA }, + { "is", LANG_ICELANDIC, SUBLANG_NEUTRAL }, + { "is_IS", LANG_ICELANDIC, SUBLANG_ICELANDIC_ICELAND }, + { "it", LANG_ITALIAN, SUBLANG_NEUTRAL }, + { "it_CH", LANG_ITALIAN, SUBLANG_ITALIAN_SWISS }, + { "it_IT", LANG_ITALIAN, SUBLANG_ITALIAN }, + { "iw", LANG_HEBREW, SUBLANG_NEUTRAL }, + { "iw_IL", LANG_HEBREW, SUBLANG_HEBREW_ISRAEL }, + { "ja", LANG_JAPANESE, SUBLANG_NEUTRAL }, + { "ja_JP", LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN }, + { "ko", LANG_KOREAN, SUBLANG_NEUTRAL }, + { "ko_KR", LANG_KOREAN, SUBLANG_KOREAN }, + { "lt", LANG_LITHUANIAN, SUBLANG_NEUTRAL }, + //{"lt_LT", LANG_LITHUANIAN,SUBLANG_LITHUANIAN_LITHUANIA}, + { "lv", LANG_LATVIAN, SUBLANG_NEUTRAL }, + { "lv_LV", LANG_LATVIAN, SUBLANG_LATVIAN_LATVIA }, + { "mk", LANG_MACEDONIAN, SUBLANG_NEUTRAL }, + { "mk_MK", LANG_MACEDONIAN, SUBLANG_MACEDONIAN_MACEDONIA }, + { "ms", LANG_MALAY, SUBLANG_NEUTRAL }, + { "ms_MY", LANG_MALAY, SUBLANG_MALAY_MALAYSIA }, + { "mt", LANG_MALTESE, SUBLANG_NEUTRAL }, + { "mt_MT", LANG_MALTESE, SUBLANG_MALTESE_MALTA }, + { "nl", LANG_DUTCH, SUBLANG_NEUTRAL }, + { "nl_BE", LANG_DUTCH, SUBLANG_DUTCH_BELGIAN }, + { "nl_NL", LANG_DUTCH, SUBLANG_DUTCH }, + { "no", LANG_NORWEGIAN, SUBLANG_NEUTRAL }, + { "no_NO", LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL }, + { "no_NO_NY", LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK }, + { "pl", LANG_POLISH, SUBLANG_NEUTRAL }, + { "pl_PL", LANG_POLISH, SUBLANG_POLISH_POLAND }, + { "pt", LANG_PORTUGUESE, SUBLANG_NEUTRAL }, + { "pt_BR", LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN }, + { "pt_PT", LANG_PORTUGUESE, SUBLANG_PORTUGUESE }, + { "ro", LANG_ROMANIAN, SUBLANG_NEUTRAL }, + { "ro_RO", LANG_ROMANIAN, SUBLANG_ROMANIAN_ROMANIA }, + { "ru", LANG_RUSSIAN, SUBLANG_NEUTRAL }, + { "ru_RU", LANG_RUSSIAN, SUBLANG_RUSSIAN_RUSSIA }, + { "sk", LANG_SLOVAK, SUBLANG_NEUTRAL }, + { "sk_SK", LANG_SLOVAK, SUBLANG_SLOVAK_SLOVAKIA }, + { "sl", LANG_SLOVENIAN, SUBLANG_NEUTRAL }, + { "sl_SI", LANG_SLOVENIAN, SUBLANG_SLOVENIAN_SLOVENIA }, + { "sq", LANG_ALBANIAN, SUBLANG_NEUTRAL }, + { "sq_AL", LANG_ALBANIAN, SUBLANG_ALBANIAN_ALBANIA }, + { "sr", LANG_SERBIAN_NEUTRAL, SUBLANG_NEUTRAL }, + { "sv", LANG_SWEDISH, SUBLANG_NEUTRAL }, + { "sv_SE", LANG_SWEDISH, SUBLANG_SWEDISH }, + { "th", LANG_THAI, SUBLANG_NEUTRAL }, + { "th_TH", LANG_THAI, SUBLANG_THAI_THAILAND }, + { "tr", LANG_TURKISH, SUBLANG_NEUTRAL }, + { "tr_TR", LANG_TURKISH, SUBLANG_TURKISH_TURKEY }, + { "uk", LANG_UKRAINIAN, SUBLANG_NEUTRAL }, + { "uk_UA", LANG_UKRAINIAN, SUBLANG_UKRAINIAN_UKRAINE }, + { "vi", LANG_VIETNAMESE, SUBLANG_NEUTRAL }, + { "vi_VN", LANG_VIETNAMESE, SUBLANG_VIETNAMESE_VIETNAM }, + { "zh", LANG_CHINESE, SUBLANG_NEUTRAL }, + { "zh_CN", LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED }, + { "zh_HK", LANG_CHINESE, SUBLANG_CHINESE_HONGKONG }, + { "zh_SG", LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE }, + { 0, 0, 0 }, }; #endif // LANG_TABLE_H diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 8a347e5f32..2046ae9f44 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -30,35 +30,35 @@ #include "os_windows.h" #include "drivers/gles3/rasterizer_gles3.h" -#include "drivers/windows/thread_windows.h" -#include "drivers/windows/semaphore_windows.h" +#include "drivers/windows/dir_access_windows.h" +#include "drivers/windows/file_access_windows.h" #include "drivers/windows/mutex_windows.h" #include "drivers/windows/rw_lock_windows.h" -#include "drivers/windows/file_access_windows.h" -#include "drivers/windows/dir_access_windows.h" -#include "servers/visual/visual_server_raster.h" +#include "drivers/windows/semaphore_windows.h" +#include "drivers/windows/thread_windows.h" #include "servers/audio_server.h" +#include "servers/visual/visual_server_raster.h" //#include "servers/visual/visual_server_wrap_mt.h" -#include "main/main.h" -#include "tcp_server_winsock.h" -#include "packet_peer_udp_winsock.h" -#include "stream_peer_winsock.h" -#include "lang_table.h" #include "global_config.h" #include "io/marshalls.h" #include "joypad.h" +#include "lang_table.h" +#include "main/main.h" +#include "packet_peer_udp_winsock.h" +#include "stream_peer_winsock.h" +#include "tcp_server_winsock.h" -#include <shlobj.h> -#include <regstr.h> #include <process.h> +#include <regstr.h> +#include <shlobj.h> static const WORD MAX_CONSOLE_LINES = 1500; extern "C" { #ifdef _MSC_VER - _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; +_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; #else - __attribute__((visibility("default"))) DWORD NvOptimusEnablement = 0x00000001; +__attribute__((visibility("default"))) DWORD NvOptimusEnablement = 0x00000001; #endif } @@ -88,13 +88,13 @@ void RedirectIOToConsole() { GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), - &coninfo); + &coninfo); coninfo.dwSize.Y = MAX_CONSOLE_LINES; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), - coninfo.dwSize); + coninfo.dwSize); // redirect unbuffered STDOUT to the console @@ -102,11 +102,11 @@ void RedirectIOToConsole() { hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - fp = _fdopen( hConHandle, "w" ); + fp = _fdopen(hConHandle, "w"); *stdout = *fp; - setvbuf( stdout, NULL, _IONBF, 0 ); + setvbuf(stdout, NULL, _IONBF, 0); // redirect unbuffered STDIN to the console @@ -114,11 +114,11 @@ void RedirectIOToConsole() { hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - fp = _fdopen( hConHandle, "r" ); + fp = _fdopen(hConHandle, "r"); *stdin = *fp; - setvbuf( stdin, NULL, _IONBF, 0 ); + setvbuf(stdin, NULL, _IONBF, 0); // redirect unbuffered STDERR to the console @@ -126,11 +126,11 @@ void RedirectIOToConsole() { hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - fp = _fdopen( hConHandle, "w" ); + fp = _fdopen(hConHandle, "w"); *stderr = *fp; - setvbuf( stderr, NULL, _IONBF, 0 ); + setvbuf(stderr, NULL, _IONBF, 0); // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog @@ -141,37 +141,35 @@ int OS_Windows::get_video_driver_count() const { return 1; } -const char * OS_Windows::get_video_driver_name(int p_driver) const { +const char *OS_Windows::get_video_driver_name(int p_driver) const { return "GLES2"; } OS::VideoMode OS_Windows::get_default_video_mode() const { - return VideoMode(1024,600,false); + return VideoMode(1024, 600, false); } int OS_Windows::get_audio_driver_count() const { return AudioDriverManager::get_driver_count(); } -const char * OS_Windows::get_audio_driver_name(int p_driver) const { +const char *OS_Windows::get_audio_driver_name(int p_driver) const { - AudioDriver* driver = AudioDriverManager::get_driver(p_driver); - ERR_FAIL_COND_V( !driver, "" ); + AudioDriver *driver = AudioDriverManager::get_driver(p_driver); + ERR_FAIL_COND_V(!driver, ""); return AudioDriverManager::get_driver(p_driver)->get_name(); } - void OS_Windows::initialize_core() { - - last_button_state=0; + last_button_state = 0; //RedirectIOToConsole(); - maximized=false; - minimized=false; - borderless=false; + maximized = false; + minimized = false; + borderless = false; ThreadWindows::make_default(); SemaphoreWindows::make_default(); @@ -190,9 +188,8 @@ void OS_Windows::initialize_core() { StreamPeerWinsock::make_default(); PacketPeerUDPWinsock::make_default(); - - // We need to know how often the clock is updated - if( !QueryPerformanceFrequency((LARGE_INTEGER *)&ticks_per_second) ) + // We need to know how often the clock is updated + if (!QueryPerformanceFrequency((LARGE_INTEGER *)&ticks_per_second)) ticks_per_second = 1000; // If timeAtGameStart is 0 then we get the time since // the start of the computer when we call GetGameTime() @@ -203,9 +200,7 @@ void OS_Windows::initialize_core() { IP_Unix::make_default(); - cursor_shape=CURSOR_ARROW; - - + cursor_shape = CURSOR_ARROW; } bool OS_Windows::can_draw() const { @@ -215,20 +210,19 @@ bool OS_Windows::can_draw() const { #define MI_WP_SIGNATURE 0xFF515700 #define SIGNATURE_MASK 0xFFFFFF00 -#define IsPenEvent(dw) (((dw) & SIGNATURE_MASK) == MI_WP_SIGNATURE) - +#define IsPenEvent(dw) (((dw)&SIGNATURE_MASK) == MI_WP_SIGNATURE) void OS_Windows::_touch_event(bool p_pressed, int p_x, int p_y, int idx) { InputEvent event; event.type = InputEvent::SCREEN_TOUCH; - event.ID=++last_id; + event.ID = ++last_id; event.screen_touch.index = idx; event.screen_touch.pressed = p_pressed; - event.screen_touch.x=p_x; - event.screen_touch.y=p_y; + event.screen_touch.x = p_x; + event.screen_touch.y = p_y; if (main_loop) { input->parse_input_event(event); @@ -239,41 +233,38 @@ void OS_Windows::_drag_event(int p_x, int p_y, int idx) { InputEvent event; event.type = InputEvent::SCREEN_DRAG; - event.ID=++last_id; + event.ID = ++last_id; event.screen_drag.index = idx; - event.screen_drag.x=p_x; - event.screen_drag.y=p_y; + event.screen_drag.x = p_x; + event.screen_drag.y = p_y; if (main_loop) input->parse_input_event(event); }; -LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { +LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - - switch (uMsg) // Check For Windows Messages + switch (uMsg) // Check For Windows Messages { - case WM_SETFOCUS: - { + case WM_SETFOCUS: { window_has_focus = true; // Re-capture cursor if we're in one of the capture modes - if (mouse_mode==MOUSE_MODE_CAPTURED || mouse_mode==MOUSE_MODE_CONFINED) { + if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { SetCapture(hWnd); } break; } - case WM_KILLFOCUS: - { + case WM_KILLFOCUS: { window_has_focus = false; // Release capture if we're in one of the capture modes - if (mouse_mode==MOUSE_MODE_CAPTURED || mouse_mode==MOUSE_MODE_CONFINED) { + if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { ReleaseCapture(); } break; } - case WM_ACTIVATE: // Watch For Window Activate Message + case WM_ACTIVATE: // Watch For Window Activate Message { minimized = HIWORD(wParam) != 0; if (!main_loop) { @@ -282,23 +273,23 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { if (LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE) { main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN); - alt_mem=false; - control_mem=false; - shift_mem=false; - if (mouse_mode==MOUSE_MODE_CAPTURED || mouse_mode==MOUSE_MODE_CONFINED) { + alt_mem = false; + control_mem = false; + shift_mem = false; + if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { RECT clipRect; GetClientRect(hWnd, &clipRect); - ClientToScreen(hWnd, (POINT*) &clipRect.left); - ClientToScreen(hWnd, (POINT*) &clipRect.right); + ClientToScreen(hWnd, (POINT *)&clipRect.left); + ClientToScreen(hWnd, (POINT *)&clipRect.right); ClipCursor(&clipRect); SetCapture(hWnd); } } else { main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); - alt_mem=false; + alt_mem = false; }; - return 0; // Return To The Message Loop + return 0; // Return To The Message Loop } case WM_PAINT: @@ -306,32 +297,32 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { Main::force_redraw(); break; - case WM_SYSCOMMAND: // Intercept System Commands + case WM_SYSCOMMAND: // Intercept System Commands { - switch (wParam) // Check System Calls + switch (wParam) // Check System Calls { - case SC_SCREENSAVE: // Screensaver Trying To Start? - case SC_MONITORPOWER: // Monitor Trying To Enter Powersave? - return 0; // Prevent From Happening + case SC_SCREENSAVE: // Screensaver Trying To Start? + case SC_MONITORPOWER: // Monitor Trying To Enter Powersave? + return 0; // Prevent From Happening case SC_KEYMENU: - if ((lParam>>16)<=0) + if ((lParam >> 16) <= 0) return 0; } - break; // Exit + break; // Exit } - case WM_CLOSE: // Did We Receive A Close Message? + case WM_CLOSE: // Did We Receive A Close Message? { if (main_loop) main_loop->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST); //force_quit=true; - return 0; // Jump Back + return 0; // Jump Back } case WM_MOUSELEAVE: { - old_invalid=true; - outside=true; - if (main_loop && mouse_mode!=MOUSE_MODE_CAPTURED) + old_invalid = true; + outside = true; + if (main_loop && mouse_mode != MOUSE_MODE_CAPTURED) main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_EXIT); if (input) input->set_mouse_in_window(false); @@ -342,28 +333,27 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { if (outside) { //mouse enter - if (main_loop && mouse_mode!=MOUSE_MODE_CAPTURED) + if (main_loop && mouse_mode != MOUSE_MODE_CAPTURED) main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_ENTER); if (input) input->set_mouse_in_window(true); - CursorShape c=cursor_shape; - cursor_shape=CURSOR_MAX; + CursorShape c = cursor_shape; + cursor_shape = CURSOR_MAX; set_cursor_shape(c); - outside=false; + outside = false; //Once-Off notification, must call again.... TRACKMOUSEEVENT tme; - tme.cbSize=sizeof(TRACKMOUSEEVENT); - tme.dwFlags=TME_LEAVE; - tme.hwndTrack=hWnd; - tme.dwHoverTime=HOVER_DEFAULT; + tme.cbSize = sizeof(TRACKMOUSEEVENT); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = hWnd; + tme.dwHoverTime = HOVER_DEFAULT; TrackMouseEvent(&tme); - } // Don't calculate relative mouse movement if we don't have focus in CAPTURED mode. - if (!window_has_focus && mouse_mode==MOUSE_MODE_CAPTURED) + if (!window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED) break; /* LPARAM extra = GetMessageExtraInfo(); @@ -378,64 +368,60 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { }; */ - InputEvent event; - event.type=InputEvent::MOUSE_MOTION; - event.ID=++last_id; - InputEventMouseMotion &mm=event.mouse_motion; - - mm.mod.control=(wParam&MK_CONTROL)!=0; - mm.mod.shift=(wParam&MK_SHIFT)!=0; - mm.mod.alt=alt_mem; - - mm.button_mask|=(wParam&MK_LBUTTON)?(1<<0):0; - mm.button_mask|=(wParam&MK_RBUTTON)?(1<<1):0; - mm.button_mask|=(wParam&MK_MBUTTON)?(1<<2):0; - last_button_state=mm.button_mask; + event.type = InputEvent::MOUSE_MOTION; + event.ID = ++last_id; + InputEventMouseMotion &mm = event.mouse_motion; + + mm.mod.control = (wParam & MK_CONTROL) != 0; + mm.mod.shift = (wParam & MK_SHIFT) != 0; + mm.mod.alt = alt_mem; + + mm.button_mask |= (wParam & MK_LBUTTON) ? (1 << 0) : 0; + mm.button_mask |= (wParam & MK_RBUTTON) ? (1 << 1) : 0; + mm.button_mask |= (wParam & MK_MBUTTON) ? (1 << 2) : 0; + last_button_state = mm.button_mask; /*mm.button_mask|=(wParam&MK_XBUTTON1)?(1<<5):0; mm.button_mask|=(wParam&MK_XBUTTON2)?(1<<6):0;*/ - mm.x=GET_X_LPARAM(lParam); - mm.y=GET_Y_LPARAM(lParam); - - if (mouse_mode==MOUSE_MODE_CAPTURED) { + mm.x = GET_X_LPARAM(lParam); + mm.y = GET_Y_LPARAM(lParam); - Point2i c(video_mode.width/2,video_mode.height/2); + if (mouse_mode == MOUSE_MODE_CAPTURED) { + + Point2i c(video_mode.width / 2, video_mode.height / 2); old_x = c.x; old_y = c.y; - if (Point2i(mm.x,mm.y)==c) { - center=c; + if (Point2i(mm.x, mm.y) == c) { + center = c; return 0; } - Point2i ncenter(mm.x,mm.y); - center=ncenter; - POINT pos = { (int) c.x, (int) c.y }; + Point2i ncenter(mm.x, mm.y); + center = ncenter; + POINT pos = { (int)c.x, (int)c.y }; ClientToScreen(hWnd, &pos); SetCursorPos(pos.x, pos.y); - } - input->set_mouse_pos(Point2(mm.x,mm.y)); - mm.speed_x=input->get_last_mouse_speed().x; - mm.speed_y=input->get_last_mouse_speed().y; + input->set_mouse_pos(Point2(mm.x, mm.y)); + mm.speed_x = input->get_last_mouse_speed().x; + mm.speed_y = input->get_last_mouse_speed().y; if (old_invalid) { - old_x=mm.x; - old_y=mm.y; - old_invalid=false; + old_x = mm.x; + old_y = mm.y; + old_invalid = false; } - mm.relative_x=mm.x-old_x; - mm.relative_y=mm.y-old_y; - old_x=mm.x; - old_y=mm.y; + mm.relative_x = mm.x - old_x; + mm.relative_y = mm.y - old_y; + old_x = mm.x; + old_y = mm.y; if (window_has_focus && main_loop) input->parse_input_event(event); - - } break; case WM_LBUTTONDOWN: case WM_LBUTTONUP: @@ -447,10 +433,10 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_MOUSEHWHEEL: case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: - /*case WM_XBUTTONDOWN: - case WM_XBUTTONUP: */{ + /*case WM_XBUTTONDOWN: + case WM_XBUTTONUP: */ { - /* + /* LPARAM extra = GetMessageExtraInfo(); if (IsPenEvent(extra)) { @@ -463,76 +449,74 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { }; */ - InputEvent event; - event.type=InputEvent::MOUSE_BUTTON; - event.ID=++last_id; - InputEventMouseButton &mb=event.mouse_button; - - switch (uMsg) { - case WM_LBUTTONDOWN: { - mb.pressed=true; - mb.button_index=1; - } break; - case WM_LBUTTONUP: { - mb.pressed=false; - mb.button_index=1; - } break; - case WM_MBUTTONDOWN: { - mb.pressed=true; - mb.button_index=3; - - } break; - case WM_MBUTTONUP: { - mb.pressed=false; - mb.button_index=3; - } break; - case WM_RBUTTONDOWN: { - mb.pressed=true; - mb.button_index=2; - } break; - case WM_RBUTTONUP: { - mb.pressed=false; - mb.button_index=2; - } break; - case WM_LBUTTONDBLCLK: { - - mb.pressed=true; - mb.button_index=1; - mb.doubleclick = true; - } break; - case WM_RBUTTONDBLCLK: { - - mb.pressed=true; - mb.button_index=2; - mb.doubleclick = true; - } break; - case WM_MOUSEWHEEL: { - - mb.pressed=true; - int motion = (short)HIWORD(wParam); - if (!motion) - return 0; - - - if (motion>0) - mb.button_index= BUTTON_WHEEL_UP; - else - mb.button_index= BUTTON_WHEEL_DOWN; - - - } break; - case WM_MOUSEHWHEEL: { - - mb.pressed = true; - int motion = (short)HIWORD(wParam); - if (!motion) - return 0; - - if (motion<0) - mb.button_index = BUTTON_WHEEL_LEFT; - else - mb.button_index = BUTTON_WHEEL_RIGHT; - } break; + InputEvent event; + event.type = InputEvent::MOUSE_BUTTON; + event.ID = ++last_id; + InputEventMouseButton &mb = event.mouse_button; + + switch (uMsg) { + case WM_LBUTTONDOWN: { + mb.pressed = true; + mb.button_index = 1; + } break; + case WM_LBUTTONUP: { + mb.pressed = false; + mb.button_index = 1; + } break; + case WM_MBUTTONDOWN: { + mb.pressed = true; + mb.button_index = 3; + + } break; + case WM_MBUTTONUP: { + mb.pressed = false; + mb.button_index = 3; + } break; + case WM_RBUTTONDOWN: { + mb.pressed = true; + mb.button_index = 2; + } break; + case WM_RBUTTONUP: { + mb.pressed = false; + mb.button_index = 2; + } break; + case WM_LBUTTONDBLCLK: { + + mb.pressed = true; + mb.button_index = 1; + mb.doubleclick = true; + } break; + case WM_RBUTTONDBLCLK: { + + mb.pressed = true; + mb.button_index = 2; + mb.doubleclick = true; + } break; + case WM_MOUSEWHEEL: { + + mb.pressed = true; + int motion = (short)HIWORD(wParam); + if (!motion) + return 0; + + if (motion > 0) + mb.button_index = BUTTON_WHEEL_UP; + else + mb.button_index = BUTTON_WHEEL_DOWN; + + } break; + case WM_MOUSEHWHEEL: { + + mb.pressed = true; + int motion = (short)HIWORD(wParam); + if (!motion) + return 0; + + if (motion < 0) + mb.button_index = BUTTON_WHEEL_LEFT; + else + mb.button_index = BUTTON_WHEEL_RIGHT; + } break; /* case WM_XBUTTONDOWN: { mb.pressed=true; @@ -542,75 +526,68 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { mb.pressed=true; mb.button_index=(HIWORD(wParam)==XBUTTON1)?6:7; } break;*/ - default: { return 0; } - } - + default: { return 0; } + } - mb.mod.control=(wParam&MK_CONTROL)!=0; - mb.mod.shift=(wParam&MK_SHIFT)!=0; - mb.mod.alt=alt_mem; - //mb.mod.alt=(wParam&MK_MENU)!=0; - mb.button_mask|=(wParam&MK_LBUTTON)?(1<<0):0; - mb.button_mask|=(wParam&MK_RBUTTON)?(1<<1):0; - mb.button_mask|=(wParam&MK_MBUTTON)?(1<<2):0; + mb.mod.control = (wParam & MK_CONTROL) != 0; + mb.mod.shift = (wParam & MK_SHIFT) != 0; + mb.mod.alt = alt_mem; + //mb.mod.alt=(wParam&MK_MENU)!=0; + mb.button_mask |= (wParam & MK_LBUTTON) ? (1 << 0) : 0; + mb.button_mask |= (wParam & MK_RBUTTON) ? (1 << 1) : 0; + mb.button_mask |= (wParam & MK_MBUTTON) ? (1 << 2) : 0; - last_button_state=mb.button_mask; - /* + last_button_state = mb.button_mask; + /* mb.button_mask|=(wParam&MK_XBUTTON1)?(1<<5):0; mb.button_mask|=(wParam&MK_XBUTTON2)?(1<<6):0;*/ - mb.x=GET_X_LPARAM(lParam); - mb.y=GET_Y_LPARAM(lParam); + mb.x = GET_X_LPARAM(lParam); + mb.y = GET_Y_LPARAM(lParam); - if (mouse_mode==MOUSE_MODE_CAPTURED) { + if (mouse_mode == MOUSE_MODE_CAPTURED) { - mb.x=old_x; - mb.y=old_y; - } - - mb.global_x=mb.x; - mb.global_y=mb.y; + mb.x = old_x; + mb.y = old_y; + } + mb.global_x = mb.x; + mb.global_y = mb.y; - if (uMsg != WM_MOUSEWHEEL) { - if (mb.pressed) { + if (uMsg != WM_MOUSEWHEEL) { + if (mb.pressed) { - if (++pressrc>0) - SetCapture(hWnd); - } else { + if (++pressrc > 0) + SetCapture(hWnd); + } else { - - if (--pressrc<=0) { - ReleaseCapture(); - pressrc=0; + if (--pressrc <= 0) { + ReleaseCapture(); + pressrc = 0; + } } + } else if (mouse_mode != MOUSE_MODE_CAPTURED) { + // for reasons unknown to mankind, wheel comes in screen cordinates + POINT coords; + coords.x = mb.x; + coords.y = mb.y; - } - } else if (mouse_mode!=MOUSE_MODE_CAPTURED) { - // for reasons unknown to mankind, wheel comes in screen cordinates - POINT coords; - coords.x = mb.x; - coords.y = mb.y; - - ScreenToClient(hWnd, &coords); + ScreenToClient(hWnd, &coords); - mb.x = coords.x; - mb.y = coords.y; - } + mb.x = coords.x; + mb.y = coords.y; + } - if (main_loop) { - input->parse_input_event(event); - if (mb.pressed && mb.button_index>3) { - //send release for mouse wheel - mb.pressed=false; - event.ID=++last_id; + if (main_loop) { input->parse_input_event(event); - + if (mb.pressed && mb.button_index > 3) { + //send release for mouse wheel + mb.pressed = false; + event.ID = ++last_id; + input->parse_input_event(event); + } } } - - - - } break; + break; case WM_SIZE: { int window_w = LOWORD(lParam); @@ -623,7 +600,7 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { } break; case WM_ENTERSIZEMOVE: { - move_timer_id = SetTimer(hWnd, 1, USER_TIMER_MINIMUM,(TIMERPROC) NULL); + move_timer_id = SetTimer(hWnd, 1, USER_TIMER_MINIMUM, (TIMERPROC)NULL); } break; case WM_EXITSIZEMOVE: { KillTimer(hWnd, move_timer_id); @@ -640,15 +617,14 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_KEYUP: case WM_KEYDOWN: { - - if (wParam==VK_SHIFT) - shift_mem=uMsg==WM_KEYDOWN; - if (wParam==VK_CONTROL) - control_mem=uMsg==WM_KEYDOWN; - if (wParam==VK_MENU) { - alt_mem=(uMsg==WM_KEYDOWN || uMsg==WM_SYSKEYDOWN); - if (lParam&(1<<24)) - gr_mem=alt_mem; + if (wParam == VK_SHIFT) + shift_mem = uMsg == WM_KEYDOWN; + if (wParam == VK_CONTROL) + control_mem = uMsg == WM_KEYDOWN; + if (wParam == VK_MENU) { + alt_mem = (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN); + if (lParam & (1 << 24)) + gr_mem = alt_mem; } /* @@ -656,7 +632,6 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { meta_mem=uMsg==WM_KEYDOWN; */ - } //fallthrough case WM_CHAR: { @@ -664,17 +639,16 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { // Make sure we don't include modifiers for the modifier key itself. KeyEvent ke; - ke.mod_state.shift= (wParam != VK_SHIFT) ? shift_mem : false; - ke.mod_state.alt= (! (wParam == VK_MENU && (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN))) ? alt_mem : false; - ke.mod_state.control= (wParam != VK_CONTROL) ? control_mem : false; - ke.mod_state.meta=meta_mem; - ke.uMsg=uMsg; - - if (ke.uMsg==WM_SYSKEYDOWN) - ke.uMsg=WM_KEYDOWN; - if (ke.uMsg==WM_SYSKEYUP) - ke.uMsg=WM_KEYUP; + ke.mod_state.shift = (wParam != VK_SHIFT) ? shift_mem : false; + ke.mod_state.alt = (!(wParam == VK_MENU && (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN))) ? alt_mem : false; + ke.mod_state.control = (wParam != VK_CONTROL) ? control_mem : false; + ke.mod_state.meta = meta_mem; + ke.uMsg = uMsg; + if (ke.uMsg == WM_SYSKEYDOWN) + ke.uMsg = WM_KEYDOWN; + if (ke.uMsg == WM_SYSKEYUP) + ke.uMsg = WM_KEYUP; /*if (ke.uMsg==WM_KEYDOWN && alt_mem && uMsg!=WM_SYSKEYDOWN) { //altgr hack for intl keyboards, not sure how good it is @@ -684,10 +658,9 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { print_line("") }*/ - - ke.wParam=wParam; - ke.lParam=lParam; - key_event_buffer[key_event_pos++]=ke; + ke.wParam = wParam; + ke.lParam = lParam; + key_event_buffer[key_event_pos++] = ke; } break; case WM_INPUTLANGCHANGEREQUEST: { @@ -695,15 +668,15 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { print_line("input lang change"); } break; - #if WINVER >= 0x0601 // for windows 7 +#if WINVER >= 0x0601 // for windows 7 case WM_TOUCH: { BOOL bHandled = FALSE; UINT cInputs = LOWORD(wParam); PTOUCHINPUT pInputs = memnew_arr(TOUCHINPUT, cInputs); - if (pInputs){ - if (GetTouchInputInfo((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))){ - for (UINT i=0; i < cInputs; i++){ + if (pInputs) { + if (GetTouchInputInfo((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))) { + for (UINT i = 0; i < cInputs; i++) { TOUCHINPUT ti = pInputs[i]; //do something with each touch input entry if (ti.dwFlags & TOUCHEVENTF_MOVE) { @@ -715,11 +688,11 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { }; } bHandled = TRUE; - }else{ - /* handle the error here */ + } else { + /* handle the error here */ } memdelete_arr(pInputs); - }else{ + } else { /* handle the error here, probably out of memory */ } if (bHandled) { @@ -729,22 +702,21 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { } break; - #endif +#endif case WM_DEVICECHANGE: { joypad->probe_joypads(); } break; case WM_SETCURSOR: { - if(LOWORD(lParam) == HTCLIENT) { - if(window_has_focus && (mouse_mode == MOUSE_MODE_HIDDEN || mouse_mode == MOUSE_MODE_CAPTURED)) { + if (LOWORD(lParam) == HTCLIENT) { + if (window_has_focus && (mouse_mode == MOUSE_MODE_HIDDEN || mouse_mode == MOUSE_MODE_CAPTURED)) { //Hide the cursor - if(hCursor == NULL) + if (hCursor == NULL) hCursor = SetCursor(NULL); else SetCursor(NULL); - } - else { - if(hCursor != NULL) { + } else { + if (hCursor != NULL) { SetCursor(hCursor); hCursor = NULL; } @@ -755,30 +727,27 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_DROPFILES: { HDROP hDropInfo = NULL; - hDropInfo = (HDROP) wParam; - const int buffsize=4096; + hDropInfo = (HDROP)wParam; + const int buffsize = 4096; wchar_t buf[buffsize]; - int fcount = DragQueryFileW(hDropInfo, 0xFFFFFFFF,NULL,0); + int fcount = DragQueryFileW(hDropInfo, 0xFFFFFFFF, NULL, 0); Vector<String> files; - for(int i=0;i<fcount;i++) { + for (int i = 0; i < fcount; i++) { DragQueryFileW(hDropInfo, i, buf, buffsize); - String file=buf; + String file = buf; files.push_back(file); } if (files.size() && main_loop) { - main_loop->drop_files(files,0); + main_loop->drop_files(files, 0); } - } break; - - default: { if (user_proc) { @@ -788,119 +757,102 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { }; } - return DefWindowProcW(hWnd,uMsg,wParam,lParam); - + return DefWindowProcW(hWnd, uMsg, wParam, lParam); } -LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { +LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - OS_Windows *os_win = static_cast<OS_Windows*>(OS::get_singleton()); + OS_Windows *os_win = static_cast<OS_Windows *>(OS::get_singleton()); if (os_win) - return os_win->WndProc(hWnd,uMsg,wParam,lParam); + return os_win->WndProc(hWnd, uMsg, wParam, lParam); else - return DefWindowProcW(hWnd,uMsg,wParam,lParam); - + return DefWindowProcW(hWnd, uMsg, wParam, lParam); } - - void OS_Windows::process_key_events() { - for(int i=0;i<key_event_pos;i++) { + for (int i = 0; i < key_event_pos; i++) { KeyEvent &ke = key_event_buffer[i]; - switch(ke.uMsg) { + switch (ke.uMsg) { case WM_CHAR: { - if ((i==0 && ke.uMsg==WM_CHAR) || (i>0 && key_event_buffer[i-1].uMsg==WM_CHAR)) - { - InputEvent event; - event.type=InputEvent::KEY; - event.ID=++last_id; - InputEventKey &k=event.key; - - - k.mod=ke.mod_state; - k.pressed=true; - k.scancode=KeyMappingWindows::get_keysym(ke.wParam); - k.unicode=ke.wParam; - if (k.unicode && gr_mem) { - k.mod.alt=false; - k.mod.control=false; - } + if ((i == 0 && ke.uMsg == WM_CHAR) || (i > 0 && key_event_buffer[i - 1].uMsg == WM_CHAR)) { + InputEvent event; + event.type = InputEvent::KEY; + event.ID = ++last_id; + InputEventKey &k = event.key; + + k.mod = ke.mod_state; + k.pressed = true; + k.scancode = KeyMappingWindows::get_keysym(ke.wParam); + k.unicode = ke.wParam; + if (k.unicode && gr_mem) { + k.mod.alt = false; + k.mod.control = false; + } - if (k.unicode<32) - k.unicode=0; + if (k.unicode < 32) + k.unicode = 0; - input->parse_input_event(event); - } + input->parse_input_event(event); + } //do nothing } break; case WM_KEYUP: case WM_KEYDOWN: { - InputEvent event; - event.type=InputEvent::KEY; - event.ID=++last_id; - InputEventKey &k=event.key; + event.type = InputEvent::KEY; + event.ID = ++last_id; + InputEventKey &k = event.key; + k.mod = ke.mod_state; + k.pressed = (ke.uMsg == WM_KEYDOWN); - k.mod=ke.mod_state; - k.pressed=(ke.uMsg==WM_KEYDOWN); - - k.scancode=KeyMappingWindows::get_keysym(ke.wParam); - if (i+1 < key_event_pos && key_event_buffer[i+1].uMsg==WM_CHAR) - k.unicode=key_event_buffer[i+1].wParam; + k.scancode = KeyMappingWindows::get_keysym(ke.wParam); + if (i + 1 < key_event_pos && key_event_buffer[i + 1].uMsg == WM_CHAR) + k.unicode = key_event_buffer[i + 1].wParam; if (k.unicode && gr_mem) { - k.mod.alt=false; - k.mod.control=false; + k.mod.alt = false; + k.mod.control = false; } - if (k.unicode<32) - k.unicode=0; - - + if (k.unicode < 32) + k.unicode = 0; - k.echo=(ke.uMsg==WM_KEYDOWN && (ke.lParam&(1<<30))); + k.echo = (ke.uMsg == WM_KEYDOWN && (ke.lParam & (1 << 30))); input->parse_input_event(event); - } break; } } - key_event_pos=0; + key_event_pos = 0; } -enum _MonitorDpiType -{ - MDT_Effective_DPI = 0, - MDT_Angular_DPI = 1, - MDT_Raw_DPI = 2, - MDT_Default = MDT_Effective_DPI +enum _MonitorDpiType { + MDT_Effective_DPI = 0, + MDT_Angular_DPI = 1, + MDT_Raw_DPI = 2, + MDT_Default = MDT_Effective_DPI }; - -static int QueryDpiForMonitor(HMONITOR hmon, _MonitorDpiType dpiType= MDT_Default) -{ - +static int QueryDpiForMonitor(HMONITOR hmon, _MonitorDpiType dpiType = MDT_Default) { int dpiX = 96, dpiY = 96; static HMODULE Shcore = NULL; - typedef HRESULT (WINAPI* GetDPIForMonitor_t)(HMONITOR hmonitor, _MonitorDpiType dpiType, UINT *dpiX, UINT *dpiY); + typedef HRESULT(WINAPI * GetDPIForMonitor_t)(HMONITOR hmonitor, _MonitorDpiType dpiType, UINT * dpiX, UINT * dpiY); static GetDPIForMonitor_t getDPIForMonitor = NULL; - if (Shcore == NULL) - { + if (Shcore == NULL) { Shcore = LoadLibraryW(L"Shcore.dll"); getDPIForMonitor = Shcore ? (GetDPIForMonitor_t)GetProcAddress(Shcore, "GetDpiForMonitor") : NULL; - if ((Shcore == NULL) || (getDPIForMonitor == NULL)) - { + if ((Shcore == NULL) || (getDPIForMonitor == NULL)) { if (Shcore) FreeLibrary(Shcore); Shcore = (HMODULE)INVALID_HANDLE_VALUE; @@ -910,49 +862,41 @@ static int QueryDpiForMonitor(HMONITOR hmon, _MonitorDpiType dpiType= MDT_Defaul UINT x = 0, y = 0; HRESULT hr = E_FAIL; bool bSet = false; - if (hmon && (Shcore != (HMODULE)INVALID_HANDLE_VALUE)) - { - hr = getDPIForMonitor(hmon, dpiType/*MDT_Effective_DPI*/, &x, &y); - if (SUCCEEDED(hr) && (x > 0) && (y > 0)) - { + if (hmon && (Shcore != (HMODULE)INVALID_HANDLE_VALUE)) { + hr = getDPIForMonitor(hmon, dpiType /*MDT_Effective_DPI*/, &x, &y); + if (SUCCEEDED(hr) && (x > 0) && (y > 0)) { dpiX = (int)x; dpiY = (int)y; } - } - else - { + } else { static int overallX = 0, overallY = 0; - if (overallX <= 0 || overallY <= 0) - { + if (overallX <= 0 || overallY <= 0) { HDC hdc = GetDC(NULL); - if (hdc) - { + if (hdc) { overallX = GetDeviceCaps(hdc, LOGPIXELSX); overallY = GetDeviceCaps(hdc, LOGPIXELSY); ReleaseDC(NULL, hdc); } } - if (overallX > 0 && overallY > 0) - { - dpiX = overallX; dpiY = overallY; + if (overallX > 0 && overallY > 0) { + dpiX = overallX; + dpiY = overallY; } } - - return (dpiX+dpiY)/2; + return (dpiX + dpiY) / 2; } - -BOOL CALLBACK OS_Windows::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { - OS_Windows *self=(OS_Windows*)OS::get_singleton(); +BOOL CALLBACK OS_Windows::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { + OS_Windows *self = (OS_Windows *)OS::get_singleton(); MonitorInfo minfo; - minfo.hMonitor=hMonitor; - minfo.hdcMonitor=hdcMonitor; - minfo.rect.pos.x=lprcMonitor->left; - minfo.rect.pos.y=lprcMonitor->top; - minfo.rect.size.x=lprcMonitor->right - lprcMonitor->left; - minfo.rect.size.y=lprcMonitor->bottom - lprcMonitor->top; + minfo.hMonitor = hMonitor; + minfo.hdcMonitor = hdcMonitor; + minfo.rect.pos.x = lprcMonitor->left; + minfo.rect.pos.y = lprcMonitor->top; + minfo.rect.size.x = lprcMonitor->right - lprcMonitor->left; + minfo.rect.size.y = lprcMonitor->bottom - lprcMonitor->top; minfo.dpi = QueryDpiForMonitor(hMonitor); @@ -961,59 +905,55 @@ BOOL CALLBACK OS_Windows::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPR return TRUE; } +void OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { -void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) { - - + main_loop = NULL; + outside = true; + window_has_focus = true; + WNDCLASSEXW wc; - main_loop=NULL; - outside=true; - window_has_focus=true; - WNDCLASSEXW wc; - - video_mode=p_desired; + video_mode = p_desired; //printf("**************** desired %s, mode %s\n", p_desired.fullscreen?"true":"false", video_mode.fullscreen?"true":"false"); RECT WindowRect; - WindowRect.left=0; - WindowRect.right=video_mode.width; - WindowRect.top=0; - WindowRect.bottom=video_mode.height; + WindowRect.left = 0; + WindowRect.right = video_mode.width; + WindowRect.top = 0; + WindowRect.bottom = video_mode.height; - memset(&wc,0,sizeof(WNDCLASSEXW)); - wc.cbSize=sizeof(WNDCLASSEXW); - wc.style= CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS; + memset(&wc, 0, sizeof(WNDCLASSEXW)); + wc.cbSize = sizeof(WNDCLASSEXW); + wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS; wc.lpfnWndProc = (WNDPROC)::WndProc; wc.cbClsExtra = 0; - wc.cbWndExtra= 0; + wc.cbWndExtra = 0; //wc.hInstance = hInstance; wc.hInstance = godot_hinstance ? godot_hinstance : GetModuleHandle(NULL); wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); - wc.hCursor = NULL;//LoadCursor(NULL, IDC_ARROW); + wc.hCursor = NULL; //LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = NULL; - wc.lpszMenuName = NULL; - wc.lpszClassName = L"Engine"; + wc.lpszMenuName = NULL; + wc.lpszClassName = L"Engine"; if (!RegisterClassExW(&wc)) { - MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION); - return; // Return + MessageBox(NULL, "Failed To Register The Window Class.", "ERROR", MB_OK | MB_ICONEXCLAMATION); + return; // Return } + EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, 0); - EnumDisplayMonitors(NULL,NULL,MonitorEnumProc,0); - - print_line("DETECTED MONITORS: "+itos(monitor_info.size())); - pre_fs_valid=true; + print_line("DETECTED MONITORS: " + itos(monitor_info.size())); + pre_fs_valid = true; if (video_mode.fullscreen) { DEVMODE current; - memset(¤t,0,sizeof(current)); + memset(¤t, 0, sizeof(current)); EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, ¤t); - WindowRect.right = current.dmPelsWidth; + WindowRect.right = current.dmPelsWidth; WindowRect.bottom = current.dmPelsHeight; -/* DEVMODE dmScreenSettings; + /* DEVMODE dmScreenSettings; memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); dmScreenSettings.dmSize=sizeof(dmScreenSettings); dmScreenSettings.dmPelsWidth = video_mode.width; @@ -1026,20 +966,20 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_ video_mode.fullscreen=false; }*/ - pre_fs_valid=false; + pre_fs_valid = false; } - DWORD dwExStyle; - DWORD dwStyle; + DWORD dwExStyle; + DWORD dwStyle; - if (video_mode.fullscreen||video_mode.borderless_window) { + if (video_mode.fullscreen || video_mode.borderless_window) { - dwExStyle=WS_EX_APPWINDOW; - dwStyle=WS_POPUP; + dwExStyle = WS_EX_APPWINDOW; + dwStyle = WS_POPUP; } else { - dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; - dwStyle=WS_OVERLAPPEDWINDOW; + dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; + dwStyle = WS_OVERLAPPEDWINDOW; if (!video_mode.resizable) { dwStyle &= ~WS_THICKFRAME; dwStyle &= ~WS_MAXIMIZEBOX; @@ -1048,16 +988,15 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_ AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle); - - char* windowid = getenv("GODOT_WINDOWID"); + char *windowid = getenv("GODOT_WINDOWID"); if (windowid) { - // strtoull on mingw - #ifdef MINGW_ENABLED +// strtoull on mingw +#ifdef MINGW_ENABLED hWnd = (HWND)strtoull(windowid, NULL, 0); - #else +#else hWnd = (HWND)_strtoui64(windowid, NULL, 0); - #endif +#endif SetLastError(0); user_proc = (WNDPROC)GetWindowLongPtr(hWnd, GWLP_WNDPROC); SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)(WNDPROC)::WndProc); @@ -1070,24 +1009,22 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_ RECT rect; if (!GetClientRect(hWnd, &rect)) { - MessageBoxW(NULL,L"Window Creation Error.",L"ERROR",MB_OK|MB_ICONEXCLAMATION); - return; // Return FALSE + MessageBoxW(NULL, L"Window Creation Error.", L"ERROR", MB_OK | MB_ICONEXCLAMATION); + return; // Return FALSE }; video_mode.width = rect.right; video_mode.height = rect.bottom; video_mode.fullscreen = false; } else { - if (!(hWnd=CreateWindowExW(dwExStyle,L"Engine",L"", dwStyle|WS_CLIPSIBLINGS|WS_CLIPCHILDREN, (GetSystemMetrics(SM_CXSCREEN)-WindowRect.right)/2, (GetSystemMetrics(SM_CYSCREEN)-WindowRect.bottom)/2, WindowRect.right-WindowRect.left,WindowRect.bottom-WindowRect.top, NULL,NULL, hInstance,NULL))) { - MessageBoxW(NULL,L"Window Creation Error.",L"ERROR",MB_OK|MB_ICONEXCLAMATION); - return; // Return FALSE + if (!(hWnd = CreateWindowExW(dwExStyle, L"Engine", L"", dwStyle | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, (GetSystemMetrics(SM_CXSCREEN) - WindowRect.right) / 2, (GetSystemMetrics(SM_CYSCREEN) - WindowRect.bottom) / 2, WindowRect.right - WindowRect.left, WindowRect.bottom - WindowRect.top, NULL, NULL, hInstance, NULL))) { + MessageBoxW(NULL, L"Window Creation Error.", L"ERROR", MB_OK | MB_ICONEXCLAMATION); + return; // Return FALSE } - - }; #if defined(OPENGL_ENABLED) - gl_context = memnew( ContextGL_Win(hWnd,true) ); + gl_context = memnew(ContextGL_Win(hWnd, true)); gl_context->initialize(); RasterizerGLES3::register_config(); @@ -1095,27 +1032,27 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_ RasterizerGLES3::make_current(); #endif - visual_server = memnew( VisualServerRaster ); - // FIXME: Reimplement threaded rendering? Or remove? + visual_server = memnew(VisualServerRaster); + // FIXME: Reimplement threaded rendering? Or remove? /* if (get_render_thread_mode()!=RENDER_THREAD_UNSAFE) { visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD)); } */ - physics_server = memnew( PhysicsServerSW ); + physics_server = memnew(PhysicsServerSW); physics_server->init(); physics_2d_server = Physics2DServerWrapMT::init_server<Physics2DServerSW>(); physics_2d_server->init(); if (!is_no_window_mode_enabled()) { - ShowWindow(hWnd,SW_SHOW); // Show The Window - SetForegroundWindow(hWnd); // Slightly Higher Priority - SetFocus(hWnd); // Sets Keyboard Focus To + ShowWindow(hWnd, SW_SHOW); // Show The Window + SetForegroundWindow(hWnd); // Slightly Higher Priority + SetFocus(hWnd); // Sets Keyboard Focus To } -/* + /* DEVMODE dmScreenSettings; // Device Mode memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Size Of The Devmode Structure @@ -1131,35 +1068,35 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_ */ visual_server->init(); - input = memnew( InputDefault ); - joypad = memnew (JoypadWindows(input, &hWnd)); + input = memnew(InputDefault); + joypad = memnew(JoypadWindows(input, &hWnd)); - power_manager = memnew( PowerWindows ); + power_manager = memnew(PowerWindows); 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."); } TRACKMOUSEEVENT tme; - tme.cbSize=sizeof(TRACKMOUSEEVENT); - tme.dwFlags=TME_LEAVE; - tme.hwndTrack=hWnd; - tme.dwHoverTime=HOVER_DEFAULT; + tme.cbSize = sizeof(TRACKMOUSEEVENT); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = hWnd; + tme.dwHoverTime = HOVER_DEFAULT; TrackMouseEvent(&tme); //RegisterTouchWindow(hWnd, 0); // Windows 7 _ensure_data_dir(); - DragAcceptFiles(hWnd,true); + DragAcceptFiles(hWnd, true); move_timer_id = 1; } -void OS_Windows::set_clipboard(const String& p_text) { +void OS_Windows::set_clipboard(const String &p_text) { if (!OpenClipboard(hWnd)) { ERR_EXPLAIN("Unable to open clipboard."); @@ -1212,7 +1149,7 @@ String OS_Windows::get_clipboard() const { LPWSTR ptr = (LPWSTR)GlobalLock(mem); if (ptr != NULL) { - ret = String((CharType*)ptr); + ret = String((CharType *)ptr); GlobalUnlock(mem); }; }; @@ -1225,7 +1162,7 @@ String OS_Windows::get_clipboard() const { LPTSTR ptr = (LPTSTR)GlobalLock(mem); if (ptr != NULL) { - ret.parse_utf8((const char*)ptr); + ret.parse_utf8((const char *)ptr); GlobalUnlock(mem); }; }; @@ -1236,26 +1173,25 @@ String OS_Windows::get_clipboard() const { return ret; }; - void OS_Windows::delete_main_loop() { if (main_loop) memdelete(main_loop); - main_loop=NULL; + main_loop = NULL; } -void OS_Windows::set_main_loop( MainLoop * p_main_loop ) { +void OS_Windows::set_main_loop(MainLoop *p_main_loop) { input->set_main_loop(p_main_loop); - main_loop=p_main_loop; + main_loop = p_main_loop; } void OS_Windows::finalize() { - if(main_loop) + if (main_loop) memdelete(main_loop); - main_loop=NULL; + main_loop = NULL; for (int i = 0; i < get_audio_driver_count(); i++) { AudioDriverManager::get_driver(i)->finish(); @@ -1294,30 +1230,28 @@ void OS_Windows::finalize_core() { memdelete(process_map); - TCPServerWinsock::cleanup(); StreamPeerWinsock::cleanup(); } -void OS_Windows::vprint(const char* p_format, va_list p_list, bool p_stderr) { +void OS_Windows::vprint(const char *p_format, va_list p_list, bool p_stderr) { const unsigned int BUFFER_SIZE = 16384; - char buf[BUFFER_SIZE+1]; // +1 for the terminating character - int len = vsnprintf(buf,BUFFER_SIZE,p_format,p_list); - if (len<=0) + char buf[BUFFER_SIZE + 1]; // +1 for the terminating character + int len = vsnprintf(buf, BUFFER_SIZE, p_format, p_list); + if (len <= 0) return; - if(len >= BUFFER_SIZE) + if (len >= BUFFER_SIZE) len = BUFFER_SIZE; // Output is too big, will be truncated - buf[len]=0; - + buf[len] = 0; - int wlen = MultiByteToWideChar(CP_UTF8,0,buf,len,NULL,0); - if (wlen<0) + int wlen = MultiByteToWideChar(CP_UTF8, 0, buf, len, NULL, 0); + if (wlen < 0) return; - wchar_t *wbuf = (wchar_t*)malloc((len+1)*sizeof(wchar_t)); - MultiByteToWideChar(CP_UTF8,0,buf,len,wbuf,wlen); - wbuf[wlen]=0; + wchar_t *wbuf = (wchar_t *)malloc((len + 1) * sizeof(wchar_t)); + MultiByteToWideChar(CP_UTF8, 0, buf, len, wbuf, wlen); + wbuf[wlen] = 0; if (p_stderr) fwprintf(stderr, L"%ls", wbuf); @@ -1325,36 +1259,36 @@ void OS_Windows::vprint(const char* p_format, va_list p_list, bool p_stderr) { wprintf(L"%ls", wbuf); #ifdef STDOUT_FILE - //vwfprintf(stdo,p_format,p_list); +//vwfprintf(stdo,p_format,p_list); #endif free(wbuf); fflush(stdout); }; -void OS_Windows::alert(const String& p_alert,const String& p_title) { +void OS_Windows::alert(const String &p_alert, const String &p_title) { if (!is_no_window_mode_enabled()) MessageBoxW(NULL, p_alert.c_str(), p_title.c_str(), MB_OK | MB_ICONEXCLAMATION | MB_TASKMODAL); else - print_line("ALERT: "+p_alert); + print_line("ALERT: " + p_alert); } void OS_Windows::set_mouse_mode(MouseMode p_mode) { - if (mouse_mode==p_mode) + if (mouse_mode == p_mode) return; - mouse_mode=p_mode; - if (mouse_mode==MOUSE_MODE_CAPTURED || mouse_mode==MOUSE_MODE_CONFINED) { + mouse_mode = p_mode; + if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { RECT clipRect; GetClientRect(hWnd, &clipRect); - ClientToScreen(hWnd, (POINT*) &clipRect.left); - ClientToScreen(hWnd, (POINT*) &clipRect.right); + ClientToScreen(hWnd, (POINT *)&clipRect.left); + ClientToScreen(hWnd, (POINT *)&clipRect.right); ClipCursor(&clipRect); - center=Point2i(video_mode.width/2,video_mode.height/2); - POINT pos = { (int) center.x, (int) center.y }; + center = Point2i(video_mode.width / 2, video_mode.height / 2); + POINT pos = { (int)center.x, (int)center.y }; ClientToScreen(hWnd, &pos); - if (mouse_mode==MOUSE_MODE_CAPTURED) + if (mouse_mode == MOUSE_MODE_CAPTURED) SetCursorPos(pos.x, pos.y); } else { ReleaseCapture(); @@ -1368,28 +1302,25 @@ void OS_Windows::set_mouse_mode(MouseMode p_mode) { } } -OS_Windows::MouseMode OS_Windows::get_mouse_mode() const{ - +OS_Windows::MouseMode OS_Windows::get_mouse_mode() const { return mouse_mode; } +void OS_Windows::warp_mouse_pos(const Point2 &p_to) { + if (mouse_mode == MOUSE_MODE_CAPTURED) { -void OS_Windows::warp_mouse_pos(const Point2& p_to) { - - if (mouse_mode==MOUSE_MODE_CAPTURED) { - - old_x=p_to.x; - old_y=p_to.y; + old_x = p_to.x; + old_y = p_to.y; } else { POINT p; - p.x=p_to.x; - p.y=p_to.y; - ClientToScreen(hWnd,&p); + p.x = p_to.x; + p.y = p_to.y; + ClientToScreen(hWnd, &p); - SetCursorPos(p.x,p.y); + SetCursorPos(p.x, p.y); } } @@ -1403,110 +1334,98 @@ int OS_Windows::get_mouse_button_state() const { return last_button_state; } -void OS_Windows::set_window_title(const String& p_title) { +void OS_Windows::set_window_title(const String &p_title) { - SetWindowTextW(hWnd,p_title.c_str()); + SetWindowTextW(hWnd, p_title.c_str()); } -void OS_Windows::set_video_mode(const VideoMode& p_video_mode,int p_screen) { - - +void OS_Windows::set_video_mode(const VideoMode &p_video_mode, int p_screen) { } OS::VideoMode OS_Windows::get_video_mode(int p_screen) const { return video_mode; } -void OS_Windows::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const { - - +void OS_Windows::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const { } int OS_Windows::get_screen_count() const { return monitor_info.size(); } -int OS_Windows::get_current_screen() const{ +int OS_Windows::get_current_screen() const { - HMONITOR monitor = MonitorFromWindow(hWnd,MONITOR_DEFAULTTONEAREST); - for(int i=0;i<monitor_info.size();i++) { - if (monitor_info[i].hMonitor==monitor) + HMONITOR monitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST); + for (int i = 0; i < monitor_info.size(); i++) { + if (monitor_info[i].hMonitor == monitor) return i; } return 0; } -void OS_Windows::set_current_screen(int p_screen){ +void OS_Windows::set_current_screen(int p_screen) { - ERR_FAIL_INDEX(p_screen,monitor_info.size()); + ERR_FAIL_INDEX(p_screen, monitor_info.size()); Vector2 ofs = get_window_position() - get_screen_position(get_current_screen()); - set_window_position(ofs+get_screen_position(p_screen)); - + set_window_position(ofs + get_screen_position(p_screen)); } -Point2 OS_Windows::get_screen_position(int p_screen) const{ - - ERR_FAIL_INDEX_V(p_screen,monitor_info.size(),Point2()); - return Vector2( monitor_info[p_screen].rect.pos ); +Point2 OS_Windows::get_screen_position(int p_screen) const { + ERR_FAIL_INDEX_V(p_screen, monitor_info.size(), Point2()); + return Vector2(monitor_info[p_screen].rect.pos); } -Size2 OS_Windows::get_screen_size(int p_screen) const{ - - ERR_FAIL_INDEX_V(p_screen,monitor_info.size(),Point2()); - return Vector2( monitor_info[p_screen].rect.size ); +Size2 OS_Windows::get_screen_size(int p_screen) const { + ERR_FAIL_INDEX_V(p_screen, monitor_info.size(), Point2()); + return Vector2(monitor_info[p_screen].rect.size); } int OS_Windows::get_screen_dpi(int p_screen) const { - ERR_FAIL_INDEX_V(p_screen,monitor_info.size(),72); - UINT dpix,dpiy; + ERR_FAIL_INDEX_V(p_screen, monitor_info.size(), 72); + UINT dpix, dpiy; return monitor_info[p_screen].dpi; - } -Point2 OS_Windows::get_window_position() const{ +Point2 OS_Windows::get_window_position() const { RECT r; - GetWindowRect(hWnd,&r); - return Point2(r.left,r.top); + GetWindowRect(hWnd, &r); + return Point2(r.left, r.top); } -void OS_Windows::set_window_position(const Point2& p_position){ +void OS_Windows::set_window_position(const Point2 &p_position) { if (video_mode.fullscreen) return; RECT r; - GetWindowRect(hWnd,&r); - MoveWindow(hWnd,p_position.x,p_position.y,r.right-r.left,r.bottom-r.top,TRUE); - + GetWindowRect(hWnd, &r); + MoveWindow(hWnd, p_position.x, p_position.y, r.right - r.left, r.bottom - r.top, TRUE); } -Size2 OS_Windows::get_window_size() const{ +Size2 OS_Windows::get_window_size() const { RECT r; - GetClientRect(hWnd,&r); - return Vector2(r.right-r.left,r.bottom-r.top); - + GetClientRect(hWnd, &r); + return Vector2(r.right - r.left, r.bottom - r.top); } -void OS_Windows::set_window_size(const Size2 p_size){ +void OS_Windows::set_window_size(const Size2 p_size) { - video_mode.width=p_size.width; - video_mode.height=p_size.height; + video_mode.width = p_size.width; + video_mode.height = p_size.height; if (video_mode.fullscreen) { return; } - RECT crect; - GetClientRect(hWnd,&crect); + GetClientRect(hWnd, &crect); RECT rect; - GetWindowRect(hWnd,&rect); - int dx = (rect.right-rect.left)-(crect.right-crect.left); - int dy = (rect.bottom-rect.top)-(crect.bottom-crect.top); - - rect.right=rect.left+p_size.width+dx; - rect.bottom=rect.top+p_size.height+dy; + GetWindowRect(hWnd, &rect); + int dx = (rect.right - rect.left) - (crect.right - crect.left); + int dy = (rect.bottom - rect.top) - (crect.bottom - crect.top); + rect.right = rect.left + p_size.width + dx; + rect.bottom = rect.top + p_size.height + dy; //print_line("PRE: "+itos(rect.left)+","+itos(rect.top)+","+itos(rect.right-rect.left)+","+itos(rect.bottom-rect.top)); @@ -1518,73 +1437,65 @@ void OS_Windows::set_window_size(const Size2 p_size){ //print_line("POST: "+itos(rect.left)+","+itos(rect.top)+","+itos(rect.right-rect.left)+","+itos(rect.bottom-rect.top)); - MoveWindow(hWnd,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE); - + MoveWindow(hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); } -void OS_Windows::set_window_fullscreen(bool p_enabled){ +void OS_Windows::set_window_fullscreen(bool p_enabled) { - if (video_mode.fullscreen==p_enabled) + if (video_mode.fullscreen == p_enabled) return; - - if (p_enabled) { - if (pre_fs_valid) { - GetWindowRect(hWnd,&pre_fs_rect); + GetWindowRect(hWnd, &pre_fs_rect); //print_line("A: "+itos(pre_fs_rect.left)+","+itos(pre_fs_rect.top)+","+itos(pre_fs_rect.right-pre_fs_rect.left)+","+itos(pre_fs_rect.bottom-pre_fs_rect.top)); //MapWindowPoints(hWnd, GetParent(hWnd), (LPPOINT) &pre_fs_rect, 2); //print_line("B: "+itos(pre_fs_rect.left)+","+itos(pre_fs_rect.top)+","+itos(pre_fs_rect.right-pre_fs_rect.left)+","+itos(pre_fs_rect.bottom-pre_fs_rect.top)); } - int cs = get_current_screen(); Point2 pos = get_screen_position(cs); Size2 size = get_screen_size(cs); - /* r.left = pos.x; + /* r.left = pos.x; r.top = pos.y; r.bottom = pos.y+size.y; r.right = pos.x+size.x; */ SetWindowLongPtr(hWnd, GWL_STYLE, - WS_SYSMENU | WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE); + WS_SYSMENU | WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE); MoveWindow(hWnd, pos.x, pos.y, size.width, size.height, TRUE); - video_mode.fullscreen=true; - + video_mode.fullscreen = true; } else { RECT rect; if (pre_fs_valid) { - rect=pre_fs_rect; + rect = pre_fs_rect; } else { - rect.left=0; - rect.right=video_mode.width; - rect.top=0; - rect.bottom=video_mode.height; + rect.left = 0; + rect.right = video_mode.width; + rect.top = 0; + rect.bottom = video_mode.height; } - - if (video_mode.resizable) { SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE); //AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE); - MoveWindow(hWnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE); + MoveWindow(hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); } else { SetWindowLongPtr(hWnd, GWL_STYLE, WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE); //AdjustWindowRect(&rect, WS_CAPTION | WS_POPUPWINDOW, FALSE); - MoveWindow(hWnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE); + MoveWindow(hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); } - video_mode.fullscreen=false; - pre_fs_valid=true; -/* + video_mode.fullscreen = false; + pre_fs_valid = true; + /* DWORD dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; DWORD dwStyle=WS_OVERLAPPEDWINDOW; if (!video_mode.resizable) { @@ -1599,18 +1510,16 @@ void OS_Windows::set_window_fullscreen(bool p_enabled){ } //MoveWindow(hWnd,r.left,r.top,p_size.x,p_size.y,TRUE); - - } -bool OS_Windows::is_window_fullscreen() const{ +bool OS_Windows::is_window_fullscreen() const { return video_mode.fullscreen; } -void OS_Windows::set_window_resizable(bool p_enabled){ +void OS_Windows::set_window_resizable(bool p_enabled) { - if (video_mode.resizable==p_enabled) + if (video_mode.resizable == p_enabled) return; -/* + /* GetWindowRect(hWnd,&pre_fs_rect); DWORD dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; DWORD dwStyle=WS_OVERLAPPEDWINDOW; @@ -1626,56 +1535,52 @@ void OS_Windows::set_window_resizable(bool p_enabled){ SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE); } else { SetWindowLongPtr(hWnd, GWL_STYLE, WS_CAPTION | WS_MINIMIZEBOX | WS_POPUPWINDOW | WS_VISIBLE); - } RECT rect; - GetWindowRect(hWnd,&rect); - MoveWindow(hWnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE); + GetWindowRect(hWnd, &rect); + MoveWindow(hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); } - video_mode.resizable=p_enabled; - + video_mode.resizable = p_enabled; } -bool OS_Windows::is_window_resizable() const{ +bool OS_Windows::is_window_resizable() const { return video_mode.resizable; } -void OS_Windows::set_window_minimized(bool p_enabled){ +void OS_Windows::set_window_minimized(bool p_enabled) { if (p_enabled) { - maximized=false; - minimized=true; - ShowWindow(hWnd,SW_MINIMIZE); + maximized = false; + minimized = true; + ShowWindow(hWnd, SW_MINIMIZE); } else { - ShowWindow(hWnd,SW_RESTORE); - maximized=false; - minimized=false; + ShowWindow(hWnd, SW_RESTORE); + maximized = false; + minimized = false; } } -bool OS_Windows::is_window_minimized() const{ +bool OS_Windows::is_window_minimized() const { return minimized; - } -void OS_Windows::set_window_maximized(bool p_enabled){ +void OS_Windows::set_window_maximized(bool p_enabled) { if (p_enabled) { - maximized=true; - minimized=false; - ShowWindow(hWnd,SW_MAXIMIZE); + maximized = true; + minimized = false; + ShowWindow(hWnd, SW_MAXIMIZE); } else { - ShowWindow(hWnd,SW_RESTORE); - maximized=false; - minimized=false; + ShowWindow(hWnd, SW_RESTORE); + maximized = false; + minimized = false; } } -bool OS_Windows::is_window_maximized() const{ +bool OS_Windows::is_window_maximized() const { return maximized; } - void OS_Windows::set_borderless_window(int p_borderless) { video_mode.borderless_window = p_borderless; } @@ -1695,18 +1600,18 @@ void OS_Windows::request_attention() { FlashWindowEx(&info); } -void OS_Windows::print_error(const char* p_function, const char* p_file, int p_line, const char* p_code, const char* p_rationale, ErrorType p_type) { +void OS_Windows::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) { HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); if (!hCon || hCon == INVALID_HANDLE_VALUE) { - const char* err_details; + const char *err_details; if (p_rationale && p_rationale[0]) err_details = p_rationale; else err_details = p_code; - switch(p_type) { + switch (p_type) { case ERR_ERROR: print("ERROR: %s: %s\n", p_function, err_details); print(" At: %s:%i\n", p_file, p_line); @@ -1734,7 +1639,7 @@ void OS_Windows::print_error(const char* p_function, const char* p_file, int p_l WORD current_bg = sbi.wAttributes & (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY); uint32_t basecol = 0; - switch(p_type) { + switch (p_type) { case ERR_ERROR: basecol = FOREGROUND_RED; break; case ERR_WARNING: basecol = FOREGROUND_RED | FOREGROUND_GREEN; break; case ERR_SCRIPT: basecol = FOREGROUND_RED | FOREGROUND_BLUE; break; @@ -1746,7 +1651,7 @@ void OS_Windows::print_error(const char* p_function, const char* p_file, int p_l if (p_rationale && p_rationale[0]) { SetConsoleTextAttribute(hCon, basecol | FOREGROUND_INTENSITY); - switch(p_type) { + switch (p_type) { case ERR_ERROR: print("ERROR: "); break; case ERR_WARNING: print("WARNING: "); break; case ERR_SCRIPT: print("SCRIPT ERROR: "); break; @@ -1770,7 +1675,7 @@ void OS_Windows::print_error(const char* p_function, const char* p_file, int p_l } else { SetConsoleTextAttribute(hCon, basecol | FOREGROUND_INTENSITY); - switch(p_type) { + switch (p_type) { case ERR_ERROR: print("ERROR: %s: ", p_function); break; case ERR_WARNING: print("WARNING: %s: ", p_function); break; case ERR_SCRIPT: print("SCRIPT ERROR: %s: ", p_function); break; @@ -1796,7 +1701,6 @@ void OS_Windows::print_error(const char* p_function, const char* p_file, int p_l } } - String OS_Windows::get_name() { return "Windows"; @@ -1811,11 +1715,11 @@ OS::Date OS_Windows::get_date(bool utc) const { GetLocalTime(&systemtime); Date date; - date.day=systemtime.wDay; - date.month=Month(systemtime.wMonth); - date.weekday=Weekday(systemtime.wDayOfWeek); - date.year=systemtime.wYear; - date.dst=false; + date.day = systemtime.wDay; + date.month = Month(systemtime.wMonth); + date.weekday = Weekday(systemtime.wDayOfWeek); + date.year = systemtime.wYear; + date.dst = false; return date; } OS::Time OS_Windows::get_time(bool utc) const { @@ -1827,9 +1731,9 @@ OS::Time OS_Windows::get_time(bool utc) const { GetLocalTime(&systemtime); Time time; - time.hour=systemtime.wHour; - time.min=systemtime.wMinute; - time.sec=systemtime.wSecond; + time.hour = systemtime.wHour; + time.min = systemtime.wMinute; + time.sec = systemtime.wSecond; return time; } @@ -1869,80 +1773,74 @@ uint64_t OS_Windows::get_unix_time() const { FILETIME fep; SystemTimeToFileTime(&ep, &fep); - return (*(uint64_t*)&ft - *(uint64_t*)&fep) / 10000000; + return (*(uint64_t *)&ft - *(uint64_t *)&fep) / 10000000; }; uint64_t OS_Windows::get_system_time_secs() const { - const uint64_t WINDOWS_TICK = 10000000; const uint64_t SEC_TO_UNIX_EPOCH = 11644473600LL; SYSTEMTIME st; GetSystemTime(&st); FILETIME ft; - SystemTimeToFileTime(&st,&ft); + SystemTimeToFileTime(&st, &ft); uint64_t ret; - ret=ft.dwHighDateTime; - ret<<=32; - ret|=ft.dwLowDateTime; + ret = ft.dwHighDateTime; + ret <<= 32; + ret |= ft.dwLowDateTime; return (uint64_t)(ret / WINDOWS_TICK - SEC_TO_UNIX_EPOCH); } void OS_Windows::delay_usec(uint32_t p_usec) const { - if (p_usec < 1000) - Sleep(1); - else - Sleep(p_usec / 1000); - + if (p_usec < 1000) + Sleep(1); + else + Sleep(p_usec / 1000); } uint64_t OS_Windows::get_ticks_usec() const { - uint64_t ticks; - uint64_t time; - // This is the number of clock ticks since start - if( !QueryPerformanceCounter((LARGE_INTEGER *)&ticks) ) - ticks = (UINT64)timeGetTime(); - // Divide by frequency to get the time in seconds - time = ticks * 1000000L / ticks_per_second; - // Subtract the time at game start to get - // the time since the game started - time -= ticks_start; - return time; + uint64_t ticks; + uint64_t time; + // This is the number of clock ticks since start + if (!QueryPerformanceCounter((LARGE_INTEGER *)&ticks)) + ticks = (UINT64)timeGetTime(); + // Divide by frequency to get the time in seconds + time = ticks * 1000000L / ticks_per_second; + // Subtract the time at game start to get + // the time since the game started + time -= ticks_start; + return time; } - void OS_Windows::process_events() { MSG msg; last_id = joypad->process_joypads(last_id); - while(PeekMessageW(&msg,NULL,0,0,PM_REMOVE)) { - + while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessageW(&msg); - } process_key_events(); - } void OS_Windows::set_cursor_shape(CursorShape p_shape) { - ERR_FAIL_INDEX(p_shape,CURSOR_MAX); + ERR_FAIL_INDEX(p_shape, CURSOR_MAX); - if (cursor_shape==p_shape) + if (cursor_shape == p_shape) return; - static const LPCTSTR win_cursors[CURSOR_MAX]={ + static const LPCTSTR win_cursors[CURSOR_MAX] = { IDC_ARROW, IDC_IBEAM, - IDC_HAND,//finger + IDC_HAND, //finger IDC_CROSS, IDC_WAIT, IDC_APPSTARTING, @@ -1959,50 +1857,48 @@ void OS_Windows::set_cursor_shape(CursorShape p_shape) { IDC_HELP }; - SetCursor(LoadCursor(hInstance,win_cursors[p_shape])); - cursor_shape=p_shape; + SetCursor(LoadCursor(hInstance, win_cursors[p_shape])); + cursor_shape = p_shape; } -Error OS_Windows::execute(const String& p_path, const List<String>& p_arguments,bool p_blocking,ProcessID *r_child_id,String* r_pipe,int *r_exitcode) { +Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode) { if (p_blocking && r_pipe) { - String argss; - argss="\"\""+p_path+"\""; - - for (const List<String>::Element* E=p_arguments.front(); E; E=E->next()) { + argss = "\"\"" + p_path + "\""; + + for (const List<String>::Element *E = p_arguments.front(); E; E = E->next()) { - argss+=String(" \"")+E->get()+"\""; + argss += String(" \"") + E->get() + "\""; } //print_line("ARGS: "+argss); //argss+"\""; //argss+=" 2>nul"; - FILE* f=_wpopen(argss.c_str(),L"r"); + FILE *f = _wpopen(argss.c_str(), L"r"); - ERR_FAIL_COND_V(!f,ERR_CANT_OPEN); + ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); char buf[65535]; - while(fgets(buf,65535,f)) { + while (fgets(buf, 65535, f)) { - (*r_pipe)+=buf; + (*r_pipe) += buf; } int rv = _pclose(f); if (r_exitcode) - *r_exitcode=rv; + *r_exitcode = rv; return OK; } - String cmdline = "\""+p_path+"\""; - const List<String>::Element* I = p_arguments.front(); + String cmdline = "\"" + p_path + "\""; + const List<String>::Element *I = p_arguments.front(); while (I) { - - cmdline += " \""+I->get() + "\""; + cmdline += " \"" + I->get() + "\""; I = I->next(); }; @@ -2010,16 +1906,16 @@ Error OS_Windows::execute(const String& p_path, const List<String>& p_arguments, //cmdline+="\""; ProcessInfo pi; - ZeroMemory( &pi.si, sizeof(pi.si) ); + ZeroMemory(&pi.si, sizeof(pi.si)); pi.si.cb = sizeof(pi.si); - ZeroMemory( &pi.pi, sizeof(pi.pi) ); - LPSTARTUPINFOW si_w = (LPSTARTUPINFOW) &pi.si; + ZeroMemory(&pi.pi, sizeof(pi.pi)); + LPSTARTUPINFOW si_w = (LPSTARTUPINFOW)&pi.si; - print_line("running cmdline: "+cmdline); + print_line("running cmdline: " + cmdline); Vector<CharType> modstr; //windows wants to change this no idea why modstr.resize(cmdline.size()); - for(int i=0;i<cmdline.size();i++) - modstr[i]=cmdline[i]; + for (int i = 0; i < cmdline.size(); i++) + modstr[i] = cmdline[i]; int ret = CreateProcessW(NULL, modstr.ptr(), NULL, NULL, 0, NORMAL_PRIORITY_CLASS, NULL, NULL, si_w, &pi.pi); ERR_FAIL_COND_V(ret == 0, ERR_CANT_FORK); @@ -2027,7 +1923,7 @@ Error OS_Windows::execute(const String& p_path, const List<String>& p_arguments, DWORD ret = WaitForSingleObject(pi.pi.hProcess, INFINITE); if (r_exitcode) - *r_exitcode=ret; + *r_exitcode = ret; } else { @@ -2040,7 +1936,7 @@ Error OS_Windows::execute(const String& p_path, const List<String>& p_arguments, return OK; }; -Error OS_Windows::kill(const ProcessID& p_pid) { +Error OS_Windows::kill(const ProcessID &p_pid) { HANDLE h; @@ -2054,16 +1950,16 @@ Error OS_Windows::kill(const ProcessID& p_pid) { int ret = TerminateProcess(h, 0); - return ret != 0?OK:FAILED; + return ret != 0 ? OK : FAILED; }; int OS_Windows::get_process_ID() const { return _getpid(); } -Error OS_Windows::set_cwd(const String& p_cwd) { +Error OS_Windows::set_cwd(const String &p_cwd) { - if (_wchdir(p_cwd.c_str())!=0) + if (_wchdir(p_cwd.c_str()) != 0) return ERR_CANT_OPEN; return OK; @@ -2072,17 +1968,16 @@ Error OS_Windows::set_cwd(const String& p_cwd) { String OS_Windows::get_executable_path() const { wchar_t bufname[4096]; - GetModuleFileNameW(NULL,bufname,4096); - String s= bufname; - print_line("EXEC PATHP??: "+s); + GetModuleFileNameW(NULL, bufname, 4096); + String s = bufname; + print_line("EXEC PATHP??: " + s); return s; } -void OS_Windows::set_icon(const Image& p_icon) { +void OS_Windows::set_icon(const Image &p_icon) { - - Image icon=p_icon; - if (icon.get_format()!=Image::FORMAT_RGBA8) + Image icon = p_icon; + if (icon.get_format() != Image::FORMAT_RGBA8) icon.convert(Image::FORMAT_RGBA8); int w = icon.get_width(); int h = icon.get_height(); @@ -2093,55 +1988,53 @@ void OS_Windows::set_icon(const Image& p_icon) { v.resize(icon_len); BYTE *icon_bmp = &v[0]; - encode_uint32(40,&icon_bmp[0]); - encode_uint32(w,&icon_bmp[4]); - encode_uint32(h*2,&icon_bmp[8]); - encode_uint16(1,&icon_bmp[12]); - encode_uint16(32,&icon_bmp[14]); - encode_uint32(BI_RGB,&icon_bmp[16]); - encode_uint32(w*h*4,&icon_bmp[20]); - encode_uint32(0,&icon_bmp[24]); - encode_uint32(0,&icon_bmp[28]); - encode_uint32(0,&icon_bmp[32]); - encode_uint32(0,&icon_bmp[36]); - - uint8_t *wr=&icon_bmp[40]; - PoolVector<uint8_t>::Read r= icon.get_data().read(); - - for(int i=0;i<h;i++) { - - for(int j=0;j<w;j++) { - - const uint8_t *rpx = &r[((h-i-1)*w+j)*4]; - uint8_t *wpx = &wr[(i*w+j)*4]; - wpx[0]=rpx[2]; - wpx[1]=rpx[1]; - wpx[2]=rpx[0]; - wpx[3]=rpx[3]; + encode_uint32(40, &icon_bmp[0]); + encode_uint32(w, &icon_bmp[4]); + encode_uint32(h * 2, &icon_bmp[8]); + encode_uint16(1, &icon_bmp[12]); + encode_uint16(32, &icon_bmp[14]); + encode_uint32(BI_RGB, &icon_bmp[16]); + encode_uint32(w * h * 4, &icon_bmp[20]); + encode_uint32(0, &icon_bmp[24]); + encode_uint32(0, &icon_bmp[28]); + encode_uint32(0, &icon_bmp[32]); + encode_uint32(0, &icon_bmp[36]); + + uint8_t *wr = &icon_bmp[40]; + PoolVector<uint8_t>::Read r = icon.get_data().read(); + + for (int i = 0; i < h; i++) { + + for (int j = 0; j < w; j++) { + + const uint8_t *rpx = &r[((h - i - 1) * w + j) * 4]; + uint8_t *wpx = &wr[(i * w + j) * 4]; + wpx[0] = rpx[2]; + wpx[1] = rpx[1]; + wpx[2] = rpx[0]; + wpx[3] = rpx[3]; } } - HICON hicon = CreateIconFromResource(icon_bmp, icon_len, TRUE, 0x00030000); /* Set the icon for the window */ - SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hicon); + SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hicon); /* Set the icon in the task manager (should we do this?) */ - SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM) hicon); + SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hicon); } - -bool OS_Windows::has_environment(const String& p_var) const { +bool OS_Windows::has_environment(const String &p_var) const { return getenv(p_var.utf8().get_data()) != NULL; }; -String OS_Windows::get_environment(const String& p_var) const { +String OS_Windows::get_environment(const String &p_var) const { wchar_t wval[0x7Fff]; // MSDN says 32767 char is the maximum - int wlen = GetEnvironmentVariableW(p_var.c_str(),wval,0x7Fff); - if ( wlen > 0 ) { + int wlen = GetEnvironmentVariableW(p_var.c_str(), wval, 0x7Fff); + if (wlen > 0) { return wval; } return ""; @@ -2151,23 +2044,20 @@ String OS_Windows::get_stdin_string(bool p_block) { if (p_block) { char buff[1024]; - return fgets(buff,1024,stdin); + return fgets(buff, 1024, stdin); }; return String(); } - void OS_Windows::enable_for_stealing_focus(ProcessID pid) { AllowSetForegroundWindow(pid); - } void OS_Windows::move_window_to_foreground() { SetForegroundWindow(hWnd); - } Error OS_Windows::shell_open(String p_uri) { @@ -2176,38 +2066,35 @@ Error OS_Windows::shell_open(String p_uri) { return OK; } - String OS_Windows::get_locale() const { const _WinLocale *wl = &_win_locales[0]; LANGID langid = GetUserDefaultUILanguage(); String neutral; - int lang = langid&((1<<9)-1); - int sublang = langid&~((1<<9)-1); + int lang = langid & ((1 << 9) - 1); + int sublang = langid & ~((1 << 9) - 1); - while(wl->locale) { + while (wl->locale) { - if (wl->main_lang==lang && wl->sublang==SUBLANG_NEUTRAL) - neutral=wl->locale; + if (wl->main_lang == lang && wl->sublang == SUBLANG_NEUTRAL) + neutral = wl->locale; - if (lang==wl->main_lang && sublang==wl->sublang) + if (lang == wl->main_lang && sublang == wl->sublang) return wl->locale; - wl++; } - if (neutral!="") + if (neutral != "") return neutral; return "en"; } - OS::LatinKeyboardVariant OS_Windows::get_latin_keyboard_variant() const { - - unsigned long azerty[] = { + + unsigned long azerty[] = { 0x00020401, // Arabic (102) AZERTY 0x0001080c, // Belgian (Comma) 0x0000080c, // Belgian French @@ -2240,27 +2127,28 @@ OS::LatinKeyboardVariant OS_Windows::get_latin_keyboard_variant() const { 0 // <--- STOP MARK }; - char name[ KL_NAMELENGTH + 1 ]; name[0] = 0; - GetKeyboardLayoutNameA( name ); + char name[KL_NAMELENGTH + 1]; + name[0] = 0; + GetKeyboardLayoutNameA(name); unsigned long hex = strtoul(name, NULL, 16); - int i=0; - while( azerty[i] != 0 ) { + int i = 0; + while (azerty[i] != 0) { if (azerty[i] == hex) return LATIN_KEYBOARD_AZERTY; i++; } i = 0; - while( qwertz[i] != 0 ) { + while (qwertz[i] != 0) { if (qwertz[i] == hex) return LATIN_KEYBOARD_QWERTZ; i++; } - + i = 0; - while( dvorak[i] != 0 ) { + while (dvorak[i] != 0) { if (dvorak[i] == hex) return LATIN_KEYBOARD_DVORAK; - i++; + i++; } return LATIN_KEYBOARD_QWERTY; @@ -2269,7 +2157,6 @@ OS::LatinKeyboardVariant OS_Windows::get_latin_keyboard_variant() const { void OS_Windows::release_rendering_thread() { gl_context->release_current(); - } void OS_Windows::make_rendering_thread() { @@ -2282,7 +2169,6 @@ void OS_Windows::swap_buffers() { gl_context->swap_buffers(); } - void OS_Windows::run() { if (!main_loop) @@ -2290,24 +2176,21 @@ void OS_Windows::run() { main_loop->init(); - uint64_t last_ticks=get_ticks_usec(); + uint64_t last_ticks = get_ticks_usec(); - int frames=0; - uint64_t frame=0; + int frames = 0; + uint64_t frame = 0; while (!force_quit) { process_events(); // get rid of pending events - if (Main::iteration()==true) + if (Main::iteration() == true) break; }; main_loop->finish(); - } - - MainLoop *OS_Windows::get_main_loop() const { return main_loop; @@ -2315,62 +2198,56 @@ MainLoop *OS_Windows::get_main_loop() const { String OS_Windows::get_system_dir(SystemDir p_dir) const { - int id; - - - switch(p_dir) { + switch (p_dir) { case SYSTEM_DIR_DESKTOP: { - id=CSIDL_DESKTOPDIRECTORY; + id = CSIDL_DESKTOPDIRECTORY; } break; case SYSTEM_DIR_DCIM: { - id=CSIDL_MYPICTURES; + id = CSIDL_MYPICTURES; } break; case SYSTEM_DIR_DOCUMENTS: { - id=CSIDL_PERSONAL; + id = CSIDL_PERSONAL; } break; case SYSTEM_DIR_DOWNLOADS: { - id=0x000C ; + id = 0x000C; } break; case SYSTEM_DIR_MOVIES: { - id=CSIDL_MYVIDEO; + id = CSIDL_MYVIDEO; } break; case SYSTEM_DIR_MUSIC: { - id=CSIDL_MYMUSIC; + id = CSIDL_MYMUSIC; } break; case SYSTEM_DIR_PICTURES: { - id=CSIDL_MYPICTURES; + id = CSIDL_MYPICTURES; } break; case SYSTEM_DIR_RINGTONES: { - id=CSIDL_MYMUSIC; + id = CSIDL_MYMUSIC; } break; } WCHAR szPath[MAX_PATH]; - HRESULT res = SHGetFolderPathW(NULL,id,NULL,0,szPath); - ERR_FAIL_COND_V(res!=S_OK,String()); + HRESULT res = SHGetFolderPathW(NULL, id, NULL, 0, szPath); + ERR_FAIL_COND_V(res != S_OK, String()); return String(szPath); - } String OS_Windows::get_data_dir() const { String an = get_safe_application_name(); - if (an!="") { + if (an != "") { if (has_environment("APPDATA")) { bool use_godot = GlobalConfig::get_singleton()->get("application/use_shared_user_dir"); if (!use_godot) - return (OS::get_singleton()->get_environment("APPDATA")+"/"+an).replace("\\","/"); + return (OS::get_singleton()->get_environment("APPDATA") + "/" + an).replace("\\", "/"); else - return (OS::get_singleton()->get_environment("APPDATA")+"/Godot/app_userdata/"+an).replace("\\","/"); + return (OS::get_singleton()->get_environment("APPDATA") + "/Godot/app_userdata/" + an).replace("\\", "/"); } } return GlobalConfig::get_singleton()->get_resource_path(); - - } bool OS_Windows::is_joy_known(int p_device) { @@ -2387,7 +2264,7 @@ void OS_Windows::set_use_vsync(bool p_enable) { gl_context->set_use_vsync(p_enable); } -bool OS_Windows::is_vsync_enabled() const{ +bool OS_Windows::is_vsync_enabled() const { if (gl_context) return gl_context->is_using_vsync(); @@ -2407,30 +2284,29 @@ int OS_Windows::get_power_percent_left() { return power_manager->get_power_percent_left(); } -bool OS_Windows::check_feature_support(const String& p_feature) { +bool OS_Windows::check_feature_support(const String &p_feature) { return VisualServer::get_singleton()->has_os_feature(p_feature); - } OS_Windows::OS_Windows(HINSTANCE _hInstance) { - key_event_pos=0; - force_quit=false; - alt_mem=false; - gr_mem=false; - shift_mem=false; - control_mem=false; - meta_mem=false; + key_event_pos = 0; + force_quit = false; + alt_mem = false; + gr_mem = false; + shift_mem = false; + control_mem = false; + meta_mem = false; minimized = false; - hInstance=_hInstance; - pressrc=0; - old_invalid=true; - last_id=0; - mouse_mode=MOUSE_MODE_VISIBLE; + hInstance = _hInstance; + pressrc = 0; + old_invalid = true; + last_id = 0; + mouse_mode = MOUSE_MODE_VISIBLE; #ifdef STDOUT_FILE - stdo=fopen("stdout.txt","wb"); + stdo = fopen("stdout.txt", "wb"); #endif user_proc = NULL; @@ -2440,15 +2316,10 @@ OS_Windows::OS_Windows(HINSTANCE _hInstance) { #ifdef XAUDIO2_ENABLED AudioDriverManager::add_driver(&driver_xaudio2); #endif - } - -OS_Windows::~OS_Windows() -{ +OS_Windows::~OS_Windows() { #ifdef STDOUT_FILE fclose(stdo); #endif } - - diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index c8cacac7a2..e7376d6800 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -29,30 +29,29 @@ #ifndef OS_WINDOWS_H #define OS_WINDOWS_H +#include "context_gl_win.h" +#include "drivers/rtaudio/audio_driver_rtaudio.h" #include "os/input.h" #include "os/os.h" #include "power_windows.h" -#include "context_gl_win.h" -#include "servers/visual_server.h" -#include "servers/visual/rasterizer.h" -#include "servers/physics/physics_server_sw.h" #include "servers/audio_server.h" -#include "drivers/rtaudio/audio_driver_rtaudio.h" +#include "servers/physics/physics_server_sw.h" +#include "servers/visual/rasterizer.h" +#include "servers/visual_server.h" #ifdef XAUDIO2_ENABLED #include "drivers/xaudio2/audio_driver_xaudio2.h" #endif #include "drivers/unix/ip_unix.h" +#include "key_mapping_win.h" +#include "main/input_default.h" #include "servers/physics_2d/physics_2d_server_sw.h" #include "servers/physics_2d/physics_2d_server_wrap_mt.h" -#include "main/input_default.h" -#include "key_mapping_win.h" - -#include <windows.h> -#include <windowsx.h> -#include <io.h> #include <fcntl.h> +#include <io.h> #include <stdio.h> +#include <windows.h> +#include <windowsx.h> /** @author Juan Linietsky <reduzio@gmail.com> @@ -60,33 +59,29 @@ class JoypadWindows; class OS_Windows : public OS { - enum { - KEY_EVENT_BUFFER_SIZE=512 + enum { + KEY_EVENT_BUFFER_SIZE = 512 }; FILE *stdo; - struct KeyEvent { InputModifierState mod_state; UINT uMsg; - WPARAM wParam; - LPARAM lParam; - + WPARAM wParam; + LPARAM lParam; }; KeyEvent key_event_buffer[KEY_EVENT_BUFFER_SIZE]; int key_event_pos; - uint64_t ticks_start; uint64_t ticks_per_second; - - bool old_invalid; - bool outside; - int old_x,old_y; + bool old_invalid; + bool outside; + int old_x, old_y; Point2i center; unsigned int last_id; #if defined(OPENGL_ENABLED) @@ -96,8 +91,8 @@ class OS_Windows : public OS { PhysicsServer *physics_server; Physics2DServer *physics_2d_server; int pressrc; - HDC hDC; // Private GDI Device Context - HINSTANCE hInstance; // Holds The Instance Of The Application + HDC hDC; // Private GDI Device Context + HINSTANCE hInstance; // Holds The Instance Of The Application HWND hWnd; uint32_t move_timer_id; @@ -141,17 +136,17 @@ class OS_Windows : public OS { // functions used by main to initialize/deintialize the OS protected: 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(); @@ -165,15 +160,13 @@ protected: STARTUPINFO si; PROCESS_INFORMATION pi; }; - Map<ProcessID, ProcessInfo>* process_map; + Map<ProcessID, ProcessInfo> *process_map; struct MonitorInfo { HMONITOR hMonitor; HDC hdcMonitor; Rect2 rect; int dpi; - - }; bool pre_fs_valid; @@ -183,40 +176,38 @@ protected: bool minimized; bool borderless; - static BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData); - + static BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData); public: - LRESULT WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam); + LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + void print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type); - void print_error(const char* p_function,const char* p_file,int p_line,const char *p_code,const char*p_rationale,ErrorType p_type); - - virtual void vprint(const char *p_format, va_list p_list, bool p_stderr=false); - virtual void alert(const String& p_alert,const String& p_title="ALERT!"); + virtual void vprint(const char *p_format, va_list p_list, bool p_stderr = false); + virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); String get_stdin_string(bool p_block); void set_mouse_mode(MouseMode p_mode); MouseMode get_mouse_mode() const; - virtual void warp_mouse_pos(const Point2& p_to); + virtual void warp_mouse_pos(const Point2 &p_to); 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_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 int get_screen_count() const; virtual int get_current_screen() const; virtual void set_current_screen(int p_screen); - virtual Point2 get_screen_position(int p_screen=0) const; - virtual Size2 get_screen_size(int p_screen=0) const; - virtual int get_screen_dpi(int p_screen=0) const; + virtual Point2 get_screen_position(int p_screen = 0) const; + virtual Size2 get_screen_size(int p_screen = 0) const; + virtual int get_screen_dpi(int p_screen = 0) const; virtual Point2 get_window_position() const; - virtual void set_window_position(const Point2& p_position); + virtual void set_window_position(const Point2 &p_position); virtual Size2 get_window_size() const; virtual void set_window_size(const Size2 p_size); virtual void set_window_fullscreen(bool p_enabled); @@ -243,35 +234,34 @@ public: virtual uint64_t get_system_time_secs() const; virtual bool can_draw() const; - virtual Error set_cwd(const String& p_cwd); + virtual Error set_cwd(const String &p_cwd); virtual void delay_usec(uint32_t p_usec) const; virtual uint64_t get_ticks_usec() const; - virtual Error execute(const String& p_path, const List<String>& p_arguments,bool p_blocking,ProcessID *r_child_id=NULL,String* r_pipe=NULL,int *r_exitcode=NULL); - virtual Error kill(const ProcessID& p_pid); + virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL); + virtual Error kill(const ProcessID &p_pid); virtual int get_process_ID() const; - virtual bool has_environment(const String& p_var) const; - virtual String get_environment(const String& p_var) const; + virtual bool has_environment(const String &p_var) const; + virtual String get_environment(const String &p_var) const; - virtual void set_clipboard(const String& p_text); + virtual void set_clipboard(const String &p_text); virtual String get_clipboard() const; void set_cursor_shape(CursorShape p_shape); - void set_icon(const Image& p_icon); + void set_icon(const Image &p_icon); virtual String get_executable_path() const; virtual String get_locale() const; - virtual LatinKeyboardVariant get_latin_keyboard_variant() const; + virtual LatinKeyboardVariant get_latin_keyboard_variant() const; virtual void enable_for_stealing_focus(ProcessID pid); virtual void move_window_to_foreground(); virtual String get_data_dir() const; virtual String get_system_dir(SystemDir p_dir) const; - virtual void release_rendering_thread(); virtual void make_rendering_thread(); virtual void swap_buffers(); @@ -292,11 +282,10 @@ public: virtual int get_power_seconds_left(); virtual int get_power_percent_left(); - virtual bool check_feature_support(const String& p_feature); + virtual bool check_feature_support(const String &p_feature); OS_Windows(HINSTANCE _hInstance); ~OS_Windows(); - }; #endif diff --git a/platform/windows/packet_peer_udp_winsock.cpp b/platform/windows/packet_peer_udp_winsock.cpp index 276b9b6634..2df8addece 100644 --- a/platform/windows/packet_peer_udp_winsock.cpp +++ b/platform/windows/packet_peer_udp_winsock.cpp @@ -35,19 +35,19 @@ int PacketPeerUDPWinsock::get_available_packet_count() const { - Error err = const_cast<PacketPeerUDPWinsock*>(this)->_poll(false); - if (err!=OK) + Error err = const_cast<PacketPeerUDPWinsock *>(this)->_poll(false); + if (err != OK) return 0; return queue_count; } -Error PacketPeerUDPWinsock::get_packet(const uint8_t **r_buffer,int &r_buffer_size) const{ +Error PacketPeerUDPWinsock::get_packet(const uint8_t **r_buffer, int &r_buffer_size) const { - Error err = const_cast<PacketPeerUDPWinsock*>(this)->_poll(false); - if (err!=OK) + Error err = const_cast<PacketPeerUDPWinsock *>(this)->_poll(false); + if (err != OK) return err; - if (queue_count==0) + if (queue_count == 0) return ERR_UNAVAILABLE; uint32_t size; @@ -55,31 +55,30 @@ Error PacketPeerUDPWinsock::get_packet(const uint8_t **r_buffer,int &r_buffer_si rb.read(&type, 1, true); if (type == IP::TYPE_IPV4) { uint8_t ip[4]; - rb.read(ip,4,true); + rb.read(ip, 4, true); packet_ip.set_ipv4(ip); } else { uint8_t ip[16]; - rb.read(ip,16,true); + rb.read(ip, 16, true); packet_ip.set_ipv6(ip); }; - rb.read((uint8_t*)&packet_port,4,true); - rb.read((uint8_t*)&size,4,true); - rb.read(packet_buffer,size,true); + rb.read((uint8_t *)&packet_port, 4, true); + rb.read((uint8_t *)&size, 4, true); + rb.read(packet_buffer, size, true); --queue_count; - *r_buffer=packet_buffer; - r_buffer_size=size; + *r_buffer = packet_buffer; + r_buffer_size = size; return OK; - } -Error PacketPeerUDPWinsock::put_packet(const uint8_t *p_buffer,int p_buffer_size){ +Error PacketPeerUDPWinsock::put_packet(const uint8_t *p_buffer, int p_buffer_size) { ERR_FAIL_COND_V(!peer_addr.is_valid(), ERR_UNCONFIGURED); - if(sock_type==IP::TYPE_NONE) + if (sock_type == IP::TYPE_NONE) sock_type = peer_addr.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6; int sock = _get_socket(); - ERR_FAIL_COND_V( sock == -1, FAILED ); + ERR_FAIL_COND_V(sock == -1, FAILED); struct sockaddr_storage addr; size_t addr_size = _set_sockaddr(&addr, peer_addr, peer_port, sock_type); @@ -87,7 +86,7 @@ Error PacketPeerUDPWinsock::put_packet(const uint8_t *p_buffer,int p_buffer_size errno = 0; int err; - while ( (err = sendto(sock, (const char*)p_buffer, p_buffer_size, 0, (struct sockaddr*)&addr, addr_size)) != p_buffer_size) { + while ((err = sendto(sock, (const char *)p_buffer, p_buffer_size, 0, (struct sockaddr *)&addr, addr_size)) != p_buffer_size) { if (WSAGetLastError() != WSAEWOULDBLOCK) { return FAILED; @@ -97,21 +96,20 @@ Error PacketPeerUDPWinsock::put_packet(const uint8_t *p_buffer,int p_buffer_size return OK; } -int PacketPeerUDPWinsock::get_max_packet_size() const{ +int PacketPeerUDPWinsock::get_max_packet_size() const { return 512; // uhm maybe not } - void PacketPeerUDPWinsock::_set_blocking(bool p_blocking) { //am no windows expert //hope this is the right thing - if (blocking==p_blocking) + if (blocking == p_blocking) return; - blocking=p_blocking; - unsigned long par = blocking?0:1; + blocking = p_blocking; + unsigned long par = blocking ? 0 : 1; if (ioctlsocket(sockfd, FIONBIO, &par)) { perror("setting non-block mode"); //close(); @@ -121,69 +119,67 @@ void PacketPeerUDPWinsock::_set_blocking(bool p_blocking) { Error PacketPeerUDPWinsock::listen(int p_port, IP_Address p_bind_address, int p_recv_buffer_size) { - ERR_FAIL_COND_V(sockfd!=-1,ERR_ALREADY_IN_USE); - ERR_FAIL_COND_V(!p_bind_address.is_valid() && !p_bind_address.is_wildcard(),ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V(sockfd != -1, ERR_ALREADY_IN_USE); + ERR_FAIL_COND_V(!p_bind_address.is_valid() && !p_bind_address.is_wildcard(), ERR_INVALID_PARAMETER); sock_type = IP::TYPE_ANY; - if(p_bind_address.is_valid()) + if (p_bind_address.is_valid()) sock_type = p_bind_address.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6; int sock = _get_socket(); - if (sock == -1 ) + if (sock == -1) return ERR_CANT_CREATE; - struct sockaddr_storage addr = {0}; + struct sockaddr_storage addr = { 0 }; size_t addr_size = _set_listen_sockaddr(&addr, p_port, sock_type, IP_Address()); - if (bind(sock, (struct sockaddr*)&addr, addr_size) == -1 ) { + if (bind(sock, (struct sockaddr *)&addr, addr_size) == -1) { close(); return ERR_UNAVAILABLE; } - blocking=true; + blocking = true; printf("UDP Connection listening on port %i\n", p_port); rb.resize(nearest_shift(p_recv_buffer_size)); return OK; } -void PacketPeerUDPWinsock::close(){ +void PacketPeerUDPWinsock::close() { if (sockfd != -1) ::closesocket(sockfd); - sockfd=-1; + sockfd = -1; sock_type = IP::TYPE_NONE; rb.resize(16); - queue_count=0; + queue_count = 0; } - Error PacketPeerUDPWinsock::wait() { return _poll(true); } Error PacketPeerUDPWinsock::_poll(bool p_wait) { - if (sockfd==-1) { + if (sockfd == -1) { return FAILED; } _set_blocking(p_wait); - - struct sockaddr_storage from = {0}; + struct sockaddr_storage from = { 0 }; int len = sizeof(struct sockaddr_storage); int ret; - while ( (ret = recvfrom(sockfd, (char*)recv_buffer, MIN((int)sizeof(recv_buffer),MAX(rb.space_left()-24, 0)), 0, (struct sockaddr*)&from, &len)) > 0) { + while ((ret = recvfrom(sockfd, (char *)recv_buffer, MIN((int)sizeof(recv_buffer), MAX(rb.space_left() - 24, 0)), 0, (struct sockaddr *)&from, &len)) > 0) { uint32_t port = 0; if (from.ss_family == AF_INET) { uint8_t type = (uint8_t)IP::TYPE_IPV4; rb.write(&type, 1); - struct sockaddr_in* sin_from = (struct sockaddr_in*)&from; - rb.write((uint8_t*)&sin_from->sin_addr, 4); + struct sockaddr_in *sin_from = (struct sockaddr_in *)&from; + rb.write((uint8_t *)&sin_from->sin_addr, 4); port = ntohs(sin_from->sin_port); } else if (from.ss_family == AF_INET6) { @@ -191,8 +187,8 @@ Error PacketPeerUDPWinsock::_poll(bool p_wait) { uint8_t type = (uint8_t)IP::TYPE_IPV6; rb.write(&type, 1); - struct sockaddr_in6* s6_from = (struct sockaddr_in6*)&from; - rb.write((uint8_t*)&s6_from->sin6_addr, 16); + struct sockaddr_in6 *s6_from = (struct sockaddr_in6 *)&from; + rb.write((uint8_t *)&s6_from->sin6_addr, 16); port = ntohs(s6_from->sin6_port); @@ -202,44 +198,39 @@ Error PacketPeerUDPWinsock::_poll(bool p_wait) { rb.write(&type, 1); }; - rb.write((uint8_t*)&port, 4); - rb.write((uint8_t*)&ret, 4); + rb.write((uint8_t *)&port, 4); + rb.write((uint8_t *)&ret, 4); rb.write(recv_buffer, ret); len = sizeof(struct sockaddr_storage); ++queue_count; }; - if (ret == SOCKET_ERROR){ + if (ret == SOCKET_ERROR) { int error = WSAGetLastError(); - if (error == WSAEWOULDBLOCK){ + if (error == WSAEWOULDBLOCK) { // Expected when doing non-blocking sockets, retry later. - } - else if (error == WSAECONNRESET){ + } else if (error == WSAECONNRESET) { // If the remote target does not accept messages, this error may occur, but is harmless. // Once the remote target gets available, this message will disappear for new messages. - } - else - { + } else { close(); return FAILED; } } - if (ret == 0) { close(); return FAILED; }; - return OK; } -bool PacketPeerUDPWinsock::is_listening() const{ +bool PacketPeerUDPWinsock::is_listening() const { - return sockfd!=-1; + return sockfd != -1; } IP_Address PacketPeerUDPWinsock::get_packet_address() const { @@ -247,14 +238,14 @@ IP_Address PacketPeerUDPWinsock::get_packet_address() const { return packet_ip; } -int PacketPeerUDPWinsock::get_packet_port() const{ +int PacketPeerUDPWinsock::get_packet_port() const { return packet_port; } int PacketPeerUDPWinsock::_get_socket() { - ERR_FAIL_COND_V(sock_type==IP::TYPE_NONE,-1); + ERR_FAIL_COND_V(sock_type == IP::TYPE_NONE, -1); if (sockfd != -1) return sockfd; @@ -264,11 +255,10 @@ int PacketPeerUDPWinsock::_get_socket() { return sockfd; } +void PacketPeerUDPWinsock::set_dest_address(const IP_Address &p_address, int p_port) { -void PacketPeerUDPWinsock::set_dest_address(const IP_Address& p_address,int p_port) { - - peer_addr=p_address; - peer_port=p_port; + peer_addr = p_address; + peer_port = p_port; } void PacketPeerUDPWinsock::make_default() { @@ -276,19 +266,17 @@ void PacketPeerUDPWinsock::make_default() { PacketPeerUDP::_create = PacketPeerUDPWinsock::_create; }; - -PacketPeerUDP* PacketPeerUDPWinsock::_create() { +PacketPeerUDP *PacketPeerUDPWinsock::_create() { return memnew(PacketPeerUDPWinsock); }; - PacketPeerUDPWinsock::PacketPeerUDPWinsock() { - sockfd=-1; - packet_port=0; - queue_count=0; - peer_port=0; + sockfd = -1; + packet_port = 0; + queue_count = 0; + peer_port = 0; sock_type = IP::TYPE_NONE; rb.resize(16); } diff --git a/platform/windows/packet_peer_udp_winsock.h b/platform/windows/packet_peer_udp_winsock.h index dcd9da9a79..62107364af 100644 --- a/platform/windows/packet_peer_udp_winsock.h +++ b/platform/windows/packet_peer_udp_winsock.h @@ -34,9 +34,8 @@ class PacketPeerUDPWinsock : public PacketPeerUDP { - enum { - PACKET_BUFFER_SIZE=65536 + PACKET_BUFFER_SIZE = 65536 }; mutable RingBuffer<uint8_t> rb; @@ -53,7 +52,7 @@ class PacketPeerUDPWinsock : public PacketPeerUDP { _FORCE_INLINE_ int _get_socket(); - static PacketPeerUDP* _create(); + static PacketPeerUDP *_create(); bool blocking; void _set_blocking(bool p_blocking); @@ -61,14 +60,13 @@ class PacketPeerUDPWinsock : public PacketPeerUDP { Error _poll(bool p_wait); public: - virtual int get_available_packet_count() const; - virtual Error get_packet(const uint8_t **r_buffer,int &r_buffer_size) const; - virtual Error put_packet(const uint8_t *p_buffer,int p_buffer_size); + virtual Error get_packet(const uint8_t **r_buffer, int &r_buffer_size) const; + virtual Error put_packet(const uint8_t *p_buffer, int p_buffer_size); virtual int get_max_packet_size() const; - virtual Error listen(int p_port, IP_Address p_bind_address=IP_Address("*"), int p_recv_buffer_size=65536); + virtual Error listen(int p_port, IP_Address p_bind_address = IP_Address("*"), int p_recv_buffer_size = 65536); virtual void close(); virtual Error wait(); virtual bool is_listening() const; @@ -76,7 +74,7 @@ public: virtual IP_Address get_packet_address() const; virtual int get_packet_port() const; - virtual void set_dest_address(const IP_Address& p_address,int p_port); + virtual void set_dest_address(const IP_Address &p_address, int p_port); static void make_default(); PacketPeerUDPWinsock(); diff --git a/platform/windows/power_windows.cpp b/platform/windows/power_windows.cpp index 899b620a24..d4641cd4ec 100644 --- a/platform/windows/power_windows.cpp +++ b/platform/windows/power_windows.cpp @@ -31,53 +31,50 @@ // CODE CHUNK IMPORTED FROM SDL 2.0 -bool PowerWindows::GetPowerInfo_Windows() -{ - SYSTEM_POWER_STATUS status; - bool need_details = FALSE; +bool PowerWindows::GetPowerInfo_Windows() { + SYSTEM_POWER_STATUS status; + bool need_details = FALSE; - /* This API should exist back to Win95. */ - if (!GetSystemPowerStatus(&status)) - { - /* !!! FIXME: push GetLastError() into GetError() */ - power_state = POWERSTATE_UNKNOWN; - } else if (status.BatteryFlag == 0xFF) { /* unknown state */ - power_state = POWERSTATE_UNKNOWN; - } else if (status.BatteryFlag & (1 << 7)) { /* no battery */ - power_state = POWERSTATE_NO_BATTERY; - } else if (status.BatteryFlag & (1 << 3)) { /* charging */ - power_state = POWERSTATE_CHARGING; - need_details = TRUE; - } else if (status.ACLineStatus == 1) { - power_state = POWERSTATE_CHARGED; /* on AC, not charging. */ - need_details = TRUE; - } else { - power_state = POWERSTATE_ON_BATTERY; /* not on AC. */ - need_details = TRUE; - } + /* This API should exist back to Win95. */ + if (!GetSystemPowerStatus(&status)) { + /* !!! FIXME: push GetLastError() into GetError() */ + power_state = POWERSTATE_UNKNOWN; + } else if (status.BatteryFlag == 0xFF) { /* unknown state */ + power_state = POWERSTATE_UNKNOWN; + } else if (status.BatteryFlag & (1 << 7)) { /* no battery */ + power_state = POWERSTATE_NO_BATTERY; + } else if (status.BatteryFlag & (1 << 3)) { /* charging */ + power_state = POWERSTATE_CHARGING; + need_details = TRUE; + } else if (status.ACLineStatus == 1) { + power_state = POWERSTATE_CHARGED; /* on AC, not charging. */ + need_details = TRUE; + } else { + power_state = POWERSTATE_ON_BATTERY; /* not on AC. */ + need_details = TRUE; + } - percent_left = -1; - nsecs_left = -1; - if (need_details) { - const int pct = (int) status.BatteryLifePercent; - const int secs = (int) status.BatteryLifeTime; + percent_left = -1; + nsecs_left = -1; + if (need_details) { + const int pct = (int)status.BatteryLifePercent; + const int secs = (int)status.BatteryLifeTime; - if (pct != 255) { /* 255 == unknown */ - percent_left = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */ - } - if (secs != 0xFFFFFFFF) { /* ((DWORD)-1) == unknown */ - nsecs_left = secs; - } - } + if (pct != 255) { /* 255 == unknown */ + percent_left = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */ + } + if (secs != 0xFFFFFFFF) { /* ((DWORD)-1) == unknown */ + nsecs_left = secs; + } + } - return TRUE; /* always the definitive answer on Windows. */ + return TRUE; /* always the definitive answer on Windows. */ } PowerState PowerWindows::get_power_state() { if (GetPowerInfo_Windows()) { return power_state; - } - else { + } else { return POWERSTATE_UNKNOWN; } } @@ -85,8 +82,7 @@ PowerState PowerWindows::get_power_state() { int PowerWindows::get_power_seconds_left() { if (GetPowerInfo_Windows()) { return nsecs_left; - } - else { + } else { return -1; } } @@ -94,14 +90,13 @@ int PowerWindows::get_power_seconds_left() { int PowerWindows::get_power_percent_left() { if (GetPowerInfo_Windows()) { return percent_left; - } - else { + } else { return -1; } } -PowerWindows::PowerWindows() : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { - +PowerWindows::PowerWindows() + : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { } PowerWindows::~PowerWindows() { diff --git a/platform/windows/stream_peer_winsock.cpp b/platform/windows/stream_peer_winsock.cpp index 106eb6a5f5..abf182c72a 100644 --- a/platform/windows/stream_peer_winsock.cpp +++ b/platform/windows/stream_peer_winsock.cpp @@ -37,7 +37,7 @@ int winsock_refcount = 0; -StreamPeerTCP* StreamPeerWinsock::_create() { +StreamPeerTCP *StreamPeerWinsock::_create() { return memnew(StreamPeerWinsock); }; @@ -48,7 +48,7 @@ void StreamPeerWinsock::make_default() { if (winsock_refcount == 0) { WSADATA data; - WSAStartup(MAKEWORD(2,2), &data); + WSAStartup(MAKEWORD(2, 2), &data); }; ++winsock_refcount; }; @@ -62,7 +62,6 @@ void StreamPeerWinsock::cleanup() { }; }; - Error StreamPeerWinsock::_block(int p_sockfd, bool p_read, bool p_write) const { fd_set read, write; @@ -85,7 +84,7 @@ Error StreamPeerWinsock::_poll_connection() const { struct sockaddr_storage their_addr; size_t addr_size = _set_sockaddr(&their_addr, peer_host, peer_port, sock_type); - if (::connect(sockfd, (struct sockaddr *)&their_addr,addr_size) == SOCKET_ERROR) { + if (::connect(sockfd, (struct sockaddr *)&their_addr, addr_size) == SOCKET_ERROR) { int err = WSAGetLastError(); if (err == WSAEISCONN) { @@ -108,7 +107,7 @@ Error StreamPeerWinsock::_poll_connection() const { return OK; }; -Error StreamPeerWinsock::write(const uint8_t* p_data,int p_bytes, int &r_sent, bool p_block) { +Error StreamPeerWinsock::write(const uint8_t *p_data, int p_bytes, int &r_sent, bool p_block) { if (status == STATUS_NONE || status == STATUS_ERROR) { @@ -135,7 +134,7 @@ Error StreamPeerWinsock::write(const uint8_t* p_data,int p_bytes, int &r_sent, b while (data_to_send) { - int sent_amount = send(sockfd, (const char*)offset, data_to_send, 0); + int sent_amount = send(sockfd, (const char *)offset, data_to_send, 0); if (sent_amount == -1) { @@ -166,7 +165,7 @@ Error StreamPeerWinsock::write(const uint8_t* p_data,int p_bytes, int &r_sent, b return OK; }; -Error StreamPeerWinsock::read(uint8_t* p_buffer, int p_bytes,int &r_received, bool p_block) { +Error StreamPeerWinsock::read(uint8_t *p_buffer, int p_bytes, int &r_received, bool p_block) { if (!is_connected_to_host()) { @@ -191,7 +190,7 @@ Error StreamPeerWinsock::read(uint8_t* p_buffer, int p_bytes,int &r_received, bo while (to_read) { - int read = recv(sockfd, (char*)p_buffer + total_read, to_read, 0); + int read = recv(sockfd, (char *)p_buffer + total_read, to_read, 0); if (read == -1) { @@ -224,24 +223,24 @@ Error StreamPeerWinsock::read(uint8_t* p_buffer, int p_bytes,int &r_received, bo return OK; }; -Error StreamPeerWinsock::put_data(const uint8_t* p_data,int p_bytes) { +Error StreamPeerWinsock::put_data(const uint8_t *p_data, int p_bytes) { int total; return write(p_data, p_bytes, total, true); }; -Error StreamPeerWinsock::put_partial_data(const uint8_t* p_data,int p_bytes, int &r_sent) { +Error StreamPeerWinsock::put_partial_data(const uint8_t *p_data, int p_bytes, int &r_sent) { return write(p_data, p_bytes, r_sent, false); }; -Error StreamPeerWinsock::get_data(uint8_t* p_buffer, int p_bytes) { +Error StreamPeerWinsock::get_data(uint8_t *p_buffer, int p_bytes) { int total; return read(p_buffer, p_bytes, total, true); }; -Error StreamPeerWinsock::get_partial_data(uint8_t* p_buffer, int p_bytes,int &r_received) { +Error StreamPeerWinsock::get_partial_data(uint8_t *p_buffer, int p_bytes, int &r_received) { return read(p_buffer, p_bytes, r_received, false); }; @@ -255,7 +254,6 @@ StreamPeerTCP::Status StreamPeerWinsock::get_status() const { return status; }; - bool StreamPeerWinsock::is_connected_to_host() const { if (status == STATUS_NONE || status == STATUS_ERROR) { @@ -266,14 +264,14 @@ bool StreamPeerWinsock::is_connected_to_host() const { return true; }; - return (sockfd!=INVALID_SOCKET); + return (sockfd != INVALID_SOCKET); }; void StreamPeerWinsock::disconnect_from_host() { if (sockfd != INVALID_SOCKET) closesocket(sockfd); - sockfd=INVALID_SOCKET; + sockfd = INVALID_SOCKET; sock_type = IP::TYPE_NONE; status = STATUS_NONE; @@ -291,13 +289,13 @@ void StreamPeerWinsock::set_socket(int p_sockfd, IP_Address p_host, int p_port, peer_port = p_port; }; -Error StreamPeerWinsock::connect_to_host(const IP_Address& p_host, uint16_t p_port) { +Error StreamPeerWinsock::connect_to_host(const IP_Address &p_host, uint16_t p_port) { - ERR_FAIL_COND_V( !p_host.is_valid(), ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V(!p_host.is_valid(), ERR_INVALID_PARAMETER); sock_type = p_host.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6; sockfd = _socket_create(sock_type, SOCK_STREAM, IPPROTO_TCP); - if (sockfd == INVALID_SOCKET) { + if (sockfd == INVALID_SOCKET) { ERR_PRINT("Socket creation failed!"); disconnect_from_host(); //perror("socket"); @@ -314,7 +312,7 @@ Error StreamPeerWinsock::connect_to_host(const IP_Address& p_host, uint16_t p_po struct sockaddr_storage their_addr; size_t addr_size = _set_sockaddr(&their_addr, p_host, p_port, sock_type); - if (::connect(sockfd, (struct sockaddr *)&their_addr,addr_size) == SOCKET_ERROR) { + if (::connect(sockfd, (struct sockaddr *)&their_addr, addr_size) == SOCKET_ERROR) { if (WSAGetLastError() != WSAEWOULDBLOCK) { ERR_PRINT("Connection to remote host failed!"); @@ -333,18 +331,17 @@ Error StreamPeerWinsock::connect_to_host(const IP_Address& p_host, uint16_t p_po }; void StreamPeerWinsock::set_nodelay(bool p_enabled) { - ERR_FAIL_COND(!is_connected_to_host()); - int flag=p_enabled?1:0; - setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(int)); + ERR_FAIL_COND(!is_connected_to_host()); + int flag = p_enabled ? 1 : 0; + setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)); } int StreamPeerWinsock::get_available_bytes() const { unsigned long len; - int ret = ioctlsocket(sockfd,FIONREAD,&len); - ERR_FAIL_COND_V(ret==-1,0) + int ret = ioctlsocket(sockfd, FIONREAD, &len); + ERR_FAIL_COND_V(ret == -1, 0) return len; - } IP_Address StreamPeerWinsock::get_connected_host() const { @@ -370,5 +367,4 @@ StreamPeerWinsock::~StreamPeerWinsock() { disconnect_from_host(); }; - #endif diff --git a/platform/windows/stream_peer_winsock.h b/platform/windows/stream_peer_winsock.h index 7cf60fc10e..c8c2dd4feb 100644 --- a/platform/windows/stream_peer_winsock.h +++ b/platform/windows/stream_peer_winsock.h @@ -39,7 +39,6 @@ class StreamPeerWinsock : public StreamPeerTCP { protected: - mutable Status status; IP::Type sock_type; @@ -52,20 +51,19 @@ protected: IP_Address peer_host; int peer_port; - Error write(const uint8_t* p_data,int p_bytes, int &r_sent, bool p_block); - Error read(uint8_t* p_buffer, int p_bytes,int &r_received, bool p_block); + Error write(const uint8_t *p_data, int p_bytes, int &r_sent, bool p_block); + Error read(uint8_t *p_buffer, int p_bytes, int &r_received, bool p_block); - static StreamPeerTCP* _create(); + static StreamPeerTCP *_create(); public: + virtual Error connect_to_host(const IP_Address &p_host, uint16_t p_port); - virtual Error connect_to_host(const IP_Address& p_host, uint16_t p_port); - - virtual Error put_data(const uint8_t* p_data,int p_bytes); - virtual Error put_partial_data(const uint8_t* p_data,int p_bytes, int &r_sent); + virtual Error put_data(const uint8_t *p_data, int p_bytes); + virtual Error put_partial_data(const uint8_t *p_data, int p_bytes, int &r_sent); - virtual Error get_data(uint8_t* p_buffer, int p_bytes); - virtual Error get_partial_data(uint8_t* p_buffer, int p_bytes,int &r_received); + virtual Error get_data(uint8_t *p_buffer, int p_bytes); + virtual Error get_partial_data(uint8_t *p_buffer, int p_bytes, int &r_received); virtual int get_available_bytes() const; @@ -83,7 +81,6 @@ public: virtual void set_nodelay(bool p_enabled); - StreamPeerWinsock(); ~StreamPeerWinsock(); }; diff --git a/platform/windows/tcp_server_winsock.cpp b/platform/windows/tcp_server_winsock.cpp index 883741b115..67713f5d1c 100644 --- a/platform/windows/tcp_server_winsock.cpp +++ b/platform/windows/tcp_server_winsock.cpp @@ -37,7 +37,7 @@ extern int winsock_refcount; -TCP_Server* TCPServerWinsock::_create() { +TCP_Server *TCPServerWinsock::_create() { return memnew(TCPServerWinsock); }; @@ -48,7 +48,7 @@ void TCPServerWinsock::make_default() { if (winsock_refcount == 0) { WSADATA data; - WSAStartup(MAKEWORD(2,2), &data); + WSAStartup(MAKEWORD(2, 2), &data); }; ++winsock_refcount; }; @@ -62,10 +62,9 @@ void TCPServerWinsock::cleanup() { }; }; +Error TCPServerWinsock::listen(uint16_t p_port, const IP_Address p_bind_address) { -Error TCPServerWinsock::listen(uint16_t p_port,const IP_Address p_bind_address) { - - ERR_FAIL_COND_V(listen_sockfd!=-1,ERR_ALREADY_IN_USE); + ERR_FAIL_COND_V(listen_sockfd != -1, ERR_ALREADY_IN_USE); ERR_FAIL_COND_V(!p_bind_address.is_valid() && !p_bind_address.is_wildcard(), ERR_INVALID_PARAMETER); int sockfd; @@ -75,7 +74,6 @@ Error TCPServerWinsock::listen(uint16_t p_port,const IP_Address p_bind_address) if (p_bind_address.is_valid()) sock_type = p_bind_address.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6; - sockfd = _socket_create(sock_type, SOCK_STREAM, IPPROTO_TCP); ERR_FAIL_COND_V(sockfd == INVALID_SOCKET, FAILED); @@ -89,13 +87,12 @@ Error TCPServerWinsock::listen(uint16_t p_port,const IP_Address p_bind_address) struct sockaddr_storage my_addr; size_t addr_size = _set_listen_sockaddr(&my_addr, p_port, sock_type, p_bind_address); - int reuse=1; - if(setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0) { + int reuse = 1; + if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0) { printf("REUSEADDR failed!"); } - if (bind(sockfd, (struct sockaddr *)&my_addr, addr_size) != SOCKET_ERROR) { if (::listen(sockfd, SOMAXCONN) == SOCKET_ERROR) { @@ -103,8 +100,7 @@ Error TCPServerWinsock::listen(uint16_t p_port,const IP_Address p_bind_address) closesocket(sockfd); ERR_FAIL_V(FAILED); }; - } - else { + } else { return ERR_ALREADY_IN_USE; }; @@ -143,7 +139,6 @@ bool TCPServerWinsock::is_connection_available() const { return false; }; - Ref<StreamPeerTCP> TCPServerWinsock::take_connection() { if (!is_connection_available()) { @@ -175,7 +170,6 @@ void TCPServerWinsock::stop() { sock_type = IP::TYPE_NONE; }; - TCPServerWinsock::TCPServerWinsock() { listen_sockfd = INVALID_SOCKET; @@ -186,4 +180,3 @@ TCPServerWinsock::~TCPServerWinsock() { stop(); }; - diff --git a/platform/windows/tcp_server_winsock.h b/platform/windows/tcp_server_winsock.h index afbd1e9c87..d7b1aee054 100644 --- a/platform/windows/tcp_server_winsock.h +++ b/platform/windows/tcp_server_winsock.h @@ -36,11 +36,10 @@ class TCPServerWinsock : public TCP_Server { int listen_sockfd; IP::Type sock_type; - static TCP_Server* _create(); + static TCP_Server *_create(); public: - - virtual Error listen(uint16_t p_port, const IP_Address p_bind_address=IP_Address("*")); + virtual Error listen(uint16_t p_port, const IP_Address p_bind_address = IP_Address("*")); virtual bool is_connection_available() const; virtual Ref<StreamPeerTCP> take_connection(); diff --git a/platform/x11/context_gl_x11.cpp b/platform/x11/context_gl_x11.cpp index caa5e4fc89..41d110a1e1 100644 --- a/platform/x11/context_gl_x11.cpp +++ b/platform/x11/context_gl_x11.cpp @@ -31,17 +31,17 @@ #ifdef X11_ENABLED #if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) #include <stdio.h> -#include <unistd.h> #include <stdlib.h> +#include <unistd.h> #define GLX_GLXEXT_PROTOTYPES #include <GL/glx.h> #include <GL/glxext.h> -#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 -typedef GLXContext (*GLXCREATECONTEXTATTRIBSARBPROC)(Display*, GLXFBConfig, GLXContext, Bool, const int*); +typedef GLXContext (*GLXCREATECONTEXTATTRIBSARBPROC)(Display *, GLXFBConfig, GLXContext, Bool, const int *); struct ContextGL_X11_Private { @@ -60,7 +60,7 @@ void ContextGL_X11::make_current() { void ContextGL_X11::swap_buffers() { - glXSwapBuffers(x11_display,x11_window); + glXSwapBuffers(x11_display, x11_window); } /* @@ -77,38 +77,35 @@ static GLWrapperFuncPtr wrapper_get_proc_address(const char* p_function) { }*/ static bool ctxErrorOccurred = false; -static int ctxErrorHandler( Display *dpy, XErrorEvent *ev ) -{ - ctxErrorOccurred = true; - return 0; +static int ctxErrorHandler(Display *dpy, XErrorEvent *ev) { + ctxErrorOccurred = true; + return 0; } Error ContextGL_X11::initialize() { - GLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB = NULL; //const char *extensions = glXQueryExtensionsString(x11_display, DefaultScreen(x11_display)); - glXCreateContextAttribsARB = (GLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress((const GLubyte*)"glXCreateContextAttribsARB"); - - ERR_FAIL_COND_V( !glXCreateContextAttribsARB, ERR_UNCONFIGURED ); + glXCreateContextAttribsARB = (GLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress((const GLubyte *)"glXCreateContextAttribsARB"); + ERR_FAIL_COND_V(!glXCreateContextAttribsARB, ERR_UNCONFIGURED); static int visual_attribs[] = { - GLX_RENDER_TYPE, GLX_RGBA_BIT, - GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, - GLX_DOUBLEBUFFER, true, - GLX_RED_SIZE, 1, - GLX_GREEN_SIZE, 1, - GLX_BLUE_SIZE, 1, - GLX_DEPTH_SIZE, 24, - None + GLX_RENDER_TYPE, GLX_RGBA_BIT, + GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, + GLX_DOUBLEBUFFER, true, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_DEPTH_SIZE, 24, + None }; int fbcount; GLXFBConfig *fbc = glXChooseFBConfig(x11_display, DefaultScreen(x11_display), visual_attribs, &fbcount); - ERR_FAIL_COND_V(!fbc,ERR_UNCONFIGURED); + ERR_FAIL_COND_V(!fbc, ERR_UNCONFIGURED); XVisualInfo *vi = glXGetVisualFromFBConfig(x11_display, fbc[0]); @@ -127,15 +124,13 @@ Error ContextGL_X11::initialize() { x11_window = atol(windowid); } else { */ - x11_window = XCreateWindow(x11_display, RootWindow(x11_display, vi->screen), 0, 0, OS::get_singleton()->get_video_mode().width, OS::get_singleton()->get_video_mode().height, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel|CWColormap|CWEventMask, &swa); - ERR_FAIL_COND_V(!x11_window,ERR_UNCONFIGURED); - XMapWindow(x11_display, x11_window); - //}; - - - int (*oldHandler)(Display*, XErrorEvent*) = - XSetErrorHandler(&ctxErrorHandler); + x11_window = XCreateWindow(x11_display, RootWindow(x11_display, vi->screen), 0, 0, OS::get_singleton()->get_video_mode().width, OS::get_singleton()->get_video_mode().height, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel | CWColormap | CWEventMask, &swa); + ERR_FAIL_COND_V(!x11_window, ERR_UNCONFIGURED); + XMapWindow(x11_display, x11_window); + //}; + int (*oldHandler)(Display *, XErrorEvent *) = + XSetErrorHandler(&ctxErrorHandler); if (!opengl_3_context) { //oldstyle context: @@ -144,17 +139,17 @@ Error ContextGL_X11::initialize() { static int context_attribs[] = { GLX_CONTEXT_MAJOR_VERSION_ARB, 3, GLX_CONTEXT_MINOR_VERSION_ARB, 3, - GLX_CONTEXT_FLAGS_ARB , GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB/*|GLX_CONTEXT_DEBUG_BIT_ARB*/, + GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB /*|GLX_CONTEXT_DEBUG_BIT_ARB*/, None }; p->glx_context = glXCreateContextAttribsARB(x11_display, fbc[0], NULL, true, context_attribs); ERR_EXPLAIN("Could not obtain an OpenGL 3.3 context!"); - ERR_FAIL_COND_V(ctxErrorOccurred || !p->glx_context,ERR_UNCONFIGURED); + ERR_FAIL_COND_V(ctxErrorOccurred || !p->glx_context, ERR_UNCONFIGURED); } - XSync( x11_display, False ); - XSetErrorHandler( oldHandler ); + XSync(x11_display, False); + XSetErrorHandler(oldHandler); print_line("ALL IS GOOD"); @@ -168,8 +163,8 @@ Error ContextGL_X11::initialize() { */ //glXMakeCurrent(x11_display, None, NULL); - XFree( vi ); - XFree( fbc ); + XFree(vi); + XFree(fbc); return OK; } @@ -177,14 +172,14 @@ Error ContextGL_X11::initialize() { int ContextGL_X11::get_window_width() { XWindowAttributes xwa; - XGetWindowAttributes(x11_display,x11_window,&xwa); + XGetWindowAttributes(x11_display, x11_window, &xwa); return xwa.width; } int ContextGL_X11::get_window_height() { XWindowAttributes xwa; - XGetWindowAttributes(x11_display,x11_window,&xwa); + XGetWindowAttributes(x11_display, x11_window, &xwa); return xwa.height; } @@ -199,24 +194,22 @@ void ContextGL_X11::set_use_vsync(bool p_use) { setup = true; String extensions = glXQueryExtensionsString(x11_display, DefaultScreen(x11_display)); if (extensions.find("GLX_EXT_swap_control") != -1) - glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalEXT"); + glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)glXGetProcAddressARB((const GLubyte *)"glXSwapIntervalEXT"); if (extensions.find("GLX_MESA_swap_control") != -1) - glXSwapIntervalMESA = (PFNGLXSWAPINTERVALSGIPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalMESA"); + glXSwapIntervalMESA = (PFNGLXSWAPINTERVALSGIPROC)glXGetProcAddressARB((const GLubyte *)"glXSwapIntervalMESA"); if (extensions.find("GLX_SGI_swap_control") != -1) - glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalSGI"); + glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)glXGetProcAddressARB((const GLubyte *)"glXSwapIntervalSGI"); } - int val = p_use ? 1:0; + int val = p_use ? 1 : 0; if (glXSwapIntervalMESA) { glXSwapIntervalMESA(val); - } - else if (glXSwapIntervalSGI) { + } else if (glXSwapIntervalSGI) { glXSwapIntervalSGI(val); - } - else if (glXSwapIntervalEXT) { + } else if (glXSwapIntervalEXT) { GLXDrawable drawable = glXGetCurrentDrawable(); glXSwapIntervalEXT(x11_display, drawable, val); - } - else return; + } else + return; use_vsync = p_use; } bool ContextGL_X11::is_using_vsync() const { @@ -224,30 +217,28 @@ bool ContextGL_X11::is_using_vsync() const { return use_vsync; } +ContextGL_X11::ContextGL_X11(::Display *p_x11_display, ::Window &p_x11_window, const OS::VideoMode &p_default_video_mode, bool p_opengl_3_context) + : x11_window(p_x11_window) { -ContextGL_X11::ContextGL_X11(::Display *p_x11_display,::Window &p_x11_window,const OS::VideoMode& p_default_video_mode,bool p_opengl_3_context) : x11_window(p_x11_window) { + default_video_mode = p_default_video_mode; + x11_display = p_x11_display; - default_video_mode=p_default_video_mode; - x11_display=p_x11_display; + opengl_3_context = p_opengl_3_context; - opengl_3_context=p_opengl_3_context; - - double_buffer=false; - direct_render=false; - glx_minor=glx_major=0; - p = memnew( ContextGL_X11_Private ); - p->glx_context=0; - use_vsync=false; + double_buffer = false; + direct_render = false; + glx_minor = glx_major = 0; + p = memnew(ContextGL_X11_Private); + p->glx_context = 0; + use_vsync = false; } - ContextGL_X11::~ContextGL_X11() { release_current(); - glXDestroyContext( x11_display, p->glx_context ); + glXDestroyContext(x11_display, p->glx_context); - memdelete( p ); + memdelete(p); } - #endif #endif diff --git a/platform/x11/context_gl_x11.h b/platform/x11/context_gl_x11.h index efea700224..be0f4c822c 100644 --- a/platform/x11/context_gl_x11.h +++ b/platform/x11/context_gl_x11.h @@ -36,10 +36,8 @@ #if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) - - -#include "os/os.h" #include "drivers/gl_context/context_gl.h" +#include "os/os.h" #include <X11/Xlib.h> struct ContextGL_X11_Private; @@ -50,14 +48,14 @@ class ContextGL_X11 : public ContextGL { OS::VideoMode default_video_mode; //::Colormap x11_colormap; ::Display *x11_display; - ::Window& x11_window; + ::Window &x11_window; bool double_buffer; bool direct_render; - int glx_minor,glx_major; + int glx_minor, glx_major; bool opengl_3_context; bool use_vsync; -public: +public: virtual void release_current(); virtual void make_current(); virtual void swap_buffers(); @@ -69,9 +67,8 @@ public: virtual void set_use_vsync(bool p_use); virtual bool is_using_vsync() const; - ContextGL_X11(::Display *p_x11_display,::Window &p_x11_window,const OS::VideoMode& p_default_video_mode,bool p_opengl_3_context); + ContextGL_X11(::Display *p_x11_display, ::Window &p_x11_window, const OS::VideoMode &p_default_video_mode, bool p_opengl_3_context); ~ContextGL_X11(); - }; #endif diff --git a/platform/x11/export/export.cpp b/platform/x11/export/export.cpp index c40b8f3c1f..2659c771ca 100644 --- a/platform/x11/export/export.cpp +++ b/platform/x11/export/export.cpp @@ -27,12 +27,10 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "export.h" -#include "platform/x11/logo.h" #include "editor/editor_export.h" +#include "platform/x11/logo.h" #include "scene/resources/texture.h" - - void register_x11_exporter() { Ref<EditorExportPlatformPC> platform; @@ -48,7 +46,7 @@ void register_x11_exporter() { EditorExport::get_singleton()->add_export_platform(platform); - #if 0 +#if 0 Image img(_x11_logo); Ref<ImageTexture> logo = memnew( ImageTexture ); logo->create_from_image(img); @@ -65,6 +63,5 @@ void register_x11_exporter() { EditorImportExport::get_singleton()->add_export_platform(exporter); } - #endif +#endif } - diff --git a/platform/x11/godot_x11.cpp b/platform/x11/godot_x11.cpp index adb919c2f1..078baf76ee 100644 --- a/platform/x11/godot_x11.cpp +++ b/platform/x11/godot_x11.cpp @@ -26,22 +26,22 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include <unistd.h> #include <limits.h> #include <stdlib.h> +#include <unistd.h> #include "main/main.h" #include "os_x11.h" -int main(int argc, char* argv[]) { +int main(int argc, char *argv[]) { OS_X11 os; - char *cwd = (char*)malloc(PATH_MAX); + char *cwd = (char *)malloc(PATH_MAX); getcwd(cwd, PATH_MAX); - Error err = Main::setup(argv[0],argc-1,&argv[1]); - if (err!=OK) + Error err = Main::setup(argv[0], argc - 1, &argv[1]); + if (err != OK) return 255; if (Main::start()) diff --git a/platform/x11/joypad_linux.cpp b/platform/x11/joypad_linux.cpp index bdbd2912a6..62ece58f58 100644 --- a/platform/x11/joypad_linux.cpp +++ b/platform/x11/joypad_linux.cpp @@ -31,21 +31,21 @@ #include "joypad_linux.h" +#include <errno.h> +#include <fcntl.h> #include <linux/input.h> #include <unistd.h> -#include <fcntl.h> -#include <errno.h> #ifdef UDEV_ENABLED #include <libudev.h> #endif -#define LONG_BITS (sizeof(long) * 8) -#define test_bit(nr, addr) (((1UL << ((nr) % LONG_BITS)) & ((addr)[(nr) / LONG_BITS])) != 0) -#define NBITS(x) ((((x)-1)/LONG_BITS)+1) +#define LONG_BITS (sizeof(long) * 8) +#define test_bit(nr, addr) (((1UL << ((nr) % LONG_BITS)) & ((addr)[(nr) / LONG_BITS])) != 0) +#define NBITS(x) ((((x)-1) / LONG_BITS) + 1) #ifdef UDEV_ENABLED -static const char* ignore_str = "/dev/input/js"; +static const char *ignore_str = "/dev/input/js"; #endif JoypadLinux::Joypad::Joypad() { @@ -67,20 +67,19 @@ JoypadLinux::Joypad::~Joypad() { } void JoypadLinux::Joypad::reset() { - dpad = 0; - fd = -1; + dpad = 0; + fd = -1; InputDefault::JoyAxis jx; jx.min = -1; jx.value = 0.0f; - for (int i=0; i < MAX_ABS; i++) { + for (int i = 0; i < MAX_ABS; i++) { abs_map[i] = -1; curr_axis[i] = jx; } } -JoypadLinux::JoypadLinux(InputDefault *in) -{ +JoypadLinux::JoypadLinux(InputDefault *in) { exit_udev = false; input = in; joy_mutex = Mutex::create(); @@ -98,7 +97,7 @@ JoypadLinux::~JoypadLinux() { void JoypadLinux::joy_thread_func(void *p_user) { if (p_user) { - JoypadLinux* joy = (JoypadLinux*) p_user; + JoypadLinux *joy = (JoypadLinux *)p_user; joy->run_joypad_thread(); } return; @@ -124,16 +123,16 @@ void JoypadLinux::enumerate_joypads(udev *p_udev) { udev_device *dev; enumerate = udev_enumerate_new(p_udev); - udev_enumerate_add_match_subsystem(enumerate,"input"); + udev_enumerate_add_match_subsystem(enumerate, "input"); udev_enumerate_add_match_property(enumerate, "ID_INPUT_JOYPAD", "1"); udev_enumerate_scan_devices(enumerate); devices = udev_enumerate_get_list_entry(enumerate); udev_list_entry_foreach(dev_list_entry, devices) { - const char* path = udev_list_entry_get_name(dev_list_entry); + const char *path = udev_list_entry_get_name(dev_list_entry); dev = udev_device_new_from_syspath(p_udev, path); - const char* devnode = udev_device_get_devnode(dev); + const char *devnode = udev_device_get_devnode(dev); if (devnode) { @@ -168,7 +167,7 @@ void JoypadLinux::monitor_joypads(udev *p_udev) { tv.tv_sec = 0; tv.tv_usec = 0; - ret = select(fd+1, &fds, NULL, NULL, &tv); + ret = select(fd + 1, &fds, NULL, NULL, &tv); /* Check if our file descriptor has received data. */ if (ret > 0 && FD_ISSET(fd, &fds)) { @@ -180,7 +179,7 @@ void JoypadLinux::monitor_joypads(udev *p_udev) { joy_mutex->lock(); String action = udev_device_get_action(dev); - const char* devnode = udev_device_get_devnode(dev); + const char *devnode = udev_device_get_devnode(dev); if (devnode) { String devnode_str = devnode; @@ -232,13 +231,13 @@ int JoypadLinux::get_joy_from_path(String p_path) const { void JoypadLinux::close_joypad(int p_id) { if (p_id == -1) { - for (int i=0; i<JOYPADS_MAX; i++) { + for (int i = 0; i < JOYPADS_MAX; i++) { close_joypad(i); }; return; - } - else if (p_id < 0) return; + } else if (p_id < 0) + return; Joypad &joy = joypads[p_id]; @@ -253,11 +252,11 @@ void JoypadLinux::close_joypad(int p_id) { static String _hex_str(uint8_t p_byte) { - static const char* dict = "0123456789abcdef"; + static const char *dict = "0123456789abcdef"; char ret[3]; ret[2] = 0; - ret[0] = dict[p_byte>>4]; + ret[0] = dict[p_byte >> 4]; ret[1] = dict[p_byte & 0xF]; return ret; @@ -265,7 +264,7 @@ static String _hex_str(uint8_t p_byte) { void JoypadLinux::setup_joypad_properties(int p_id) { - Joypad* joy = &joypads[p_id]; + Joypad *joy = &joypads[p_id]; unsigned long keybit[NBITS(KEY_MAX)] = { 0 }; unsigned long absbit[NBITS(ABS_MAX)] = { 0 }; @@ -274,7 +273,7 @@ void JoypadLinux::setup_joypad_properties(int p_id) { int num_axes = 0; if ((ioctl(joy->fd, EVIOCGBIT(EV_KEY, sizeof(keybit)), keybit) < 0) || - (ioctl(joy->fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) < 0)) { + (ioctl(joy->fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) < 0)) { return; } for (int i = BTN_JOYSTICK; i < KEY_MAX; ++i) { @@ -332,8 +331,8 @@ void JoypadLinux::open_joypad(const char *p_path) { attached_devices.push_back(String(p_path)); if ((ioctl(fd, EVIOCGBIT(0, sizeof(evbit)), evbit) < 0) || - (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybit)), keybit) < 0) || - (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) < 0)) { + (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybit)), keybit) < 0) || + (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) < 0)) { close(fd); return; } @@ -341,10 +340,10 @@ void JoypadLinux::open_joypad(const char *p_path) { //check if the device supports basic gamepad events, prevents certain keyboards from //being detected as joypads if (!(test_bit(EV_KEY, evbit) && test_bit(EV_ABS, evbit) && - (test_bit(ABS_X, absbit) || test_bit(ABS_Y, absbit) || test_bit(ABS_HAT0X, absbit) || - test_bit(ABS_GAS, absbit) || test_bit(ABS_RUDDER, absbit)) && - (test_bit(BTN_A, keybit) || test_bit(BTN_THUMBL, keybit) || - test_bit(BTN_TRIGGER, keybit) || test_bit(BTN_1, keybit)))) { + (test_bit(ABS_X, absbit) || test_bit(ABS_Y, absbit) || test_bit(ABS_HAT0X, absbit) || + test_bit(ABS_GAS, absbit) || test_bit(ABS_RUDDER, absbit)) && + (test_bit(BTN_A, keybit) || test_bit(BTN_THUMBL, keybit) || + test_bit(BTN_TRIGGER, keybit) || test_bit(BTN_1, keybit)))) { close(fd); return; } @@ -375,13 +374,12 @@ void JoypadLinux::open_joypad(const char *p_path) { uint16_t product = __bswap_16(inpid.product); uint16_t version = __bswap_16(inpid.version); - sprintf(uid + String(uid).length(), "%04x%04x%04x%04x%04x%04x", vendor,0,product,0,version,0); + sprintf(uid + String(uid).length(), "%04x%04x%04x%04x%04x%04x", vendor, 0, product, 0, version, 0); input->joy_connection_changed(joy_num, true, name, uid); - } - else { + } else { String uidname = uid; int uidlen = MIN(name.length(), 11); - for (int i=0; i<uidlen; i++) { + for (int i = 0; i < uidlen; i++) { uidname = uidname + _hex_str(name[i]); } @@ -391,9 +389,8 @@ void JoypadLinux::open_joypad(const char *p_path) { } } -void JoypadLinux::joypad_vibration_start(int p_id, float p_weak_magnitude, float p_strong_magnitude, float p_duration, uint64_t p_timestamp) -{ - Joypad& joy = joypads[p_id]; +void JoypadLinux::joypad_vibration_start(int p_id, float p_weak_magnitude, float p_strong_magnitude, float p_duration, uint64_t p_timestamp) { + Joypad &joy = joypads[p_id]; if (!joy.force_feedback || joy.fd == -1 || p_weak_magnitude < 0.f || p_weak_magnitude > 1.f || p_strong_magnitude < 0.f || p_strong_magnitude > 1.f) { return; } @@ -417,15 +414,14 @@ void JoypadLinux::joypad_vibration_start(int p_id, float p_weak_magnitude, float play.type = EV_FF; play.code = effect.id; play.value = 1; - write(joy.fd, (const void*)&play, sizeof(play)); + write(joy.fd, (const void *)&play, sizeof(play)); joy.ff_effect_id = effect.id; joy.ff_effect_timestamp = p_timestamp; } -void JoypadLinux::joypad_vibration_stop(int p_id, uint64_t p_timestamp) -{ - Joypad& joy = joypads[p_id]; +void JoypadLinux::joypad_vibration_stop(int p_id, uint64_t p_timestamp) { + Joypad &joy = joypads[p_id]; if (!joy.force_feedback || joy.fd == -1 || joy.ff_effect_id == -1) { return; } @@ -447,13 +443,13 @@ InputDefault::JoyAxis JoypadLinux::axis_correct(const input_absinfo *p_abs, int if (min < 0) { jx.min = -1; if (p_value < 0) { - jx.value = (float) -p_value / min; + jx.value = (float)-p_value / min; } - jx.value = (float) p_value / max; + jx.value = (float)p_value / max; } if (min == 0) { jx.min = 0; - jx.value = 0.0f + (float) p_value / max; + jx.value = 0.0f + (float)p_value / max; } return jx; } @@ -463,12 +459,12 @@ uint32_t JoypadLinux::process_joypads(uint32_t p_event_id) { if (joy_mutex->try_lock() != OK) { return p_event_id; } - for (int i=0; i<JOYPADS_MAX; i++) { + for (int i = 0; i < JOYPADS_MAX; i++) { if (joypads[i].fd == -1) continue; input_event events[32]; - Joypad* joy = &joypads[i]; + Joypad *joy = &joypads[i]; int len; @@ -480,45 +476,49 @@ uint32_t JoypadLinux::process_joypads(uint32_t p_event_id) { // ev may be tainted and out of MAX_KEY range, which will cause // joy->key_map[ev.code] to crash - if( ev.code < 0 || ev.code >= MAX_KEY ) + if (ev.code < 0 || ev.code >= MAX_KEY) return p_event_id; switch (ev.type) { - case EV_KEY: - p_event_id = input->joy_button(p_event_id, i, joy->key_map[ev.code], ev.value); - break; - - case EV_ABS: - - switch (ev.code) { - case ABS_HAT0X: - if (ev.value != 0) { - if (ev.value < 0) joy->dpad |= InputDefault::HAT_MASK_LEFT; - else joy->dpad |= InputDefault::HAT_MASK_RIGHT; - } - else joy->dpad &= ~(InputDefault::HAT_MASK_LEFT | InputDefault::HAT_MASK_RIGHT); - - p_event_id = input->joy_hat(p_event_id, i, joy->dpad); + case EV_KEY: + p_event_id = input->joy_button(p_event_id, i, joy->key_map[ev.code], ev.value); break; - case ABS_HAT0Y: - if (ev.value != 0) { - if (ev.value < 0) joy->dpad |= InputDefault::HAT_MASK_UP; - else joy->dpad |= InputDefault::HAT_MASK_DOWN; + case EV_ABS: + + switch (ev.code) { + case ABS_HAT0X: + if (ev.value != 0) { + if (ev.value < 0) + joy->dpad |= InputDefault::HAT_MASK_LEFT; + else + joy->dpad |= InputDefault::HAT_MASK_RIGHT; + } else + joy->dpad &= ~(InputDefault::HAT_MASK_LEFT | InputDefault::HAT_MASK_RIGHT); + + p_event_id = input->joy_hat(p_event_id, i, joy->dpad); + break; + + case ABS_HAT0Y: + if (ev.value != 0) { + if (ev.value < 0) + joy->dpad |= InputDefault::HAT_MASK_UP; + else + joy->dpad |= InputDefault::HAT_MASK_DOWN; + } else + joy->dpad &= ~(InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_DOWN); + + p_event_id = input->joy_hat(p_event_id, i, joy->dpad); + break; + + default: + if (joy->abs_map[ev.code] != -1 && joy->abs_info[ev.code]) { + InputDefault::JoyAxis value = axis_correct(joy->abs_info[ev.code], ev.value); + joy->curr_axis[joy->abs_map[ev.code]] = value; + } + break; } - else joy->dpad &= ~(InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_DOWN); - - p_event_id = input->joy_hat(p_event_id, i, joy->dpad); break; - - default: - if (joy->abs_map[ev.code] != -1 && joy->abs_info[ev.code]) { - InputDefault::JoyAxis value = axis_correct(joy->abs_info[ev.code], ev.value); - joy->curr_axis[joy->abs_map[ev.code]] = value; - } - break; - } - break; } } } diff --git a/platform/x11/joypad_linux.h b/platform/x11/joypad_linux.h index 310f5c1488..f90ca9319a 100644 --- a/platform/x11/joypad_linux.h +++ b/platform/x11/joypad_linux.h @@ -33,23 +33,22 @@ #ifdef JOYDEV_ENABLED #include "main/input_default.h" -#include "os/thread.h" #include "os/mutex.h" +#include "os/thread.h" struct input_absinfo; -class JoypadLinux -{ +class JoypadLinux { public: JoypadLinux(InputDefault *in); ~JoypadLinux(); uint32_t process_joypads(uint32_t p_event_id); -private: +private: enum { JOYPADS_MAX = 16, MAX_ABS = 63, - MAX_KEY = 767, // Hack because <linux/input.h> can't be included here + MAX_KEY = 767, // Hack because <linux/input.h> can't be included here }; struct Joypad { @@ -90,7 +89,7 @@ private: #endif void monitor_joypads(); void run_joypad_thread(); - void open_joypad(const char* path); + void open_joypad(const char *path); void joypad_vibration_start(int p_id, float p_weak_magnitude, float p_strong_magnitude, float p_duration, uint64_t p_timestamp); void joypad_vibration_stop(int p_id, uint64_t p_timestamp); diff --git a/platform/x11/key_mapping_x11.cpp b/platform/x11/key_mapping_x11.cpp index d25fe40c4d..4cfcffede0 100644 --- a/platform/x11/key_mapping_x11.cpp +++ b/platform/x11/key_mapping_x11.cpp @@ -28,7 +28,6 @@ /*************************************************************************/ #include "key_mapping_x11.h" - /***** SCAN CODE CONVERSION ******/ struct _XTranslatePair { @@ -37,162 +36,161 @@ struct _XTranslatePair { unsigned int keycode; }; -static _XTranslatePair _xkeysym_to_keycode[]={ - // misc keys +static _XTranslatePair _xkeysym_to_keycode[] = { + // misc keys - { XK_Escape, KEY_ESCAPE }, - { XK_Tab, KEY_TAB }, - { XK_ISO_Left_Tab, KEY_BACKTAB }, - { XK_BackSpace, KEY_BACKSPACE }, - { XK_Return, KEY_RETURN }, - { XK_Insert, KEY_INSERT }, - { XK_Delete, KEY_DELETE }, - { XK_Clear, KEY_DELETE }, - { XK_Pause, KEY_PAUSE }, - { XK_Print, KEY_PRINT }, - { XK_Home, KEY_HOME }, - { XK_End, KEY_END }, - { XK_Left, KEY_LEFT }, - { XK_Up, KEY_UP }, - { XK_Right, KEY_RIGHT }, - { XK_Down, KEY_DOWN }, - { XK_Prior, KEY_PAGEUP }, - { XK_Next, KEY_PAGEDOWN }, - { XK_Shift_L, KEY_SHIFT }, - { XK_Shift_R, KEY_SHIFT }, - { XK_Shift_Lock, KEY_SHIFT }, - { XK_Control_L, KEY_CONTROL }, - { XK_Control_R, KEY_CONTROL }, - { XK_Meta_L, KEY_META }, - { XK_Meta_R, KEY_META }, - { XK_Alt_L, KEY_ALT }, - { XK_Alt_R, KEY_ALT }, - { XK_Caps_Lock, KEY_CAPSLOCK }, - { XK_Num_Lock, KEY_NUMLOCK }, - { XK_Scroll_Lock, KEY_SCROLLLOCK }, - { XK_Super_L, KEY_SUPER_L }, - { XK_Super_R, KEY_SUPER_R }, - { XK_Menu, KEY_MENU }, - { XK_Hyper_L, KEY_HYPER_L }, - { XK_Hyper_R, KEY_HYPER_R }, - { XK_Help, KEY_HELP }, - { XK_KP_Space, KEY_SPACE }, - { XK_KP_Tab, KEY_TAB }, - { XK_KP_Enter, KEY_ENTER }, - { XK_Home, KEY_HOME }, - { XK_Left, KEY_LEFT }, - { XK_Up, KEY_UP }, - { XK_Right, KEY_RIGHT }, - { XK_Down, KEY_DOWN }, - { XK_Prior, KEY_PAGEUP }, - { XK_Next, KEY_PAGEDOWN }, - { XK_End, KEY_END }, - { XK_Begin, KEY_CLEAR }, - { XK_Insert, KEY_INSERT }, - { XK_Delete, KEY_DELETE }, + { XK_Escape, KEY_ESCAPE }, + { XK_Tab, KEY_TAB }, + { XK_ISO_Left_Tab, KEY_BACKTAB }, + { XK_BackSpace, KEY_BACKSPACE }, + { XK_Return, KEY_RETURN }, + { XK_Insert, KEY_INSERT }, + { XK_Delete, KEY_DELETE }, + { XK_Clear, KEY_DELETE }, + { XK_Pause, KEY_PAUSE }, + { XK_Print, KEY_PRINT }, + { XK_Home, KEY_HOME }, + { XK_End, KEY_END }, + { XK_Left, KEY_LEFT }, + { XK_Up, KEY_UP }, + { XK_Right, KEY_RIGHT }, + { XK_Down, KEY_DOWN }, + { XK_Prior, KEY_PAGEUP }, + { XK_Next, KEY_PAGEDOWN }, + { XK_Shift_L, KEY_SHIFT }, + { XK_Shift_R, KEY_SHIFT }, + { XK_Shift_Lock, KEY_SHIFT }, + { XK_Control_L, KEY_CONTROL }, + { XK_Control_R, KEY_CONTROL }, + { XK_Meta_L, KEY_META }, + { XK_Meta_R, KEY_META }, + { XK_Alt_L, KEY_ALT }, + { XK_Alt_R, KEY_ALT }, + { XK_Caps_Lock, KEY_CAPSLOCK }, + { XK_Num_Lock, KEY_NUMLOCK }, + { XK_Scroll_Lock, KEY_SCROLLLOCK }, + { XK_Super_L, KEY_SUPER_L }, + { XK_Super_R, KEY_SUPER_R }, + { XK_Menu, KEY_MENU }, + { XK_Hyper_L, KEY_HYPER_L }, + { XK_Hyper_R, KEY_HYPER_R }, + { XK_Help, KEY_HELP }, + { XK_KP_Space, KEY_SPACE }, + { XK_KP_Tab, KEY_TAB }, + { XK_KP_Enter, KEY_ENTER }, + { XK_Home, KEY_HOME }, + { XK_Left, KEY_LEFT }, + { XK_Up, KEY_UP }, + { XK_Right, KEY_RIGHT }, + { XK_Down, KEY_DOWN }, + { XK_Prior, KEY_PAGEUP }, + { XK_Next, KEY_PAGEDOWN }, + { XK_End, KEY_END }, + { XK_Begin, KEY_CLEAR }, + { XK_Insert, KEY_INSERT }, + { XK_Delete, KEY_DELETE }, //{ XK_KP_Equal, KEY_EQUAL }, //{ XK_KP_Separator, KEY_COMMA }, - { XK_KP_Decimal, KEY_KP_PERIOD }, - { XK_KP_Delete, KEY_KP_PERIOD }, - { XK_KP_Enter, KEY_KP_ENTER }, - { XK_KP_Multiply, KEY_KP_MULTIPLY}, - { XK_KP_Divide, KEY_KP_DIVIDE}, - { XK_KP_Subtract, KEY_KP_SUBTRACT}, - { XK_KP_Add, KEY_KP_ADD}, - { XK_KP_0, KEY_KP_0}, - { XK_KP_1, KEY_KP_1}, - { XK_KP_2, KEY_KP_2}, - { XK_KP_3, KEY_KP_3}, - { XK_KP_4, KEY_KP_4}, - { XK_KP_5, KEY_KP_5}, - { XK_KP_6, KEY_KP_6}, - { XK_KP_7, KEY_KP_7}, - { XK_KP_8, KEY_KP_8}, - { XK_KP_9, KEY_KP_9}, + { XK_KP_Decimal, KEY_KP_PERIOD }, + { XK_KP_Delete, KEY_KP_PERIOD }, + { XK_KP_Enter, KEY_KP_ENTER }, + { XK_KP_Multiply, KEY_KP_MULTIPLY }, + { XK_KP_Divide, KEY_KP_DIVIDE }, + { XK_KP_Subtract, KEY_KP_SUBTRACT }, + { XK_KP_Add, KEY_KP_ADD }, + { XK_KP_0, KEY_KP_0 }, + { XK_KP_1, KEY_KP_1 }, + { XK_KP_2, KEY_KP_2 }, + { XK_KP_3, KEY_KP_3 }, + { XK_KP_4, KEY_KP_4 }, + { XK_KP_5, KEY_KP_5 }, + { XK_KP_6, KEY_KP_6 }, + { XK_KP_7, KEY_KP_7 }, + { XK_KP_8, KEY_KP_8 }, + { XK_KP_9, KEY_KP_9 }, // same but with numlock - { XK_KP_Insert, KEY_KP_0}, - { XK_KP_End, KEY_KP_1}, - { XK_KP_Down, KEY_KP_2}, - { XK_KP_Page_Down, KEY_KP_3}, - { XK_KP_Left, KEY_KP_4}, - { XK_KP_Begin, KEY_KP_5}, - { XK_KP_Right, KEY_KP_6}, - { XK_KP_Home, KEY_KP_7}, - { XK_KP_Up, KEY_KP_8}, - { XK_KP_Page_Up, KEY_KP_9}, - { XK_F1, KEY_F1}, - { XK_F2, KEY_F2}, - { XK_F3, KEY_F3}, - { XK_F4, KEY_F4}, - { XK_F5, KEY_F5}, - { XK_F6, KEY_F6}, - { XK_F7, KEY_F7}, - { XK_F8, KEY_F8}, - { XK_F9, KEY_F9}, - { XK_F10, KEY_F10}, - { XK_F11, KEY_F11}, - { XK_F12, KEY_F12}, - { XK_F13, KEY_F13}, - { XK_F14, KEY_F14}, - { XK_F15, KEY_F15}, - { XK_F16, KEY_F16}, + { XK_KP_Insert, KEY_KP_0 }, + { XK_KP_End, KEY_KP_1 }, + { XK_KP_Down, KEY_KP_2 }, + { XK_KP_Page_Down, KEY_KP_3 }, + { XK_KP_Left, KEY_KP_4 }, + { XK_KP_Begin, KEY_KP_5 }, + { XK_KP_Right, KEY_KP_6 }, + { XK_KP_Home, KEY_KP_7 }, + { XK_KP_Up, KEY_KP_8 }, + { XK_KP_Page_Up, KEY_KP_9 }, + { XK_F1, KEY_F1 }, + { XK_F2, KEY_F2 }, + { XK_F3, KEY_F3 }, + { XK_F4, KEY_F4 }, + { XK_F5, KEY_F5 }, + { XK_F6, KEY_F6 }, + { XK_F7, KEY_F7 }, + { XK_F8, KEY_F8 }, + { XK_F9, KEY_F9 }, + { XK_F10, KEY_F10 }, + { XK_F11, KEY_F11 }, + { XK_F12, KEY_F12 }, + { XK_F13, KEY_F13 }, + { XK_F14, KEY_F14 }, + { XK_F15, KEY_F15 }, + { XK_F16, KEY_F16 }, - // media keys - { XF86XK_Back, KEY_BACK }, - { XF86XK_Forward, KEY_FORWARD }, - { XF86XK_Stop, KEY_STOP }, - { XF86XK_Refresh, KEY_REFRESH }, - { XF86XK_Favorites, KEY_FAVORITES }, - { XF86XK_AudioMedia, KEY_LAUNCHMEDIA }, - { XF86XK_OpenURL, KEY_OPENURL }, - { XF86XK_HomePage, KEY_HOMEPAGE }, - { XF86XK_Search, KEY_SEARCH }, - { XF86XK_AudioLowerVolume, KEY_VOLUMEDOWN }, - { XF86XK_AudioMute, KEY_VOLUMEMUTE }, - { XF86XK_AudioRaiseVolume, KEY_VOLUMEUP }, - { XF86XK_AudioPlay, KEY_MEDIAPLAY }, - { XF86XK_AudioStop, KEY_MEDIASTOP }, - { XF86XK_AudioPrev, KEY_MEDIAPREVIOUS }, - { XF86XK_AudioNext, KEY_MEDIANEXT }, - { XF86XK_AudioRecord, KEY_MEDIARECORD }, + // media keys + { XF86XK_Back, KEY_BACK }, + { XF86XK_Forward, KEY_FORWARD }, + { XF86XK_Stop, KEY_STOP }, + { XF86XK_Refresh, KEY_REFRESH }, + { XF86XK_Favorites, KEY_FAVORITES }, + { XF86XK_AudioMedia, KEY_LAUNCHMEDIA }, + { XF86XK_OpenURL, KEY_OPENURL }, + { XF86XK_HomePage, KEY_HOMEPAGE }, + { XF86XK_Search, KEY_SEARCH }, + { XF86XK_AudioLowerVolume, KEY_VOLUMEDOWN }, + { XF86XK_AudioMute, KEY_VOLUMEMUTE }, + { XF86XK_AudioRaiseVolume, KEY_VOLUMEUP }, + { XF86XK_AudioPlay, KEY_MEDIAPLAY }, + { XF86XK_AudioStop, KEY_MEDIASTOP }, + { XF86XK_AudioPrev, KEY_MEDIAPREVIOUS }, + { XF86XK_AudioNext, KEY_MEDIANEXT }, + { XF86XK_AudioRecord, KEY_MEDIARECORD }, - // launch keys - { XF86XK_Mail, KEY_LAUNCHMAIL }, - { XF86XK_MyComputer, KEY_LAUNCH0 }, - { XF86XK_Calculator, KEY_LAUNCH1 }, - { XF86XK_Standby, KEY_STANDBY }, + // launch keys + { XF86XK_Mail, KEY_LAUNCHMAIL }, + { XF86XK_MyComputer, KEY_LAUNCH0 }, + { XF86XK_Calculator, KEY_LAUNCH1 }, + { XF86XK_Standby, KEY_STANDBY }, - { XF86XK_Launch0, KEY_LAUNCH2 }, - { XF86XK_Launch1, KEY_LAUNCH3 }, - { XF86XK_Launch2, KEY_LAUNCH4 }, - { XF86XK_Launch3, KEY_LAUNCH5 }, - { XF86XK_Launch4, KEY_LAUNCH6 }, - { XF86XK_Launch5, KEY_LAUNCH7 }, - { XF86XK_Launch6, KEY_LAUNCH8 }, - { XF86XK_Launch7, KEY_LAUNCH9 }, - { XF86XK_Launch8, KEY_LAUNCHA }, - { XF86XK_Launch9, KEY_LAUNCHB }, - { XF86XK_LaunchA, KEY_LAUNCHC }, - { XF86XK_LaunchB, KEY_LAUNCHD }, - { XF86XK_LaunchC, KEY_LAUNCHE }, - { XF86XK_LaunchD, KEY_LAUNCHF }, + { XF86XK_Launch0, KEY_LAUNCH2 }, + { XF86XK_Launch1, KEY_LAUNCH3 }, + { XF86XK_Launch2, KEY_LAUNCH4 }, + { XF86XK_Launch3, KEY_LAUNCH5 }, + { XF86XK_Launch4, KEY_LAUNCH6 }, + { XF86XK_Launch5, KEY_LAUNCH7 }, + { XF86XK_Launch6, KEY_LAUNCH8 }, + { XF86XK_Launch7, KEY_LAUNCH9 }, + { XF86XK_Launch8, KEY_LAUNCHA }, + { XF86XK_Launch9, KEY_LAUNCHB }, + { XF86XK_LaunchA, KEY_LAUNCHC }, + { XF86XK_LaunchB, KEY_LAUNCHD }, + { XF86XK_LaunchC, KEY_LAUNCHE }, + { XF86XK_LaunchD, KEY_LAUNCHF }, - {0, 0 } + { 0, 0 } }; - unsigned int KeyMappingX11::get_keycode(KeySym p_keysym) { // kinda bruteforce.. could optimize. - if (p_keysym<0x100) // Latin 1, maps 1-1 + if (p_keysym < 0x100) // Latin 1, maps 1-1 return p_keysym; // look for special key - for(int idx=0;_xkeysym_to_keycode[idx].keysym!=0;idx++) { + for (int idx = 0; _xkeysym_to_keycode[idx].keysym != 0; idx++) { - if (_xkeysym_to_keycode[idx].keysym==p_keysym) - return _xkeysym_to_keycode[idx].keycode; + if (_xkeysym_to_keycode[idx].keysym == p_keysym) + return _xkeysym_to_keycode[idx].keycode; } return 0; @@ -202,20 +200,19 @@ KeySym KeyMappingX11::get_keysym(unsigned int p_code) { // kinda bruteforce.. could optimize. - if (p_code<0x100) // Latin 1, maps 1-1 + if (p_code < 0x100) // Latin 1, maps 1-1 return p_code; // look for special key - for(int idx=0;_xkeysym_to_keycode[idx].keysym!=0;idx++) { + for (int idx = 0; _xkeysym_to_keycode[idx].keysym != 0; idx++) { - if (_xkeysym_to_keycode[idx].keycode==p_code) - return _xkeysym_to_keycode[idx].keysym; + if (_xkeysym_to_keycode[idx].keycode == p_code) + return _xkeysym_to_keycode[idx].keysym; } return 0; } - /***** UNICODE CONVERSION ******/ // Tables taken from FOX toolkit @@ -228,7 +225,7 @@ struct _XTranslateUnicodePair { enum { - _KEYSYM_MAX=759 + _KEYSYM_MAX = 759 }; static _XTranslateUnicodePair _xkeysym_to_unicode[_KEYSYM_MAX] = { @@ -995,32 +992,31 @@ static _XTranslateUnicodePair _xkeysym_to_unicode[_KEYSYM_MAX] = { unsigned int KeyMappingX11::get_unicode_from_keysym(KeySym p_keysym) { /* Latin-1 */ - if (p_keysym>=0x20 && p_keysym<=0x7e) + if (p_keysym >= 0x20 && p_keysym <= 0x7e) return p_keysym; - if (p_keysym>=0xa0 && p_keysym<=0xff) + if (p_keysym >= 0xa0 && p_keysym <= 0xff) return p_keysym; // keypad to latin1 is easy - if (p_keysym>=0xffaa && p_keysym<=0xffb9) - return p_keysym-0xff80; + if (p_keysym >= 0xffaa && p_keysym <= 0xffb9) + return p_keysym - 0xff80; /* Unicode (may be present)*/ - if((p_keysym&0xff000000)==0x01000000) - return p_keysym&0x00ffffff; + if ((p_keysym & 0xff000000) == 0x01000000) + return p_keysym & 0x00ffffff; - int middle,low=0,high=_KEYSYM_MAX-1; + int middle, low = 0, high = _KEYSYM_MAX - 1; do { - middle=(high+low)/2; - if ( _xkeysym_to_unicode[middle].keysym==p_keysym) + middle = (high + low) / 2; + if (_xkeysym_to_unicode[middle].keysym == p_keysym) return _xkeysym_to_unicode[middle].unicode; - if ( _xkeysym_to_unicode[middle].keysym<=p_keysym ) - low=middle+1; + if (_xkeysym_to_unicode[middle].keysym <= p_keysym) + low = middle + 1; else - high=middle-1; - } while (high>=low); + high = middle - 1; + } while (high >= low); return 0; - } struct _XTranslateUnicodePairReverse { @@ -1031,7 +1027,7 @@ struct _XTranslateUnicodePairReverse { enum { - _UNICODE_MAX=750 + _UNICODE_MAX = 750 }; static _XTranslateUnicodePairReverse _unicode_to_xkeysym[_UNICODE_MAX] = { @@ -1791,23 +1787,23 @@ KeySym KeyMappingX11::get_keysym_from_unicode(unsigned int p_unicode) { /* Latin 1 */ - if (p_unicode>=0x20 && p_unicode<=0x7e) + if (p_unicode >= 0x20 && p_unicode <= 0x7e) return p_unicode; - if (p_unicode>=0xa0 && p_unicode<=0xff) + if (p_unicode >= 0xa0 && p_unicode <= 0xff) return p_unicode; - int middle,low=0,high=_UNICODE_MAX-1; + int middle, low = 0, high = _UNICODE_MAX - 1; do { - middle=(high+low)/2; - if ( _unicode_to_xkeysym[middle].keysym==p_unicode) + middle = (high + low) / 2; + if (_unicode_to_xkeysym[middle].keysym == p_unicode) return _unicode_to_xkeysym[middle].keysym; - if ( _unicode_to_xkeysym[middle].keysym<=p_unicode ) - low=middle+1; + if (_unicode_to_xkeysym[middle].keysym <= p_unicode) + low = middle + 1; else - high=middle-1; - } while (high>=low); + high = middle - 1; + } while (high >= low); // if not found, let's hope X understands it as unicode - return p_unicode|0x01000000; + return p_unicode | 0x01000000; } diff --git a/platform/x11/key_mapping_x11.h b/platform/x11/key_mapping_x11.h index 9749b2ec2a..8210df06e7 100644 --- a/platform/x11/key_mapping_x11.h +++ b/platform/x11/key_mapping_x11.h @@ -32,8 +32,8 @@ /** @author Juan Linietsky <reduzio@gmail.com> */ -#include <X11/Xlib.h> #include <X11/XF86keysym.h> +#include <X11/Xlib.h> #define XK_MISCELLANY #define XK_LATIN1 #define XK_XKB_KEYS @@ -42,14 +42,13 @@ #include "os/keyboard.h" class KeyMappingX11 { - KeyMappingX11() {}; + KeyMappingX11(){}; + public: static unsigned int get_keycode(KeySym p_keysym); static KeySym get_keysym(unsigned int p_code); static unsigned int get_unicode_from_keysym(KeySym p_keysym); static KeySym get_keysym_from_unicode(unsigned int p_unicode); - }; - #endif diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 689fe076f1..4f79f2fb5d 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -26,45 +26,42 @@ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "servers/visual/visual_server_raster.h" -#include "drivers/gles3/rasterizer_gles3.h" #include "os_x11.h" +#include "drivers/gles3/rasterizer_gles3.h" +#include "errno.h" #include "key_mapping_x11.h" +#include "print_string.h" +#include "servers/physics/physics_server_sw.h" +#include "servers/visual/visual_server_raster.h" #include <stdio.h> #include <stdlib.h> #include <string.h> -#include "print_string.h" -#include "servers/physics/physics_server_sw.h" -#include "errno.h" #include "X11/Xutil.h" #include "X11/Xatom.h" #include "X11/extensions/Xinerama.h" // ICCCM -#define WM_NormalState 1L // window normal state -#define WM_IconicState 3L // window minimized +#define WM_NormalState 1L // window normal state +#define WM_IconicState 3L // window minimized // EWMH -#define _NET_WM_STATE_REMOVE 0L // remove/unset property -#define _NET_WM_STATE_ADD 1L // add/set property -#define _NET_WM_STATE_TOGGLE 2L // toggle property +#define _NET_WM_STATE_REMOVE 0L // remove/unset property +#define _NET_WM_STATE_ADD 1L // add/set property +#define _NET_WM_STATE_TOGGLE 2L // toggle property #include "main/main.h" - - -#include <sys/types.h> -#include <sys/stat.h> +#include <dlfcn.h> #include <fcntl.h> +#include <sys/stat.h> +#include <sys/types.h> #include <unistd.h> -#include <dlfcn.h> //stupid linux.h #ifdef KEY_TAB #undef KEY_TAB #endif - #include <X11/Xatom.h> #undef CursorShape @@ -73,75 +70,73 @@ int OS_X11::get_video_driver_count() const { return 1; } -const char * OS_X11::get_video_driver_name(int p_driver) const { +const char *OS_X11::get_video_driver_name(int p_driver) const { return "GLES3"; } OS::VideoMode OS_X11::get_default_video_mode() const { - return OS::VideoMode(1024,600,false); + return OS::VideoMode(1024, 600, false); } int OS_X11::get_audio_driver_count() const { - return AudioDriverManager::get_driver_count(); + return AudioDriverManager::get_driver_count(); } const char *OS_X11::get_audio_driver_name(int p_driver) const { - AudioDriver* driver = AudioDriverManager::get_driver(p_driver); - ERR_FAIL_COND_V( !driver, "" ); - return AudioDriverManager::get_driver(p_driver)->get_name(); + AudioDriver *driver = AudioDriverManager::get_driver(p_driver); + ERR_FAIL_COND_V(!driver, ""); + return AudioDriverManager::get_driver(p_driver)->get_name(); } -void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) { +void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { - last_button_state=0; + last_button_state = 0; - xmbstring=NULL; - event_id=0; - x11_window=0; - last_click_ms=0; - args=OS::get_singleton()->get_cmdline_args(); - current_videomode=p_desired; - main_loop=NULL; - last_timestamp=0; - last_mouse_pos_valid=false; - last_keyrelease_time=0; + xmbstring = NULL; + event_id = 0; + x11_window = 0; + last_click_ms = 0; + args = OS::get_singleton()->get_cmdline_args(); + current_videomode = p_desired; + main_loop = NULL; + last_timestamp = 0; + last_mouse_pos_valid = false; + last_keyrelease_time = 0; xdnd_version = 0; - if (get_render_thread_mode()==RENDER_SEPARATE_THREAD) { + if (get_render_thread_mode() == RENDER_SEPARATE_THREAD) { XInitThreads(); } /** XLIB INITIALIZATION **/ x11_display = XOpenDisplay(NULL); - char * modifiers = XSetLocaleModifiers ("@im=none"); - if (modifiers==NULL) { + char *modifiers = XSetLocaleModifiers("@im=none"); + if (modifiers == NULL) { WARN_PRINT("Error setting locale modifiers"); } - const char* err; + const char *err; xrr_get_monitors = NULL; xrr_free_monitors = NULL; int xrandr_major = 0; int xrandr_minor = 0; int event_base, error_base; - xrandr_ext_ok = XRRQueryExtension(x11_display,&event_base, &error_base); + xrandr_ext_ok = XRRQueryExtension(x11_display, &event_base, &error_base); xrandr_handle = dlopen("libXrandr.so.2", RTLD_LAZY); if (!xrandr_handle) { err = dlerror(); fprintf(stderr, "could not load libXrandr.so.2, Error: %s\n", err); - } - else { + } else { XRRQueryVersion(x11_display, &xrandr_major, &xrandr_minor); if (((xrandr_major << 8) | xrandr_minor) >= 0x0105) { - xrr_get_monitors = (xrr_get_monitors_t) dlsym(xrandr_handle, "XRRGetMonitors"); + xrr_get_monitors = (xrr_get_monitors_t)dlsym(xrandr_handle, "XRRGetMonitors"); if (!xrr_get_monitors) { err = dlerror(); fprintf(stderr, "could not find symbol XRRGetMonitors\nError: %s\n", err); - } - else { - xrr_free_monitors = (xrr_free_monitors_t) dlsym(xrandr_handle, "XRRFreeMonitors"); + } else { + xrr_free_monitors = (xrr_free_monitors_t)dlsym(xrandr_handle, "XRRFreeMonitors"); if (!xrr_free_monitors) { err = dlerror(); fprintf(stderr, "could not find XRRFreeMonitors\nError: %s\n", err); @@ -151,39 +146,38 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi } } - xim = XOpenIM (x11_display, NULL, NULL, NULL); - + xim = XOpenIM(x11_display, NULL, NULL, NULL); if (xim == NULL) { WARN_PRINT("XOpenIM failed"); - xim_style=0L; + xim_style = 0L; } else { - ::XIMStyles *xim_styles=NULL; - xim_style=0L; - char *imvalret=NULL; + ::XIMStyles *xim_styles = NULL; + xim_style = 0L; + char *imvalret = NULL; imvalret = XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL); if (imvalret != NULL || xim_styles == NULL) { - fprintf (stderr, "Input method doesn't support any styles\n"); + fprintf(stderr, "Input method doesn't support any styles\n"); } if (xim_styles) { xim_style = 0L; - for (int i=0;i<xim_styles->count_styles;i++) { + for (int i = 0; i < xim_styles->count_styles; i++) { if (xim_styles->supported_styles[i] == - (XIMPreeditNothing | XIMStatusNothing)) { + (XIMPreeditNothing | XIMStatusNothing)) { - xim_style = xim_styles->supported_styles[i]; - break; - } + xim_style = xim_styles->supported_styles[i]; + break; + } } - XFree (xim_styles); + XFree(xim_styles); } - XFree( imvalret ); + XFree(imvalret); } - /* +/* char* windowid = getenv("GODOT_WINDOWID"); if (windowid) { @@ -199,12 +193,11 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi }; */ - // maybe contextgl wants to be in charge of creating the window - //print_line("def videomode "+itos(current_videomode.width)+","+itos(current_videomode.height)); +// maybe contextgl wants to be in charge of creating the window +//print_line("def videomode "+itos(current_videomode.width)+","+itos(current_videomode.height)); #if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) - - context_gl = memnew( ContextGL_X11( x11_display, x11_window,current_videomode, true ) ); + context_gl = memnew(ContextGL_X11(x11_display, x11_window, current_videomode, true)); context_gl->initialize(); RasterizerGLES3::register_config(); @@ -212,7 +205,7 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi RasterizerGLES3::make_current(); #endif - visual_server = memnew( VisualServerRaster ); + visual_server = memnew(VisualServerRaster); #if 0 if (get_render_thread_mode()!=RENDER_THREAD_UNSAFE) { @@ -221,7 +214,7 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi #endif // borderless fullscreen window mode if (current_videomode.fullscreen) { - // needed for lxde/openbox, possibly others + // needed for lxde/openbox, possibly others Hints hints; Atom property; hints.flags = 2; @@ -257,9 +250,9 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi xsh->flags = PMinSize | PMaxSize; XWindowAttributes xwa; if (current_videomode.fullscreen) { - XGetWindowAttributes(x11_display,DefaultRootWindow(x11_display),&xwa); + XGetWindowAttributes(x11_display, DefaultRootWindow(x11_display), &xwa); } else { - XGetWindowAttributes(x11_display,x11_window,&xwa); + XGetWindowAttributes(x11_display, x11_window, &xwa); } xsh->min_width = xwa.width; xsh->max_width = xwa.width; @@ -271,52 +264,49 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi AudioDriverManager::get_driver(p_audio_driver)->set_singleton(); - audio_driver_index=p_audio_driver; - if (AudioDriverManager::get_driver(p_audio_driver)->init()!=OK) { + audio_driver_index = p_audio_driver; + if (AudioDriverManager::get_driver(p_audio_driver)->init() != OK) { - bool success=false; - audio_driver_index=-1; - for(int i=0;i<AudioDriverManager::get_driver_count();i++) { - if (i==p_audio_driver) + bool success = false; + audio_driver_index = -1; + for (int i = 0; i < AudioDriverManager::get_driver_count(); i++) { + if (i == p_audio_driver) continue; AudioDriverManager::get_driver(i)->set_singleton(); - if (AudioDriverManager::get_driver(i)->init()==OK) { - success=true; - print_line("Audio Driver Failed: "+String(AudioDriverManager::get_driver(p_audio_driver)->get_name())); - print_line("Using alternate audio driver: "+String(AudioDriverManager::get_driver(i)->get_name())); - audio_driver_index=i; + if (AudioDriverManager::get_driver(i)->init() == OK) { + success = true; + print_line("Audio Driver Failed: " + String(AudioDriverManager::get_driver(p_audio_driver)->get_name())); + print_line("Using alternate audio driver: " + String(AudioDriverManager::get_driver(i)->get_name())); + audio_driver_index = i; break; } } if (!success) { ERR_PRINT("Initializing audio failed."); } - } - - ERR_FAIL_COND(!visual_server); - ERR_FAIL_COND(x11_window==0); + ERR_FAIL_COND(x11_window == 0); XSetWindowAttributes new_attr; - new_attr.event_mask=KeyPressMask | KeyReleaseMask | ButtonPressMask | - ButtonReleaseMask | EnterWindowMask | - LeaveWindowMask | PointerMotionMask | - Button1MotionMask | - Button2MotionMask | Button3MotionMask | - Button4MotionMask | Button5MotionMask | - ButtonMotionMask | KeymapStateMask | - ExposureMask | VisibilityChangeMask | - StructureNotifyMask | - SubstructureNotifyMask | SubstructureRedirectMask | - FocusChangeMask | PropertyChangeMask | - ColormapChangeMask | OwnerGrabButtonMask; + new_attr.event_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask | + ButtonReleaseMask | EnterWindowMask | + LeaveWindowMask | PointerMotionMask | + Button1MotionMask | + Button2MotionMask | Button3MotionMask | + Button4MotionMask | Button5MotionMask | + ButtonMotionMask | KeymapStateMask | + ExposureMask | VisibilityChangeMask | + StructureNotifyMask | + SubstructureNotifyMask | SubstructureRedirectMask | + FocusChangeMask | PropertyChangeMask | + ColormapChangeMask | OwnerGrabButtonMask; - XChangeWindowAttributes(x11_display, x11_window,CWEventMask,&new_attr); + XChangeWindowAttributes(x11_display, x11_window, CWEventMask, &new_attr); - XClassHint* classHint; + XClassHint *classHint; /* set the titlebar name */ XStoreName(x11_display, x11_window, "Godot"); @@ -333,39 +323,37 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi wm_delete = XInternAtom(x11_display, "WM_DELETE_WINDOW", true); XSetWMProtocols(x11_display, x11_window, &wm_delete, 1); - if (xim && xim_style) { - xic = XCreateIC (xim,XNInputStyle, xim_style,XNClientWindow,x11_window,XNFocusWindow, x11_window, (char*)NULL); + xic = XCreateIC(xim, XNInputStyle, xim_style, XNClientWindow, x11_window, XNFocusWindow, x11_window, (char *)NULL); } else { - xic=NULL; + xic = NULL; WARN_PRINT("XCreateIC couldn't create xic"); - } - XcursorSetTheme(x11_display,"default"); + XcursorSetTheme(x11_display, "default"); cursor_size = XcursorGetDefaultSize(x11_display); cursor_theme = XcursorGetTheme(x11_display); if (!cursor_theme) { print_line("not found theme"); - cursor_theme="default"; + cursor_theme = "default"; } - for(int i=0;i<CURSOR_MAX;i++) { + for (int i = 0; i < CURSOR_MAX; i++) { - cursors[i]=None; - img[i]=NULL; + cursors[i] = None; + img[i] = NULL; } - current_cursor=CURSOR_ARROW; + current_cursor = CURSOR_ARROW; if (cursor_theme) { //print_line("cursor theme: "+String(cursor_theme)); - for(int i=0;i<CURSOR_MAX;i++) { + for (int i = 0; i < CURSOR_MAX; i++) { - static const char *cursor_file[]={ + static const char *cursor_file[] = { "left_ptr", "xterm", "hand2", @@ -385,26 +373,25 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi "question_arrow" }; - img[i] = XcursorLibraryLoadImage(cursor_file[i],cursor_theme,cursor_size); + img[i] = XcursorLibraryLoadImage(cursor_file[i], cursor_theme, cursor_size); if (img[i]) { - cursors[i]=XcursorImageLoadCursor(x11_display,img[i]); + cursors[i] = XcursorImageLoadCursor(x11_display, img[i]); //print_line("found cursor: "+String(cursor_file[i])+" id "+itos(cursors[i])); } else { if (OS::is_stdout_verbose()) - print_line("failed cursor: "+String(cursor_file[i])); + print_line("failed cursor: " + String(cursor_file[i])); } } } - { Pixmap cursormask; - XGCValues xgc; - GC gc; - XColor col; - Cursor cursor; + XGCValues xgc; + GC gc; + XColor col; + Cursor cursor; - cursormask = XCreatePixmap(x11_display, RootWindow(x11_display,DefaultScreen(x11_display)), 1, 1, 1); + cursormask = XCreatePixmap(x11_display, RootWindow(x11_display, DefaultScreen(x11_display)), 1, 1, 1); xgc.function = GXclear; gc = XCreateGC(x11_display, cursormask, GCFunction, &xgc); XFillRectangle(x11_display, cursormask, gc, 0, 0, 1, 1); @@ -412,25 +399,23 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi col.red = 0; col.flags = 4; cursor = XCreatePixmapCursor(x11_display, - cursormask, cursormask, - &col, &col, 0, 0); - XFreePixmap(x11_display, cursormask); - XFreeGC(x11_display, gc); - + cursormask, cursormask, + &col, &col, 0, 0); + XFreePixmap(x11_display, cursormask); + XFreeGC(x11_display, gc); - if (cursor == None) - { - ERR_PRINT("FAILED CREATING CURSOR"); - } + if (cursor == None) { + ERR_PRINT("FAILED CREATING CURSOR"); + } - null_cursor=cursor; + null_cursor = cursor; } set_cursor_shape(CURSOR_BUSY); //Set Xdnd (drag & drop) support Atom XdndAware = XInternAtom(x11_display, "XdndAware", False); - Atom version=5; - XChangeProperty(x11_display, x11_window, XdndAware, XA_ATOM, 32, PropModeReplace, (unsigned char*)&version, 1); + Atom version = 5; + XChangeProperty(x11_display, x11_window, XdndAware, XA_ATOM, 32, PropModeReplace, (unsigned char *)&version, 1); xdnd_enter = XInternAtom(x11_display, "XdndEnter", False); xdnd_position = XInternAtom(x11_display, "XdndPosition", False); @@ -443,32 +428,32 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi visual_server->init(); // - 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); window_has_focus = true; // Set focus to true at init #ifdef JOYDEV_ENABLED - joypad = memnew( JoypadLinux(input)); + joypad = memnew(JoypadLinux(input)); #endif _ensure_data_dir(); } void OS_X11::finalize() { - if(main_loop) + if (main_loop) memdelete(main_loop); - main_loop=NULL; + main_loop = NULL; for (int i = 0; i < get_audio_driver_count(); i++) { AudioDriverManager::get_driver(i)->finish(); } - /* +/* if (debugger_connection_console) { memdelete(debugger_connection_console); } @@ -492,61 +477,58 @@ void OS_X11::finalize() { if (xrandr_handle) dlclose(xrandr_handle); - XUnmapWindow( x11_display, x11_window ); - XDestroyWindow( x11_display, x11_window ); + XUnmapWindow(x11_display, x11_window); + XDestroyWindow(x11_display, x11_window); #if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) memdelete(context_gl); #endif - for(int i=0;i<CURSOR_MAX;i++) { - if( cursors[i] != None ) - XFreeCursor( x11_display, cursors[i] ); - if( img[i] != NULL ) - XcursorImageDestroy( img[i] ); + for (int i = 0; i < CURSOR_MAX; i++) { + if (cursors[i] != None) + XFreeCursor(x11_display, cursors[i]); + if (img[i] != NULL) + XcursorImageDestroy(img[i]); }; - XDestroyIC( xic ); - XCloseIM( xim ); + XDestroyIC(xic); + XCloseIM(xim); XCloseDisplay(x11_display); if (xmbstring) memfree(xmbstring); - args.clear(); - } - void OS_X11::set_mouse_mode(MouseMode p_mode) { - if (p_mode==mouse_mode) + if (p_mode == mouse_mode) return; - if (mouse_mode==MOUSE_MODE_CAPTURED || mouse_mode==MOUSE_MODE_CONFINED) + if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) XUngrabPointer(x11_display, CurrentTime); // The only modes that show a cursor are VISIBLE and CONFINED bool showCursor = (p_mode == MOUSE_MODE_VISIBLE || p_mode == MOUSE_MODE_CONFINED); if (showCursor) { - XUndefineCursor(x11_display,x11_window); // show cursor + XUndefineCursor(x11_display, x11_window); // show cursor } else { - XDefineCursor(x11_display,x11_window,null_cursor); // hide cursor + XDefineCursor(x11_display, x11_window, null_cursor); // hide cursor } - mouse_mode=p_mode; + mouse_mode = p_mode; - if (mouse_mode==MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { + if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED) { - while(true) { + while (true) { //flush pending motion events if (XPending(x11_display) > 0) { XEvent event; XPeekEvent(x11_display, &event); - if (event.type==MotionNotify) { - XNextEvent(x11_display,&event); + if (event.type == MotionNotify) { + XNextEvent(x11_display, &event); } else { break; } @@ -556,30 +538,30 @@ void OS_X11::set_mouse_mode(MouseMode p_mode) { } if (XGrabPointer( - x11_display, x11_window, True, - ButtonPressMask | ButtonReleaseMask | PointerMotionMask, - GrabModeAsync, GrabModeAsync, x11_window, None, CurrentTime) != GrabSuccess) { + x11_display, x11_window, True, + ButtonPressMask | ButtonReleaseMask | PointerMotionMask, + GrabModeAsync, GrabModeAsync, x11_window, None, CurrentTime) != GrabSuccess) { ERR_PRINT("NO GRAB"); } - center.x = current_videomode.width/2; - center.y = current_videomode.height/2; + center.x = current_videomode.width / 2; + center.y = current_videomode.height / 2; XWarpPointer(x11_display, None, x11_window, - 0,0,0,0, (int)center.x, (int)center.y); + 0, 0, 0, 0, (int)center.x, (int)center.y); input->set_mouse_pos(center); } else { - do_mouse_warp=false; + do_mouse_warp = false; } XFlush(x11_display); } -void OS_X11::warp_mouse_pos(const Point2& p_to) { +void OS_X11::warp_mouse_pos(const Point2 &p_to) { - if (mouse_mode==MOUSE_MODE_CAPTURED) { + if (mouse_mode == MOUSE_MODE_CAPTURED) { - last_mouse_pos=p_to; + last_mouse_pos = p_to; } else { /*XWindowAttributes xwa; @@ -587,9 +569,8 @@ void OS_X11::warp_mouse_pos(const Point2& p_to) { printf("%d %d\n", xwa.x, xwa.y); needed? */ XWarpPointer(x11_display, None, x11_window, - 0,0,0,0, (int)p_to.x , (int)p_to.y); + 0, 0, 0, 0, (int)p_to.x, (int)p_to.y); } - } OS::MouseMode OS_X11::get_mouse_mode() const { @@ -604,22 +585,22 @@ Point2 OS_X11::get_mouse_pos() const { return last_mouse_pos; } -void OS_X11::set_window_title(const String& p_title) { - XStoreName(x11_display,x11_window,p_title.utf8().get_data()); +void OS_X11::set_window_title(const String &p_title) { + XStoreName(x11_display, x11_window, p_title.utf8().get_data()); Atom _net_wm_name = XInternAtom(x11_display, "_NET_WM_NAME", false); Atom utf8_string = XInternAtom(x11_display, "UTF8_STRING", false); - XChangeProperty( x11_display, x11_window, _net_wm_name, utf8_string, 8, PropModeReplace, (unsigned char*) p_title.utf8().get_data(), p_title.utf8().length()); + XChangeProperty(x11_display, x11_window, _net_wm_name, utf8_string, 8, PropModeReplace, (unsigned char *)p_title.utf8().get_data(), p_title.utf8().length()); } -void OS_X11::set_video_mode(const VideoMode& p_video_mode,int p_screen) { +void OS_X11::set_video_mode(const VideoMode &p_video_mode, int p_screen) { } OS::VideoMode OS_X11::get_video_mode(int p_screen) const { return current_videomode; } -void OS_X11::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const { +void OS_X11::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const { } void OS_X11::set_wm_fullscreen(bool p_enabled) { @@ -638,31 +619,30 @@ void OS_X11::set_wm_fullscreen(bool p_enabled) { xev.xclient.data.l[2] = 0; XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); - } int OS_X11::get_screen_count() const { // Using Xinerama Extension int event_base, error_base; const Bool ext_okay = XineramaQueryExtension(x11_display, &event_base, &error_base); - if( !ext_okay ) return 0; + if (!ext_okay) return 0; int count; - XineramaScreenInfo* xsi = XineramaQueryScreens(x11_display, &count); + XineramaScreenInfo *xsi = XineramaQueryScreens(x11_display, &count); XFree(xsi); return count; } int OS_X11::get_current_screen() const { - int x,y; - Window child; - XTranslateCoordinates( x11_display, x11_window, DefaultRootWindow(x11_display), 0, 0, &x, &y, &child); + int x, y; + Window child; + XTranslateCoordinates(x11_display, x11_window, DefaultRootWindow(x11_display), 0, 0, &x, &y, &child); int count = get_screen_count(); - for(int i=0; i<count; i++) { + for (int i = 0; i < count; i++) { Point2i pos = get_screen_position(i); Size2i size = get_screen_size(i); - if( (x >= pos.x && x <pos.x + size.width) && (y >= pos.y && y < pos.y + size.height) ) + if ((x >= pos.x && x < pos.x + size.width) && (y >= pos.y && y < pos.y + size.height)) return i; } return 0; @@ -670,16 +650,15 @@ int OS_X11::get_current_screen() const { void OS_X11::set_current_screen(int p_screen) { int count = get_screen_count(); - if(p_screen >= count) return; + if (p_screen >= count) return; - if( current_videomode.fullscreen ) { + if (current_videomode.fullscreen) { Point2i position = get_screen_position(p_screen); Size2i size = get_screen_size(p_screen); - XMoveResizeWindow(x11_display, x11_window, position.x, position.y, size.x, size.y); - } - else { - if( p_screen != get_current_screen() ) { + XMoveResizeWindow(x11_display, x11_window, position.x, position.y, size.x, size.y); + } else { + if (p_screen != get_current_screen()) { Point2i position = get_screen_position(p_screen); XMoveWindow(x11_display, x11_window, position.x, position.y); } @@ -690,14 +669,14 @@ Point2 OS_X11::get_screen_position(int p_screen) const { // Using Xinerama Extension int event_base, error_base; const Bool ext_okay = XineramaQueryExtension(x11_display, &event_base, &error_base); - if( !ext_okay ) { - return Point2i(0,0); + if (!ext_okay) { + return Point2i(0, 0); } int count; - XineramaScreenInfo* xsi = XineramaQueryScreens(x11_display, &count); - if( p_screen >= count ) { - return Point2i(0,0); + XineramaScreenInfo *xsi = XineramaQueryScreens(x11_display, &count); + if (p_screen >= count) { + return Point2i(0, 0); } Point2i position = Point2i(xsi[p_screen].x_org, xsi[p_screen].y_org); @@ -711,11 +690,11 @@ Size2 OS_X11::get_screen_size(int p_screen) const { // Using Xinerama Extension int event_base, error_base; const Bool ext_okay = XineramaQueryExtension(x11_display, &event_base, &error_base); - if( !ext_okay ) return Size2i(0,0); + if (!ext_okay) return Size2i(0, 0); int count; - XineramaScreenInfo* xsi = XineramaQueryScreens(x11_display, &count); - if( p_screen >= count ) return Size2i(0,0); + XineramaScreenInfo *xsi = XineramaQueryScreens(x11_display, &count); + if (p_screen >= count) return Size2i(0, 0); Size2i size = Point2i(xsi[p_screen].width, xsi[p_screen].height); XFree(xsi); @@ -734,47 +713,46 @@ int OS_X11::get_screen_dpi(int p_screen) const { if (xrr_get_monitors) { xrr_monitor_info *monitors = xrr_get_monitors(x11_display, x11_window, true, &count); if (p_screen < count) { - double xdpi = sc.width / (double) monitors[p_screen].mwidth * 25.4; - double ydpi = sc.height / (double) monitors[p_screen].mheight * 25.4; + double xdpi = sc.width / (double)monitors[p_screen].mwidth * 25.4; + double ydpi = sc.height / (double)monitors[p_screen].mheight * 25.4; xrr_free_monitors(monitors); return (xdpi + ydpi) / 2; } xrr_free_monitors(monitors); - } - else if (p_screen == 0) { + } else if (p_screen == 0) { XRRScreenSize *sizes = XRRSizes(x11_display, 0, &count); if (sizes) { - double xdpi = sc.width / (double) sizes[0].mwidth * 25.4; - double ydpi = sc.height / (double) sizes[0].mheight * 25.4; + double xdpi = sc.width / (double)sizes[0].mwidth * 25.4; + double ydpi = sc.height / (double)sizes[0].mheight * 25.4; return (xdpi + ydpi) / 2; } } } - int width_mm = DisplayWidthMM(x11_display, p_screen); + int width_mm = DisplayWidthMM(x11_display, p_screen); int height_mm = DisplayHeightMM(x11_display, p_screen); - double xdpi = (width_mm ? sc.width / (double) width_mm * 25.4 : 0); - double ydpi = (height_mm ? sc.height / (double) height_mm * 25.4 : 0); + double xdpi = (width_mm ? sc.width / (double)width_mm * 25.4 : 0); + double ydpi = (height_mm ? sc.height / (double)height_mm * 25.4 : 0); if (xdpi || xdpi) - return (xdpi + ydpi)/(xdpi && ydpi ? 2 : 1); + return (xdpi + ydpi) / (xdpi && ydpi ? 2 : 1); //could not get dpi return 96; } Point2 OS_X11::get_window_position() const { - int x,y; + int x, y; Window child; - XTranslateCoordinates( x11_display, x11_window, DefaultRootWindow(x11_display), 0, 0, &x, &y, &child); + XTranslateCoordinates(x11_display, x11_window, DefaultRootWindow(x11_display), 0, 0, &x, &y, &child); int screen = get_current_screen(); Point2i screen_position = get_screen_position(screen); - return Point2i(x-screen_position.x, y-screen_position.y); + return Point2i(x - screen_position.x, y - screen_position.y); } -void OS_X11::set_window_position(const Point2& p_position) { - XMoveWindow(x11_display,x11_window,p_position.x,p_position.y); +void OS_X11::set_window_position(const Point2 &p_position) { + XMoveWindow(x11_display, x11_window, p_position.x, p_position.y); } Size2 OS_X11::get_window_size() const { @@ -820,7 +798,7 @@ void OS_X11::set_window_resizable(bool p_enabled) { xsh = XAllocSizeHints(); xsh->flags = p_enabled ? 0L : PMinSize | PMaxSize; - if(!p_enabled) { + if (!p_enabled) { xsh->min_width = size.x; xsh->max_width = size.x; xsh->min_height = size.y; @@ -849,8 +827,8 @@ void OS_X11::set_window_minimized(bool p_enabled) { XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); - Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False); - Atom wm_hidden = XInternAtom(x11_display, "_NET_WM_STATE_HIDDEN", False); + Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False); + Atom wm_hidden = XInternAtom(x11_display, "_NET_WM_STATE_HIDDEN", False); memset(&xev, 0, sizeof(xev)); xev.type = ClientMessage; @@ -865,31 +843,30 @@ void OS_X11::set_window_minimized(bool p_enabled) { bool OS_X11::is_window_minimized() const { // Using ICCCM -- Inter-Client Communication Conventions Manual - Atom property = XInternAtom(x11_display,"WM_STATE", True); - Atom type; - int format; - unsigned long len; - unsigned long remaining; - unsigned char *data = NULL; - - int result = XGetWindowProperty( - x11_display, - x11_window, - property, - 0, - 32, - False, - AnyPropertyType, - &type, - &format, - &len, - &remaining, - &data - ); - - if( result == Success ) { - long *state = (long *) data; - if( state[0] == WM_IconicState ) + Atom property = XInternAtom(x11_display, "WM_STATE", True); + Atom type; + int format; + unsigned long len; + unsigned long remaining; + unsigned char *data = NULL; + + int result = XGetWindowProperty( + x11_display, + x11_window, + property, + 0, + 32, + False, + AnyPropertyType, + &type, + &format, + &len, + &remaining, + &data); + + if (result == Success) { + long *state = (long *)data; + if (state[0] == WM_IconicState) return true; } return false; @@ -918,7 +895,7 @@ void OS_X11::set_window_maximized(bool p_enabled) { bool OS_X11::is_window_maximized() const { // Using EWMH -- Extended Window Manager Hints - Atom property = XInternAtom(x11_display,"_NET_WM_STATE",False ); + Atom property = XInternAtom(x11_display, "_NET_WM_STATE", False); Atom type; int format; unsigned long len; @@ -937,23 +914,22 @@ bool OS_X11::is_window_maximized() const { &format, &len, &remaining, - &data - ); + &data); - if(result == Success) { - Atom *atoms = (Atom*) data; + if (result == Success) { + Atom *atoms = (Atom *)data; Atom wm_max_horz = XInternAtom(x11_display, "_NET_WM_STATE_MAXIMIZED_HORZ", False); Atom wm_max_vert = XInternAtom(x11_display, "_NET_WM_STATE_MAXIMIZED_VERT", False); bool found_wm_max_horz = false; bool found_wm_max_vert = false; - for( unsigned int i=0; i < len; i++ ) { - if( atoms[i] == wm_max_horz ) + for (unsigned int i = 0; i < len; i++) { + if (atoms[i] == wm_max_horz) found_wm_max_horz = true; - if( atoms[i] == wm_max_vert ) + if (atoms[i] == wm_max_vert) found_wm_max_vert = true; - if( found_wm_max_horz && found_wm_max_vert ) + if (found_wm_max_horz && found_wm_max_vert) return true; } XFree(atoms); @@ -987,44 +963,44 @@ InputModifierState OS_X11::get_key_modifier_state(unsigned int p_x11_state) { InputModifierState state; - state.shift = (p_x11_state&ShiftMask); - state.control = (p_x11_state&ControlMask); - state.alt = (p_x11_state&Mod1Mask /*|| p_x11_state&Mod5Mask*/); //altgr should not count as alt - state.meta = (p_x11_state&Mod4Mask); + state.shift = (p_x11_state & ShiftMask); + state.control = (p_x11_state & ControlMask); + state.alt = (p_x11_state & Mod1Mask /*|| p_x11_state&Mod5Mask*/); //altgr should not count as alt + state.meta = (p_x11_state & Mod4Mask); return state; } unsigned int OS_X11::get_mouse_button_state(unsigned int p_x11_state) { - unsigned int state=0; + unsigned int state = 0; - if (p_x11_state&Button1Mask) { + if (p_x11_state & Button1Mask) { - state|=1<<0; + state |= 1 << 0; } - if (p_x11_state&Button3Mask) { + if (p_x11_state & Button3Mask) { - state|=1<<1; + state |= 1 << 1; } - if (p_x11_state&Button2Mask) { + if (p_x11_state & Button2Mask) { - state|=1<<2; + state |= 1 << 2; } - if (p_x11_state&Button4Mask) { + if (p_x11_state & Button4Mask) { - state|=1<<3; + state |= 1 << 3; } - if (p_x11_state&Button5Mask) { + if (p_x11_state & Button5Mask) { - state|=1<<4; + state |= 1 << 4; } - last_button_state=state; + last_button_state = state; return state; } @@ -1052,20 +1028,19 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { // you want to keep. // This is a real bizarreness and cpu waster. - KeySym keysym_keycode=0; // keysym used to find a keycode - KeySym keysym_unicode=0; // keysym used to find unicode + KeySym keysym_keycode = 0; // keysym used to find a keycode + KeySym keysym_unicode = 0; // keysym used to find unicode // XLookupString returns keysyms usable as nice scancodes/ - char str[256+1]; + char str[256 + 1]; XLookupString(xkeyevent, str, 256, &keysym_keycode, NULL); - // Meanwhile, XLookupString returns keysyms useful for unicode. - + // Meanwhile, XLookupString returns keysyms useful for unicode. if (!xmbstring) { // keep a temporary buffer for the string - xmbstring=(char*)memalloc(sizeof(char)*8); - xmblen=8; + xmbstring = (char *)memalloc(sizeof(char) * 8); + xmblen = 8; } if (xkeyevent->type == KeyPress && xic) { @@ -1073,17 +1048,16 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { Status status; do { - int mnbytes = XmbLookupString (xic, xkeyevent, xmbstring, xmblen - 1, &keysym_unicode, &status); + int mnbytes = XmbLookupString(xic, xkeyevent, xmbstring, xmblen - 1, &keysym_unicode, &status); xmbstring[mnbytes] = '\0'; if (status == XBufferOverflow) { xmblen = mnbytes + 1; - xmbstring = (char*)memrealloc (xmbstring, xmblen); + xmbstring = (char *)memrealloc(xmbstring, xmblen); } } while (status == XBufferOverflow); } - /* Phase 2, obtain a pigui keycode from the keysym */ // KeyMappingX11 just translated the X11 keysym to a PIGUI @@ -1097,8 +1071,7 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { // It does a binary search on a table to translate // most properly. //print_line("keysym_unicode: "+rtos(keysym_unicode)); - unsigned int unicode = keysym_unicode>0? KeyMappingX11::get_unicode_from_keysym(keysym_unicode):0; - + unsigned int unicode = keysym_unicode > 0 ? KeyMappingX11::get_unicode_from_keysym(keysym_unicode) : 0; /* Phase 4, determine if event must be filtered */ @@ -1112,11 +1085,11 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { bool keypress = xkeyevent->type == KeyPress; if (xkeyevent->type == KeyPress && xic) { - if (XFilterEvent((XEvent*)xkeyevent, x11_window)) - return; + if (XFilterEvent((XEvent *)xkeyevent, x11_window)) + return; } - if (keycode==0 && unicode==0) + if (keycode == 0 && unicode == 0) return; /* Phase 5, determine modifier mask */ @@ -1136,12 +1109,11 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { // To detect them, i use XPeekEvent and check that their // difference in time is below a treshold. - if (xkeyevent->type != KeyPress) { // make sure there are events pending, // so this call won't block. - if (XPending(x11_display)>0) { + if (XPending(x11_display) > 0) { XEvent peek_event; XPeekEvent(x11_display, &peek_event); @@ -1151,14 +1123,14 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { // is correct, but the xorg developers are // not very helpful today. - ::Time tresh=ABS(peek_event.xkey.time-xkeyevent->time); - if (peek_event.type == KeyPress && tresh<5 ) { + ::Time tresh = ABS(peek_event.xkey.time - xkeyevent->time); + if (peek_event.type == KeyPress && tresh < 5) { KeySym rk; - XLookupString((XKeyEvent*)&peek_event, str, 256, &rk, NULL); - if (rk==keysym_keycode) { + XLookupString((XKeyEvent *)&peek_event, str, 256, &rk, NULL); + if (rk == keysym_keycode) { XEvent event; XNextEvent(x11_display, &event); //erase next event - handle_key_event( (XKeyEvent*)&event,true ); + handle_key_event((XKeyEvent *)&event, true); return; //ignore current, echo next } } @@ -1169,27 +1141,26 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { // save the time to check for echo when keypress happens } - /* Phase 7, send event to Window */ InputEvent event; - event.ID=++event_id; + event.ID = ++event_id; event.type = InputEvent::KEY; - event.device=0; - event.key.mod=state; - event.key.pressed=keypress; + event.device = 0; + event.key.mod = state; + event.key.pressed = keypress; - if (keycode>='a' && keycode<='z') - keycode-='a'-'A'; + if (keycode >= 'a' && keycode <= 'z') + keycode -= 'a' - 'A'; - event.key.scancode=keycode; - event.key.unicode=unicode; - event.key.echo=p_echo; + event.key.scancode = keycode; + event.key.unicode = unicode; + event.key.echo = p_echo; - if (event.key.scancode==KEY_BACKTAB) { + if (event.key.scancode == KEY_BACKTAB) { //make it consistent accross platforms. - event.key.scancode=KEY_TAB; - event.key.mod.shift=true; + event.key.scancode = KEY_TAB; + event.key.mod.shift = true; } //don't set mod state if modifier keys are released by themselves @@ -1206,63 +1177,61 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { } //printf("key: %x\n",event.key.scancode); - input->parse_input_event( event); + input->parse_input_event(event); } -struct Property -{ +struct Property { unsigned char *data; int format, nitems; Atom type; }; -static Property read_property(Display* p_display, Window p_window, Atom p_property) { +static Property read_property(Display *p_display, Window p_window, Atom p_property) { Atom actual_type; int actual_format; unsigned long nitems; unsigned long bytes_after; - unsigned char *ret=0; + unsigned char *ret = 0; int read_bytes = 1024; //Keep trying to read the property until there are no //bytes unread. - do - { - if(ret != 0) + do { + if (ret != 0) XFree(ret); XGetWindowProperty(p_display, p_window, p_property, 0, read_bytes, False, AnyPropertyType, - &actual_type, &actual_format, &nitems, &bytes_after, - &ret); + &actual_type, &actual_format, &nitems, &bytes_after, + &ret); read_bytes *= 2; - }while(bytes_after != 0); + } while (bytes_after != 0); - Property p = {ret, actual_format, (int)nitems, actual_type}; + Property p = { ret, actual_format, (int)nitems, actual_type }; return p; } -static Atom pick_target_from_list(Display* p_display, Atom *p_list, int p_count) { +static Atom pick_target_from_list(Display *p_display, Atom *p_list, int p_count) { - static const char* target_type = "text/uri-list"; + static const char *target_type = "text/uri-list"; for (int i = 0; i < p_count; i++) { Atom atom = p_list[i]; if (atom != None && String(XGetAtomName(p_display, atom)) == target_type) - return atom; + return atom; } return None; } -static Atom pick_target_from_atoms(Display* p_disp, Atom p_t1, Atom p_t2, Atom p_t3) { +static Atom pick_target_from_atoms(Display *p_disp, Atom p_t1, Atom p_t2, Atom p_t3) { - static const char* target_type = "text/uri-list"; + static const char *target_type = "text/uri-list"; if (p_t1 != None && String(XGetAtomName(p_disp, p_t1)) == target_type) return p_t1; @@ -1279,382 +1248,375 @@ void OS_X11::process_xevents() { //printf("checking events %i\n", XPending(x11_display)); - do_mouse_warp=false; - + do_mouse_warp = false; // Is the current mouse mode one where it needs to be grabbed. - bool mouse_mode_grab = mouse_mode==MOUSE_MODE_CAPTURED || mouse_mode==MOUSE_MODE_CONFINED; + bool mouse_mode_grab = mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED; while (XPending(x11_display) > 0) { XEvent event; XNextEvent(x11_display, &event); switch (event.type) { - case Expose: - Main::force_redraw(); - break; - - case NoExpose: - minimized = true; - break; - - case VisibilityNotify: { - XVisibilityEvent * visibility = (XVisibilityEvent *)&event; - minimized = (visibility->state == VisibilityFullyObscured); - } break; - case LeaveNotify: { - if (main_loop && !mouse_mode_grab) - main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_EXIT); - if (input) - input->set_mouse_in_window(false); + case Expose: + Main::force_redraw(); + break; - } break; - case EnterNotify: { - if (main_loop && !mouse_mode_grab) - main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_ENTER); - if (input) - input->set_mouse_in_window(true); - } break; - case FocusIn: - minimized = false; - window_has_focus = true; - main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN); - if (mouse_mode_grab) { - // Show and update the cursor if confined and the window regained focus. - if (mouse_mode==MOUSE_MODE_CONFINED) - XUndefineCursor(x11_display, x11_window); - else if (mouse_mode==MOUSE_MODE_CAPTURED) // or re-hide it in captured mode - XDefineCursor(x11_display, x11_window, null_cursor); - - XGrabPointer( - x11_display, x11_window, True, - ButtonPressMask | ButtonReleaseMask | PointerMotionMask, - GrabModeAsync, GrabModeAsync, x11_window, None, CurrentTime); - } - break; + case NoExpose: + minimized = true; + break; - case FocusOut: - window_has_focus = false; - main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); - if (mouse_mode_grab) { - //dear X11, I try, I really try, but you never work, you do whathever you want. - if (mouse_mode==MOUSE_MODE_CAPTURED) { - // Show the cursor if we're in captured mode so it doesn't look weird. - XUndefineCursor(x11_display, x11_window); + case VisibilityNotify: { + XVisibilityEvent *visibility = (XVisibilityEvent *)&event; + minimized = (visibility->state == VisibilityFullyObscured); + } break; + case LeaveNotify: { + if (main_loop && !mouse_mode_grab) + main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_EXIT); + if (input) + input->set_mouse_in_window(false); + + } break; + case EnterNotify: { + if (main_loop && !mouse_mode_grab) + main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_ENTER); + if (input) + input->set_mouse_in_window(true); + } break; + case FocusIn: + minimized = false; + window_has_focus = true; + main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN); + if (mouse_mode_grab) { + // Show and update the cursor if confined and the window regained focus. + if (mouse_mode == MOUSE_MODE_CONFINED) + XUndefineCursor(x11_display, x11_window); + else if (mouse_mode == MOUSE_MODE_CAPTURED) // or re-hide it in captured mode + XDefineCursor(x11_display, x11_window, null_cursor); + + XGrabPointer( + x11_display, x11_window, True, + ButtonPressMask | ButtonReleaseMask | PointerMotionMask, + GrabModeAsync, GrabModeAsync, x11_window, None, CurrentTime); } - XUngrabPointer(x11_display, CurrentTime); - } - break; - - case ConfigureNotify: - /* call resizeGLScene only if our window-size changed */ - - if ((event.xconfigure.width == current_videomode.width) && - (event.xconfigure.height == current_videomode.height)) break; - current_videomode.width=event.xconfigure.width; - current_videomode.height=event.xconfigure.height; - break; - case ButtonPress: - case ButtonRelease: { - - /* exit in case of a mouse button press */ - last_timestamp=event.xbutton.time; - if (mouse_mode == MOUSE_MODE_CAPTURED) { - event.xbutton.x=last_mouse_pos.x; - event.xbutton.y=last_mouse_pos.y; - } + case FocusOut: + window_has_focus = false; + main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT); + if (mouse_mode_grab) { + //dear X11, I try, I really try, but you never work, you do whathever you want. + if (mouse_mode == MOUSE_MODE_CAPTURED) { + // Show the cursor if we're in captured mode so it doesn't look weird. + XUndefineCursor(x11_display, x11_window); + } + XUngrabPointer(x11_display, CurrentTime); + } + break; - InputEvent mouse_event; - mouse_event.ID=++event_id; - mouse_event.type = InputEvent::MOUSE_BUTTON; - mouse_event.device=0; - mouse_event.mouse_button.mod = get_key_modifier_state(event.xbutton.state); - mouse_event.mouse_button.button_mask = get_mouse_button_state(event.xbutton.state); - mouse_event.mouse_button.x=event.xbutton.x; - mouse_event.mouse_button.y=event.xbutton.y; - mouse_event.mouse_button.global_x=event.xbutton.x; - mouse_event.mouse_button.global_y=event.xbutton.y; - mouse_event.mouse_button.button_index=event.xbutton.button; - if (mouse_event.mouse_button.button_index==2) - mouse_event.mouse_button.button_index=3; - else if (mouse_event.mouse_button.button_index==3) - mouse_event.mouse_button.button_index=2; + case ConfigureNotify: + /* call resizeGLScene only if our window-size changed */ - mouse_event.mouse_button.pressed=(event.type==ButtonPress); + if ((event.xconfigure.width == current_videomode.width) && + (event.xconfigure.height == current_videomode.height)) + break; - if (event.type==ButtonPress && event.xbutton.button==1) { + current_videomode.width = event.xconfigure.width; + current_videomode.height = event.xconfigure.height; + break; + case ButtonPress: + case ButtonRelease: { + + /* exit in case of a mouse button press */ + last_timestamp = event.xbutton.time; + if (mouse_mode == MOUSE_MODE_CAPTURED) { + event.xbutton.x = last_mouse_pos.x; + event.xbutton.y = last_mouse_pos.y; + } - uint64_t diff = get_ticks_usec()/1000 - last_click_ms; + InputEvent mouse_event; + mouse_event.ID = ++event_id; + mouse_event.type = InputEvent::MOUSE_BUTTON; + mouse_event.device = 0; + mouse_event.mouse_button.mod = get_key_modifier_state(event.xbutton.state); + mouse_event.mouse_button.button_mask = get_mouse_button_state(event.xbutton.state); + mouse_event.mouse_button.x = event.xbutton.x; + mouse_event.mouse_button.y = event.xbutton.y; + mouse_event.mouse_button.global_x = event.xbutton.x; + mouse_event.mouse_button.global_y = event.xbutton.y; + mouse_event.mouse_button.button_index = event.xbutton.button; + if (mouse_event.mouse_button.button_index == 2) + mouse_event.mouse_button.button_index = 3; + else if (mouse_event.mouse_button.button_index == 3) + mouse_event.mouse_button.button_index = 2; - if (diff<400 && Point2(last_click_pos).distance_to(Point2(event.xbutton.x,event.xbutton.y))<5) { + mouse_event.mouse_button.pressed = (event.type == ButtonPress); - last_click_ms=0; - last_click_pos = Point2(-100,-100); - mouse_event.mouse_button.doubleclick=true; - mouse_event.ID=++event_id; + if (event.type == ButtonPress && event.xbutton.button == 1) { - } else { - last_click_ms+=diff; - last_click_pos = Point2(event.xbutton.x,event.xbutton.y); - } - } + uint64_t diff = get_ticks_usec() / 1000 - last_click_ms; - input->parse_input_event( mouse_event); + if (diff < 400 && Point2(last_click_pos).distance_to(Point2(event.xbutton.x, event.xbutton.y)) < 5) { + last_click_ms = 0; + last_click_pos = Point2(-100, -100); + mouse_event.mouse_button.doubleclick = true; + mouse_event.ID = ++event_id; - } break; - case MotionNotify: { - - // FUCK YOU X11 API YOU SERIOUSLY GROSS ME OUT - // YOU ARE AS GROSS AS LOOKING AT A PUTRID PILE - // OF POOP STICKING OUT OF A CLOGGED TOILET - // HOW THE FUCK I AM SUPPOSED TO KNOW WHICH ONE - // OF THE MOTION NOTIFY EVENTS IS THE ONE GENERATED - // BY WARPING THE MOUSE POINTER? - // YOU ARE FORCING ME TO FILTER ONE BY ONE TO FIND IT - // PLEASE DO ME A FAVOR AND DIE DROWNED IN A FECAL - // MOUNTAIN BECAUSE THAT'S WHERE YOU BELONG. - - while(true) { - if (mouse_mode==MOUSE_MODE_CAPTURED && event.xmotion.x==current_videomode.width/2 && event.xmotion.y==current_videomode.height/2) { - //this is likely the warp event since it was warped here - center=Vector2(event.xmotion.x,event.xmotion.y); - break; + } else { + last_click_ms += diff; + last_click_pos = Point2(event.xbutton.x, event.xbutton.y); + } } - if (XPending(x11_display) > 0) { - XEvent tevent; - XPeekEvent(x11_display, &tevent); - if (tevent.type==MotionNotify) { - XNextEvent(x11_display,&event); + input->parse_input_event(mouse_event); + + } break; + case MotionNotify: { + + // FUCK YOU X11 API YOU SERIOUSLY GROSS ME OUT + // YOU ARE AS GROSS AS LOOKING AT A PUTRID PILE + // OF POOP STICKING OUT OF A CLOGGED TOILET + // HOW THE FUCK I AM SUPPOSED TO KNOW WHICH ONE + // OF THE MOTION NOTIFY EVENTS IS THE ONE GENERATED + // BY WARPING THE MOUSE POINTER? + // YOU ARE FORCING ME TO FILTER ONE BY ONE TO FIND IT + // PLEASE DO ME A FAVOR AND DIE DROWNED IN A FECAL + // MOUNTAIN BECAUSE THAT'S WHERE YOU BELONG. + + while (true) { + if (mouse_mode == MOUSE_MODE_CAPTURED && event.xmotion.x == current_videomode.width / 2 && event.xmotion.y == current_videomode.height / 2) { + //this is likely the warp event since it was warped here + center = Vector2(event.xmotion.x, event.xmotion.y); + break; + } + + if (XPending(x11_display) > 0) { + XEvent tevent; + XPeekEvent(x11_display, &tevent); + if (tevent.type == MotionNotify) { + XNextEvent(x11_display, &event); + } else { + break; + } } else { break; } - } else { - break; } - } - last_timestamp=event.xmotion.time; + last_timestamp = event.xmotion.time; - // Motion is also simple. - // A little hack is in order - // to be able to send relative motion events. - Point2i pos( event.xmotion.x, event.xmotion.y ); + // Motion is also simple. + // A little hack is in order + // to be able to send relative motion events. + Point2i pos(event.xmotion.x, event.xmotion.y); - if (mouse_mode==MOUSE_MODE_CAPTURED) { + if (mouse_mode == MOUSE_MODE_CAPTURED) { #if 1 - //Vector2 c = Point2i(current_videomode.width/2,current_videomode.height/2); - if (pos==Point2i(current_videomode.width/2,current_videomode.height/2)) { - //this sucks, it's a hack, etc and is a little inaccurate, etc. - //but nothing I can do, X11 sucks. + //Vector2 c = Point2i(current_videomode.width/2,current_videomode.height/2); + if (pos == Point2i(current_videomode.width / 2, current_videomode.height / 2)) { + //this sucks, it's a hack, etc and is a little inaccurate, etc. + //but nothing I can do, X11 sucks. - center=pos; - break; - } + center = pos; + break; + } - Point2i new_center = pos; - pos = last_mouse_pos + ( pos - center ); - center=new_center; - do_mouse_warp=window_has_focus; // warp the cursor if we're focused in + Point2i new_center = pos; + pos = last_mouse_pos + (pos - center); + center = new_center; + do_mouse_warp = window_has_focus; // warp the cursor if we're focused in #else - //Dear X11, thanks for making my life miserable + //Dear X11, thanks for making my life miserable - center.x = current_videomode.width/2; - center.y = current_videomode.height/2; - pos = last_mouse_pos + ( pos-center ); - if (pos==last_mouse_pos) - break; - XWarpPointer(x11_display, None, x11_window, - 0,0,0,0, (int)center.x, (int)center.y); + center.x = current_videomode.width / 2; + center.y = current_videomode.height / 2; + pos = last_mouse_pos + (pos - center); + if (pos == last_mouse_pos) + break; + XWarpPointer(x11_display, None, x11_window, + 0, 0, 0, 0, (int)center.x, (int)center.y); #endif - } - - if (!last_mouse_pos_valid) { - - last_mouse_pos=pos; - last_mouse_pos_valid=true; - } - - Point2i rel = pos - last_mouse_pos; - - InputEvent motion_event; - motion_event.ID=++event_id; - motion_event.type=InputEvent::MOUSE_MOTION; - motion_event.device=0; - - motion_event.mouse_motion.mod = get_key_modifier_state(event.xmotion.state); - motion_event.mouse_motion.button_mask = get_mouse_button_state(event.xmotion.state); - motion_event.mouse_motion.x=pos.x; - motion_event.mouse_motion.y=pos.y; - input->set_mouse_pos(pos); - motion_event.mouse_motion.global_x=pos.x; - motion_event.mouse_motion.global_y=pos.y; - motion_event.mouse_motion.speed_x=input->get_last_mouse_speed().x; - motion_event.mouse_motion.speed_y=input->get_last_mouse_speed().y; - - motion_event.mouse_motion.relative_x=rel.x; - motion_event.mouse_motion.relative_y=rel.y; + } - last_mouse_pos=pos; + if (!last_mouse_pos_valid) { - // printf("rel: %d,%d\n", rel.x, rel.y ); - // Don't propagate the motion event unless we have focus - // this is so that the relative motion doesn't get messed up - // after we regain focus. - if (window_has_focus || !mouse_mode_grab) - input->parse_input_event( motion_event); + last_mouse_pos = pos; + last_mouse_pos_valid = true; + } - } break; - case KeyPress: - case KeyRelease: { + Point2i rel = pos - last_mouse_pos; + + InputEvent motion_event; + motion_event.ID = ++event_id; + motion_event.type = InputEvent::MOUSE_MOTION; + motion_event.device = 0; + + motion_event.mouse_motion.mod = get_key_modifier_state(event.xmotion.state); + motion_event.mouse_motion.button_mask = get_mouse_button_state(event.xmotion.state); + motion_event.mouse_motion.x = pos.x; + motion_event.mouse_motion.y = pos.y; + input->set_mouse_pos(pos); + motion_event.mouse_motion.global_x = pos.x; + motion_event.mouse_motion.global_y = pos.y; + motion_event.mouse_motion.speed_x = input->get_last_mouse_speed().x; + motion_event.mouse_motion.speed_y = input->get_last_mouse_speed().y; + + motion_event.mouse_motion.relative_x = rel.x; + motion_event.mouse_motion.relative_y = rel.y; + + last_mouse_pos = pos; + + // printf("rel: %d,%d\n", rel.x, rel.y ); + // Don't propagate the motion event unless we have focus + // this is so that the relative motion doesn't get messed up + // after we regain focus. + if (window_has_focus || !mouse_mode_grab) + input->parse_input_event(motion_event); + + } break; + case KeyPress: + case KeyRelease: { + + last_timestamp = event.xkey.time; + + // key event is a little complex, so + // it will be handled in it's own function. + handle_key_event((XKeyEvent *)&event); + } break; + case SelectionRequest: { + + XSelectionRequestEvent *req; + XEvent e, respond; + e = event; + + req = &(e.xselectionrequest); + if (req->target == XA_STRING || req->target == XInternAtom(x11_display, "COMPOUND_TEXT", 0) || + req->target == XInternAtom(x11_display, "UTF8_STRING", 0)) { + CharString clip = OS::get_clipboard().utf8(); + XChangeProperty(x11_display, + req->requestor, + req->property, + req->target, + 8, + PropModeReplace, + (unsigned char *)clip.get_data(), + clip.length()); + respond.xselection.property = req->property; + } else if (req->target == XInternAtom(x11_display, "TARGETS", 0)) { + + Atom data[2]; + data[0] = XInternAtom(x11_display, "UTF8_STRING", 0); + data[1] = XA_STRING; + XChangeProperty(x11_display, req->requestor, req->property, req->target, + 8, PropModeReplace, (unsigned char *)&data, + sizeof(data)); + respond.xselection.property = req->property; - last_timestamp=event.xkey.time; + } else { + printf("No String %x\n", + (int)req->target); + respond.xselection.property = None; + } + respond.xselection.type = SelectionNotify; + respond.xselection.display = req->display; + respond.xselection.requestor = req->requestor; + respond.xselection.selection = req->selection; + respond.xselection.target = req->target; + respond.xselection.time = req->time; + XSendEvent(x11_display, req->requestor, 0, 0, &respond); + XFlush(x11_display); + } break; - // key event is a little complex, so - // it will be handled in it's own function. - handle_key_event( (XKeyEvent*)&event ); - } break; - case SelectionRequest: { - - XSelectionRequestEvent *req; - XEvent e, respond; - e = event; - - req=&(e.xselectionrequest); - if (req->target == XA_STRING || req->target == XInternAtom(x11_display, "COMPOUND_TEXT", 0) || - req->target == XInternAtom(x11_display, "UTF8_STRING", 0)) - { - CharString clip = OS::get_clipboard().utf8(); - XChangeProperty (x11_display, - req->requestor, - req->property, - req->target, - 8, - PropModeReplace, - (unsigned char*)clip.get_data(), - clip.length()); - respond.xselection.property=req->property; - } else if (req->target == XInternAtom(x11_display, "TARGETS", 0)) { - - Atom data[2]; - data[0] = XInternAtom(x11_display, "UTF8_STRING", 0); - data[1] = XA_STRING; - XChangeProperty (x11_display, req->requestor, req->property, req->target, - 8, PropModeReplace, (unsigned char *) &data, - sizeof (data)); - respond.xselection.property=req->property; + case SelectionNotify: - } else { - printf ("No String %x\n", - (int)req->target); - respond.xselection.property= None; - } - respond.xselection.type= SelectionNotify; - respond.xselection.display= req->display; - respond.xselection.requestor= req->requestor; - respond.xselection.selection=req->selection; - respond.xselection.target= req->target; - respond.xselection.time = req->time; - XSendEvent (x11_display, req->requestor,0,0,&respond); - XFlush (x11_display); - } break; + if (event.xselection.target == requested) { - case SelectionNotify: + Property p = read_property(x11_display, x11_window, XInternAtom(x11_display, "PRIMARY", 0)); - if (event.xselection.target == requested) { + Vector<String> files = String((char *)p.data).split("\n", false); + for (int i = 0; i < files.size(); i++) { + files[i] = files[i].replace("file://", "").replace("%20", " ").strip_escapes(); + } + main_loop->drop_files(files); - Property p = read_property(x11_display, x11_window, XInternAtom(x11_display, "PRIMARY", 0)); + //Reply that all is well. + XClientMessageEvent m; + memset(&m, 0, sizeof(m)); + m.type = ClientMessage; + m.display = x11_display; + m.window = xdnd_source_window; + m.message_type = xdnd_finished; + m.format = 32; + m.data.l[0] = x11_window; + m.data.l[1] = 1; + m.data.l[2] = xdnd_action_copy; //We only ever copy. - Vector<String> files = String((char *)p.data).split("\n", false); - for (int i = 0; i < files.size(); i++) { - files[i] = files[i].replace("file://", "").replace("%20", " ").strip_escapes(); + XSendEvent(x11_display, xdnd_source_window, False, NoEventMask, (XEvent *)&m); } - main_loop->drop_files(files); - - //Reply that all is well. - XClientMessageEvent m; - memset(&m, 0, sizeof(m)); - m.type = ClientMessage; - m.display = x11_display; - m.window = xdnd_source_window; - m.message_type = xdnd_finished; - m.format=32; - m.data.l[0] = x11_window; - m.data.l[1] = 1; - m.data.l[2] = xdnd_action_copy; //We only ever copy. - - XSendEvent(x11_display, xdnd_source_window, False, NoEventMask, (XEvent*)&m); - } - break; + break; - case ClientMessage: + case ClientMessage: - if ((unsigned int)event.xclient.data.l[0]==(unsigned int)wm_delete) - main_loop->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST); + if ((unsigned int)event.xclient.data.l[0] == (unsigned int)wm_delete) + main_loop->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST); - else if ((unsigned int)event.xclient.message_type == (unsigned int)xdnd_enter) { + else if ((unsigned int)event.xclient.message_type == (unsigned int)xdnd_enter) { - //File(s) have been dragged over the window, check for supported target (text/uri-list) - xdnd_version = ( event.xclient.data.l[1] >> 24); - Window source = event.xclient.data.l[0]; - bool more_than_3 = event.xclient.data.l[1] & 1; - if (more_than_3) { - Property p = read_property(x11_display, source, XInternAtom(x11_display, "XdndTypeList", False)); - requested = pick_target_from_list(x11_display, (Atom*)p.data, p.nitems); - } - else - requested = pick_target_from_atoms(x11_display, event.xclient.data.l[2],event.xclient.data.l[3], event.xclient.data.l[4]); - } - else if ((unsigned int)event.xclient.message_type == (unsigned int )xdnd_position) { - - //xdnd position event, reply with an XDND status message - //just depending on type of data for now - XClientMessageEvent m; - memset(&m, 0, sizeof(m)); - m.type = ClientMessage; - m.display = event.xclient.display; - m.window = event.xclient.data.l[0]; - m.message_type = xdnd_status; - m.format=32; - m.data.l[0] = x11_window; - m.data.l[1] = (requested != None); - m.data.l[2] = 0; //empty rectangle - m.data.l[3] = 0; - m.data.l[4] = xdnd_action_copy; - - XSendEvent(x11_display, event.xclient.data.l[0], False, NoEventMask, (XEvent*)&m); - XFlush(x11_display); - } - else if ((unsigned int)event.xclient.message_type == (unsigned int)xdnd_drop) { - - if (requested != None) { - xdnd_source_window = event.xclient.data.l[0]; - if(xdnd_version >= 1) - XConvertSelection(x11_display, xdnd_selection, requested, XInternAtom(x11_display, "PRIMARY", 0), x11_window, event.xclient.data.l[2]); - else - XConvertSelection(x11_display, xdnd_selection, requested, XInternAtom(x11_display, "PRIMARY", 0), x11_window, CurrentTime); - } - else { - //Reply that we're not interested. + //File(s) have been dragged over the window, check for supported target (text/uri-list) + xdnd_version = (event.xclient.data.l[1] >> 24); + Window source = event.xclient.data.l[0]; + bool more_than_3 = event.xclient.data.l[1] & 1; + if (more_than_3) { + Property p = read_property(x11_display, source, XInternAtom(x11_display, "XdndTypeList", False)); + requested = pick_target_from_list(x11_display, (Atom *)p.data, p.nitems); + } else + requested = pick_target_from_atoms(x11_display, event.xclient.data.l[2], event.xclient.data.l[3], event.xclient.data.l[4]); + } else if ((unsigned int)event.xclient.message_type == (unsigned int)xdnd_position) { + + //xdnd position event, reply with an XDND status message + //just depending on type of data for now XClientMessageEvent m; memset(&m, 0, sizeof(m)); m.type = ClientMessage; m.display = event.xclient.display; m.window = event.xclient.data.l[0]; - m.message_type = xdnd_finished; - m.format=32; + m.message_type = xdnd_status; + m.format = 32; m.data.l[0] = x11_window; - m.data.l[1] = 0; - m.data.l[2] = None; //Failed. - XSendEvent(x11_display, event.xclient.data.l[0], False, NoEventMask, (XEvent*)&m); + m.data.l[1] = (requested != None); + m.data.l[2] = 0; //empty rectangle + m.data.l[3] = 0; + m.data.l[4] = xdnd_action_copy; + + XSendEvent(x11_display, event.xclient.data.l[0], False, NoEventMask, (XEvent *)&m); + XFlush(x11_display); + } else if ((unsigned int)event.xclient.message_type == (unsigned int)xdnd_drop) { + + if (requested != None) { + xdnd_source_window = event.xclient.data.l[0]; + if (xdnd_version >= 1) + XConvertSelection(x11_display, xdnd_selection, requested, XInternAtom(x11_display, "PRIMARY", 0), x11_window, event.xclient.data.l[2]); + else + XConvertSelection(x11_display, xdnd_selection, requested, XInternAtom(x11_display, "PRIMARY", 0), x11_window, CurrentTime); + } else { + //Reply that we're not interested. + XClientMessageEvent m; + memset(&m, 0, sizeof(m)); + m.type = ClientMessage; + m.display = event.xclient.display; + m.window = event.xclient.data.l[0]; + m.message_type = xdnd_finished; + m.format = 32; + m.data.l[0] = x11_window; + m.data.l[1] = 0; + m.data.l[2] = None; //Failed. + XSendEvent(x11_display, event.xclient.data.l[0], False, NoEventMask, (XEvent *)&m); + } } - } - break; - default: - break; + break; + default: + break; } } @@ -1663,7 +1625,7 @@ void OS_X11::process_xevents() { if (do_mouse_warp) { XWarpPointer(x11_display, None, x11_window, - 0,0,0,0, (int)current_videomode.width/2, (int)current_videomode.height/2); + 0, 0, 0, 0, (int)current_videomode.width / 2, (int)current_videomode.height / 2); /* Window root, child; @@ -1687,12 +1649,12 @@ void OS_X11::delete_main_loop() { if (main_loop) memdelete(main_loop); - main_loop=NULL; + main_loop = NULL; } -void OS_X11::set_main_loop( MainLoop * p_main_loop ) { +void OS_X11::set_main_loop(MainLoop *p_main_loop) { - main_loop=p_main_loop; + main_loop = p_main_loop; input->set_main_loop(p_main_loop); } @@ -1701,7 +1663,7 @@ bool OS_X11::can_draw() const { return !minimized; }; -void OS_X11::set_clipboard(const String& p_text) { +void OS_X11::set_clipboard(const String &p_text) { OS::set_clipboard(p_text); @@ -1709,7 +1671,7 @@ void OS_X11::set_clipboard(const String& p_text) { XSetSelectionOwner(x11_display, XInternAtom(x11_display, "CLIPBOARD", 0), x11_window, CurrentTime); }; -static String _get_clipboard(Atom p_source, Window x11_window, ::Display* x11_display, String p_internal_clipboard) { +static String _get_clipboard(Atom p_source, Window x11_window, ::Display *x11_display, String p_internal_clipboard) { String ret; @@ -1718,7 +1680,7 @@ static String _get_clipboard(Atom p_source, Window x11_window, ::Display* x11_di int format, result; unsigned long len, bytes_left, dummy; unsigned char *data; - Window Sown = XGetSelectionOwner (x11_display, p_source); + Window Sown = XGetSelectionOwner(x11_display, p_source); if (Sown == x11_window) { @@ -1726,9 +1688,9 @@ static String _get_clipboard(Atom p_source, Window x11_window, ::Display* x11_di }; if (Sown != None) { - XConvertSelection (x11_display, p_source, XA_STRING, selection, - x11_window, CurrentTime); - XFlush (x11_display); + XConvertSelection(x11_display, p_source, XA_STRING, selection, + x11_window, CurrentTime); + XFlush(x11_display); while (true) { XEvent event; XNextEvent(x11_display, &event); @@ -1740,31 +1702,30 @@ static String _get_clipboard(Atom p_source, Window x11_window, ::Display* x11_di // // Do not get any data, see how much data is there // - XGetWindowProperty (x11_display, x11_window, - selection, // Tricky.. - 0, 0, // offset - len - 0, // Delete 0==FALSE - AnyPropertyType, //flag - &type, // return type - &format, // return format - &len, &bytes_left, //that - &data); + XGetWindowProperty(x11_display, x11_window, + selection, // Tricky.. + 0, 0, // offset - len + 0, // Delete 0==FALSE + AnyPropertyType, //flag + &type, // return type + &format, // return format + &len, &bytes_left, //that + &data); // DATA is There - if (bytes_left > 0) - { - result = XGetWindowProperty (x11_display, x11_window, - selection, 0,bytes_left,0, - AnyPropertyType, &type,&format, - &len, &dummy, &data); + if (bytes_left > 0) { + result = XGetWindowProperty(x11_display, x11_window, + selection, 0, bytes_left, 0, + AnyPropertyType, &type, &format, + &len, &dummy, &data); if (result == Success) { - ret.parse_utf8((const char*)data); - } else printf ("FAIL\n"); - XFree (data); + ret.parse_utf8((const char *)data); + } else + printf("FAIL\n"); + XFree(data); } } return ret; - } String OS_X11::get_clipboard() const { @@ -1789,59 +1750,58 @@ Error OS_X11::shell_open(String p_uri) { Error ok; List<String> args; args.push_back(p_uri); - ok = execute("/usr/bin/xdg-open",args,false); - if (ok==OK) + ok = execute("/usr/bin/xdg-open", args, false); + if (ok == OK) return OK; - ok = execute("gnome-open",args,false); - if (ok==OK) + ok = execute("gnome-open", args, false); + if (ok == OK) return OK; - ok = execute("kde-open",args,false); + ok = execute("kde-open", args, false); return ok; } String OS_X11::get_system_dir(SystemDir p_dir) const { - String xdgparam; - switch(p_dir) { + switch (p_dir) { case SYSTEM_DIR_DESKTOP: { - xdgparam="DESKTOP"; + xdgparam = "DESKTOP"; } break; case SYSTEM_DIR_DCIM: { - xdgparam="PICTURES"; + xdgparam = "PICTURES"; } break; case SYSTEM_DIR_DOCUMENTS: { - xdgparam="DOCUMENTS"; + xdgparam = "DOCUMENTS"; } break; case SYSTEM_DIR_DOWNLOADS: { - xdgparam="DOWNLOAD"; + xdgparam = "DOWNLOAD"; } break; case SYSTEM_DIR_MOVIES: { - xdgparam="VIDEOS"; + xdgparam = "VIDEOS"; } break; case SYSTEM_DIR_MUSIC: { - xdgparam="MUSIC"; + xdgparam = "MUSIC"; } break; case SYSTEM_DIR_PICTURES: { - xdgparam="PICTURES"; + xdgparam = "PICTURES"; } break; case SYSTEM_DIR_RINGTONES: { - xdgparam="MUSIC"; + xdgparam = "MUSIC"; } break; } @@ -1849,38 +1809,36 @@ String OS_X11::get_system_dir(SystemDir p_dir) const { String pipe; List<String> arg; arg.push_back(xdgparam); - Error err = const_cast<OS_X11*>(this)->execute("/usr/bin/xdg-user-dir",arg,true,NULL,&pipe); - if (err!=OK) + Error err = const_cast<OS_X11 *>(this)->execute("/usr/bin/xdg-user-dir", arg, true, NULL, &pipe); + if (err != OK) return "."; return pipe.strip_edges(); } void OS_X11::move_window_to_foreground() { - XRaiseWindow(x11_display,x11_window); + XRaiseWindow(x11_display, x11_window); } void OS_X11::set_cursor_shape(CursorShape p_shape) { - ERR_FAIL_INDEX(p_shape,CURSOR_MAX); + ERR_FAIL_INDEX(p_shape, CURSOR_MAX); - if (p_shape==current_cursor) + if (p_shape == current_cursor) return; - if (mouse_mode==MOUSE_MODE_VISIBLE) { - if (cursors[p_shape]!=None) - XDefineCursor(x11_display,x11_window,cursors[p_shape]); - else if (cursors[CURSOR_ARROW]!=None) - XDefineCursor(x11_display,x11_window,cursors[CURSOR_ARROW]); + if (mouse_mode == MOUSE_MODE_VISIBLE) { + if (cursors[p_shape] != None) + XDefineCursor(x11_display, x11_window, cursors[p_shape]); + else if (cursors[CURSOR_ARROW] != None) + XDefineCursor(x11_display, x11_window, cursors[CURSOR_ARROW]); } - current_cursor=p_shape; + current_cursor = p_shape; } - void OS_X11::release_rendering_thread() { context_gl->release_current(); - } void OS_X11::make_rendering_thread() { @@ -1893,7 +1851,7 @@ void OS_X11::swap_buffers() { context_gl->swap_buffers(); } -void OS_X11::alert(const String& p_alert,const String& p_title) { +void OS_X11::alert(const String &p_alert, const String &p_title) { List<String> args; args.push_back("-center"); @@ -1901,14 +1859,14 @@ void OS_X11::alert(const String& p_alert,const String& p_title) { args.push_back(p_title); args.push_back(p_alert); - execute("/usr/bin/xmessage",args,true); + execute("/usr/bin/xmessage", args, true); } -void OS_X11::set_icon(const Image& p_icon) { +void OS_X11::set_icon(const Image &p_icon) { Atom net_wm_icon = XInternAtom(x11_display, "_NET_WM_ICON", False); if (!p_icon.empty()) { - Image img=p_icon; + Image img = p_icon; img.convert(Image::FORMAT_RGBA8); int w = img.get_width(); @@ -1917,31 +1875,30 @@ void OS_X11::set_icon(const Image& p_icon) { // We're using long to have wordsize (32Bit build -> 32 Bits, 64 Bit build -> 64 Bits Vector<long> pd; - pd.resize(2+w*h); + pd.resize(2 + w * h); - pd[0]=w; - pd[1]=h; + pd[0] = w; + pd[1] = h; PoolVector<uint8_t>::Read r = img.get_data().read(); - long * wr = &pd[2]; - uint8_t const * pr = r.ptr(); + long *wr = &pd[2]; + uint8_t const *pr = r.ptr(); - for(int i=0;i<w*h;i++) { - long v=0; + for (int i = 0; i < w * h; i++) { + long v = 0; // A R G B - v|=pr[3] << 24 | pr[0] << 16 | pr[1] << 8 | pr[2]; - *wr++=v; + v |= pr[3] << 24 | pr[0] << 16 | pr[1] << 8 | pr[2]; + *wr++ = v; pr += 4; } - XChangeProperty(x11_display, x11_window, net_wm_icon, XA_CARDINAL, 32, PropModeReplace, (unsigned char*) pd.ptr(), pd.size()); + XChangeProperty(x11_display, x11_window, net_wm_icon, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)pd.ptr(), pd.size()); } else { - XDeleteProperty(x11_display, x11_window, net_wm_icon); + XDeleteProperty(x11_display, x11_window, net_wm_icon); } XFlush(x11_display); } - void OS_X11::run() { force_quit = false; @@ -1962,7 +1919,7 @@ void OS_X11::run() { #ifdef JOYDEV_ENABLED event_id = joypad->process_joypads(event_id); #endif - if (Main::iteration()==true) + if (Main::iteration() == true) break; }; @@ -1990,10 +1947,9 @@ bool OS_X11::is_vsync_enabled() const { return true; } - void OS_X11::set_context(int p_context) { - XClassHint* classHint = NULL; + XClassHint *classHint = NULL; classHint = XAllocClassHint(); if (classHint) { @@ -2033,12 +1989,12 @@ OS_X11::OS_X11() { AudioDriverManager::add_driver(&driver_alsa); #endif - if(AudioDriverManager::get_driver_count() == 0){ + if (AudioDriverManager::get_driver_count() == 0) { WARN_PRINT("No sound driver found... Defaulting to dummy driver"); AudioDriverManager::add_driver(&driver_dummy); } minimized = false; - xim_style=0L; - mouse_mode=MOUSE_MODE_VISIBLE; + xim_style = 0L; + mouse_mode = MOUSE_MODE_VISIBLE; } diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h index ce2e2df6e9..cbda18c0bc 100644 --- a/platform/x11/os_x11.h +++ b/platform/x11/os_x11.h @@ -29,29 +29,28 @@ #ifndef OS_X11_H #define OS_X11_H - -#include "os/input.h" -#include "drivers/unix/os_unix.h" #include "context_gl_x11.h" +#include "drivers/unix/os_unix.h" +#include "os/input.h" #include "servers/visual_server.h" //#include "servers/visual/visual_server_wrap_mt.h" -#include "servers/visual/rasterizer.h" -#include "servers/physics_server.h" -#include "servers/audio_server.h" -#include "drivers/rtaudio/audio_driver_rtaudio.h" #include "drivers/alsa/audio_driver_alsa.h" #include "drivers/pulseaudio/audio_driver_pulseaudio.h" +#include "drivers/rtaudio/audio_driver_rtaudio.h" +#include "joypad_linux.h" +#include "main/input_default.h" +#include "power_x11.h" #include "servers/audio/audio_driver_dummy.h" +#include "servers/audio_server.h" #include "servers/physics_2d/physics_2d_server_sw.h" #include "servers/physics_2d/physics_2d_server_wrap_mt.h" -#include "main/input_default.h" -#include "joypad_linux.h" -#include "power_x11.h" +#include "servers/physics_server.h" +#include "servers/visual/rasterizer.h" -#include <X11/keysym.h> -#include <X11/Xlib.h> #include <X11/Xcursor/Xcursor.h> +#include <X11/Xlib.h> #include <X11/extensions/Xrandr.h> +#include <X11/keysym.h> // Hints for X11 fullscreen typedef struct { @@ -63,17 +62,17 @@ typedef struct { } Hints; typedef struct _xrr_monitor_info { - Atom name; - Bool primary; - Bool automatic; - int noutput; - int x; - int y; - int width; - int height; - int mwidth; - int mheight; - RROutput *outputs; + Atom name; + Bool primary; + Bool automatic; + int noutput; + int x; + int y; + int width; + int height; + int mwidth; + int mheight; + RROutput *outputs; } xrr_monitor_info; #undef CursorShape @@ -93,7 +92,7 @@ class OS_X11 : public OS_Unix { Atom xdnd_selection; Atom requested; - int xdnd_version; + int xdnd_version; #if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED) ContextGL_X11 *context_gl; @@ -105,7 +104,7 @@ class OS_X11 : public OS_Unix { Window x11_window; Window xdnd_source_window; MainLoop *main_loop; - ::Display* x11_display; + ::Display *x11_display; char *xmbstring; int xmblen; unsigned long last_timestamp; @@ -128,7 +127,7 @@ class OS_X11 : public OS_Unix { MouseMode mouse_mode; Point2i center; - void handle_key_event(XKeyEvent *p_event,bool p_echo=false); + void handle_key_event(XKeyEvent *p_event, bool p_echo = false); void process_xevents(); virtual void delete_main_loop(); IP_Unix *ip_unix; @@ -165,7 +164,7 @@ class OS_X11 : public OS_Unix { AudioDriverDummy driver_dummy; Atom net_wm_icon; - + PowerX11 *power_manager; int audio_driver_index; @@ -174,30 +173,27 @@ class OS_X11 : public OS_Unix { //void set_wm_border(bool p_enabled); void set_wm_fullscreen(bool p_enabled); - typedef xrr_monitor_info* (*xrr_get_monitors_t)(Display *dpy, Window window, Bool get_active, int *nmonitors); - typedef void (*xrr_free_monitors_t)(xrr_monitor_info* monitors); + typedef xrr_monitor_info *(*xrr_get_monitors_t)(Display *dpy, Window window, Bool get_active, int *nmonitors); + typedef void (*xrr_free_monitors_t)(xrr_monitor_info *monitors); xrr_get_monitors_t xrr_get_monitors; xrr_free_monitors_t xrr_free_monitors; void *xrandr_handle; Bool xrandr_ext_ok; protected: - 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(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 finalize(); - virtual void set_main_loop( MainLoop * p_main_loop ); - + virtual void set_main_loop(MainLoop *p_main_loop); public: - virtual String get_name(); virtual void set_cursor_shape(CursorShape p_shape); @@ -205,18 +201,18 @@ public: void set_mouse_mode(MouseMode p_mode); MouseMode get_mouse_mode() const; - virtual void warp_mouse_pos(const Point2& p_to); + virtual void warp_mouse_pos(const Point2 &p_to); 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_icon(const Image& p_icon); + virtual void set_icon(const Image &p_icon); virtual MainLoop *get_main_loop() const; virtual bool can_draw() const; - virtual void set_clipboard(const String& p_text); + virtual void set_clipboard(const String &p_text); virtual String get_clipboard() const; virtual void release_rendering_thread(); @@ -227,19 +223,18 @@ public: virtual Error shell_open(String p_uri); - 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 int get_screen_count() const; virtual int get_current_screen() const; virtual void set_current_screen(int p_screen); - virtual Point2 get_screen_position(int p_screen=0) const; - virtual Size2 get_screen_size(int p_screen=0) const; - virtual int get_screen_dpi(int p_screen=0) const; + virtual Point2 get_screen_position(int p_screen = 0) const; + virtual Size2 get_screen_size(int p_screen = 0) const; + virtual int get_screen_dpi(int p_screen = 0) const; virtual Point2 get_window_position() const; - virtual void set_window_position(const Point2& p_position); + virtual void set_window_position(const Point2 &p_position); virtual Size2 get_window_size() const; virtual void set_window_size(const Size2 p_size); virtual void set_window_fullscreen(bool p_enabled); @@ -253,7 +248,7 @@ public: virtual void request_attention(); virtual void move_window_to_foreground(); - virtual void alert(const String& p_alert,const String& p_title="ALERT!"); + virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); virtual bool is_joy_known(int p_device); virtual String get_joy_guid(int p_device) const; diff --git a/platform/x11/power_x11.cpp b/platform/x11/power_x11.cpp index 472a32bb48..2f98d2f335 100644 --- a/platform/x11/power_x11.cpp +++ b/platform/x11/power_x11.cpp @@ -32,34 +32,31 @@ #include <stdio.h> #include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> #include <dirent.h> #include <fcntl.h> +#include <sys/stat.h> +#include <sys/types.h> // CODE CHUNK IMPORTED FROM SDL 2.0 -static const char* proc_apm_path = "/proc/apm"; -static const char* proc_acpi_battery_path = "/proc/acpi/battery"; -static const char* proc_acpi_ac_adapter_path = "/proc/acpi/ac_adapter"; -static const char* sys_class_power_supply_path = "/sys/class/power_supply"; +static const char *proc_apm_path = "/proc/apm"; +static const char *proc_acpi_battery_path = "/proc/acpi/battery"; +static const char *proc_acpi_ac_adapter_path = "/proc/acpi/ac_adapter"; +static const char *sys_class_power_supply_path = "/sys/class/power_supply"; -FileAccessRef PowerX11::open_power_file(const char* base, const char* node, const char* key) -{ +FileAccessRef PowerX11::open_power_file(const char *base, const char *node, const char *key) { String path = String(base) + String("/") + String(node) + String("/") + String(key); - FileAccessRef f = FileAccess::open(path,FileAccess::READ); + FileAccessRef f = FileAccess::open(path, FileAccess::READ); return f; } - -bool PowerX11::read_power_file(const char* base, const char* node, const char* key, char* buf, size_t buflen) -{ +bool PowerX11::read_power_file(const char *base, const char *node, const char *key, char *buf, size_t buflen) { ssize_t br = 0; FileAccessRef fd = open_power_file(base, node, key); if (!fd) { return false; } - br = fd->get_buffer(reinterpret_cast<uint8_t*>(buf), buflen-1); + br = fd->get_buffer(reinterpret_cast<uint8_t *>(buf), buflen - 1); fd->close(); if (br < 0) { return false; @@ -68,17 +65,15 @@ bool PowerX11::read_power_file(const char* base, const char* node, const char* k return true; } - -bool PowerX11::make_proc_acpi_key_val(char **_ptr, char **_key, char **_val) -{ +bool PowerX11::make_proc_acpi_key_val(char **_ptr, char **_key, char **_val) { char *ptr = *_ptr; while (*ptr == ' ') { - ptr++; /* skip whitespace. */ + ptr++; /* skip whitespace. */ } if (*ptr == '\0') { - return false; /* EOF. */ + return false; /* EOF. */ } *_key = ptr; @@ -88,17 +83,17 @@ bool PowerX11::make_proc_acpi_key_val(char **_ptr, char **_key, char **_val) } if (*ptr == '\0') { - return false; /* (unexpected) EOF. */ + return false; /* (unexpected) EOF. */ } - *(ptr++) = '\0'; /* terminate the key. */ + *(ptr++) = '\0'; /* terminate the key. */ while ((*ptr == ' ') && (*ptr != '\0')) { - ptr++; /* skip whitespace. */ + ptr++; /* skip whitespace. */ } if (*ptr == '\0') { - return false; /* (unexpected) EOF. */ + return false; /* (unexpected) EOF. */ } *_val = ptr; @@ -108,16 +103,14 @@ bool PowerX11::make_proc_acpi_key_val(char **_ptr, char **_key, char **_val) } if (*ptr != '\0') { - *(ptr++) = '\0'; /* terminate the value. */ + *(ptr++) = '\0'; /* terminate the value. */ } - *_ptr = ptr; /* store for next time. */ + *_ptr = ptr; /* store for next time. */ return true; } -void -PowerX11::check_proc_acpi_battery(const char * node, bool * have_battery, bool * charging) -{ +void PowerX11::check_proc_acpi_battery(const char *node, bool *have_battery, bool *charging) { const char *base = proc_acpi_battery_path; char info[1024]; char state[1024]; @@ -131,10 +124,10 @@ PowerX11::check_proc_acpi_battery(const char * node, bool * have_battery, bool * int secs = -1; int pct = -1; - if (!read_power_file(base, node, "state", state, sizeof (state))) { + if (!read_power_file(base, node, "state", state, sizeof(state))) { return; } else { - if (!read_power_file(base, node, "info", info, sizeof (info))) + if (!read_power_file(base, node, "info", info, sizeof(info))) return; } @@ -175,7 +168,7 @@ PowerX11::check_proc_acpi_battery(const char * node, bool * have_battery, bool * } if ((maximum >= 0) && (remaining >= 0)) { - pct = (int) ((((float) remaining) / ((float) maximum)) * 100.0f); + pct = (int)((((float)remaining) / ((float)maximum)) * 100.0f); if (pct < 0) { pct = 0; } else if (pct > 100) { @@ -191,7 +184,7 @@ PowerX11::check_proc_acpi_battery(const char * node, bool * have_battery, bool * */ if ((secs < 0) && (this->nsecs_left < 0)) { if ((pct < 0) && (this->percent_left < 0)) { - choose = true; /* at least we know there's a battery. */ + choose = true; /* at least we know there's a battery. */ } if (pct > this->percent_left) { choose = true; @@ -207,15 +200,14 @@ PowerX11::check_proc_acpi_battery(const char * node, bool * have_battery, bool * } } -void PowerX11::check_proc_acpi_ac_adapter(const char * node, bool * have_ac) -{ +void PowerX11::check_proc_acpi_ac_adapter(const char *node, bool *have_ac) { const char *base = proc_acpi_ac_adapter_path; char state[256]; char *ptr = NULL; char *key = NULL; char *val = NULL; - if (!read_power_file(base, node, "state", state, sizeof (state))) { + if (!read_power_file(base, node, "state", state, sizeof(state))) { return; } @@ -231,9 +223,7 @@ void PowerX11::check_proc_acpi_ac_adapter(const char * node, bool * have_ac) } } - -bool PowerX11::GetPowerInfo_Linux_proc_acpi() -{ +bool PowerX11::GetPowerInfo_Linux_proc_acpi() { String node; DirAccess *dirp = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); bool have_battery = false; @@ -244,16 +234,15 @@ bool PowerX11::GetPowerInfo_Linux_proc_acpi() this->percent_left = -1; this->power_state = POWERSTATE_UNKNOWN; - dirp->change_dir(proc_acpi_battery_path); dirp->list_dir_begin(); if (dirp == NULL) { - return false; /* can't use this interface. */ + return false; /* can't use this interface. */ } else { node = dirp->get_next(); while (node != "") { - check_proc_acpi_battery(node.utf8().get_data(), &have_battery, &charging/*, seconds, percent*/); + check_proc_acpi_battery(node.utf8().get_data(), &have_battery, &charging /*, seconds, percent*/); node = dirp->get_next(); } memdelete(dirp); @@ -262,7 +251,7 @@ bool PowerX11::GetPowerInfo_Linux_proc_acpi() dirp->change_dir(proc_acpi_ac_adapter_path); dirp->list_dir_begin(); if (dirp == NULL) { - return false; /* can't use this interface. */ + return false; /* can't use this interface. */ } else { node = dirp->get_next(); while (node != "") { @@ -282,16 +271,14 @@ bool PowerX11::GetPowerInfo_Linux_proc_acpi() this->power_state = POWERSTATE_ON_BATTERY; } - return true; /* definitive answer. */ + return true; /* definitive answer. */ } - -bool PowerX11::next_string(char **_ptr, char **_str) -{ +bool PowerX11::next_string(char **_ptr, char **_str) { char *ptr = *_ptr; char *str = *_str; - while (*ptr == ' ') { /* skip any spaces... */ + while (*ptr == ' ') { /* skip any spaces... */ ptr++; } @@ -311,67 +298,65 @@ bool PowerX11::next_string(char **_ptr, char **_str) return true; } -bool PowerX11::int_string(char *str, int *val) -{ +bool PowerX11::int_string(char *str, int *val) { String sval = str; *val = sval.to_int(); return (*str != '\0'); } /* http://lxr.linux.no/linux+v2.6.29/drivers/char/apm-emulation.c */ -bool PowerX11::GetPowerInfo_Linux_proc_apm() -{ +bool PowerX11::GetPowerInfo_Linux_proc_apm() { bool need_details = false; int ac_status = 0; int battery_status = 0; int battery_flag = 0; int battery_percent = 0; int battery_time = 0; - FileAccessRef fd = FileAccess::open(proc_apm_path,FileAccess::READ); + FileAccessRef fd = FileAccess::open(proc_apm_path, FileAccess::READ); char buf[128]; char *ptr = &buf[0]; char *str = NULL; ssize_t br; if (!fd) { - return false; /* can't use this interface. */ + return false; /* can't use this interface. */ } - br = fd->get_buffer(reinterpret_cast<uint8_t*>(buf), sizeof (buf) - 1); + br = fd->get_buffer(reinterpret_cast<uint8_t *>(buf), sizeof(buf) - 1); fd->close(); if (br < 0) { return false; } - buf[br] = '\0'; /* null-terminate the string. */ - if (!next_string(&ptr, &str)) { /* driver version */ + buf[br] = '\0'; /* null-terminate the string. */ + if (!next_string(&ptr, &str)) { /* driver version */ return false; } - if (!next_string(&ptr, &str)) { /* BIOS version */ + if (!next_string(&ptr, &str)) { /* BIOS version */ return false; } - if (!next_string(&ptr, &str)) { /* APM flags */ + if (!next_string(&ptr, &str)) { /* APM flags */ return false; } - if (!next_string(&ptr, &str)) { /* AC line status */ + if (!next_string(&ptr, &str)) { /* AC line status */ return false; } else if (!int_string(str, &ac_status)) { return false; } - if (!next_string(&ptr, &str)) { /* battery status */ + if (!next_string(&ptr, &str)) { /* battery status */ return false; } else if (!int_string(str, &battery_status)) { return false; } - if (!next_string(&ptr, &str)) { /* battery flag */ + if (!next_string(&ptr, &str)) { /* battery flag */ return false; } else if (!int_string(str, &battery_flag)) { return false; } - if (!next_string(&ptr, &str)) { /* remaining battery life percent */ + if (!next_string(&ptr, &str)) { /* remaining battery life percent */ return false; } String sstr = str; @@ -382,13 +367,13 @@ bool PowerX11::GetPowerInfo_Linux_proc_apm() return false; } - if (!next_string(&ptr, &str)) { /* remaining battery life time */ + if (!next_string(&ptr, &str)) { /* remaining battery life time */ return false; } else if (!int_string(str, &battery_time)) { return false; } - if (!next_string(&ptr, &str)) { /* remaining battery life time units */ + if (!next_string(&ptr, &str)) { /* remaining battery life time units */ return false; } else if (String(str) == "min") { battery_time *= 60; @@ -396,13 +381,13 @@ bool PowerX11::GetPowerInfo_Linux_proc_apm() if (battery_flag == 0xFF) { /* unknown state */ this->power_state = POWERSTATE_UNKNOWN; - } else if (battery_flag & (1 << 7)) { /* no battery */ + } else if (battery_flag & (1 << 7)) { /* no battery */ this->power_state = POWERSTATE_NO_BATTERY; - } else if (battery_flag & (1 << 3)) { /* charging */ + } else if (battery_flag & (1 << 3)) { /* charging */ this->power_state = POWERSTATE_CHARGING; need_details = true; } else if (ac_status == 1) { - this->power_state = POWERSTATE_CHARGED; /* on AC, not charging. */ + this->power_state = POWERSTATE_CHARGED; /* on AC, not charging. */ need_details = true; } else { this->power_state = POWERSTATE_ON_BATTERY; @@ -415,10 +400,10 @@ bool PowerX11::GetPowerInfo_Linux_proc_apm() const int pct = battery_percent; const int secs = battery_time; - if (pct >= 0) { /* -1 == unknown */ + if (pct >= 0) { /* -1 == unknown */ this->percent_left = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */ } - if (secs >= 0) { /* -1 == unknown */ + if (secs >= 0) { /* -1 == unknown */ this->nsecs_left = secs; } } @@ -428,9 +413,8 @@ bool PowerX11::GetPowerInfo_Linux_proc_apm() /* !!! FIXME: implement d-bus queries to org.freedesktop.UPower. */ -bool PowerX11::GetPowerInfo_Linux_sys_class_power_supply(/*PowerState *state, int *seconds, int *percent*/) -{ - const char* base = sys_class_power_supply_path; +bool PowerX11::GetPowerInfo_Linux_sys_class_power_supply(/*PowerState *state, int *seconds, int *percent*/) { + const char *base = sys_class_power_supply_path; String name; DirAccess *dirp = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); @@ -441,7 +425,7 @@ bool PowerX11::GetPowerInfo_Linux_sys_class_power_supply(/*PowerState *state, in return false; } - this->power_state = POWERSTATE_NO_BATTERY; /* assume we're just plugged in. */ + this->power_state = POWERSTATE_NO_BATTERY; /* assume we're just plugged in. */ this->nsecs_left = -1; this->percent_left = -1; @@ -456,24 +440,24 @@ bool PowerX11::GetPowerInfo_Linux_sys_class_power_supply(/*PowerState *state, in if ((name == ".") || (name == "..")) { name = dirp->get_next(); - continue; //skip these, of course. + continue; //skip these, of course. } else { - if (!read_power_file(base, name.utf8().get_data(), "type", str, sizeof (str))) { + if (!read_power_file(base, name.utf8().get_data(), "type", str, sizeof(str))) { name = dirp->get_next(); - continue; // Don't know _what_ we're looking at. Give up on it. + continue; // Don't know _what_ we're looking at. Give up on it. } else { if (String(str) != "Battery\n") { name = dirp->get_next(); - continue; // we don't care about UPS and such. + continue; // we don't care about UPS and such. } } } /* some drivers don't offer this, so if it's not explicitly reported assume it's present. */ - if (read_power_file(base, name.utf8().get_data(), "present", str, sizeof (str)) && (String(str) == "0\n")) { + if (read_power_file(base, name.utf8().get_data(), "present", str, sizeof(str)) && (String(str) == "0\n")) { st = POWERSTATE_NO_BATTERY; - } else if (!read_power_file(base, name.utf8().get_data(), "status", str, sizeof (str))) { - st = POWERSTATE_UNKNOWN; /* uh oh */ + } else if (!read_power_file(base, name.utf8().get_data(), "status", str, sizeof(str))) { + st = POWERSTATE_UNKNOWN; /* uh oh */ } else if (String(str) == "Charging\n") { st = POWERSTATE_CHARGING; } else if (String(str) == "Discharging\n") { @@ -481,21 +465,21 @@ bool PowerX11::GetPowerInfo_Linux_sys_class_power_supply(/*PowerState *state, in } else if ((String(str) == "Full\n") || (String(str) == "Not charging\n")) { st = POWERSTATE_CHARGED; } else { - st = POWERSTATE_UNKNOWN; /* uh oh */ + st = POWERSTATE_UNKNOWN; /* uh oh */ } - if (!read_power_file(base, name.utf8().get_data(), "capacity", str, sizeof (str))) { + if (!read_power_file(base, name.utf8().get_data(), "capacity", str, sizeof(str))) { pct = -1; } else { pct = String(str).to_int(); pct = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */ } - if (!read_power_file(base, name.utf8().get_data(), "time_to_empty_now", str, sizeof (str))) { + if (!read_power_file(base, name.utf8().get_data(), "time_to_empty_now", str, sizeof(str))) { secs = -1; } else { secs = String(str).to_int(); - secs = (secs <= 0) ? -1 : secs; /* 0 == unknown */ + secs = (secs <= 0) ? -1 : secs; /* 0 == unknown */ } /* @@ -504,7 +488,7 @@ bool PowerX11::GetPowerInfo_Linux_sys_class_power_supply(/*PowerState *state, in */ if ((secs < 0) && (this->nsecs_left < 0)) { if ((pct < 0) && (this->percent_left < 0)) { - choose = true; /* at least we know there's a battery. */ + choose = true; /* at least we know there's a battery. */ } else if (pct > this->percent_left) { choose = true; } @@ -522,26 +506,24 @@ bool PowerX11::GetPowerInfo_Linux_sys_class_power_supply(/*PowerState *state, in } memdelete(dirp); - return true; /* don't look any further*/ + return true; /* don't look any further*/ } - - -bool PowerX11::UpdatePowerInfo() -{ - if (GetPowerInfo_Linux_sys_class_power_supply()) { // try method 1 +bool PowerX11::UpdatePowerInfo() { + if (GetPowerInfo_Linux_sys_class_power_supply()) { // try method 1 return true; } - if (GetPowerInfo_Linux_proc_acpi()) { // try further + if (GetPowerInfo_Linux_proc_acpi()) { // try further return true; } - if (GetPowerInfo_Linux_proc_apm()) { // try even further + if (GetPowerInfo_Linux_proc_apm()) { // try even further return true; } return false; } -PowerX11::PowerX11() : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { +PowerX11::PowerX11() + : nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) { } PowerX11::~PowerX11() { @@ -550,8 +532,7 @@ PowerX11::~PowerX11() { PowerState PowerX11::get_power_state() { if (UpdatePowerInfo()) { return power_state; - } - else { + } else { return POWERSTATE_UNKNOWN; } } @@ -559,8 +540,7 @@ PowerState PowerX11::get_power_state() { int PowerX11::get_power_seconds_left() { if (UpdatePowerInfo()) { return nsecs_left; - } - else { + } else { return -1; } } @@ -568,8 +548,7 @@ int PowerX11::get_power_seconds_left() { int PowerX11::get_power_percent_left() { if (UpdatePowerInfo()) { return percent_left; - } - else { + } else { return -1; } } diff --git a/platform/x11/power_x11.h b/platform/x11/power_x11.h index 6efb2de348..7693a5b022 100644 --- a/platform/x11/power_x11.h +++ b/platform/x11/power_x11.h @@ -34,7 +34,6 @@ #include "os/file_access.h" #include "os/power.h" - class PowerX11 { private: @@ -42,12 +41,11 @@ private: int percent_left; PowerState power_state; - - FileAccessRef open_power_file(const char* base, const char* node, const char* key); - bool read_power_file(const char* base, const char* node, const char* key, char* buf, size_t buflen); + FileAccessRef open_power_file(const char *base, const char *node, const char *key); + bool read_power_file(const char *base, const char *node, const char *key, char *buf, size_t buflen); bool make_proc_acpi_key_val(char **_ptr, char **_key, char **_val); - void check_proc_acpi_battery(const char * node, bool * have_battery, bool * charging); - void check_proc_acpi_ac_adapter(const char * node, bool * have_ac); + void check_proc_acpi_battery(const char *node, bool *have_battery, bool *charging); + void check_proc_acpi_ac_adapter(const char *node, bool *have_ac); bool GetPowerInfo_Linux_proc_acpi(); bool next_string(char **_ptr, char **_str); bool int_string(char *str, int *val); @@ -55,7 +53,6 @@ private: bool GetPowerInfo_Linux_sys_class_power_supply(); bool UpdatePowerInfo(); - public: PowerX11(); virtual ~PowerX11(); |