diff --git a/es-app/src/views/GamelistBase.cpp b/es-app/src/views/GamelistBase.cpp index 949afb0d5..779a31f38 100644 --- a/es-app/src/views/GamelistBase.cpp +++ b/es-app/src/views/GamelistBase.cpp @@ -570,7 +570,6 @@ void GamelistBase::populateList(const std::vector& files, FileData* f std::string name; std::string carouselItemType; std::string carouselDefaultItem; - unsigned int color {0}; if (mCarousel != nullptr) { carouselItemType = mCarousel->getItemType(); @@ -672,10 +671,12 @@ void GamelistBase::populateList(const std::vector& files, FileData* f else if (letterCase == LetterCase::CAPITALIZED) name = Utils::String::toCapitalized(name); - color = (*it)->getType() == FOLDER; textListEntry.name = name; textListEntry.object = *it; - textListEntry.data.colorId = color; + if ((*it)->getType() == FOLDER) + textListEntry.data.entryType = TextListEntryType::SECONDARY; + else + textListEntry.data.entryType = TextListEntryType::PRIMARY; mTextList->addEntry(textListEntry); } } @@ -702,7 +703,7 @@ void GamelistBase::addPlaceholder(FileData* firstEntry) TextListComponent::Entry textListEntry; textListEntry.name = placeholder->getName(); textListEntry.object = placeholder; - textListEntry.data.colorId = 1; + textListEntry.data.entryType = TextListEntryType::SECONDARY; mTextList->addEntry(textListEntry); } if (mCarousel != nullptr) { diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 133f1ad72..8b6830d5e 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -680,7 +680,7 @@ void SystemView::populate() entry.name = it->getFullName(); letterCaseFunc(entry.name); entry.object = it; - entry.data.colorId = 0; + entry.data.entryType = TextListEntryType::PRIMARY; mTextList->addEntry(entry); } } diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 0fc9f493f..26aae7104 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -333,9 +333,10 @@ std::map> {"selectorGradientType", STRING}, {"selectorImagePath", PATH}, {"selectorImageTile", BOOLEAN}, - {"selectedColor", COLOR}, {"primaryColor", COLOR}, {"secondaryColor", COLOR}, + {"selectedColor", COLOR}, + {"selectedSecondaryColor", COLOR}, {"fontPath", PATH}, {"fontSize", FLOAT}, {"scrollSound", PATH}, // For backward compatibility with legacy themes. diff --git a/es-core/src/components/primary/TextListComponent.h b/es-core/src/components/primary/TextListComponent.h index 1a97f4c8c..e2c74ffff 100644 --- a/es-core/src/components/primary/TextListComponent.h +++ b/es-core/src/components/primary/TextListComponent.h @@ -15,8 +15,13 @@ #include "components/primary/PrimaryComponent.h" #include "resources/Font.h" +enum class TextListEntryType { + PRIMARY, + SECONDARY +}; + struct TextListData { - unsigned int colorId; + TextListEntryType entryType; std::shared_ptr textCache; }; @@ -133,10 +138,11 @@ private: float mSelectorOffsetY; unsigned int mSelectorColor; unsigned int mSelectorColorEnd; - bool mSelectorColorGradientHorizontal = true; + bool mSelectorColorGradientHorizontal; + unsigned int mPrimaryColor; + unsigned int mSecondaryColor; unsigned int mSelectedColor; - static const unsigned int COLOR_ID_COUNT {2}; - unsigned int mColors[COLOR_ID_COUNT]; + unsigned int mSelectedSecondaryColor; }; template @@ -167,8 +173,10 @@ TextListComponent::TextListComponent() , mSelectorColor {0x333333FF} , mSelectorColorEnd {0x333333FF} , mSelectorColorGradientHorizontal {true} - , mSelectedColor {0} - , mColors {0x0000FFFF, 0x00FF00FF} + , mPrimaryColor {0x0000FFFF} + , mSecondaryColor {0x00FF00FF} + , mSelectedColor {0x0000FFFF} + , mSelectedSecondaryColor {0x00FF00FF} { } @@ -383,12 +391,12 @@ template void TextListComponent::render(const glm::mat4& parentT for (int i = startEntry; i < listCutoff; ++i) { Entry& entry {mEntries.at(i)}; + unsigned int color {0}; - unsigned int color; - if (mCursor == i && mSelectedColor) - color = mSelectedColor; + if (entry.data.entryType == TextListEntryType::PRIMARY) + color = (mCursor == i ? mSelectedColor : mPrimaryColor); else - color = mColors[entry.data.colorId]; + color = (mCursor == i ? mSelectedSecondaryColor : mSecondaryColor); if (!entry.data.textCache) { entry.data.textCache = @@ -502,12 +510,18 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, << element.substr(9) << "\" defined as \"" << gradientType << "\""; } } + if (elem->has("primaryColor")) + mPrimaryColor = elem->get("primaryColor"); + if (elem->has("secondaryColor")) + mSecondaryColor = elem->get("secondaryColor"); if (elem->has("selectedColor")) mSelectedColor = elem->get("selectedColor"); - if (elem->has("primaryColor")) - mColors[0] = elem->get("primaryColor"); - if (elem->has("secondaryColor")) - mColors[1] = elem->get("secondaryColor"); + else + mSelectedColor = mPrimaryColor; + if (elem->has("selectedSecondaryColor")) + mSelectedSecondaryColor = elem->get("selectedSecondaryColor"); + else + mSelectedSecondaryColor = mSelectedColor; } setFont(Font::getFromTheme(elem, properties, mFont, 0.0f, mLegacyMode));