[Scummvm-git-logs] scummvm master -> 4b53b4f1aa1578a9fe5da34d86968856b5b4eef8

sev- noreply at scummvm.org
Mon Mar 20 18:26:55 UTC 2023


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
83b2ce00d7 GUI: Display titles in alternate color if unreachable
4b53b4f1aa GUI: Darken thumbnails of invalid entries


Commit: 83b2ce00d7b8053e8f40ff884ff3acf1d5e645a2
    https://github.com/scummvm/scummvm/commit/83b2ce00d7b8053e8f40ff884ff3acf1d5e645a2
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-03-20T19:26:44+01:00

Commit Message:
GUI: Display titles in alternate color if unreachable

Changed paths:
    gui/launcher.cpp
    gui/widgets/grid.cpp
    gui/widgets/grid.h


diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index fb1a0dec175..ab7b83c00e4 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -1520,11 +1520,14 @@ void LauncherGrid::updateListing() {
 		Common::String language = "XX";
 		Common::String platform;
 		Common::String extra;
+		Common::String path;
+		bool valid_path = false;
 		iter->domain->tryGetVal("engineid", engineid);
 		iter->domain->tryGetVal("language", language);
 		iter->domain->tryGetVal("platform", platform);
 		iter->domain->tryGetVal("extra", extra);
-		gridList.push_back(GridItemInfo(k++, engineid, gameid, iter->title, iter->description, extra, Common::parseLanguage(language), Common::parsePlatform(platform)));
+		valid_path = (!iter->domain->tryGetVal("path", path) || !Common::FSNode(path).isDirectory()) ? false : true;
+		gridList.push_back(GridItemInfo(k++, engineid, gameid, iter->title, iter->description, extra, Common::parseLanguage(language), Common::parsePlatform(platform), valid_path));
 		_domains.push_back(iter->key);
 	}
 
diff --git a/gui/widgets/grid.cpp b/gui/widgets/grid.cpp
index 3457212e5ed..77efe1d89b9 100644
--- a/gui/widgets/grid.cpp
+++ b/gui/widgets/grid.cpp
@@ -154,9 +154,13 @@ void GridItemWidget::drawWidget() {
 				titleLines[1].deleteLastChar();
 			titleLines[1] += Common::U32String("...");
 		}
+		// Display text in alternate color if the path is unreachable
+		// Should be ok using kStateDisabled, but the list widget uses FontColorAlternate so let's stick to that
+		GUI::ThemeEngine::FontColor color = _activeEntry->validEntry ? GUI::ThemeEngine::kFontColorNormal : GUI::ThemeEngine::kFontColorAlternate;
 		Common::Rect r(_x, _y + thumbHeight, _x + thumbWidth, _y + thumbHeight + kLineHeight);
 		for (uint k = 0; k < MIN(2U, titleLines.size()); ++k) {
-			g_gui.theme()->drawText(r, titleLines[k], GUI::ThemeEngine::kStateEnabled, Graphics::kTextAlignCenter);
+			g_gui.theme()->drawText(r, titleLines[k], GUI::ThemeEngine::kStateEnabled, Graphics::kTextAlignCenter, GUI::ThemeEngine::kTextInversionNone,
+									0, true, ThemeEngine::kFontStyleBold, color);
 			r.translate(0, kLineHeight);
 		}
 	}
diff --git a/gui/widgets/grid.h b/gui/widgets/grid.h
index 232760fb1bd..087e32d482c 100644
--- a/gui/widgets/grid.h
+++ b/gui/widgets/grid.h
@@ -48,7 +48,7 @@ enum {
 
 /* GridItemInfo */
 struct GridItemInfo {
-	bool		isHeader;
+	bool		isHeader, validEntry;
 	int 		entryID;
 	Common::String 		engineid;
 	Common::String 		gameid;
@@ -64,13 +64,13 @@ struct GridItemInfo {
 	int32				x, y, w, h;
 
 	GridItemInfo(int id, const Common::String &eid, const Common::String &gid, const Common::String &t,
-		const Common::String &d, const Common::String &e, Common::Language l, Common::Platform p)
-		: entryID(id), gameid(gid), engineid(eid), title(t), description(d), extra(e), language(l), platform(p), isHeader(false) {
+		const Common::String &d, const Common::String &e, Common::Language l, Common::Platform p, bool v)
+		: entryID(id), gameid(gid), engineid(eid), title(t), description(d), extra(e), language(l), platform(p), validEntry(v), isHeader(false) {
 		thumbPath = Common::String::format("icons/%s-%s.png", engineid.c_str(), gameid.c_str());
 	}
 
 	GridItemInfo(const Common::String &groupHeader, int groupID) : title(groupHeader), description(groupHeader),
-		isHeader(true), entryID(groupID), language(Common::UNK_LANG), platform(Common::kPlatformUnknown) {
+		isHeader(true), validEntry(true), entryID(groupID), language(Common::UNK_LANG), platform(Common::kPlatformUnknown) {
 		thumbPath = Common::String("");
 	}
 };


Commit: 4b53b4f1aa1578a9fe5da34d86968856b5b4eef8
    https://github.com/scummvm/scummvm/commit/4b53b4f1aa1578a9fe5da34d86968856b5b4eef8
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2023-03-20T19:26:44+01:00

Commit Message:
GUI: Darken thumbnails of invalid entries

Applies a dark transparent overlay to the
games that are non-startable

Changed paths:
    gui/widgets/grid.cpp
    gui/widgets/grid.h


diff --git a/gui/widgets/grid.cpp b/gui/widgets/grid.cpp
index 77efe1d89b9..91031f12be7 100644
--- a/gui/widgets/grid.cpp
+++ b/gui/widgets/grid.cpp
@@ -145,6 +145,17 @@ void GridItemWidget::drawWidget() {
 		g_gui.theme()->drawSurface(p, *demoGfx, true);
 	}
 
+	bool validEntry = _activeEntry->validEntry;
+
+	// Darken thumbnail if path is unreachable
+	if (!validEntry) {
+		const Graphics::ManagedSurface *darkenGfx = _grid->disabledThumbnail();
+		if (darkenGfx) {
+			Common::Point p(_x, _y);
+			g_gui.theme()->drawSurface(p, *darkenGfx, true);
+		}
+	}
+
 	// Draw Title
 	if (_grid->_isTitlesVisible) {
 		// TODO: Currently title is fixed to two lines at all times, we may want
@@ -156,7 +167,7 @@ void GridItemWidget::drawWidget() {
 		}
 		// Display text in alternate color if the path is unreachable
 		// Should be ok using kStateDisabled, but the list widget uses FontColorAlternate so let's stick to that
-		GUI::ThemeEngine::FontColor color = _activeEntry->validEntry ? GUI::ThemeEngine::kFontColorNormal : GUI::ThemeEngine::kFontColorAlternate;
+		GUI::ThemeEngine::FontColor color = validEntry ? GUI::ThemeEngine::kFontColorNormal : GUI::ThemeEngine::kFontColorAlternate;
 		Common::Rect r(_x, _y + thumbHeight, _x + thumbWidth, _y + thumbHeight + kLineHeight);
 		for (uint k = 0; k < MIN(2U, titleLines.size()); ++k) {
 			g_gui.theme()->drawText(r, titleLines[k], GUI::ThemeEngine::kStateEnabled, Graphics::kTextAlignCenter, GUI::ThemeEngine::kTextInversionNone,
@@ -354,6 +365,8 @@ GridWidget::GridWidget(GuiObject *boss, const Common::String &name)
 	_platformIconWidth = 0;
 	_extraIconHeight = 0;
 	_extraIconWidth = 0;
+	_disabledIconOverlay = nullptr;
+
 	_minGridXSpacing = 0;
 	_minGridYSpacing = 0;
 	_isTitlesVisible = 0;
@@ -392,6 +405,7 @@ GridWidget::~GridWidget() {
 	unloadSurfaces(_languageIcons);
 	unloadSurfaces(_extraIcons);
 	unloadSurfaces(_loadedSurfaces);
+	delete _disabledIconOverlay;
 	_gridItems.clear();
 	_dataEntryList.clear();
 	_headerEntryList.clear();
@@ -431,6 +445,10 @@ const Graphics::ManagedSurface *GridWidget::demoToSurface(const Common::String e
 	return _extraIcons[0];
 }
 
+const Graphics::ManagedSurface *GridWidget::disabledThumbnail() {
+	return _disabledIconOverlay;
+}
+
 void GridWidget::setEntryList(Common::Array<GridItemInfo> *list) {
 	_dataEntryList.clear();
 	_headerEntryList.clear();
@@ -952,10 +970,20 @@ void GridWidget::reflowLayout() {
 		unloadSurfaces(_platformIcons);
 		unloadSurfaces(_languageIcons);
 		unloadSurfaces(_loadedSurfaces);
+		if (_disabledIconOverlay)
+			_disabledIconOverlay->free();
 		reloadThumbnails();
 		loadFlagIcons();
 		loadPlatformIcons();
 		loadExtraIcons();
+
+		Graphics::ManagedSurface *gfx = new Graphics::ManagedSurface(_thumbnailWidth, _thumbnailHeight, g_system->getOverlayFormat());
+		uint32 disabledThumbnailColor = gfx->format.ARGBToColor(153, 0, 0, 0);  // 60% opacity black
+		gfx->fillRect(Common::Rect(0, 0, _thumbnailWidth, _thumbnailHeight), disabledThumbnailColor);
+		if (gfx)
+			_disabledIconOverlay = gfx;
+		else
+			_disabledIconOverlay = nullptr;
 	}
 
 	_trayHeight = kLineHeight * 3;
diff --git a/gui/widgets/grid.h b/gui/widgets/grid.h
index 087e32d482c..98d47339a8a 100644
--- a/gui/widgets/grid.h
+++ b/gui/widgets/grid.h
@@ -101,7 +101,7 @@ protected:
 	Common::HashMap<int, const Graphics::ManagedSurface *> _platformIcons;
 	Common::HashMap<int, const Graphics::ManagedSurface *> _languageIcons;
 	Common::HashMap<int, const Graphics::ManagedSurface *> _extraIcons;
-
+	Graphics::ManagedSurface *_disabledIconOverlay;
 	// Images are mapped by filename -> surface.
 	Common::HashMap<Common::String, const Graphics::ManagedSurface *> _loadedSurfaces;
 
@@ -174,6 +174,7 @@ public:
 	const Graphics::ManagedSurface *languageToSurface(Common::Language languageCode);
 	const Graphics::ManagedSurface *platformToSurface(Common::Platform platformCode);
 	const Graphics::ManagedSurface *demoToSurface(const Common::String extraString);
+	const Graphics::ManagedSurface *disabledThumbnail();
 
 	/// Update _visibleEntries from _allEntries and returns true if reload is required.
 	bool calcVisibleEntries();




More information about the Scummvm-git-logs mailing list