[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