mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-25 15:45:38 +00:00
Fixed multiple issues where ComponentGrid would display incorrect help prompts.
This commit is contained in:
parent
8ec17dbaee
commit
b9b4bd120d
|
@ -474,22 +474,42 @@ std::vector<HelpPrompt> ComponentGrid::getHelpPrompts()
|
||||||
if (e)
|
if (e)
|
||||||
prompts = e->component->getHelpPrompts();
|
prompts = e->component->getHelpPrompts();
|
||||||
|
|
||||||
bool canScrollVert = mGridSize.y > 1;
|
bool canScrollVert = false;
|
||||||
bool canScrollHoriz = mGridSize.x > 1;
|
|
||||||
for (auto it = prompts.cbegin(); it != prompts.cend(); it++) {
|
// If the currently selected cell does not fill the entire Y axis, then check if the cells
|
||||||
if (it->first == "up/down/left/right") {
|
// above or below are actually focusable as otherwise they should not affect the help prompts.
|
||||||
canScrollHoriz = false;
|
if (mGridSize.y > 1 && e->dim.y < mGridSize.y) {
|
||||||
canScrollVert = false;
|
if (e->pos.y - e->dim.y >= 0) {
|
||||||
break;
|
const GridEntry* cell = getCellAt(glm::ivec2{e->pos.x, e->pos.y - e->dim.y});
|
||||||
|
if (cell != nullptr && cell->canFocus)
|
||||||
|
canScrollVert = true;
|
||||||
}
|
}
|
||||||
else if (it->first == "up/down") {
|
if (e->pos.y + e->dim.y < mGridSize.y) {
|
||||||
canScrollVert = false;
|
const GridEntry* cell = getCellAt(glm::ivec2{e->pos.x, e->pos.y + e->dim.y});
|
||||||
}
|
if (cell != nullptr && cell->canFocus)
|
||||||
else if (it->first == "left/right") {
|
canScrollVert = true;
|
||||||
canScrollHoriz = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// There is currently no situation in the application where unfocusable cells are located
|
||||||
|
// next to each other horizontally, so this code is good enough. If this changes in the
|
||||||
|
// future, code similar to the the vertical cell handling above needs to be added.
|
||||||
|
bool canScrollHoriz = (mGridSize.x > 1 && e->dim.x < mGridSize.x);
|
||||||
|
|
||||||
|
// Check existing capabilities as indicated by the help prompts, and if the prompts should
|
||||||
|
// be combined into "up/down/left/right" then also remove the single-axis prompts.
|
||||||
|
if (!prompts.empty() && prompts.back() == HelpPrompt("up/down", "choose")) {
|
||||||
|
canScrollVert = true;
|
||||||
|
if (canScrollHoriz && canScrollVert)
|
||||||
|
prompts.pop_back();
|
||||||
|
}
|
||||||
|
else if (!prompts.empty() && prompts.back() == HelpPrompt("left/right", "choose")) {
|
||||||
|
canScrollHoriz = true;
|
||||||
|
if (canScrollHoriz && canScrollVert)
|
||||||
|
prompts.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any duplicates will be removed in Window::setHelpPrompts()
|
||||||
if (canScrollHoriz && canScrollVert)
|
if (canScrollHoriz && canScrollVert)
|
||||||
prompts.push_back(HelpPrompt("up/down/left/right", "choose"));
|
prompts.push_back(HelpPrompt("up/down/left/right", "choose"));
|
||||||
else if (canScrollHoriz)
|
else if (canScrollHoriz)
|
||||||
|
|
|
@ -179,11 +179,6 @@ std::vector<HelpPrompt> GuiMsgBox::getHelpPrompts()
|
||||||
{
|
{
|
||||||
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts();
|
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts();
|
||||||
|
|
||||||
// If there is only one button, then remove the "Choose" help symbol
|
|
||||||
// as there is no way to make a choice.
|
|
||||||
if (mButtons.size() == 1)
|
|
||||||
prompts.pop_back();
|
|
||||||
|
|
||||||
if (!mDisableBackButton)
|
if (!mDisableBackButton)
|
||||||
prompts.push_back(HelpPrompt("b", "Back"));
|
prompts.push_back(HelpPrompt("b", "Back"));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue