Fixed a carousel item sizing issue when logoScale was set to lower than 1.0 for legacy theme sets.

This commit is contained in:
Leon Styhre 2022-10-29 15:24:46 +02:00
parent 492b795b86
commit 941835977f

View file

@ -227,7 +227,7 @@ void CarouselComponent<T>::addEntry(Entry& entry, const std::shared_ptr<ThemeDat
auto item = std::make_shared<ImageComponent>(false, dynamic); auto item = std::make_shared<ImageComponent>(false, dynamic);
item->setLinearInterpolation(mLinearInterpolation); item->setLinearInterpolation(mLinearInterpolation);
item->setMipmapping(true); item->setMipmapping(true);
item->setMaxSize(glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); item->setMaxSize(glm::round(mItemSize * mItemScale));
item->applyTheme(theme, "system", "image_logo", item->applyTheme(theme, "system", "image_logo",
ThemeFlags::PATH | ThemeFlags::COLOR); ThemeFlags::PATH | ThemeFlags::COLOR);
item->setRotateByTargetSize(true); item->setRotateByTargetSize(true);
@ -775,7 +775,8 @@ template <typename T> void CarouselComponent<T>::render(const glm::mat4& parentT
float scale {0.0f}; float scale {0.0f};
if (mItemScale >= 1.0f) { // Don't allow scaling below 1.0 for legacy themes as it introduces compatibility issues.
if (mLegacyMode || mItemScale >= 1.0f) {
scale = 1.0f + ((mItemScale - 1.0f) * (1.0f - fabsf(distance))); scale = 1.0f + ((mItemScale - 1.0f) * (1.0f - fabsf(distance)));
scale = std::min(mItemScale, std::max(1.0f, scale)); scale = std::min(mItemScale, std::max(1.0f, scale));
scale /= mItemScale; scale /= mItemScale;
@ -1153,8 +1154,10 @@ void CarouselComponent<T>::applyTheme(const std::shared_ptr<ThemeData>& theme,
// Legacy themes. // Legacy themes.
if (mLegacyMode) { if (mLegacyMode) {
// Don't allow logoScale below 1.0 for legacy themes as it introduces compatibility issues. // Don't allow logoScale below 1.0 for legacy themes as it introduces compatibility issues.
// But we still need to load the value as-is for proper item sizing calculations, scaling
// below 1.0 will be suppressed in render() instead.
if (elem->has("logoScale")) if (elem->has("logoScale"))
mItemScale = glm::clamp(elem->get<float>("logoScale"), 1.0f, 3.0f); mItemScale = glm::clamp(elem->get<float>("logoScale"), 0.5f, 3.0f);
if (elem->has("logoSize")) { if (elem->has("logoSize")) {
// Keep size within a 0.05 and 1.0 multiple of the screen size. // Keep size within a 0.05 and 1.0 multiple of the screen size.
glm::vec2 itemSize {elem->get<glm::vec2>("logoSize")}; glm::vec2 itemSize {elem->get<glm::vec2>("logoSize")};