diff options
-rw-r--r-- | engines/access/files.cpp | 14 | ||||
-rw-r--r-- | engines/access/inventory.cpp | 16 | ||||
-rw-r--r-- | engines/access/inventory.h | 4 |
3 files changed, 29 insertions, 5 deletions
diff --git a/engines/access/files.cpp b/engines/access/files.cpp index 5cf467077d..b1d6140e3e 100644 --- a/engines/access/files.cpp +++ b/engines/access/files.cpp @@ -111,7 +111,19 @@ void FileManager::loadScreen(Graphics::Surface *dest, int fileNum, int subfile) // Get the data for the screen, and copy it over byte *pSrc = handleFile(); - Common::copy(pSrc, pSrc + _filesize, (byte *)dest->getPixels()); + + if (dest != _vm->_screen) + dest->w = _vm->_screen->w; + + if (dest->w == dest->pitch) { + Common::copy(pSrc, pSrc + _filesize, (byte *)dest->getPixels()); + } else { + byte *pCurr = pSrc; + for (int y = 0; y < dest->h; ++y, pCurr += dest->w) { + byte *pDest = (byte *)dest->getBasePtr(0, y); + Common::copy(pCurr, pCurr + dest->w, pDest); + } + } delete[] pSrc; } diff --git a/engines/access/inventory.cpp b/engines/access/inventory.cpp index 80336e4dcc..1bafdf56c3 100644 --- a/engines/access/inventory.cpp +++ b/engines/access/inventory.cpp @@ -90,8 +90,7 @@ int InventoryManager::newDisplayInv() { _vm->_timers.saveTimers(); if (room._tile && !_invRefreshFlag) { - _vm->_buffer1.copyTo(&_savedBuffer1); - screen.copyTo(&_savedScreen); + saveScreens(); } savedFields(); @@ -144,8 +143,7 @@ int InventoryManager::newDisplayInv() { } if (!room._tile && !_invRefreshFlag) { - _savedBuffer1.copyTo(&_vm->_buffer1); - _savedScreen.copyTo(_vm->_screen); + restoreScreens(); } else { screen.setBufferScan(); room.buildScreen(); @@ -310,5 +308,15 @@ int InventoryManager::coordIndexOf() { return -1; } +void InventoryManager::saveScreens() { + _vm->_buffer1.copyTo(&_savedBuffer1); + _vm->_screen->copyTo(&_savedScreen); +} + +void InventoryManager::restoreScreens() { + _vm->_buffer1.w = _vm->_buffer1.pitch; + _savedBuffer1.copyTo(&_vm->_buffer1); + _savedScreen.copyTo(_vm->_screen); +} } // End of namespace Access diff --git a/engines/access/inventory.h b/engines/access/inventory.h index cf8167d76c..255b6dce40 100644 --- a/engines/access/inventory.h +++ b/engines/access/inventory.h @@ -76,6 +76,10 @@ private: void freeInvCells(); int coordIndexOf(); + + void saveScreens(); + + void restoreScreens(); public: Common::Array<int> _inv; Common::StringArray _names; |