BUG correction: text not cleared on deallocation, better state printing in state machine

Signed-off-by: Vincent-FK <vincent.buso@funkey-project.com>
This commit is contained in:
Vincent-FK 2020-02-04 12:54:28 +01:00
parent c96bd40a9b
commit 5bb70b02eb
6 changed files with 72 additions and 153 deletions

View File

@ -288,9 +288,11 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info, std::string me
bool romHierarchy = false; bool romHierarchy = false;
bool truRIP = false; bool truRIP = false;
/* Clear Item list */
//info->items.clear();
if (mergedCollectionName != "") if (mergedCollectionName != "")
{ {
std::string mergedFile = Utils::combinePath(Configuration::absolutePath, "collections", mergedCollectionName, info->name + ".sub"); std::string mergedFile = Utils::combinePath(Configuration::absolutePath, "collections", mergedCollectionName, info->name + ".sub");
Logger::write(Logger::ZONE_INFO, "CollectionInfoBuilder", "Checking for \"" + mergedFile + "\""); Logger::write(Logger::ZONE_INFO, "CollectionInfoBuilder", "Checking for \"" + mergedFile + "\"");
(void)conf_.getProperty("collections." + mergedCollectionName + ".list.includeMissingItems", showMissing); (void)conf_.getProperty("collections." + mergedCollectionName + ".list.includeMissingItems", showMissing);

View File

@ -152,6 +152,7 @@ void ScrollingList::deallocateSpritePoints( )
void ScrollingList::allocateSpritePoints( ) void ScrollingList::allocateSpritePoints( )
{ {
if ( !items_ || items_->size( ) == 0 ) return; if ( !items_ || items_->size( ) == 0 ) return;
if ( !scrollPoints_ ) return; if ( !scrollPoints_ ) return;
if ( components_.size( ) == 0 ) return; if ( components_.size( ) == 0 ) return;
@ -611,6 +612,7 @@ bool ScrollingList::allocateTexture( unsigned int index, Item *item )
for ( unsigned int n = 0; n < names.size() && !t; ++n ) for ( unsigned int n = 0; n < names.size() && !t; ++n )
{ {
// check collection path for art // check collection path for art
if ( layoutMode_ ) if ( layoutMode_ )
{ {

View File

@ -35,11 +35,13 @@ Text::Text( std::string text, Page &p, Font *font, float scaleX, float scaleY )
Text::~Text( ) Text::~Text( )
{ {
freeGraphicsMemory( ); freeGraphicsMemory( );
textData_.clear();
} }
void Text::freeGraphicsMemory( ) void Text::freeGraphicsMemory( )
{ {
Component::freeGraphicsMemory( ); Component::freeGraphicsMemory( );
textData_.clear();
} }
void Text::allocateGraphicsMemory( ) void Text::allocateGraphicsMemory( )

View File

@ -806,7 +806,6 @@ bool Page::popCollection()
void Page::enterMenu() void Page::enterMenu()
{ {
for(MenuVector_T::iterator it = menus_.begin(); it != menus_.end(); it++) for(MenuVector_T::iterator it = menus_.begin(); it != menus_.end(); it++)
{ {
for(std::vector<ScrollingList *>::iterator it2 = menus_[std::distance(menus_.begin(), it)].begin(); it2 != menus_[std::distance(menus_.begin(), it)].end(); it2++) for(std::vector<ScrollingList *>::iterator it2 = menus_[std::distance(menus_.begin(), it)].begin(); it2 != menus_[std::distance(menus_.begin(), it)].end(); it2++)

View File

@ -313,118 +313,6 @@ bool RetroFE::deInitialize( )
return retVal; return retVal;
} }
// Print State
void RetroFE::printState(RETROFE_STATE state){
switch(state){
case RETROFE_IDLE:
printf("RETROFE_IDLE");
break;
case RETROFE_LOAD_ART:
printf("RETROFE_LOAD_ART");
break;
case RETROFE_ENTER:
printf("RETROFE_ENTER");
break;
case RETROFE_SPLASH_EXIT:
printf("RETROFE_SPLASH_EXIT");
break;
case RETROFE_PLAYLIST_REQUEST:
printf("RETROFE_PLAYLIST_REQUEST");
break;
case RETROFE_PLAYLIST_EXIT:
printf("RETROFE_PLAYLIST_EXIT");
break;
case RETROFE_PLAYLIST_LOAD_ART:
printf("RETROFE_PLAYLIST_LOAD_ART");
break;
case RETROFE_PLAYLIST_ENTER:
printf("RETROFE_PLAYLIST_ENTER");
break;
case RETROFE_MENUJUMP_REQUEST:
printf("RETROFE_MENUJUMP_REQUEST");
break;
case RETROFE_MENUJUMP_EXIT:
printf("RETROFE_MENUJUMP_EXIT");
break;
case RETROFE_MENUJUMP_LOAD_ART:
printf("RETROFE_MENUJUMP_LOAD_ART");
break;
case RETROFE_MENUJUMP_ENTER:
printf("RETROFE_MENUJUMP_ENTER");
break;
case RETROFE_HIGHLIGHT_REQUEST:
printf("RETROFE_HIGHLIGHT_REQUEST");
break;
case RETROFE_HIGHLIGHT_EXIT:
printf("RETROFE_HIGHLIGHT_EXIT");
break;
case RETROFE_HIGHLIGHT_LOAD_ART:
printf("RETROFE_HIGHLIGHT_LOAD_ART");
break;
case RETROFE_HIGHLIGHT_ENTER:
printf("RETROFE_HIGHLIGHT_ENTER");
break;
case RETROFE_NEXT_PAGE_REQUEST:
printf("RETROFE_NEXT_PAGE_REQUEST");
break;
case RETROFE_NEXT_PAGE_MENU_EXIT:
printf("RETROFE_NEXT_PAGE_MENU_EXIT");
break;
case RETROFE_NEXT_PAGE_MENU_LOAD_ART:
printf("RETROFE_NEXT_PAGE_MENU_LOAD_ART");
break;
case RETROFE_NEXT_PAGE_MENU_ENTER:
printf("RETROFE_NEXT_PAGE_MENU_ENTER");
break;
case RETROFE_HANDLE_MENUENTRY:
printf("RETROFE_HANDLE_MENUENTRY");
break;
case RETROFE_LAUNCH_ENTER:
printf("RETROFE_LAUNCH_ENTER");
break;
case RETROFE_LAUNCH_REQUEST:
printf("RETROFE_LAUNCH_REQUEST");
break;
case RETROFE_LAUNCH_EXIT:
printf("RETROFE_LAUNCH_EXIT");
break;
case RETROFE_BACK_REQUEST:
printf("RETROFE_BACK_REQUEST");
break;
case RETROFE_BACK_MENU_EXIT:
printf("RETROFE_BACK_MENU_EXIT");
break;
case RETROFE_BACK_MENU_LOAD_ART:
printf("RETROFE_BACK_MENU_LOAD_ART");
break;
case RETROFE_BACK_MENU_ENTER:
printf("RETROFE_BACK_MENU_ENTER");
break;
case RETROFE_MENUMODE_START_REQUEST:
printf("RETROFE_MENUMODE_START_REQUEST");
break;
case RETROFE_MENUMODE_START_LOAD_ART:
printf("RETROFE_MENUMODE_START_LOAD_ART");
break;
case RETROFE_MENUMODE_START_ENTER:
printf("RETROFE_MENUMODE_START_ENTER");
break;
case RETROFE_NEW:
printf("RETROFE_NEW");
break;
case RETROFE_QUIT_REQUEST:
printf("RETROFE_QUIT_REQUEST");
break;
case RETROFE_QUIT:
printf("RETROFE_QUIT");
break;
default:
printf("STATE UNDEFINED:%d", state);
break;
}
printf("\n");
}
// Run RetroFE // Run RetroFE
void RetroFE::run( ) void RetroFE::run( )
@ -479,6 +367,7 @@ void RetroFE::run( )
bool running = true; bool running = true;
bool initInBackground = false; bool initInBackground = false;
config_.getProperty( "initInBackground", initInBackground ); config_.getProperty( "initInBackground", initInBackground );
RETROFE_STATE state = RETROFE_NEW; RETROFE_STATE state = RETROFE_NEW;
config_.getProperty( "attractModeTime", attractModeTime ); config_.getProperty( "attractModeTime", attractModeTime );
@ -526,9 +415,19 @@ void RetroFE::run( )
break; break;
} }
// Uncomment to print State for debug purposes // Print state for debug purposes
//printState(state); #if 0
static RETROFE_STATE prev_state = state;
#undef X
#define X(a, b) b,
static const char *retrofe_states_str[] = {RETROFE_STATES};
if(prev_state != state){
printf("RetroFE new state: %s\n", retrofe_states_str[state]);
prev_state = state;
}
#endif
// Main state machine
switch(state) switch(state)
{ {
@ -694,6 +593,7 @@ void RetroFE::run( )
{ {
currentPage_->reallocateMenuSpritePoints( ); currentPage_->reallocateMenuSpritePoints( );
currentPage_->menuJumpEnter( ); currentPage_->menuJumpEnter( );
forceRender(true);
state = RETROFE_MENUJUMP_ENTER; state = RETROFE_MENUJUMP_ENTER;
} }
break; break;
@ -805,7 +705,9 @@ void RetroFE::run( )
} }
currentPage_->onNewItemSelected( ); currentPage_->onNewItemSelected( );
printf("\nbefore currentPage_->reallocateMenuSpritePoints()\n");
currentPage_->reallocateMenuSpritePoints( ); currentPage_->reallocateMenuSpritePoints( );
printf("after currentPage_->reallocateMenuSpritePoints()\n\n");
state = RETROFE_NEXT_PAGE_MENU_LOAD_ART; state = RETROFE_NEXT_PAGE_MENU_LOAD_ART;
@ -1061,6 +963,14 @@ void RetroFE::run( )
running = false; running = false;
} }
break; break;
// Unknown state
default:
std::stringstream ss;
ss << "Wrong state: " << state;
Logger::write( Logger::ZONE_ERROR, "RetroFE", "Wrong state: " + ss.str() );
state = RETROFE_IDLE;
break;
} }
// Handle screen updates and attract mode // Handle screen updates and attract mode

View File

@ -31,6 +31,44 @@
#include <map> #include <map>
#include <string> #include <string>
/* State machine states */
#define RETROFE_STATES \
X(RETROFE_IDLE, "RETROFE_IDLE") \
X(RETROFE_LOAD_ART, "RETROFE_LOAD_ART") \
X(RETROFE_ENTER, "RETROFE_ENTER") \
X(RETROFE_SPLASH_EXIT, "RETROFE_SPLASH_EXIT") \
X(RETROFE_PLAYLIST_REQUEST, "RETROFE_PLAYLIST_REQUEST") \
X(RETROFE_PLAYLIST_EXIT, "RETROFE_PLAYLIST_EXIT") \
X(RETROFE_PLAYLIST_LOAD_ART, "RETROFE_PLAYLIST_LOAD_ART") \
X(RETROFE_PLAYLIST_ENTER, "RETROFE_PLAYLIST_ENTER") \
X(RETROFE_MENUJUMP_REQUEST, "RETROFE_MENUJUMP_REQUEST") \
X(RETROFE_MENUJUMP_EXIT, "RETROFE_MENUJUMP_EXIT") \
X(RETROFE_MENUJUMP_LOAD_ART, "RETROFE_MENUJUMP_LOAD_ART") \
X(RETROFE_MENUJUMP_ENTER, "RETROFE_MENUJUMP_ENTER") \
X(RETROFE_HIGHLIGHT_REQUEST, "RETROFE_HIGHLIGHT_REQUEST") \
X(RETROFE_HIGHLIGHT_EXIT, "RETROFE_HIGHLIGHT_EXIT") \
X(RETROFE_HIGHLIGHT_LOAD_ART, "RETROFE_HIGHLIGHT_LOAD_ART") \
X(RETROFE_HIGHLIGHT_ENTER, "RETROFE_HIGHLIGHT_ENTER") \
X(RETROFE_NEXT_PAGE_REQUEST, "RETROFE_NEXT_PAGE_REQUEST") \
X(RETROFE_NEXT_PAGE_MENU_EXIT, "RETROFE_NEXT_PAGE_MENU_EXIT") \
X(RETROFE_NEXT_PAGE_MENU_LOAD_ART, "RETROFE_NEXT_PAGE_MENU_LOAD_ART") \
X(RETROFE_NEXT_PAGE_MENU_ENTER, "RETROFE_NEXT_PAGE_MENU_ENTER") \
X(RETROFE_HANDLE_MENUENTRY, "RETROFE_HANDLE_MENUENTRY") \
X(RETROFE_LAUNCH_ENTER, "RETROFE_LAUNCH_ENTER") \
X(RETROFE_LAUNCH_REQUEST, "RETROFE_LAUNCH_REQUEST") \
X(RETROFE_LAUNCH_EXIT, "RETROFE_LAUNCH_EXIT") \
X(RETROFE_BACK_REQUEST, "RETROFE_BACK_REQUEST") \
X(RETROFE_BACK_MENU_EXIT, "RETROFE_BACK_MENU_EXIT") \
X(RETROFE_BACK_MENU_LOAD_ART, "RETROFE_BACK_MENU_LOAD_ART") \
X(RETROFE_BACK_MENU_ENTER, "RETROFE_BACK_MENU_ENTER") \
X(RETROFE_MENUMODE_START_REQUEST, "RETROFE_MENUMODE_START_REQUEST") \
X(RETROFE_MENUMODE_START_LOAD_ART, "RETROFE_MENUMODE_START_LOAD_ART") \
X(RETROFE_MENUMODE_START_ENTER, "RETROFE_MENUMODE_START_ENTER") \
X(RETROFE_NEW, "RETROFE_NEW") \
X(RETROFE_QUIT_REQUEST, "RETROFE_QUIT_REQUEST") \
X(RETROFE_QUIT, "RETROFE_QUIT") \
X(NB_RETROFE_STATES, "")
class CollectionInfo; class CollectionInfo;
class Configuration; class Configuration;
@ -57,43 +95,9 @@ private:
SDL_Thread *initializeThread; SDL_Thread *initializeThread;
static int initialize( void *context ); static int initialize( void *context );
enum RETROFE_STATE #undef X
{ #define X(a, b) a,
RETROFE_IDLE, enum RETROFE_STATE {RETROFE_STATES};
RETROFE_LOAD_ART,
RETROFE_ENTER,
RETROFE_SPLASH_EXIT,
RETROFE_PLAYLIST_REQUEST,
RETROFE_PLAYLIST_EXIT,
RETROFE_PLAYLIST_LOAD_ART,
RETROFE_PLAYLIST_ENTER,
RETROFE_MENUJUMP_REQUEST,
RETROFE_MENUJUMP_EXIT,
RETROFE_MENUJUMP_LOAD_ART,
RETROFE_MENUJUMP_ENTER,
RETROFE_HIGHLIGHT_REQUEST,
RETROFE_HIGHLIGHT_EXIT,
RETROFE_HIGHLIGHT_LOAD_ART,
RETROFE_HIGHLIGHT_ENTER,
RETROFE_NEXT_PAGE_REQUEST,
RETROFE_NEXT_PAGE_MENU_EXIT,
RETROFE_NEXT_PAGE_MENU_LOAD_ART,
RETROFE_NEXT_PAGE_MENU_ENTER,
RETROFE_HANDLE_MENUENTRY,
RETROFE_LAUNCH_ENTER,
RETROFE_LAUNCH_REQUEST,
RETROFE_LAUNCH_EXIT,
RETROFE_BACK_REQUEST,
RETROFE_BACK_MENU_EXIT,
RETROFE_BACK_MENU_LOAD_ART,
RETROFE_BACK_MENU_ENTER,
RETROFE_MENUMODE_START_REQUEST,
RETROFE_MENUMODE_START_LOAD_ART,
RETROFE_MENUMODE_START_ENTER,
RETROFE_NEW,
RETROFE_QUIT_REQUEST,
RETROFE_QUIT,
};
void render( ); void render( );
bool back( bool &exit ); bool back( bool &exit );