[DEV] enable suspend mode in periodic call

This commit is contained in:
Edouard DUPIN 2013-09-04 22:04:31 +02:00
parent be8264edf9
commit d010c5ec2d
6 changed files with 62 additions and 33 deletions

View File

@ -203,8 +203,8 @@ public abstract class EwolWallpaper extends WallpaperService implements EwolCall
// no title in the wallpaper ... // no title in the wallpaper ...
Log.d("EwolCallback", "SET TITLE is not implemented ..."); Log.d("EwolCallback", "SET TITLE is not implemented ...");
} }
public void Stop() public void stop()
{ {
Log.d("EwolCallback", "STOP is not implemented ..."); Log.d("EwolCallback", "STOP is not implemented ...");
}; }
} }

View File

@ -565,6 +565,7 @@ extern "C"
// TODO : Generate error in java to stop the current instance // TODO : Generate error in java to stop the current instance
return; return;
} }
s_listInstance[_id]->OS_Resume();
} }
void Java_org_ewol_Ewol_EWonPause(JNIEnv* _env, jobject _thiz, jint _id) void Java_org_ewol_Ewol_EWonPause(JNIEnv* _env, jobject _thiz, jint _id)
{ {
@ -580,6 +581,7 @@ extern "C"
} }
// All the openGl has been destroyed ... // All the openGl has been destroyed ...
s_listInstance[_id]->GetResourcesManager().ContextHasBeenDestroyed(); s_listInstance[_id]->GetResourcesManager().ContextHasBeenDestroyed();
s_listInstance[_id]->OS_Suspend();
} }
void Java_org_ewol_Ewol_EWonStop(JNIEnv* _env, jobject _thiz, jint _id) void Java_org_ewol_Ewol_EWonStop(JNIEnv* _env, jobject _thiz, jint _id)
{ {
@ -593,6 +595,7 @@ extern "C"
// TODO : Generate error in java to stop the current instance // TODO : Generate error in java to stop the current instance
return; return;
} }
s_listInstance[_id]->OS_Stop();
} }
void Java_org_ewol_Ewol_EWonDestroy(JNIEnv* _env, jobject _thiz, jint _id) void Java_org_ewol_Ewol_EWonDestroy(JNIEnv* _env, jobject _thiz, jint _id)
{ {

View File

@ -440,6 +440,7 @@ bool ewol::eContext::OS_Draw(bool _displayEveryTime)
return false; return false;
} }
#endif #endif
m_previousDisplayTime = currentTime; m_previousDisplayTime = currentTime;
// process the events // process the events
@ -557,3 +558,13 @@ void ewol::eContext::OS_Stop(void)
} }
} }
void ewol::eContext::OS_Suspend(void)
{
m_previousDisplayTime = -1;
}
void ewol::eContext::OS_Resume(void)
{
m_previousDisplayTime = ewol::GetTime();
m_widgetManager.PeriodicCallResume(m_previousDisplayTime);
}

View File

@ -150,6 +150,14 @@ namespace ewol
ewol::keyEvent::keyboard_te _move, ewol::keyEvent::keyboard_te _move,
bool _isDown, bool _isDown,
bool _isARepeateKey=false); bool _isARepeateKey=false);
/**
* @brief The current context is suspended
*/
virtual void OS_Suspend(void);
/**
* @brief The current context is Resumed
*/
virtual void OS_Resume(void);
//virtual void OS_SetClipBoard(ewol::clipBoard::clipboardListe_te _clipboardID); //virtual void OS_SetClipBoard(ewol::clipBoard::clipboardListe_te _clipboardID);

View File

@ -70,27 +70,27 @@ ewol::WidgetManager::~WidgetManager(void)
m_creatorList.Clear(); m_creatorList.Clear();
} }
void ewol::WidgetManager::Rm(ewol::Widget * newWidget) void ewol::WidgetManager::Rm(ewol::Widget* _newWidget)
{ {
PeriodicCallRm(newWidget); PeriodicCallRm(_newWidget);
FocusRemoveIfRemove(newWidget); FocusRemoveIfRemove(_newWidget);
} }
/* ************************************************************************* /* *************************************************************************
* Focus Area : * Focus Area :
* *************************************************************************/ * *************************************************************************/
void ewol::WidgetManager::FocusKeep(ewol::Widget * newWidget) void ewol::WidgetManager::FocusKeep(ewol::Widget* _newWidget)
{ {
if (NULL == newWidget) { if (NULL == _newWidget) {
// nothing to do ... // nothing to do ...
return; return;
} }
if (false == newWidget->CanHaveFocus()) { if (false == _newWidget->CanHaveFocus()) {
EWOL_VERBOSE("Widget can not have Focus, id=" << 9999999999.999); EWOL_VERBOSE("Widget can not have Focus, id=" << 9999999999.999);
return; return;
} }
if (newWidget == m_focusWidgetCurrent) { if (_newWidget == m_focusWidgetCurrent) {
// nothing to do ... // nothing to do ...
return; return;
} }
@ -98,7 +98,7 @@ void ewol::WidgetManager::FocusKeep(ewol::Widget * newWidget)
EWOL_DEBUG("Rm Focus on WidgetID=" << m_focusWidgetCurrent->GetId() ); EWOL_DEBUG("Rm Focus on WidgetID=" << m_focusWidgetCurrent->GetId() );
m_focusWidgetCurrent->RmFocus(); m_focusWidgetCurrent->RmFocus();
} }
m_focusWidgetCurrent = newWidget; m_focusWidgetCurrent = _newWidget;
if (NULL != m_focusWidgetCurrent) { if (NULL != m_focusWidgetCurrent) {
EWOL_DEBUG("Set Focus on WidgetID=" << m_focusWidgetCurrent->GetId() ); EWOL_DEBUG("Set Focus on WidgetID=" << m_focusWidgetCurrent->GetId() );
m_focusWidgetCurrent->SetFocus(); m_focusWidgetCurrent->SetFocus();
@ -106,10 +106,11 @@ void ewol::WidgetManager::FocusKeep(ewol::Widget * newWidget)
} }
void ewol::WidgetManager::FocusSetDefault(ewol::Widget * newWidget) void ewol::WidgetManager::FocusSetDefault(ewol::Widget * _newWidget)
{ {
if (NULL != newWidget && false == newWidget->CanHaveFocus()) { if( NULL != _newWidget
EWOL_VERBOSE("Widget can not have Focus, id=" << newWidget->GetId() ); && false == _newWidget->CanHaveFocus() ) {
EWOL_VERBOSE("Widget can not have Focus, id=" << _newWidget->GetId() );
return; return;
} }
if (m_focusWidgetDefault == m_focusWidgetCurrent) { if (m_focusWidgetDefault == m_focusWidgetCurrent) {
@ -117,13 +118,13 @@ void ewol::WidgetManager::FocusSetDefault(ewol::Widget * newWidget)
EWOL_DEBUG("Rm Focus on WidgetID=" << m_focusWidgetCurrent->GetId() ); EWOL_DEBUG("Rm Focus on WidgetID=" << m_focusWidgetCurrent->GetId() );
m_focusWidgetCurrent->RmFocus(); m_focusWidgetCurrent->RmFocus();
} }
m_focusWidgetCurrent = newWidget; m_focusWidgetCurrent = _newWidget;
if (NULL != m_focusWidgetCurrent) { if (NULL != m_focusWidgetCurrent) {
EWOL_DEBUG("Set Focus on WidgetID=" << m_focusWidgetCurrent->GetId() ); EWOL_DEBUG("Set Focus on WidgetID=" << m_focusWidgetCurrent->GetId() );
m_focusWidgetCurrent->SetFocus(); m_focusWidgetCurrent->SetFocus();
} }
} }
m_focusWidgetDefault = newWidget; m_focusWidgetDefault = _newWidget;
} }
@ -150,13 +151,13 @@ ewol::Widget * ewol::WidgetManager::FocusGet(void)
return m_focusWidgetCurrent; return m_focusWidgetCurrent;
} }
void ewol::WidgetManager::FocusRemoveIfRemove(ewol::Widget * newWidget) void ewol::WidgetManager::FocusRemoveIfRemove(ewol::Widget* _newWidget)
{ {
if (m_focusWidgetCurrent == newWidget) { if (m_focusWidgetCurrent == _newWidget) {
EWOL_WARNING("Release Focus when remove widget"); EWOL_WARNING("Release Focus when remove widget");
FocusRelease(); FocusRelease();
} }
if (m_focusWidgetDefault == newWidget) { if (m_focusWidgetDefault == _newWidget) {
EWOL_WARNING("Release default Focus when remove widget"); EWOL_WARNING("Release default Focus when remove widget");
FocusSetDefault(NULL); FocusSetDefault(NULL);
} }
@ -164,28 +165,28 @@ void ewol::WidgetManager::FocusRemoveIfRemove(ewol::Widget * newWidget)
void ewol::WidgetManager::PeriodicCallAdd(ewol::Widget * pWidget) void ewol::WidgetManager::PeriodicCallAdd(ewol::Widget* _pWidget)
{ {
for (int32_t iii=0; iii < m_listOfPeriodicWidget.Size(); iii++) { for (int32_t iii=0; iii < m_listOfPeriodicWidget.Size(); iii++) {
if (m_listOfPeriodicWidget[iii] == pWidget) { if (m_listOfPeriodicWidget[iii] == _pWidget) {
return; return;
} }
} }
for (int32_t iii=0; iii < m_listOfPeriodicWidget.Size(); iii++) { for (int32_t iii=0; iii < m_listOfPeriodicWidget.Size(); iii++) {
if (NULL == m_listOfPeriodicWidget[iii]) { if (NULL == m_listOfPeriodicWidget[iii]) {
m_listOfPeriodicWidget[iii] = pWidget; m_listOfPeriodicWidget[iii] = _pWidget;
return; return;
} }
} }
m_listOfPeriodicWidget.PushBack(pWidget); m_listOfPeriodicWidget.PushBack(_pWidget);
m_havePeriodic = true; m_havePeriodic = true;
} }
void ewol::WidgetManager::PeriodicCallRm(ewol::Widget * pWidget) void ewol::WidgetManager::PeriodicCallRm(ewol::Widget * _pWidget)
{ {
int32_t nbElement = 0; int32_t nbElement = 0;
for (int32_t iii=m_listOfPeriodicWidget.Size()-1; iii>=0 ; iii--) { for (int32_t iii=m_listOfPeriodicWidget.Size()-1; iii>=0 ; iii--) {
if (m_listOfPeriodicWidget[iii] == pWidget) { if (m_listOfPeriodicWidget[iii] == _pWidget) {
m_listOfPeriodicWidget[iii] = NULL; m_listOfPeriodicWidget[iii] = NULL;
} else { } else {
nbElement++; nbElement++;
@ -196,6 +197,11 @@ void ewol::WidgetManager::PeriodicCallRm(ewol::Widget * pWidget)
} }
} }
void ewol::WidgetManager::PeriodicCallResume(int64_t _localTime)
{
m_lastPeriodicCallTime = _localTime;
}
void ewol::WidgetManager::PeriodicCall(int64_t _localTime) void ewol::WidgetManager::PeriodicCall(int64_t _localTime)
{ {
int64_t previousTime = m_lastPeriodicCallTime; int64_t previousTime = m_lastPeriodicCallTime;

View File

@ -23,8 +23,8 @@ namespace ewol
typedef ewol::Widget* (*creator_tf)(void); typedef ewol::Widget* (*creator_tf)(void);
private: private:
// For the focus Management // For the focus Management
ewol::Widget * m_focusWidgetDefault; ewol::Widget* m_focusWidgetDefault;
ewol::Widget * m_focusWidgetCurrent; ewol::Widget* m_focusWidgetCurrent;
etk::Vector<ewol::Widget*> m_listOfPeriodicWidget; etk::Vector<ewol::Widget*> m_listOfPeriodicWidget;
bool m_havePeriodic; bool m_havePeriodic;
bool m_haveRedraw; bool m_haveRedraw;
@ -35,17 +35,18 @@ namespace ewol
WidgetManager(void); WidgetManager(void);
~WidgetManager(void); ~WidgetManager(void);
// need to call when remove a widget to clear all dependency of the focus system // need to call when remove a widget to clear all dependency of the focus system
void Rm(ewol::Widget * newWidget); void Rm(ewol::Widget* _newWidget);
void FocusKeep(ewol::Widget * newWidget); // set the focus at the specific widget void FocusKeep(ewol::Widget* _newWidget); // set the focus at the specific widget
void FocusSetDefault(ewol::Widget * newWidget); // select the default focus getter void FocusSetDefault(ewol::Widget* _newWidget); // select the default focus getter
void FocusRelease(void); // Release focus from the current widget to the default void FocusRelease(void); // Release focus from the current widget to the default
ewol::Widget* FocusGet(void); ewol::Widget* FocusGet(void);
void FocusRemoveIfRemove(ewol::Widget * newWidget); void FocusRemoveIfRemove(ewol::Widget* _newWidget);
void PeriodicCallAdd(ewol::Widget* pWidget); void PeriodicCallAdd(ewol::Widget* _pWidget);
void PeriodicCallRm(ewol::Widget* pWidget); void PeriodicCallRm(ewol::Widget* _pWidget);
void PeriodicCall(int64_t localTime); void PeriodicCall(int64_t _localTime);
void PeriodicCallResume(int64_t _localTime);
bool PeriodicCallHave(void); bool PeriodicCallHave(void);
void MarkDrawingIsNeeded(void); void MarkDrawingIsNeeded(void);