[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