[Scummvm-git-logs] scummvm master -> 82b0936a5479493d1790314a982c8722ce1cdf04

sev- noreply at scummvm.org
Fri Feb 20 22:51:43 UTC 2026


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

Summary:
05dbeff45a GRAPHICS: MACGUI: Fixed MacText dumping debug code
82b0936a54 DIRECTOR: Correctly draw matt Text castmembers


Commit: 05dbeff45a623e5ba6e126b9baa52bc169e58d10
    https://github.com/scummvm/scummvm/commit/05dbeff45a623e5ba6e126b9baa52bc169e58d10
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-02-20T23:51:19+01:00

Commit Message:
GRAPHICS: MACGUI: Fixed MacText dumping debug code

Changed paths:
    graphics/macgui/mactext.cpp


diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index a42516edb0f..12d859e2b1e 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -25,6 +25,8 @@
 
 #include "graphics/macgui/mactext.h"
 
+#include "image/png.h"
+
 namespace Graphics {
 
 enum {
@@ -643,11 +645,37 @@ void MacText::render() {
 		_fullRefresh = false;
 
 #if 0
+		byte pal[256 * 3];
 		Common::DumpFile out;
-		Common::String filename = Common::String::format("z-%p.png", (void *)this);
+		Common::Path filename(Common::String::format("z-%p-1-image.png", (void *)this));
+		if (out.open(filename)) {
+			warning("Wrote: %s", filename.toString().c_str());
+			_canvas._surface->grabPalette(pal, 0, 256);
+			Image::writePNG(out, _canvas._surface->rawSurface(), pal);
+			out.flush();
+			out.close();
+		}
+
+		// set b/w palette for mask
+		memset(pal, 0, sizeof(pal));
+		pal[0xff * 3 + 0] = 0xff;
+		pal[0xff * 3 + 1] = 0xff;
+		pal[0xff * 3 + 2] = 0xff;
+
+		filename = Common::Path(Common::String::format("z-%p-2-glyphMask.png", (void *)this));
+		if (out.open(filename)) {
+			warning("Wrote: %s", filename.toString().c_str());
+			Image::writePNG(out, _canvas._glyphMask->rawSurface(), pal);
+			out.flush();
+			out.close();
+		}
+
+		filename = Common::Path(Common::String::format("z-%p-3-charBoxMask.png", (void *)this));
 		if (out.open(filename)) {
-			warning("Wrote: %s", filename.c_str());
-			Image::writePNG(out, _canvas._surface->rawSurface());
+			warning("Wrote: %s", filename.toString().c_str());
+			Image::writePNG(out, _canvas._charBoxMask->rawSurface(), pal);
+			out.flush();
+			out.close();
 		}
 #endif
 	}


Commit: 82b0936a5479493d1790314a982c8722ce1cdf04
    https://github.com/scummvm/scummvm/commit/82b0936a5479493d1790314a982c8722ce1cdf04
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-02-20T23:51:19+01:00

Commit Message:
DIRECTOR: Correctly draw matt Text castmembers

Partially fixes bug #16282, overridden score in MILKBOTT.DIR in mode 2

More work still required for other ink types, also we
do not have proper line spacing rendered

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


diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index adfa14aac13..7d897a69ffe 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -33,6 +33,7 @@
 #include "director/castmember/digitalvideo.h"
 #include "director/castmember/filmloop.h"
 #include "director/castmember/movie.h"
+#include "director/castmember/text.h"
 
 #include "graphics/macgui/mactext.h"
 #include "graphics/macgui/macbutton.h"
@@ -135,6 +136,16 @@ DirectorPlotData Channel::getPlotData() {
 		pd.setApplyColor();
 	}
 
+	pd.srfMask = nullptr;
+	if (_sprite->_cast && _sprite->_cast->_type == kCastText) {
+		if (_sprite->_ink == kInkTypeMatte) { // TODO: Other types also require it
+			Graphics::MacText *widget = ((TextCastMember *)_sprite->_cast)->getWidget();
+			if (widget) {
+				pd.srfMask = widget->getCharBoxMask();
+			}
+		}
+	}
+
 	return pd;
 }
 
diff --git a/engines/director/director.h b/engines/director/director.h
index 902b0fb7794..0d4d2fbbe2a 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -355,6 +355,7 @@ struct DirectorPlotData {
 	Common::Point srcPoint;
 
 	Graphics::ManagedSurface *srf = nullptr;
+	Graphics::ManagedSurface *srfMask = nullptr;
 	MacShape *ms = nullptr;
 
 	SpriteType sprite = kInactiveSprite;
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 08b676d916e..19bdf9f37ca 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -715,6 +715,9 @@ void DirectorPlotData::inkBlitSurface(Common::Rect &srcRect, const Graphics::Sur
 	if (!srf)
 		return;
 
+	if (mask && srfMask)
+		error("DirectorPlotData::inkBlitSurface: Masking not supported on surfaces with separate mask");
+
 	// TODO: Determine why colourization causes problems in Warlock
 	if (sprite == kTextSprite || sprite == kButtonSprite || sprite == kCheckboxSprite || sprite == kRadioButtonSprite)
 		applyColor = false;
@@ -754,13 +757,16 @@ void DirectorPlotData::inkBlitSurface(Common::Rect &srcRect, const Graphics::Sur
 		srcPoint.x = abs(srcRect.left - destRect.left);
 		const byte *msk = mask ? (const byte *)mask->getBasePtr(srcPoint.x, srcPoint.y) : nullptr;
 
+		if (srfMask)
+			msk = (const byte *)srfMask->getBasePtr(srcPoint.x, srcPoint.y);
+
 		for (int j = 0; j < destRect.width(); j++, srcPoint.x++) {
 			if (!srfClip.contains(srcPoint)) {
 				failedBoundsCheck = true;
 				continue;
 			}
 
-			if (!mask || (msk && (*msk++))) {
+			if (!(mask || srfMask) || (msk && (*msk++))) {
 				if (d->_wm->_pixelformat.bytesPerPixel == 1) {
 					primitives->drawPoint(destRect.left + j, destRect.top + i,
 										preprocessColor(*((byte *)srf->getBasePtr(srcPoint.x, srcPoint.y))), this);
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 0c587b2fe25..3834bace3b2 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -383,9 +383,10 @@ void Window::inkBlitFrom(Channel *channel, Common::Rect destRect, Graphics::Mana
 	pd.destRect = destRect;
 	pd.dst = blitTo;
 
+	CastType castType = channel->_sprite->_cast ? channel->_sprite->_cast->_type : kCastTypeNull;
+
 	uint32 renderStartTime = 0;
 	if (debugChannelSet(8, kDebugImages)) {
-		CastType castType = channel->_sprite->_cast ? channel->_sprite->_cast->_type : kCastTypeNull;
 		debugC(8, kDebugImages, "Window::inkBlitFrom(): updating %dx%d @ %d,%d -> %dx%d @ %d,%d, type: %s, cast: %s, ink: %d",
 				srcRect.width(), srcRect.height(), srcRect.left, srcRect.top,
 				destRect.width(), destRect.height(), destRect.left, destRect.top,
@@ -400,7 +401,6 @@ void Window::inkBlitFrom(Channel *channel, Common::Rect destRect, Graphics::Mana
 		pd.inkBlitSurface(srcRect, channel->getMask());
 	} else {
 		if (debugChannelSet(4, kDebugImages)) {
-			CastType castType = channel->_sprite->_cast ? channel->_sprite->_cast->_type : kCastTypeNull;
 			warning("Window::inkBlitFrom(): No source surface: spriteType: %d (%s), castType: %d (%s), castId: %s",
 				channel->_sprite->_spriteType, spriteType2str(channel->_sprite->_spriteType), castType, castType2str(castType),
 				channel->_sprite->_castId.asString().c_str());




More information about the Scummvm-git-logs mailing list