[Scummvm-cvs-logs] SF.net SVN: scummvm:[45541] scummvm/trunk/engines/sci/gui
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Fri Oct 30 18:13:26 CET 2009
Revision: 45541
http://scummvm.svn.sourceforge.net/scummvm/?rev=45541&view=rev
Author: thebluegr
Date: 2009-10-30 17:13:25 +0000 (Fri, 30 Oct 2009)
Log Message:
-----------
Added caching for mouse cursor views
Modified Paths:
--------------
scummvm/trunk/engines/sci/gui/gui_cursor.cpp
scummvm/trunk/engines/sci/gui/gui_cursor.h
Modified: scummvm/trunk/engines/sci/gui/gui_cursor.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_cursor.cpp 2009-10-30 16:20:24 UTC (rev 45540)
+++ scummvm/trunk/engines/sci/gui/gui_cursor.cpp 2009-10-30 17:13:25 UTC (rev 45541)
@@ -44,6 +44,7 @@
}
SciGuiCursor::~SciGuiCursor() {
+ purgeCache();
}
void SciGuiCursor::show() {
@@ -54,6 +55,15 @@
CursorMan.showMouse(false);
}
+void SciGuiCursor::purgeCache() {
+ for (CursorCache::iterator iter = _cachedCursors.begin(); iter != _cachedCursors.end(); ++iter) {
+ delete iter->_value;
+ iter->_value = 0;
+ }
+
+ _cachedCursors.clear();
+}
+
void SciGuiCursor::setShape(GuiResourceId resourceId) {
Resource *resource;
byte *resourceData;
@@ -114,8 +124,14 @@
}
void SciGuiCursor::setView(GuiResourceId viewNum, int loopNum, int celNum, Common::Point *hotspot) {
- SciGuiView *cursorView = new SciGuiView(_resMan, _screen, _palette, viewNum);
+ if (_cachedCursors.size() >= MAX_CACHED_CURSORS)
+ purgeCache();
+ if (!_cachedCursors.contains(viewNum))
+ _cachedCursors[viewNum] = new SciGuiView(_resMan, _screen, _palette, viewNum);
+
+ SciGuiView *cursorView = _cachedCursors[viewNum];
+
sciViewCelInfo *celInfo = cursorView->getCelInfo(loopNum, celNum);
int16 width = celInfo->width;
int16 height = celInfo->height;
@@ -129,7 +145,6 @@
if (width < 2 || height < 2) {
hide();
delete cursorHotspot;
- delete cursorView;
return;
}
@@ -139,7 +154,6 @@
show();
delete cursorHotspot;
- delete cursorView;
}
void SciGuiCursor::setPosition(Common::Point pos) {
Modified: scummvm/trunk/engines/sci/gui/gui_cursor.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_cursor.h 2009-10-30 16:20:24 UTC (rev 45540)
+++ scummvm/trunk/engines/sci/gui/gui_cursor.h 2009-10-30 17:13:25 UTC (rev 45541)
@@ -26,6 +26,8 @@
#ifndef SCI_GUI_CURSOR_H
#define SCI_GUI_CURSOR_H
+#include "common/hashmap.h"
+
namespace Sci {
#define SCI_CURSOR_SCI0_HEIGHTWIDTH 16
@@ -33,8 +35,13 @@
#define SCI_CURSOR_SCI0_TRANSPARENCYCOLOR 1
+#define MAX_CACHED_CURSORS 10
+
class SciGuiView;
class SciGuiPalette;
+
+typedef Common::HashMap<int, SciGuiView *> CursorCache;
+
class SciGuiCursor {
public:
SciGuiCursor(ResourceManager *resMan, SciGuiPalette *palette, SciGuiScreen *screen);
@@ -56,11 +63,15 @@
void setMoveZone(Common::Rect zone) { _moveZone = zone; }
private:
+ void purgeCache();
+
ResourceManager *_resMan;
SciGuiScreen *_screen;
SciGuiPalette *_palette;
Common::Rect _moveZone; // Rectangle in which the pointer can move
+
+ CursorCache _cachedCursors;
};
} // End of namespace Sci
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