[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