aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2017-01-29 00:54:03 +0100
committerEugene Sandulenko2017-01-29 00:54:31 +0100
commit9dac440d3be105911c0fc197e760db96aa729b16 (patch)
treee9e75fcbbfe87a485fe3138ad4a0f1243f32e2ea
parente9bd946043a4ba8ef65fb712d5d05c18cd71d6d9 (diff)
downloadscummvm-rg350-9dac440d3be105911c0fc197e760db96aa729b16.tar.gz
scummvm-rg350-9dac440d3be105911c0fc197e760db96aa729b16.tar.bz2
scummvm-rg350-9dac440d3be105911c0fc197e760db96aa729b16.zip
DIRECTOR: Pass font formatting info to MacText
-rw-r--r--engines/director/frame.cpp29
1 files changed, 28 insertions, 1 deletions
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 402056ad20..e47214d703 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -823,11 +823,15 @@ void Frame::renderText(Graphics::ManagedSurface &surface, uint16 spriteId, Commo
text += ch;
}
+ Common::String ftext;
+
debugC(3, kDebugText, "renderText: unk1: %d strLen: %d dataLen: %d textlen: %u", unk1, strLen, dataLen, text.size());
if (strLen < 200)
debugC(3, kDebugText, "text: '%s'", text.c_str());
uint16 formattingCount = textStream->readUint16();
+ uint32 prevPos = 0;
+
while (formattingCount) {
uint32 formatStartOffset = textStream->readUint32();
uint16 unk1f = textStream->readUint16();
@@ -848,9 +852,32 @@ void Frame::renderText(Graphics::ManagedSurface &surface, uint16 spriteId, Commo
debugC(3, kDebugText, " unk3: %d, fontSize: %d, p0: %x p1: %x p2: %x", unk3f, textCast->fontSize,
textCast->palinfo1, textCast->palinfo2, textCast->palinfo3);
+ assert (prevPos <= formatStartOffset); // If this is triggered, we have to implement sorting
+
+ while (prevPos != formatStartOffset) {
+ char f = text.firstChar();
+ ftext += text.firstChar();
+ text.deleteChar(0);
+
+ if (f == '\001') // Insert two \001s as a replacement
+ ftext += '\001';
+
+ prevPos++;
+ }
+
+ ftext += Common::String::format("\001\015%c%c%c%c%c%c%c%c%c%c%c%c",
+ (textCast->fontId >> 8) & 0xff, textCast->fontId & 0xff,
+ textCast->textSlant & 0xff, unk3f & 0xff,
+ (textCast->fontSize >> 8) & 0xff, textCast->fontSize & 0xff,
+ (textCast->palinfo1 >> 8) & 0xff, textCast->palinfo1 & 0xff,
+ (textCast->palinfo2 >> 8) & 0xff, textCast->palinfo2 & 0xff,
+ (textCast->palinfo3 >> 8) & 0xff, textCast->palinfo3 & 0xff);
+
formattingCount--;
}
+ ftext += text;
+
uint16 boxShadow = (uint16)textCast->boxShadow;
uint16 borderSize = (uint16)textCast->borderSize;
uint16 padding = (uint16)textCast->gutterSize;
@@ -887,7 +914,7 @@ void Frame::renderText(Graphics::ManagedSurface &surface, uint16 spriteId, Commo
else
alignment++;
- Graphics::MacText mt(text, font, 0x00, 0xff, width, (Graphics::TextAlign)alignment);
+ Graphics::MacText mt(ftext, font, 0x00, 0xff, width, (Graphics::TextAlign)alignment);
mt.setInterLinear(1);
mt.render();
const Graphics::ManagedSurface *textSurface = mt.getSurface();