Renamed the textlist property selectorOffsetY to selectorVerticalOffset and added a selectorHorizontalOffset property.

Also enforced minimum and maximum values for a few textlist properties.
This commit is contained in:
Leon Styhre 2022-12-18 12:02:50 +01:00
parent cd4d486d8d
commit a7005f22e9
2 changed files with 37 additions and 10 deletions

View file

@ -57,6 +57,7 @@ std::vector<std::string> ThemeData::sLegacyProperties {
{"maxLogoCount"}}; {"maxLogoCount"}};
std::vector<std::string> ThemeData::sDeprecatedProperties { std::vector<std::string> ThemeData::sDeprecatedProperties {
{"selectorOffsetY"},
{"staticItem"}, {"staticItem"},
{"itemType"}, {"itemType"},
{"defaultItem"}, {"defaultItem"},
@ -216,7 +217,9 @@ std::map<std::string, std::map<std::string, ThemeData::ElementPropertyType>>
{"size", NORMALIZED_PAIR}, {"size", NORMALIZED_PAIR},
{"origin", NORMALIZED_PAIR}, {"origin", NORMALIZED_PAIR},
{"selectorHeight", FLOAT}, {"selectorHeight", FLOAT},
{"selectorOffsetY", FLOAT}, {"selectorHorizontalOffset", FLOAT},
{"selectorVerticalOffset", FLOAT},
{"selectorOffsetY", FLOAT}, // For backward compatibility with legacy themes.
{"selectorColor", COLOR}, {"selectorColor", COLOR},
{"selectorColorEnd", COLOR}, {"selectorColorEnd", COLOR},
{"selectorGradientType", STRING}, {"selectorGradientType", STRING},

View file

@ -133,7 +133,8 @@ private:
LetterCase mLetterCaseGroupedCollections; LetterCase mLetterCaseGroupedCollections;
float mLineSpacing; float mLineSpacing;
float mSelectorHeight; float mSelectorHeight;
float mSelectorOffsetY; float mSelectorHorizontalOffset;
float mSelectorVerticalOffset;
unsigned int mSelectorColor; unsigned int mSelectorColor;
unsigned int mSelectorColorEnd; unsigned int mSelectorColorEnd;
bool mSelectorColorGradientHorizontal; bool mSelectorColorGradientHorizontal;
@ -167,7 +168,8 @@ TextListComponent<T>::TextListComponent()
, mLetterCaseGroupedCollections {LetterCase::NONE} , mLetterCaseGroupedCollections {LetterCase::NONE}
, mLineSpacing {1.5f} , mLineSpacing {1.5f}
, mSelectorHeight {mFont->getSize() * 1.5f} , mSelectorHeight {mFont->getSize() * 1.5f}
, mSelectorOffsetY {0.0f} , mSelectorHorizontalOffset {0.0f}
, mSelectorVerticalOffset {0.0f}
, mSelectorColor {0x333333FF} , mSelectorColor {0x333333FF}
, mSelectorColorEnd {0x333333FF} , mSelectorColorEnd {0x333333FF}
, mSelectorColorGradientHorizontal {true} , mSelectorColorGradientHorizontal {true}
@ -357,13 +359,15 @@ template <typename T> void TextListComponent<T>::render(const glm::mat4& parentT
// Draw selector bar. // Draw selector bar.
if (startEntry < listCutoff) { if (startEntry < listCutoff) {
if (mSelectorImage.hasImage()) { if (mSelectorImage.hasImage()) {
mSelectorImage.setPosition(0.0f, (mCursor - startEntry) * entrySize + mSelectorOffsetY, mSelectorImage.setPosition(mSelectorHorizontalOffset,
(mCursor - startEntry) * entrySize + mSelectorVerticalOffset,
0.0f); 0.0f);
mSelectorImage.render(trans); mSelectorImage.render(trans);
} }
else { else {
mRenderer->setMatrix(trans); mRenderer->setMatrix(trans);
mRenderer->drawRect(0.0f, (mCursor - startEntry) * entrySize + mSelectorOffsetY, mRenderer->drawRect(mSelectorHorizontalOffset,
(mCursor - startEntry) * entrySize + mSelectorVerticalOffset,
mSize.x, mSelectorHeight, mSelectorColor, mSelectorColorEnd, mSize.x, mSelectorHeight, mSelectorColor, mSelectorColorEnd,
mSelectorColorGradientHorizontal); mSelectorColorGradientHorizontal);
} }
@ -639,18 +643,33 @@ void TextListComponent<T>::applyTheme(const std::shared_ptr<ThemeData>& theme,
mLetterCase = LetterCase::UPPERCASE; mLetterCase = LetterCase::UPPERCASE;
} }
mSelectorHorizontalOffset = 0.0f;
mSelectorVerticalOffset = 0.0f;
if (properties & LINE_SPACING) { if (properties & LINE_SPACING) {
if (elem->has("lineSpacing")) if (elem->has("lineSpacing"))
mLineSpacing = glm::clamp(elem->get<float>("lineSpacing"), 0.5f, 3.0f); mLineSpacing = glm::clamp(elem->get<float>("lineSpacing"), 0.5f, 3.0f);
if (elem->has("selectorHeight")) if (elem->has("selectorHeight"))
mSelectorHeight = elem->get<float>("selectorHeight") * Renderer::getScreenHeight(); mSelectorHeight = glm::clamp(elem->get<float>("selectorHeight"), 0.0f, 1.0f) *
if (elem->has("selectorOffsetY")) { Renderer::getScreenHeight();
if (elem->has("selectorHorizontalOffset")) {
const float scale {this->mParent ? this->mParent->getSize().x :
Renderer::getScreenWidth()};
mSelectorHorizontalOffset =
glm::clamp(elem->get<float>("selectorHorizontalOffset"), -1.0f, 1.0f) * scale;
}
if (elem->has("selectorVerticalOffset")) {
const float scale {this->mParent ? this->mParent->getSize().y : const float scale {this->mParent ? this->mParent->getSize().y :
Renderer::getScreenHeight()}; Renderer::getScreenHeight()};
mSelectorOffsetY = elem->get<float>("selectorOffsetY") * scale; mSelectorVerticalOffset =
glm::clamp(elem->get<float>("selectorVerticalOffset"), -1.0f, 1.0f) * scale;
} }
else { else if (elem->has("selectorOffsetY")) {
mSelectorOffsetY = 0.0f; // TEMPORARY: This property will only be usable for legacy themes as of 2.0.0-beta
const float scale {this->mParent ? this->mParent->getSize().y :
Renderer::getScreenHeight()};
mSelectorVerticalOffset =
glm::clamp(elem->get<float>("selectorOffsetY"), -1.0f, 1.0f) * scale;
} }
} }
@ -696,6 +715,11 @@ void TextListComponent<T>::applyTheme(const std::shared_ptr<ThemeData>& theme,
if (elem->has("fadeAbovePrimary")) if (elem->has("fadeAbovePrimary"))
mFadeAbovePrimary = elem->get<bool>("fadeAbovePrimary"); mFadeAbovePrimary = elem->get<bool>("fadeAbovePrimary");
mSize.x = glm::clamp(mSize.x, mRenderer->getScreenWidth() * 0.05f,
mRenderer->getScreenWidth() * 1.0f);
mSize.y = glm::clamp(mSize.y, mRenderer->getScreenHeight() * 0.05f,
mRenderer->getScreenHeight() * 1.0f);
} }
template <typename T> void TextListComponent<T>::onCursorChanged(const CursorState& state) template <typename T> void TextListComponent<T>::onCursorChanged(const CursorState& state)