[Scummvm-cvs-logs] SF.net SVN: scummvm:[47125] scummvm/trunk/engines/sci
m_kiewitz at users.sourceforge.net
m_kiewitz at users.sourceforge.net
Thu Jan 7 16:51:02 CET 2010
Revision: 47125
http://scummvm.svn.sourceforge.net/scummvm/?rev=47125&view=rev
Author: m_kiewitz
Date: 2010-01-07 15:50:58 +0000 (Thu, 07 Jan 2010)
Log Message:
-----------
SCI: fixed save/restorebits within screen class for displayscreen case, fixes kq6 menu bar
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/kgraphics.cpp
scummvm/trunk/engines/sci/graphics/gfx.cpp
scummvm/trunk/engines/sci/graphics/screen.cpp
scummvm/trunk/engines/sci/graphics/screen.h
Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp 2010-01-07 15:38:29 UTC (rev 47124)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp 2010-01-07 15:50:58 UTC (rev 47125)
@@ -266,6 +266,7 @@
case K_GRAPH_UPDATE_BOX:
kGraphCreateRect(x, y, x1, y1, &rect);
+ // argc == 7 on upscaled hires
s->_gui->graphUpdateBox(rect);
break;
Modified: scummvm/trunk/engines/sci/graphics/gfx.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/gfx.cpp 2010-01-07 15:38:29 UTC (rev 47124)
+++ scummvm/trunk/engines/sci/graphics/gfx.cpp 2010-01-07 15:50:58 UTC (rev 47125)
@@ -277,6 +277,12 @@
OffsetRect(workerRect);
+ if (screenMask == SCI_SCREEN_MASK_DISPLAY) {
+ // Adjust rect to upscaled hires
+ workerRect.top *= 2; workerRect.bottom *= 2; workerRect.bottom++;
+ workerRect.left *= 2; workerRect.right *= 2; workerRect.right++;
+ }
+
// now actually ask _screen how much space it will need for saving
size = _screen->bitsGetDataSize(workerRect, screenMask);
@@ -383,8 +389,8 @@
// adjust curPort to upscaled hires
clipRect = celRect;
curPortRect = _curPort->rect;
- curPortRect.top *= 2; curPortRect.bottom *= 2;
- curPortRect.left *= 2; curPortRect.right *= 2;
+ curPortRect.top *= 2; curPortRect.bottom *= 2; curPortRect.bottom++;
+ curPortRect.left *= 2; curPortRect.right *= 2; curPortRect.right++;
clipRect.clip(curPortRect);
if (clipRect.isEmpty()) // nothing to draw
return;
Modified: scummvm/trunk/engines/sci/graphics/screen.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/screen.cpp 2010-01-07 15:38:29 UTC (rev 47124)
+++ scummvm/trunk/engines/sci/graphics/screen.cpp 2010-01-07 15:50:58 UTC (rev 47125)
@@ -280,31 +280,31 @@
memcpy(memoryPtr, (void *)&mask, sizeof(mask)); memoryPtr += sizeof(mask);
if (mask & SCI_SCREEN_MASK_VISUAL) {
- bitsSaveScreen(rect, _visualScreen, memoryPtr);
+ bitsSaveScreen(rect, _visualScreen, _width, memoryPtr);
bitsSaveDisplayScreen(rect, memoryPtr);
}
if (mask & SCI_SCREEN_MASK_PRIORITY) {
- bitsSaveScreen(rect, _priorityScreen, memoryPtr);
+ bitsSaveScreen(rect, _priorityScreen, _width, memoryPtr);
}
if (mask & SCI_SCREEN_MASK_CONTROL) {
- bitsSaveScreen(rect, _controlScreen, memoryPtr);
+ bitsSaveScreen(rect, _controlScreen, _width, memoryPtr);
}
if (mask & SCI_SCREEN_MASK_DISPLAY) {
if (!_upscaledHires)
error("bitsSave() called w/o being in upscaled hires mode");
- bitsSaveScreen(rect, _displayScreen, memoryPtr);
+ bitsSaveScreen(rect, _displayScreen, _displayWidth, memoryPtr);
}
}
-void Screen::bitsSaveScreen(Common::Rect rect, byte *screen, byte *&memoryPtr) {
+void Screen::bitsSaveScreen(Common::Rect rect, byte *screen, uint16 screenWidth, byte *&memoryPtr) {
int width = rect.width();
int y;
- screen += (rect.top * _width) + rect.left;
+ screen += (rect.top * screenWidth) + rect.left;
for (y = rect.top; y < rect.bottom; y++) {
memcpy(memoryPtr, (void*)screen, width); memoryPtr += width;
- screen += _width;
+ screen += screenWidth;
}
}
@@ -339,31 +339,31 @@
memcpy((void *)&mask, memoryPtr, sizeof(mask)); memoryPtr += sizeof(mask);
if (mask & SCI_SCREEN_MASK_VISUAL) {
- bitsRestoreScreen(rect, memoryPtr, _visualScreen);
+ bitsRestoreScreen(rect, memoryPtr, _visualScreen, _width);
bitsRestoreDisplayScreen(rect, memoryPtr);
}
if (mask & SCI_SCREEN_MASK_PRIORITY) {
- bitsRestoreScreen(rect, memoryPtr, _priorityScreen);
+ bitsRestoreScreen(rect, memoryPtr, _priorityScreen, _width);
}
if (mask & SCI_SCREEN_MASK_CONTROL) {
- bitsRestoreScreen(rect, memoryPtr, _controlScreen);
+ bitsRestoreScreen(rect, memoryPtr, _controlScreen, _width);
}
if (mask & SCI_SCREEN_MASK_DISPLAY) {
if (!_upscaledHires)
error("bitsRestore() called w/o being in upscaled hires mode");
- bitsRestoreScreen(rect, memoryPtr, _displayScreen);
+ bitsRestoreScreen(rect, memoryPtr, _displayScreen, _displayWidth);
}
}
-void Screen::bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen) {
+void Screen::bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen, uint16 screenWidth) {
int width = rect.width();
int y;
- screen += (rect.top * _width) + rect.left;
+ screen += (rect.top * screenWidth) + rect.left;
for (y = rect.top; y < rect.bottom; y++) {
memcpy((void*) screen, memoryPtr, width); memoryPtr += width;
- screen += _width;
+ screen += screenWidth;
}
}
Modified: scummvm/trunk/engines/sci/graphics/screen.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/screen.h 2010-01-07 15:38:29 UTC (rev 47124)
+++ scummvm/trunk/engines/sci/graphics/screen.h 2010-01-07 15:50:58 UTC (rev 47125)
@@ -106,9 +106,9 @@
byte _colorWhite;
byte _colorDefaultVectorData;
- void bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen);
+ void bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen, uint16 screenWidth);
void bitsRestoreDisplayScreen(Common::Rect rect, byte *&memoryPtr);
- void bitsSaveScreen(Common::Rect rect, byte *screen, byte *&memoryPtr);
+ void bitsSaveScreen(Common::Rect rect, byte *screen, uint16 screenWidth, byte *&memoryPtr);
void bitsSaveDisplayScreen(Common::Rect rect, byte *&memoryPtr);
bool _unditherState;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list