aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Iskrich2016-06-30 23:15:23 +0300
committerEugene Sandulenko2016-08-03 23:40:36 +0200
commitb460a7c03601952e4e60c565893bdaf90ae92f33 (patch)
treedc9ee5ce6b84f0afa1dc29d74f638fd67b2e29cd
parent0f58203c021512396d8e3a32ada41f49eb0e1880 (diff)
downloadscummvm-rg350-b460a7c03601952e4e60c565893bdaf90ae92f33.tar.gz
scummvm-rg350-b460a7c03601952e4e60c565893bdaf90ae92f33.tar.bz2
scummvm-rg350-b460a7c03601952e4e60c565893bdaf90ae92f33.zip
DIRECTOR: Calculate values for text rendering
-rw-r--r--engines/director/director.cpp5
-rw-r--r--engines/director/score.cpp30
-rw-r--r--engines/director/score.h3
3 files changed, 34 insertions, 4 deletions
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index c7ae940873..a6422df519 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -201,7 +201,6 @@ end repeat\n\
//FIXME
_mainArchive = new RIFFArchive();
_mainArchive->openFile("bookshelf_example.mmm");
-
_currentScore = new Score(this);
debug(0, "Score name %s", _currentScore->getMacName().c_str());
@@ -415,15 +414,17 @@ void DirectorEngine::loadSharedCastsFrom(Common::String filename) {
if (dib.size() != 0) {
Common::Array<uint16>::iterator iterator;
for (iterator = dib.begin(); iterator != dib.end(); ++iterator) {
+ debug(3, "Shared DIB %d", *iterator);
_sharedDIB->setVal(*iterator, shardcst->getResource(MKTAG('D','I','B',' '), *iterator));
}
}
- Common::Array<uint16> stxt = shardcst->getResourceIDList(MKTAG('D','I','B',' '));
+ Common::Array<uint16> stxt = shardcst->getResourceIDList(MKTAG('S','T','X','T'));
if (stxt.size() != 0) {
Common::Array<uint16>::iterator iterator;
for (iterator = stxt.begin(); iterator != stxt.end(); ++iterator) {
+ debug(3, "Shared STXT %d", *iterator);
_sharedSTXT->setVal(*iterator, shardcst->getResource(MKTAG('S','T','X','T'), *iterator));
}
}
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 6b9cdb293a..c799eef6d8 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1240,7 +1240,35 @@ Image::ImageDecoder *Frame::getImageFrom(uint16 spriteId) {
void Frame::renderText(Graphics::ManagedSurface &surface, uint16 spriteID) {
- warning("STUB: renderText()");
+ Cast *textCast = _vm->_currentScore->_casts[_sprites[spriteID]->_castId];
+ Common::SeekableSubReadStreamEndian *textStream;
+
+ if (_vm->_currentScore->_movieArchive->hasResource(MKTAG('S','T','X','T'), spriteID + 1024)) {
+ textStream = _vm->_currentScore->_movieArchive->getResource(MKTAG('S','T','X','T'), spriteID + 1024);
+ } else {
+ textStream = _vm->getSharedSTXT()->getVal(spriteID + 1024);
+ }
+ /*uint32 unk1 = */ textStream->readUint32();
+ uint32 strLen = textStream->readUint32();
+ /*uin32 dataLen = */ textStream->readUint32();
+ Common::String text;
+
+ for (uint32 i = 0; i < strLen; i++) {
+ byte ch = textStream->readByte();
+ if (ch == 0x0d) {
+ ch = '\n';
+ }
+ text += ch;
+ }
+
+ uint32 rectLeft = static_cast<TextCast *>(_sprites[spriteID]->_cast)->initialRect.left;
+ uint32 rectTop = static_cast<TextCast *>(_sprites[spriteID]->_cast)->initialRect.top;
+
+ int x = _sprites[spriteID]->_startPoint.x + rectLeft;
+ int y = _sprites[spriteID]->_startPoint.y + rectTop;
+ int height = _sprites[spriteID]->_height;
+ int width = _sprites[spriteID]->_width;
+ //TODO render text
}
void Frame::drawBackgndTransSprite(Graphics::ManagedSurface &target, const Graphics::Surface &sprite, Common::Rect &drawRect) {
diff --git a/engines/director/score.h b/engines/director/score.h
index 9f13df77f6..b616e11ff0 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -30,6 +30,7 @@
#include "graphics/managed_surface.h"
#include "common/str.h"
#include "image/image_decoder.h"
+#include "graphics/font.h"
namespace Director {
@@ -290,7 +291,6 @@ public:
Frame(DirectorEngine *vm);
Frame(const Frame &frame);
~Frame();
-
void readChannel(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size);
void prepareFrame(Score *score);
uint16 getSpriteIDFromPos(Common::Point pos);
@@ -378,6 +378,7 @@ public:
Common::HashMap<uint16, Common::String> _fontMap;
Graphics::ManagedSurface *_surface;
Graphics::ManagedSurface *_trailSurface;
+ Graphics::Font *_font;
Archive *_movieArchive;
Common::Rect _movieRect;