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

djsrv noreply at scummvm.org
Sat Jul 9 23:25:34 UTC 2022


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

Summary:
d7f9e3601e DIRECTOR: Simplify redraw logic for kTheRegPoint


Commit: d7f9e3601e78c49c241daf3cc5ba20207015e913
    https://github.com/scummvm/scummvm/commit/d7f9e3601e78c49c241daf3cc5ba20207015e913
Author: djsrv (dservilla at gmail.com)
Date: 2022-07-09T18:22:50-05:00

Commit Message:
DIRECTOR: Simplify redraw logic for kTheRegPoint

We only need to add dirty rects for the sprites with this cast member,
not force redraw every sprite.

Changed paths:
    engines/director/lingo/lingo-object.cpp
    engines/director/score.cpp
    engines/director/score.h


diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 586a9a87f30..1ef4123113a 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -927,14 +927,10 @@ bool BitmapCastMember::setField(int field, const Datum &d) {
 		return false;
 	case kTheRegPoint:
 		if (d.type == POINT || (d.type == ARRAY && d.u.farr->arr.size() >= 2)) {
-			auto temp = _img;
-			_modified = true;
 			Score *score = g_director->getCurrentMovie()->getScore();
-			score->renderSprites(score->getCurrentFrame(), kRenderForceUpdate);
-			_img = nullptr;
+			score->invalidateRectsForMember(this);
 			_regX = d.u.farr->arr[0].asInt();
 			_regY = d.u.farr->arr[1].asInt();
-			_img = temp;
 			_modified = true;
 		} else {
 			warning("BitmapCastMember::setField(): Wrong Datum type %d for kTheRegPoint", d.type);
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 8f8ff270092..ddda2db3858 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -645,6 +645,15 @@ void Score::updateWidgets(bool hasVideoPlayback) {
 	}
 }
 
+void Score::invalidateRectsForMember(CastMember *member) {
+	for (uint16 i = 0; i < _channels.size(); i++) {
+		Channel *channel = _channels[i];
+		if (channel->_sprite->_cast == member) {
+			_window->addDirtyRect(channel->getBbox());
+		}
+	}
+}
+
 void Score::screenShot() {
 	Graphics::Surface rawSurface = _window->getSurface()->rawSurface();
 	const Graphics::PixelFormat requiredFormat_4byte(4, 8, 8, 8, 8, 0, 8, 16, 24);
diff --git a/engines/director/score.h b/engines/director/score.h
index 6215ecea520..bfab42e189e 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -114,6 +114,8 @@ public:
 	void renderCursor(Common::Point pos, bool forceUpdate = false);
 	void updateWidgets(bool hasVideoPlayback);
 
+	void invalidateRectsForMember(CastMember *member);
+
 	void playSoundChannel(uint16 frameId);
 
 private:




More information about the Scummvm-git-logs mailing list