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

ysj1173886760 42030331+ysj1173886760 at users.noreply.github.com
Mon Aug 16 09:01:44 UTC 2021


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

Summary:
50bfc4e521 GRAPHICS: MACGUI: implement global color inverter.
4133592992 GRAPHICS: MACGUI: add cache for inverted color.
b3aec17d6d DIRECTOR: apply global inverter on reverse type ink.


Commit: 50bfc4e52181571eb16fb25f33da0e5602de6993
    https://github.com/scummvm/scummvm/commit/50bfc4e52181571eb16fb25f33da0e5602de6993
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-16T16:54:00+08:00

Commit Message:
GRAPHICS: MACGUI: implement global color inverter.

Changed paths:
    engines/director/window.cpp
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 141855490a..33e7b98156 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -102,17 +102,10 @@ void Window::invertChannel(Channel *channel, const Common::Rect &destRect) {
 
 			// if this will cause efficiency problem, then we shall cache the inverted color in wm
 			for (int j = 0; j < srcRect.width(); j++, src++)
-				if (!mask || (msk && !(*msk++))) {
-					byte r, g, b;
-					g_director->_wm->decomposeColor(*src, r, g, b);
-					r = ~r;
-					g = ~g;
-					b = ~b;
-					*src = g_director->_wm->findBestColor(r, g, b);
-				}
+				if (!mask || (msk && !(*msk++)))
+					*src = _wm->inverter(*src);
 		}
 	} else {
-		uint32 alpha = _wm->_pixelformat.ARGBToColor(255, 0, 0, 0);
 
 		for (int i = 0; i < srcRect.height(); i++) {
 			uint32 *src = (uint32 *)_composeSurface->getBasePtr(srcRect.left, srcRect.top + i);
@@ -120,7 +113,7 @@ void Window::invertChannel(Channel *channel, const Common::Rect &destRect) {
 
 			for (int j = 0; j < srcRect.width(); j++, src++)
 				if (!mask || (msk && !(*msk++)))
-					*src = ~(*src & ~alpha) | alpha;
+					*src = _wm->inverter(*src);
 		}
 	}
 }
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index bbfcb010fd..4dd3753f5c 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -1354,6 +1354,20 @@ void MacWindowManager::decomposeColor(uint32 color, byte &r, byte &g, byte &b) {
 	}
 }
 
+uint MacWindowManager::inverter(uint src) {
+	if (_pixelformat.bytesPerPixel == 1) {
+		byte r, g, b;
+		decomposeColor(src, r, g, b);
+		r = ~r;
+		g = ~g;
+		b = ~b;
+		return findBestColor(r, g, b);
+	} else {
+		uint32 alpha = _pixelformat.ARGBToColor(255, 0, 0, 0);
+		return ~(src & ~alpha) | alpha;
+	}
+}
+
 PauseToken MacWindowManager::pauseEngine() {
 	return _engineP->pauseEngine();
 }
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index cdb77992b0..7b5bb0f8f4 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -307,6 +307,8 @@ public:
 	uint findBestColor(uint32 color);
 	void decomposeColor(uint32 color, byte &r, byte &g, byte &b);
 
+	uint inverter(uint src);
+
 	const byte *getPalette() { return _palette; }
 	uint getPaletteSize() { return _paletteSize; }
 


Commit: 41335929927f60b1176be921f81a44174ee5b844
    https://github.com/scummvm/scummvm/commit/41335929927f60b1176be921f81a44174ee5b844
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-16T16:58:48+08:00

Commit Message:
GRAPHICS: MACGUI: add cache for inverted color.

Changed paths:
    engines/director/window.cpp
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 33e7b98156..cb7197bc4c 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -100,7 +100,6 @@ void Window::invertChannel(Channel *channel, const Common::Rect &destRect) {
 			byte *src = (byte *)_composeSurface->getBasePtr(srcRect.left, srcRect.top + i);
 			const byte *msk = mask ? (const byte *)mask->getBasePtr(xoff, yoff + i) : nullptr;
 
-			// if this will cause efficiency problem, then we shall cache the inverted color in wm
 			for (int j = 0; j < srcRect.width(); j++, src++)
 				if (!mask || (msk && !(*msk++)))
 					*src = _wm->inverter(*src);
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 4dd3753f5c..f365f8d6d5 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -1295,6 +1295,7 @@ void MacWindowManager::passPalette(const byte *pal, uint size) {
 	_paletteSize = size;
 
 	_colorHash.clear();
+	_invertColorHash.clear();
 
 	LOOKUPCOLOR(White);
 	LOOKUPCOLOR(Gray80);
@@ -1355,17 +1356,21 @@ void MacWindowManager::decomposeColor(uint32 color, byte &r, byte &g, byte &b) {
 }
 
 uint MacWindowManager::inverter(uint src) {
+	if (_invertColorHash.contains(src))
+		return _invertColorHash[src];
+
 	if (_pixelformat.bytesPerPixel == 1) {
 		byte r, g, b;
 		decomposeColor(src, r, g, b);
 		r = ~r;
 		g = ~g;
 		b = ~b;
-		return findBestColor(r, g, b);
+		_invertColorHash[src] = findBestColor(r, g, b);
 	} else {
 		uint32 alpha = _pixelformat.ARGBToColor(255, 0, 0, 0);
-		return ~(src & ~alpha) | alpha;
+		_invertColorHash[src] = ~(src & ~alpha) | alpha;
 	}
+	return _invertColorHash[src];
 }
 
 PauseToken MacWindowManager::pauseEngine() {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 7b5bb0f8f4..3d9c482817 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -432,7 +432,8 @@ private:
 	PauseToken *_screenCopyPauseToken;
 
 	Common::Array<ZoomBox *> _zoomBoxes;
-	Common::HashMap<uint32, uint> _colorHash;
+	Common::HashMap<uint, uint> _colorHash;
+	Common::HashMap<uint, uint> _invertColorHash;
 
 	Common::Archive *_dataBundle;
 


Commit: b3aec17d6db8ae8f49587e5c6dc14a3ddc4d7033
    https://github.com/scummvm/scummvm/commit/b3aec17d6db8ae8f49587e5c6dc14a3ddc4d7033
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-16T17:00:32+08:00

Commit Message:
DIRECTOR: apply global inverter on reverse type ink.

Changed paths:
    engines/director/graphics.cpp


diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 113194fc88..50fb9158ab 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -229,7 +229,7 @@ void inkDrawPixel(int x, int y, int src, void *data) {
 		*dst = p->applyColor ? (src & p->foreColor) | (*dst & ~src) : (*dst & ~src);
 		break;
 	case kInkTypeReverse:
-		*dst ^= ~(src);
+		*dst = g_director->_wm->inverter(src);
 		break;
 	case kInkTypeNotReverse:
 		*dst ^= src;




More information about the Scummvm-git-logs mailing list