From c4c85fa9e89d9fc2388527bb3235bc9fc578bfa7 Mon Sep 17 00:00:00 2001 From: Pieter Hulshoff Date: Fri, 22 Jul 2016 14:01:25 +0200 Subject: [PATCH] Allow onHighlight animations to be interrupted by key presses. This should remove the "lag" people have been experiencing when scrolling through the menu. --- RetroFE/Source/Graphics/Page.cpp | 12 ++++++++++++ RetroFE/Source/Graphics/Page.h | 1 + RetroFE/Source/RetroFE.cpp | 12 ++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/RetroFE/Source/Graphics/Page.cpp b/RetroFE/Source/Graphics/Page.cpp index 7025b15..a994361 100644 --- a/RetroFE/Source/Graphics/Page.cpp +++ b/RetroFE/Source/Graphics/Page.cpp @@ -208,6 +208,18 @@ bool Page::isIdle() return idle; } +bool Page::isGraphicsIdle() +{ + bool idle = true; + + for(std::vector::iterator it = LayerComponents.begin(); it != LayerComponents.end() && idle; ++it) + { + idle = (*it)->isIdle(); + } + + return idle; +} + void Page::start() { diff --git a/RetroFE/Source/Graphics/Page.h b/RetroFE/Source/Graphics/Page.h index e047315..2c43765 100644 --- a/RetroFE/Source/Graphics/Page.h +++ b/RetroFE/Source/Graphics/Page.h @@ -74,6 +74,7 @@ public: void setScrollOffsetIndex(unsigned int i); unsigned int getScrollOffsetIndex(); bool isIdle(); + bool isGraphicsIdle(); bool isMenuIdle(); void setStatusTextComponent(Text *t); void update(float dt); diff --git a/RetroFE/Source/RetroFE.cpp b/RetroFE/Source/RetroFE.cpp index 2ba0789..9e8bf3a 100644 --- a/RetroFE/Source/RetroFE.cpp +++ b/RetroFE/Source/RetroFE.cpp @@ -346,7 +346,11 @@ void RetroFE::run() break; case RETROFE_HIGHLIGHT_EXIT: - if (currentPage_->isIdle()) + if ( processUserInput(currentPage_) == RETROFE_HIGHLIGHT_REQUEST) + { + state = RETROFE_HIGHLIGHT_REQUEST; + } + else if (currentPage_->isGraphicsIdle()) { currentPage_->onNewItemSelected(); currentPage_->highlightEnter(); @@ -355,7 +359,11 @@ void RetroFE::run() break; case RETROFE_HIGHLIGHT_ENTER: - if (currentPage_->isIdle()) + if ( processUserInput(currentPage_) == RETROFE_HIGHLIGHT_REQUEST) + { + state = RETROFE_HIGHLIGHT_REQUEST; + } + else if (currentPage_->isGraphicsIdle()) { state = RETROFE_IDLE; }