Improved menu scrolling. It's difficult to find a balance between smooth

scrolling and art loading times.
This commit is contained in:
Pieter Hulshoff 2016-12-21 10:23:26 +01:00
parent 872c13c391
commit 9d9ed51c58
5 changed files with 31 additions and 18 deletions

View File

@ -485,7 +485,7 @@ void ScrollingList::update(float dt)
Component *c = components_.at(cindex);
if(c && (scrollRequested || scrollChanged))
if(c && readyToScroll && (scrollRequested || scrollChanged))
{
unsigned int nextI = 0;
if(currentScrollDirection_ == ScrollDirectionBack)

View File

@ -145,6 +145,18 @@ void Page::onNewItemSelected()
}
void Page::highlightLoadArt()
{
selectedItem_ = activeMenu_->getSelectedItem();
for(std::vector<Component *>::iterator it = LayerComponents.begin(); it != LayerComponents.end(); ++it)
{
(*it)->setNewItemSelected();
}
}
void Page::pushMenu(ScrollingList *s)
{
menus_.push_back(s);

View File

@ -44,6 +44,7 @@ public:
virtual ~Page();
void DeInitialize();
virtual void onNewItemSelected();
void highlightLoadArt();
bool pushCollection(CollectionInfo *collection);
bool popCollection();
void enterMenu();

View File

@ -378,36 +378,35 @@ void RetroFE::run()
}
break;
case RETROFE_HIGHLIGHT_REQUEST:
currentPage_->highlightExit();
case RETROFE_HIGHLIGHT_MENU_IDLE:
currentPage_->setScrolling(Page::ScrollDirectionIdle);
if (currentPage_->isIdle())
{
state = RETROFE_HIGHLIGHT_REQUEST;
}
break;
case RETROFE_HIGHLIGHT_REQUEST:
currentPage_->setScrolling(Page::ScrollDirectionIdle);
currentPage_->highlightExit();
state = RETROFE_HIGHLIGHT_EXIT;
break;
case RETROFE_HIGHLIGHT_EXIT:
if (processUserInput(currentPage_) == RETROFE_HIGHLIGHT_REQUEST)
{
state = RETROFE_HIGHLIGHT_REQUEST;
state = RETROFE_HIGHLIGHT_MENU_IDLE;
}
else if ((currentPage_->isGraphicsIdle() && currentPage_->isMenuScrolling()) ||
(currentPage_->isIdle()))
else if (currentPage_->isIdle())
{
currentPage_->onNewItemSelected();
currentPage_->highlightLoadArt();
state = RETROFE_HIGHLIGHT_LOAD_ART;
}
break;
case RETROFE_HIGHLIGHT_LOAD_ART:
if (processUserInput(currentPage_) == RETROFE_HIGHLIGHT_REQUEST)
{
state = RETROFE_HIGHLIGHT_REQUEST;
}
else if ((currentPage_->isGraphicsIdle() && currentPage_->isMenuScrolling()) ||
(currentPage_->isIdle()))
{
currentPage_->highlightEnter();
state = RETROFE_HIGHLIGHT_ENTER;
}
break;
case RETROFE_HIGHLIGHT_ENTER:
@ -415,7 +414,7 @@ void RetroFE::run()
{
state = RETROFE_HIGHLIGHT_REQUEST;
}
else if (currentPage_->isGraphicsIdle())
else if (currentPage_->isIdle())
{
state = RETROFE_IDLE;
}

View File

@ -63,6 +63,7 @@ private:
RETROFE_HIGHLIGHT_EXIT,
RETROFE_HIGHLIGHT_LOAD_ART,
RETROFE_HIGHLIGHT_ENTER,
RETROFE_HIGHLIGHT_MENU_IDLE,
RETROFE_NEXT_PAGE_REQUEST,
RETROFE_NEXT_PAGE_MENU_EXIT,
RETROFE_NEXT_PAGE_MENU_LOAD_ART,