[Scummvm-git-logs] scummvm master -> 509871448d584bce7ba777598d2ea72297fd14f1

djsrv dservilla at gmail.com
Fri Jul 3 15:06:25 UTC 2020


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:
509871448d DIRECTOR: Add desktop debug flag


Commit: 509871448d584bce7ba777598d2ea72297fd14f1
    https://github.com/scummvm/scummvm/commit/509871448d584bce7ba777598d2ea72297fd14f1
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-03T11:03:21-04:00

Commit Message:
DIRECTOR: Add desktop debug flag

Changed paths:
    engines/director/director.cpp
    engines/director/director.h
    engines/director/events.cpp
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/movie.cpp
    engines/director/score.cpp
    engines/director/stage.cpp
    engines/director/stage.h


diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index cb40fcb011..12d999609f 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -41,8 +41,10 @@
 
 namespace Director {
 
-const uint32 wmMode = Graphics::kWMModalMenuMode | Graphics::kWMModeNoDesktop
+const uint32 wmModeDesktop = Graphics::kWMModalMenuMode | Graphics::kWMModeManualDrawWidgets;
+const uint32 wmModeFullscreen = Graphics::kWMModalMenuMode | Graphics::kWMModeNoDesktop
 	| Graphics::kWMModeManualDrawWidgets | Graphics::kWMModeFullscreen;
+uint32 wmMode = 0;
 
 DirectorEngine *g_director;
 
@@ -63,6 +65,7 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam
 	DebugMan.addDebugChannel(kDebugFewFramesOnly, "fewframesonly", "Only run the first 10 frames");
 	DebugMan.addDebugChannel(kDebugPreprocess, "preprocess", "Lingo preprocessing");
 	DebugMan.addDebugChannel(kDebugScreenshot, "screenshot", "screenshot each frame");
+	DebugMan.addDebugChannel(kDebugDesktop, "desktop", "Show the Classic Mac desktop");
 
 	g_director = this;
 
@@ -128,6 +131,7 @@ DirectorEngine::~DirectorEngine() {
 	delete _soundManager;
 	delete _lingo;
 	delete _wm;
+	delete _surface;
 }
 
 Common::Error DirectorEngine::run() {
@@ -142,13 +146,19 @@ Common::Error DirectorEngine::run() {
 	_macBinary = nullptr;
 	_soundManager = nullptr;
 
+	wmMode = debugChannelSet(-1, kDebugDesktop) ? wmModeDesktop : wmModeFullscreen;
 	_wm = new Graphics::MacWindowManager(wmMode, &_director3QuickDrawPatterns);
 	_wm->setEngine(this);
 
 	_currentStage = new Stage(_wm->getNextId(), false, false, false, _wm);
-	_currentStage->disableBorder();
+
+	if (!debugChannelSet(-1, kDebugDesktop))
+		_currentStage->disableBorder();
+
+	_surface = new Graphics::ManagedSurface;
+	_wm->setScreen(_surface);
 	_wm->addWindowInitialized(_currentStage);
-	_wm->setScreen(_currentStage->getSurface());
+	_wm->setActiveWindow(_currentStage->getId());
 
 	_lingo = new Lingo(this);
 	_soundManager = new DirectorSound(this);
diff --git a/engines/director/director.h b/engines/director/director.h
index 08f70edfbd..b1e7b7bbf3 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -80,7 +80,8 @@ enum {
 	kDebugBytecode		= 1 << 11,
 	kDebugFewFramesOnly	= 1 << 12,
 	kDebugPreprocess	= 1 << 13,
-	kDebugScreenshot	= 1 << 14
+	kDebugScreenshot	= 1 << 14,
+	kDebugDesktop		= 1 << 15
 };
 
 struct MovieReference {
@@ -167,6 +168,7 @@ public:
 	Common::HashMap<Common::String, Score *> *_movies;
 
 	Common::RandomSource _rnd;
+	Graphics::ManagedSurface *_surface;
 	Graphics::MacWindowManager *_wm;
 
 public:
@@ -235,7 +237,7 @@ private:
 };
 
 extern DirectorEngine *g_director;
-extern const uint32 wmMode;
+extern uint32 wmMode;
 
 } // End of namespace Director
 
diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index 22bbed7be5..77d2ed554b 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -28,6 +28,7 @@
 #include "director/movie.h"
 #include "director/score.h"
 #include "director/sprite.h"
+#include "director/stage.h"
 #include "director/castmember.h"
 #include "director/lingo/lingo.h"
 
@@ -85,7 +86,7 @@ void DirectorEngine::processEvents(bool bufferLingoEvents) {
 				if (_draggingSprite) {
 					Sprite *draggedSprite = sc->getSpriteById(_draggingSpriteId);
 					if (draggedSprite->_moveable) {
-						pos = g_system->getEventManager()->getMousePos();
+						pos = getStage()->getMousePos();
 
 						sc->_channels[_draggingSpriteId]->addDelta(pos - _draggingSpritePos);
 						_draggingSpritePos = pos;
@@ -96,7 +97,7 @@ void DirectorEngine::processEvents(bool bufferLingoEvents) {
 				break;
 
 			case Common::EVENT_LBUTTONDOWN:
-				pos = g_system->getEventManager()->getMousePos();
+				pos = _currentStage->getMousePos();
 
 				// D3 doesn't have both mouse up and down.
 				// But we still want to know if the mouse is down for press effects.
@@ -116,7 +117,7 @@ void DirectorEngine::processEvents(bool bufferLingoEvents) {
 				break;
 
 			case Common::EVENT_LBUTTONUP:
-				pos = g_system->getEventManager()->getMousePos();
+				pos = _currentStage->getMousePos();
 
 				spriteId = sc->getSpriteIDFromPos(pos, true);
 
@@ -173,7 +174,7 @@ void DirectorEngine::processEvents(bool bufferLingoEvents) {
 void DirectorEngine::setDraggedSprite(uint16 id) {
 	_draggingSprite = true;
 	_draggingSpriteId = id;
-	_draggingSpritePos = g_system->getEventManager()->getMousePos();
+	_draggingSpritePos = _currentStage->getMousePos();
 }
 
 void DirectorEngine::releaseDraggedSprite() {
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 7af9ed594f..b9ae0fb6d4 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1803,7 +1803,7 @@ void LB::b_rollOver(int nargs) {
 		return;
 	}
 
-	Common::Point pos = g_system->getEventManager()->getMousePos();
+	Common::Point pos = g_director->getStage()->getMousePos();
 
 	if (score->checkSpriteIntersection(arg, pos))
 		res.u.i = 1; // TRUE
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index d9c1e6610d..330a42f26f 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -469,7 +469,7 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
 		break;
 	case kTheMouseCast:
 		{
-			Common::Point pos = g_system->getEventManager()->getMousePos();
+			Common::Point pos = g_director->getStage()->getMousePos();
 			Score *sc = _vm->getCurrentMovie()->getScore();
 			uint16 spriteId = sc->getSpriteIDFromPos(pos);
 			d.type = INT;
@@ -491,11 +491,11 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
 		break;
 	case kTheMouseH:
 		d.type = INT;
-		d.u.i = g_system->getEventManager()->getMousePos().x;
+		d.u.i = g_director->getStage()->getMousePos().x;
 		break;
 	case kTheMouseV:
 		d.type = INT;
-		d.u.i = g_system->getEventManager()->getMousePos().y;
+		d.u.i = g_director->getStage()->getMousePos().y;
 		break;
 	case kTheMouseUp:
 		d.type = INT;
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index 5ce41b9a21..eb289ce482 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -101,6 +101,13 @@ bool Movie::loadArchive() {
 	if (stage->getSurface()->w != _movieRect.width() || stage->getSurface()->h != _movieRect.height()) {
 		stage->resize(_movieRect.width(), _movieRect.height());
 	}
+	// TODO: Add more options for desktop dimensions
+	uint16 windowWidth = debugChannelSet(-1, kDebugDesktop) ? 1024 : _movieRect.width();
+	uint16 windowHeight = debugChannelSet(-1, kDebugDesktop) ? 768 : _movieRect.height();
+	if (g_director->_surface->w != windowWidth || g_director->_surface->h != windowHeight) {
+		g_director->_surface->free();
+		g_director->_surface->create(windowWidth, windowHeight, Graphics::PixelFormat::createFormatCLUT8());
+	}
 
 	stage->setStageColor(_stageColor);
 
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index c3d9b3f169..4e831542d0 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -362,7 +362,7 @@ int Score::getPreviousLabelNumber(int referenceFrame) {
 void Score::startLoop() {
 	// TODO: Should the dims be set by the movie?
 	debugC(1, kDebugImages, "Score dims: %dx%d", _movie->_movieRect.width(), _movie->_movieRect.height());
-	initGraphics(_movie->_movieRect.width(), _movie->_movieRect.height());
+	initGraphics(_vm->_surface->w, _vm->_surface->h);
 
 	_currentFrame = 0;
 	_stopPlay = false;
diff --git a/engines/director/stage.cpp b/engines/director/stage.cpp
index 4354852499..76a0c05a2c 100644
--- a/engines/director/stage.cpp
+++ b/engines/director/stage.cpp
@@ -20,6 +20,8 @@
  *
  */
 
+#include "common/system.h"
+
 #include "graphics/primitives.h"
 #include "graphics/macgui/macwindowmanager.h"
 
@@ -82,7 +84,9 @@ void Stage::reset() {
 
 void Stage::addDirtyRect(const Common::Rect &r) {
 	Common::Rect bounds = r;
-	bounds.clip(_dims);
+	Common::Rect clip = _dims;
+	clip.moveTo(0, 0);
+	bounds.clip(clip);
 
 	if (bounds.width() > 0 && bounds.height() > 0)
 		_dirtyRects.push_back(bounds);
@@ -261,4 +265,8 @@ void Stage::drawMatteSprite(Channel *channel, Common::Rect &srcRect, Common::Rec
 	tmp.free();
 }
 
+Common::Point Stage::getMousePos() {
+	return g_system->getEventManager()->getMousePos() - Common::Point(_dims.left, _dims.top);
+}
+
 } // end of namespace Director
diff --git a/engines/director/stage.h b/engines/director/stage.h
index 1193a58ca0..920819696c 100644
--- a/engines/director/stage.h
+++ b/engines/director/stage.h
@@ -58,6 +58,8 @@ class Stage : public Graphics::MacWindow {
 	void transMultiPass(TransParams &t, Common::Rect &clipRect, Graphics::ManagedSurface *tmpSurface);
 	void transZoom(TransParams &t, Common::Rect &clipRect, Graphics::ManagedSurface *tmpSurface);
 
+	Common::Point getMousePos();
+
 public:
 	Common::List<Common::Rect> _dirtyRects;
 	Common::List<Channel *> _dirtyChannels;




More information about the Scummvm-git-logs mailing list