[Scummvm-git-logs] scummvm master -> 0d7c1a51b2c1020fdc354d0975841614d0f54900
sev-
sev at scummvm.org
Thu Jul 8 00:25:37 UTC 2021
This automated email contains information about 36 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
4aace40b6c DIRECTOR: don't apply effects when we are drawing invisible rectangles. i.e. return directly.
010c724971 DIRECTOR: modify the way we are inverting the channel
5d4b11c198 DIRECTOR: introduce partial invertion to resolve render invert channel problem
ee2077b63d DIRECTOR: skip the compression when we have exactly number of what we need for image in D2
327b73b23a DIRECTOR: if we have pic size bigger than we want, then we won't regard it as RLE compression
b04c96d401 DIRECTOR: scale the bitmap castmember when we are drawing a smaller sprite
048585abca DIRECTOR: scale the registrationOffset when we are scaling the bitcast
f9de2bad63 DIRECTOR: use channel's original dims instread of initialRect for bitmap castmember
ef2b6cc934 DIRECTOR: add 32 bit support for scaling bitmap castmember
330d3b4dc5 DIRECTOR: enforce to replace widget when we have dims changed
8c792cd2a4 DIRECTOR: set the newSprite to reset the currentpoint when we are changing the widget.
8d270071cf DIRECTOR: don't draw outline shape when we get linesize < 0
d53064f948 DIRECTOR: amend setting dims for bitmap cast member
13f5460ca4 DIRECTOR: only use the original sprites when we have to scale down the bitmap cast member
111726031d DIRECTOR: set currentChannelId to 0 for script channel scripts.
bb456a64d2 DIRECTOR: switch to next frame when we are calling play done at script channel scripts.
6593d125b0 DIRECTOR: read rect dims as signed number instead of unsigned
a841358e69 DIRECTOR: implement some basic field operations for text cast
60c0e78d95 GRAPHICS: MACGUI: add line spacing for mactext
1492a06a84 GRAPHICS: MACGUI: amend interLinear for mactext
8c70bab234 DIRECTOR: implement linespacing for text castmember, set line spacing default to 1 in D4
56fad1585b DIRECTOR: implement setting text size for text cast member
42aa4739f8 DIRECTOR: implement chunk field operations for text cast member
6e2a8fc08f GRAPHICS: MACGUI: implement setting text slant and text fontId of text chunks
dc41917a74 DIRECTOR: implement text chunk fields operations
4add086365 DIRECTOR: create a stub for fplay
d8d43958e8 DIRECTOR: use initialRect for sprite dims when ink type is copy
6c8d4f3367 DIRECTOR: force to modify sprite dims when we are setting cast though lingo
629ee4bfa3 DIRECTOR: Don't skip the compression when _bitsPerPixel == 1
b152fc82aa DIRECTOR: amend setting sprites dims.
1b6f29b63a DIRECTOR: clean the surface after playing transitions
d92c06617b DIRECTOR: fixing createQDMatte
4ba52620e5 DIRECTOR: delete creating quick matte.
fcd8703356 DIRECTOR: regard 0 as the default palette
2ef52a07cb DIRECTOR: amend the way we are parsing palette for D2
0d7c1a51b2 DIRECTOR: amend resolvePaletteId.
Commit: 4aace40b6c6943ce0df4f83110b2bc03da66181e
https://github.com/scummvm/scummvm/commit/4aace40b6c6943ce0df4f83110b2bc03da66181e
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: don't apply effects when we are drawing invisible rectangles. i.e. return directly.
Changed paths:
engines/director/graphics.cpp
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 920292633e..09b201b13d 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -155,7 +155,10 @@ void inkDrawPixel(int x, int y, int src, void *data) {
if (p->ms) {
// Get the pixel that macDrawPixel will give us, but store it to apply the
- // ink later.
+ // ink later
+ // if we have lineSize <= 0, means we are not drawing anything. so we may return directly.
+ if (p->ms->lineSize <= 0)
+ return;
tmpDst = *dst;
(p->_wm->getDrawPixel())(x, y, src, p->ms->pd);
src = *dst;
Commit: 010c72497133bbab233b5d138f4873624bda283a
https://github.com/scummvm/scummvm/commit/010c72497133bbab233b5d138f4873624bda283a
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: modify the way we are inverting the channel
Changed paths:
engines/director/events.cpp
engines/director/movie.h
engines/director/window.cpp
diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index 7243a97585..3843cb36c8 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -117,8 +117,8 @@ bool Movie::processEvent(Common::Event &event) {
// hiliteChannelId is specified for BitMap castmember, so we deal with them separately with other castmember
// if we are moving out of bounds, then we don't hilite it anymore
if (_currentHiliteChannelId && !sc->_channels[_currentHiliteChannelId]->isMouseIn(pos)) {
- g_director->getCurrentWindow()->invertChannel(sc->_channels[_currentHiliteChannelId]);
g_director->getCurrentWindow()->setDirty(true);
+ g_director->getCurrentWindow()->addDirtyRect(sc->_channels[_currentHiliteChannelId]->getBbox());
_currentHiliteChannelId = 0;
_currentHandlingChannelId = 0;
}
@@ -157,7 +157,8 @@ bool Movie::processEvent(Common::Event &event) {
if (spriteId > 0 && sc->_channels[spriteId]->_sprite->shouldHilite()) {
_currentHiliteChannelId = spriteId;
- g_director->getCurrentWindow()->invertChannel(sc->_channels[spriteId]);
+ g_director->getCurrentWindow()->setDirty(true);
+ g_director->getCurrentWindow()->addDirtyRect(sc->_channels[_currentHiliteChannelId]->getBbox());
}
_lastEventTime = g_director->getMacTicks();
@@ -180,8 +181,10 @@ bool Movie::processEvent(Common::Event &event) {
_currentClickOnSpriteId = sc->getActiveSpriteIDFromPos(pos);
- if (_currentHiliteChannelId && sc->_channels[_currentHiliteChannelId])
- g_director->getCurrentWindow()->invertChannel(sc->_channels[_currentHiliteChannelId]);
+ if (_currentHiliteChannelId && sc->_channels[_currentHiliteChannelId]) {
+ g_director->getCurrentWindow()->setDirty(true);
+ g_director->getCurrentWindow()->addDirtyRect(sc->_channels[_currentHiliteChannelId]->getBbox());
+ }
debugC(3, kDebugEvents, "event: Button Up @(%d, %d), movie '%s', sprite id: %d", pos.x, pos.y, _macName.c_str(), _currentHandlingChannelId);
diff --git a/engines/director/movie.h b/engines/director/movie.h
index 5eecc95c1e..eb08a177b3 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -174,6 +174,8 @@ public:
int _checkBoxType;
+ uint16 _currentHiliteChannelId;
+
private:
Window *_window;
DirectorEngine *_vm;
@@ -189,7 +191,6 @@ private:
Common::String _script;
Common::String _directory;
- uint16 _currentHiliteChannelId;
uint16 _currentHandlingChannelId;
Channel *_currentDraggedChannel;
Common::Point _draggingSpritePos;
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 9d72bbd281..edbfd26c08 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -113,6 +113,7 @@ bool Window::render(bool forceRedraw, Graphics::ManagedSurface *blitTo) {
if (!blitTo)
blitTo = _composeSurface;
+ Channel *hiliteChannel = _currentMovie->getScore()->getChannelById(_currentMovie->_currentHiliteChannelId);
for (Common::List<Common::Rect>::iterator i = _dirtyRects.begin(); i != _dirtyRects.end(); i++) {
const Common::Rect &r = *i;
@@ -129,12 +130,21 @@ bool Window::render(bool forceRedraw, Graphics::ManagedSurface *blitTo) {
continue;
}
- if ((*j)->_visible)
+ if ((*j)->_visible) {
+ if ((*j) == hiliteChannel)
+ continue;
inkBlitFrom(*j, r, blitTo);
+ }
}
}
}
+ if (_currentMovie->_currentHiliteChannelId) {
+ blitTo->fillRect(hiliteChannel->getBbox(), _stageColor);
+ inkBlitFrom(hiliteChannel, hiliteChannel->getBbox(), blitTo);
+ invertChannel(hiliteChannel);
+ }
+
_dirtyRects.clear();
_contentIsDirty = true;
Commit: 5d4b11c198d11b011d6aeeea5ef03675367f7677
https://github.com/scummvm/scummvm/commit/5d4b11c198d11b011d6aeeea5ef03675367f7677
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: introduce partial invertion to resolve render invert channel problem
Changed paths:
engines/director/window.cpp
engines/director/window.h
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index edbfd26c08..edde3d78c0 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -70,27 +70,28 @@ Window::~Window() {
}
}
-void Window::invertChannel(Channel *channel) {
+void Window::invertChannel(Channel *channel, const Common::Rect &destRect) {
const Graphics::Surface *mask = channel->getMask(true);
- Common::Rect destRect = channel->getBbox();
+ Common::Rect srcRect = channel->getBbox();
+ srcRect.clip(destRect);
if (_wm->_pixelformat.bytesPerPixel == 1) {
- for (int i = 0; i < destRect.height(); i++) {
- byte *src = (byte *)_composeSurface->getBasePtr(destRect.left, destRect.top + i);
+ for (int i = 0; i < srcRect.height(); i++) {
+ byte *src = (byte *)_composeSurface->getBasePtr(srcRect.left, srcRect.top + i);
const byte *msk = mask ? (const byte *)mask->getBasePtr(0, i) : nullptr;
- for (int j = 0; j < destRect.width(); j++, src++)
+ for (int j = 0; j < srcRect.width(); j++, src++)
if (!mask || (msk && !(*msk++)))
*src = ~(*src);
}
} else {
uint32 alpha = _wm->_pixelformat.ARGBToColor(255, 0, 0, 0);
- for (int i = 0; i < destRect.height(); i++) {
- uint32 *src = (uint32 *)_composeSurface->getBasePtr(destRect.left, destRect.top + i);
+ for (int i = 0; i < srcRect.height(); i++) {
+ uint32 *src = (uint32 *)_composeSurface->getBasePtr(srcRect.left, srcRect.top + i);
const uint32 *msk = mask ? (const uint32 *)mask->getBasePtr(0, i) : nullptr;
- for (int j = 0; j < destRect.width(); j++, src++)
+ for (int j = 0; j < srcRect.width(); j++, src++)
if (!mask || (msk && !(*msk++)))
*src = ~(*src & ~alpha) | alpha;
}
@@ -131,20 +132,14 @@ bool Window::render(bool forceRedraw, Graphics::ManagedSurface *blitTo) {
}
if ((*j)->_visible) {
- if ((*j) == hiliteChannel)
- continue;
inkBlitFrom(*j, r, blitTo);
+ if ((*j) == hiliteChannel)
+ invertChannel(hiliteChannel, r);
}
}
}
}
- if (_currentMovie->_currentHiliteChannelId) {
- blitTo->fillRect(hiliteChannel->getBbox(), _stageColor);
- inkBlitFrom(hiliteChannel, hiliteChannel->getBbox(), blitTo);
- invertChannel(hiliteChannel);
- }
-
_dirtyRects.clear();
_contentIsDirty = true;
diff --git a/engines/director/window.h b/engines/director/window.h
index e49ed2e522..95991baf3b 100644
--- a/engines/director/window.h
+++ b/engines/director/window.h
@@ -87,12 +87,12 @@ struct TransParams {
};
class Window : public Graphics::MacWindow, public Object<Window> {
- public:
+public:
Window(int id, bool scrollable, bool resizable, bool editable, Graphics::MacWindowManager *wm, DirectorEngine *vm, bool isStage);
~Window();
bool render(bool forceRedraw = false, Graphics::ManagedSurface *blitTo = nullptr);
- void invertChannel(Channel *channel);
+ void invertChannel(Channel *channel, const Common::Rect &destRect);
bool needsAppliedColor(DirectorPlotData *pd);
void setStageColor(uint32 stageColor, bool forceReset = false);
Commit: ee2077b63d5418857fa8324254dc0bcc15a0c568
https://github.com/scummvm/scummvm/commit/ee2077b63d5418857fa8324254dc0bcc15a0c568
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: skip the compression when we have exactly number of what we need for image in D2
Changed paths:
engines/director/images.cpp
diff --git a/engines/director/images.cpp b/engines/director/images.cpp
index ac26092340..64ce81f90c 100644
--- a/engines/director/images.cpp
+++ b/engines/director/images.cpp
@@ -182,7 +182,7 @@ bool BITDDecoder::loadStream(Common::SeekableReadStream &stream) {
Common::Array<int> pixels;
// If the stream has exactly the required number of bits for this image,
// we assume it is uncompressed.
- if (stream.size() == _pitch * _surface->h * _bitsPerPixel / 8) {
+ if ((stream.size() == _pitch * _surface->h * _bitsPerPixel / 8) || (g_director->getVersion() == 200 && stream.size() == _surface->h * _surface->w * (_bitsPerPixel / 8))) {
debugC(6, kDebugImages, "Skipping compression");
for (int i = 0; i < stream.size(); i++) {
pixels.push_back((int)stream.readByte());
Commit: 327b73b23a6b3b9e0a41bc5f13e288ffe04e51d9
https://github.com/scummvm/scummvm/commit/327b73b23a6b3b9e0a41bc5f13e288ffe04e51d9
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: if we have pic size bigger than we want, then we won't regard it as RLE compression
Changed paths:
engines/director/images.cpp
diff --git a/engines/director/images.cpp b/engines/director/images.cpp
index 64ce81f90c..864db611c7 100644
--- a/engines/director/images.cpp
+++ b/engines/director/images.cpp
@@ -182,7 +182,7 @@ bool BITDDecoder::loadStream(Common::SeekableReadStream &stream) {
Common::Array<int> pixels;
// If the stream has exactly the required number of bits for this image,
// we assume it is uncompressed.
- if ((stream.size() == _pitch * _surface->h * _bitsPerPixel / 8) || (g_director->getVersion() == 200 && stream.size() == _surface->h * _surface->w * (_bitsPerPixel / 8))) {
+ if ((stream.size() == _pitch * _surface->h * _bitsPerPixel / 8) || (g_director->getVersion() == 200 && stream.size() >= _surface->h * _surface->w * (_bitsPerPixel / 8))) {
debugC(6, kDebugImages, "Skipping compression");
for (int i = 0; i < stream.size(); i++) {
pixels.push_back((int)stream.readByte());
Commit: b04c96d40148fcdd003adbb77f0b8b37fb49e962
https://github.com/scummvm/scummvm/commit/b04c96d40148fcdd003adbb77f0b8b37fb49e962
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: scale the bitmap castmember when we are drawing a smaller sprite
Changed paths:
engines/director/castmember.cpp
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index d4ff03a564..19c5b23ac2 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -182,7 +182,27 @@ Graphics::MacWidget *BitmapCastMember::createWidget(Common::Rect &bbox, Channel
}
Graphics::MacWidget *widget = new Graphics::MacWidget(g_director->getCurrentWindow(), bbox.left, bbox.top, bbox.width(), bbox.height(), g_director->_wm, false);
- widget->getSurface()->blitFrom(*_img->getSurface());
+
+ // scale for drawing a smaller sprite
+ if (bbox.width() < _initialRect.width() || bbox.height() < _initialRect.height()) {
+
+ int scaleX = SCALE_THRESHOLD * _initialRect.width() / bbox.width();
+ int scaleY = SCALE_THRESHOLD * _initialRect.height() / bbox.height();
+
+ for (int y = 0, scaleYCtr = 0; y < bbox.height(); y++, scaleYCtr += scaleY) {
+ if (g_director->_wm->_pixelformat.bytesPerPixel == 1) {
+ for (int x = 0, scaleXCtr = 0; x < bbox.width(); x++, scaleXCtr += scaleX) {
+ const byte *src = (const byte *)_img->getSurface()->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD);
+ byte *dst = (byte *)widget->getSurface()->getBasePtr(x, y);
+ *dst = *src;
+ }
+ }
+ }
+
+ } else {
+ widget->getSurface()->blitFrom(*_img->getSurface());
+ }
+
return widget;
}
Commit: 048585abcab61dd746a769e90487d970bf4a12ec
https://github.com/scummvm/scummvm/commit/048585abcab61dd746a769e90487d970bf4a12ec
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: scale the registrationOffset when we are scaling the bitcast
Changed paths:
engines/director/channel.cpp
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index b07df4d75d..40f548fb65 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -519,18 +519,23 @@ void Channel::addRegistrationOffset(Common::Point &pos, bool subtract) {
return;
switch (_sprite->_cast->_type) {
- case kCastBitmap:
- {
- BitmapCastMember *bc = (BitmapCastMember *)(_sprite->_cast);
-
- if (subtract)
- pos -= Common::Point(bc->_initialRect.left - bc->_regX,
- bc->_initialRect.top - bc->_regY);
- else
- pos += Common::Point(bc->_initialRect.left - bc->_regX,
- bc->_initialRect.top - bc->_regY);
+ case kCastBitmap: {
+ BitmapCastMember *bc = (BitmapCastMember *)(_sprite->_cast);
+
+ Common::Point point(0, 0);
+ // stretch the offset
+ if (!_sprite->_stretch && (_sprite->_width < bc->_initialRect.width() || _sprite->_height < bc->_initialRect.height())) {
+ point.x = (bc->_initialRect.left - bc->_regX) * _sprite->_width / bc->_initialRect.width();
+ point.y = (bc->_initialRect.top - bc->_regY) * _sprite->_height / bc->_initialRect.height();
+ } else {
+ point.x = bc->_initialRect.left - bc->_regX;
+ point.y = bc->_initialRect.top - bc->_regY;
}
- break;
+ if (subtract)
+ pos -= point;
+ else
+ pos += point;
+ } break;
case kCastDigitalVideo:
pos -= Common::Point(_sprite->_cast->_initialRect.width() >> 1, _sprite->_cast->_initialRect.height() >> 1);
break;
Commit: f9de2bad63fe7fede59a8e7732523a50e845c0c2
https://github.com/scummvm/scummvm/commit/f9de2bad63fe7fede59a8e7732523a50e845c0c2
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: use channel's original dims instread of initialRect for bitmap castmember
Changed paths:
engines/director/sprite.cpp
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 53ddf5512d..9caa275226 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -285,7 +285,7 @@ void Sprite::setCast(CastMemberID memberID) {
// TODO: Respect sprite width/height settings. Need to determine how to read
// them properly.
- if (_cast->_type != kCastShape && _cast->_type != kCastText) {
+ if (_cast->_type != kCastShape && _cast->_type != kCastText && _cast->_type != kCastBitmap) {
Common::Rect dims = _cast->getInitialRect();
_width = dims.width();
_height = dims.height();
Commit: ef2b6cc9343244d12a99712ab5140248992f3eba
https://github.com/scummvm/scummvm/commit/ef2b6cc9343244d12a99712ab5140248992f3eba
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: add 32 bit support for scaling bitmap castmember
Changed paths:
engines/director/castmember.cpp
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 19c5b23ac2..a32d9d1664 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -183,7 +183,7 @@ Graphics::MacWidget *BitmapCastMember::createWidget(Common::Rect &bbox, Channel
Graphics::MacWidget *widget = new Graphics::MacWidget(g_director->getCurrentWindow(), bbox.left, bbox.top, bbox.width(), bbox.height(), g_director->_wm, false);
- // scale for drawing a smaller sprite
+ // scale for drawing a different size sprite
if (bbox.width() < _initialRect.width() || bbox.height() < _initialRect.height()) {
int scaleX = SCALE_THRESHOLD * _initialRect.width() / bbox.width();
@@ -193,8 +193,12 @@ Graphics::MacWidget *BitmapCastMember::createWidget(Common::Rect &bbox, Channel
if (g_director->_wm->_pixelformat.bytesPerPixel == 1) {
for (int x = 0, scaleXCtr = 0; x < bbox.width(); x++, scaleXCtr += scaleX) {
const byte *src = (const byte *)_img->getSurface()->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD);
- byte *dst = (byte *)widget->getSurface()->getBasePtr(x, y);
- *dst = *src;
+ *(byte *)widget->getSurface()->getBasePtr(x, y) = *src;
+ }
+ } else {
+ for (int x = 0, scaleXCtr = 0; x < bbox.width(); x++, scaleXCtr += scaleX) {
+ const int *src = (const int *)_img->getSurface()->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD);
+ *(int *)widget->getSurface()->getBasePtr(x, y) = *src;
}
}
}
Commit: 330d3b4dc57815e557cacde50268d31acd2746d5
https://github.com/scummvm/scummvm/commit/330d3b4dc57815e557cacde50268d31acd2746d5
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: enforce to replace widget when we have dims changed
Changed paths:
engines/director/channel.cpp
engines/director/channel.h
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 40f548fb65..dc9f5b87dd 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -302,6 +302,12 @@ void Channel::setClean(Sprite *nextSprite, int spriteId, bool partial) {
CastMemberID previousCastId(0, 0);
bool replace = isDirty(nextSprite);
+ // for dirty situation that we need to replace widget.
+ // if cast are modified, then we need to replace it
+ // if cast size are changed, and we may need to replace it, because we may having the scaled bitmap castmember
+ // other situation, e.g. position changing, we will let channel to handle it. So we don't have to replace widget
+ bool dimsChanged = !_sprite->_stretch && !hasTextCastMember(_sprite) && (_sprite->_width != nextSprite->_width || _sprite->_height != nextSprite->_height);
+
if (nextSprite) {
if (nextSprite->_cast && (_dirty || _sprite->_castId != nextSprite->_castId)) {
if (nextSprite->_cast->_type == kCastDigitalVideo) {
@@ -328,7 +334,7 @@ void Channel::setClean(Sprite *nextSprite, int spriteId, bool partial) {
if (replace) {
_sprite->updateCast();
- replaceWidget(previousCastId);
+ replaceWidget(previousCastId, dimsChanged);
}
updateTextCast();
@@ -469,9 +475,9 @@ bool Channel::canKeepWidget(Sprite *currentSprite, Sprite *nextSprite) {
// currently, when we are setting hilite, we delete the widget and the re-create it
// so we may optimize this if this operation takes much time
-void Channel::replaceWidget(CastMemberID previousCastId) {
+void Channel::replaceWidget(CastMemberID previousCastId, bool force) {
// if the castmember is the same, and we are not modifying anything which cannot be handle by channel. Then we don't replace the widget
- if (canKeepWidget(previousCastId)) {
+ if (!force && canKeepWidget(previousCastId)) {
debug(5, "Channel::replaceWidget(): skip deleting %s", _sprite->_castId.asString().c_str());
return;
}
@@ -524,9 +530,9 @@ void Channel::addRegistrationOffset(Common::Point &pos, bool subtract) {
Common::Point point(0, 0);
// stretch the offset
- if (!_sprite->_stretch && (_sprite->_width < bc->_initialRect.width() || _sprite->_height < bc->_initialRect.height())) {
- point.x = (bc->_initialRect.left - bc->_regX) * _sprite->_width / bc->_initialRect.width();
- point.y = (bc->_initialRect.top - bc->_regY) * _sprite->_height / bc->_initialRect.height();
+ if (!_sprite->_stretch && (_width < bc->_initialRect.width() || _height < bc->_initialRect.height())) {
+ point.x = (bc->_initialRect.left - bc->_regX) * _width / bc->_initialRect.width();
+ point.y = (bc->_initialRect.top - bc->_regY) * _height / bc->_initialRect.height();
} else {
point.x = bc->_initialRect.left - bc->_regX;
point.y = bc->_initialRect.top - bc->_regY;
diff --git a/engines/director/channel.h b/engines/director/channel.h
index 3e19c1c20c..557facf3b4 100644
--- a/engines/director/channel.h
+++ b/engines/director/channel.h
@@ -62,7 +62,7 @@ public:
void setClean(Sprite *nextSprite, int spriteId, bool partial = false);
void setEditable(bool editable);
void replaceSprite(Sprite *nextSprite);
- void replaceWidget(CastMemberID previousCastId = CastMemberID(0, 0));
+ void replaceWidget(CastMemberID previousCastId = CastMemberID(0, 0), bool force = false);
bool updateWidget();
void updateTextCast();
Commit: 8c792cd2a4b254e1f291819222d211b15194c7ab
https://github.com/scummvm/scummvm/commit/8c792cd2a4b254e1f291819222d211b15194c7ab
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: set the newSprite to reset the currentpoint when we are changing the widget.
Changed paths:
engines/director/channel.cpp
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index dc9f5b87dd..d6b3753ff5 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -406,6 +406,7 @@ void Channel::replaceSprite(Sprite *nextSprite) {
if (_sprite->_cast && !canKeepWidget(_sprite, nextSprite)) {
widgetKeeped = false;
_sprite->_cast->releaseWidget();
+ newSprite = true;
}
int width = _width;
Commit: 8d270071cf99d451bb867d97bdb9a3abd8512019
https://github.com/scummvm/scummvm/commit/8d270071cf99d451bb867d97bdb9a3abd8512019
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: don't draw outline shape when we get linesize < 0
Changed paths:
engines/director/graphics.cpp
engines/director/window.cpp
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 09b201b13d..643ff6d57a 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -156,9 +156,6 @@ void inkDrawPixel(int x, int y, int src, void *data) {
if (p->ms) {
// Get the pixel that macDrawPixel will give us, but store it to apply the
// ink later
- // if we have lineSize <= 0, means we are not drawing anything. so we may return directly.
- if (p->ms->lineSize <= 0)
- return;
tmpDst = *dst;
(p->_wm->getDrawPixel())(x, y, src, p->ms->pd);
src = *dst;
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index edde3d78c0..286a53a6f2 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -214,6 +214,9 @@ void Window::inkBlitShape(DirectorPlotData *pd, Common::Rect &srcRect) {
Graphics::drawFilledRect(fillAreaRect, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
// fall through
case kOutlinedRectangleSprite:
+ // if we have lineSize <= 0, means we are not drawing anything. so we may return directly.
+ if (pd->ms->lineSize <= 0)
+ break;
pd->ms->pd = &plotStroke;
Graphics::drawRect(strokeRect, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
break;
@@ -222,6 +225,8 @@ void Window::inkBlitShape(DirectorPlotData *pd, Common::Rect &srcRect) {
Graphics::drawRoundRect(fillAreaRect, 12, pd->ms->foreColor, true, g_director->getInkDrawPixel(), pd);
// fall through
case kOutlinedRoundedRectangleSprite:
+ if (pd->ms->lineSize <= 0)
+ break;
pd->ms->pd = &plotStroke;
Graphics::drawRoundRect(strokeRect, 12, pd->ms->foreColor, false, g_director->getInkDrawPixel(), pd);
break;
@@ -230,6 +235,8 @@ void Window::inkBlitShape(DirectorPlotData *pd, Common::Rect &srcRect) {
Graphics::drawEllipse(fillAreaRect.left, fillAreaRect.top, fillAreaRect.right, fillAreaRect.bottom, pd->ms->foreColor, true, g_director->getInkDrawPixel(), pd);
// fall through
case kOutlinedOvalSprite:
+ if (pd->ms->lineSize <= 0)
+ break;
pd->ms->pd = &plotStroke;
Graphics::drawEllipse(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, false, g_director->getInkDrawPixel(), pd);
break;
Commit: d53064f9481fc1e6ea8c509601e480a9f99e6ae9
https://github.com/scummvm/scummvm/commit/d53064f9481fc1e6ea8c509601e480a9f99e6ae9
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: amend setting dims for bitmap cast member
Changed paths:
engines/director/sprite.cpp
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 9caa275226..4bb1272c8c 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -285,8 +285,14 @@ void Sprite::setCast(CastMemberID memberID) {
// TODO: Respect sprite width/height settings. Need to determine how to read
// them properly.
- if (_cast->_type != kCastShape && _cast->_type != kCastText && _cast->_type != kCastBitmap) {
- Common::Rect dims = _cast->getInitialRect();
+ Common::Rect dims = _cast->getInitialRect();
+ // strange logic here, need to be fixed
+ if (_cast->_type == kCastBitmap) {
+ if (_width > dims.width() || _height > dims.height()) {
+ _width = dims.width();
+ _height = dims.height();
+ }
+ } else if (_cast->_type != kCastShape && _cast->_type != kCastText) {
_width = dims.width();
_height = dims.height();
}
Commit: 13f5460ca4fd2b9f7d5e498512e1c63b47a5ffde
https://github.com/scummvm/scummvm/commit/13f5460ca4fd2b9f7d5e498512e1c63b47a5ffde
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: only use the original sprites when we have to scale down the bitmap cast member
Changed paths:
engines/director/sprite.cpp
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 4bb1272c8c..7446f5a74b 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -288,7 +288,7 @@ void Sprite::setCast(CastMemberID memberID) {
Common::Rect dims = _cast->getInitialRect();
// strange logic here, need to be fixed
if (_cast->_type == kCastBitmap) {
- if (_width > dims.width() || _height > dims.height()) {
+ if (_width >= dims.width() || _height >= dims.height()) {
_width = dims.width();
_height = dims.height();
}
Commit: 111726031d54338c46b04eede6edafaeb4258b4e
https://github.com/scummvm/scummvm/commit/111726031d54338c46b04eede6edafaeb4258b4e
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: set currentChannelId to 0 for script channel scripts.
Changed paths:
engines/director/lingo/lingo-events.cpp
diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index 3c750d4c8d..b2088a3a22 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -171,9 +171,9 @@ void Movie::queueFrameEvent(LEvent event, int eventId) {
return;
if (event == kEventEnterFrame && script->_eventHandlers.contains(kEventGeneric)) {
- _eventQueue.push(LingoEvent(kEventGeneric, eventId, kScoreScript, scriptId, false));
+ _eventQueue.push(LingoEvent(kEventGeneric, eventId, kScoreScript, scriptId, false, 0));
} else if (script->_eventHandlers.contains(event)) {
- _eventQueue.push(LingoEvent(event, eventId, kScoreScript, scriptId, false));
+ _eventQueue.push(LingoEvent(event, eventId, kScoreScript, scriptId, false, 0));
}
}
Commit: bb456a64d23d7fbd894ecbb63159aee64b7917b4
https://github.com/scummvm/scummvm/commit/bb456a64d23d7fbd894ecbb63159aee64b7917b4
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: switch to next frame when we are calling play done at script channel scripts.
Changed paths:
engines/director/lingo/lingo-funcs.cpp
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index ec80c8186b..790e9e2ebe 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -284,6 +284,9 @@ void Lingo::func_play(Datum &frame, Datum &movie) {
f.type = INT;
f.u.i = ref.frameI;
+ if (g_lingo->_currentChannelId == 0)
+ f.u.i++;
+
func_goto(f, m);
return;
Commit: 6593d125b0ccf9226971fed1a133dc8dc18e7ae6
https://github.com/scummvm/scummvm/commit/6593d125b0ccf9226971fed1a133dc8dc18e7ae6
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: read rect dims as signed number instead of unsigned
Changed paths:
engines/director/movie.cpp
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index 7d40e1639f..85b714a7a1 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -174,10 +174,10 @@ bool Movie::loadArchive() {
Common::Rect Movie::readRect(Common::ReadStreamEndian &stream) {
Common::Rect rect;
- rect.top = stream.readUint16();
- rect.left = stream.readUint16();
- rect.bottom = stream.readUint16();
- rect.right = stream.readUint16();
+ rect.top = stream.readSint16();
+ rect.left = stream.readSint16();
+ rect.bottom = stream.readSint16();
+ rect.right = stream.readSint16();
return rect;
}
Commit: a841358e693912726a6f2a73f1f2eded7bbe3a1f
https://github.com/scummvm/scummvm/commit/a841358e693912726a6f2a73f1f2eded7bbe3a1f
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: implement some basic field operations for text cast
Changed paths:
engines/director/castmember.cpp
engines/director/castmember.h
engines/director/lingo/lingo-object.cpp
graphics/macgui/mactext.h
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index a32d9d1664..ad9d4344e8 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -790,6 +790,23 @@ void TextCastMember::setText(const char *text) {
}
}
+int TextCastMember::getTextHeight() {
+ if (_widget)
+ return ((Graphics::MacText *)_widget)->getTextHeight();
+ else
+ warning("TextCastMember::getTextHeight: getting text height when there is no widget, returning 0");
+ return 0;
+}
+
+// this should be amend when we have some where using this function
+int TextCastMember::getTextSize() {
+ if (_widget)
+ return ((Graphics::MacText *)_widget)->getTextSize();
+ else
+ warning("TextCastMember::getTextSize: getting text size when there is no widget, returning 0");
+ return 0;
+}
+
Common::String TextCastMember::getText() {
return _ptext;
}
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index ca6a149df8..73fdf4d75d 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -238,6 +238,9 @@ public:
Datum getChunkField(int field, int start, int end);
bool setChunkField(int field, int start, int end, const Datum &value);
+ int getTextHeight();
+ int getTextSize();
+
SizeType _borderSize;
SizeType _gutterSize;
SizeType _boxShadow;
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 532b0a5883..96d30afd49 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -896,16 +896,16 @@ Datum TextCastMember::getField(int field) {
}
break;
case kTheTextFont:
- warning("TextCastMember::getField(): Unprocessed getting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ d.u.i = _fontId;
break;
case kTheTextHeight:
- warning("TextCastMember::getField(): Unprocessed getting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ d.u.i = getTextHeight();
break;
case kTheTextSize:
- warning("TextCastMember::getField(): Unprocessed getting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ d.u.i = getTextSize();
break;
case kTheTextStyle:
- warning("TextCastMember::getField(): Unprocessed getting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ d.u.i = _textSlant;
break;
default:
d = CastMember::getField(field);
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index ee5dd133d6..b1ad93a37c 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -193,6 +193,10 @@ public:
void appendText(const Common::U32String &str, int fontId = kMacFontChicago, int fontSize = 12, int fontSlant = kMacFontRegular, uint16 r = 0, uint16 g = 0, uint16 b = 0, bool skipAdd = false);
void appendText(const Common::U32String &str, const Font *font, uint16 r = 0, uint16 g = 0, uint16 b = 0, bool skipAdd = false);
+ int getTextFont() { return _defaultFormatting.fontId; }
+ int getTextSize() { return _defaultFormatting.fontSize; }
+ int getTextColor() { return _defaultFormatting.fgcolor; }
+
private:
void appendText_(const Common::U32String &strWithFont, uint oldLen);
void deletePreviousCharInternal(int *row, int *col);
Commit: 60c0e78d95d4b7ffa60268cfba0b03efddbca1c3
https://github.com/scummvm/scummvm/commit/60c0e78d95d4b7ffa60268cfba0b03efddbca1c3
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
GRAPHICS: MACGUI: add line spacing for mactext
Changed paths:
graphics/macgui/mactext.cpp
graphics/macgui/mactext.h
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 98e382cdab..ced166d31a 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -109,6 +109,7 @@ MacText::MacText(MacWidget *parent, int x, int y, int w, int h, MacWindowManager
_macFontMode = true;
_encodeType = Common::kUtf8;
_plainByteMode = false;
+ _lineSpacing = 0;
if (macFont) {
_defaultFormatting = MacFontRun(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), 0, 0, 0);
@@ -134,6 +135,7 @@ MacText::MacText(MacWidget *parent, int x, int y, int w, int h, MacWindowManager
_macFontMode = true;
_encodeType = encodeType;
_plainByteMode = true;
+ _lineSpacing = 0;
if (macFont) {
_defaultFormatting = MacFontRun(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), 0, 0, 0);
@@ -160,6 +162,7 @@ MacText::MacText(const Common::U32String &s, MacWindowManager *wm, const MacFont
_macFontMode = true;
_encodeType = Common::kUtf8;
_plainByteMode = false;
+ _lineSpacing = 0;
if (macFont) {
_defaultFormatting = MacFontRun(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), 0, 0, 0);
@@ -185,6 +188,7 @@ MacText::MacText(const Common::String &s, MacWindowManager *wm, const MacFont *m
_macFontMode = true;
_encodeType = encodeType;
_plainByteMode = true;
+ _lineSpacing = 0;
if (macFont) {
_defaultFormatting = MacFontRun(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), 0, 0, 0);
@@ -211,6 +215,7 @@ MacText::MacText(const Common::U32String &s, MacWindowManager *wm, const Font *f
_macFontMode = false;
_encodeType = Common::kUtf8;
_plainByteMode = false;
+ _lineSpacing = 0;
if (font) {
_defaultFormatting = MacFontRun(_wm, font, 0, font->getFontHeight(), 0, 0, 0);
@@ -900,7 +905,7 @@ int MacText::getLineWidth(int line, bool enforce, int col) {
hastext = true;
}
- height = MAX(height, _textLines[line].chunks[i].getFont()->getFontHeight());
+ height = MAX(height, _textLines[line].chunks[i].getFont()->getFontHeight()) + _lineSpacing;
}
if (!hastext && _textLines.size() > 1)
@@ -1061,6 +1066,15 @@ void MacText::resize(int w, int h) {
setMaxWidth(_maxWidth);
}
+void MacText::setLineSpacing(int linespacing) {
+ _lineSpacing = linespacing;
+ recalcDims();
+ updateCursorPos();
+ _fullRefresh = true;
+ render();
+ _contentIsDirty = true;
+}
+
void MacText::appendText(const Common::U32String &str, int fontId, int fontSize, int fontSlant, bool skipAdd) {
appendText(str, fontId, fontSize, fontSlant, 0, 0, 0, skipAdd);
}
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index b1ad93a37c..6d98470abc 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -194,9 +194,14 @@ public:
void appendText(const Common::U32String &str, const Font *font, uint16 r = 0, uint16 g = 0, uint16 b = 0, bool skipAdd = false);
int getTextFont() { return _defaultFormatting.fontId; }
- int getTextSize() { return _defaultFormatting.fontSize; }
+
+ // because currently, we are counting linespacing as font height
+ int getTextSize() { return _defaultFormatting.fontSize - _lineSpacing; }
int getTextColor() { return _defaultFormatting.fgcolor; }
+ int getLineSpacing() { return _lineSpacing; }
+ void setLineSpacing(int linespacing);
+
private:
void appendText_(const Common::U32String &strWithFont, uint oldLen);
void deletePreviousCharInternal(int *row, int *col);
@@ -316,6 +321,7 @@ protected:
int _textMaxWidth;
int _textMaxHeight;
+ int _lineSpacing;
ManagedSurface *_surface;
Commit: 1492a06a843f6cc9a31326efd88e51f427d8f8c7
https://github.com/scummvm/scummvm/commit/1492a06a843f6cc9a31326efd88e51f427d8f8c7
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
GRAPHICS: MACGUI: amend interLinear for mactext
Changed paths:
graphics/macgui/mactext.cpp
graphics/macgui/mactext.h
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index ced166d31a..df182144f5 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -109,7 +109,6 @@ MacText::MacText(MacWidget *parent, int x, int y, int w, int h, MacWindowManager
_macFontMode = true;
_encodeType = Common::kUtf8;
_plainByteMode = false;
- _lineSpacing = 0;
if (macFont) {
_defaultFormatting = MacFontRun(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), 0, 0, 0);
@@ -135,7 +134,6 @@ MacText::MacText(MacWidget *parent, int x, int y, int w, int h, MacWindowManager
_macFontMode = true;
_encodeType = encodeType;
_plainByteMode = true;
- _lineSpacing = 0;
if (macFont) {
_defaultFormatting = MacFontRun(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), 0, 0, 0);
@@ -162,7 +160,6 @@ MacText::MacText(const Common::U32String &s, MacWindowManager *wm, const MacFont
_macFontMode = true;
_encodeType = Common::kUtf8;
_plainByteMode = false;
- _lineSpacing = 0;
if (macFont) {
_defaultFormatting = MacFontRun(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), 0, 0, 0);
@@ -188,7 +185,6 @@ MacText::MacText(const Common::String &s, MacWindowManager *wm, const MacFont *m
_macFontMode = true;
_encodeType = encodeType;
_plainByteMode = true;
- _lineSpacing = 0;
if (macFont) {
_defaultFormatting = MacFontRun(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), 0, 0, 0);
@@ -215,7 +211,6 @@ MacText::MacText(const Common::U32String &s, MacWindowManager *wm, const Font *f
_macFontMode = false;
_encodeType = Common::kUtf8;
_plainByteMode = false;
- _lineSpacing = 0;
if (font) {
_defaultFormatting = MacFontRun(_wm, font, 0, font->getFontHeight(), 0, 0, 0);
@@ -905,7 +900,7 @@ int MacText::getLineWidth(int line, bool enforce, int col) {
hastext = true;
}
- height = MAX(height, _textLines[line].chunks[i].getFont()->getFontHeight()) + _lineSpacing;
+ height = MAX(height, _textLines[line].chunks[i].getFont()->getFontHeight());
}
if (!hastext && _textLines.size() > 1)
@@ -955,6 +950,9 @@ int MacText::getLineHeight(int line) {
void MacText::setInterLinear(int interLinear) {
_interLinear = interLinear;
recalcDims();
+ _fullRefresh = true;
+ render();
+ _contentIsDirty = true;
}
void MacText::recalcDims() {
@@ -1066,15 +1064,6 @@ void MacText::resize(int w, int h) {
setMaxWidth(_maxWidth);
}
-void MacText::setLineSpacing(int linespacing) {
- _lineSpacing = linespacing;
- recalcDims();
- updateCursorPos();
- _fullRefresh = true;
- render();
- _contentIsDirty = true;
-}
-
void MacText::appendText(const Common::U32String &str, int fontId, int fontSize, int fontSlant, bool skipAdd) {
appendText(str, fontId, fontSize, fontSlant, 0, 0, 0, skipAdd);
}
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 6d98470abc..22a50d0bd6 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -196,12 +196,9 @@ public:
int getTextFont() { return _defaultFormatting.fontId; }
// because currently, we are counting linespacing as font height
- int getTextSize() { return _defaultFormatting.fontSize - _lineSpacing; }
+ int getTextSize() { return _defaultFormatting.fontSize; }
int getTextColor() { return _defaultFormatting.fgcolor; }
- int getLineSpacing() { return _lineSpacing; }
- void setLineSpacing(int linespacing);
-
private:
void appendText_(const Common::U32String &strWithFont, uint oldLen);
void deletePreviousCharInternal(int *row, int *col);
@@ -243,6 +240,8 @@ public:
Common::U32String cutSelection();
const SelectedText *getSelectedText() { return &_selectedText; }
+ int getLineSpacing() { return _interLinear; }
+
/**
* set the selection of mactext
* @param pos pos of selection, 0 represent first, -1 represent the end of text
@@ -321,7 +320,6 @@ protected:
int _textMaxWidth;
int _textMaxHeight;
- int _lineSpacing;
ManagedSurface *_surface;
Commit: 8c70bab234e0cdd3fab7702f59de9fa90bf02c1d
https://github.com/scummvm/scummvm/commit/8c70bab234e0cdd3fab7702f59de9fa90bf02c1d
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: implement linespacing for text castmember, set line spacing default to 1 in D4
Changed paths:
engines/director/castmember.cpp
engines/director/castmember.h
engines/director/lingo/lingo-object.cpp
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index ad9d4344e8..db1392b171 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -569,6 +569,9 @@ TextCastMember::TextCastMember(Cast *cast, uint16 castId, Common::SeekableReadSt
_bgpalinfo1 = _bgpalinfo2 = _bgpalinfo3 = 0;
_fgpalinfo1 = _fgpalinfo2 = _fgpalinfo3 = 0xff;
+ // seems like the line spacing is default to 1 in D4
+ _lineSpacing = g_director->getVersion() >= 400 ? 1 : 0;
+
if (version < kFileVer400) {
_flags1 = flags1; // region: 0 - auto, 1 - matte, 2 - disabled
_borderSize = static_cast<SizeType>(stream.readByte());
@@ -790,11 +793,12 @@ void TextCastMember::setText(const char *text) {
}
}
+// D4 dictionary book said this is line spacing
int TextCastMember::getTextHeight() {
if (_widget)
- return ((Graphics::MacText *)_widget)->getTextHeight();
+ return ((Graphics::MacText *)_widget)->getLineSpacing();
else
- warning("TextCastMember::getTextHeight: getting text height when there is no widget, returning 0");
+ warning("TextCastMember::getTextHeight: getting text line spacing when there is no widget, returning 0");
return 0;
}
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index 73fdf4d75d..8881512773 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -259,6 +259,7 @@ public:
uint16 _fgpalinfo1, _fgpalinfo2, _fgpalinfo3;
ButtonType _buttonType;
bool _editable;
+ int _lineSpacing;
Common::String _ftext;
Common::String _ptext;
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 96d30afd49..f85f4035c8 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -958,19 +958,21 @@ bool TextCastMember::setField(int field, const Datum &d) {
_textAlign = align;
_modified = true;
- }
+ }
return true;
case kTheTextFont:
warning("TextCastMember::setField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
return false;
case kTheTextHeight:
- warning("TextCastMember::setField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ _lineSpacing = d.asInt();
+ _modified = true;
return false;
case kTheTextSize:
warning("TextCastMember::setField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
return false;
case kTheTextStyle:
- warning("TextCastMember::setField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ _textSlant = d.asInt();
+ _modified = true;
return false;
default:
break;
Commit: 56fad1585bd2f61c93239e51a079baab338e4919
https://github.com/scummvm/scummvm/commit/56fad1585bd2f61c93239e51a079baab338e4919
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: implement setting text size for text cast member
Changed paths:
engines/director/castmember.cpp
engines/director/castmember.h
graphics/macgui/mactext.cpp
graphics/macgui/mactext.h
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index db1392b171..cf63b27bf5 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -815,6 +815,15 @@ Common::String TextCastMember::getText() {
return _ptext;
}
+void TextCastMember::setTextSize(int textSize) {
+ if (_widget) {
+ ((Graphics::MacText *)_widget)->setTextSize(textSize);
+ ((Graphics::MacText *)_widget)->draw();
+ } else {
+ warning("TextCastMember::setTextSize: unprocessed setting text size for cast member %d %s", _castId, numToCastNum(_castId));
+ }
+}
+
bool TextCastMember::isEditable() {
return _editable;
}
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index 8881512773..618231d608 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -239,7 +239,9 @@ public:
bool setChunkField(int field, int start, int end, const Datum &value);
int getTextHeight();
+
int getTextSize();
+ void setTextSize(int textSize);
SizeType _borderSize;
SizeType _gutterSize;
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index df182144f5..36b9260719 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -347,6 +347,18 @@ void MacText::setColors(uint32 fg, uint32 bg) {
setTextColor(fg, i);
}
+void MacText::setTextSize(int textSize) {
+ for (uint i = 0; i < _textLines.size(); i++) {
+ for (uint j = 0; j < _textLines[i].chunks.size(); j++) {
+ _textLines[i].chunks[j].fontSize = textSize;
+ }
+ }
+
+ _fullRefresh = true;
+ render();
+ _contentIsDirty = true;
+}
+
void MacText::setTextColor(uint32 color, uint32 line) {
if (line >= _textLines.size()) {
warning("MacText::setTextColor(): line %d is out of bounds", line);
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 22a50d0bd6..c141ca2728 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -197,6 +197,8 @@ public:
// because currently, we are counting linespacing as font height
int getTextSize() { return _defaultFormatting.fontSize; }
+ void setTextSize(int textSize);
+
int getTextColor() { return _defaultFormatting.fgcolor; }
private:
Commit: 42aa4739f854499cfdd7b1b79bf7db3d2b495faf
https://github.com/scummvm/scummvm/commit/42aa4739f854499cfdd7b1b79bf7db3d2b495faf
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: implement chunk field operations for text cast member
Changed paths:
engines/director/castmember.cpp
engines/director/lingo/lingo-object.cpp
graphics/macgui/mactext.cpp
graphics/macgui/mactext.h
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index cf63b27bf5..3201d87395 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -798,7 +798,7 @@ int TextCastMember::getTextHeight() {
if (_widget)
return ((Graphics::MacText *)_widget)->getLineSpacing();
else
- warning("TextCastMember::getTextHeight: getting text line spacing when there is no widget, returning 0");
+ return _lineSpacing;
return 0;
}
@@ -807,7 +807,7 @@ int TextCastMember::getTextSize() {
if (_widget)
return ((Graphics::MacText *)_widget)->getTextSize();
else
- warning("TextCastMember::getTextSize: getting text size when there is no widget, returning 0");
+ return _fontSize;
return 0;
}
@@ -820,7 +820,8 @@ void TextCastMember::setTextSize(int textSize) {
((Graphics::MacText *)_widget)->setTextSize(textSize);
((Graphics::MacText *)_widget)->draw();
} else {
- warning("TextCastMember::setTextSize: unprocessed setting text size for cast member %d %s", _castId, numToCastNum(_castId));
+ _fontSize = textSize;
+ _modified = true;
}
}
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index f85f4035c8..b7a9f14890 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -961,14 +961,15 @@ bool TextCastMember::setField(int field, const Datum &d) {
}
return true;
case kTheTextFont:
- warning("TextCastMember::setField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ _fontId = d.asInt();
+ _modified = true;
return false;
case kTheTextHeight:
_lineSpacing = d.asInt();
_modified = true;
return false;
case kTheTextSize:
- warning("TextCastMember::setField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ setTextSize(d.asInt());
return false;
case kTheTextStyle:
_textSlant = d.asInt();
@@ -1000,19 +1001,19 @@ Datum TextCastMember::getChunkField(int field, int start, int end) {
switch (field) {
case kTheForeColor:
- warning("TextCastMember::getChunkField(): Unprocessed getting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ d.u.i = getForeColor();
break;
case kTheTextFont:
- warning("TextCastMember::getChunkField(): Unprocessed getting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ d.u.i = _fontId;
break;
case kTheTextHeight:
- warning("TextCastMember::getChunkField(): Unprocessed getting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ d.u.i = _lineSpacing;
break;
case kTheTextSize:
- warning("TextCastMember::getChunkField(): Unprocessed getting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ d.u.i = _fontSize;
break;
case kTheTextStyle:
- warning("TextCastMember::getChunkField(): Unprocessed getting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ d.u.i = _textSlant;
break;
default:
break;
@@ -1022,21 +1023,27 @@ Datum TextCastMember::getChunkField(int field, int start, int end) {
}
bool TextCastMember::setChunkField(int field, int start, int end, const Datum &d) {
+ uint color = 0;
switch (field) {
case kTheForeColor:
- warning("TextCastMember::setChunkField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ color = d.asInt();
+ setColors(&color, nullptr);
return false;
case kTheTextFont:
- warning("TextCastMember::setChunkField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ _fontId = d.asInt();
+ _modified = true;
return false;
case kTheTextHeight:
- warning("TextCastMember::setChunkField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ _lineSpacing = d.asInt();
+ _modified = true;
return false;
case kTheTextSize:
- warning("TextCastMember::setChunkField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ _fontSize = d.asInt();
+ _modified = true;
return false;
case kTheTextStyle:
- warning("TextCastMember::setChunkField(): Unprocessed setting field \"%s\" of field %d", g_lingo->field2str(field), _castId);
+ _textSlant = d.asInt();
+ _modified = true;
return false;
default:
break;
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 36b9260719..d1b623699b 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -395,7 +395,23 @@ void MacText::getChunkPosFromIndex(int index, uint &lineNum, uint &chunkNum, uin
offset = 0;
}
+void setTextColorCallback(MacFontRun &macFontRun, int color) {
+ macFontRun.fgcolor = color;
+}
+
void MacText::setTextColor(uint32 color, uint32 start, uint32 end) {
+ setTextChunks(start, end, color, setTextColorCallback);
+}
+
+void setTextSizeCallback(MacFontRun &macFontRun, int textSize) {
+ macFontRun.fontSize = textSize;
+}
+
+void MacText::setTextSize(int textSize, int start, int end) {
+ setTextChunks(start, end, textSize, setTextSizeCallback);
+}
+
+void MacText::setTextChunks(int start, int end, int param, void (*callback)(MacFontRun &, int)) {
if (_textLines.empty())
return;
if (start > end)
@@ -426,8 +442,6 @@ void MacText::setTextColor(uint32 color, uint32 start, uint32 end) {
endCol++;
}
- uint col = _wm->findBestColor(color);
- // after spliting, we are going to modify the colors now
for (uint i = startRow; i <= endRow; i++) {
uint from, to;
if (i == startRow && i == endRow) {
@@ -444,7 +458,7 @@ void MacText::setTextColor(uint32 color, uint32 start, uint32 end) {
to = _textLines[i].chunks.size();
}
for (uint j = from; j < to; j++) {
- _textLines[i].chunks[j].fgcolor = col;
+ callback(_textLines[i].chunks[j], param);
}
}
@@ -453,6 +467,34 @@ void MacText::setTextColor(uint32 color, uint32 start, uint32 end) {
_contentIsDirty = true;
}
+// this maybe need to amend
+// currently, we just return the text size of first character.
+int MacText::getTextSize(int start, int end) {
+ if (_textLines.empty())
+ return _defaultFormatting.fontSize;
+ if (start > end)
+ SWAP(start, end);
+
+ uint startRow, startCol;
+ uint offset;
+
+ getChunkPosFromIndex(start, startRow, startCol, offset);
+ return _textLines[startRow].chunks[startCol].fontSize;
+}
+
+uint MacText::getTextColor(int start, int end) {
+ if (_textLines.empty())
+ return _defaultFormatting.fontSize;
+ if (start > end)
+ SWAP(start, end);
+
+ uint startRow, startCol;
+ uint offset;
+
+ getChunkPosFromIndex(start, startRow, startCol, offset);
+ return _textLines[startRow].chunks[startCol].fgcolor;
+}
+
void MacText::setDefaultFormatting(uint16 fontId, byte textSlant, uint16 fontSize,
uint16 palinfo1, uint16 palinfo2, uint16 palinfo3) {
_defaultFormatting.setValues(_defaultFormatting.wm, fontId, textSlant, fontSize, palinfo1, palinfo2, palinfo3);
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index c141ca2728..3d11ce08a2 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -199,9 +199,15 @@ public:
int getTextSize() { return _defaultFormatting.fontSize; }
void setTextSize(int textSize);
- int getTextColor() { return _defaultFormatting.fgcolor; }
+ int getTextSize(int start, int end);
+ void setTextSize(int textSize, int start, int end);
+
+ uint getTextColor() { return _defaultFormatting.fgcolor; }
+ uint getTextColor(int start, int end);
private:
+ void setTextChunks(int start, int end, int param, void (*callback)(MacFontRun &, int));
+
void appendText_(const Common::U32String &strWithFont, uint oldLen);
void deletePreviousCharInternal(int *row, int *col);
void insertTextFromClipboard();
Commit: 6e2a8fc08f08a4e31843e37b19814078e1ba249a
https://github.com/scummvm/scummvm/commit/6e2a8fc08f08a4e31843e37b19814078e1ba249a
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
GRAPHICS: MACGUI: implement setting text slant and text fontId of text chunks
Changed paths:
graphics/macgui/mactext.cpp
graphics/macgui/mactext.h
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index d1b623699b..3c0f1eed0c 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -400,7 +400,8 @@ void setTextColorCallback(MacFontRun &macFontRun, int color) {
}
void MacText::setTextColor(uint32 color, uint32 start, uint32 end) {
- setTextChunks(start, end, color, setTextColorCallback);
+ uint col = _wm->findBestColor(color);
+ setTextChunks(start, end, col, setTextColorCallback);
}
void setTextSizeCallback(MacFontRun &macFontRun, int textSize) {
@@ -467,24 +468,44 @@ void MacText::setTextChunks(int start, int end, int param, void (*callback)(MacF
_contentIsDirty = true;
}
+void setTextFontCallback(MacFontRun &macFontRun, int fontId) {
+ macFontRun.fontId = fontId;
+}
+
+void MacText::setTextFont(int start, int end, int fontId) {
+ setTextChunks(start, end, fontId, setTextFontCallback);
+}
+
+void setTextSlantCallback(MacFontRun &macFontRun, int textSlant) {
+ macFontRun.textSlant = textSlant;
+}
+
+void MacText::setTextSlant(int start, int end, int textSlant) {
+ setTextChunks(start, end, textSlant, setTextSlantCallback);
+}
+
// this maybe need to amend
// currently, we just return the text size of first character.
int MacText::getTextSize(int start, int end) {
- if (_textLines.empty())
- return _defaultFormatting.fontSize;
- if (start > end)
- SWAP(start, end);
+ return getTextChunks(start, end).fontSize;
+}
- uint startRow, startCol;
- uint offset;
+uint MacText::getTextColor(int start, int end) {
+ return getTextChunks(start, end).fgcolor;
+}
- getChunkPosFromIndex(start, startRow, startCol, offset);
- return _textLines[startRow].chunks[startCol].fontSize;
+int MacText::getTextFont(int start, int end) {
+ return getTextChunks(start, end).fontId;
}
-uint MacText::getTextColor(int start, int end) {
+int MacText::getTextSlant(int start, int end) {
+ return getTextChunks(start, end).textSlant;
+}
+
+// only getting the first chunk for the selected area
+MacFontRun MacText::getTextChunks(int start, int end) {
if (_textLines.empty())
- return _defaultFormatting.fontSize;
+ return _defaultFormatting;
if (start > end)
SWAP(start, end);
@@ -492,7 +513,7 @@ uint MacText::getTextColor(int start, int end) {
uint offset;
getChunkPosFromIndex(start, startRow, startCol, offset);
- return _textLines[startRow].chunks[startCol].fgcolor;
+ return _textLines[startRow].chunks[startCol];
}
void MacText::setDefaultFormatting(uint16 fontId, byte textSlant, uint16 fontSize,
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 3d11ce08a2..dd2906264e 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -205,7 +205,14 @@ public:
uint getTextColor() { return _defaultFormatting.fgcolor; }
uint getTextColor(int start, int end);
+ int getTextFont(int start, int end);
+ void setTextFont(int start, int end, int fontId);
+
+ int getTextSlant(int start, int end);
+ void setTextSlant(int start, int end, int textSlant);
+
private:
+ MacFontRun getTextChunks(int start, int end);
void setTextChunks(int start, int end, int param, void (*callback)(MacFontRun &, int));
void appendText_(const Common::U32String &strWithFont, uint oldLen);
Commit: dc41917a74cb5b872a8169edfd2d5191ba1afc9c
https://github.com/scummvm/scummvm/commit/dc41917a74cb5b872a8169edfd2d5191ba1afc9c
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: implement text chunk fields operations
Changed paths:
engines/director/lingo/lingo-object.cpp
graphics/macgui/mactext.cpp
graphics/macgui/mactext.h
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index b7a9f14890..7064440a18 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -36,6 +36,7 @@
#include "director/lingo/xlibs/palxobj.h"
#include "director/lingo/xlibs/flushxobj.h"
#include "director/lingo/xlibs/winxobj.h"
+#include "graphics/macgui/mactext.h"
namespace Director {
@@ -999,21 +1000,38 @@ bool TextCastMember::hasChunkField(int field) {
Datum TextCastMember::getChunkField(int field, int start, int end) {
Datum d;
+ Graphics::MacText *macText = ((Graphics::MacText *)_widget);
+ if (!_widget)
+ warning("TextCastMember::getChunkField getting chunk field when there is no linked widget, returning the default value");
+
switch (field) {
case kTheForeColor:
- d.u.i = getForeColor();
+ if (_widget)
+ d.u.i = macText->getTextColor(start, end);
+ else
+ d.u.i = getForeColor();
break;
case kTheTextFont:
- d.u.i = _fontId;
+ if (_widget)
+ d.u.i = macText->getTextFont(start, end);
+ else
+ d.u.i = _fontId;
break;
case kTheTextHeight:
+ warning("TextCastMember::getChunkField getting text height(line spacing) is not implemented yet, returning the default one");
d.u.i = _lineSpacing;
break;
case kTheTextSize:
- d.u.i = _fontSize;
+ if (_widget)
+ d.u.i = macText->getTextSize(start, end);
+ else
+ d.u.i = _fontSize;
break;
case kTheTextStyle:
- d.u.i = _textSlant;
+ if (_widget)
+ d.u.i = macText->getTextSlant(start, end);
+ else
+ d.u.i = _textSlant;
break;
default:
break;
@@ -1023,28 +1041,30 @@ Datum TextCastMember::getChunkField(int field, int start, int end) {
}
bool TextCastMember::setChunkField(int field, int start, int end, const Datum &d) {
- uint color = 0;
+ Graphics::MacText *macText = ((Graphics::MacText *)_widget);
+ if (!_widget)
+ warning("TextCastMember::setChunkField setting chunk field when there is no linked widget");
+
switch (field) {
case kTheForeColor:
- color = d.asInt();
- setColors(&color, nullptr);
- return false;
+ if (_widget)
+ macText->setTextColor(d.asInt(), start, end);
+ return true;
case kTheTextFont:
- _fontId = d.asInt();
- _modified = true;
- return false;
+ if (_widget)
+ macText->setTextFont(d.asInt(), start, end);
+ return true;
case kTheTextHeight:
- _lineSpacing = d.asInt();
- _modified = true;
+ warning("TextCastMember::setChunkField setting text height(line spacing) is not implemented yet");
return false;
case kTheTextSize:
- _fontSize = d.asInt();
- _modified = true;
- return false;
+ if (_widget)
+ macText->setTextSize(d.asInt(), start, end);
+ return true;
case kTheTextStyle:
- _textSlant = d.asInt();
- _modified = true;
- return false;
+ if (_widget)
+ macText->setTextSlant(d.asInt(), start, end);
+ return true;
default:
break;
}
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 3c0f1eed0c..f4c361cf71 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -472,7 +472,7 @@ void setTextFontCallback(MacFontRun &macFontRun, int fontId) {
macFontRun.fontId = fontId;
}
-void MacText::setTextFont(int start, int end, int fontId) {
+void MacText::setTextFont(int fontId, int start, int end) {
setTextChunks(start, end, fontId, setTextFontCallback);
}
@@ -480,7 +480,7 @@ void setTextSlantCallback(MacFontRun &macFontRun, int textSlant) {
macFontRun.textSlant = textSlant;
}
-void MacText::setTextSlant(int start, int end, int textSlant) {
+void MacText::setTextSlant(int textSlant, int start, int end) {
setTextChunks(start, end, textSlant, setTextSlantCallback);
}
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index dd2906264e..4733131ebf 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -206,10 +206,10 @@ public:
uint getTextColor(int start, int end);
int getTextFont(int start, int end);
- void setTextFont(int start, int end, int fontId);
+ void setTextFont(int fontId, int start, int end);
int getTextSlant(int start, int end);
- void setTextSlant(int start, int end, int textSlant);
+ void setTextSlant(int textSlant, int start, int end);
private:
MacFontRun getTextChunks(int start, int end);
Commit: 4add08636543b5cf5bc486bf4b07e594111259e2
https://github.com/scummvm/scummvm/commit/4add08636543b5cf5bc486bf4b07e594111259e2
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: create a stub for fplay
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-builtins.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 9baceed2f3..1a631622a1 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -163,6 +163,7 @@ static struct BuiltinProto {
{ "pause", LB::b_pause, 0, 0, false, 200, CBLTIN }, // D2 c
{ "play", LB::b_play, 0, 2, false, 200, CBLTIN }, // D2 c
{ "playAccel", LB::b_playAccel, -1,0, false, 200, CBLTIN }, // D2
+ {"fplay", LB::b_fplay, -1,0, false, 200, CBLTIN }, // D2
// play done // D2
{ "preLoad", LB::b_preLoad, -1,0, false, 300, CBLTIN }, // D3.1 c
{ "preLoadCast", LB::b_preLoadCast, -1,0, false, 300, CBLTIN }, // D3.1 c
@@ -2401,6 +2402,12 @@ void LB::b_version(int nargs) {
g_lingo->push(res);
}
+void LB::b_fplay(int nargs) {
+ for (int i = 0; i < nargs; i++)
+ g_lingo->pop();
+ warning("STUB: b_fplay");
+}
+
///////////////////
// References
///////////////////
diff --git a/engines/director/lingo/lingo-builtins.h b/engines/director/lingo/lingo-builtins.h
index 4c00207411..816b867fd2 100644
--- a/engines/director/lingo/lingo-builtins.h
+++ b/engines/director/lingo/lingo-builtins.h
@@ -188,6 +188,8 @@ void b_version(int nargs);
void b_cast(int nargs);
void b_script(int nargs);
+void b_fplay(int nargs);
+
void b_numberofchars(int nargs);
void b_numberofitems(int nargs);
void b_numberoflines(int nargs);
Commit: d8d43958e8051a7183181c8c1c1375174d0711bb
https://github.com/scummvm/scummvm/commit/d8d43958e8051a7183181c8c1c1375174d0711bb
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: use initialRect for sprite dims when ink type is copy
Changed paths:
engines/director/sprite.cpp
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 7446f5a74b..a966c06489 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -292,6 +292,11 @@ void Sprite::setCast(CastMemberID memberID) {
_width = dims.width();
_height = dims.height();
}
+ // for ink copy sprites, we use the original dims
+ if (_ink == kInkTypeCopy) {
+ _width = dims.width();
+ _height = dims.height();
+ }
} else if (_cast->_type != kCastShape && _cast->_type != kCastText) {
_width = dims.width();
_height = dims.height();
Commit: 6c8d4f33674d6a8af41bb96efb5554b882211040
https://github.com/scummvm/scummvm/commit/6c8d4f33674d6a8af41bb96efb5554b882211040
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: force to modify sprite dims when we are setting cast though lingo
Changed paths:
engines/director/channel.cpp
engines/director/sprite.cpp
engines/director/sprite.h
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index d6b3753ff5..a17ad26400 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -289,7 +289,7 @@ Common::Rect Channel::getBbox(bool unstretched) {
}
void Channel::setCast(CastMemberID memberID) {
- _sprite->setCast(memberID);
+ _sprite->setCast(memberID, true);
_width = _sprite->_width;
_height = _sprite->_height;
replaceWidget();
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index a966c06489..6070808a25 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -261,7 +261,7 @@ void Sprite::setPattern(uint16 pattern) {
}
}
-void Sprite::setCast(CastMemberID memberID) {
+void Sprite::setCast(CastMemberID memberID, bool forceDims) {
CastMember *member = _movie->getCastMember(memberID);
_castId = memberID;
@@ -288,10 +288,6 @@ void Sprite::setCast(CastMemberID memberID) {
Common::Rect dims = _cast->getInitialRect();
// strange logic here, need to be fixed
if (_cast->_type == kCastBitmap) {
- if (_width >= dims.width() || _height >= dims.height()) {
- _width = dims.width();
- _height = dims.height();
- }
// for ink copy sprites, we use the original dims
if (_ink == kInkTypeCopy) {
_width = dims.width();
@@ -301,6 +297,12 @@ void Sprite::setCast(CastMemberID memberID) {
_width = dims.width();
_height = dims.height();
}
+
+ // if we are setting the cast though lingo, then we modify the sprites dims to suit for cast member
+ if (forceDims) {
+ _width = dims.width();
+ _height = dims.height();
+ }
} else {
warning("Sprite::setCast(): %s has null member", memberID.asString().c_str());
}
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index 233cae70e8..bdb10101c7 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -74,7 +74,7 @@ public:
uint16 getPattern();
void setPattern(uint16 pattern);
- void setCast(CastMemberID memberID);
+ void setCast(CastMemberID memberID, bool forceDims = false);
bool isQDShape();
Graphics::Surface *getQDMatte();
void createQDMatte();
Commit: 629ee4bfa3614271832902fb4380fa14d630ca33
https://github.com/scummvm/scummvm/commit/629ee4bfa3614271832902fb4380fa14d630ca33
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: Don't skip the compression when _bitsPerPixel == 1
Changed paths:
engines/director/images.cpp
diff --git a/engines/director/images.cpp b/engines/director/images.cpp
index 864db611c7..19be183ad1 100644
--- a/engines/director/images.cpp
+++ b/engines/director/images.cpp
@@ -182,7 +182,8 @@ bool BITDDecoder::loadStream(Common::SeekableReadStream &stream) {
Common::Array<int> pixels;
// If the stream has exactly the required number of bits for this image,
// we assume it is uncompressed.
- if ((stream.size() == _pitch * _surface->h * _bitsPerPixel / 8) || (g_director->getVersion() == 200 && stream.size() >= _surface->h * _surface->w * (_bitsPerPixel / 8))) {
+ // logic above does not fit the situation when _bitsPerPixel == 1, need to fix.
+ if ((stream.size() == _pitch * _surface->h * _bitsPerPixel / 8) || (_bitsPerPixel != 1 && g_director->getVersion() == 200 && stream.size() >= _surface->h * _surface->w * _bitsPerPixel / 8)) {
debugC(6, kDebugImages, "Skipping compression");
for (int i = 0; i < stream.size(); i++) {
pixels.push_back((int)stream.readByte());
Commit: b152fc82aacb8e39ec10aaf47f5a662acea037bd
https://github.com/scummvm/scummvm/commit/b152fc82aacb8e39ec10aaf47f5a662acea037bd
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: amend setting sprites dims.
Changed paths:
engines/director/sprite.cpp
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 6070808a25..5678afe366 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -288,6 +288,14 @@ void Sprite::setCast(CastMemberID memberID, bool forceDims) {
Common::Rect dims = _cast->getInitialRect();
// strange logic here, need to be fixed
if (_cast->_type == kCastBitmap) {
+ // i'm not sure about whether to use original dims though comparing with the current one. or we decide it by ink type
+ // for now, we have only met one scaling situation in warlock stambul dancing girl.
+ // at that situation, we are using sprite dims to guide us scaling the cast. And the ink type for that is bkgnd transparent4
+ // maybe there is an flag to indicate the sprite is scaling or not?
+ if (_width >= dims.width() || _height >= dims.height()) {
+ _width = dims.width();
+ _height = dims.height();
+ }
// for ink copy sprites, we use the original dims
if (_ink == kInkTypeCopy) {
_width = dims.width();
Commit: 1b6f29b63a2d16bd10245e0fd30b53188f0264e6
https://github.com/scummvm/scummvm/commit/1b6f29b63a2d16bd10245e0fd30b53188f0264e6
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: clean the surface after playing transitions
Changed paths:
engines/director/transitions.cpp
diff --git a/engines/director/transitions.cpp b/engines/director/transitions.cpp
index de1d18485f..26ed005723 100644
--- a/engines/director/transitions.cpp
+++ b/engines/director/transitions.cpp
@@ -531,6 +531,11 @@ void Window::playTransition(uint16 transDuration, uint8 transArea, uint8 transCh
g_lingo->executePerFrameHook(t.frame, i);
}
+
+ // re-render the surface to clean the tracks when of transitions
+ render(true, _composeSurface);
+ _contentIsDirty = true;
+ g_director->draw();
}
static int getLog2(int n) {
Commit: d92c06617b50ab370eb6b63c61d0d9ea499e694c
https://github.com/scummvm/scummvm/commit/d92c06617b50ab370eb6b63c61d0d9ea499e694c
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: fixing createQDMatte
Changed paths:
engines/director/sprite.cpp
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 5678afe366..1a255528b6 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -123,22 +123,13 @@ void Sprite::createQDMatte() {
tmp.create(_width, _height, g_director->_pixelformat);
tmp.clear(g_director->_wm->_colorWhite);
- MacShape *ms = new MacShape();
-
- ms->ink = _ink;
- ms->spriteType = _spriteType;
- ms->foreColor = _foreColor;
- ms->backColor = _backColor;
- ms->lineSize = _thickness & 0x3;
- ms->pattern = getPattern();
-
Common::Rect srcRect(_width, _height);
Common::Rect fillAreaRect((int)srcRect.width(), (int)srcRect.height());
- Graphics::MacPlotData plotFill(&tmp, nullptr, &g_director->getPatterns(), ms->pattern, 0, 0, 1, ms->backColor);
+ Graphics::MacPlotData plotFill(&tmp, nullptr, &g_director->getPatterns(), getPattern(), 0, 0, 1, _backColor);
- Common::Rect strokeRect(MAX((int)srcRect.width() - ms->lineSize, 0), MAX((int)srcRect.height() - ms->lineSize, 0));
- Graphics::MacPlotData plotStroke(&tmp, nullptr, &g_director->getPatterns(), 1, 0, 0, ms->lineSize, ms->backColor);
+ Common::Rect strokeRect(MAX((int)srcRect.width() - _thickness & 0x3, 0), MAX((int)srcRect.height() - _thickness & 0x3, 0));
+ Graphics::MacPlotData plotStroke(&tmp, nullptr, &g_director->getPatterns(), 1, 0, 0, _thickness & 0x3, _backColor);
switch (_spriteType) {
case kRectangleSprite:
Commit: 4ba52620e5c550c77c4e091915a60f7f1ee990ff
https://github.com/scummvm/scummvm/commit/4ba52620e5c550c77c4e091915a60f7f1ee990ff
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: delete creating quick matte.
Changed paths:
engines/director/sprite.cpp
engines/director/sprite.h
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 1a255528b6..736755a7e7 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -52,7 +52,6 @@ Sprite::Sprite(Frame *frame) {
_ink = kInkTypeCopy;
_trails = 0;
- _matte = nullptr;
_cast = nullptr;
_thickness = 0;
@@ -72,7 +71,6 @@ Sprite::Sprite(Frame *frame) {
}
Sprite::~Sprite() {
- delete _matte;
}
bool Sprite::isQDShape() {
@@ -118,77 +116,6 @@ bool Sprite::isActive() {
|| _movie->getScriptContext(kCastScript, _castId) != nullptr;
}
-void Sprite::createQDMatte() {
- Graphics::ManagedSurface tmp;
- tmp.create(_width, _height, g_director->_pixelformat);
- tmp.clear(g_director->_wm->_colorWhite);
-
- Common::Rect srcRect(_width, _height);
-
- Common::Rect fillAreaRect((int)srcRect.width(), (int)srcRect.height());
- Graphics::MacPlotData plotFill(&tmp, nullptr, &g_director->getPatterns(), getPattern(), 0, 0, 1, _backColor);
-
- Common::Rect strokeRect(MAX((int)srcRect.width() - _thickness & 0x3, 0), MAX((int)srcRect.height() - _thickness & 0x3, 0));
- Graphics::MacPlotData plotStroke(&tmp, nullptr, &g_director->getPatterns(), 1, 0, 0, _thickness & 0x3, _backColor);
-
- switch (_spriteType) {
- case kRectangleSprite:
- Graphics::drawFilledRect(fillAreaRect, g_director->_wm->_colorBlack, g_director->_wm->getDrawPixel(), &plotFill);
- // fall through
- case kOutlinedRectangleSprite:
- Graphics::drawRect(strokeRect, g_director->_wm->_colorBlack, g_director->_wm->getDrawPixel(), &plotStroke);
- break;
- case kRoundedRectangleSprite:
- Graphics::drawRoundRect(fillAreaRect, 12, g_director->_wm->_colorBlack, true, g_director->_wm->getDrawPixel(), &plotFill);
- // fall through
- case kOutlinedRoundedRectangleSprite:
- Graphics::drawRoundRect(strokeRect, 12, g_director->_wm->_colorBlack, false, g_director->_wm->getDrawPixel(), &plotStroke);
- break;
- case kOvalSprite:
- Graphics::drawEllipse(fillAreaRect.left, fillAreaRect.top, fillAreaRect.right, fillAreaRect.bottom, g_director->_wm->_colorBlack, true, g_director->_wm->getDrawPixel(), &plotFill);
- // fall through
- case kOutlinedOvalSprite:
- Graphics::drawEllipse(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, g_director->_wm->_colorBlack, false, g_director->_wm->getDrawPixel(), &plotStroke);
- break;
- case kLineTopBottomSprite:
- Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, g_director->_wm->_colorBlack, g_director->_wm->getDrawPixel(), &plotStroke);
- break;
- case kLineBottomTopSprite:
- Graphics::drawLine(strokeRect.left, strokeRect.bottom, strokeRect.right, strokeRect.top, g_director->_wm->_colorBlack, g_director->_wm->getDrawPixel(), &plotStroke);
- break;
- default:
- warning("Sprite:createQDMatte Expected shape type but got type %d", _spriteType);
- }
-
- Graphics::Surface managedSurface;
- managedSurface.create(_width, _height, g_director->_pixelformat);
- managedSurface.copyFrom(tmp);
-
- _matte = new Graphics::FloodFill(&managedSurface, g_director->_wm->_colorWhite, 0, true);
-
- for (int yy = 0; yy < managedSurface.h; yy++) {
- _matte->addSeed(0, yy);
- _matte->addSeed(managedSurface.w - 1, yy);
- }
-
- for (int xx = 0; xx < managedSurface.w; xx++) {
- _matte->addSeed(xx, 0);
- _matte->addSeed(xx, managedSurface.h - 1);
- }
-
- _matte->fillMask();
- tmp.free();
- managedSurface.free();
-}
-
-Graphics::Surface *Sprite::getQDMatte() {
- if (!isQDShape() || _ink != kInkTypeMatte)
- return nullptr;
- if (!_matte)
- createQDMatte();
- return _matte ? _matte->getMask() : nullptr;
-}
-
bool Sprite::shouldHilite() {
if (!isActive())
return false;
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index bdb10101c7..d40e1b1619 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -76,8 +76,6 @@ public:
void setCast(CastMemberID memberID, bool forceDims = false);
bool isQDShape();
- Graphics::Surface *getQDMatte();
- void createQDMatte();
Frame *_frame;
Score *_score;
@@ -98,8 +96,6 @@ public:
uint16 _pattern;
CastMember *_cast;
- Graphics::FloodFill *_matte; // matte for quickdraw shape
-
byte _thickness;
Common::Point _startPoint;
int16 _width;
Commit: fcd87033566ebadba53072a8307ef845561ec00f
https://github.com/scummvm/scummvm/commit/fcd87033566ebadba53072a8307ef845561ec00f
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: regard 0 as the default palette
Changed paths:
engines/director/score.cpp
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 1c529ba9bb..d9de5ef4ff 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -451,7 +451,9 @@ void Score::renderFrame(uint16 frameId, RenderMode mode) {
renderSprites(frameId, mode);
int currentPalette = _frames[frameId]->_palette.paletteId;
- if (!_puppetPalette && currentPalette != 0 && currentPalette != _lastPalette) {
+ if (!_puppetPalette && currentPalette != _lastPalette) {
+ if (currentPalette == 0)
+ currentPalette = g_director->getCurrentMovie()->getCast()->_defaultPalette;
_lastPalette = currentPalette;
g_director->setPalette(resolvePaletteId(currentPalette));
}
Commit: 2ef52a07cb0f658b35fee42f2f617e9799e2fae2
https://github.com/scummvm/scummvm/commit/2ef52a07cb0f658b35fee42f2f617e9799e2fae2
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: amend the way we are parsing palette for D2
Changed paths:
engines/director/cast.cpp
engines/director/cast.h
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 20afc41677..5932bf354c 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -322,7 +322,7 @@ void Cast::loadCast() {
debugC(2, kDebugLoading, "****** Loading Palette CLUT, #%d", clutList[i]);
PaletteV4 p = loadPalette(*pal);
- g_director->addPalette(clutList[i], p.palette, p.length);
+ g_director->addPalette(clutList[i] & 0xff, p.palette, p.length);
delete pal;
}
}
@@ -508,9 +508,12 @@ void Cast::loadCastChildren() {
// TODO: Verify how palettes work in >D4 versions
if (_version >= kFileVer400 && _version < kFileVer500 && member->_children.size() == 1) {
member->_palette = g_director->getPalette(member->_children[0].index);
- } else if (_version < kFileVer400) {
+ } else if (_version >= kFileVer300 && _version < kFileVer400) {
// D3 palettes are always kept in this ascending order
member->_palette = g_director->getPalette((++p)->_value.id);
+ } else if (_version < kFileVer300) {
+ // for D2, we shall use the castId to get the palette
+ member->_palette = g_director->getPalette(member->getID());
} else {
warning("Cast::loadSpriteChildren(): Expected 1 child for palette cast, got %d", member->_children.size());
}
diff --git a/engines/director/cast.h b/engines/director/cast.h
index 3ecb7b76f4..08d9249536 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -97,9 +97,9 @@ public:
Common::String getVideoPath(int castId);
void dumpScript(const char *script, ScriptType type, uint16 id);
+ PaletteV4 loadPalette(Common::SeekableReadStreamEndian &stream);
private:
- PaletteV4 loadPalette(Common::SeekableReadStreamEndian &stream);
void loadScriptText(Common::SeekableReadStreamEndian &stream, uint16 id);
void loadFontMap(Common::SeekableReadStreamEndian &stream);
void loadFontMapV4(Common::SeekableReadStreamEndian &stream);
Commit: 0d7c1a51b2c1020fdc354d0975841614d0f54900
https://github.com/scummvm/scummvm/commit/0d7c1a51b2c1020fdc354d0975841614d0f54900
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-08T02:25:11+02:00
Commit Message:
DIRECTOR: amend resolvePaletteId.
Changed paths:
engines/director/score.cpp
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index d9de5ef4ff..1d06e8b4a1 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -99,7 +99,10 @@ int Score::getCurrentPalette() {
int Score::resolvePaletteId(int id) {
// TODO: Palette ID should be a CastMemberID to allow for palettes in different casts
- if (id > 0) {
+ // 255 represent system palette in D2
+ if (id == 255) {
+ id = g_director->getCurrentMovie()->getCast()->_defaultPalette;
+ } else if (id > 0) {
CastMember *member = _movie->getCastMember(CastMemberID(id, 0));
id = (member && member->_type == kCastPalette) ? ((PaletteCastMember *)member)->getPaletteId() : 0;
}
@@ -452,8 +455,6 @@ void Score::renderFrame(uint16 frameId, RenderMode mode) {
int currentPalette = _frames[frameId]->_palette.paletteId;
if (!_puppetPalette && currentPalette != _lastPalette) {
- if (currentPalette == 0)
- currentPalette = g_director->getCurrentMovie()->getCast()->_defaultPalette;
_lastPalette = currentPalette;
g_director->setPalette(resolvePaletteId(currentPalette));
}
More information about the Scummvm-git-logs
mailing list