[Scummvm-git-logs] scummvm master -> 7d7e482ce87aa7c530d00d33b4f8f7ab85d72c00

sev- sev at scummvm.org
Sat Aug 15 22:59:51 UTC 2020


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

Summary:
695e8349fe GRAPHICS: MACGUI: BE-safe color creation
caea5ef118 DIRECTOR: Made matte bitmaps 32bpp-compatible
f05d2f17c2 GRAPHICS: MACGUI: Made MacDrawPixPtr a global typedef
7370a946e3 DIRECTOR: Make ink drawing 32bpp-compatible
bce9cfd19c DIRECTOR: More work on 32bpp
7d7e482ce8 DIRECTOR: More 32bpp work, images start to appear


Commit: 695e8349fef4c9409e723ca8a9077cbc134955dd
    https://github.com/scummvm/scummvm/commit/695e8349fef4c9409e723ca8a9077cbc134955dd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00

Commit Message:
GRAPHICS: MACGUI: BE-safe color creation

Changed paths:
    graphics/macgui/macwindowmanager.cpp


diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 6a65c23cac..11920d8ef5 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -960,7 +960,7 @@ void MacWindowManager::passPalette(const byte *pal, uint size) {
 
 uint MacWindowManager::findBestColor(byte cr, byte cg, byte cb) {
 	if (_pixelformat.bytesPerPixel == 4)
-		return cr << 24 | cg << 16 | cb << 8 | 0xff;
+		return _pixelformat.RGBToColor(cr, cg, cb);
 
 	uint bestColor = 0;
 	double min = 0xFFFFFFFF;


Commit: caea5ef11884854a6f8c4e762896e98008ddfba9
    https://github.com/scummvm/scummvm/commit/caea5ef11884854a6f8c4e762896e98008ddfba9
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00

Commit Message:
DIRECTOR: Made matte bitmaps 32bpp-compatible

Changed paths:
    engines/director/castmember.cpp


diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 5ac43685f1..21e3b65313 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -187,23 +187,27 @@ void BitmapCastMember::createMatte() {
 	// Like background trans, but all white pixels NOT ENCLOSED by coloured pixels
 	// are transparent
 	Graphics::Surface tmp;
-	tmp.create(_initialRect.width(), _initialRect.height(), Graphics::PixelFormat::createFormatCLUT8());
+	tmp.create(_initialRect.width(), _initialRect.height(), g_director->_pixelformat);
 	tmp.copyFrom(*_img->getSurface());
 
 	// Searching white color in the corners
 	int whiteColor = -1;
 
-	for (int y = 0; y < tmp.h; y++) {
-		for (int x = 0; x < tmp.w; x++) {
-			byte color = *(byte *)tmp.getBasePtr(x, y);
-
-			if (g_director->getPalette()[color * 3 + 0] == 0xff &&
-					g_director->getPalette()[color * 3 + 1] == 0xff &&
-					g_director->getPalette()[color * 3 + 2] == 0xff) {
-				whiteColor = color;
-				break;
+	if (g_director->_pixelformat.bytesPerPixel == 1) {
+		for (int y = 0; y < tmp.h; y++) {
+			for (int x = 0; x < tmp.w; x++) {
+				byte color = *(byte *)tmp.getBasePtr(x, y);
+
+				if (g_director->getPalette()[color * 3 + 0] == 0xff &&
+						g_director->getPalette()[color * 3 + 1] == 0xff &&
+						g_director->getPalette()[color * 3 + 2] == 0xff) {
+					whiteColor = color;
+					break;
+				}
 			}
 		}
+	} else {
+		whiteColor = g_director->_wm->findBestColor(0xff, 0xff, 0xff);
 	}
 
 	if (whiteColor == -1) {


Commit: f05d2f17c20247b681b3e60fdf777cf0b6daa595
    https://github.com/scummvm/scummvm/commit/f05d2f17c20247b681b3e60fdf777cf0b6daa595
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00

Commit Message:
GRAPHICS: MACGUI: Made MacDrawPixPtr a global typedef

Changed paths:
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 11920d8ef5..79b8c4baf1 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -441,7 +441,7 @@ void macDrawPixel(int x, int y, int color, void *data) {
 	}
 }
 
-MacWindowManager::DrawPixPtr MacWindowManager::getDrawPixel() {
+MacDrawPixPtr MacWindowManager::getDrawPixel() {
 	if (_pixelformat.bytesPerPixel == 1)
 		return &macDrawPixel<byte *>;
 	else
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 29eb0fc20c..3ff4d3568a 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -131,6 +131,8 @@ struct ZoomBox {
 	uint32 nextTime;
 };
 
+typedef void (* MacDrawPixPtr)(int, int, int, void *);
+
 /**
  * A manager class to handle window creation, destruction,
  * drawing, moving and event handling.
@@ -140,8 +142,7 @@ public:
 	MacWindowManager(uint32 mode = 0, MacPatterns *patterns = nullptr);
 	~MacWindowManager();
 
-	typedef void (* DrawPixPtr)(int, int, int, void *);
-	DrawPixPtr getDrawPixel();
+	MacDrawPixPtr getDrawPixel();
 
 	/**
 	 * Mutator to indicate the surface onto which the desktop will be drawn.


Commit: 7370a946e3f4c03d143653e6c376c69e045e35c5
    https://github.com/scummvm/scummvm/commit/7370a946e3f4c03d143653e6c376c69e045e35c5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00

Commit Message:
DIRECTOR: Make ink drawing 32bpp-compatible

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


diff --git a/engines/director/director.h b/engines/director/director.h
index 8a6c7036a6..c2c162d8d2 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -32,6 +32,7 @@
 
 #include "engines/engine.h"
 #include "graphics/pixelformat.h"
+#include "graphics/macgui/macwindowmanager.h"
 
 #include "director/types.h"
 #include "director/util.h"
@@ -162,8 +163,6 @@ struct DirectorPlotData {
 	}
 };
 
-void inkDrawPixel(int x, int y, int color, void *data);
-
 class DirectorEngine : public ::Engine {
 public:
 	DirectorEngine(OSystem *syst, const DirectorGameDescription *gameDesc);
@@ -214,6 +213,8 @@ public:
 	void setCursor(int type);
 	void draw();
 
+	Graphics::MacDrawPixPtr getInkDrawPixel();
+
 	void loadKeyCodes();
 
 	Archive *createArchive();
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 7d88fa5a45..78d4a34515 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -832,16 +832,17 @@ void DirectorEngine::draw() {
 	g_system->updateScreen();
 }
 
+template <typename T>
 void inkDrawPixel(int x, int y, int src, void *data) {
 	DirectorPlotData *p = (DirectorPlotData *)data;
 
 	if (!p->destRect.contains(x, y))
 		return;
 
-	byte *dst;
-	byte tmpDst;
+	T dst;
+	uint32 tmpDst;
 
-	dst = (byte *)p->dst->getBasePtr(x, y);
+	dst = (T)p->dst->getBasePtr(x, y);
 
 	if (p->ms) {
 		// Get the pixel that macDrawPixel will give us, but store it to apply the
@@ -974,6 +975,13 @@ void inkDrawPixel(int x, int y, int src, void *data) {
 	}
 }
 
+Graphics::MacDrawPixPtr DirectorEngine::getInkDrawPixel() {
+	if (_pixelformat.bytesPerPixel == 1)
+		return &inkDrawPixel<byte *>;
+	else
+		return &inkDrawPixel<uint32 *>;
+}
+
 void DirectorPlotData::setApplyColor() {
 	applyColor = false;
 
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 3759920451..4771596803 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -183,35 +183,35 @@ void Window::inkBlitShape(DirectorPlotData *pd, Common::Rect &srcRect) {
 	switch (pd->ms->spriteType) {
 	case kRectangleSprite:
 		pd->ms->pd = &plotFill;
-		Graphics::drawFilledRect(fillRect, pd->ms->foreColor, inkDrawPixel, pd);
+		Graphics::drawFilledRect(fillRect, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
 		// fall through
 	case kOutlinedRectangleSprite:
 		pd->ms->pd = &plotStroke;
-		Graphics::drawRect(strokeRect, pd->ms->foreColor, inkDrawPixel, pd);
+		Graphics::drawRect(strokeRect, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
 		break;
 	case kRoundedRectangleSprite:
 		pd->ms->pd = &plotFill;
-		Graphics::drawRoundRect(fillRect, 12, pd->ms->foreColor, true, inkDrawPixel, pd);
+		Graphics::drawRoundRect(fillRect, 12, pd->ms->foreColor, true, g_director->getInkDrawPixel(), pd);
 		// fall through
 	case kOutlinedRoundedRectangleSprite:
 		pd->ms->pd = &plotStroke;
-		Graphics::drawRoundRect(strokeRect, 12, pd->ms->foreColor, false, inkDrawPixel, pd);
+		Graphics::drawRoundRect(strokeRect, 12, pd->ms->foreColor, false, g_director->getInkDrawPixel(), pd);
 		break;
 	case kOvalSprite:
 		pd->ms->pd = &plotFill;
-		Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, pd->ms->foreColor, true, inkDrawPixel, pd);
+		Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, pd->ms->foreColor, true, g_director->getInkDrawPixel(), pd);
 		// fall through
 	case kOutlinedOvalSprite:
 		pd->ms->pd = &plotStroke;
-		Graphics::drawEllipse(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, false, inkDrawPixel, pd);
+		Graphics::drawEllipse(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, false, g_director->getInkDrawPixel(), pd);
 		break;
 	case kLineTopBottomSprite:
 		pd->ms->pd = &plotStroke;
-		Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, inkDrawPixel, pd);
+		Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
 		break;
 	case kLineBottomTopSprite:
 		pd->ms->pd = &plotStroke;
-		Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, inkDrawPixel, pd);
+		Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
 		break;
 	default:
 		warning("Window::inkBlitFrom: Expected shape type but got type %d", pd->ms->spriteType);
@@ -233,7 +233,7 @@ void Window::inkBlitSurface(DirectorPlotData *pd, Common::Rect &srcRect, const G
 
 		for (int j = 0; j < pd->destRect.width(); j++, pd->srcPoint.x++) {
 			if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
-				inkDrawPixel(pd->destRect.left + j, pd->destRect.top + i,
+				(g_director->getInkDrawPixel())(pd->destRect.left + j, pd->destRect.top + i,
 										 preprocessColor(pd, *((byte *)pd->srf->getBasePtr(pd->srcPoint.x, pd->srcPoint.y))), pd);
 			}
 		}
@@ -259,7 +259,7 @@ void Window::inkBlitStretchSurface(DirectorPlotData *pd, Common::Rect &srcRect,
 
 		for (int xCtr = 0, scaleXCtr = 0; xCtr < pd->destRect.width(); xCtr++, scaleXCtr += scaleX, pd->srcPoint.x++) {
 			if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
-			inkDrawPixel(pd->destRect.left + xCtr, pd->destRect.top + i,
+			(g_director->getInkDrawPixel())(pd->destRect.left + xCtr, pd->destRect.top + i,
 									 preprocessColor(pd, *((byte *)pd->srf->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD))), pd);
 			}
 		}


Commit: bce9cfd19c2ba3a4a4e4a3f316eb3182cc2da2c4
    https://github.com/scummvm/scummvm/commit/bce9cfd19c2ba3a4a4e4a3f316eb3182cc2da2c4
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00

Commit Message:
DIRECTOR: More work on 32bpp

Changed paths:
    engines/director/castmember.cpp
    engines/director/castmember.h
    engines/director/director.h
    engines/director/lingo/lingo-object.cpp


diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 21e3b65313..6d32f3d423 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -545,7 +545,7 @@ TextCastMember::TextCastMember(Cast *cast, uint16 castId, Common::SeekableReadSt
 	_modified = true;
 }
 
-void TextCastMember::setColors(int *fgcolor, int *bgcolor) {
+void TextCastMember::setColors(uint32 *fgcolor, uint32 *bgcolor) {
 	if (fgcolor)
 		_fgcolor = *fgcolor;
 
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index ecece55150..75c1281b42 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -74,9 +74,9 @@ public:
 	virtual void updateFromWidget(Graphics::MacWidget *widget) {}
 	virtual Common::Rect getWidgetRect() { return _initialRect; }
 
-	virtual void setColors(int *fgcolor, int *bgcolor) { return; }
-	virtual uint getForeColor() { return 0; }
-	virtual uint getBackColor() { return 0; }
+	virtual void setColors(uint32 *fgcolor, uint32 *bgcolor) { return; }
+	virtual uint32 getForeColor() { return 0; }
+	virtual uint32 getBackColor() { return 0; }
 
 	bool hasProp(const Common::String &propName) override;
 	Datum getProp(const Common::String &propName) override;
@@ -180,8 +180,8 @@ public:
 class ShapeCastMember : public CastMember {
 public:
 	ShapeCastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream, uint16 version);
-	virtual uint getForeColor() override { return _fgCol; }
-	virtual uint getBackColor() override { return _bgCol; }
+	virtual uint32 getForeColor() override { return _fgCol; }
+	virtual uint32 getBackColor() override { return _bgCol; }
 
 	ShapeType _shapeType;
 	uint16 _pattern;
@@ -191,14 +191,14 @@ public:
 	InkType _ink;
 
 private:
-	byte _fgCol;
-	byte _bgCol;
+	uint32 _fgCol;
+	uint32 _bgCol;
 };
 
 class TextCastMember : public CastMember {
 public:
 	TextCastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream, uint16 version, uint8 flags1 = 0, bool asButton = false);
-	virtual void setColors(int *fgcolor, int *bgcolor) override;
+	virtual void setColors(uint32 *fgcolor, uint32 *bgcolor) override;
 
 	void setText(const char *text);
 	virtual Graphics::MacWidget *createWidget(Common::Rect &bbox, Channel *channel) override;
@@ -243,8 +243,8 @@ public:
 	Common::String getText();
 
 private:
-	uint _bgcolor;
-	uint _fgcolor;
+	uint32 _bgcolor;
+	uint32 _fgcolor;
 };
 
 class ScriptCastMember : public CastMember {
diff --git a/engines/director/director.h b/engines/director/director.h
index c2c162d8d2..79a7d6a1ea 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -117,8 +117,8 @@ struct PaletteV4 {
 struct MacShape {
 	InkType ink;
 	byte spriteType;
-	byte foreColor;
-	byte backColor;
+	uint32 foreColor;
+	uint32 backColor;
 	int lineSize;
 	uint pattern;
 
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 710146c739..ba6a1d57de 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -881,13 +881,13 @@ bool TextCastMember::setField(int field, const Datum &d) {
 	switch (field) {
 	case kTheBackColor:
 		{
-			int color = g_director->transformColor(d.asInt());
+			uint32 color = g_director->transformColor(d.asInt());
 			setColors(nullptr, &color);
 		}
 		return true;
 	case kTheForeColor:
 		{
-			int color = g_director->transformColor(d.asInt());
+			uint32 color = g_director->transformColor(d.asInt());
 			setColors(&color, nullptr);
 		}
 		return true;


Commit: 7d7e482ce87aa7c530d00d33b4f8f7ab85d72c00
    https://github.com/scummvm/scummvm/commit/7d7e482ce87aa7c530d00d33b4f8f7ab85d72c00
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00

Commit Message:
DIRECTOR: More 32bpp work, images start to appear

Changed paths:
    engines/director/movie.h
    engines/director/window.cpp
    engines/director/window.h


diff --git a/engines/director/movie.h b/engines/director/movie.h
index 8164b547c8..3995a9c1ed 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -140,7 +140,7 @@ public:
 	Common::Point _lastClickPos;
 	uint32 _lastKeyTime;
 	uint32 _lastTimerReset;
-	uint16 _stageColor;
+	uint32 _stageColor;
 	Cast *_sharedCast;
 	bool _allowOutdatedLingo;
 
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 4771596803..35c0f71ae8 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -75,12 +75,21 @@ void Window::invertChannel(Channel *channel) {
 	Common::Rect destRect = channel->getBbox();
 
 	for (int i = 0; i < destRect.height(); i++) {
-		byte *src = (byte *)_composeSurface->getBasePtr(destRect.left, destRect.top + i);
-		const byte *msk = mask ? (const byte *)mask->getBasePtr(0, i) : nullptr;
+		if (_wm->_pixelformat.bytesPerPixel == 1) {
+			byte *src = (byte *)_composeSurface->getBasePtr(destRect.left, destRect.top + i);
+			const byte *msk = mask ? (const byte *)mask->getBasePtr(0, i) : nullptr;
 
-		for (int j = 0; j < destRect.width(); j++, src++)
-			if (!mask || (msk && !(*msk++)))
-				*src = ~(*src);
+			for (int j = 0; j < destRect.width(); j++, src++)
+				if (!mask || (msk && !(*msk++)))
+					*src = ~(*src);
+		} else {
+			uint32 *src = (uint32 *)_composeSurface->getBasePtr(destRect.left, destRect.top + i);
+			const uint32 *msk = mask ? (const uint32 *)mask->getBasePtr(0, i) : nullptr;
+
+			for (int j = 0; j < destRect.width(); j++, src++)
+				if (!mask || (msk && !(*msk++)))
+					*src = ~(*src);
+		}
 	}
 }
 
@@ -118,7 +127,7 @@ bool Window::render(bool forceRedraw, Graphics::ManagedSurface *blitTo) {
 	return true;
 }
 
-void Window::setStageColor(uint stageColor, bool forceReset) {
+void Window::setStageColor(uint32 stageColor, bool forceReset) {
 	if (stageColor != _stageColor || forceReset) {
 		_stageColor = stageColor;
 		reset();
@@ -228,13 +237,25 @@ void Window::inkBlitSurface(DirectorPlotData *pd, Common::Rect &srcRect, const G
 
 	pd->srcPoint.y = abs(srcRect.top - pd->destRect.top);
 	for (int i = 0; i < pd->destRect.height(); i++, pd->srcPoint.y++) {
-		pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
-		const byte *msk = mask ? (const byte *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
+		if (_wm->_pixelformat.bytesPerPixel == 1) {
+			pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
+			const byte *msk = mask ? (const byte *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
+
+			for (int j = 0; j < pd->destRect.width(); j++, pd->srcPoint.x++) {
+				if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
+					(g_director->getInkDrawPixel())(pd->destRect.left + j, pd->destRect.top + i,
+											preprocessColor(pd, *((byte *)pd->srf->getBasePtr(pd->srcPoint.x, pd->srcPoint.y))), pd);
+				}
+			}
+		} else {
+			pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
+			const uint32 *msk = mask ? (const uint32 *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
 
-		for (int j = 0; j < pd->destRect.width(); j++, pd->srcPoint.x++) {
-			if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
-				(g_director->getInkDrawPixel())(pd->destRect.left + j, pd->destRect.top + i,
-										 preprocessColor(pd, *((byte *)pd->srf->getBasePtr(pd->srcPoint.x, pd->srcPoint.y))), pd);
+			for (int j = 0; j < pd->destRect.width(); j++, pd->srcPoint.x++) {
+				if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
+					(g_director->getInkDrawPixel())(pd->destRect.left + j, pd->destRect.top + i,
+											preprocessColor(pd, *((uint32 *)pd->srf->getBasePtr(pd->srcPoint.x, pd->srcPoint.y))), pd);
+				}
 			}
 		}
 	}
@@ -254,19 +275,31 @@ void Window::inkBlitStretchSurface(DirectorPlotData *pd, Common::Rect &srcRect,
 	pd->srcPoint.y = abs(srcRect.top - pd->destRect.top);
 
 	for (int i = 0, scaleYCtr = 0; i < pd->destRect.height(); i++, scaleYCtr += scaleY, pd->srcPoint.y++) {
-		pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
-		const byte *msk = mask ? (const byte *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
+		if (_wm->_pixelformat.bytesPerPixel == 1) {
+			pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
+			const byte *msk = mask ? (const byte *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
+
+			for (int xCtr = 0, scaleXCtr = 0; xCtr < pd->destRect.width(); xCtr++, scaleXCtr += scaleX, pd->srcPoint.x++) {
+				if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
+				(g_director->getInkDrawPixel())(pd->destRect.left + xCtr, pd->destRect.top + i,
+										preprocessColor(pd, *((byte *)pd->srf->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD))), pd);
+				}
+			}
+		} else {
+			pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
+			const uint32 *msk = mask ? (const uint32 *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
 
-		for (int xCtr = 0, scaleXCtr = 0; xCtr < pd->destRect.width(); xCtr++, scaleXCtr += scaleX, pd->srcPoint.x++) {
-			if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
-			(g_director->getInkDrawPixel())(pd->destRect.left + xCtr, pd->destRect.top + i,
-									 preprocessColor(pd, *((byte *)pd->srf->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD))), pd);
+			for (int xCtr = 0, scaleXCtr = 0; xCtr < pd->destRect.width(); xCtr++, scaleXCtr += scaleX, pd->srcPoint.x++) {
+				if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
+				(g_director->getInkDrawPixel())(pd->destRect.left + xCtr, pd->destRect.top + i,
+										preprocessColor(pd, *((uint32 *)pd->srf->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD))), pd);
+				}
 			}
 		}
 	}
 }
 
-int Window::preprocessColor(DirectorPlotData *p, int src) {
+int Window::preprocessColor(DirectorPlotData *p, uint32 src) {
 	// HACK: Right now this method is just used for adjusting the colourization on text
 	// sprites, as it would be costly to colourize the chunks on the fly each
 	// time a section needs drawing. It's ugly but mostly works.
diff --git a/engines/director/window.h b/engines/director/window.h
index 25969b20b1..79dc8b04c8 100644
--- a/engines/director/window.h
+++ b/engines/director/window.h
@@ -95,8 +95,8 @@ class Window : public Graphics::MacWindow, public Object<Window> {
 	void invertChannel(Channel *channel);
 
 	bool needsAppliedColor(DirectorPlotData *pd);
-	void setStageColor(uint stageColor, bool forceReset = false);
-	int getStageColor() { return _stageColor; }
+	void setStageColor(uint32 stageColor, bool forceReset = false);
+	uint32 getStageColor() { return _stageColor; }
 
 	void reset();
 
@@ -170,7 +170,7 @@ public:
 	bool _newMovieStarted;
 
 private:
-	uint _stageColor;
+	uint32 _stageColor;
 
 	DirectorEngine *_vm;
 	bool _isStage;
@@ -185,7 +185,7 @@ private:
 	bool _titleVisible;
 
 private:
-	int preprocessColor(DirectorPlotData *p, int src);
+	int preprocessColor(DirectorPlotData *p, uint32 src);
 
 	void inkBlitFrom(Channel *channel, Common::Rect destRect, Graphics::ManagedSurface *blitTo = nullptr);
 	void inkBlitShape(DirectorPlotData *pd, Common::Rect &srcRect);




More information about the Scummvm-git-logs mailing list