mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-01-17 22:55:38 +00:00
Limit OptionListComponent to 5 entries on screen.
Can now hold up/down to scroll OptionListComponent.
This commit is contained in:
parent
68841aa654
commit
fb55b1cd91
|
@ -167,7 +167,7 @@ private:
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
OptionListPopup(Window* window, OptionListComponent<T>& optList) : GuiComponent(window),
|
OptionListPopup(Window* window, OptionListComponent<T>& optList) : GuiComponent(window),
|
||||||
mOptList(optList), mBox(window, ":/textbox.png"), mCursor(0), mScrollOffset(0)
|
mOptList(optList), mBox(window, ":/textbox.png"), mCursor(0), mScrollOffset(0), mCursorTimer(0)
|
||||||
{
|
{
|
||||||
//find global position
|
//find global position
|
||||||
GuiComponent* p = &mOptList;
|
GuiComponent* p = &mOptList;
|
||||||
|
@ -185,7 +185,11 @@ private:
|
||||||
|
|
||||||
std::shared_ptr<Font> font = mOptList.getFont();
|
std::shared_ptr<Font> font = mOptList.getFont();
|
||||||
|
|
||||||
unsigned int renderCount = mTextCaches.size() - mScrollOffset;
|
unsigned int renderCount = getPageSize();
|
||||||
|
if(renderCount + mScrollOffset > mTextCaches.size())
|
||||||
|
renderCount = mTextCaches.size() - mScrollOffset;
|
||||||
|
|
||||||
|
unsigned int renderTo = mScrollOffset + renderCount;
|
||||||
|
|
||||||
float height = (float)renderCount * font->getHeight();
|
float height = (float)renderCount * font->getHeight();
|
||||||
trans.translate(Eigen::Vector3f(0, -height / 2 + font->getHeight() * 0.5f, 0));
|
trans.translate(Eigen::Vector3f(0, -height / 2 + font->getHeight() * 0.5f, 0));
|
||||||
|
@ -196,7 +200,7 @@ private:
|
||||||
Renderer::setMatrix(trans);
|
Renderer::setMatrix(trans);
|
||||||
Renderer::drawRect(0, 0, (int)getSize().x(), (int)height, 0xFFFFFFFF);
|
Renderer::drawRect(0, 0, (int)getSize().x(), (int)height, 0xFFFFFFFF);
|
||||||
|
|
||||||
for(unsigned int i = mScrollOffset; i < renderCount; i++)
|
for(unsigned int i = mScrollOffset; i < renderTo; i++)
|
||||||
{
|
{
|
||||||
Renderer::setMatrix(trans);
|
Renderer::setMatrix(trans);
|
||||||
|
|
||||||
|
@ -232,29 +236,64 @@ private:
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if(mOptList.mEntries.size() > 1)
|
|
||||||
{
|
|
||||||
if(config->isMappedTo("up", input))
|
if(config->isMappedTo("up", input))
|
||||||
{
|
{
|
||||||
if(mCursor > 0)
|
mCursorDir = -1;
|
||||||
mCursor--;
|
mCursorTimer = -350;
|
||||||
|
moveCursor();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if(config->isMappedTo("down", input))
|
if(config->isMappedTo("down", input))
|
||||||
{
|
{
|
||||||
if(mCursor < mOptList.mEntries.size() - 1)
|
mCursorDir = 1;
|
||||||
mCursor++;
|
mCursorTimer = -350;
|
||||||
|
moveCursor();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}else{
|
||||||
|
if(config->isMappedTo("up", input) || config->isMappedTo("down", input))
|
||||||
|
mCursorDir = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GuiComponent::input(config, input);
|
return GuiComponent::input(config, input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update(int deltaTime)
|
||||||
|
{
|
||||||
|
if(mCursorDir != 0)
|
||||||
|
{
|
||||||
|
mCursorTimer += deltaTime;
|
||||||
|
while(mCursorTimer >= 100)
|
||||||
|
{
|
||||||
|
moveCursor();
|
||||||
|
mCursorTimer -= 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void moveCursor()
|
||||||
|
{
|
||||||
|
if(mOptList.mEntries.size() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(mCursorDir < 0) //scroll up
|
||||||
|
{
|
||||||
|
if(mCursor > 0)
|
||||||
|
mCursor--;
|
||||||
|
|
||||||
|
if(mCursor < mScrollOffset)
|
||||||
|
mScrollOffset--;
|
||||||
|
}else if(mCursorDir > 0) //scroll down
|
||||||
|
{
|
||||||
|
if(mCursor < mOptList.mEntries.size() - 1)
|
||||||
|
mCursor++;
|
||||||
|
|
||||||
|
if(mCursor - mScrollOffset >= getPageSize())
|
||||||
|
mScrollOffset++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void close()
|
void close()
|
||||||
{
|
{
|
||||||
delete this;
|
delete this;
|
||||||
|
@ -277,10 +316,17 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int getPageSize()
|
||||||
|
{
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
|
||||||
OptionListComponent<T>& mOptList;
|
OptionListComponent<T>& mOptList;
|
||||||
NinePatchComponent mBox;
|
NinePatchComponent mBox;
|
||||||
|
|
||||||
unsigned int mCursor;
|
unsigned int mCursor;
|
||||||
|
int mCursorDir;
|
||||||
|
int mCursorTimer;
|
||||||
unsigned int mScrollOffset;
|
unsigned int mScrollOffset;
|
||||||
std::vector<TextCache*> mTextCaches;
|
std::vector<TextCache*> mTextCaches;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue