[Scummvm-git-logs] scummvm master -> f428b2a12fe407f3becbde9e1b58d673d43206fe

bluegr noreply at scummvm.org
Fri Aug 26 22:15:23 UTC 2022


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

Summary:
f428b2a12f GUI: Add overlay to show demo status on thumbnails


Commit: f428b2a12fe407f3becbde9e1b58d673d43206fe
    https://github.com/scummvm/scummvm/commit/f428b2a12fe407f3becbde9e1b58d673d43206fe
Author: Walter Agazzi (walter.agazzi at protonmail.com)
Date: 2022-08-27T01:15:19+03:00

Commit Message:
GUI: Add overlay to show demo status on thumbnails

Changed paths:
    gui/launcher.cpp
    gui/themes/gui-icons.dat
    gui/widgets/grid.cpp
    gui/widgets/grid.h


diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index 6a6003dd5a8..bbebffa2a75 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -1547,11 +1547,13 @@ void LauncherGrid::updateListing() {
 		Common::String engineid = "UNK";
 		Common::String language = "XX";
 		Common::String platform;
+		Common::String extra;
 		iter->domain->tryGetVal("engineid", engineid);
 		iter->domain->tryGetVal("language", language);
 		iter->domain->tryGetVal("platform", platform);
+		iter->domain->tryGetVal("extra", extra);
 		attrs.push_back(iter->domain);
-		gridList.push_back(GridItemInfo(k++, engineid, gameid, iter->title, iter->description, Common::parseLanguage(language), Common::parsePlatform(platform)));
+		gridList.push_back(GridItemInfo(k++, engineid, gameid, iter->title, iter->description, extra, Common::parseLanguage(language), Common::parsePlatform(platform)));
 	}
 
 	const int oldSel = _grid->getSelected();
diff --git a/gui/themes/gui-icons.dat b/gui/themes/gui-icons.dat
index fc0ac2ec299..a6cbacc4776 100644
Binary files a/gui/themes/gui-icons.dat and b/gui/themes/gui-icons.dat differ
diff --git a/gui/widgets/grid.cpp b/gui/widgets/grid.cpp
index db5b8acc92e..482748b432c 100644
--- a/gui/widgets/grid.cpp
+++ b/gui/widgets/grid.cpp
@@ -136,6 +136,13 @@ void GridItemWidget::drawWidget() {
 		g_gui.theme()->drawSurface(p, *flagGfx, true);
 	}
 
+	// Draw Demo Overlay
+	const Graphics::ManagedSurface *demoGfx = _grid->demoToSurface(_activeEntry->extra);
+	if (demoGfx) {
+		Common::Point p(_x + ((thumbWidth - demoGfx->w)/2) , _y + (thumbHeight - demoGfx->h - 10));
+		g_gui.theme()->drawSurface(p, *demoGfx, true);
+	}
+
 	// Draw Title
 	if (_grid->_isTitlesVisible) {
 		// TODO: Currently title is fixed to two lines at all times, we may want
@@ -345,6 +352,8 @@ GridWidget::GridWidget(GuiObject *boss, const Common::String &name)
 	_flagIconWidth = 0;
 	_platformIconHeight = 0;
 	_platformIconWidth = 0;
+	_extraIconHeight = 0;
+	_extraIconWidth = 0;
 	_minGridXSpacing = 0;
 	_minGridYSpacing = 0;
 	_isTitlesVisible = 0;
@@ -381,6 +390,7 @@ GridWidget::GridWidget(GuiObject *boss, const Common::String &name)
 GridWidget::~GridWidget() {
 	unloadSurfaces(_platformIcons);
 	unloadSurfaces(_languageIcons);
+	unloadSurfaces(_extraIcons);
 	unloadSurfaces(_loadedSurfaces);
 	_gridItems.clear();
 	_dataEntryList.clear();
@@ -415,6 +425,12 @@ const Graphics::ManagedSurface *GridWidget::platformToSurface(Common::Platform p
 	return _platformIcons[platformCode];
 }
 
+const Graphics::ManagedSurface *GridWidget::demoToSurface(const Common::String extraString) {
+	if (! extraString.contains("Demo") )
+		return nullptr;
+	return _extraIcons[0];
+}
+
 void GridWidget::setEntryList(Common::Array<GridItemInfo> *list) {
 	_dataEntryList.clear();
 	_headerEntryList.clear();
@@ -671,6 +687,21 @@ void GridWidget::loadPlatformIcons() {
 	}
 }
 
+void GridWidget::loadExtraIcons() {  // for now only the demo icon is available
+	Graphics::ManagedSurface *gfx = loadSurfaceFromFile("icons/extra/demo.png");
+	if (gfx) {
+		const Graphics::ManagedSurface *scGfx = scaleGfx(gfx, _extraIconWidth, _extraIconHeight, true);
+		_extraIcons[0] = scGfx;
+		if (gfx != scGfx) {
+			gfx->free();
+			delete gfx;
+		}
+	} else {
+		_extraIcons[0] = nullptr;
+	}
+	
+}
+
 void GridWidget::destroyItems() {
 	for (Common::Array<GridItemWidget *>::iterator i = _gridItems.begin(), end = _gridItems.end(); i != end; ++i) {
 		removeWidget((*i));
@@ -889,6 +920,8 @@ void GridWidget::reflowLayout() {
 	_flagIconWidth = _thumbnailWidth / 4;
 	_flagIconHeight = _flagIconWidth / 2;
 	_platformIconHeight = _platformIconWidth = _thumbnailWidth / 6;
+	_extraIconWidth = _thumbnailWidth / 2;
+	_extraIconHeight = _extraIconWidth / 4;
 
 	if ((oldThumbnailHeight != _thumbnailHeight) || (oldThumbnailWidth != _thumbnailWidth)) {
 		unloadSurfaces(_platformIcons);
@@ -897,6 +930,7 @@ void GridWidget::reflowLayout() {
 		reloadThumbnails();
 		loadFlagIcons();
 		loadPlatformIcons();
+		loadExtraIcons();
 	}
 
 	_trayHeight = kLineHeight * 3;
diff --git a/gui/widgets/grid.h b/gui/widgets/grid.h
index f91ff3f52a2..657041a31ea 100644
--- a/gui/widgets/grid.h
+++ b/gui/widgets/grid.h
@@ -54,6 +54,7 @@ struct GridItemInfo {
 	Common::String 		gameid;
 	Common::String 		title;
 	Common::String		description;
+	Common::String		extra;
 	Common::String 		thumbPath;
 	// Generic attribute value, may be any piece of metadata
 	Common::String		attribute;
@@ -63,8 +64,8 @@ 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, Common::Language l, Common::Platform p)
-		: entryID(id), gameid(gid), engineid(eid), title(t), description(d), language(l), platform(p), isHeader(false) {
+		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) {
 		thumbPath = Common::String::format("icons/%s-%s.png", engineid.c_str(), gameid.c_str());
 	}
 
@@ -99,6 +100,7 @@ class GridWidget : public ContainerWidget, public CommandSender {
 protected:
 	Common::HashMap<int, const Graphics::ManagedSurface *> _platformIcons;
 	Common::HashMap<int, const Graphics::ManagedSurface *> _languageIcons;
+	Common::HashMap<int, const Graphics::ManagedSurface *> _extraIcons;
 
 	// Images are mapped by filename -> surface.
 	Common::HashMap<Common::String, const Graphics::ManagedSurface *> _loadedSurfaces;
@@ -134,6 +136,8 @@ protected:
 	int				_flagIconWidth;
 	int				_platformIconHeight;
 	int				_platformIconWidth;
+	int				_extraIconHeight;
+	int				_extraIconWidth;
 	int				_minGridXSpacing;
 	int				_minGridYSpacing;
 	int				_rows;
@@ -169,6 +173,7 @@ public:
 	const Graphics::ManagedSurface *filenameToSurface(const Common::String &name);
 	const Graphics::ManagedSurface *languageToSurface(Common::Language languageCode);
 	const Graphics::ManagedSurface *platformToSurface(Common::Platform platformCode);
+	const Graphics::ManagedSurface *demoToSurface(const Common::String extraString);
 
 	/// Update _visibleEntries from _allEntries and returns true if reload is required.
 	bool calcVisibleEntries();
@@ -187,6 +192,7 @@ public:
 	void reloadThumbnails();
 	void loadFlagIcons();
 	void loadPlatformIcons();
+	void loadExtraIcons();
 
 	void destroyItems();
 	void calcInnerHeight();




More information about the Scummvm-git-logs mailing list