aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/cursor.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2010-10-04 06:05:34 +0000
committerFilippos Karapetis2010-10-04 06:05:34 +0000
commit165432ad190cd8b2131580989f2879b9154ec0d1 (patch)
tree80c66b10b0371e9f25c33755fd729367f1b2f4ff /engines/sci/graphics/cursor.cpp
parentd1fb1d5b2671f777e0e4ec7fceecfe6c4585858b (diff)
downloadscummvm-rg350-165432ad190cd8b2131580989f2879b9154ec0d1.tar.gz
scummvm-rg350-165432ad190cd8b2131580989f2879b9154ec0d1.tar.bz2
scummvm-rg350-165432ad190cd8b2131580989f2879b9154ec0d1.zip
SCI: Several corrections for magnifier cursors
svn-id: r53010
Diffstat (limited to 'engines/sci/graphics/cursor.cpp')
-rw-r--r--engines/sci/graphics/cursor.cpp34
1 files changed, 6 insertions, 28 deletions
diff --git a/engines/sci/graphics/cursor.cpp b/engines/sci/graphics/cursor.cpp
index 16091a6610..86e06dc06b 100644
--- a/engines/sci/graphics/cursor.cpp
+++ b/engines/sci/graphics/cursor.cpp
@@ -56,7 +56,6 @@ GfxCursor::GfxCursor(ResourceManager *resMan, GfxPalette *palette, GfxScreen *sc
_zoomCursorLoop = 0;
_zoomCursorCel = 0;
_zoomPicView = 0;
- _zoomBitmap = 0;
_zoomColor = 0;
_zoomMultiplier = 0;
}
@@ -369,34 +368,24 @@ void GfxCursor::refreshPosition() {
// Cursor
const CelInfo *cursorCelInfo = _zoomCursorView->getCelInfo(_zoomCursorLoop, _zoomCursorCel);
const byte *cursorBitmap = _zoomCursorView->getBitmap(_zoomCursorLoop, _zoomCursorCel);
- int16 cursorWidth = cursorCelInfo->width * (_upscaledHires ? 2 : 1);
- int16 cursorHeight = cursorCelInfo->height * (_upscaledHires ? 2 : 1);
- byte *finalBitmap = new byte[cursorWidth * cursorHeight];
+ byte *finalBitmap = new byte[cursorCelInfo->width * cursorCelInfo->height];
// Pic
const CelInfo *picCelInfo = _zoomPicView->getCelInfo(0, 0);
- int16 picWidth = picCelInfo->width * _zoomMultiplier;
- //int16 picHeight = picCelInfo->height * _zoomMultiplier;
+ const byte *rawPicBitmap = _zoomPicView->getBitmap(0, 0);
// Compute hotspot from xoffset/yoffset
Common::Point cursorHotspot = Common::Point((cursorCelInfo->width >> 1) - cursorCelInfo->displaceX, cursorCelInfo->height - cursorCelInfo->displaceY - 1);
- if (!_upscaledHires) {
- memcpy(finalBitmap, cursorBitmap, cursorCelInfo->width * cursorCelInfo->height);
- } else {
- // Scale cursor by 2x - note: sierra didn't do this, but it looks much better
- cursorHotspot.x *= 2;
- cursorHotspot.y *= 2;
- _screen->scale2x(cursorBitmap, finalBitmap, cursorCelInfo->width, cursorCelInfo->height);
- }
+ memcpy(finalBitmap, cursorBitmap, cursorCelInfo->width * cursorCelInfo->height);
- uint16 targetX = mousePoint.x * _zoomMultiplier - _zoomZone.left;
- uint16 targetY = mousePoint.y * _zoomMultiplier - _zoomZone.top;
+ uint16 targetX = CLIP<int>((mousePoint.x - _zoomZone.left) * _zoomMultiplier, 0, picCelInfo->width - cursorCelInfo->width);
+ uint16 targetY = CLIP<int>((mousePoint.y - _zoomZone.top) * _zoomMultiplier, 0, picCelInfo->height - cursorCelInfo->height);
// Replace the special magnifier color with the associated magnified pixels
for (int x = 0; x < cursorCelInfo->width; x++) {
for (int y = 0; y < cursorCelInfo->height; y++) {
int curPos = cursorCelInfo->width * y + x;
if (finalBitmap[curPos] == _zoomColor) {
- finalBitmap[curPos] = _zoomBitmap[picWidth * (targetY + y) + (targetX + x)];
+ finalBitmap[curPos] = rawPicBitmap[picCelInfo->width * (targetY + y) + (targetX + x)];
}
}
}
@@ -417,7 +406,6 @@ void GfxCursor::kernelSetMoveZone(Common::Rect zone) {
}
void GfxCursor::kernelClearZoomZone() {
- delete[] _zoomBitmap;
kernelResetMoveZone();
_zoomZone = Common::Rect();
_zoomColor = 0;
@@ -448,16 +436,6 @@ void GfxCursor::kernelSetZoomZone(byte multiplier, Common::Rect zone, GuiResourc
kernelSetView(viewNum, loopNum, celNum, NULL);
- GfxView *zoomPicView = _cachedCursors[picNum];
- const byte *rawPicBitmap = zoomPicView->getBitmap(0, 0);
- const CelInfo *celInfo = zoomPicView->getCelInfo(0, 0);
- _zoomBitmap = new byte[(celInfo->width * _zoomMultiplier) * (celInfo->height * _zoomMultiplier)];
-
- if (_zoomMultiplier == 1)
- memcpy(_zoomBitmap, rawPicBitmap, celInfo->width * celInfo->height);
- else if (_zoomMultiplier == 2)
- _screen->scale2x(rawPicBitmap, _zoomBitmap, celInfo->width, celInfo->height);
-
_zoomZone = zone;
kernelSetMoveZone(_zoomZone);