[Scummvm-cvs-logs] SF.net SVN: scummvm:[53028] scummvm/trunk/engines/sci/graphics

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Tue Oct 5 12:30:27 CEST 2010


Revision: 53028
          http://scummvm.svn.sourceforge.net/scummvm/?rev=53028&view=rev
Author:   thebluegr
Date:     2010-10-05 10:30:26 +0000 (Tue, 05 Oct 2010)

Log Message:
-----------
SCI: Some fixes for zoom cursors

- Now the cursor buffer is initialized outside the mouse movement code, thus saving
a memcpy there
- Plugged some memory leaks
- Removed an obsolete check

Modified Paths:
--------------
    scummvm/trunk/engines/sci/graphics/cursor.cpp
    scummvm/trunk/engines/sci/graphics/cursor.h

Modified: scummvm/trunk/engines/sci/graphics/cursor.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/cursor.cpp	2010-10-05 09:16:15 UTC (rev 53027)
+++ scummvm/trunk/engines/sci/graphics/cursor.cpp	2010-10-05 10:30:26 UTC (rev 53028)
@@ -58,10 +58,12 @@
 	_zoomPicView = 0;
 	_zoomColor = 0;
 	_zoomMultiplier = 0;
+	_cursorSurface = 0;
 }
 
 GfxCursor::~GfxCursor() {
 	purgeCache();
+	kernelClearZoomZone();
 }
 
 void GfxCursor::init(GfxCoordAdjuster *coordAdjuster, EventManager *event) {
@@ -368,15 +370,12 @@
 		// Cursor
 		const CelInfo *cursorCelInfo = _zoomCursorView->getCelInfo(_zoomCursorLoop, _zoomCursorCel);
 		const byte *cursorBitmap = _zoomCursorView->getBitmap(_zoomCursorLoop, _zoomCursorCel);
-		byte *finalBitmap = new byte[cursorCelInfo->width * cursorCelInfo->height];
 		// Pic
 		const CelInfo *picCelInfo = _zoomPicView->getCelInfo(0, 0);
 		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);
 
-		memcpy(finalBitmap, cursorBitmap, cursorCelInfo->width * cursorCelInfo->height);
-
 		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);
 
@@ -384,15 +383,13 @@
 		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] = rawPicBitmap[picCelInfo->width * (targetY + y) + (targetX + x)];
+				if (cursorBitmap[curPos] == _zoomColor) {
+					_cursorSurface[curPos] = rawPicBitmap[picCelInfo->width * (targetY + y) + (targetX + x)];
 				}
 			}
 		}
 
-		CursorMan.replaceCursor((const byte *)finalBitmap, cursorCelInfo->width, cursorCelInfo->height, cursorHotspot.x, cursorHotspot.y, cursorCelInfo->clearKey);
-
-		delete[] finalBitmap;
+		CursorMan.replaceCursor((const byte *)_cursorSurface, cursorCelInfo->width, cursorCelInfo->height, cursorHotspot.x, cursorHotspot.y, cursorCelInfo->clearKey);
 	}
 }
 
@@ -413,13 +410,11 @@
 	_zoomZoneActive = false;
 	delete _zoomCursorView;
 	delete _zoomPicView;
+	delete[] _cursorSurface;
 }
 
 void GfxCursor::kernelSetZoomZone(byte multiplier, Common::Rect zone, GuiResourceId viewNum, int loopNum, int celNum, GuiResourceId picNum, byte zoomColor) {
-	if (multiplier != 1 && multiplier != 2) {
-		warning("kernelSetZoomZone: Unsupported magnifier %d", multiplier);
-		return;
-	}
+	kernelClearZoomZone();
 
 	_zoomMultiplier = multiplier;
 
@@ -427,6 +422,10 @@
 	_zoomCursorLoop = (byte)loopNum;
 	_zoomCursorCel = (byte)celNum;
 	_zoomPicView = new GfxView(_resMan, _screen, _palette, picNum);
+	const CelInfo *cursorCelInfo = _zoomCursorView->getCelInfo(_zoomCursorLoop, _zoomCursorCel);
+	const byte *cursorBitmap = _zoomCursorView->getBitmap(_zoomCursorLoop, _zoomCursorCel);
+	_cursorSurface = new byte[cursorCelInfo->width * cursorCelInfo->height];
+	memcpy(_cursorSurface, cursorBitmap, cursorCelInfo->width * cursorCelInfo->height);
 
 	_zoomZone = zone;
 	kernelSetMoveZone(_zoomZone);

Modified: scummvm/trunk/engines/sci/graphics/cursor.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/cursor.h	2010-10-05 09:16:15 UTC (rev 53027)
+++ scummvm/trunk/engines/sci/graphics/cursor.h	2010-10-05 10:30:26 UTC (rev 53028)
@@ -107,6 +107,7 @@
 	GfxView *_zoomPicView;
 	byte _zoomColor;
 	byte _zoomMultiplier;
+	byte *_cursorSurface;
 
 	CursorCache _cachedCursors;
 


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