diff --git a/Java/PROJECT_NAME.java b/Java/PROJECT_NAME.java index 10c0352a..ed79f4a5 100644 --- a/Java/PROJECT_NAME.java +++ b/Java/PROJECT_NAME.java @@ -193,14 +193,12 @@ class EwolGLSurfaceView extends GLSurfaceView { nativeEventInputState(event.getPointerId(0), false, (float)event.getX(0), (float)event.getY(0)); InputDown3 = false; } - } else { - nativeEventUnknow(tmpActionType); } return true; } public boolean onKeyDown (int keyCode, KeyEvent event){ - nativeEventUnknow(156); + // TODO ... return true; } diff --git a/Java/ewolAndroidAbstraction.cpp b/Java/ewolAndroidAbstraction.cpp index f7e0e0bf..3f44beef 100644 --- a/Java/ewolAndroidAbstraction.cpp +++ b/Java/ewolAndroidAbstraction.cpp @@ -33,150 +33,11 @@ // declaration of the ewol android abstraction ... void EWOL_NativeInit(void); -void EWOL_NativeResize(int w, int h ); void EWOL_NativeDone(void); -void EWOL_NativeEventInputMotion(int pointerID, float x, float y ); -void EWOL_NativeEventInputState(int pointerID, bool isUp, float x, float y ); -void EWOL_NativeEventUnknow(int ID); -void EWOL_NativeParamSetArchiveDir(int mode, const char* str); void EWOL_NativeApplicationInit(void); void EWOL_NativeApplicationUnInit(void); void EWOL_NativeRender(void); -static ewol::threadMsg::threadMsg_ts androidJniMsg; -static pthread_t androidJniThread; -static pthread_attr_t androidJniThreadAttr; - -enum { - JNI_NONE, - JNI_INIT, - JNI_UN_INIT, - JNI_DONE, - JNI_RESIZE, - JNI_INPUT_MOTION, - JNI_INPUT_STATE, - JNI_DATA_ARCHIVE_DIR, - JNI_APP_INIT, - JNI_APP_UN_INIT, - JNI_APP_RENDERER, - -}; - - -#include - -typedef struct { - int w; - int h; -} eventResize_ts; - -typedef struct { - int pointerID; - float x; - float y; -} eventInputMotion_ts; - -typedef struct { - int pointerID; - bool state; - float x; - float y; -} eventInputState_ts; - - - -static void* BaseAppEntry(void* param) -{ - bool requestEndProcessing = false; - EDN_DEBUG("start Ewol Basic thread ..."); - while(false == requestEndProcessing) { - ewol::threadMsg::threadMsgContent_ts data; - ewol::threadMsg::WaitMessage(androidJniMsg, data); - switch (data.type) { - case JNI_NONE: - EDN_DEBUG("Receive MSG : JNI_NONE"); - break; - case JNI_INIT: - EDN_DEBUG("Receive MSG : JNI_INIT"); - EWOL_NativeApplicationInit(); - break; - case JNI_UN_INIT: - EDN_DEBUG("Receive MSG : JNI_UN_INIT"); - EWOL_NativeApplicationUnInit(); - requestEndProcessing = true; - break; - case JNI_DONE: - EDN_DEBUG("Receive MSG : JNI_DONE"); - break; - case JNI_RESIZE: - EDN_DEBUG("Receive MSG : JNI_RESIZE"); - { - eventResize_ts * tmpData = (eventResize_ts*)data.data; - EWOL_NativeResize(tmpData->w, tmpData->h); - EWOL_NativeInit(); - } - break; - case JNI_INPUT_MOTION: - EDN_DEBUG("Receive MSG : JNI_INPUT_MOTION"); - { - eventInputMotion_ts * tmpData = (eventInputMotion_ts*)data.data; - EWOL_NativeEventInputMotion(tmpData->pointerID, tmpData->x, tmpData->y); - } - break; - case JNI_INPUT_STATE: - EDN_DEBUG("Receive MSG : JNI_INPUT_STATE"); - { - eventInputState_ts * tmpData = (eventInputState_ts*)data.data; - EWOL_NativeEventInputState(tmpData->pointerID, tmpData->state, tmpData->x, tmpData->y); - } - break; - case JNI_DATA_ARCHIVE_DIR: - EDN_DEBUG("Receive MSG : JNI_DATA_ARCHIVE_DIR"); - break; - case JNI_APP_INIT: - EDN_DEBUG("Receive MSG : JNI_APP_INIT"); - break; - case JNI_APP_UN_INIT: - EDN_DEBUG("Receive MSG : JNI_APP_UN_INIT"); - break; - case JNI_APP_RENDERER: - EDN_DEBUG("Receive MSG : JNI_APP_RENDERER"); - break; - default: - EDN_DEBUG("Receive MSG : UNKNOW"); - break; - } - } - EDN_DEBUG("End Ewol Basic thread ..."); - pthread_exit(NULL); -} - -bool isGlobalSystemInit = false; - -void BaseInit(void) -{ - if (false == isGlobalSystemInit) { - // create interface mutex : - ewol::threadMsg::Init(androidJniMsg); - // init the thread : - pthread_create(&androidJniThread, NULL, BaseAppEntry, NULL); - isGlobalSystemInit = true; - ewol::threadMsg::SendMessage(androidJniMsg, JNI_INIT, ewol::threadMsg::MSG_PRIO_REAL_TIME); - } -} - -void BaseUnInit(void) -{ - if (true == isGlobalSystemInit) { - isGlobalSystemInit = false; - ewol::threadMsg::SendMessage(androidJniMsg, JNI_UN_INIT, ewol::threadMsg::MSG_PRIO_REAL_TIME); - - EDN_DEBUG("Wait end of the thread ..."); - // Wait end of the thread - pthread_join(androidJniThread, NULL); - ewol::threadMsg::UnInit(androidJniMsg); - } -} extern "C" { @@ -186,7 +47,7 @@ extern "C" { // direct setting of the date in the string system ... const char* str = env->GetStringUTFChars(myString,0); - EWOL_NativeParamSetArchiveDir(mode, str); + EWOL_ThreadSetArchiveDir(mode, str); //env->ReleaseStringUTFChars(str,myString,0); } @@ -257,12 +118,6 @@ extern "C" } - void Java_com___PROJECT_VENDOR_____PROJECT_PACKAGE___EwolGLSurfaceView_nativeEventUnknow( JNIEnv* env, jobject thiz, jint ID) - { - //EWOL_NativeEventUnknow(ID); - } - - void Java_com___PROJECT_VENDOR_____PROJECT_PACKAGE___EwolGLSurfaceView_nativeApplicationInit( JNIEnv* env) { ewol::threadMsg::SendMessage(androidJniMsg, JNI_APP_INIT); diff --git a/Sources/libetk/etk/VectorType.h b/Sources/libetk/etk/VectorType.h index 149f8a31..a0658c63 100644 --- a/Sources/libetk/etk/VectorType.h +++ b/Sources/libetk/etk/VectorType.h @@ -463,7 +463,7 @@ template class VectorType */ void Erase(int32_t pos) { - if (pos>m_size) { + if (pos<0 || (uint32_t)pos>m_size) { TK_ERROR(" can not Erase Element at this position : " << pos << " > " << m_size); return; } diff --git a/Sources/libewol/ewol/base/MainThread.cpp b/Sources/libewol/ewol/base/MainThread.cpp new file mode 100644 index 00000000..13797c99 --- /dev/null +++ b/Sources/libewol/ewol/base/MainThread.cpp @@ -0,0 +1,234 @@ +/** + ******************************************************************************* + * @file MainThread.cpp + * @brief Main Ewol thread for the abstraction of the OS problematics (Sources) + * @author Edouard DUPIN + * @date 27/01/2012 + * @par Project + * ewol + * + * @par Copyright + * Copyright 2011 Edouard DUPIN, all right reserved + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY. + * + * Licence summary : + * You can modify and redistribute the sources code and binaries. + * You can send me the bug-fix + * + * Term of the licence in in the file licence.txt. + * + ******************************************************************************* + */ + + +#include +#include +#include +#include + + + +static ewol::threadMsg::threadMsg_ts androidJniMsg; +static pthread_t androidJniThread; +static pthread_attr_t androidJniThreadAttr; + +enum { + JNI_NONE, + JNI_INIT, + JNI_UN_INIT, + JNI_DONE, + JNI_RESIZE, + JNI_INPUT_MOTION, + JNI_INPUT_STATE, + JNI_DATA_ARCHIVE_DIR, + JNI_APP_INIT, + JNI_APP_UN_INIT, + JNI_APP_RENDERER, +}; + + +#include + +typedef struct { + int w; + int h; +} eventResize_ts; + +typedef struct { + int pointerID; + float x; + float y; +} eventInputMotion_ts; + +typedef struct { + int pointerID; + bool state; + float x; + float y; +} eventInputState_ts; + + + +static void* BaseAppEntry(void* param) +{ + bool requestEndProcessing = false; + EDN_DEBUG("start Ewol Basic thread ..."); + guiAbstraction::Init(0, NULL); + ewol::Init(0, NULL); + APP_Init(0, NULL); + while(false == requestEndProcessing) { + ewol::threadMsg::threadMsgContent_ts data; + ewol::threadMsg::WaitMessage(androidJniMsg, data); + switch (data.type) { + case JNI_NONE: + EDN_DEBUG("Receive MSG : JNI_NONE"); + break; + case JNI_INIT: + EDN_DEBUG("Receive MSG : JNI_INIT"); + EWOL_NativeApplicationInit(); + break; + case JNI_UN_INIT: + EDN_DEBUG("Receive MSG : JNI_UN_INIT"); + EWOL_NativeApplicationUnInit(); + requestEndProcessing = true; + break; + case JNI_DONE: + EDN_DEBUG("Receive MSG : JNI_DONE"); + break; + case JNI_RESIZE: + EDN_DEBUG("Receive MSG : JNI_RESIZE"); + { + eventResize_ts * tmpData = (eventResize_ts*)data.data; + EWOL_NativeResize(tmpData->w, tmpData->h); + EWOL_NativeInit(); + } + break; + case JNI_INPUT_MOTION: + EDN_DEBUG("Receive MSG : JNI_INPUT_MOTION"); + { + eventInputMotion_ts * tmpData = (eventInputMotion_ts*)data.data; + EWOL_NativeEventInputMotion(tmpData->pointerID, tmpData->x, tmpData->y); + } + break; + case JNI_INPUT_STATE: + EDN_DEBUG("Receive MSG : JNI_INPUT_STATE"); + { + eventInputState_ts * tmpData = (eventInputState_ts*)data.data; + EWOL_NativeEventInputState(tmpData->pointerID, tmpData->state, tmpData->x, tmpData->y); + } + break; + case JNI_DATA_ARCHIVE_DIR: + EDN_DEBUG("Receive MSG : JNI_DATA_ARCHIVE_DIR"); + break; + case JNI_APP_INIT: + EDN_DEBUG("Receive MSG : JNI_APP_INIT"); + break; + case JNI_APP_UN_INIT: + EDN_DEBUG("Receive MSG : JNI_APP_UN_INIT"); + break; + case JNI_APP_RENDERER: + EDN_DEBUG("Receive MSG : JNI_APP_RENDERER"); + break; + default: + EDN_DEBUG("Receive MSG : UNKNOW"); + break; + } + } + EDN_DEBUG("End Ewol Basic thread ..."); + + // unset all windows + ewol::DisplayWindows(NULL); + // call application to uninit + APP_UnInit(); + // basic abstraction un-init + guiAbstraction::UnInit(); + // uninit Ewol + ewol::UnInit(); + + pthread_exit(NULL); +} + + +void EWOL_ThreadSetArchiveDir(int mode, const char* str) +{ + switch(mode) + { + case 0: + EWOL_DEBUG("Directory APK : path=" << str); + //if (firstInitDone == false) + { + etk::SetBaseFolderData(str); + } + break; + case 1: + EWOL_DEBUG("Directory mode=FILE path=" << str); + //if (firstInitDone == false) + { + etk::SetBaseFolderDataUser(str); + } + break; + case 2: + EWOL_DEBUG("Directory mode=CACHE path=" << str); + //if (firstInitDone == false) + { + etk::SetBaseFolderCache(str); + } + break; + case 3: + EWOL_DEBUG("Directory mode=EXTERNAL_CACHE path=" << str); + break; + default: + EWOL_DEBUG("Directory mode=???? path=" << str); + break; + } +} + + +bool isGlobalSystemInit = false; + +void EWOL_SystemStart(void) +{ + if (false == isGlobalSystemInit) { + // create interface mutex : + ewol::threadMsg::Init(androidJniMsg); + // init the thread : + pthread_create(&androidJniThread, NULL, BaseAppEntry, NULL); + isGlobalSystemInit = true; + ewol::threadMsg::SendMessage(androidJniMsg, JNI_INIT, ewol::threadMsg::MSG_PRIO_REAL_TIME); + } +} + +void EWOL_SystemStop(void) +{ + if (true == isGlobalSystemInit) { + isGlobalSystemInit = false; + ewol::threadMsg::SendMessage(androidJniMsg, JNI_UN_INIT, ewol::threadMsg::MSG_PRIO_REAL_TIME); + + EDN_DEBUG("Wait end of the thread ..."); + // Wait end of the thread + pthread_join(androidJniThread, NULL); + ewol::threadMsg::UnInit(androidJniMsg); + } +} + + + +void EWOL_ThreadResize(int w, int h ) +{ + +} + + +void EWOL_ThreadEventInputMotion(int pointerID, float x, float y ) +{ + +} + + +void EWOL_ThreadEventInputState(int pointerID, bool isUp, float x, float y ) +{ + +} + diff --git a/Sources/libewol/ewol/base/MainThread.h b/Sources/libewol/ewol/base/MainThread.h new file mode 100644 index 00000000..0cef42c2 --- /dev/null +++ b/Sources/libewol/ewol/base/MainThread.h @@ -0,0 +1,44 @@ +/** + ******************************************************************************* + * @file MainThread.h + * @brief Main Ewol thread for the abstraction of the OS problematics (Header) + * @author Edouard DUPIN + * @date 27/01/2012 + * @par Project + * ewol + * + * @par Copyright + * Copyright 2011 Edouard DUPIN, all right reserved + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY. + * + * Licence summary : + * You can modify and redistribute the sources code and binaries. + * You can send me the bug-fix + * + * Term of the licence in in the file licence.txt. + * + ******************************************************************************* + */ + + + +#ifndef __EWOL_MAIN_TREAD_H__ +#define __EWOL_MAIN_TREAD_H__ + +#include + +void EWOL_SystemStart(void); +void EWOL_SystemStop(void); + + +void EWOL_ThreadSetArchiveDir(int mode, const char* str); +void EWOL_ThreadResize(int w, int h ); +void EWOL_ThreadEventInputMotion(int pointerID, float x, float y ); +void EWOL_ThreadEventInputState(int pointerID, bool isUp, float x, float y ); + + + +#endif + diff --git a/Sources/libewol/ewol/base/guiAndroid.cpp b/Sources/libewol/ewol/base/guiAndroid.cpp index 3fcbf1ee..6d9d214c 100644 --- a/Sources/libewol/ewol/base/guiAndroid.cpp +++ b/Sources/libewol/ewol/base/guiAndroid.cpp @@ -238,95 +238,10 @@ void EWOL_NativeEventInputState(int pointerID, bool isUp, float x, float y ) } } -void EWOL_NativeEventUnknow(int eventID) -{ - EWOL_WARNING("Event : Unknow ID=" << eventID); -} - - -void EWOL_NativeParamSetArchiveDir(int mode, const char* str) -{ - switch(mode) - { - case 0: - EWOL_DEBUG("Directory APK : path=" << str); - //if (firstInitDone == false) - { - etk::SetBaseFolderData(str); - } - break; - case 1: - EWOL_DEBUG("Directory mode=FILE path=" << str); - //if (firstInitDone == false) - { - etk::SetBaseFolderDataUser(str); - } - break; - case 2: - EWOL_DEBUG("Directory mode=CACHE path=" << str); - //if (firstInitDone == false) - { - etk::SetBaseFolderCache(str); - } - break; - case 3: - EWOL_DEBUG("Directory mode=EXTERNAL_CACHE path=" << str); - break; - default: - EWOL_DEBUG("Directory mode=???? path=" << str); - break; - } -} - - -static bool isAlreadyInit = false; - -void EWOL_NativeApplicationInit(void) -{ - int64_t time = GetCurrentTime(); - EWOL_WARNING("Event : Init Application (start)" << time); - if (false == isAlreadyInit) { - guiAbstraction::Init(0, NULL); - ewol::Init(0, NULL); - APP_Init(0, NULL); - isAlreadyInit = true; - } - time = GetCurrentTime(); - EWOL_WARNING("Event : Init Application (end)" << time); -} - -void EWOL_NativeApplicationUnInit(void) -{ - EWOL_WARNING("Event : UnInit application"); - // unset all windows - ewol::DisplayWindows(NULL); - // call application to uninit - APP_UnInit(); - // basic abstraction un-init - guiAbstraction::UnInit(); - // uninit Ewol - ewol::UnInit(); -} /* Call to render the next GL frame */ void EWOL_NativeRender(void) { - long curTime; - - /* NOTE: if sDemoStopped is TRUE, then we re-render the same frame - * on each iteration. - */ - if (sDemoStopped) { - curTime = sTimeStopped + sTimeOffset; - } else { - curTime =GetCurrentTime() + sTimeOffset; - if (sTimeOffsetInit == 0) { - sTimeOffsetInit = 1; - sTimeOffset = -curTime; - curTime = 0; - } - } - Draw(); }