correction of the scrooling problems==> message to the thread is bad

This commit is contained in:
Edouard Dupin 2012-02-18 11:51:18 +01:00
parent f5147fa4a5
commit 62852ff7c9
6 changed files with 29 additions and 3 deletions

View File

@ -336,6 +336,7 @@ void EWOL_ThreadEventShow(void)
void EWOL_ThreadEventHasJustDisplay(void) void EWOL_ThreadEventHasJustDisplay(void)
{ {
ewol::threadMsg::SendMessage(androidJniMsg, THREAD_JUST_DISPLAY, ewol::threadMsg::MSG_PRIO_REAL_TIME); ewol::threadMsg::SendDisplayDone(androidJniMsg);
//ewol::threadMsg::SendMessage(androidJniMsg, THREAD_JUST_DISPLAY, ewol::threadMsg::MSG_PRIO_REAL_TIME);
} }

View File

@ -49,7 +49,6 @@ namespace guiAbstraction
void SendKeyboardEventMove(bool isDown, ewol::eventKbMoveType_te &keyInput); void SendKeyboardEventMove(bool isDown, ewol::eventKbMoveType_te &keyInput);
}; };
int64_t GetCurrentTime(void);
//!< must be define in CPP by the application ... //!< must be define in CPP by the application ...
void APP_Init(void); void APP_Init(void);

View File

@ -57,6 +57,7 @@ namespace ewol {
bool IsSetInsert(void); bool IsSetInsert(void);
}; };
int64_t GetCurrentTime(void);
#endif #endif

View File

@ -83,6 +83,19 @@ bool ewol::threadMsg::WaitMessage(ewol::threadMsg::threadMsg_ts& messageData, ew
for (int32_t iii=0; MSG_PRIO_NUMBER>iii; iii++) { for (int32_t iii=0; MSG_PRIO_NUMBER>iii; iii++) {
if (0 < messageData.nbMessages[iii]) { if (0 < messageData.nbMessages[iii]) {
// find a message : // find a message :
if (false == messageData.listOfMessages[iii][0].isActive) {
EWOL_ERROR( "an error occured ==> bad case ...");
data.isActive = false;
data.type = 0;
data.data[0] = '\0';
} else {
data = messageData.listOfMessages[iii][0];
messageData.listOfMessages[iii][0].isActive = false;
}
memmove(&messageData.listOfMessages[iii][0], &messageData.listOfMessages[iii][1], (NUMBER_OF_ELEMENT_IN_THE_FIFO-1)*sizeof(ewol::threadMsg::threadMsgContent_ts) );
messageData.listOfMessages[iii][NUMBER_OF_ELEMENT_IN_THE_FIFO-1].isActive = false;
/*
for (int32_t jjj=0; NUMBER_OF_ELEMENT_IN_THE_FIFO>jjj; jjj++) { for (int32_t jjj=0; NUMBER_OF_ELEMENT_IN_THE_FIFO>jjj; jjj++) {
if (true == messageData.listOfMessages[iii][jjj].isActive) { if (true == messageData.listOfMessages[iii][jjj].isActive) {
// copy the data : // copy the data :
@ -91,6 +104,7 @@ bool ewol::threadMsg::WaitMessage(ewol::threadMsg::threadMsg_ts& messageData, ew
messageData.listOfMessages[iii][jjj].isActive = false; messageData.listOfMessages[iii][jjj].isActive = false;
} }
} }
*/
// decrement the number of message : // decrement the number of message :
messageData.nbMessages[iii]--; messageData.nbMessages[iii]--;
if (0>messageData.nbMessages[iii]) { if (0>messageData.nbMessages[iii]) {
@ -166,4 +180,7 @@ int32_t ewol::threadMsg::WaitingMessage(threadMsg_ts& messageData)
return nbMessage; return nbMessage;
} }
void ewol::threadMsg::SendDisplayDone(threadMsg_ts& messageData)
{
}

View File

@ -53,6 +53,7 @@ namespace ewol {
bool isInit; bool isInit;
pthread_mutex_t mutex; pthread_mutex_t mutex;
pthread_cond_t condition; pthread_cond_t condition;
//etk::VectorType<threadMsgContent_ts>
threadMsgContent_ts listOfMessages[MSG_PRIO_NUMBER][NUMBER_OF_ELEMENT_IN_THE_FIFO]; threadMsgContent_ts listOfMessages[MSG_PRIO_NUMBER][NUMBER_OF_ELEMENT_IN_THE_FIFO];
int32_t nbMessages[MSG_PRIO_NUMBER]; int32_t nbMessages[MSG_PRIO_NUMBER];
bool displayHasDone; bool displayHasDone;
@ -63,6 +64,7 @@ namespace ewol {
bool WaitMessage(threadMsg_ts& messageData, threadMsgContent_ts &data); bool WaitMessage(threadMsg_ts& messageData, threadMsgContent_ts &data);
int32_t WaitingMessage(threadMsg_ts& messageData); int32_t WaitingMessage(threadMsg_ts& messageData);
bool SendMessage(threadMsg_ts& messageData, uint32_t type, msgPriority_te prio = MSG_PRIO_NONE, void * data = NULL, uint32_t size = 0); bool SendMessage(threadMsg_ts& messageData, uint32_t type, msgPriority_te prio = MSG_PRIO_NONE, void * data = NULL, uint32_t size = 0);
void SendDisplayDone(threadMsg_ts& messageData);
}; };
}; };

View File

@ -68,15 +68,18 @@ bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te
{ {
#ifdef __MODE__Touch #ifdef __MODE__Touch
if (1 == IdInput) { if (1 == IdInput) {
EWOL_VERBOSE("event 1 << " << (int32_t)typeEvent << "(" << x << "," << y << ")");
x -= m_origin.x; x -= m_origin.x;
y -= m_origin.y; y -= m_origin.y;
if (ewol::EVENT_INPUT_TYPE_DOWN == typeEvent) { if (ewol::EVENT_INPUT_TYPE_DOWN == typeEvent) {
m_highSpeedMode = ewol::SCROLL_INIT; m_highSpeedMode = ewol::SCROLL_INIT;
m_highSpeedStartPos.x = x; m_highSpeedStartPos.x = x;
m_highSpeedStartPos.y = y; m_highSpeedStartPos.y = y;
EWOL_VERBOSE("SCROOL ==> INIT");
return true; return true;
} else if (ewol::EVENT_INPUT_TYPE_UP == typeEvent) { } else if (ewol::EVENT_INPUT_TYPE_UP == typeEvent) {
m_highSpeedMode = ewol::SCROLL_DISABLE; m_highSpeedMode = ewol::SCROLL_DISABLE;
EWOL_VERBOSE("SCROOL ==> DISABLE");
MarkToReedraw(); MarkToReedraw();
return true; return true;
} else if (ewol::SCROLL_INIT==m_highSpeedMode && ewol::EVENT_INPUT_TYPE_MOVE == typeEvent) { } else if (ewol::SCROLL_INIT==m_highSpeedMode && ewol::EVENT_INPUT_TYPE_MOVE == typeEvent) {
@ -86,6 +89,7 @@ bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te
// the scrooling can start : // the scrooling can start :
// select the direction : // select the direction :
m_highSpeedMode = ewol::SCROLL_ENABLE; m_highSpeedMode = ewol::SCROLL_ENABLE;
EWOL_VERBOSE("SCROOL ==> ENABLE");
MarkToReedraw(); MarkToReedraw();
} }
return true; return true;
@ -99,11 +103,13 @@ bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te
m_originScrooled.y = etk_min(m_originScrooled.y, m_maxSize.y); m_originScrooled.y = etk_min(m_originScrooled.y, m_maxSize.y);
m_highSpeedStartPos.x = x; m_highSpeedStartPos.x = x;
m_highSpeedStartPos.y = y; m_highSpeedStartPos.y = y;
EWOL_VERBOSE("SCROOL ==> MOVE (" << m_originScrooled.x << "," << m_originScrooled.y << ")");
MarkToReedraw(); MarkToReedraw();
return true; return true;
} }
} else if (ewol::SCROLL_DISABLE!=m_highSpeedMode && ewol::EVENT_INPUT_TYPE_LEAVE == typeEvent) { } else if (ewol::SCROLL_DISABLE!=m_highSpeedMode && ewol::EVENT_INPUT_TYPE_LEAVE == typeEvent) {
m_highSpeedMode = ewol::SCROLL_DISABLE; m_highSpeedMode = ewol::SCROLL_DISABLE;
EWOL_VERBOSE("SCROOL ==> DISABLE");
MarkToReedraw(); MarkToReedraw();
return true; return true;
} }