[Scummvm-git-logs] scummvm master -> 5dc90a8a0111b946c3bd8017bacfcf2c4fb1bb94

sev- noreply at scummvm.org
Sat Feb 21 21:19:00 UTC 2026


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

Summary:
5dc90a8a01 DIRECTOR: Improve ink processing for text cast member


Commit: 5dc90a8a0111b946c3bd8017bacfcf2c4fb1bb94
    https://github.com/scummvm/scummvm/commit/5dc90a8a0111b946c3bd8017bacfcf2c4fb1bb94
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-02-21T22:17:54+01:00

Commit Message:
DIRECTOR: Improve ink processing for text cast member

Now shapes are better but colors are wrong in all blend modes

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


diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 7d897a69ffe..3a8747306b9 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -138,11 +138,23 @@ DirectorPlotData Channel::getPlotData() {
 
 	pd.srfMask = nullptr;
 	if (_sprite->_cast && _sprite->_cast->_type == kCastText) {
-		if (_sprite->_ink == kInkTypeMatte) { // TODO: Other types also require it
+		// kInkTypeCopy -- no mask, default rendering
+		// kInkTypeBlend -- no output?
+
+		if (_sprite->_ink == kInkTypeMatte || _sprite->_ink == kInkTypeNotCopy
+			|| _sprite->_ink == kInkTypeNotTrans || _sprite->_ink == kInkTypeNotReverse
+			|| _sprite->_ink == kInkTypeNotGhost || _sprite->_ink == kInkTypeAdd
+			|| _sprite->_ink == kInkTypeAddPin || _sprite->_ink == kInkTypeSub
+			|| _sprite->_ink == kInkTypeSubPin || _sprite->_ink == kInkTypeLight) { // TODO: Other types also require it
 			Graphics::MacText *widget = ((TextCastMember *)_sprite->_cast)->getWidget();
-			if (widget) {
+			if (widget)
 				pd.srfMask = widget->getCharBoxMask();
-			}
+		} else if (_sprite->_ink == kInkTypeTransparent || _sprite->_ink == kInkTypeBackgndTrans
+				|| _sprite->_ink == kInkTypeReverse || _sprite->_ink == kInkTypeGhost
+				|| _sprite->_ink == kInkTypeMask || _sprite->_ink == kInkTypeDark) {
+			Graphics::MacText *widget = ((TextCastMember *)_sprite->_cast)->getWidget();
+			if (widget)
+				pd.srfMask = widget->getGlyphMask();
 		}
 	}
 
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 19bdf9f37ca..6ceb3697fe4 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -356,12 +356,17 @@ void InkPrimitives<T>::drawPoint(int x, int y, uint32 src, void *data) {
 
  	switch (p->ink) {
 	case kInkTypeBackgndTrans:
-		if (p->oneBitImage) {
-			// One-bit images have a slightly different rendering algorithm for BackgndTrans.
-			// Foreground colour is used, and background colour is ignored.
-			*dst = (src == p->colorBlack) ? p->foreColor : *dst;
+		if (p->srfMask) {
+			// If there's a mask, we already dealing with transparency, so just copy the pixel.
+			 *dst = src;
 		} else {
-			*dst = (src == p->backColor) ? *dst : src;
+			if (p->oneBitImage) {
+				// One-bit images have a slightly different rendering algorithm for BackgndTrans.
+				// Foreground colour is used, and background colour is ignored.
+				*dst = (src == p->colorBlack) ? p->foreColor : *dst;
+			} else {
+				*dst = (src == p->backColor) ? *dst : src;
+			}
 		}
 		break;
 	case kInkTypeMatte:




More information about the Scummvm-git-logs mailing list