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

sev- noreply at scummvm.org
Fri Apr 3 13:52:56 UTC 2026


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

Summary:
6dc02783fe GUI: Refactor cursor data storage to support multiple cursors
9135819221 GUI: Add cursor type attribute to theme cursor element
a1fdfe0d6e GUI: THEMES: Add index cursor to scummmodern theme
835863756b GUI: Switch to index cursor when hovering links in RichTextWidget
a4ae174a0a GUI: THEMES: Move cursor index SVG from scummodern theme folder to common-svg and update THEMERC to include common-svg
735223a5d6 GUI: THEMES: Add cursor index bitmap files to common folder
ca4e0a37ae GUI: THEMES: Add cursor index bitmap and cursor definitions to .stx files of residualvm and scummremastered themes
20e7035e14 GUI: THEMES: Regenerate .zip files of residualvm, scummclassic, scummmodern, and scummremastered themes to include the n
d97dc54e8a GUI: Update cursor fallback logic in setActiveCursor function
8d6c784736 GUI: Increase palette size in CursorData structure from 3 * 255 to 3 * 256
6298f49ab3 GUI: Modify RichTextWidget::handleMouseMoved() to have conformant code formatting
cbefd718dd GUI: THEMES: Undo scummodern THEMERC modification and add cursor index SVG file to scummodern theme
b40af9a930 GUI: THEMES: Regenerate residualvm, scummmodern, and scummremastered theme zip files


Commit: 6dc02783feec02953332f5235f048b9aff02a2ea
    https://github.com/scummvm/scummvm/commit/6dc02783feec02953332f5235f048b9aff02a2ea
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: Refactor cursor data storage to support multiple cursors

Introduce CursorData struct and array to store multiple cursor definitions. This prepares the ThemeEngine for supporting different cursor types (e.g., normal, cursor-index).

Changed paths:
    gui/ThemeEngine.cpp
    gui/ThemeEngine.h


diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp
index a94292f9eaa..054238edda7 100644
--- a/gui/ThemeEngine.cpp
+++ b/gui/ThemeEngine.cpp
@@ -227,12 +227,6 @@ ThemeEngine::ThemeEngine(Common::String id, GraphicsMode mode) :
 	_themeArchive = nullptr;
 	_initOk = false;
 
-	_cursorHotspotX = _cursorHotspotY = 0;
-	_cursorWidth = _cursorHeight = 0;
-	_cursorTransparent = 255;
-	_cursorFormat = Graphics::PixelFormat::createFormatCLUT8();
-	_cursorPalSize = 0;
-
 	// We prefer files in archive bundles over the common search paths.
 	_themeFiles.add("default", &SearchMan, 0, false);
 }
@@ -258,7 +252,9 @@ ThemeEngine::~ThemeEngine() {
 
 	delete _parser;
 	delete _themeEval;
-	delete[] _cursor;
+	for (int i = 0; i < kCursorMax; i++) {
+        delete[] _cursors[i].data;
+    }
 }
 
 
@@ -401,9 +397,10 @@ void ThemeEngine::refresh() {
 		_system->showOverlay();
 
 		if (_useCursor) {
-			if (_cursorPalSize)
-				CursorMan.replaceCursorPalette(_cursorPal, 0, _cursorPalSize);
-			CursorMan.replaceCursor(_cursor, _cursorWidth, _cursorHeight, _cursorHotspotX, _cursorHotspotY, _cursorTransparent, true, &_cursorFormat);
+			CursorData &cur = _cursors[_activeCursorType];
+			if (cur.palSize)
+				CursorMan.replaceCursorPalette(cur.pal, 0, cur.palSize);
+			CursorMan.replaceCursor(cur.data, cur.width, cur.height, cur.hotspotX, cur.hotspotY, cur.transparent, true, &cur.format);
 		}
 	}
 }
@@ -1583,34 +1580,37 @@ void ThemeEngine::applyScreenShading(ShadingStyle style) {
 	}
 }
 
-bool ThemeEngine::createCursor(const Common::String &filename, int hotspotX, int hotspotY) {
+bool ThemeEngine::createCursor(const Common::String &filename, int hotspotX, int hotspotY, CursorType type) {
 	// Try to locate the specified file among all loaded bitmaps
 	const Graphics::ManagedSurface *cursor = _bitmaps[filename];
 	if (!cursor)
+	    //warning("createCursor: Bitmap '%s' not found in _bitmaps! (type=%d)", filename.c_str(), type);
 		return false;
 
+	CursorData &cur = _cursors[type];
+
 	// Set up the cursor parameters
-	_cursorHotspotX = hotspotX;
-	_cursorHotspotY = hotspotY;
+	cur.hotspotX = hotspotX;
+	cur.hotspotY = hotspotY;
 
-	_cursorWidth = cursor->w;
-	_cursorHeight = cursor->h;
+	cur.width = cursor->w;
+	cur.height = cursor->h;
 
-	_cursorTransparent = 255;
-	_cursorFormat = Graphics::PixelFormat::createFormatCLUT8();
-	_cursorPalSize = 0;
+	cur.transparent = 255;
+	cur.format = Graphics::PixelFormat::createFormatCLUT8();
+	cur.palSize = 0;
 
 	if (_system->hasFeature(OSystem::kFeatureCursorAlpha)) {
-		_cursorFormat = cursor->format;
-		_cursorTransparent = _cursorFormat.RGBToColor(0xFF, 0, 0xFF);
+		cur.format = cursor->format;
+		cur.transparent = cur.format.RGBToColor(0xFF, 0, 0xFF);
 
 		// Allocate a new buffer for the cursor
-		delete[] _cursor;
-		_cursor = new byte[_cursorWidth * _cursorHeight * _cursorFormat.bytesPerPixel];
-		assert(_cursor);
-		Graphics::copyBlit(_cursor, (const byte *)cursor->getPixels(),
-		                   _cursorWidth * _cursorFormat.bytesPerPixel, cursor->pitch,
-		                   _cursorWidth, _cursorHeight, _cursorFormat.bytesPerPixel);
+		delete[] cur.data;
+		cur.data = new byte[cur.width * cur.height * cur.format.bytesPerPixel];
+		assert(cur.data);
+		Graphics::copyBlit(cur.data, (const byte *)cursor->getPixels(),
+		                   cur.width * cur.format.bytesPerPixel, cursor->pitch,
+		                   cur.width, cur.height, cur.format.bytesPerPixel);
 
 		_useCursor = true;
 		return true;
@@ -1620,10 +1620,10 @@ bool ThemeEngine::createCursor(const Common::String &filename, int hotspotX, int
 		return true;
 
 	// Allocate a new buffer for the cursor
-	delete[] _cursor;
-	_cursor = new byte[_cursorWidth * _cursorHeight];
-	assert(_cursor);
-	memset(_cursor, 0xFF, sizeof(byte) * _cursorWidth * _cursorHeight);
+	delete[] cur.data;
+	cur.data = new byte[cur.width * cur.height];
+	assert(cur.data);
+	memset(cur.data, 0xFF, sizeof(byte) * cur.width * cur.height);
 
 	// the transparent color is 0xFF00FF
 	const uint32 colTransparent = cursor->format.RGBToColor(0xFF, 0, 0xFF);
@@ -1634,8 +1634,8 @@ bool ThemeEngine::createCursor(const Common::String &filename, int hotspotX, int
 	uint colorsFound = 0;
 	Common::HashMap<int, int> colorToIndex;
 	const byte *src = (const byte *)cursor->getPixels();
-	for (uint y = 0; y < _cursorHeight; ++y) {
-		for (uint x = 0; x < _cursorWidth; ++x) {
+	for (uint y = 0; y < cur.height; ++y) {
+		for (uint x = 0; x < cur.width; ++x) {
 			uint32 color = colTransparent;
 			byte r, g, b;
 
@@ -1666,25 +1666,44 @@ bool ThemeEngine::createCursor(const Common::String &filename, int hotspotX, int
 				const int index = colorsFound++;
 				colorToIndex[col] = index;
 
-				_cursorPal[index * 3 + 0] = r;
-				_cursorPal[index * 3 + 1] = g;
-				_cursorPal[index * 3 + 2] = b;
+				cur.pal[index * 3 + 0] = r;
+				cur.pal[index * 3 + 1] = g;
+				cur.pal[index * 3 + 2] = b;
 			}
 
 			// Copy pixel from the 16 bit source surface to the 8bit target surface
 			const int index = colorToIndex[col];
-			_cursor[y * _cursorWidth + x] = index;
+			cur.data[y * cur.width + x] = index;
 		}
 
 		src += cursor->pitch - cursor->w * cursor->format.bytesPerPixel;
 	}
 
 	_useCursor = true;
-	_cursorPalSize = colorsFound;
+	cur.palSize = colorsFound;
 
 	return true;
 }
 
+void ThemeEngine::setActiveCursor(CursorType type) {
+    if (type < 0 || type >= kCursorMax || !_cursors[type].data) {
+        warning("setActiveCursor: Failed to switch - type=%d, data=%p", type, _cursors[type].data);
+        return;
+    }
+
+    _activeCursorType = type;
+    
+    if (_useCursor) {
+        CursorData &cur = _cursors[_activeCursorType];
+		if (cur.palSize) {
+			CursorMan.replaceCursorPalette(cur.pal, 0, cur.palSize);
+		}
+
+        CursorMan.replaceCursor(cur.data, cur.width, cur.height, 
+                                cur.hotspotX, cur.hotspotY, 
+                                cur.transparent, true, &cur.format);
+    }
+}
 
 /**********************************************************
  * Legacy GUI::Theme support functions
@@ -2246,17 +2265,24 @@ Common::String ThemeEngine::getThemeId(const Common::Path &filename) {
 }
 
 void ThemeEngine::showCursor() {
-	if (_useCursor) {
-		if (_cursorPalSize)
-			CursorMan.pushCursorPalette(_cursorPal, 0, _cursorPalSize);
-		CursorMan.pushCursor(_cursor, _cursorWidth, _cursorHeight, _cursorHotspotX, _cursorHotspotY, _cursorTransparent, true, &_cursorFormat);
-		CursorMan.showMouse(true);
-	}
+    if (!_useCursor)
+        return;
+
+    CursorData &cur = _cursors[_activeCursorType];
+
+	if (cur.palSize)
+        CursorMan.pushCursorPalette(cur.pal, 0, cur.palSize);
+
+    CursorMan.pushCursor(cur.data, cur.width, cur.height, 
+                         cur.hotspotX, cur.hotspotY, 
+                         cur.transparent, true, &cur.format);
+    CursorMan.showMouse(true);
 }
 
 void ThemeEngine::hideCursor() {
 	if (_useCursor) {
-		if (_cursorPalSize)
+		CursorData &cur = _cursors[_activeCursorType];
+		if (cur.palSize)
 			CursorMan.popCursorPalette();
 		CursorMan.popCursor();
 	}
diff --git a/gui/ThemeEngine.h b/gui/ThemeEngine.h
index a60171fe094..9fb077edccc 100644
--- a/gui/ThemeEngine.h
+++ b/gui/ThemeEngine.h
@@ -618,6 +618,15 @@ public:
 	 */
 	bool addTextData(const Common::String &drawDataId, TextData textId, TextColor id, Graphics::TextAlign alignH, TextAlignVertical alignV);
 
+public:
+	enum CursorType {
+		kCursorNormal = 0,
+		kCursorIndex = 1,
+		kCursorMax
+	};
+
+	void setActiveCursor(CursorType type);
+
 protected:
 	/**
 	 * Returns if the Theme is ready to draw stuff on screen.
@@ -638,6 +647,22 @@ protected:
 	 */
 	void setGraphicsMode(GraphicsMode mode);
 
+	struct CursorData {
+		byte *data = nullptr;
+		uint width = 0;
+		uint height = 0;
+		int hotspotX = 0;
+		int hotspotY = 0;
+		uint32 transparent = 255;
+		Graphics::PixelFormat format;
+		byte palSize = 0;
+		byte pal[3 * 255];
+	};
+
+	CursorData _cursors[kCursorMax];
+	CursorType _activeCursorType = kCursorNormal;
+	bool _useCursor = false;
+
 public:
 	inline ThemeEval *getEvaluator() { return _themeEval; }
 	inline Graphics::VectorRenderer *renderer() { return _vectorRenderer; }
@@ -656,8 +681,9 @@ public:
 	 * @param filename File name of the bitmap to load.
 	 * @param hotspotX X Coordinate of the bitmap which does the cursor click.
 	 * @param hotspotY Y Coordinate of the bitmap which does the cursor click.
+	 * @param type Cursor type (normal or index)
 	 */
-	bool createCursor(const Common::String &filename, int hotspotX, int hotspotY);
+	bool createCursor(const Common::String &filename, int hotspotX, int hotspotY, CursorType type = kCursorNormal);
 
 	/**
 	 * Wrapper for restoring data from the Back Buffer to the screen.
@@ -810,7 +836,6 @@ protected:
 
 	ImagesMap _bitmaps;
 	Graphics::PixelFormat _overlayFormat;
-	Graphics::PixelFormat _cursorFormat;
 
 	/** List of all the dirty screens that must be blitted to the overlay. */
 	Common::List<Common::Rect> _dirtyScreen;
@@ -825,7 +850,6 @@ protected:
 	Common::Archive *_themeArchive;
 	Common::SearchSet _themeFiles;
 
-	bool _useCursor;
 	int _cursorHotspotX, _cursorHotspotY;
 	uint32 _cursorTransparent;
 	byte *_cursor;
@@ -834,8 +858,6 @@ protected:
 	enum {
 		MAX_CURS_COLORS = 255
 	};
-	byte _cursorPal[3 * MAX_CURS_COLORS];
-	byte _cursorPalSize;
 
 	Common::Rect _clip;
 };


Commit: 913581922161da5037e10ed6098f773e5a99f01e
    https://github.com/scummvm/scummvm/commit/913581922161da5037e10ed6098f773e5a99f01e
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: Add cursor type attribute to theme cursor element

Add optional 'type' attribute to the <cursor> XML element to allow themes to define different cursor types (normal, index).

Changed paths:
    gui/ThemeParser.cpp
    gui/ThemeParser.h


diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp
index 97e43b502a9..4c32cb54899 100644
--- a/gui/ThemeParser.cpp
+++ b/gui/ThemeParser.cpp
@@ -78,6 +78,11 @@ static const TextColorDataInfo kTextColorDefaults[] = {
 	{ kTextColorButtonDisabled,			"color_button_disabled" }
 };
 
+enum CursorType {
+	kCursorNormal,
+	kCursorIndex
+};
+
 static TextColor parseTextColorId(const Common::String &name) {
 	for (int i = 0; i < kTextColorMAX; ++i)
 		if (name.compareToIgnoreCase(kTextColorDefaults[i].name) == 0)
@@ -346,7 +351,18 @@ bool ThemeParser::parserCallback_cursor(ParserNode *node) {
 	if (!parseList(node->values["hotspot"], 2, &spotx, &spoty))
 		return parserError("Error parsing cursor Hot Spot coordinates.");
 
-	if (!_theme->createCursor(node->values["file"], spotx, spoty))
+	ThemeEngine::CursorType cursorType = ThemeEngine::kCursorNormal;
+	if (node->values.contains("type")) {
+		Common::String t = node->values["type"];
+		t.toLowercase();
+		if (t == "index") {
+			cursorType = ThemeEngine::kCursorIndex;
+		} else if (t != "normal") {
+			return parserError(Common::String::format("Invalid cursor type '%s'", t.c_str()));
+		}
+	}
+
+	if (!_theme->createCursor(node->values["file"], spotx, spoty, cursorType))
 		return parserError("Error creating Bitmap Cursor.");
 
 	return true;
diff --git a/gui/ThemeParser.h b/gui/ThemeParser.h
index c23be58582d..0ffbc0c1e10 100644
--- a/gui/ThemeParser.h
+++ b/gui/ThemeParser.h
@@ -100,6 +100,7 @@ protected:
 				XML_PROP(file, true)
 				XML_PROP(hotspot, true)
 				XML_PROP(resolution, false)
+				XML_PROP(type, false)
 			KEY_END()
 
 			XML_KEY(defaults)


Commit: a1fdfe0d6eb2380eb65edf58470ab42643b26238
    https://github.com/scummvm/scummvm/commit/a1fdfe0d6eb2380eb65edf58470ab42643b26238
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: THEMES: Add index cursor to scummmodern theme

Add cursor-index.svg and register bitmap and cursor definitions for the index cursor type used when hovering over clickable links.

Changed paths:
  A gui/themes/scummmodern/cursor-index.svg
    gui/themes/scummmodern/scummmodern_gfx.stx


diff --git a/gui/themes/scummmodern/cursor-index.svg b/gui/themes/scummmodern/cursor-index.svg
new file mode 100644
index 00000000000..b62ca83f9b7
--- /dev/null
+++ b/gui/themes/scummmodern/cursor-index.svg
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="120"
+   height="120"
+   viewBox="0 0 120 120"
+   version="1.1"
+   id="svg1"
+   sodipodi:docname="index.svg"
+   inkscape:version="1.4.3 (0d15f75, 2025-12-25)"
+   inkscape:export-filename="index.svg"
+   inkscape:export-xdpi="25.6"
+   inkscape:export-ydpi="25.6"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="px"
+     inkscape:zoom="3.22"
+     inkscape:cx="58.229814"
+     inkscape:cy="58.850932"
+     inkscape:window-width="1256"
+     inkscape:window-height="670"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1">
+    <inkscape:path-effect
+       effect="fillet_chamfer"
+       id="path-effect2"
+       is_visible="true"
+       lpeversion="1"
+       nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
+       radius="0"
+       unit="px"
+       method="auto"
+       mode="F"
+       chamfer_steps="1"
+       flexible="false"
+       use_knot_distance="true"
+       apply_no_radius="true"
+       apply_with_radius="true"
+       only_selected="false"
+       hide_knots="false" />
+    <inkscape:path-effect
+       effect="fillet_chamfer"
+       id="path-effect1"
+       is_visible="true"
+       lpeversion="1"
+       nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
+       radius="0"
+       unit="px"
+       method="auto"
+       mode="F"
+       chamfer_steps="1"
+       flexible="false"
+       use_knot_distance="true"
+       apply_no_radius="true"
+       apply_with_radius="true"
+       only_selected="false"
+       hide_knots="false" />
+    <filter
+       style="color-interpolation-filters:sRGB;"
+       inkscape:label="Drop Shadow"
+       id="filter26"
+       x="-0.058424382"
+       y="-0.055173878"
+       width="1.1756984"
+       height="1.1676744">
+      <feFlood
+         result="flood"
+         in="SourceGraphic"
+         flood-opacity="0.498039"
+         flood-color="rgb(0,0,0)"
+         id="feFlood25" />
+      <feGaussianBlur
+         result="blur"
+         in="SourceGraphic"
+         stdDeviation="0.994256"
+         id="feGaussianBlur25" />
+      <feOffset
+         result="offset"
+         in="blur"
+         dx="6.000000"
+         dy="6.000000"
+         id="feOffset25" />
+      <feComposite
+         result="comp1"
+         operator="in"
+         in="flood"
+         in2="offset"
+         id="feComposite25" />
+      <feComposite
+         result="comp2"
+         operator="over"
+         in="SourceGraphic"
+         in2="comp1"
+         id="feComposite26" />
+    </filter>
+    <filter
+       style="color-interpolation-filters:sRGB;"
+       inkscape:label="Drop Shadow"
+       id="filter30"
+       x="-0.034993866"
+       y="-0.032994375"
+       width="1.1091992"
+       height="1.1047257">
+      <feFlood
+         result="flood"
+         in="SourceGraphic"
+         flood-opacity="0.498039"
+         flood-color="rgb(0,0,0)"
+         id="feFlood29" />
+      <feGaussianBlur
+         result="blur"
+         in="SourceGraphic"
+         stdDeviation="0.000000"
+         id="feGaussianBlur29" />
+      <feOffset
+         result="offset"
+         in="blur"
+         dx="4.000000"
+         dy="4.000000"
+         id="feOffset29" />
+      <feComposite
+         result="comp1"
+         operator="in"
+         in="flood"
+         in2="offset"
+         id="feComposite29" />
+      <feComposite
+         result="comp2"
+         operator="over"
+         in="SourceGraphic"
+         in2="comp1"
+         id="feComposite30" />
+    </filter>
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#d40000;fill-opacity:1;stroke:#000000;stroke-width:7.11369;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers;filter:url(#filter30)"
+       d="M 19.035632,86.231873 C 10.823436,72.068901 4.0764109,60.065314 4.0422432,59.557234 3.9540582,58.2471 5.0671257,55.446069 6.1252904,54.314901 c 1.8632802,-1.991836 5.1214756,-2.70296 7.4081226,-1.616865 1.844208,0.87595 7.919204,6.576486 10.426433,9.783759 2.1226,2.715254 6.775938,10.379837 6.857483,11.295066 0.0237,0.265347 0.203731,0.565488 0.400196,0.666963 C 31.41399,74.54532 30.406191,60.546896 28.977978,43.336243 27.083787,20.510497 26.471742,11.573211 26.715775,10.303512 27.812044,4.5998392 33.591927,2.6024783 38.591174,6.1997199 c 3.073349,2.211447 3.154744,2.5139356 5.465702,20.3116251 l 2.089265,19.343698 10.369126,-3.396336 c 2.562029,-0.839175 7.852253,0.378594 17.801606,0.682189 9.824661,0.299792 10.923575,-4.507057 19.840032,2.687462 l 0.974204,0.786059 2.674224,3.724462 c 6.201467,8.636995 8.175517,27.178999 8.070147,33.491603 -0.10704,6.412 -0.46341,11.948582 -1.16754,18.138058 l -0.52662,4.62906 -35.107204,2.69268 -35.107193,2.6927 z"
+       id="path2-3-1"
+       sodipodi:nodetypes="ccssscsscsscssscssscccc" />
+  </g>
+</svg>
diff --git a/gui/themes/scummmodern/scummmodern_gfx.stx b/gui/themes/scummmodern/scummmodern_gfx.stx
index 34d5b75ae98..990fbceb6e1 100644
--- a/gui/themes/scummmodern/scummmodern_gfx.stx
+++ b/gui/themes/scummmodern/scummmodern_gfx.stx
@@ -111,6 +111,8 @@
 		<bitmap filename = 'logo.bmp'/>
 		<bitmap filename = 'cursor.bmp' scalable_file = 'cursor.svg' width = '24' height = '24'/>
 		<bitmap filename = 'cursor_small.bmp' scalable_file = 'cursor.svg' width = '16' height = '16'/>
+		<bitmap filename = 'cursor-index.bmp' scalable_file = 'cursor-index.svg' width = '24' height = '24'/>
+		<bitmap filename = 'cursor-index_small.bmp' scalable_file = 'cursor-index.svg' width = '16' height = '16'/>
 		<bitmap filename = 'checkbox.bmp'/>
 		<bitmap filename = 'checkbox_empty.bmp'/>
 		<bitmap filename = 'checkbox_disabled.bmp'/>
@@ -312,6 +314,9 @@
 	<cursor file = 'cursor.bmp' hotspot = '0, 0'/>
 	<cursor resolution = 'y<H' file = 'cursor_small.bmp' hotspot = '0, 0'/>
 
+	<cursor file = 'cursor-index.bmp' hotspot = '0, 0' type = 'index'/>
+    <cursor resolution = 'y<H' file = 'cursor-index_small.bmp' hotspot = '0, 0' type = 'index'/>
+
 	<!-- Selection (text or list items) -->
 	<drawdata id = 'text_selection' cache = 'false'>
 		<drawstep	func = 'square'


Commit: 835863756b32bc78d089110b631b6f142449593d
    https://github.com/scummvm/scummvm/commit/835863756b32bc78d089110b631b6f142449593d
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: Switch to index cursor when hovering links in RichTextWidget

Use setActiveCursor() to switch between normal and index cursors based on whether the mouse is over a clickable link.

Changed paths:
    gui/widgets/richtext.cpp


diff --git a/gui/widgets/richtext.cpp b/gui/widgets/richtext.cpp
index 3727fa98a5b..7959fdc41d3 100644
--- a/gui/widgets/richtext.cpp
+++ b/gui/widgets/richtext.cpp
@@ -124,6 +124,18 @@ void RichTextWidget::handleMouseUp(int x, int y, int button, int clickCount) {
 }
 
 void RichTextWidget::handleMouseMoved(int x, int y, int button) {
+	if (_txtWnd) {
+		Common::U32String link = _txtWnd->getMouseLink (
+			x - _innerMargin + _scrolledX, 
+			y - _innerMargin + _scrolledY
+		);
+
+		if (!link.empty())
+			g_gui.theme()->setActiveCursor(GUI::ThemeEngine::kCursorIndex);
+		else
+			g_gui.theme()->setActiveCursor(GUI::ThemeEngine::kCursorNormal);
+	}	
+	
 	if (_mouseDownStartY == 0 || _mouseDownY == y || !_txtWnd)
 		return;
 


Commit: a4ae174a0a45dc906e308ed6041d4f6b576e9ae4
    https://github.com/scummvm/scummvm/commit/a4ae174a0a45dc906e308ed6041d4f6b576e9ae4
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: THEMES: Move cursor index SVG from scummodern theme folder to common-svg and update THEMERC to include common-svg

Changed paths:
  A gui/themes/common-svg/cursor-index.svg
  R gui/themes/scummmodern/cursor-index.svg
    gui/themes/scummmodern/THEMERC


diff --git a/gui/themes/scummmodern/cursor-index.svg b/gui/themes/common-svg/cursor-index.svg
similarity index 100%
rename from gui/themes/scummmodern/cursor-index.svg
rename to gui/themes/common-svg/cursor-index.svg
diff --git a/gui/themes/scummmodern/THEMERC b/gui/themes/scummmodern/THEMERC
index c82ed30005a..b0561526755 100644
--- a/gui/themes/scummmodern/THEMERC
+++ b/gui/themes/scummmodern/THEMERC
@@ -1,2 +1,3 @@
 [SCUMMVM_STX0.9.21:ScummVM Modern Theme:No Author]
 %using ../common
+%using ../common-svg


Commit: 735223a5d694addcf3cad643b2d3ba80864ca0af
    https://github.com/scummvm/scummvm/commit/735223a5d694addcf3cad643b2d3ba80864ca0af
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: THEMES: Add cursor index bitmap files to common folder

Changed paths:
  A gui/themes/common/cursor-index.bmp
  A gui/themes/common/cursor-index_small.bmp


diff --git a/gui/themes/common/cursor-index.bmp b/gui/themes/common/cursor-index.bmp
new file mode 100644
index 00000000000..7601816595d
Binary files /dev/null and b/gui/themes/common/cursor-index.bmp differ
diff --git a/gui/themes/common/cursor-index_small.bmp b/gui/themes/common/cursor-index_small.bmp
new file mode 100644
index 00000000000..7a50bea6e8c
Binary files /dev/null and b/gui/themes/common/cursor-index_small.bmp differ


Commit: ca4e0a37ae9ee2c2c7686b5b6544a4221f6a13a7
    https://github.com/scummvm/scummvm/commit/ca4e0a37ae9ee2c2c7686b5b6544a4221f6a13a7
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: THEMES: Add cursor index bitmap and cursor definitions to .stx files of residualvm and scummremastered themes

Changed paths:
    gui/themes/residualvm/remastered_gfx.stx
    gui/themes/scummremastered/remastered_gfx.stx


diff --git a/gui/themes/residualvm/remastered_gfx.stx b/gui/themes/residualvm/remastered_gfx.stx
index c68557725be..a418d9e7c8e 100644
--- a/gui/themes/residualvm/remastered_gfx.stx
+++ b/gui/themes/residualvm/remastered_gfx.stx
@@ -112,6 +112,8 @@
 		<bitmap filename = 'logo.bmp' scalable_file = 'logo.svg' width = '287' height = '80'/>
 		<bitmap filename = 'cursor.bmp' scalable_file = 'cursor.svg' width = '24' height = '24'/>
 		<bitmap filename = 'cursor_small.bmp' scalable_file = 'cursor.svg' width = '16' height = '16'/>
+		<bitmap filename = 'cursor-index.bmp' scalable_file = 'cursor-index.svg' width = '24' height = '24'/>
+		<bitmap filename = 'cursor-index_small.bmp' scalable_file = 'cursor-index.svg' width = '16' height = '16'/>
 		<bitmap filename = 'checkbox.bmp' scalable_file = 'checkbox.svg' width = '15' height = '15'/>
 		<bitmap filename = 'checkbox_empty.bmp' scalable_file = 'checkbox_empty.svg' width = '15' height = '15'/>
 		<bitmap filename = 'checkbox_disabled.bmp' scalable_file = 'checkbox_disabled.svg' width = '15' height = '15'/>
@@ -313,6 +315,8 @@
 
 	<cursor file = 'cursor.bmp' hotspot = '0, 0'/>
 	<cursor resolution = 'y<H' file = 'cursor_small.bmp' hotspot = '0, 0'/>
+	<cursor file = 'cursor-index.bmp' hotspot = '0, 0' type = 'index'/>
+	<cursor resolution = 'y<H' file = 'cursor-index_small.bmp' hotspot = '0, 0' type = 'index'/>
 
 	<!-- Selection (text or list items) -->
 	<drawdata id = 'text_selection' cache = 'false'>
diff --git a/gui/themes/scummremastered/remastered_gfx.stx b/gui/themes/scummremastered/remastered_gfx.stx
index d289937a82f..4f928e6c5f2 100644
--- a/gui/themes/scummremastered/remastered_gfx.stx
+++ b/gui/themes/scummremastered/remastered_gfx.stx
@@ -112,6 +112,8 @@
 		<bitmap filename = 'logo.bmp' scalable_file = 'logo.svg' width = '287' height = '80'/>
 		<bitmap filename = 'cursor.bmp' scalable_file = 'cursor.svg' width = '24' height = '24'/>
 		<bitmap filename = 'cursor_small.bmp' scalable_file = 'cursor.svg' width = '16' height = '16'/>
+		<bitmap filename = 'cursor-index.bmp' scalable_file = 'cursor-index.svg' width = '24' height = '24'/>
+		<bitmap filename = 'cursor-index_small.bmp' scalable_file = 'cursor-index.svg' width = '16' height = '16'/>
 		<bitmap filename = 'checkbox.bmp' scalable_file = 'checkbox.svg' width = '15' height = '15'/>
 		<bitmap filename = 'checkbox_empty.bmp' scalable_file = 'checkbox_empty.svg' width = '15' height = '15'/>
 		<bitmap filename = 'checkbox_disabled.bmp' scalable_file = 'checkbox_disabled.svg' width = '15' height = '15'/>
@@ -313,6 +315,8 @@
 
 	<cursor file = 'cursor.bmp' hotspot = '0, 0'/>
 	<cursor resolution = 'y<H' file = 'cursor_small.bmp' hotspot = '0, 0'/>
+	<cursor file = 'cursor-index.bmp' hotspot = '0, 0' type = 'index'/>
+	<cursor resolution = 'y<H' file = 'cursor-index_small.bmp' hotspot = '0, 0' type = 'index'/>
 
 	<!-- Selection (text or list items) -->
 	<drawdata id = 'text_selection' cache = 'false'>


Commit: 20e7035e1431e0062b2fa0262363122b21f405fe
    https://github.com/scummvm/scummvm/commit/20e7035e1431e0062b2fa0262363122b21f405fe
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: THEMES: Regenerate .zip files of residualvm, scummclassic, scummmodern, and scummremastered themes to include the new cursor index svg and bitmap files

Changed paths:
    gui/themes/residualvm.zip
    gui/themes/scummclassic.zip
    gui/themes/scummmodern.zip
    gui/themes/scummremastered.zip


diff --git a/gui/themes/residualvm.zip b/gui/themes/residualvm.zip
index 82a12009fd4..68355b29be0 100644
Binary files a/gui/themes/residualvm.zip and b/gui/themes/residualvm.zip differ
diff --git a/gui/themes/scummclassic.zip b/gui/themes/scummclassic.zip
index c1b0876fff0..266a3bc46ee 100644
Binary files a/gui/themes/scummclassic.zip and b/gui/themes/scummclassic.zip differ
diff --git a/gui/themes/scummmodern.zip b/gui/themes/scummmodern.zip
index 8c029cae7c1..cd7e6f3274f 100644
Binary files a/gui/themes/scummmodern.zip and b/gui/themes/scummmodern.zip differ
diff --git a/gui/themes/scummremastered.zip b/gui/themes/scummremastered.zip
index d1b9cb2a9b1..dce1db48cb6 100644
Binary files a/gui/themes/scummremastered.zip and b/gui/themes/scummremastered.zip differ


Commit: d97dc54e8a47b3de765f889e72d379ee56c59287
    https://github.com/scummvm/scummvm/commit/d97dc54e8a47b3de765f889e72d379ee56c59287
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: Update cursor fallback logic in setActiveCursor function

When a theme doesn't define an index cursor fall back to the normal cursor.
In the case of the classic theme that has a hardcoded cursor, setActiveCursor fails silently.

Changed paths:
    gui/ThemeEngine.cpp


diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp
index 054238edda7..bfb97cdd425 100644
--- a/gui/ThemeEngine.cpp
+++ b/gui/ThemeEngine.cpp
@@ -1687,8 +1687,11 @@ bool ThemeEngine::createCursor(const Common::String &filename, int hotspotX, int
 
 void ThemeEngine::setActiveCursor(CursorType type) {
     if (type < 0 || type >= kCursorMax || !_cursors[type].data) {
-        warning("setActiveCursor: Failed to switch - type=%d, data=%p", type, _cursors[type].data);
-        return;
+        if (type == kCursorIndex && _cursors[kCursorNormal].data) {
+        	type = kCursorNormal;  // Fallback to normal cursor
+        } else {
+            return;
+        }
     }
 
     _activeCursorType = type;


Commit: 8d6c78473695a1efa2fbdacfb01211b466579c43
    https://github.com/scummvm/scummvm/commit/8d6c78473695a1efa2fbdacfb01211b466579c43
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: Increase palette size in CursorData structure from 3 * 255 to 3 * 256

Changed paths:
    gui/ThemeEngine.h


diff --git a/gui/ThemeEngine.h b/gui/ThemeEngine.h
index 9fb077edccc..338e0f491cc 100644
--- a/gui/ThemeEngine.h
+++ b/gui/ThemeEngine.h
@@ -656,7 +656,7 @@ protected:
 		uint32 transparent = 255;
 		Graphics::PixelFormat format;
 		byte palSize = 0;
-		byte pal[3 * 255];
+		byte pal[3 * 256];
 	};
 
 	CursorData _cursors[kCursorMax];


Commit: 6298f49ab3c1a38db310b0f68a7ed764f0999bde
    https://github.com/scummvm/scummvm/commit/6298f49ab3c1a38db310b0f68a7ed764f0999bde
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: Modify RichTextWidget::handleMouseMoved() to have conformant code formatting

Multi-line function call is now one-line with conformant spacing and formatting

Changed paths:
    gui/widgets/richtext.cpp


diff --git a/gui/widgets/richtext.cpp b/gui/widgets/richtext.cpp
index 7959fdc41d3..557e149aef4 100644
--- a/gui/widgets/richtext.cpp
+++ b/gui/widgets/richtext.cpp
@@ -125,10 +125,7 @@ void RichTextWidget::handleMouseUp(int x, int y, int button, int clickCount) {
 
 void RichTextWidget::handleMouseMoved(int x, int y, int button) {
 	if (_txtWnd) {
-		Common::U32String link = _txtWnd->getMouseLink (
-			x - _innerMargin + _scrolledX, 
-			y - _innerMargin + _scrolledY
-		);
+		Common::U32String link = _txtWnd->getMouseLink(x - _innerMargin + _scrolledX, y - _innerMargin + _scrolledY);
 
 		if (!link.empty())
 			g_gui.theme()->setActiveCursor(GUI::ThemeEngine::kCursorIndex);


Commit: cbefd718ddd336db324bc797c00800ca90ea4549
    https://github.com/scummvm/scummvm/commit/cbefd718ddd336db324bc797c00800ca90ea4549
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: THEMES: Undo scummodern THEMERC modification and add cursor index SVG file to scummodern theme

Changed paths:
  A gui/themes/scummmodern/cursor-index.svg
    gui/themes/scummmodern/THEMERC


diff --git a/gui/themes/scummmodern/THEMERC b/gui/themes/scummmodern/THEMERC
index b0561526755..c82ed30005a 100644
--- a/gui/themes/scummmodern/THEMERC
+++ b/gui/themes/scummmodern/THEMERC
@@ -1,3 +1,2 @@
 [SCUMMVM_STX0.9.21:ScummVM Modern Theme:No Author]
 %using ../common
-%using ../common-svg
diff --git a/gui/themes/scummmodern/cursor-index.svg b/gui/themes/scummmodern/cursor-index.svg
new file mode 100644
index 00000000000..b62ca83f9b7
--- /dev/null
+++ b/gui/themes/scummmodern/cursor-index.svg
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="120"
+   height="120"
+   viewBox="0 0 120 120"
+   version="1.1"
+   id="svg1"
+   sodipodi:docname="index.svg"
+   inkscape:version="1.4.3 (0d15f75, 2025-12-25)"
+   inkscape:export-filename="index.svg"
+   inkscape:export-xdpi="25.6"
+   inkscape:export-ydpi="25.6"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="px"
+     inkscape:zoom="3.22"
+     inkscape:cx="58.229814"
+     inkscape:cy="58.850932"
+     inkscape:window-width="1256"
+     inkscape:window-height="670"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1">
+    <inkscape:path-effect
+       effect="fillet_chamfer"
+       id="path-effect2"
+       is_visible="true"
+       lpeversion="1"
+       nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
+       radius="0"
+       unit="px"
+       method="auto"
+       mode="F"
+       chamfer_steps="1"
+       flexible="false"
+       use_knot_distance="true"
+       apply_no_radius="true"
+       apply_with_radius="true"
+       only_selected="false"
+       hide_knots="false" />
+    <inkscape:path-effect
+       effect="fillet_chamfer"
+       id="path-effect1"
+       is_visible="true"
+       lpeversion="1"
+       nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
+       radius="0"
+       unit="px"
+       method="auto"
+       mode="F"
+       chamfer_steps="1"
+       flexible="false"
+       use_knot_distance="true"
+       apply_no_radius="true"
+       apply_with_radius="true"
+       only_selected="false"
+       hide_knots="false" />
+    <filter
+       style="color-interpolation-filters:sRGB;"
+       inkscape:label="Drop Shadow"
+       id="filter26"
+       x="-0.058424382"
+       y="-0.055173878"
+       width="1.1756984"
+       height="1.1676744">
+      <feFlood
+         result="flood"
+         in="SourceGraphic"
+         flood-opacity="0.498039"
+         flood-color="rgb(0,0,0)"
+         id="feFlood25" />
+      <feGaussianBlur
+         result="blur"
+         in="SourceGraphic"
+         stdDeviation="0.994256"
+         id="feGaussianBlur25" />
+      <feOffset
+         result="offset"
+         in="blur"
+         dx="6.000000"
+         dy="6.000000"
+         id="feOffset25" />
+      <feComposite
+         result="comp1"
+         operator="in"
+         in="flood"
+         in2="offset"
+         id="feComposite25" />
+      <feComposite
+         result="comp2"
+         operator="over"
+         in="SourceGraphic"
+         in2="comp1"
+         id="feComposite26" />
+    </filter>
+    <filter
+       style="color-interpolation-filters:sRGB;"
+       inkscape:label="Drop Shadow"
+       id="filter30"
+       x="-0.034993866"
+       y="-0.032994375"
+       width="1.1091992"
+       height="1.1047257">
+      <feFlood
+         result="flood"
+         in="SourceGraphic"
+         flood-opacity="0.498039"
+         flood-color="rgb(0,0,0)"
+         id="feFlood29" />
+      <feGaussianBlur
+         result="blur"
+         in="SourceGraphic"
+         stdDeviation="0.000000"
+         id="feGaussianBlur29" />
+      <feOffset
+         result="offset"
+         in="blur"
+         dx="4.000000"
+         dy="4.000000"
+         id="feOffset29" />
+      <feComposite
+         result="comp1"
+         operator="in"
+         in="flood"
+         in2="offset"
+         id="feComposite29" />
+      <feComposite
+         result="comp2"
+         operator="over"
+         in="SourceGraphic"
+         in2="comp1"
+         id="feComposite30" />
+    </filter>
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#d40000;fill-opacity:1;stroke:#000000;stroke-width:7.11369;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers;filter:url(#filter30)"
+       d="M 19.035632,86.231873 C 10.823436,72.068901 4.0764109,60.065314 4.0422432,59.557234 3.9540582,58.2471 5.0671257,55.446069 6.1252904,54.314901 c 1.8632802,-1.991836 5.1214756,-2.70296 7.4081226,-1.616865 1.844208,0.87595 7.919204,6.576486 10.426433,9.783759 2.1226,2.715254 6.775938,10.379837 6.857483,11.295066 0.0237,0.265347 0.203731,0.565488 0.400196,0.666963 C 31.41399,74.54532 30.406191,60.546896 28.977978,43.336243 27.083787,20.510497 26.471742,11.573211 26.715775,10.303512 27.812044,4.5998392 33.591927,2.6024783 38.591174,6.1997199 c 3.073349,2.211447 3.154744,2.5139356 5.465702,20.3116251 l 2.089265,19.343698 10.369126,-3.396336 c 2.562029,-0.839175 7.852253,0.378594 17.801606,0.682189 9.824661,0.299792 10.923575,-4.507057 19.840032,2.687462 l 0.974204,0.786059 2.674224,3.724462 c 6.201467,8.636995 8.175517,27.178999 8.070147,33.491603 -0.10704,6.412 -0.46341,11.948582 -1.16754,18.138058 l -0.52662,4.62906 -35.107204,2.69268 -35.107193,2.6927 z"
+       id="path2-3-1"
+       sodipodi:nodetypes="ccssscsscsscssscssscccc" />
+  </g>
+</svg>


Commit: b40af9a9308630b210bd570d8f5fc80102d624ca
    https://github.com/scummvm/scummvm/commit/b40af9a9308630b210bd570d8f5fc80102d624ca
Author: Marwane ElBaraka (marwane.elbaraka at gmail.com)
Date: 2026-04-03T15:52:43+02:00

Commit Message:
GUI: THEMES: Regenerate residualvm, scummmodern, and scummremastered theme zip files

Changed paths:
    gui/themes/residualvm.zip
    gui/themes/scummmodern.zip
    gui/themes/scummremastered.zip


diff --git a/gui/themes/residualvm.zip b/gui/themes/residualvm.zip
index 68355b29be0..b7d36ba4f12 100644
Binary files a/gui/themes/residualvm.zip and b/gui/themes/residualvm.zip differ
diff --git a/gui/themes/scummmodern.zip b/gui/themes/scummmodern.zip
index cd7e6f3274f..f0a0ac50dc1 100644
Binary files a/gui/themes/scummmodern.zip and b/gui/themes/scummmodern.zip differ
diff --git a/gui/themes/scummremastered.zip b/gui/themes/scummremastered.zip
index dce1db48cb6..07674bc1af9 100644
Binary files a/gui/themes/scummremastered.zip and b/gui/themes/scummremastered.zip differ




More information about the Scummvm-git-logs mailing list