mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-22 14:15:38 +00:00
General refactoring and minor optimizations throughout the codebase.
This commit is contained in:
parent
c4b574f571
commit
3e12fcb420
|
@ -516,7 +516,8 @@ void CollectionSystemsManager::deleteCollectionFiles(FileData* file)
|
|||
}
|
||||
}
|
||||
|
||||
bool CollectionSystemsManager::isThemeGenericCollectionCompatible(bool genericCustomCollections)
|
||||
const bool CollectionSystemsManager::isThemeGenericCollectionCompatible(
|
||||
bool genericCustomCollections)
|
||||
{
|
||||
std::vector<std::string> cfgSys = getCollectionThemeFolders(genericCustomCollections);
|
||||
for (auto sysIt = cfgSys.cbegin(); sysIt != cfgSys.cend(); sysIt++) {
|
||||
|
@ -526,8 +527,8 @@ bool CollectionSystemsManager::isThemeGenericCollectionCompatible(bool genericCu
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CollectionSystemsManager::isThemeCustomCollectionCompatible(
|
||||
std::vector<std::string> stringVector)
|
||||
const bool CollectionSystemsManager::isThemeCustomCollectionCompatible(
|
||||
const std::vector<std::string>& stringVector)
|
||||
{
|
||||
if (isThemeGenericCollectionCompatible(true))
|
||||
return true;
|
||||
|
@ -548,7 +549,8 @@ bool CollectionSystemsManager::isThemeCustomCollectionCompatible(
|
|||
return true;
|
||||
}
|
||||
|
||||
std::string CollectionSystemsManager::getValidNewCollectionName(std::string inName, int index)
|
||||
std::string CollectionSystemsManager::getValidNewCollectionName(const std::string& inName,
|
||||
int index)
|
||||
{
|
||||
std::string name = inName;
|
||||
|
||||
|
@ -602,7 +604,7 @@ std::string CollectionSystemsManager::getValidNewCollectionName(std::string inNa
|
|||
return name;
|
||||
}
|
||||
|
||||
void CollectionSystemsManager::setEditMode(std::string collectionName, bool showPopup)
|
||||
void CollectionSystemsManager::setEditMode(const std::string& collectionName, bool showPopup)
|
||||
{
|
||||
if (mCustomCollectionSystemsData.find(collectionName) == mCustomCollectionSystemsData.cend()) {
|
||||
LOG(LogError) << "Tried to edit a non-existing collection: " << collectionName;
|
||||
|
@ -645,8 +647,8 @@ void CollectionSystemsManager::exitEditMode(bool showPopup)
|
|||
mEditingCollectionSystemData->system->onMetaDataSavePoint();
|
||||
}
|
||||
|
||||
bool CollectionSystemsManager::inCustomCollection(const std::string& collectionName,
|
||||
FileData* gameFile)
|
||||
const bool CollectionSystemsManager::inCustomCollection(const std::string& collectionName,
|
||||
FileData* gameFile)
|
||||
{
|
||||
auto collectionEntry = mCustomCollectionSystemsData.find(collectionName);
|
||||
|
||||
|
@ -658,7 +660,7 @@ bool CollectionSystemsManager::inCustomCollection(const std::string& collectionN
|
|||
return false;
|
||||
}
|
||||
|
||||
bool CollectionSystemsManager::toggleGameInCollection(FileData* file)
|
||||
const bool CollectionSystemsManager::toggleGameInCollection(FileData* file)
|
||||
{
|
||||
if (file->getType() == GAME) {
|
||||
bool adding = true;
|
||||
|
@ -903,7 +905,7 @@ std::vector<std::string> CollectionSystemsManager::getUnusedSystemsFromTheme()
|
|||
return themeSys;
|
||||
}
|
||||
|
||||
SystemData* CollectionSystemsManager::addNewCustomCollection(std::string name)
|
||||
SystemData* CollectionSystemsManager::addNewCustomCollection(const std::string& name)
|
||||
{
|
||||
CollectionSystemDecl decl = mCollectionSystemDeclsIndex[myCollectionsName];
|
||||
decl.themeFolder = name;
|
||||
|
@ -913,7 +915,7 @@ SystemData* CollectionSystemsManager::addNewCustomCollection(std::string name)
|
|||
return createNewCollectionEntry(name, decl, true, true);
|
||||
}
|
||||
|
||||
void CollectionSystemsManager::deleteCustomCollection(std::string collectionName)
|
||||
void CollectionSystemsManager::deleteCustomCollection(const std::string& collectionName)
|
||||
{
|
||||
auto collectionEntry = mCustomCollectionSystemsData.find(collectionName);
|
||||
|
||||
|
@ -1090,7 +1092,7 @@ SystemData* CollectionSystemsManager::getAllGamesCollection()
|
|||
return allSysData->system;
|
||||
}
|
||||
|
||||
SystemData* CollectionSystemsManager::createNewCollectionEntry(std::string name,
|
||||
SystemData* CollectionSystemsManager::createNewCollectionEntry(const std::string& name,
|
||||
CollectionSystemDecl sysDecl,
|
||||
bool index,
|
||||
bool custom)
|
||||
|
@ -1456,13 +1458,13 @@ void CollectionSystemsManager::trimCollectionCount(FileData* rootFolder, int lim
|
|||
}
|
||||
}
|
||||
|
||||
bool CollectionSystemsManager::themeFolderExists(std::string folder)
|
||||
const bool CollectionSystemsManager::themeFolderExists(const std::string& folder)
|
||||
{
|
||||
std::vector<std::string> themeSys = getSystemsFromTheme();
|
||||
return std::find(themeSys.cbegin(), themeSys.cend(), folder) != themeSys.cend();
|
||||
}
|
||||
|
||||
bool CollectionSystemsManager::includeFileInAutoCollections(FileData* file)
|
||||
const bool CollectionSystemsManager::includeFileInAutoCollections(FileData* file)
|
||||
{
|
||||
// We exclude non-game files from collections (i.e. "kodi", entries from non-game systems).
|
||||
// If/when there are more in the future, maybe this can be a more complex method, with a
|
||||
|
@ -1470,7 +1472,8 @@ bool CollectionSystemsManager::includeFileInAutoCollections(FileData* file)
|
|||
return file->getName() != "kodi" && file->getSystem()->isGameSystem();
|
||||
}
|
||||
|
||||
std::string CollectionSystemsManager::getCustomCollectionConfigPath(std::string collectionName)
|
||||
std::string CollectionSystemsManager::getCustomCollectionConfigPath(
|
||||
const std::string& collectionName)
|
||||
{
|
||||
return getCollectionsFolder() + "/custom-" + collectionName + ".cfg";
|
||||
}
|
||||
|
|
|
@ -90,15 +90,15 @@ public:
|
|||
void deleteCollectionFiles(FileData* file);
|
||||
|
||||
// Return whether the current theme is compatible with Automatic or Custom Collections.
|
||||
bool isThemeGenericCollectionCompatible(bool genericCustomCollections);
|
||||
bool isThemeCustomCollectionCompatible(std::vector<std::string> stringVector);
|
||||
std::string getValidNewCollectionName(std::string name, int index = 0);
|
||||
const bool isThemeGenericCollectionCompatible(bool genericCustomCollections);
|
||||
const bool isThemeCustomCollectionCompatible(const std::vector<std::string>& stringVector);
|
||||
std::string getValidNewCollectionName(const std::string& name, int index = 0);
|
||||
|
||||
void setEditMode(std::string collectionName, bool showPopup = true);
|
||||
void setEditMode(const std::string& collectionName, bool showPopup = true);
|
||||
void exitEditMode(bool showPopup = true);
|
||||
bool inCustomCollection(const std::string& collectionName, FileData* gameFile);
|
||||
const bool inCustomCollection(const std::string& collectionName, FileData* gameFile);
|
||||
// Add or remove a game from a specific collection.
|
||||
bool toggleGameInCollection(FileData* file);
|
||||
const bool toggleGameInCollection(FileData* file);
|
||||
|
||||
SystemData* getSystemToView(SystemData* sys);
|
||||
// Used to generate a description of the collection (all other metadata fields are hidden).
|
||||
|
@ -106,8 +106,8 @@ public:
|
|||
// Return the unused folders from current theme path.
|
||||
std::vector<std::string> getUnusedSystemsFromTheme();
|
||||
|
||||
SystemData* addNewCustomCollection(std::string name);
|
||||
void deleteCustomCollection(std::string collectionName);
|
||||
SystemData* addNewCustomCollection(const std::string& name);
|
||||
void deleteCustomCollection(const std::string& collectionName);
|
||||
|
||||
// Reactivate a game in all custom collections where it has an entry in the configuration file.
|
||||
void reactivateCustomCollectionEntry(FileData* game);
|
||||
|
@ -115,17 +115,19 @@ public:
|
|||
// Repopulate the collection, which is basically a forced update of its complete content.
|
||||
void repopulateCollection(SystemData* sysData);
|
||||
|
||||
std::map<std::string, CollectionSystemData, stringComparator> getAutoCollectionSystems()
|
||||
const std::map<std::string, CollectionSystemData, stringComparator>& // Line break.
|
||||
getAutoCollectionSystems() const
|
||||
{
|
||||
return mAutoCollectionSystemsData;
|
||||
}
|
||||
std::map<std::string, CollectionSystemData, stringComparator> getCustomCollectionSystems()
|
||||
const std::map<std::string, CollectionSystemData, stringComparator>&
|
||||
getCustomCollectionSystems()
|
||||
{
|
||||
return mCustomCollectionSystemsData;
|
||||
}
|
||||
SystemData* getCustomCollectionsBundle() { return mCustomCollectionsBundle; }
|
||||
bool isEditing() { return mIsEditingCustom; }
|
||||
std::string getEditingCollection() { return mEditingCollection; }
|
||||
SystemData* getCustomCollectionsBundle() const { return mCustomCollectionsBundle; }
|
||||
const bool isEditing() const { return mIsEditingCustom; }
|
||||
const std::string& getEditingCollection() const { return mEditingCollection; }
|
||||
|
||||
private:
|
||||
static CollectionSystemsManager* sInstance;
|
||||
|
@ -146,7 +148,7 @@ private:
|
|||
void initCustomCollectionSystems();
|
||||
SystemData* getAllGamesCollection();
|
||||
// Create a new empty collection system based on the name and declaration.
|
||||
SystemData* createNewCollectionEntry(std::string name,
|
||||
SystemData* createNewCollectionEntry(const std::string& name,
|
||||
CollectionSystemDecl sysDecl,
|
||||
bool index = true,
|
||||
bool custom = false);
|
||||
|
@ -172,10 +174,10 @@ private:
|
|||
std::vector<std::string> getUserCollectionThemeFolders();
|
||||
void trimCollectionCount(FileData* rootFolder, int limit);
|
||||
// Return whether a specific folder exists in the theme.
|
||||
bool themeFolderExists(std::string folder);
|
||||
bool includeFileInAutoCollections(FileData* file);
|
||||
const bool themeFolderExists(const std::string& folder);
|
||||
const bool includeFileInAutoCollections(FileData* file);
|
||||
|
||||
std::string getCustomCollectionConfigPath(std::string collectionName);
|
||||
std::string getCustomCollectionConfigPath(const std::string& collectionName);
|
||||
std::string getCollectionsFolder();
|
||||
};
|
||||
|
||||
|
|
|
@ -142,7 +142,7 @@ const std::vector<FileData*> FileData::getChildrenRecursive() const
|
|||
std::vector<FileData*> childrenRecursive;
|
||||
|
||||
for (auto it = mChildrenByFilename.cbegin(); it != mChildrenByFilename.cend(); it++) {
|
||||
childrenRecursive.push_back((*it).second);
|
||||
childrenRecursive.emplace_back((*it).second);
|
||||
// Recurse through any subdirectories.
|
||||
if ((*it).second->getType() == FOLDER) {
|
||||
std::vector<FileData*> childrenSubdirectory = (*it).second->getChildrenRecursive();
|
||||
|
@ -208,7 +208,7 @@ const std::string FileData::getMediaDirectory()
|
|||
return mediaDirPath;
|
||||
}
|
||||
|
||||
const std::string FileData::getMediafilePath(std::string subdirectory) const
|
||||
const std::string FileData::getMediafilePath(const std::string& subdirectory) const
|
||||
{
|
||||
const std::vector<std::string> extList = {".png", ".jpg"};
|
||||
std::string subFolders;
|
||||
|
@ -336,7 +336,7 @@ const std::vector<FileData*>& FileData::getChildrenListToDisplay()
|
|||
mFilteredChildren.clear();
|
||||
for (auto it = mChildren.cbegin(); it != mChildren.cend(); it++) {
|
||||
if (idx->showFile((*it))) {
|
||||
mFilteredChildren.push_back(*it);
|
||||
mFilteredChildren.emplace_back(*it);
|
||||
}
|
||||
}
|
||||
return mFilteredChildren;
|
||||
|
@ -357,9 +357,9 @@ std::vector<FileData*> FileData::getFilesRecursive(unsigned int typeMask,
|
|||
if ((*it)->getType() & typeMask) {
|
||||
if (!displayedOnly || !idx->isFiltered() || idx->showFile(*it)) {
|
||||
if (countAllGames)
|
||||
out.push_back(*it);
|
||||
out.emplace_back(*it);
|
||||
else if ((*it)->getCountAsGame())
|
||||
out.push_back(*it);
|
||||
out.emplace_back(*it);
|
||||
}
|
||||
}
|
||||
if ((*it)->getChildren().size() > 0) {
|
||||
|
@ -370,7 +370,7 @@ std::vector<FileData*> FileData::getFilesRecursive(unsigned int typeMask,
|
|||
else {
|
||||
for (auto it2 = subChildren.cbegin(); it2 != subChildren.cend(); it2++) {
|
||||
if ((*it2)->getCountAsGame())
|
||||
out.push_back(*it2);
|
||||
out.emplace_back(*it2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -388,11 +388,11 @@ std::vector<FileData*> FileData::getScrapeFilesRecursive(bool includeFolders,
|
|||
for (auto it = mChildren.cbegin(); it != mChildren.cend(); it++) {
|
||||
if (includeFolders && (*it)->getType() == FOLDER) {
|
||||
if (!(respectExclusions && (*it)->getExcludeFromScraper()))
|
||||
out.push_back(*it);
|
||||
out.emplace_back(*it);
|
||||
}
|
||||
else if ((*it)->getType() == GAME) {
|
||||
if (!(respectExclusions && (*it)->getExcludeFromScraper()))
|
||||
out.push_back(*it);
|
||||
out.emplace_back(*it);
|
||||
}
|
||||
|
||||
// If the flag has been passed to exclude directories recursively, then skip the entire
|
||||
|
@ -410,9 +410,7 @@ std::vector<FileData*> FileData::getScrapeFilesRecursive(bool includeFolders,
|
|||
return out;
|
||||
}
|
||||
|
||||
std::string FileData::getKey() { return getFileName(); }
|
||||
|
||||
const bool FileData::isArcadeAsset()
|
||||
const bool FileData::isArcadeAsset() const
|
||||
{
|
||||
const std::string stem = Utils::FileSystem::getStem(mPath);
|
||||
return ((mSystem && (mSystem->hasPlatformId(PlatformIds::ARCADE) ||
|
||||
|
@ -420,7 +418,7 @@ const bool FileData::isArcadeAsset()
|
|||
(MameNames::getInstance()->isBios(stem) || MameNames::getInstance()->isDevice(stem)));
|
||||
}
|
||||
|
||||
const bool FileData::isArcadeGame()
|
||||
const bool FileData::isArcadeGame() const
|
||||
{
|
||||
const std::string stem = Utils::FileSystem::getStem(mPath);
|
||||
return ((mSystem && (mSystem->hasPlatformId(PlatformIds::ARCADE) ||
|
||||
|
@ -428,8 +426,6 @@ const bool FileData::isArcadeGame()
|
|||
(!MameNames::getInstance()->isBios(stem) && !MameNames::getInstance()->isDevice(stem)));
|
||||
}
|
||||
|
||||
FileData* FileData::getSourceFileData() { return this; }
|
||||
|
||||
void FileData::addChild(FileData* file)
|
||||
{
|
||||
assert(mType == FOLDER);
|
||||
|
@ -438,7 +434,7 @@ void FileData::addChild(FileData* file)
|
|||
const std::string key = file->getKey();
|
||||
if (mChildrenByFilename.find(key) == mChildrenByFilename.cend()) {
|
||||
mChildrenByFilename[key] = file;
|
||||
mChildren.push_back(file);
|
||||
mChildren.emplace_back(file);
|
||||
file->mParent = this;
|
||||
}
|
||||
}
|
||||
|
@ -511,10 +507,10 @@ void FileData::sort(ComparisonFunction& comparator,
|
|||
if (foldersOnTop) {
|
||||
for (unsigned int i = 0; i < mChildren.size(); i++) {
|
||||
if (mChildren[i]->getType() == FOLDER) {
|
||||
mChildrenFolders.push_back(mChildren[i]);
|
||||
mChildrenFolders.emplace_back(mChildren[i]);
|
||||
}
|
||||
else {
|
||||
mChildrenOthers.push_back(mChildren[i]);
|
||||
mChildrenOthers.emplace_back(mChildren[i]);
|
||||
mOnlyFolders = false;
|
||||
}
|
||||
}
|
||||
|
@ -628,15 +624,15 @@ void FileData::sortFavoritesOnTop(ComparisonFunction& comparator,
|
|||
|
||||
if (foldersOnTop && mChildren[i]->getType() == FOLDER) {
|
||||
if (!mChildren[i]->getFavorite())
|
||||
mChildrenFolders.push_back(mChildren[i]);
|
||||
mChildrenFolders.emplace_back(mChildren[i]);
|
||||
else
|
||||
mChildrenFavoritesFolders.push_back(mChildren[i]);
|
||||
mChildrenFavoritesFolders.emplace_back(mChildren[i]);
|
||||
}
|
||||
else if (mChildren[i]->getFavorite()) {
|
||||
mChildrenFavorites.push_back(mChildren[i]);
|
||||
mChildrenFavorites.emplace_back(mChildren[i]);
|
||||
}
|
||||
else {
|
||||
mChildrenOthers.push_back(mChildren[i]);
|
||||
mChildrenOthers.emplace_back(mChildren[i]);
|
||||
}
|
||||
|
||||
if (mChildren[i]->getType() != FOLDER)
|
||||
|
@ -751,7 +747,7 @@ void FileData::countGames(std::pair<unsigned int, unsigned int>& gameCount)
|
|||
mGameCount = gameCount;
|
||||
}
|
||||
|
||||
FileData::SortType FileData::getSortTypeFromString(std::string desc)
|
||||
const FileData::SortType& FileData::getSortTypeFromString(const std::string& desc) const
|
||||
{
|
||||
std::vector<FileData::SortType> SortTypes = FileSorts::SortTypes;
|
||||
|
||||
|
@ -1149,7 +1145,7 @@ void FileData::launchGame(Window* window)
|
|||
gameToUpdate->mSystem->onMetaDataSavePoint();
|
||||
}
|
||||
|
||||
std::string FileData::findEmulatorPath(std::string& command)
|
||||
const std::string FileData::findEmulatorPath(std::string& command)
|
||||
{
|
||||
// Extract the emulator executable from the launch command string. There are two ways
|
||||
// that the emulator can be defined in es_systems.xml, either using the find rules in
|
||||
|
|
|
@ -43,7 +43,7 @@ public:
|
|||
const bool getKidgame();
|
||||
const bool getHidden();
|
||||
const bool getCountAsGame();
|
||||
const std::pair<unsigned int, unsigned int> getGameCount() { return mGameCount; }
|
||||
const std::pair<unsigned int, unsigned int>& getGameCount() const { return mGameCount; }
|
||||
const bool getExcludeFromScraper();
|
||||
const std::vector<FileData*> getChildrenRecursive() const;
|
||||
FileType getType() const { return mType; }
|
||||
|
@ -56,11 +56,11 @@ public:
|
|||
const std::vector<FileData*>& getChildren() const { return mChildren; }
|
||||
SystemData* getSystem() const { return mSystem; }
|
||||
SystemEnvironmentData* getSystemEnvData() const { return mEnvData; }
|
||||
const bool getOnlyFoldersFlag() { return mOnlyFolders; }
|
||||
const bool getHasFoldersFlag() { return mHasFolders; }
|
||||
const bool getOnlyFoldersFlag() const { return mOnlyFolders; }
|
||||
const bool getHasFoldersFlag() const { return mHasFolders; }
|
||||
static const std::string getROMDirectory();
|
||||
static const std::string getMediaDirectory();
|
||||
const std::string getMediafilePath(std::string subdirectory) const;
|
||||
const std::string getMediafilePath(const std::string& subdirectory) const;
|
||||
const std::string getImagePath() const;
|
||||
const std::string get3DBoxPath() const;
|
||||
const std::string getBackCoverPath() const;
|
||||
|
@ -73,7 +73,7 @@ public:
|
|||
const std::string getThumbnailPath() const;
|
||||
const std::string getVideoPath() const;
|
||||
|
||||
bool getDeletionFlag() { return mDeletionFlag; }
|
||||
const bool getDeletionFlag() const { return mDeletionFlag; }
|
||||
void setDeletionFlag(bool setting) { mDeletionFlag = setting; }
|
||||
|
||||
const std::vector<FileData*>& getChildrenListToDisplay();
|
||||
|
@ -87,17 +87,17 @@ public:
|
|||
void addChild(FileData* file); // Error if mType != FOLDER
|
||||
void removeChild(FileData* file); // Error if mType != FOLDER
|
||||
|
||||
bool isPlaceHolder() { return mType == PLACEHOLDER; }
|
||||
const bool isPlaceHolder() const { return mType == PLACEHOLDER; }
|
||||
|
||||
virtual void refreshMetadata() { return; }
|
||||
|
||||
virtual std::string getKey();
|
||||
const bool isArcadeAsset();
|
||||
const bool isArcadeGame();
|
||||
std::string getFullPath() { return getPath(); }
|
||||
virtual std::string getKey() { return getFileName(); }
|
||||
const bool isArcadeAsset() const;
|
||||
const bool isArcadeGame() const;
|
||||
const std::string& getFullPath() const { return getPath(); }
|
||||
std::string getFileName() { return Utils::FileSystem::getFileName(getPath()); }
|
||||
virtual FileData* getSourceFileData();
|
||||
std::string getSystemName() const { return mSystemName; }
|
||||
virtual FileData* getSourceFileData() { return this; }
|
||||
const std::string& getSystemName() const { return mSystemName; }
|
||||
|
||||
// Returns our best guess at the "real" name for this file.
|
||||
std::string getDisplayName() const;
|
||||
|
@ -106,7 +106,7 @@ public:
|
|||
std::string getCleanName() const;
|
||||
|
||||
void launchGame(Window* window);
|
||||
std::string findEmulatorPath(std::string& command);
|
||||
const std::string findEmulatorPath(std::string& command);
|
||||
|
||||
typedef bool ComparisonFunction(const FileData* a, const FileData* b);
|
||||
struct SortType {
|
||||
|
@ -128,8 +128,8 @@ public:
|
|||
void countGames(std::pair<unsigned int, unsigned int>& gameCount);
|
||||
|
||||
void setSortTypeString(std::string typestring) { mSortTypeString = typestring; }
|
||||
std::string getSortTypeString() { return mSortTypeString; }
|
||||
FileData::SortType getSortTypeFromString(std::string desc);
|
||||
const std::string& getSortTypeString() const { return mSortTypeString; }
|
||||
const FileData::SortType& getSortTypeFromString(const std::string& desc) const;
|
||||
|
||||
protected:
|
||||
FileData* mSourceFileData;
|
||||
|
|
|
@ -14,61 +14,64 @@
|
|||
|
||||
#include <pugixml.hpp>
|
||||
|
||||
// clang-format off
|
||||
// The statistic entries must be placed at the bottom or otherwise there will be problems with
|
||||
// saving the values in GuiMetaDataEd.
|
||||
MetaDataDecl gameDecls[] = {
|
||||
// key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd, shouldScrape
|
||||
{"name", MD_STRING, "", false, "name", "enter name", true},
|
||||
{"sortname", MD_STRING, "", false, "sortname", "enter sortname", false},
|
||||
{"desc", MD_MULTILINE_STRING, "", false, "description", "enter description", true},
|
||||
{"rating", MD_RATING, "0", false, "rating", "enter rating", true},
|
||||
{"releasedate", MD_DATE, "19700101T010000", false, "release date", "enter release date", true},
|
||||
{"developer", MD_STRING, "unknown", false, "developer", "enter developer", true},
|
||||
{"publisher", MD_STRING, "unknown", false, "publisher", "enter publisher", true},
|
||||
{"genre", MD_STRING, "unknown", false, "genre", "enter genre", true},
|
||||
{"players", MD_STRING, "unknown", false, "players", "enter number of players", true},
|
||||
{"favorite", MD_BOOL, "false", false, "favorite", "enter favorite off/on", false},
|
||||
{"completed", MD_BOOL, "false", false, "completed", "enter completed off/on", false},
|
||||
{"kidgame", MD_BOOL, "false", false, "kidgame", "enter kidgame off/on", false},
|
||||
{"hidden", MD_BOOL, "false", false, "hidden", "enter hidden off/on", false},
|
||||
{"broken", MD_BOOL, "false", false, "broken/not working", "enter broken off/on", false},
|
||||
{"nogamecount", MD_BOOL, "false", false, "exclude from game counter", "enter don't count as game off/on", false},
|
||||
{"nomultiscrape", MD_BOOL, "false", false, "exclude from multi-scraper", "enter no multi-scrape off/on", false},
|
||||
{"hidemetadata", MD_BOOL, "false", false, "hide metadata fields", "enter hide metadata off/on", false},
|
||||
{"playcount", MD_INT, "0", false, "times played", "enter number of times played", false},
|
||||
{"controller", MD_CONTROLLER, "", false, "controller", "select controller", true},
|
||||
{"altemulator", MD_ALT_EMULATOR, "", false, "alternative emulator", "select alternative emulator", false},
|
||||
{"lastplayed", MD_TIME, "0", true, "last played", "enter last played date", false}
|
||||
};
|
||||
namespace
|
||||
{
|
||||
// clang-format off
|
||||
// The statistic entries must be placed at the bottom or otherwise there will be problems with
|
||||
// saving the values in GuiMetaDataEd.
|
||||
MetaDataDecl gameDecls[] = {
|
||||
// key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd, shouldScrape
|
||||
{"name", MD_STRING, "", false, "name", "enter name", true},
|
||||
{"sortname", MD_STRING, "", false, "sortname", "enter sortname", false},
|
||||
{"desc", MD_MULTILINE_STRING, "", false, "description", "enter description", true},
|
||||
{"rating", MD_RATING, "0", false, "rating", "enter rating", true},
|
||||
{"releasedate", MD_DATE, "19700101T010000", false, "release date", "enter release date", true},
|
||||
{"developer", MD_STRING, "unknown", false, "developer", "enter developer", true},
|
||||
{"publisher", MD_STRING, "unknown", false, "publisher", "enter publisher", true},
|
||||
{"genre", MD_STRING, "unknown", false, "genre", "enter genre", true},
|
||||
{"players", MD_STRING, "unknown", false, "players", "enter number of players", true},
|
||||
{"favorite", MD_BOOL, "false", false, "favorite", "enter favorite off/on", false},
|
||||
{"completed", MD_BOOL, "false", false, "completed", "enter completed off/on", false},
|
||||
{"kidgame", MD_BOOL, "false", false, "kidgame", "enter kidgame off/on", false},
|
||||
{"hidden", MD_BOOL, "false", false, "hidden", "enter hidden off/on", false},
|
||||
{"broken", MD_BOOL, "false", false, "broken/not working", "enter broken off/on", false},
|
||||
{"nogamecount", MD_BOOL, "false", false, "exclude from game counter", "enter don't count as game off/on", false},
|
||||
{"nomultiscrape", MD_BOOL, "false", false, "exclude from multi-scraper", "enter no multi-scrape off/on", false},
|
||||
{"hidemetadata", MD_BOOL, "false", false, "hide metadata fields", "enter hide metadata off/on", false},
|
||||
{"playcount", MD_INT, "0", false, "times played", "enter number of times played", false},
|
||||
{"controller", MD_CONTROLLER, "", false, "controller", "select controller", true},
|
||||
{"altemulator", MD_ALT_EMULATOR, "", false, "alternative emulator", "select alternative emulator", false},
|
||||
{"lastplayed", MD_TIME, "0", true, "last played", "enter last played date", false}
|
||||
};
|
||||
|
||||
MetaDataDecl folderDecls[] = {
|
||||
{"name", MD_STRING, "", false, "name", "enter name", true},
|
||||
{"desc", MD_MULTILINE_STRING, "", false, "description", "enter description", true},
|
||||
{"rating", MD_RATING, "0", false, "rating", "enter rating", true},
|
||||
{"releasedate", MD_DATE, "19700101T010000", false, "release date", "enter release date", true},
|
||||
{"developer", MD_STRING, "unknown", false, "developer", "enter developer", true},
|
||||
{"publisher", MD_STRING, "unknown", false, "publisher", "enter publisher", true},
|
||||
{"genre", MD_STRING, "unknown", false, "genre", "enter genre", true},
|
||||
{"players", MD_STRING, "unknown", false, "players", "enter number of players", true},
|
||||
{"favorite", MD_BOOL, "false", false, "favorite", "enter favorite off/on", false},
|
||||
{"completed", MD_BOOL, "false", false, "completed", "enter completed off/on", false},
|
||||
{"kidgame", MD_BOOL, "false", false, "kidgame (only affects badges)", "enter kidgame off/on", false},
|
||||
{"hidden", MD_BOOL, "false", false, "hidden", "enter hidden off/on", false},
|
||||
{"broken", MD_BOOL, "false", false, "broken/not working", "enter broken off/on", false},
|
||||
{"nomultiscrape", MD_BOOL, "false", false, "exclude from multi-scraper", "enter no multi-scrape off/on", false},
|
||||
{"hidemetadata", MD_BOOL, "false", false, "hide metadata fields", "enter hide metadata off/on", false},
|
||||
{"controller", MD_CONTROLLER, "", false, "controller", "select controller", true},
|
||||
{"lastplayed", MD_TIME, "0", true, "last played", "enter last played date", false}
|
||||
};
|
||||
// clang-format on
|
||||
MetaDataDecl folderDecls[] = {
|
||||
{"name", MD_STRING, "", false, "name", "enter name", true},
|
||||
{"desc", MD_MULTILINE_STRING, "", false, "description", "enter description", true},
|
||||
{"rating", MD_RATING, "0", false, "rating", "enter rating", true},
|
||||
{"releasedate", MD_DATE, "19700101T010000", false, "release date", "enter release date", true},
|
||||
{"developer", MD_STRING, "unknown", false, "developer", "enter developer", true},
|
||||
{"publisher", MD_STRING, "unknown", false, "publisher", "enter publisher", true},
|
||||
{"genre", MD_STRING, "unknown", false, "genre", "enter genre", true},
|
||||
{"players", MD_STRING, "unknown", false, "players", "enter number of players", true},
|
||||
{"favorite", MD_BOOL, "false", false, "favorite", "enter favorite off/on", false},
|
||||
{"completed", MD_BOOL, "false", false, "completed", "enter completed off/on", false},
|
||||
{"kidgame", MD_BOOL, "false", false, "kidgame (only affects badges)", "enter kidgame off/on", false},
|
||||
{"hidden", MD_BOOL, "false", false, "hidden", "enter hidden off/on", false},
|
||||
{"broken", MD_BOOL, "false", false, "broken/not working", "enter broken off/on", false},
|
||||
{"nomultiscrape", MD_BOOL, "false", false, "exclude from multi-scraper", "enter no multi-scrape off/on", false},
|
||||
{"hidemetadata", MD_BOOL, "false", false, "hide metadata fields", "enter hide metadata off/on", false},
|
||||
{"controller", MD_CONTROLLER, "", false, "controller", "select controller", true},
|
||||
{"lastplayed", MD_TIME, "0", true, "last played", "enter last played date", false}
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
const std::vector<MetaDataDecl> gameMDD(gameDecls,
|
||||
gameDecls + sizeof(gameDecls) / sizeof(gameDecls[0]));
|
||||
const std::vector<MetaDataDecl> gameMDD(gameDecls,
|
||||
gameDecls + sizeof(gameDecls) / sizeof(gameDecls[0]));
|
||||
|
||||
const std::vector<MetaDataDecl> folderMDD(folderDecls,
|
||||
folderDecls +
|
||||
sizeof(folderDecls) / sizeof(folderDecls[0]));
|
||||
const std::vector<MetaDataDecl> folderMDD(folderDecls,
|
||||
folderDecls +
|
||||
sizeof(folderDecls) / sizeof(folderDecls[0]));
|
||||
} // namespace
|
||||
|
||||
const std::vector<MetaDataDecl>& getMDDByType(MetaDataListType type)
|
||||
{
|
||||
|
|
|
@ -973,7 +973,7 @@ bool SystemData::createSystemDirectories()
|
|||
return false;
|
||||
}
|
||||
|
||||
bool SystemData::isVisible()
|
||||
const bool SystemData::isVisible() const
|
||||
{
|
||||
// This function doesn't make much sense at the moment; if a system does not have any
|
||||
// games available, it will not be processed during startup and will as such not exist.
|
||||
|
|
|
@ -96,10 +96,10 @@ public:
|
|||
std::string getThemePath() const;
|
||||
|
||||
std::pair<unsigned int, unsigned int> getDisplayedGameCount() const;
|
||||
bool getScrapeFlag() { return mScrapeFlag; }
|
||||
const bool getScrapeFlag() const { return mScrapeFlag; }
|
||||
void setScrapeFlag(bool scrapeflag) { mScrapeFlag = scrapeflag; }
|
||||
|
||||
std::string getAlternativeEmulator() { return mAlternativeEmulator; }
|
||||
const std::string& getAlternativeEmulator() const { return mAlternativeEmulator; }
|
||||
void setAlternativeEmulator(const std::string& command) { mAlternativeEmulator = command; }
|
||||
std::string getLaunchCommandFromLabel(const std::string& label);
|
||||
|
||||
|
@ -122,16 +122,16 @@ public:
|
|||
{
|
||||
return std::find(sSystemVector.crbegin(), sSystemVector.crend(), this);
|
||||
}
|
||||
bool isCollection() { return mIsCollectionSystem; }
|
||||
bool isCustomCollection() { return mIsCustomCollectionSystem; }
|
||||
bool isGroupedCustomCollection() { return mIsGroupedCustomCollectionSystem; }
|
||||
const bool isCollection() const { return mIsCollectionSystem; }
|
||||
const bool isCustomCollection() const { return mIsCustomCollectionSystem; }
|
||||
const bool isGroupedCustomCollection() const { return mIsGroupedCustomCollectionSystem; }
|
||||
void setIsGroupedCustomCollection(bool isGroupedCustom)
|
||||
{
|
||||
mIsGroupedCustomCollectionSystem = isGroupedCustom;
|
||||
};
|
||||
bool isGameSystem() { return mIsGameSystem; }
|
||||
const bool isGameSystem() const { return mIsGameSystem; }
|
||||
|
||||
bool isVisible();
|
||||
const bool isVisible() const;
|
||||
|
||||
static SystemData* getSystemByName(const std::string& systemName);
|
||||
SystemData* getNext() const;
|
||||
|
|
|
@ -111,7 +111,7 @@ void GuiComponent::setOrigin(float x, float y)
|
|||
onOriginChanged();
|
||||
}
|
||||
|
||||
void GuiComponent::setSize(float w, float h)
|
||||
void GuiComponent::setSize(const float w, const float h)
|
||||
{
|
||||
if (mSize.x == w && mSize.y == h)
|
||||
return;
|
||||
|
|
|
@ -88,7 +88,7 @@ public:
|
|||
|
||||
virtual glm::vec2 getSize() const { return mSize; }
|
||||
void setSize(const glm::vec2& size) { setSize(size.x, size.y); }
|
||||
void setSize(float w, float h);
|
||||
void setSize(const float w, const float h);
|
||||
virtual void setResize(float width, float height) {}
|
||||
virtual void onSizeChanged() {}
|
||||
|
||||
|
|
|
@ -22,45 +22,46 @@
|
|||
|
||||
std::vector<GameControllers> BadgeComponent::sGameControllers;
|
||||
|
||||
// clang-format off
|
||||
|
||||
// The "unknown" controller entry has to be placed last.
|
||||
GameControllers sControllerDefinitions [] = {
|
||||
// shortName displayName fileName
|
||||
{"gamepad_generic", "Gamepad (Generic)", ":/graphics/controllers/gamepad_generic.svg"},
|
||||
{"gamepad_nintendo_nes", "Gamepad (Nintendo NES)", ":/graphics/controllers/gamepad_nintendo_nes.svg"},
|
||||
{"gamepad_nintendo_snes", "Gamepad (Nintendo SNES)", ":/graphics/controllers/gamepad_nintendo_snes.svg"},
|
||||
{"gamepad_nintendo_64", "Gamepad (Nintendo 64)", ":/graphics/controllers/gamepad_nintendo_64.svg"},
|
||||
{"gamepad_playstation", "Gamepad (PlayStation)", ":/graphics/controllers/gamepad_playstation.svg"},
|
||||
{"gamepad_sega_md_3_buttons", "Gamepad (Sega Mega Drive/Genesis 3 Buttons)", ":/graphics/controllers/gamepad_sega_md_3_buttons.svg"},
|
||||
{"gamepad_sega_md_6_buttons", "Gamepad (Sega Mega Drive/Genesis 6 Buttons)", ":/graphics/controllers/gamepad_sega_md_6_buttons.svg"},
|
||||
{"gamepad_xbox", "Gamepad (Xbox)", ":/graphics/controllers/gamepad_xbox.svg"},
|
||||
{"joystick_generic", "Joystick (Generic)", ":/graphics/controllers/joystick_generic.svg"},
|
||||
{"joystick_arcade_no_buttons", "Joystick (Arcade No Buttons)", ":/graphics/controllers/joystick_arcade_no_buttons.svg"},
|
||||
{"joystick_arcade_1_button", "Joystick (Arcade 1 Button)", ":/graphics/controllers/joystick_arcade_1_button.svg"},
|
||||
{"joystick_arcade_2_buttons", "Joystick (Arcade 2 Buttons)", ":/graphics/controllers/joystick_arcade_2_buttons.svg"},
|
||||
{"joystick_arcade_3_buttons", "Joystick (Arcade 3 Buttons)", ":/graphics/controllers/joystick_arcade_3_buttons.svg"},
|
||||
{"joystick_arcade_4_buttons", "Joystick (Arcade 4 Buttons)", ":/graphics/controllers/joystick_arcade_4_buttons.svg"},
|
||||
{"joystick_arcade_5_buttons", "Joystick (Arcade 5 Buttons)", ":/graphics/controllers/joystick_arcade_5_buttons.svg"},
|
||||
{"joystick_arcade_6_buttons", "Joystick (Arcade 6 Buttons)", ":/graphics/controllers/joystick_arcade_6_buttons.svg"},
|
||||
{"keyboard_generic", "Keyboard (Generic)", ":/graphics/controllers/keyboard_generic.svg"},
|
||||
{"keyboard_and_mouse_generic", "Keyboard and Mouse (Generic)", ":/graphics/controllers/keyboard_and_mouse_generic.svg"},
|
||||
{"mouse_generic", "Mouse (Generic)", ":/graphics/controllers/mouse_generic.svg"},
|
||||
{"mouse_amiga", "Mouse (Amiga)", ":/graphics/controllers/mouse_amiga.svg"},
|
||||
{"lightgun_generic", "Lightgun (Generic)", ":/graphics/controllers/lightgun_generic.svg"},
|
||||
{"lightgun_nintendo", "Lightgun (Nintendo)", ":/graphics/controllers/lightgun_nintendo.svg"},
|
||||
{"steering_wheel_generic", "Steering Wheel (Generic)", ":/graphics/controllers/steering_wheel_generic.svg"},
|
||||
{"flight_stick_generic", "Flight Stick (Generic)", ":/graphics/controllers/flight_stick_generic.svg"},
|
||||
{"spinner_generic", "Spinner (Generic)", ":/graphics/controllers/spinner_generic.svg"},
|
||||
{"trackball_generic", "Trackball (Generic)", ":/graphics/controllers/trackball_generic.svg"},
|
||||
{"wii_remote_nintendo", "Wii Remote (Nintendo)", ":/graphics/controllers/wii_remote_nintendo.svg"},
|
||||
{"wii_remote_and_nunchuk_nintendo", "Wii Remote and Nunchuk (Nintendo)", ":/graphics/controllers/wii_remote_and_nunchuk_nintendo.svg"},
|
||||
{"joycon_left_or_right_nintendo", "Joy-Con Left or Right (Nintendo)", ":/graphics/controllers/joycon_left_or_right_nintendo.svg"},
|
||||
{"joycon_pair_nintendo", "Joy-Con Pair (Nintendo)", ":/graphics/controllers/joycon_pair_nintendo.svg"},
|
||||
{"unknown", "Unknown Controller", ":/graphics/controllers/unknown.svg"}
|
||||
};
|
||||
|
||||
// clang-format on
|
||||
namespace
|
||||
{
|
||||
// clang-format off
|
||||
// The "unknown" controller entry has to be placed last.
|
||||
GameControllers sControllerDefinitions [] = {
|
||||
// shortName displayName fileName
|
||||
{"gamepad_generic", "Gamepad (Generic)", ":/graphics/controllers/gamepad_generic.svg"},
|
||||
{"gamepad_nintendo_nes", "Gamepad (Nintendo NES)", ":/graphics/controllers/gamepad_nintendo_nes.svg"},
|
||||
{"gamepad_nintendo_snes", "Gamepad (Nintendo SNES)", ":/graphics/controllers/gamepad_nintendo_snes.svg"},
|
||||
{"gamepad_nintendo_64", "Gamepad (Nintendo 64)", ":/graphics/controllers/gamepad_nintendo_64.svg"},
|
||||
{"gamepad_playstation", "Gamepad (PlayStation)", ":/graphics/controllers/gamepad_playstation.svg"},
|
||||
{"gamepad_sega_md_3_buttons", "Gamepad (Sega Mega Drive/Genesis 3 Buttons)", ":/graphics/controllers/gamepad_sega_md_3_buttons.svg"},
|
||||
{"gamepad_sega_md_6_buttons", "Gamepad (Sega Mega Drive/Genesis 6 Buttons)", ":/graphics/controllers/gamepad_sega_md_6_buttons.svg"},
|
||||
{"gamepad_xbox", "Gamepad (Xbox)", ":/graphics/controllers/gamepad_xbox.svg"},
|
||||
{"joystick_generic", "Joystick (Generic)", ":/graphics/controllers/joystick_generic.svg"},
|
||||
{"joystick_arcade_no_buttons", "Joystick (Arcade No Buttons)", ":/graphics/controllers/joystick_arcade_no_buttons.svg"},
|
||||
{"joystick_arcade_1_button", "Joystick (Arcade 1 Button)", ":/graphics/controllers/joystick_arcade_1_button.svg"},
|
||||
{"joystick_arcade_2_buttons", "Joystick (Arcade 2 Buttons)", ":/graphics/controllers/joystick_arcade_2_buttons.svg"},
|
||||
{"joystick_arcade_3_buttons", "Joystick (Arcade 3 Buttons)", ":/graphics/controllers/joystick_arcade_3_buttons.svg"},
|
||||
{"joystick_arcade_4_buttons", "Joystick (Arcade 4 Buttons)", ":/graphics/controllers/joystick_arcade_4_buttons.svg"},
|
||||
{"joystick_arcade_5_buttons", "Joystick (Arcade 5 Buttons)", ":/graphics/controllers/joystick_arcade_5_buttons.svg"},
|
||||
{"joystick_arcade_6_buttons", "Joystick (Arcade 6 Buttons)", ":/graphics/controllers/joystick_arcade_6_buttons.svg"},
|
||||
{"keyboard_generic", "Keyboard (Generic)", ":/graphics/controllers/keyboard_generic.svg"},
|
||||
{"keyboard_and_mouse_generic", "Keyboard and Mouse (Generic)", ":/graphics/controllers/keyboard_and_mouse_generic.svg"},
|
||||
{"mouse_generic", "Mouse (Generic)", ":/graphics/controllers/mouse_generic.svg"},
|
||||
{"mouse_amiga", "Mouse (Amiga)", ":/graphics/controllers/mouse_amiga.svg"},
|
||||
{"lightgun_generic", "Lightgun (Generic)", ":/graphics/controllers/lightgun_generic.svg"},
|
||||
{"lightgun_nintendo", "Lightgun (Nintendo)", ":/graphics/controllers/lightgun_nintendo.svg"},
|
||||
{"steering_wheel_generic", "Steering Wheel (Generic)", ":/graphics/controllers/steering_wheel_generic.svg"},
|
||||
{"flight_stick_generic", "Flight Stick (Generic)", ":/graphics/controllers/flight_stick_generic.svg"},
|
||||
{"spinner_generic", "Spinner (Generic)", ":/graphics/controllers/spinner_generic.svg"},
|
||||
{"trackball_generic", "Trackball (Generic)", ":/graphics/controllers/trackball_generic.svg"},
|
||||
{"wii_remote_nintendo", "Wii Remote (Nintendo)", ":/graphics/controllers/wii_remote_nintendo.svg"},
|
||||
{"wii_remote_and_nunchuk_nintendo", "Wii Remote and Nunchuk (Nintendo)", ":/graphics/controllers/wii_remote_and_nunchuk_nintendo.svg"},
|
||||
{"joycon_left_or_right_nintendo", "Joy-Con Left or Right (Nintendo)", ":/graphics/controllers/joycon_left_or_right_nintendo.svg"},
|
||||
{"joycon_pair_nintendo", "Joy-Con Pair (Nintendo)", ":/graphics/controllers/joycon_pair_nintendo.svg"},
|
||||
{"unknown", "Unknown Controller", ":/graphics/controllers/unknown.svg"}
|
||||
};
|
||||
// clang-format on
|
||||
} // namespace
|
||||
|
||||
BadgeComponent::BadgeComponent(Window* window)
|
||||
: GuiComponent{window}
|
||||
|
@ -81,7 +82,7 @@ void BadgeComponent::populateGameControllers()
|
|||
{
|
||||
sGameControllers.clear();
|
||||
for (auto controller : sControllerDefinitions)
|
||||
sGameControllers.push_back(controller);
|
||||
sGameControllers.emplace_back(controller);
|
||||
}
|
||||
|
||||
void BadgeComponent::setBadges(const std::vector<BadgeInfo>& badges)
|
||||
|
@ -289,7 +290,7 @@ void BadgeComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
|
|||
item.baseImage = badgeImage;
|
||||
item.overlayImage = ImageComponent{mWindow};
|
||||
|
||||
mFlexboxItems.push_back(item);
|
||||
mFlexboxItems.emplace_back(std::move(item));
|
||||
}
|
||||
else {
|
||||
LOG(LogError) << "Invalid badge slot \"" << slot << "\" defined";
|
||||
|
|
|
@ -30,7 +30,7 @@ public:
|
|||
};
|
||||
|
||||
static void populateGameControllers();
|
||||
std::vector<std::string> getBadgeTypes() { return mBadgeTypes; }
|
||||
const std::vector<std::string>& getBadgeTypes() const { return mBadgeTypes; }
|
||||
void setBadges(const std::vector<BadgeInfo>& badges);
|
||||
static const std::vector<GameControllers>& getGameControllers()
|
||||
{
|
||||
|
|
|
@ -164,7 +164,7 @@ void FlexboxComponent::computeLayout()
|
|||
if (mDirection == "row") {
|
||||
for (int y = 0; y < grid.y; y++) {
|
||||
for (int x = 0; x < grid.x; x++) {
|
||||
itemPositions.push_back(
|
||||
itemPositions.emplace_back(
|
||||
glm::vec2{(x * (maxItemSize.x + mItemMargin.x) + alignRightComp),
|
||||
y * (rowHeight + mItemMargin.y)});
|
||||
}
|
||||
|
@ -173,15 +173,15 @@ void FlexboxComponent::computeLayout()
|
|||
else if (mDirection == "column" && !alignRight) {
|
||||
for (int x = 0; x < grid.x; x++) {
|
||||
for (int y = 0; y < grid.y; y++) {
|
||||
itemPositions.push_back(glm::vec2{(x * (maxItemSize.x + mItemMargin.x)),
|
||||
y * (rowHeight + mItemMargin.y)});
|
||||
itemPositions.emplace_back(glm::vec2{(x * (maxItemSize.x + mItemMargin.x)),
|
||||
y * (rowHeight + mItemMargin.y)});
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // Right-aligned.
|
||||
for (int x = 0; x < grid.x; x++) {
|
||||
for (int y = 0; y < grid.y; y++) {
|
||||
itemPositions.push_back(
|
||||
itemPositions.emplace_back(
|
||||
glm::vec2{(mSize.x - (x * (maxItemSize.x + mItemMargin.x)) - maxItemSize.x),
|
||||
y * (rowHeight + mItemMargin.y)});
|
||||
}
|
||||
|
|
|
@ -29,14 +29,14 @@ public:
|
|||
FlexboxComponent(Window* window, std::vector<FlexboxItem>& items);
|
||||
|
||||
// Getters/setters for the layout.
|
||||
std::string getDirection() const { return mDirection; }
|
||||
const std::string& getDirection() const { return mDirection; }
|
||||
void setDirection(const std::string& direction)
|
||||
{
|
||||
assert(direction == "row" || direction == "column");
|
||||
mDirection = direction;
|
||||
}
|
||||
|
||||
std::string getAlignment() const { return mAlignment; }
|
||||
const std::string& getAlignment() const { return mAlignment; }
|
||||
void setAlignment(const std::string& value)
|
||||
{
|
||||
assert(value == "left" || value == "right");
|
||||
|
@ -58,7 +58,7 @@ public:
|
|||
mLayoutValid = false;
|
||||
}
|
||||
|
||||
std::string getItemPlacement() const { return mItemPlacement; }
|
||||
const std::string& getItemPlacement() const { return mItemPlacement; }
|
||||
void setItemPlacement(const std::string& value)
|
||||
{
|
||||
assert(value == "start" || value == "center" || value == "end" || value == "stretch");
|
||||
|
@ -66,10 +66,10 @@ public:
|
|||
mLayoutValid = false;
|
||||
}
|
||||
|
||||
glm::vec2 getItemMargin() const { return mItemMargin; }
|
||||
const glm::vec2& getItemMargin() const { return mItemMargin; }
|
||||
void setItemMargin(glm::vec2 value);
|
||||
|
||||
glm::vec2 getOverlayPosition() const { return mOverlayPosition; }
|
||||
const glm::vec2& getOverlayPosition() const { return mOverlayPosition; }
|
||||
void setOverlayPosition(glm::vec2 position) { mOverlayPosition = position; }
|
||||
|
||||
float getOverlaySize() const { return mOverlaySize; }
|
||||
|
|
|
@ -132,7 +132,7 @@ void ImageComponent::resize()
|
|||
onSizeChanged();
|
||||
}
|
||||
|
||||
void ImageComponent::setImage(std::string path, bool tile, bool linearMagnify)
|
||||
void ImageComponent::setImage(const std::string& path, bool tile, bool linearMagnify)
|
||||
{
|
||||
// Always load bundled graphic resources statically, unless mForceLoad has been set.
|
||||
// This eliminates annoying texture pop-in problems that would otherwise occur.
|
||||
|
@ -179,7 +179,7 @@ void ImageComponent::setResize(float width, float height)
|
|||
resize();
|
||||
}
|
||||
|
||||
void ImageComponent::setMaxSize(float width, float height)
|
||||
void ImageComponent::setMaxSize(const float width, const float height)
|
||||
{
|
||||
mTargetSize = glm::vec2{width, height};
|
||||
mTargetIsMax = true;
|
||||
|
@ -187,7 +187,7 @@ void ImageComponent::setMaxSize(float width, float height)
|
|||
resize();
|
||||
}
|
||||
|
||||
void ImageComponent::setMinSize(float width, float height)
|
||||
void ImageComponent::setMinSize(const float width, const float height)
|
||||
{
|
||||
mTargetSize = glm::vec2{width, height};
|
||||
mTargetIsMax = false;
|
||||
|
@ -195,31 +195,31 @@ void ImageComponent::setMinSize(float width, float height)
|
|||
resize();
|
||||
}
|
||||
|
||||
void ImageComponent::cropLeft(float percent)
|
||||
void ImageComponent::cropLeft(const float percent)
|
||||
{
|
||||
assert(percent >= 0.0f && percent <= 1.0f);
|
||||
mTopLeftCrop.x = percent;
|
||||
}
|
||||
|
||||
void ImageComponent::cropTop(float percent)
|
||||
void ImageComponent::cropTop(const float percent)
|
||||
{
|
||||
assert(percent >= 0.0f && percent <= 1.0f);
|
||||
mTopLeftCrop.y = percent;
|
||||
}
|
||||
|
||||
void ImageComponent::cropRight(float percent)
|
||||
void ImageComponent::cropRight(const float percent)
|
||||
{
|
||||
assert(percent >= 0.0f && percent <= 1.0f);
|
||||
mBottomRightCrop.x = 1.0f - percent;
|
||||
}
|
||||
|
||||
void ImageComponent::cropBot(float percent)
|
||||
void ImageComponent::cropBot(const float percent)
|
||||
{
|
||||
assert(percent >= 0.0f && percent <= 1.0f);
|
||||
mBottomRightCrop.y = 1.0f - percent;
|
||||
}
|
||||
|
||||
void ImageComponent::crop(float left, float top, float right, float bot)
|
||||
void ImageComponent::crop(const float left, const float top, const float right, const float bot)
|
||||
{
|
||||
cropLeft(left);
|
||||
cropTop(top);
|
||||
|
@ -233,7 +233,7 @@ void ImageComponent::uncrop()
|
|||
crop(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
|
||||
void ImageComponent::cropTransparentPadding(float maxSizeX, float maxSizeY)
|
||||
void ImageComponent::cropTransparentPadding(const float maxSizeX, const float maxSizeY)
|
||||
{
|
||||
if (mSize == glm::vec2{})
|
||||
return;
|
||||
|
|
|
@ -20,11 +20,11 @@ public:
|
|||
ImageComponent(Window* window, bool forceLoad = false, bool dynamic = true);
|
||||
virtual ~ImageComponent() {}
|
||||
|
||||
void setDefaultImage(std::string path) { mDefaultPath = path; }
|
||||
void setDefaultImage(const std::string& path) { mDefaultPath = path; }
|
||||
|
||||
// Loads the image at the given filepath. Will tile if tile is true (retrieves texture
|
||||
// as tiling, creates vertices accordingly).
|
||||
void setImage(std::string path, bool tile = false, bool linearMagnify = false);
|
||||
void setImage(const std::string& path, bool tile = false, bool linearMagnify = false);
|
||||
// Loads an image from memory.
|
||||
void setImage(const char* data, size_t length, bool tile = false);
|
||||
// Use an already existing texture.
|
||||
|
@ -37,32 +37,32 @@ public:
|
|||
// zero, don't do any resizing.
|
||||
// Can be set before or after an image is loaded.
|
||||
// setMaxSize() and setResize() are mutually exclusive.
|
||||
void setResize(float width, float height) override;
|
||||
void setResize(const float width, const float height) override;
|
||||
void setResize(const glm::vec2& size) { setResize(size.x, size.y); }
|
||||
|
||||
// Resize the image to be as large as possible but fit within a box of this size.
|
||||
// Can be set before or after an image is loaded.
|
||||
// Never breaks the aspect ratio. setMaxSize() and setResize() are mutually exclusive.
|
||||
void setMaxSize(float width, float height);
|
||||
void setMaxSize(const float width, const float height);
|
||||
void setMaxSize(const glm::vec2& size) { setMaxSize(size.x, size.y); }
|
||||
|
||||
void setMinSize(float width, float height);
|
||||
void setMinSize(const float width, const float height);
|
||||
void setMinSize(const glm::vec2& size) { setMinSize(size.x, size.y); }
|
||||
|
||||
glm::vec2 getRotationSize() const override { return mRotateByTargetSize ? mTargetSize : mSize; }
|
||||
|
||||
// Applied AFTER image positioning and sizing.
|
||||
// cropTop(0.2) will crop 20% of the top of the image.
|
||||
void cropLeft(float percent);
|
||||
void cropTop(float percent);
|
||||
void cropRight(float percent);
|
||||
void cropBot(float percent);
|
||||
void crop(float left, float top, float right, float bot);
|
||||
void cropLeft(const float percent);
|
||||
void cropTop(const float percent);
|
||||
void cropRight(const float percent);
|
||||
void cropBot(const float percent);
|
||||
void crop(const float left, const float top, const float right, const float bot);
|
||||
void uncrop();
|
||||
|
||||
// This crops any entirely transparent areas around the actual image.
|
||||
// The arguments restrict how much the end result is allowed to be scaled.
|
||||
void cropTransparentPadding(float maxSizeX, float maxSizeY);
|
||||
void cropTransparentPadding(const float maxSizeX, const float maxSizeY);
|
||||
|
||||
// Multiply all pixels in the image by this color when rendering.
|
||||
void setColorShift(unsigned int color) override;
|
||||
|
|
|
@ -695,7 +695,7 @@ void VideoFFmpegComponent::getProcessedFrames()
|
|||
currFrame.frameRGBA.begin(), std::make_move_iterator(&mVideoFrameResampled->data[0][0]),
|
||||
std::make_move_iterator(&mVideoFrameResampled->data[0][bufferSize]));
|
||||
|
||||
mVideoFrameQueue.push(std::move(currFrame));
|
||||
mVideoFrameQueue.emplace(std::move(currFrame));
|
||||
av_frame_unref(mVideoFrameResampled);
|
||||
}
|
||||
|
||||
|
@ -723,7 +723,7 @@ void VideoFFmpegComponent::getProcessedFrames()
|
|||
&mAudioFrameResampled->data[0][0],
|
||||
&mAudioFrameResampled->data[0][bufferSize]);
|
||||
|
||||
mAudioFrameQueue.push(std::move(currFrame));
|
||||
mAudioFrameQueue.emplace(std::move(currFrame));
|
||||
av_frame_unref(mAudioFrameResampled);
|
||||
}
|
||||
}
|
||||
|
@ -883,18 +883,19 @@ void VideoFFmpegComponent::calculateBlackRectangle()
|
|||
rectHeight = mSize.y;
|
||||
}
|
||||
// Populate the rectangle coordinates to be used in render().
|
||||
mVideoRectangleCoords.push_back(std::round(mVideoAreaPos.x - rectWidth * mOrigin.x));
|
||||
mVideoRectangleCoords.push_back(std::round(mVideoAreaPos.y - rectHeight * mOrigin.y));
|
||||
mVideoRectangleCoords.push_back(std::round(rectWidth));
|
||||
mVideoRectangleCoords.push_back(std::round(rectHeight));
|
||||
mVideoRectangleCoords.emplace_back(std::round(mVideoAreaPos.x - rectWidth * mOrigin.x));
|
||||
mVideoRectangleCoords.emplace_back(
|
||||
std::round(mVideoAreaPos.y - rectHeight * mOrigin.y));
|
||||
mVideoRectangleCoords.emplace_back(std::round(rectWidth));
|
||||
mVideoRectangleCoords.emplace_back(std::round(rectHeight));
|
||||
}
|
||||
// If the option to display pillarboxes is disabled, then make the rectangle equivalent
|
||||
// to the size of the video.
|
||||
else {
|
||||
mVideoRectangleCoords.push_back(std::round(mPosition.x - mSize.x * mOrigin.x));
|
||||
mVideoRectangleCoords.push_back(std::round(mPosition.y - mSize.y * mOrigin.y));
|
||||
mVideoRectangleCoords.push_back(std::round(mSize.x));
|
||||
mVideoRectangleCoords.push_back(std::round(mSize.y));
|
||||
mVideoRectangleCoords.emplace_back(std::round(mPosition.x - mSize.x * mOrigin.x));
|
||||
mVideoRectangleCoords.emplace_back(std::round(mPosition.y - mSize.y * mOrigin.y));
|
||||
mVideoRectangleCoords.emplace_back(std::round(mSize.x));
|
||||
mVideoRectangleCoords.emplace_back(std::round(mSize.y));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -505,7 +505,7 @@ namespace Renderer
|
|||
drawTriangleStrips(vertices, 4, trans, srcBlendFactor, dstBlendFactor);
|
||||
}
|
||||
|
||||
unsigned int convertRGBAToABGR(const unsigned int _color)
|
||||
const unsigned int convertRGBAToABGR(const unsigned int _color)
|
||||
{
|
||||
unsigned char red = ((_color & 0xff000000) >> 24) & 255;
|
||||
unsigned char green = ((_color & 0x00ff0000) >> 16) & 255;
|
||||
|
@ -515,7 +515,7 @@ namespace Renderer
|
|||
return alpha << 24 | blue << 16 | green << 8 | red;
|
||||
}
|
||||
|
||||
unsigned int convertABGRToRGBA(const unsigned int _color)
|
||||
const unsigned int convertABGRToRGBA(const unsigned int _color)
|
||||
{
|
||||
unsigned char alpha = ((_color & 0xff000000) >> 24) & 255;
|
||||
unsigned char blue = ((_color & 0x00ff0000) >> 16) & 255;
|
||||
|
@ -542,17 +542,17 @@ namespace Renderer
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
const glm::mat4 getProjectionMatrix() { return mProjectionMatrix; }
|
||||
const glm::mat4& getProjectionMatrix() { return mProjectionMatrix; }
|
||||
SDL_Window* getSDLWindow() { return sdlWindow; }
|
||||
int getWindowWidth() { return windowWidth; }
|
||||
int getWindowHeight() { return windowHeight; }
|
||||
int getScreenWidth() { return screenWidth; }
|
||||
int getScreenHeight() { return screenHeight; }
|
||||
int getScreenOffsetX() { return screenOffsetX; }
|
||||
int getScreenOffsetY() { return screenOffsetY; }
|
||||
int getScreenRotate() { return screenRotate; }
|
||||
float getScreenWidthModifier() { return screenWidthModifier; }
|
||||
float getScreenHeightModifier() { return screenHeightModifier; }
|
||||
float getScreenAspectRatio() { return screenAspectRatio; }
|
||||
const int getWindowWidth() { return windowWidth; }
|
||||
const int getWindowHeight() { return windowHeight; }
|
||||
const int getScreenWidth() { return screenWidth; }
|
||||
const int getScreenHeight() { return screenHeight; }
|
||||
const int getScreenOffsetX() { return screenOffsetX; }
|
||||
const int getScreenOffsetY() { return screenOffsetY; }
|
||||
const int getScreenRotate() { return screenRotate; }
|
||||
const float getScreenWidthModifier() { return screenWidthModifier; }
|
||||
const float getScreenHeightModifier() { return screenHeightModifier; }
|
||||
const float getScreenAspectRatio() { return screenAspectRatio; }
|
||||
|
||||
} // namespace Renderer
|
||||
|
|
|
@ -144,23 +144,23 @@ namespace Renderer
|
|||
const Blend::Factor srcBlendFactor = Blend::SRC_ALPHA,
|
||||
const Blend::Factor dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA);
|
||||
SDL_Window* getSDLWindow();
|
||||
int getWindowWidth();
|
||||
int getWindowHeight();
|
||||
int getScreenWidth();
|
||||
int getScreenHeight();
|
||||
int getScreenOffsetX();
|
||||
int getScreenOffsetY();
|
||||
int getScreenRotate();
|
||||
float getScreenWidthModifier();
|
||||
float getScreenHeightModifier();
|
||||
float getScreenAspectRatio();
|
||||
const int getWindowWidth();
|
||||
const int getWindowHeight();
|
||||
const int getScreenWidth();
|
||||
const int getScreenHeight();
|
||||
const int getScreenOffsetX();
|
||||
const int getScreenOffsetY();
|
||||
const int getScreenRotate();
|
||||
const float getScreenWidthModifier();
|
||||
const float getScreenHeightModifier();
|
||||
const float getScreenAspectRatio();
|
||||
|
||||
unsigned int convertRGBAToABGR(unsigned int color);
|
||||
unsigned int convertABGRToRGBA(unsigned int color);
|
||||
const unsigned int convertRGBAToABGR(const unsigned int color);
|
||||
const unsigned int convertABGRToRGBA(const unsigned int color);
|
||||
|
||||
Shader* getShaderProgram(unsigned int shaderID);
|
||||
const glm::mat4 getProjectionMatrix();
|
||||
void shaderPostprocessing(unsigned int shaders,
|
||||
const glm::mat4& getProjectionMatrix();
|
||||
void shaderPostprocessing(const unsigned int shaders,
|
||||
const Renderer::shaderParameters& parameters = shaderParameters(),
|
||||
unsigned char* textureRGBA = nullptr);
|
||||
|
||||
|
@ -180,7 +180,7 @@ namespace Renderer
|
|||
void updateTexture(const unsigned int texture,
|
||||
const Texture::Type type,
|
||||
const unsigned int x,
|
||||
const unsigned y,
|
||||
const unsigned int y,
|
||||
const unsigned int width,
|
||||
const unsigned int height,
|
||||
void* data);
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace Renderer
|
|||
static SDL_GLContext sdlContext = nullptr;
|
||||
static GLuint whiteTexture = 0;
|
||||
|
||||
static GLenum convertBlendFactor(const Blend::Factor _blendFactor)
|
||||
inline GLenum convertBlendFactor(const Blend::Factor _blendFactor)
|
||||
{
|
||||
// clang-format off
|
||||
switch (_blendFactor) {
|
||||
|
@ -36,7 +36,7 @@ namespace Renderer
|
|||
// clang-format on
|
||||
}
|
||||
|
||||
static GLenum convertTextureType(const Texture::Type _type)
|
||||
inline GLenum convertTextureType(const Texture::Type _type)
|
||||
{
|
||||
// clang-format off
|
||||
switch (_type) {
|
||||
|
@ -203,7 +203,7 @@ namespace Renderer
|
|||
void updateTexture(const unsigned int texture,
|
||||
const Texture::Type type,
|
||||
const unsigned int x,
|
||||
const unsigned y,
|
||||
const unsigned int y,
|
||||
const unsigned int width,
|
||||
const unsigned int height,
|
||||
void* data)
|
||||
|
@ -246,8 +246,8 @@ namespace Renderer
|
|||
const Blend::Factor dstBlendFactor,
|
||||
const shaderParameters& parameters)
|
||||
{
|
||||
float width = vertices[3].pos[0];
|
||||
float height = vertices[3].pos[1];
|
||||
const float width = vertices[3].pos[0];
|
||||
const float height = vertices[3].pos[1];
|
||||
|
||||
GL_CHECK_ERROR(glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].pos));
|
||||
GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].tex));
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace Renderer
|
|||
static SDL_GLContext sdlContext = nullptr;
|
||||
static GLuint whiteTexture = 0;
|
||||
|
||||
static GLenum convertBlendFactor(const Blend::Factor _blendFactor)
|
||||
inline GLenum convertBlendFactor(const Blend::Factor _blendFactor)
|
||||
{
|
||||
// clang-format off
|
||||
switch (_blendFactor) {
|
||||
|
@ -39,7 +39,7 @@ namespace Renderer
|
|||
// clang-format on
|
||||
}
|
||||
|
||||
static GLenum convertTextureType(const Texture::Type _type)
|
||||
inline GLenum convertTextureType(const Texture::Type _type)
|
||||
{
|
||||
// clang-format off
|
||||
switch (_type) {
|
||||
|
@ -148,7 +148,7 @@ namespace Renderer
|
|||
void updateTexture(const unsigned int texture,
|
||||
const Texture::Type type,
|
||||
const unsigned int x,
|
||||
const unsigned y,
|
||||
const unsigned int y,
|
||||
const unsigned int width,
|
||||
const unsigned int height,
|
||||
void* data)
|
||||
|
|
Loading…
Reference in a new issue