[Scummvm-git-logs] scummvm master -> d3434050bf578964fdac364242c1a720bfb55e42

npjg nathanael.gentrydb8 at gmail.com
Fri Jun 12 15:00:16 UTC 2020


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

Summary:
d3434050bf DIRECTOR: Properly handle text cast background colour


Commit: d3434050bf578964fdac364242c1a720bfb55e42
    https://github.com/scummvm/scummvm/commit/d3434050bf578964fdac364242c1a720bfb55e42
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-12T11:00:10-04:00

Commit Message:
DIRECTOR: Properly handle text cast background colour

Changed paths:
    engines/director/cast.cpp
    engines/director/cast.h
    engines/director/ink.cpp
    engines/director/score-loading.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index a6c39fcc94..d327e64a74 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -158,10 +158,9 @@ SoundCast::SoundCast(Common::ReadStreamEndian &stream, uint16 version) {
 	}
 }
 
-TextCast::TextCast(Common::ReadStreamEndian &stream, uint16 version, int32 bgcolor, bool asButton) {
+TextCast::TextCast(Common::ReadStreamEndian &stream, uint16 version, bool asButton) {
 	_type = kCastText;
 
-	_bgcolor = bgcolor;
 	_borderSize = kSizeNone;
 	_gutterSize = kSizeNone;
 	_boxShadow = kSizeNone;
@@ -175,7 +174,7 @@ TextCast::TextCast(Common::ReadStreamEndian &stream, uint16 version, int32 bgcol
 	_textAlign = kTextAlignLeft;
 	_textShadow = kSizeNone;
 	_textSlant = 0;
-	_palinfo1 = _palinfo2 = _palinfo3 = 0;
+	_bgpalinfo1 = _bgpalinfo2 = _bgpalinfo3 = 0;
 
 	if (version <= 3) {
 		_flags = stream.readByte(); // region: 0 - auto, 1 - matte, 2 - disabled
@@ -184,11 +183,9 @@ TextCast::TextCast(Common::ReadStreamEndian &stream, uint16 version, int32 bgcol
 		_boxShadow = static_cast<SizeType>(stream.readByte());
 		byte pad1 = stream.readByte();
 		_textAlign = static_cast<TextAlignType>(stream.readUint16());
-		_palinfo1 = stream.readUint16();
-		_palinfo2 = stream.readUint16();
-		_palinfo3 = stream.readUint16();
-
-		_bgcolor = g_director->_wm->findBestColor(_palinfo1 & 0xff, _palinfo2 & 0xff, _palinfo3 & 0xff);
+		_bgpalinfo1 = stream.readUint16();
+		_bgpalinfo2 = stream.readUint16();
+		_bgpalinfo3 = stream.readUint16();
 
 		uint32 pad2;
 		uint16 pad3;
@@ -220,8 +217,8 @@ TextCast::TextCast(Common::ReadStreamEndian &stream, uint16 version, int32 bgcol
 
 		debugC(2, kDebugLoading, "TextCast(): flags1: %d, border: %d gutter: %d shadow: %d pad1: %x align: %04x",
 				_flags, _borderSize, _gutterSize, _boxShadow, pad1, _textAlign);
-		debugC(2, kDebugLoading, "TextCast(): rgb: 0x%04x 0x%04x 0x%04x, pad2: %x pad3: %d pad4: %d shadow: %d flags: %d totHeight: %d",
-				_palinfo1, _palinfo2, _palinfo3, pad2, pad3, pad4, _textShadow, _textFlags, totalTextHeight);
+		debugC(2, kDebugLoading, "TextCast(): background rgb: 0x%04x 0x%04x 0x%04x, pad2: %x pad3: %d pad4: %d shadow: %d flags: %d totHeight: %d",
+				_bgpalinfo1, _bgpalinfo2, _bgpalinfo3, pad2, pad3, pad4, _textShadow, _textFlags, totalTextHeight);
 		if (debugChannelSet(2, kDebugLoading)) {
 			_initialRect.debugPrint(2, "TextCast(): rect:");
 		}
@@ -231,9 +228,9 @@ TextCast::TextCast(Common::ReadStreamEndian &stream, uint16 version, int32 bgcol
 		_boxShadow = static_cast<SizeType>(stream.readByte());
 		_textType = static_cast<TextType>(stream.readByte());
 		_textAlign = static_cast<TextAlignType>(stream.readSint16()); // this is because 'right' is -1? or should that be 255?
-		stream.readUint16();
-		stream.readUint16();
-		stream.readUint16();
+		_bgpalinfo1 = stream.readUint16();
+		_bgpalinfo2 = stream.readUint16();
+		_bgpalinfo3 = stream.readUint16();
 		stream.readUint16();
 
 		_fontId = 1; // this is in STXT
@@ -307,13 +304,21 @@ Graphics::TextAlign TextCast::getAlignment() {
 	}
 }
 
+uint TextCast::getForeColor() {
+	return g_director->_wm->findBestColor(_fgpalinfo1 & 0xff, _fgpalinfo2 & 0xff, _fgpalinfo3 & 0xff);
+}
+
+uint TextCast::getBackColor() {
+	return g_director->_wm->findBestColor(_bgpalinfo1 & 0xff, _bgpalinfo2 & 0xff, _bgpalinfo3 & 0xff);
+}
+
 void TextCast::importStxt(const Stxt *stxt) {
 	_fontId = stxt->_fontId;
 	_textSlant = stxt->_textSlant;
 	_fontSize = stxt->_fontSize;
-	_palinfo1 = stxt->_palinfo1;
-	_palinfo2 = stxt->_palinfo2;
-	_palinfo3 = stxt->_palinfo3;
+	_fgpalinfo1 = stxt->_palinfo1;
+	_fgpalinfo2 = stxt->_palinfo2;
+	_fgpalinfo3 = stxt->_palinfo3;
 	_ftext = stxt->_ftext;
 	_ptext = stxt->_ptext;
 }
@@ -321,19 +326,17 @@ void TextCast::importStxt(const Stxt *stxt) {
 void TextCast::createWidget() {
 	Cast::createWidget();
 
-	uint fgcolor = g_director->_wm->findBestColor(_palinfo1 & 0xff, _palinfo2 & 0xff, _palinfo3 & 0xff);
-
 	Graphics::MacFont *macFont = new Graphics::MacFont(_fontId, _fontSize, _textSlant);
 
 	switch (_type) {
 	case kCastText:
-		_widget = new Graphics::MacEditableText(g_director->getCurrentScore()->_window, 0, 0, _initialRect.width(), _initialRect.height(), g_director->_wm, _ftext, macFont, fgcolor, _bgcolor, _initialRect.width(), getAlignment(), 1, _borderSize, _gutterSize, _boxShadow, _textShadow);
+		_widget = new Graphics::MacEditableText(g_director->getCurrentScore()->_window, 0, 0, _initialRect.width(), _initialRect.height(), g_director->_wm, _ftext, macFont, getForeColor(), getBackColor(), _initialRect.width(), getAlignment(), 1, _borderSize, _gutterSize, _boxShadow, _textShadow);
 
 		((Graphics::MacEditableText *)_widget)->draw();
 		break;
 
 	case kCastButton:
-		_widget = new Graphics::MacButton(Graphics::MacButtonType(_buttonType), getAlignment(), g_director->getCurrentScore()->_window, 0, 0, _initialRect.width(), _initialRect.height(), g_director->_wm, _ftext, macFont, fgcolor, _bgcolor);
+		_widget = new Graphics::MacButton(Graphics::MacButtonType(_buttonType), getAlignment(), g_director->getCurrentScore()->_window, 0, 0, _initialRect.width(), _initialRect.height(), g_director->_wm, _ftext, macFont, getForeColor(), 0xff);
 		((Graphics::MacButton *)_widget)->draw();
 		_widget->_focusable = true;
 
@@ -518,7 +521,7 @@ ScriptCast::ScriptCast(Common::ReadStreamEndian &stream, uint16 version) {
 	}
 }
 
-RTECast::RTECast(Common::ReadStreamEndian &stream, uint16 version, int32 bgcolor) : TextCast(stream, version, bgcolor) {
+RTECast::RTECast(Common::ReadStreamEndian &stream, uint16 version) : TextCast(stream, version) {
 
 	_type = kCastRTE;
 }
diff --git a/engines/director/cast.h b/engines/director/cast.h
index 1080b0ce8e..1cc8a5484c 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -115,7 +115,7 @@ public:
 
 class TextCast : public Cast {
 public:
-	TextCast(Common::ReadStreamEndian &stream, uint16 version, int32 bgcolor, bool asButton = false);
+	TextCast(Common::ReadStreamEndian &stream, uint16 version, bool asButton = false);
 
 	void setText(const char *text);
 	virtual void createWidget() override;
@@ -125,6 +125,9 @@ public:
 	virtual bool setEditable(bool editable) override;
 	Graphics::TextAlign getAlignment();
 
+	uint getBackColor();
+	uint getForeColor();
+
 	SizeType _borderSize;
 	SizeType _gutterSize;
 	SizeType _boxShadow;
@@ -137,8 +140,8 @@ public:
 	SizeType _textShadow;
 	byte _textSlant;
 	byte _textFlags;
-	uint16 _palinfo1, _palinfo2, _palinfo3;
-	int32 _bgcolor;
+	uint16 _bgpalinfo1, _bgpalinfo2, _bgpalinfo3;
+	uint16 _fgpalinfo1, _fgpalinfo2, _fgpalinfo3;
 	ButtonType _buttonType;
 
 	Common::String _ftext;
@@ -159,7 +162,7 @@ public:
 
 class RTECast : public TextCast {
 public:
-	RTECast(Common::ReadStreamEndian &stream, uint16 version, int32 bgcolor);
+	RTECast(Common::ReadStreamEndian &stream, uint16 version);
 
 	void loadChunks();
 };
diff --git a/engines/director/ink.cpp b/engines/director/ink.cpp
index 9c2dfccacf..52a71e8a09 100644
--- a/engines/director/ink.cpp
+++ b/engines/director/ink.cpp
@@ -66,7 +66,7 @@ void Score::inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::
 void Score::drawBackgndTransSprite(const Graphics::Surface &sprite, Common::Rect &drawRect, int spriteId) {
 	byte skipColor = _sprites[spriteId]->_backColor;
 	if (_sprites[spriteId]->_castType == kCastText && _sprites[spriteId]->_cast) {
-		skipColor = ((TextCast *)_sprites[spriteId]->_cast)->_bgcolor;
+		skipColor = ((TextCast *)_sprites[spriteId]->_cast)->getBackColor();
 	}
 
 	Common::Rect srcRect(sprite.w, sprite.h);
diff --git a/engines/director/score-loading.cpp b/engines/director/score-loading.cpp
index 8006429277..8c2bfe87eb 100644
--- a/engines/director/score-loading.cpp
+++ b/engines/director/score-loading.cpp
@@ -648,7 +648,7 @@ void Score::loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream) {
 			break;
 		case kCastText:
 			debugC(3, kDebugLoading, "Score::loadCastDataVWCR(): CastTypes id: %d(%s) TextCast", id, numToCastNum(id));
-			_loadedCast->setVal(id, new TextCast(stream, _vm->getVersion(), _stageColor));
+			_loadedCast->setVal(id, new TextCast(stream, _vm->getVersion()));
 			break;
 		case kCastShape:
 			debugC(3, kDebugLoading, "Score::loadCastDataVWCR(): CastTypes id: %d(%s) ShapeCast", id, numToCastNum(id));
@@ -656,7 +656,7 @@ void Score::loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream) {
 			break;
 		case kCastButton:
 			debugC(3, kDebugLoading, "Score::loadCastDataVWCR(): CastTypes id: %d(%s) ButtonCast", id, numToCastNum(id));
-			_loadedCast->setVal(id, new TextCast(stream, _vm->getVersion(), 0xff, true));
+			_loadedCast->setVal(id, new TextCast(stream, _vm->getVersion(), true));
 			break;
 		default:
 			warning("Score::loadCastDataVWCR(): Unhandled cast id: %d(%s), type: %d, %d bytes", id, numToCastNum(id), castType, size);
@@ -764,7 +764,7 @@ void Score::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 		break;
 	case kCastText:
 		debugC(3, kDebugLoading, "Score::loadCastData(): loading kCastText (%d children)", res->children.size());
-		_loadedCast->setVal(id, new TextCast(castStream, _vm->getVersion(), _stageColor));
+		_loadedCast->setVal(id, new TextCast(castStream, _vm->getVersion()));
 		break;
 	case kCastShape:
 		debugC(3, kDebugLoading, "Score::loadCastData(): loading kCastShape (%d children)", res->children.size());
@@ -772,7 +772,7 @@ void Score::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 		break;
 	case kCastButton:
 		debugC(3, kDebugLoading, "Score::loadCastData(): loading kCastButton (%d children)", res->children.size());
-		_loadedCast->setVal(id, new TextCast(castStream, _vm->getVersion(), 0xff, true));
+		_loadedCast->setVal(id, new TextCast(castStream, _vm->getVersion(), true));
 		break;
 	case kCastLingoScript:
 		debugC(3, kDebugLoading, "Score::loadCastData(): loading kCastLingoScript");
@@ -780,7 +780,7 @@ void Score::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id,
 		break;
 	case kCastRTE:
 		debugC(3, kDebugLoading, "Score::loadCastData(): loading kCastRTE (%d children)", res->children.size());
-		_loadedCast->setVal(id, new RTECast(castStream, _vm->getVersion(), _stageColor));
+		_loadedCast->setVal(id, new RTECast(castStream, _vm->getVersion()));
 		break;
 	case kCastFilmLoop:
 		warning("STUB: Score::loadCastData(): kCastFilmLoop (%d children)", res->children.size());




More information about the Scummvm-git-logs mailing list