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)
{
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);
};
int64_t GetCurrentTime(void);
//!< must be define in CPP by the application ...
void APP_Init(void);

View File

@ -57,6 +57,7 @@ namespace ewol {
bool IsSetInsert(void);
};
int64_t GetCurrentTime(void);
#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++) {
if (0 < messageData.nbMessages[iii]) {
// 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++) {
if (true == messageData.listOfMessages[iii][jjj].isActive) {
// copy the data :
@ -91,6 +104,7 @@ bool ewol::threadMsg::WaitMessage(ewol::threadMsg::threadMsg_ts& messageData, ew
messageData.listOfMessages[iii][jjj].isActive = false;
}
}
*/
// decrement the number of message :
messageData.nbMessages[iii]--;
if (0>messageData.nbMessages[iii]) {
@ -166,4 +180,7 @@ int32_t ewol::threadMsg::WaitingMessage(threadMsg_ts& messageData)
return nbMessage;
}
void ewol::threadMsg::SendDisplayDone(threadMsg_ts& messageData)
{
}

View File

@ -53,6 +53,7 @@ namespace ewol {
bool isInit;
pthread_mutex_t mutex;
pthread_cond_t condition;
//etk::VectorType<threadMsgContent_ts>
threadMsgContent_ts listOfMessages[MSG_PRIO_NUMBER][NUMBER_OF_ELEMENT_IN_THE_FIFO];
int32_t nbMessages[MSG_PRIO_NUMBER];
bool displayHasDone;
@ -63,6 +64,7 @@ namespace ewol {
bool WaitMessage(threadMsg_ts& messageData, threadMsgContent_ts &data);
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);
void SendDisplayDone(threadMsg_ts& messageData);
};
};

View File

@ -68,15 +68,18 @@ bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te
{
#ifdef __MODE__Touch
if (1 == IdInput) {
EWOL_VERBOSE("event 1 << " << (int32_t)typeEvent << "(" << x << "," << y << ")");
x -= m_origin.x;
y -= m_origin.y;
if (ewol::EVENT_INPUT_TYPE_DOWN == typeEvent) {
m_highSpeedMode = ewol::SCROLL_INIT;
m_highSpeedStartPos.x = x;
m_highSpeedStartPos.y = y;
EWOL_VERBOSE("SCROOL ==> INIT");
return true;
} else if (ewol::EVENT_INPUT_TYPE_UP == typeEvent) {
m_highSpeedMode = ewol::SCROLL_DISABLE;
EWOL_VERBOSE("SCROOL ==> DISABLE");
MarkToReedraw();
return true;
} 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 :
// select the direction :
m_highSpeedMode = ewol::SCROLL_ENABLE;
EWOL_VERBOSE("SCROOL ==> ENABLE");
MarkToReedraw();
}
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_highSpeedStartPos.x = x;
m_highSpeedStartPos.y = y;
EWOL_VERBOSE("SCROOL ==> MOVE (" << m_originScrooled.x << "," << m_originScrooled.y << ")");
MarkToReedraw();
return true;
}
} else if (ewol::SCROLL_DISABLE!=m_highSpeedMode && ewol::EVENT_INPUT_TYPE_LEAVE == typeEvent) {
m_highSpeedMode = ewol::SCROLL_DISABLE;
EWOL_VERBOSE("SCROOL ==> DISABLE");
MarkToReedraw();
return true;
}