From c2d13695463bd6e98910a3fac6d42853cc29a668 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 26 Jul 2015 21:15:57 -0400 Subject: SHERLOCK: RT: Stop windows from going off-screen to the right --- engines/sherlock/scene.h | 10 +++++----- engines/sherlock/tattoo/tattoo_scene.cpp | 9 +++++++++ engines/sherlock/tattoo/tattoo_scene.h | 5 +++++ engines/sherlock/tattoo/tattoo_user_interface.cpp | 2 ++ engines/sherlock/tattoo/widget_base.cpp | 4 ++-- 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 @@ -246,11 +246,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 @@ -280,6 +275,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. */ 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 @@ -117,6 +117,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. */ 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()); } -- cgit v1.2.3