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

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

View File

@ -152,6 +152,7 @@ void ScrollingList::deallocateSpritePoints( )
void ScrollingList::allocateSpritePoints( )
{
if ( !items_ || items_->size( ) == 0 ) return;
if ( !scrollPoints_ ) 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 )
{
// check collection path for art
if ( layoutMode_ )
{

View File

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

View File

@ -806,7 +806,6 @@ bool Page::popCollection()
void Page::enterMenu()
{
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++)

View File

@ -313,118 +313,6 @@ bool RetroFE::deInitialize( )
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
void RetroFE::run( )
@ -479,6 +367,7 @@ void RetroFE::run( )
bool running = true;
bool initInBackground = false;
config_.getProperty( "initInBackground", initInBackground );
RETROFE_STATE state = RETROFE_NEW;
config_.getProperty( "attractModeTime", attractModeTime );
@ -526,9 +415,19 @@ void RetroFE::run( )
break;
}
// Uncomment to print State for debug purposes
//printState(state);
// Print state for debug purposes
#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)
{
@ -694,6 +593,7 @@ void RetroFE::run( )
{
currentPage_->reallocateMenuSpritePoints( );
currentPage_->menuJumpEnter( );
forceRender(true);
state = RETROFE_MENUJUMP_ENTER;
}
break;
@ -805,7 +705,9 @@ void RetroFE::run( )
}
currentPage_->onNewItemSelected( );
printf("\nbefore currentPage_->reallocateMenuSpritePoints()\n");
currentPage_->reallocateMenuSpritePoints( );
printf("after currentPage_->reallocateMenuSpritePoints()\n\n");
state = RETROFE_NEXT_PAGE_MENU_LOAD_ART;
@ -1061,6 +963,14 @@ void RetroFE::run( )
running = false;
}
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

View File

@ -31,6 +31,44 @@
#include <map>
#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 Configuration;
@ -57,43 +95,9 @@ private:
SDL_Thread *initializeThread;
static int initialize( void *context );
enum RETROFE_STATE
{
RETROFE_IDLE,
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,
};
#undef X
#define X(a, b) a,
enum RETROFE_STATE {RETROFE_STATES};
void render( );
bool back( bool &exit );