[Scummvm-cvs-logs] CVS: scummvm/scumm/smush smush_player.cpp,1.157,1.158 smush_player.h,1.45,1.46
kirben
kirben at users.sourceforge.net
Fri May 6 18:52:39 CEST 2005
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm/insane insane.cpp,1.57,1.58
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.476,2.477 object.cpp,1.236,1.237 script_v100he.cpp,2.145,2.146 script_v72he.cpp,2.280,2.281 script_v7he.cpp,2.150,2.151 script_v80he.cpp,2.105,2.106 script_v90he.cpp,2.244,2.245 wiz_he.cpp,2.74,2.75 wiz_he.h,2.20,2.21
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3986/scumm/smush
Modified Files:
smush_player.cpp smush_player.h
Log Message:
Add eriktorbjorn's patch for:
#1018588 - FT: Xlib async errors in INSANE sequences
Index: smush_player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.cpp,v
retrieving revision 1.157
retrieving revision 1.158
diff -u -d -r1.157 -r1.158
--- smush_player.cpp 20 Apr 2005 19:59:18 -0000 1.157
+++ smush_player.cpp 7 May 2005 01:52:17 -0000 1.158
@@ -696,7 +696,7 @@
_deltaPal[i] = b.getWord();
}
readPalette(_pal, b);
- setPalette(_pal);
+ setDirtyColors(0, 255);
} else if (b.getSize() == 6) {
b.getWord();
@@ -706,7 +706,7 @@
for (int i = 0; i < 0x300; i++) {
_pal[i] = delta_color(_pal[i], _deltaPal[i]);
}
- setPalette(_pal);
+ setDirtyColors(0, 255);
} else {
error("SmushPlayer::handleDeltaPalette() Wrong size for DeltaPalette");
}
@@ -717,7 +717,7 @@
debugC(DEBUG_SMUSH, "SmushPlayer::handleNewPalette()");
readPalette(_pal, b);
- setPalette(_pal);
+ setDirtyColors(0, 255);
}
void smush_decode_codec1(byte *dst, byte *src, int left, int top, int height, int width, int dstWidth);
@@ -970,7 +970,7 @@
_nbframes = b.getWord();
b.getWord();
readPalette(_pal, b);
- setPalette(_pal);
+ setDirtyColors(0, 255);
}
void SmushPlayer::setupAnim(const char *file) {
@@ -1055,25 +1055,29 @@
}
void SmushPlayer::setPalette(const byte *palette) {
- byte palette_colors[1024];
- byte *p = palette_colors;
-
- for (int i = 0; i != 256; ++i) {
- *p++ = _pal[i * 3 + 0] = *palette++; // red
- *p++ = _pal[i * 3 + 1] = *palette++; // green
- *p++ = _pal[i * 3 + 2] = *palette++; // blue
- *p++ = 0;
- }
-
- _vm->_system->setPalette(palette_colors, 0, 256);
+ memcpy(_pal, palette, 0x300);
+ setDirtyColors(0, 255);
}
void SmushPlayer::setPaletteValue(int n, byte r, byte g, byte b) {
_pal[n * 3 + 0] = r;
_pal[n * 3 + 1] = g;
_pal[n * 3 + 2] = b;
+ setDirtyColors(n, n);
+}
- _vm->_system->setPalette(_pal, n, 1);
+void SmushPlayer::setDirtyColors(int min, int max) {
+ if (_palDirtyMin > min)
+ _palDirtyMin = min;
+ if (_palDirtyMax < max)
+ _palDirtyMax = max;
+}
+
+void SmushPlayer::warpMouse(int x, int y, int buttons) {
+ _warpNeeded = true;
+ _warpX = x;
+ _warpY = y;
+ _warpButtons = buttons;
}
void SmushPlayer::updateScreen() {
@@ -1129,7 +1133,6 @@
#endif
uint32 end_time, start_time = _vm->_system->getMillis();
- _vm->_system->copyRectToScreen(_dst, _width, 0, 0, _width, _height);
_updateNeeded = true;
end_time = _vm->_system->getMillis();
debugC(DEBUG_SMUSH, "Smush stats: updateScreen( %03d )", end_time - start_time);
@@ -1215,6 +1218,9 @@
tryCmpFile(filename);
_updateNeeded = false;
+ _warpNeeded = false;
+ _palDirtyMin = 256;
+ _palDirtyMax = -1;
// Hide mouse
bool oldMouseState = _vm->_system->showMouse(false);
@@ -1230,13 +1236,36 @@
}
for (;;) {
+ if (_warpNeeded) {
+ _vm->_system->warpMouse(_warpX, _warpY);
+ _warpNeeded = false;
+ }
_vm->parseEvents();
_vm->processKbd(true);
+ if (_palDirtyMax >= _palDirtyMin) {
+ byte palette_colors[1024];
+ byte *p = palette_colors;
+
+ for (int i = _palDirtyMin; i <= _palDirtyMax; i++) {
+ byte *data = _pal + i * 3;
+
+ *p++ = data[0];
+ *p++ = data[1];
+ *p++ = data[2];
+ *p++ = 0;
+ }
+
+ _vm->_system->setPalette(palette_colors, _palDirtyMin, _palDirtyMax - _palDirtyMin + 1);
+
+ _palDirtyMax = -1;
+ _palDirtyMin = 256;
+ }
if (_updateNeeded) {
uint32 end_time, start_time;
start_time = _vm->_system->getMillis();
+ _vm->_system->copyRectToScreen(_dst, _width, 0, 0, _width, _height);
_vm->_system->updateScreen();
_updateNeeded = false;
#ifdef _WIN32_WCE
Index: smush_player.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/smush_player.h,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- smush_player.h 3 Apr 2005 06:27:44 -0000 1.45
+++ smush_player.h 7 May 2005 01:52:17 -0000 1.46
@@ -73,6 +73,10 @@
byte *_dst;
bool _updateNeeded;
+ bool _warpNeeded;
+ int _palDirtyMin, _palDirtyMax;
+ int _warpX, _warpY;
+ int _warpButtons;
bool _insanity;
bool _middleAudio;
#ifdef _WIN32_WCE
@@ -88,6 +92,7 @@
~SmushPlayer();
void play(const char *filename, int32 offset = 0, int32 startFrame = 0);
+ void warpMouse(int x, int y, int buttons);
protected:
SmushFont *_sf[5];
@@ -98,6 +103,7 @@
void insanity(bool);
void setPalette(const byte *palette);
void setPaletteValue(int n, byte r, byte g, byte b);
+ void setDirtyColors(int min, int max);
void seekSan(const char *file, int32 pos, int32 contFrame);
const char *getString(int id);
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm/insane insane.cpp,1.57,1.58
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.476,2.477 object.cpp,1.236,1.237 script_v100he.cpp,2.145,2.146 script_v72he.cpp,2.280,2.281 script_v7he.cpp,2.150,2.151 script_v80he.cpp,2.105,2.106 script_v90he.cpp,2.244,2.245 wiz_he.cpp,2.74,2.75 wiz_he.h,2.20,2.21
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list