diff options
| author | Dmitry Iskrich | 2016-06-30 23:15:23 +0300 | 
|---|---|---|
| committer | Eugene Sandulenko | 2016-08-03 23:40:36 +0200 | 
| commit | b460a7c03601952e4e60c565893bdaf90ae92f33 (patch) | |
| tree | dc9ee5ce6b84f0afa1dc29d74f638fd67b2e29cd | |
| parent | 0f58203c021512396d8e3a32ada41f49eb0e1880 (diff) | |
| download | scummvm-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.cpp | 5 | ||||
| -rw-r--r-- | engines/director/score.cpp | 30 | ||||
| -rw-r--r-- | engines/director/score.h | 3 | 
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; | 
