From 3e7436c347f8d5aee29cc5cfaa794762935f7d24 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 6 Feb 2025 17:50:18 +0100 Subject: [PATCH] Added an 'entryLayout' property to the helpsystem element --- es-core/src/components/HelpComponent.cpp | 64 ++++++++++++++++++------ es-core/src/components/HelpComponent.h | 6 +++ 2 files changed, 56 insertions(+), 14 deletions(-) diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index 436da0e83..dcb4ddedc 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -30,6 +30,7 @@ HelpComponent::HelpComponent(std::shared_ptr font) , mStyleTextColorDimmed {0x777777FF} , mStyleIconColor {0x777777FF} , mStyleIconColorDimmed {0x777777FF} + , mStyleEntryLayout {EntryLayout::ICON_FIRST} , mStyleRotation {0.0f} , mStyleEntrySpacing {0.00833f} , mStyleEntrySpacingDimmed {mStyleEntrySpacing} @@ -361,6 +362,21 @@ void HelpComponent::applyTheme(const std::shared_ptr& theme, } } + if (elem->has("entryLayout")) { + const std::string& entryLayout {elem->get("entryLayout")}; + if (entryLayout == "iconFirst") { + mStyleEntryLayout = EntryLayout::ICON_FIRST; + } + else if (entryLayout == "textFirst") { + mStyleEntryLayout = EntryLayout::TEXT_FIRST; + } + else { + LOG(LogWarning) << "HelpComponent: Invalid theme configuration, property " + "\"entryLayout\" for element \"" + << element.substr(11) << "\" defined as \"" << entryLayout << "\""; + } + } + if (elem->has("entrySpacing")) mStyleEntrySpacing = glm::clamp(elem->get("entrySpacing"), 0.0f, 0.04f); @@ -552,21 +568,41 @@ void HelpComponent::updateGrid() mGrid->setSize(width, height); - for (int i {0}; i < static_cast(icons.size()); ++i) { - const int col {i * 5}; - mGrid->setColWidthPerc(col, icons.at(i)->getSize().x / width); - mGrid->setColWidthPerc(col + 1, - ((isDimmed ? mStyleIconTextSpacingDimmed : mStyleIconTextSpacing) * - mRenderer->getScreenWidth()) / - width); - mGrid->setColWidthPerc(col + 2, labels.at(i)->getSize().x / width); - mGrid->setColWidthPerc(col + 3, - ((isDimmed ? mStyleEntrySpacingDimmed : mStyleEntrySpacing) * - mRenderer->getScreenWidth()) / - width); + if (mStyleEntryLayout == EntryLayout::ICON_FIRST) { + for (int i {0}; i < static_cast(icons.size()); ++i) { + const int col {i * 5}; + mGrid->setColWidthPerc(col, icons.at(i)->getSize().x / width); + mGrid->setColWidthPerc( + col + 1, ((isDimmed ? mStyleIconTextSpacingDimmed : mStyleIconTextSpacing) * + mRenderer->getScreenWidth()) / + width); + mGrid->setColWidthPerc(col + 2, labels.at(i)->getSize().x / width); + mGrid->setColWidthPerc(col + 3, + ((isDimmed ? mStyleEntrySpacingDimmed : mStyleEntrySpacing) * + 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->setEntry(icons.at(i), glm::ivec2 {col, 0}, false, false); + mGrid->setEntry(labels.at(i), glm::ivec2 {col + 2, 0}, false, false); + } + } + else { + for (int i {0}; i < static_cast(icons.size()); ++i) { + const int col {i * 5}; + mGrid->setColWidthPerc(col, labels.at(i)->getSize().x / width); + mGrid->setColWidthPerc( + col + 1, ((isDimmed ? mStyleIconTextSpacingDimmed : mStyleIconTextSpacing) * + mRenderer->getScreenWidth()) / + width); + mGrid->setColWidthPerc(col + 2, icons.at(i)->getSize().x / width); + mGrid->setColWidthPerc(col + 3, + ((isDimmed ? mStyleEntrySpacingDimmed : mStyleEntrySpacing) * + mRenderer->getScreenWidth()) / + width); + + mGrid->setEntry(labels.at(i), glm::ivec2 {col, 0}, false, false); + mGrid->setEntry(icons.at(i), glm::ivec2 {col + 2, 0}, false, false); + } } if (isDimmed) { diff --git a/es-core/src/components/HelpComponent.h b/es-core/src/components/HelpComponent.h index ebbc8efa7..19fb40c71 100644 --- a/es-core/src/components/HelpComponent.h +++ b/es-core/src/components/HelpComponent.h @@ -70,6 +70,11 @@ private: "start", "back"}; + enum class EntryLayout { + ICON_FIRST, + TEXT_FIRST + }; + glm::vec2 mStylePosition; glm::vec2 mStylePositionDimmed; glm::vec2 mStyleOrigin; @@ -79,6 +84,7 @@ private: unsigned int mStyleTextColorDimmed; unsigned int mStyleIconColor; unsigned int mStyleIconColorDimmed; + EntryLayout mStyleEntryLayout; float mStyleRotation; float mStyleEntrySpacing; float mStyleEntrySpacingDimmed;