[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