Fixed an issue where the helpsystem would be incorrectly positioned when right-aligned.

This commit is contained in:
Leon Styhre 2022-11-02 21:15:24 +01:00
parent 7c02db291e
commit 71b8eba9ce
3 changed files with 22 additions and 13 deletions

View file

@ -22,6 +22,7 @@ HelpStyle::HelpStyle()
, entrySpacing {0.00833f}
, iconTextSpacing {0.00416f}
, opacity {1.0f}
, legacyTheme {false}
, letterCase {"uppercase"}
{
if (FONT_SIZE_SMALL != 0)
@ -36,6 +37,8 @@ void HelpStyle::applyTheme(const std::shared_ptr<ThemeData>& theme, const std::s
if (!elem)
return;
legacyTheme = theme->isLegacyTheme();
if (elem->has("pos"))
position = elem->get<glm::vec2>("pos") *
glm::vec2 {Renderer::getScreenWidth(), Renderer::getScreenHeight()};

View file

@ -28,6 +28,7 @@ struct HelpStyle {
float entrySpacing;
float iconTextSpacing;
float opacity;
bool legacyTheme;
std::string letterCase;
struct CustomButtonIcons {

View file

@ -202,22 +202,13 @@ void HelpComponent::updateGrid()
}
std::shared_ptr<Font>& font {mStyle.font};
mGrid = std::make_shared<ComponentGrid>(glm::ivec2 {static_cast<int>(mPrompts.size()) * 4, 1});
// [icon] [spacer1] [text] [spacer2]
mGrid = std::make_shared<ComponentGrid>(glm::ivec2 {static_cast<int>(mPrompts.size()) * 5, 1});
std::vector<std::shared_ptr<ImageComponent>> icons;
std::vector<std::shared_ptr<TextComponent>> labels;
float width {0.0f};
float height {std::round(font->getLetterHeight() * 1.25f)};
// Make sure both text and icons have either odd or equal sizes to avoid alignment issues.
if (static_cast<int>(font->getHeight()) % 2 != static_cast<int>(height) % 2)
--height;
// State variable indicating whether the GUI is dimmed.
float height {font->getLetterHeight() * 1.25f};
bool isDimmed {mWindow->isBackgroundDimmed()};
for (auto it = mPrompts.cbegin(); it != mPrompts.cend(); ++it) {
@ -249,17 +240,31 @@ void HelpComponent::updateGrid()
mGrid->setSize(width, height);
for (int i = 0; i < static_cast<int>(icons.size()); ++i) {
const int col {i * 4};
const int col {i * 5};
mGrid->setColWidthPerc(col, icons.at(i)->getSize().x / width);
mGrid->setColWidthPerc(col + 1,
(mStyle.iconTextSpacing * mRenderer->getScreenWidth()) / width);
mGrid->setColWidthPerc(col + 2, labels.at(i)->getSize().x / width);
mGrid->setColWidthPerc(col + 3,
(mStyle.entrySpacing * mRenderer->getScreenWidth()) / width);
mGrid->setEntry(icons.at(i), glm::ivec2 {col, 0}, false, false);
mGrid->setEntry(labels.at(i), glm::ivec2 {col + 2, 0}, false, false);
}
mGrid->setPosition({mStyle.position.x, mStyle.position.y, 0.0f});
// There is a bug for legacy themes where the entrySpacing width is added to the right of
// the grid when aligning to the right using an X origin value of 1. This issue is retained
// for legacy themes for backward compatibility reasons.
if (mStyle.legacyTheme) {
mGrid->setPosition({mStyle.position.x, mStyle.position.y, 0.0f});
}
else {
mGrid->setPosition(
{mStyle.position.x +
((mStyle.entrySpacing * mRenderer->getScreenWidth()) * mStyle.origin.x),
mStyle.position.y, 0.0f});
}
mGrid->setOrigin(mStyle.origin);
}