full "any component following menu" scroll working

Signed-off-by: Vincent-FK <vincent.buso@funkey-project.com>
This commit is contained in:
Vincent-FK 2020-02-13 00:24:06 +01:00
parent ee3c2dd67f
commit 8e777aba46
7 changed files with 99 additions and 31 deletions

View File

@ -84,12 +84,15 @@ void ReloadableMedia::update(float dt)
{
// Reload media
if (newItemSelected ||
(newScrollItemSelected && getMenuScrollReload()))
if (newItemSelected)
{
reloadTexture();
newItemSelected = false;
newScrollItemSelected = false;
}
else if(newScrollItemSelected && getMenuScrollReload())
{
reloadTexture(true);
newScrollItemSelected = false;
}
if(loadedComponent_)
@ -134,6 +137,11 @@ void ReloadableMedia::freeGraphicsMemory()
void ReloadableMedia::reloadTexture()
{
reloadTexture(false);
}
void ReloadableMedia::reloadTexture( bool previousItem )
{
if(loadedComponent_)
{
@ -141,7 +149,14 @@ void ReloadableMedia::reloadTexture()
loadedComponent_ = NULL;
}
Item *selectedItem = page.getSelectedItem(displayOffset_);
/* Select item to reload */
Item *selectedItem = NULL;
if(previousItem){
selectedItem = page.getPreviousSelectedItem(displayOffset_);
}
else{
selectedItem = page.getSelectedItem(displayOffset_);
}
if(!selectedItem) return;
config_.getProperty("currentCollection", currentCollection_);
@ -490,9 +505,9 @@ void ReloadableMedia::draw()
if(loadedComponent_)
{
baseViewInfo.ImageHeight = loadedComponent_->baseViewInfo.ImageHeight;
baseViewInfo.ImageWidth = loadedComponent_->baseViewInfo.ImageWidth;
loadedComponent_->baseViewInfo = baseViewInfo;
loadedComponent_->draw();
baseViewInfo.ImageHeight = loadedComponent_->baseViewInfo.ImageHeight;
baseViewInfo.ImageWidth = loadedComponent_->baseViewInfo.ImageWidth;
loadedComponent_->baseViewInfo = baseViewInfo;
loadedComponent_->draw();
}
}

View File

@ -41,7 +41,8 @@ public:
void enableImageFallback_(bool value);
private:
void reloadTexture();
void reloadTexture( );
void reloadTexture( bool previousItem );
Configuration &config_;
bool systemMode_;
bool layoutMode_;

View File

@ -112,7 +112,8 @@ void ScrollingList::setItems( std::vector<Item *> *items )
items_ = items;
if ( items_ )
{
itemIndex_ = loopDecrement( 0, selectedOffsetIndex_, items_->size( ) );
prevItemIndex_ = itemIndex_;
itemIndex_ = loopDecrement( 0, selectedOffsetIndex_, items_->size( ) );
}
}
@ -212,7 +213,8 @@ void ScrollingList::setPoints( std::vector<ViewInfo *> *scrollPoints, std::vecto
if ( items_ )
{
itemIndex_ = loopDecrement( 0, selectedOffsetIndex_, items_->size( ) );
prevItemIndex_ = itemIndex_;
itemIndex_ = loopDecrement( 0, selectedOffsetIndex_, items_->size( ) );
}
}
@ -225,6 +227,7 @@ unsigned int ScrollingList::getScrollOffsetIndex( )
void ScrollingList::setScrollOffsetIndex( unsigned int index )
{
prevItemIndex_ = itemIndex_;
itemIndex_ = loopDecrement( index, selectedOffsetIndex_, items_->size( ) );
}
@ -255,6 +258,27 @@ Item *ScrollingList::getItemByOffset( int offset )
}
Item *ScrollingList::getPreviousItemByOffset( int offset )
{
if ( !items_ || items_->size( ) == 0 ) return NULL;
unsigned int index = getPreviousSelectedIndex( );
if ( offset >= 0 )
{
index = loopIncrement( index, offset, items_->size( ) );
}
else
{
index = loopDecrement( index, offset*-1, items_->size( ) );
}
return items_->at( index );
}
Item *ScrollingList::getSelectedItem( )
{
if ( !items_ || items_->size( ) == 0 ) return NULL;
@ -265,6 +289,7 @@ Item *ScrollingList::getSelectedItem( )
void ScrollingList::pageUp( )
{
if ( components_.size( ) == 0 ) return;
prevItemIndex_ = itemIndex_;
itemIndex_ = loopDecrement( itemIndex_, components_.size( ), items_->size( ) );
}
@ -272,6 +297,7 @@ void ScrollingList::pageUp( )
void ScrollingList::pageDown( )
{
if ( components_.size( ) == 0 ) return;
prevItemIndex_ = itemIndex_;
itemIndex_ = loopIncrement( itemIndex_, components_.size( ), items_->size( ) );
}
@ -279,6 +305,7 @@ void ScrollingList::pageDown( )
void ScrollingList::random( )
{
if ( !items_ || items_->size( ) == 0 ) return;
prevItemIndex_ = itemIndex_;
itemIndex_ = rand( ) % items_->size( );
}
@ -320,6 +347,7 @@ void ScrollingList::letterChange( bool increment )
if ((isalpha(startname[0] ) ^ isalpha(endname[0] ) ) ||
(isalpha(startname[0] ) && isalpha(endname[0] ) && startname[0] != endname[0] ) )
{
prevItemIndex_ = itemIndex_;
itemIndex_ = index;
break;
}
@ -339,8 +367,9 @@ void ScrollingList::letterChange( bool increment )
if ((isalpha(startname[0] ) ^ isalpha(endname[0] ) ) ||
(isalpha(startname[0] ) && isalpha(endname[0] ) && startname[0] != endname[0] ) )
{
itemIndex_ = loopIncrement( index,1,items_->size( ) );
break;
prevItemIndex_ = itemIndex_;
itemIndex_ = loopIncrement( index,1,items_->size( ) );
break;
}
}
}
@ -503,9 +532,17 @@ unsigned int ScrollingList::getSelectedIndex( )
}
unsigned int ScrollingList::getPreviousSelectedIndex( )
{
if ( !items_ ) return 0;
return loopIncrement( prevItemIndex_, selectedOffsetIndex_, items_->size( ) );
}
void ScrollingList::setSelectedIndex( unsigned int index )
{
if ( !items_ ) return;
prevItemIndex_ = itemIndex_;
itemIndex_ = loopDecrement( index, selectedOffsetIndex_, items_->size( ) );
}
@ -822,6 +859,7 @@ void ScrollingList::scroll( bool forward )
{
scrollDirectionForward_ = true;
Item *i = items_->at( loopIncrement( itemIndex_, scrollPoints_->size( ), items_->size( ) ) );
prevItemIndex_ = itemIndex_;
itemIndex_ = loopIncrement( itemIndex_, 1, items_->size( ) );
deallocateTexture( 0 );
allocateTexture( 0, i );
@ -830,6 +868,7 @@ void ScrollingList::scroll( bool forward )
{
scrollDirectionForward_ = false;
Item *i = items_->at( loopDecrement( itemIndex_, 1, items_->size( ) ) );
prevItemIndex_ = itemIndex_;
itemIndex_ = loopDecrement( itemIndex_, 1, items_->size( ) );
deallocateTexture( loopDecrement( 0, 1, components_.size( ) ) );
allocateTexture( loopDecrement( 0, 1, components_.size( ) ), i );

View File

@ -64,6 +64,7 @@ public:
void destroyItems( );
void setPoints( std::vector<ViewInfo *> *scrollPoints, std::vector<AnimationEvents *> *tweenPoints );
unsigned int getSelectedIndex( );
unsigned int getPreviousSelectedIndex( );
void setSelectedIndex( unsigned int index );
unsigned int getSize( );
void pageUp( );
@ -79,6 +80,7 @@ public:
void setScrollOffsetIndex( unsigned int index );
void setSelectedIndex( int selectedIndex );
Item *getItemByOffset( int offset );
Item *getPreviousItemByOffset( int offset );
Item *getSelectedItem( );
void allocateGraphicsMemory( );
void freeGraphicsMemory( );
@ -107,12 +109,14 @@ private:
std::vector<AnimationEvents *> *tweenPoints_;
unsigned int itemIndex_;
unsigned int prevItemIndex_;
unsigned int selectedOffsetIndex_;
float scrollAcceleration_;
float startScrollTime_;
float scrollPeriod_;
int scrollAccelerationIdx_;
bool scrollDirectionForward_;
Configuration &config_;
float scaleX_;
@ -124,5 +128,4 @@ private:
std::vector<Item *> *items_;
std::vector<Component *> components_;
bool scrollDirectionForward_;
};

View File

@ -34,7 +34,6 @@ Page::Page(Configuration &config)
, scrollActive_(false)
, scrollDirectionForward_(false)
, selectedItem_(NULL)
, selectNextItemAfterScroll_(false)
, textStatusComponent_(NULL)
, loadSoundChunk_(NULL)
, unloadSoundChunk_(NULL)
@ -168,17 +167,15 @@ void Page::onNewItemSelected()
void Page::onNewScrollItemSelected()
{
if(selectNextItemAfterScroll_){
if(!(activeMenu_.size() > 0 && activeMenu_[0])) return;
selectedItem_ = activeMenu_[0]->getSelectedItem();
for(std::vector<Component *>::iterator it = LayerComponents.begin(); it != LayerComponents.end(); ++it)
{
(*it)->setNewScrollItemSelected();
}
if(!(activeMenu_.size() > 0 && activeMenu_[0])) return;
selectedItem_ = activeMenu_[0]->getSelectedItem();
selectNextItemAfterScroll_ = false;
for(std::vector<Component *>::iterator it = LayerComponents.begin(); it != LayerComponents.end(); ++it)
{
(*it)->setNewScrollItemSelected();
}
}
@ -360,6 +357,12 @@ Item *Page::getSelectedItem()
}
Item *Page::getPrevSelectedItem_()
{
return prevSelectedItem_;
}
Item *Page::getSelectedItem(int offset)
{
if(!(activeMenu_.size() > 0 && activeMenu_[0])) return NULL;
@ -367,6 +370,13 @@ Item *Page::getSelectedItem(int offset)
}
Item *Page::getPreviousSelectedItem(int offset)
{
if(!(activeMenu_.size() > 0 && activeMenu_[0])) return NULL;
return activeMenu_[0]->getPreviousItemByOffset(offset);
}
void Page::removeSelectedItem()
{
/*
@ -1376,12 +1386,6 @@ void Page::updateScrollPeriod()
void Page::scroll(bool forward)
{
// Select next item
onNewScrollItemSelected();
// Set flag for notifying a new selected item after next update()
selectNextItemAfterScroll_ = true;
// Change scroll index
for(std::vector<ScrollingList *>::iterator it = activeMenu_.begin(); it != activeMenu_.end(); it++)
{
@ -1392,6 +1396,10 @@ void Page::scroll(bool forward)
}
}
// Notify scroll item selected next item
onNewScrollItemSelected();
// Play sound
if(highlightSoundChunk_)
{
highlightSoundChunk_->play();

View File

@ -75,7 +75,9 @@ public:
bool isHorizontalScroll();
unsigned int getMenuDepth();
Item *getSelectedItem();
Item *getPrevSelectedItem_();
Item *getSelectedItem(int offset);
Item *getPreviousSelectedItem(int offset);
void removeSelectedItem();
void setScrollOffsetIndex(unsigned int i);
unsigned int getScrollOffsetIndex();
@ -145,9 +147,9 @@ private:
bool scrollActive_;
bool scrollDirectionForward_;
bool selectNextItemAfterScroll_;
Item *selectedItem_;
Item *prevSelectedItem_;
Text *textStatusComponent_;
Sound *loadSoundChunk_;
Sound *unloadSoundChunk_;

View File

@ -625,7 +625,7 @@ void RetroFE::run( )
// Start onHighlightEnter animation
case RETROFE_HIGHLIGHT_LOAD_ART:
currentPage_->highlightEnter( );
currentPage_->onNewScrollItemSelected( );
currentPage_->onNewItemSelected( );
state = RETROFE_HIGHLIGHT_ENTER;
break;