aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock
diff options
context:
space:
mode:
authorPaul Gilbert2015-07-26 21:15:57 -0400
committerPaul Gilbert2015-07-26 21:15:57 -0400
commitc2d13695463bd6e98910a3fac6d42853cc29a668 (patch)
tree4bbcaca57185f1b13c4299cb253451480d898a10 /engines/sherlock
parent20a067a66266ab63270b65994a8ab35ff398c7d2 (diff)
downloadscummvm-rg350-c2d13695463bd6e98910a3fac6d42853cc29a668.tar.gz
scummvm-rg350-c2d13695463bd6e98910a3fac6d42853cc29a668.tar.bz2
scummvm-rg350-c2d13695463bd6e98910a3fac6d42853cc29a668.zip
SHERLOCK: RT: Stop windows from going off-screen to the right
Diffstat (limited to 'engines/sherlock')
-rw-r--r--engines/sherlock/scene.h10
-rw-r--r--engines/sherlock/tattoo/tattoo_scene.cpp9
-rw-r--r--engines/sherlock/tattoo/tattoo_scene.h5
-rw-r--r--engines/sherlock/tattoo/tattoo_user_interface.cpp2
-rw-r--r--engines/sherlock/tattoo/widget_base.cpp4
5 files changed, 23 insertions, 7 deletions
diff --git a/engines/sherlock/scene.h b/engines/sherlock/scene.h
index cba4f11029..42bee4f127 100644
--- a/engines/sherlock/scene.h
+++ b/engines/sherlock/scene.h
@@ -247,11 +247,6 @@ public:
void selectScene();
/**
- * Fres all the graphics and other dynamically allocated data for the scene
- */
- void freeScene();
-
- /**
* Check the scene's objects against the game flags. If false is passed,
* it means the scene has just been loaded. A value of true means that the scene
* is in use (ie. not just loaded)
@@ -281,6 +276,11 @@ public:
int whichZone(const Common::Point &pt);
/**
+ * Fres all the graphics and other dynamically allocated data for the scene
+ */
+ virtual void freeScene();
+
+ /**
* Returns the index of the closest zone to a given point.
*/
virtual int closestZone(const Common::Point &pt) = 0;
diff --git a/engines/sherlock/tattoo/tattoo_scene.cpp b/engines/sherlock/tattoo/tattoo_scene.cpp
index 2a90a51bec..1ecc997f42 100644
--- a/engines/sherlock/tattoo/tattoo_scene.cpp
+++ b/engines/sherlock/tattoo/tattoo_scene.cpp
@@ -292,6 +292,15 @@ void TattooScene::checkBgShapes() {
}
}
+void TattooScene::freeScene() {
+ TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui;
+ Scene::freeScene();
+
+ delete ui._mask;
+ delete ui._mask1;
+ ui._mask = ui._mask1 = nullptr;
+}
+
void TattooScene::doBgAnimCheckCursor() {
Events &events = *_vm->_events;
TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui;
diff --git a/engines/sherlock/tattoo/tattoo_scene.h b/engines/sherlock/tattoo/tattoo_scene.h
index b75f7e70eb..ade4b00a38 100644
--- a/engines/sherlock/tattoo/tattoo_scene.h
+++ b/engines/sherlock/tattoo/tattoo_scene.h
@@ -118,6 +118,11 @@ public:
int getScaleVal(const Point32 &pt);
/**
+ * Fres all the graphics and other dynamically allocated data for the scene
+ */
+ virtual void freeScene();
+
+ /**
* Draw all objects and characters.
*/
virtual void doBgAnim();
diff --git a/engines/sherlock/tattoo/tattoo_user_interface.cpp b/engines/sherlock/tattoo/tattoo_user_interface.cpp
index 16cd6f261c..d8faa3e0ae 100644
--- a/engines/sherlock/tattoo/tattoo_user_interface.cpp
+++ b/engines/sherlock/tattoo/tattoo_user_interface.cpp
@@ -65,6 +65,8 @@ TattooUserInterface::TattooUserInterface(SherlockEngine *vm): UserInterface(vm),
TattooUserInterface::~TattooUserInterface() {
delete _interfaceImages;
+ delete _mask;
+ delete _mask1;
}
void TattooUserInterface::initScrollVars() {
diff --git a/engines/sherlock/tattoo/widget_base.cpp b/engines/sherlock/tattoo/widget_base.cpp
index 57d2fe0d6c..539d4a2f02 100644
--- a/engines/sherlock/tattoo/widget_base.cpp
+++ b/engines/sherlock/tattoo/widget_base.cpp
@@ -177,8 +177,8 @@ void WidgetBase::restrictToScreen() {
_bounds.moveTo(screen._currentScroll.x, _bounds.top);
if (_bounds.top < 0)
_bounds.moveTo(_bounds.left, 0);
- if (_bounds.right > screen._backBuffer1.w())
- _bounds.moveTo(screen._backBuffer1.w() - _bounds.width(), _bounds.top);
+ if (_bounds.right > (screen._currentScroll.x + SHERLOCK_SCREEN_WIDTH))
+ _bounds.moveTo(screen._currentScroll.x + SHERLOCK_SCREEN_WIDTH - _bounds.width(), _bounds.top);
if (_bounds.bottom > screen._backBuffer1.h())
_bounds.moveTo(_bounds.left, screen._backBuffer1.h() - _bounds.height());
}