Changed some optimizations to much better ones in SystemView and GamelistView.

This commit is contained in:
Leon Styhre 2023-02-19 19:06:11 +01:00
parent e8df5baf9d
commit 340765892f
2 changed files with 97 additions and 163 deletions

View file

@ -203,7 +203,8 @@ void GamelistView::onThemeChanged(const std::shared_ptr<ThemeData>& theme)
mPrimary->applyTheme(theme, "gamelist", element.first, ALL); mPrimary->applyTheme(theme, "gamelist", element.first, ALL);
addChild(mPrimary); addChild(mPrimary);
} }
if (element.second.type == "image") { if (element.second.type == "image" &&
(!(element.second.has("visible") && !element.second.get<bool>("visible")))) {
// If this is the startup system, then forceload the images to avoid texture pop-in. // If this is the startup system, then forceload the images to avoid texture pop-in.
if (isStartupSystem) if (isStartupSystem)
mImageComponents.push_back(std::make_unique<ImageComponent>(true)); mImageComponents.push_back(std::make_unique<ImageComponent>(true));
@ -211,77 +212,54 @@ void GamelistView::onThemeChanged(const std::shared_ptr<ThemeData>& theme)
mImageComponents.push_back(std::make_unique<ImageComponent>()); mImageComponents.push_back(std::make_unique<ImageComponent>());
mImageComponents.back()->setDefaultZIndex(30.0f); mImageComponents.back()->setDefaultZIndex(30.0f);
mImageComponents.back()->applyTheme(theme, "gamelist", element.first, ALL); mImageComponents.back()->applyTheme(theme, "gamelist", element.first, ALL);
if (mImageComponents.back()->getThemeOpacity() != 0.0f) { if (mImageComponents.back()->getThemeImageTypes().size() != 0)
if (mImageComponents.back()->getThemeImageTypes().size() != 0) mImageComponents.back()->setScrollHide(true);
mImageComponents.back()->setScrollHide(true); else if (mImageComponents.back()->getMetadataElement())
else if (mImageComponents.back()->getMetadataElement()) mImageComponents.back()->setScrollHide(true);
mImageComponents.back()->setScrollHide(true); addChild(mImageComponents.back().get());
addChild(mImageComponents.back().get());
}
else {
mImageComponents.pop_back();
}
} }
else if (element.second.type == "video") { else if (element.second.type == "video" &&
(!(element.second.has("visible") && !element.second.get<bool>("visible")))) {
if (element.second.has("path")) { if (element.second.has("path")) {
mStaticVideoComponents.push_back(std::make_unique<VideoFFmpegComponent>()); mStaticVideoComponents.push_back(std::make_unique<VideoFFmpegComponent>());
mStaticVideoComponents.back()->setDefaultZIndex(30.0f); mStaticVideoComponents.back()->setDefaultZIndex(30.0f);
mStaticVideoComponents.back()->applyTheme(theme, "gamelist", element.first, mStaticVideoComponents.back()->applyTheme(theme, "gamelist", element.first,
ALL); ALL);
if (mStaticVideoComponents.back()->getThemeOpacity() != 0.0f) { if (mStaticVideoComponents.back()->getMetadataElement())
if (mStaticVideoComponents.back()->getMetadataElement()) mStaticVideoComponents.back()->setScrollHide(true);
mStaticVideoComponents.back()->setScrollHide(true); mStaticVideoComponents.back()->setGeneralFade(true);
mStaticVideoComponents.back()->setGeneralFade(true); if (element.second.has("audio"))
if (element.second.has("audio")) mStaticVideoAudio = element.second.get<bool>("audio");
mStaticVideoAudio = element.second.get<bool>("audio"); addChild(mStaticVideoComponents.back().get());
addChild(mStaticVideoComponents.back().get());
}
else {
mStaticVideoComponents.pop_back();
}
} }
else { else {
mVideoComponents.push_back(std::make_unique<VideoFFmpegComponent>()); mVideoComponents.push_back(std::make_unique<VideoFFmpegComponent>());
mVideoComponents.back()->setDefaultZIndex(30.0f); mVideoComponents.back()->setDefaultZIndex(30.0f);
mVideoComponents.back()->applyTheme(theme, "gamelist", element.first, ALL); mVideoComponents.back()->applyTheme(theme, "gamelist", element.first, ALL);
if (mVideoComponents.back()->getThemeOpacity() != 0.0f) { if (mVideoComponents.back()->getThemeImageTypes().size() != 0)
if (mVideoComponents.back()->getThemeImageTypes().size() != 0) mVideoComponents.back()->setScrollHide(true);
mVideoComponents.back()->setScrollHide(true); addChild(mVideoComponents.back().get());
addChild(mVideoComponents.back().get());
}
else {
mVideoComponents.pop_back();
}
} }
} }
else if (element.second.type == "animation" && element.second.has("path")) { else if (element.second.type == "animation" && element.second.has("path") &&
(!(element.second.has("visible") && !element.second.get<bool>("visible")))) {
const std::string extension { const std::string extension {
Utils::FileSystem::getExtension(element.second.get<std::string>("path"))}; Utils::FileSystem::getExtension(element.second.get<std::string>("path"))};
if (extension == ".json") { if (extension == ".json") {
mLottieAnimComponents.push_back(std::make_unique<LottieAnimComponent>()); mLottieAnimComponents.push_back(std::make_unique<LottieAnimComponent>());
mLottieAnimComponents.back()->setDefaultZIndex(35.0f); mLottieAnimComponents.back()->setDefaultZIndex(35.0f);
mLottieAnimComponents.back()->applyTheme(theme, "gamelist", element.first, ALL); mLottieAnimComponents.back()->applyTheme(theme, "gamelist", element.first, ALL);
if (mLottieAnimComponents.back()->getThemeOpacity() != 0.0f) { if (mLottieAnimComponents.back()->getMetadataElement())
if (mLottieAnimComponents.back()->getMetadataElement()) mLottieAnimComponents.back()->setScrollHide(true);
mLottieAnimComponents.back()->setScrollHide(true); addChild(mLottieAnimComponents.back().get());
addChild(mLottieAnimComponents.back().get());
}
else {
mLottieAnimComponents.pop_back();
}
} }
else if (extension == ".gif") { else if (extension == ".gif") {
mGIFAnimComponents.push_back(std::make_unique<GIFAnimComponent>()); mGIFAnimComponents.push_back(std::make_unique<GIFAnimComponent>());
mGIFAnimComponents.back()->setDefaultZIndex(35.0f); mGIFAnimComponents.back()->setDefaultZIndex(35.0f);
mGIFAnimComponents.back()->applyTheme(theme, "gamelist", element.first, ALL); mGIFAnimComponents.back()->applyTheme(theme, "gamelist", element.first, ALL);
if (mGIFAnimComponents.back()->getThemeOpacity() != 0.0f) { if (mGIFAnimComponents.back()->getMetadataElement())
if (mGIFAnimComponents.back()->getMetadataElement()) mGIFAnimComponents.back()->setScrollHide(true);
mGIFAnimComponents.back()->setScrollHide(true); addChild(mGIFAnimComponents.back().get());
addChild(mGIFAnimComponents.back().get());
}
else {
mGIFAnimComponents.pop_back();
}
} }
else if (extension == ".") { else if (extension == ".") {
LOG(LogWarning) LOG(LogWarning)
@ -295,19 +273,16 @@ void GamelistView::onThemeChanged(const std::shared_ptr<ThemeData>& theme)
<< extension << "\""; << extension << "\"";
} }
} }
else if (element.second.type == "badges") { else if (element.second.type == "badges" &&
(!(element.second.has("visible") && !element.second.get<bool>("visible")))) {
mBadgeComponents.push_back(std::make_unique<BadgeComponent>()); mBadgeComponents.push_back(std::make_unique<BadgeComponent>());
mBadgeComponents.back()->setDefaultZIndex(35.0f); mBadgeComponents.back()->setDefaultZIndex(35.0f);
mBadgeComponents.back()->applyTheme(theme, "gamelist", element.first, ALL); mBadgeComponents.back()->applyTheme(theme, "gamelist", element.first, ALL);
if (mBadgeComponents.back()->getThemeOpacity() != 0.0f) { mBadgeComponents.back()->setScrollHide(true);
mBadgeComponents.back()->setScrollHide(true); addChild(mBadgeComponents.back().get());
addChild(mBadgeComponents.back().get());
}
else {
mBadgeComponents.pop_back();
}
} }
else if (element.second.type == "text") { else if (element.second.type == "text" &&
(!(element.second.has("visible") && !element.second.get<bool>("visible")))) {
// Set as container by default if metadata type is "description". // Set as container by default if metadata type is "description".
bool container {false}; bool container {false};
if (element.second.has("container")) { if (element.second.has("container")) {
@ -326,77 +301,56 @@ void GamelistView::onThemeChanged(const std::shared_ptr<ThemeData>& theme)
mContainerComponents.back()->applyTheme(theme, "gamelist", element.first, mContainerComponents.back()->applyTheme(theme, "gamelist", element.first,
POSITION | ThemeFlags::SIZE | Z_INDEX | POSITION | ThemeFlags::SIZE | Z_INDEX |
VISIBLE); VISIBLE);
if (mContainerComponents.back()->getThemeOpacity() != 0.0f) { mContainerComponents.back()->setAutoScroll(true);
mContainerComponents.back()->setAutoScroll(true); mContainerTextComponents.back()->setSize(
mContainerTextComponents.back()->setSize( mContainerComponents.back()->getSize().x, 0.0f);
mContainerComponents.back()->getSize().x, 0.0f); mContainerTextComponents.back()->applyTheme(
mContainerTextComponents.back()->applyTheme( theme, "gamelist", element.first,
theme, "gamelist", element.first, ALL ^ POSITION ^ ORIGIN ^ Z_INDEX ^ ThemeFlags::SIZE ^ VISIBLE ^ ROTATION);
ALL ^ POSITION ^ ORIGIN ^ Z_INDEX ^ ThemeFlags::SIZE ^ VISIBLE ^ if (mContainerTextComponents.back()->getThemeMetadata() != "")
ROTATION); mContainerComponents.back()->setScrollHide(true);
if (mContainerTextComponents.back()->getThemeMetadata() != "") else if (mContainerTextComponents.back()->getMetadataElement())
mContainerComponents.back()->setScrollHide(true); mContainerComponents.back()->setScrollHide(true);
else if (mContainerTextComponents.back()->getMetadataElement()) addChild(mContainerComponents.back().get());
mContainerComponents.back()->setScrollHide(true);
addChild(mContainerComponents.back().get());
}
else {
mContainerComponents.pop_back();
}
} }
else { else {
mTextComponents.push_back(std::make_unique<TextComponent>()); mTextComponents.push_back(std::make_unique<TextComponent>());
mTextComponents.back()->setDefaultZIndex(40.0f); mTextComponents.back()->setDefaultZIndex(40.0f);
mTextComponents.back()->applyTheme(theme, "gamelist", element.first, ALL); mTextComponents.back()->applyTheme(theme, "gamelist", element.first, ALL);
if (mTextComponents.back()->getThemeOpacity() != 0.0f) { const std::string& metadata {mTextComponents.back()->getThemeMetadata()};
const std::string& metadata {mTextComponents.back()->getThemeMetadata()}; if (metadata != "" && metadata != "systemName" &&
if (metadata != "" && metadata != "systemName" && metadata != "systemFullname" && metadata != "sourceSystemName" &&
metadata != "systemFullname" && metadata != "sourceSystemName" && metadata != "sourceSystemFullname")
metadata != "sourceSystemFullname") mTextComponents.back()->setScrollHide(true);
mTextComponents.back()->setScrollHide(true); else if (mTextComponents.back()->getMetadataElement())
else if (mTextComponents.back()->getMetadataElement()) mTextComponents.back()->setScrollHide(true);
mTextComponents.back()->setScrollHide(true); addChild(mTextComponents.back().get());
addChild(mTextComponents.back().get());
}
else {
mTextComponents.pop_back();
}
} }
} }
else if (element.second.type == "datetime") { else if (element.second.type == "datetime" &&
(!(element.second.has("visible") && !element.second.get<bool>("visible")))) {
mDateTimeComponents.push_back(std::make_unique<DateTimeComponent>()); mDateTimeComponents.push_back(std::make_unique<DateTimeComponent>());
mDateTimeComponents.back()->setDefaultZIndex(40.0f); mDateTimeComponents.back()->setDefaultZIndex(40.0f);
mDateTimeComponents.back()->applyTheme(theme, "gamelist", element.first, ALL); mDateTimeComponents.back()->applyTheme(theme, "gamelist", element.first, ALL);
if (mDateTimeComponents.back()->getThemeOpacity() != 0.0f) { if (mDateTimeComponents.back()->getThemeMetadata() != "")
if (mDateTimeComponents.back()->getThemeMetadata() != "") mDateTimeComponents.back()->setScrollHide(true);
mDateTimeComponents.back()->setScrollHide(true); addChild(mDateTimeComponents.back().get());
addChild(mDateTimeComponents.back().get());
}
else {
mDateTimeComponents.pop_back();
}
} }
else if (element.second.type == "gamelistinfo") { else if (element.second.type == "gamelistinfo" &&
(!(element.second.has("visible") && !element.second.get<bool>("visible")))) {
mGamelistInfoComponents.push_back(std::make_unique<TextComponent>()); mGamelistInfoComponents.push_back(std::make_unique<TextComponent>());
mGamelistInfoComponents.back()->setDefaultZIndex(45.0f); mGamelistInfoComponents.back()->setDefaultZIndex(45.0f);
mGamelistInfoComponents.back()->applyTheme(theme, "gamelist", element.first, ALL); mGamelistInfoComponents.back()->applyTheme(theme, "gamelist", element.first, ALL);
if (mGamelistInfoComponents.back()->getThemeOpacity() != 0.0f) addChild(mGamelistInfoComponents.back().get());
addChild(mGamelistInfoComponents.back().get());
else
mGamelistInfoComponents.pop_back();
} }
else if (element.second.type == "rating") { else if (element.second.type == "rating" &&
(!(element.second.has("visible") && !element.second.get<bool>("visible")))) {
mRatingComponents.push_back(std::make_unique<RatingComponent>()); mRatingComponents.push_back(std::make_unique<RatingComponent>());
mRatingComponents.back()->setDefaultZIndex(45.0f); mRatingComponents.back()->setDefaultZIndex(45.0f);
mRatingComponents.back()->applyTheme(theme, "gamelist", element.first, ALL); mRatingComponents.back()->applyTheme(theme, "gamelist", element.first, ALL);
if (mRatingComponents.back()->getThemeOpacity() != 0.0f) { mRatingComponents.back()->setScrollHide(true);
mRatingComponents.back()->setScrollHide(true); mRatingComponents.back()->setOpacity(mRatingComponents.back()->getOpacity());
mRatingComponents.back()->setOpacity(mRatingComponents.back()->getOpacity()); addChild(mRatingComponents.back().get());
addChild(mRatingComponents.back().get());
}
else {
mRatingComponents.pop_back();
}
} }
} }

View file

@ -583,9 +583,10 @@ void SystemView::populate()
itemText = element.second.get<std::string>("text"); itemText = element.second.get<std::string>("text");
} }
} }
else if (element.second.type == "image") { else if (element.second.type == "image" &&
// If this is the first system, then forceload the images to avoid texture (!(element.second.has("visible") &&
// pop-in. !element.second.get<bool>("visible")))) {
// If this is the first system then forceload to avoid texture pop-in.
if (it == SystemData::sSystemVector.front()) if (it == SystemData::sSystemVector.front())
elements.imageComponents.emplace_back( elements.imageComponents.emplace_back(
std::make_unique<ImageComponent>(true)); std::make_unique<ImageComponent>(true));
@ -596,24 +597,22 @@ void SystemView::populate()
elements.imageComponents.back()->setDefaultZIndex(30.0f); elements.imageComponents.back()->setDefaultZIndex(30.0f);
elements.imageComponents.back()->applyTheme(theme, "system", element.first, elements.imageComponents.back()->applyTheme(theme, "system", element.first,
ThemeFlags::ALL); ThemeFlags::ALL);
if (elements.imageComponents.back()->getThemeOpacity() != 0.0f) elements.children.emplace_back(elements.imageComponents.back().get());
elements.children.emplace_back(elements.imageComponents.back().get());
else
elements.imageComponents.pop_back();
} }
else if (element.second.type == "video") { else if (element.second.type == "video" &&
(!(element.second.has("visible") &&
!element.second.get<bool>("visible")))) {
elements.videoComponents.emplace_back( elements.videoComponents.emplace_back(
std::make_unique<VideoFFmpegComponent>()); std::make_unique<VideoFFmpegComponent>());
elements.videoComponents.back()->setDefaultZIndex(30.0f); elements.videoComponents.back()->setDefaultZIndex(30.0f);
elements.videoComponents.back()->setStaticVideo(); elements.videoComponents.back()->setStaticVideo();
elements.videoComponents.back()->applyTheme(theme, "system", element.first, elements.videoComponents.back()->applyTheme(theme, "system", element.first,
ThemeFlags::ALL); ThemeFlags::ALL);
if (elements.videoComponents.back()->getThemeOpacity() != 0.0f) elements.children.emplace_back(elements.videoComponents.back().get());
elements.children.emplace_back(elements.videoComponents.back().get());
else
elements.videoComponents.pop_back();
} }
else if (element.second.type == "animation" && element.second.has("path")) { else if (element.second.type == "animation" && element.second.has("path") &&
(!(element.second.has("visible") &&
!element.second.get<bool>("visible")))) {
const std::string extension {Utils::FileSystem::getExtension( const std::string extension {Utils::FileSystem::getExtension(
element.second.get<std::string>("path"))}; element.second.get<std::string>("path"))};
if (extension == ".json") { if (extension == ".json") {
@ -622,11 +621,8 @@ void SystemView::populate()
elements.lottieAnimComponents.back()->setDefaultZIndex(35.0f); elements.lottieAnimComponents.back()->setDefaultZIndex(35.0f);
elements.lottieAnimComponents.back()->applyTheme( elements.lottieAnimComponents.back()->applyTheme(
theme, "system", element.first, ThemeFlags::ALL); theme, "system", element.first, ThemeFlags::ALL);
if (elements.lottieAnimComponents.back()->getThemeOpacity() != 0.0f) elements.children.emplace_back(
elements.children.emplace_back( elements.lottieAnimComponents.back().get());
elements.lottieAnimComponents.back().get());
else
elements.lottieAnimComponents.pop_back();
} }
else if (extension == ".gif") { else if (extension == ".gif") {
elements.GIFAnimComponents.emplace_back( elements.GIFAnimComponents.emplace_back(
@ -634,11 +630,7 @@ void SystemView::populate()
elements.GIFAnimComponents.back()->setDefaultZIndex(35.0f); elements.GIFAnimComponents.back()->setDefaultZIndex(35.0f);
elements.GIFAnimComponents.back()->applyTheme( elements.GIFAnimComponents.back()->applyTheme(
theme, "system", element.first, ThemeFlags::ALL); theme, "system", element.first, ThemeFlags::ALL);
if (elements.GIFAnimComponents.back()->getThemeOpacity() != 0.0f) elements.children.emplace_back(elements.GIFAnimComponents.back().get());
elements.children.emplace_back(
elements.GIFAnimComponents.back().get());
else
elements.GIFAnimComponents.pop_back();
} }
else if (extension == ".") { else if (extension == ".") {
LOG(LogWarning) LOG(LogWarning)
@ -652,7 +644,9 @@ void SystemView::populate()
<< extension << "\""; << extension << "\"";
} }
} }
else if (element.second.type == "text") { else if (element.second.type == "text" &&
(!(element.second.has("visible") &&
!element.second.get<bool>("visible")))) {
if (element.second.has("systemdata") && if (element.second.has("systemdata") &&
element.second.get<std::string>("systemdata").substr(0, 9) == element.second.get<std::string>("systemdata").substr(0, 9) ==
"gamecount") { "gamecount") {
@ -662,11 +656,8 @@ void SystemView::populate()
elements.gameCountComponents.back()->setDefaultZIndex(40.0f); elements.gameCountComponents.back()->setDefaultZIndex(40.0f);
elements.gameCountComponents.back()->applyTheme( elements.gameCountComponents.back()->applyTheme(
theme, "system", element.first, ThemeFlags::ALL); theme, "system", element.first, ThemeFlags::ALL);
if (elements.gameCountComponents.back()->getThemeOpacity() != 0.0f) elements.children.emplace_back(
elements.children.emplace_back( elements.gameCountComponents.back().get());
elements.gameCountComponents.back().get());
else
elements.gameCountComponents.pop_back();
} }
} }
else { else {
@ -674,42 +665,31 @@ void SystemView::populate()
elements.textComponents.back()->setDefaultZIndex(40.0f); elements.textComponents.back()->setDefaultZIndex(40.0f);
elements.textComponents.back()->applyTheme( elements.textComponents.back()->applyTheme(
theme, "system", element.first, ThemeFlags::ALL); theme, "system", element.first, ThemeFlags::ALL);
if (elements.textComponents.back()->getThemeOpacity() != 0.0f) elements.children.emplace_back(elements.textComponents.back().get());
elements.children.emplace_back(
elements.textComponents.back().get());
else
elements.textComponents.pop_back();
} }
} }
else if (element.second.type == "datetime") { else if (element.second.type == "datetime" &&
(!(element.second.has("visible") &&
!element.second.get<bool>("visible")))) {
elements.dateTimeComponents.emplace_back( elements.dateTimeComponents.emplace_back(
std::make_unique<DateTimeComponent>()); std::make_unique<DateTimeComponent>());
elements.dateTimeComponents.back()->setDefaultZIndex(40.0f); elements.dateTimeComponents.back()->setDefaultZIndex(40.0f);
elements.dateTimeComponents.back()->applyTheme( elements.dateTimeComponents.back()->applyTheme(
theme, "system", element.first, ThemeFlags::ALL); theme, "system", element.first, ThemeFlags::ALL);
if (elements.dateTimeComponents.back()->getThemeOpacity() != 0.0f) { elements.dateTimeComponents.back()->setVisible(false);
elements.dateTimeComponents.back()->setVisible(false); elements.children.emplace_back(elements.dateTimeComponents.back().get());
elements.children.emplace_back(
elements.dateTimeComponents.back().get());
}
else {
elements.dateTimeComponents.pop_back();
}
} }
else if (element.second.type == "rating") { else if (element.second.type == "rating" &&
(!(element.second.has("visible") &&
!element.second.get<bool>("visible")))) {
elements.ratingComponents.emplace_back(std::make_unique<RatingComponent>()); elements.ratingComponents.emplace_back(std::make_unique<RatingComponent>());
elements.ratingComponents.back()->setDefaultZIndex(45.0f); elements.ratingComponents.back()->setDefaultZIndex(45.0f);
elements.ratingComponents.back()->applyTheme(theme, "system", element.first, elements.ratingComponents.back()->applyTheme(theme, "system", element.first,
ThemeFlags::ALL); ThemeFlags::ALL);
if (elements.ratingComponents.back()->getThemeOpacity() != 0.0f) { elements.ratingComponents.back()->setVisible(false);
elements.ratingComponents.back()->setVisible(false); elements.ratingComponents.back()->setOpacity(
elements.ratingComponents.back()->setOpacity( elements.ratingComponents.back()->getOpacity());
elements.ratingComponents.back()->getOpacity()); elements.children.emplace_back(elements.ratingComponents.back().get());
elements.children.emplace_back(elements.ratingComponents.back().get());
}
else {
elements.ratingComponents.pop_back();
}
} }
} }
} }