properly initialize everything -> works w/o our custom new/delete now!

svn-id: r5531
This commit is contained in:
Max Horn 2002-11-13 14:38:49 +00:00
parent 248b9d974f
commit aae641c6cf
4 changed files with 68 additions and 55 deletions

View file

@ -68,13 +68,19 @@ void OSystem_SDL_Common::set_timer(int timer, int (*callback)(int)) {
OSystem_SDL_Common::OSystem_SDL_Common() OSystem_SDL_Common::OSystem_SDL_Common()
: _screen(0), _screenWidth(0), _screenHeight(0), _cdrom(0), : _screen(0), _screenWidth(0), _screenHeight(0), _cdrom(0),
_dirty_checksums(0), _currentShakePos(0), _newShakePos(0) _dirty_checksums(0),
_mouseVisible(false), _mouseDrawn(false), _mouseData(0),
_mouseHotspotX(0), _mouseHotspotY(0),
_currentShakePos(0), _newShakePos(0)
{ {
// allocate palette storage // allocate palette storage
_currentPalette = (SDL_Color*)calloc(sizeof(SDL_Color), 256); _currentPalette = (SDL_Color*)calloc(sizeof(SDL_Color), 256);
// allocate the dirty rect storage // allocate the dirty rect storage
_mouseBackup = (byte*)malloc(MAX_MOUSE_W * MAX_MOUSE_H * MAX_SCALING * 2); _mouseBackup = (byte*)malloc(MAX_MOUSE_W * MAX_MOUSE_H * MAX_SCALING * 2);
// reset mouse state
memset(&km, 0, sizeof(km));
} }
OSystem_SDL_Common::~OSystem_SDL_Common() OSystem_SDL_Common::~OSystem_SDL_Common()
@ -382,16 +388,16 @@ bool OSystem_SDL_Common::show_mouse(bool visible) {
} }
void OSystem_SDL_Common::set_mouse_pos(int x, int y) { void OSystem_SDL_Common::set_mouse_pos(int x, int y) {
if (x != _mouse_cur_state.x || y != _mouse_cur_state.y) { if (x != _mouseCurState.x || y != _mouseCurState.y) {
_mouse_cur_state.x = x; _mouseCurState.x = x;
_mouse_cur_state.y = y; _mouseCurState.y = y;
undraw_mouse(); undraw_mouse();
} }
} }
void OSystem_SDL_Common::set_mouse_cursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y) { void OSystem_SDL_Common::set_mouse_cursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y) {
_mouse_cur_state.w = w; _mouseCurState.w = w;
_mouse_cur_state.h = h; _mouseCurState.h = h;
_mouseHotspotX = hotspot_x; _mouseHotspotX = hotspot_x;
_mouseHotspotY = hotspot_y; _mouseHotspotY = hotspot_y;
@ -709,10 +715,10 @@ void OSystem_SDL_Common::draw_mouse() {
if (_mouseDrawn || !_mouseVisible) if (_mouseDrawn || !_mouseVisible)
return; return;
int x = _mouse_cur_state.x - _mouseHotspotX; int x = _mouseCurState.x - _mouseHotspotX;
int y = _mouse_cur_state.y - _mouseHotspotY; int y = _mouseCurState.y - _mouseHotspotY;
int w = _mouse_cur_state.w; int w = _mouseCurState.w;
int h = _mouse_cur_state.h; int h = _mouseCurState.h;
byte color; byte color;
byte *src = _mouseData; // Image representing the mouse byte *src = _mouseData; // Image representing the mouse
byte *bak = _mouseBackup; // Surface used to backup the area obscured by the mouse byte *bak = _mouseBackup; // Surface used to backup the area obscured by the mouse
@ -726,7 +732,7 @@ void OSystem_SDL_Common::draw_mouse() {
} }
if (y < 0) { if (y < 0) {
h += y; h += y;
src -= y * _mouse_cur_state.w; src -= y * _mouseCurState.w;
y = 0; y = 0;
} }
if (w > _screenWidth - x) if (w > _screenWidth - x)
@ -740,10 +746,10 @@ void OSystem_SDL_Common::draw_mouse() {
// Store the bounding box so that undraw mouse can restore the area the // Store the bounding box so that undraw mouse can restore the area the
// mouse currently covers to its original content. // mouse currently covers to its original content.
_mouse_old_state.x = x; _mouseOldState.x = x;
_mouse_old_state.y = y; _mouseOldState.y = y;
_mouse_old_state.w = w; _mouseOldState.w = w;
_mouse_old_state.h = h; _mouseOldState.h = h;
// Draw the mouse cursor; backup the covered area in "bak" // Draw the mouse cursor; backup the covered area in "bak"
@ -764,7 +770,7 @@ void OSystem_SDL_Common::draw_mouse() {
dst++; dst++;
width--; width--;
} }
src += _mouse_cur_state.w - w; src += _mouseCurState.w - w;
bak += MAX_MOUSE_W - w; bak += MAX_MOUSE_W - w;
dst += _screenWidth - w; dst += _screenWidth - w;
h--; h--;
@ -785,10 +791,10 @@ void OSystem_SDL_Common::undraw_mouse() {
error("SDL_LockSurface failed: %s.\n", SDL_GetError()); error("SDL_LockSurface failed: %s.\n", SDL_GetError());
byte *dst, *bak = _mouseBackup; byte *dst, *bak = _mouseBackup;
const int old_mouse_x = _mouse_old_state.x; const int old_mouse_x = _mouseOldState.x;
const int old_mouse_y = _mouse_old_state.y; const int old_mouse_y = _mouseOldState.y;
const int old_mouse_w = _mouse_old_state.w; const int old_mouse_w = _mouseOldState.w;
const int old_mouse_h = _mouse_old_state.h; const int old_mouse_h = _mouseOldState.h;
int x, y; int x, y;
// No need to do clipping here, since draw_mouse() did that already // No need to do clipping here, since draw_mouse() did that already

View file

@ -153,14 +153,15 @@ protected:
struct MousePos { struct MousePos {
int16 x, y, w, h; int16 x, y, w, h;
MousePos() : x(0), y(0), w(0), h(0) {}
}; };
bool _mouseVisible; bool _mouseVisible;
bool _mouseDrawn; bool _mouseDrawn;
byte *_mouseData; byte *_mouseData;
byte *_mouseBackup; byte *_mouseBackup;
MousePos _mouse_cur_state; MousePos _mouseCurState;
MousePos _mouse_old_state; MousePos _mouseOldState;
int16 _mouseHotspotX; int16 _mouseHotspotX;
int16 _mouseHotspotY; int16 _mouseHotspotY;

View file

@ -27,7 +27,7 @@
class OSystem_SDL_Normal : public OSystem_SDL_Common { class OSystem_SDL_Normal : public OSystem_SDL_Common {
public: public:
OSystem_SDL_Normal() : sdl_tmpscreen(0), sdl_hwscreen(0), _overlay_visible(false) {} OSystem_SDL_Normal();
// Set colors of the palette // Set colors of the palette
void set_palette(const byte *colors, uint start, uint num); void set_palette(const byte *colors, uint start, uint num);
@ -55,20 +55,26 @@ protected:
ScalerProc *_scaler_proc; ScalerProc *_scaler_proc;
int TMP_SCREEN_WIDTH;
virtual void draw_mouse(); virtual void draw_mouse();
virtual void undraw_mouse(); virtual void undraw_mouse();
virtual void load_gfx_mode(); virtual void load_gfx_mode();
virtual void unload_gfx_mode(); virtual void unload_gfx_mode();
void hotswap_gfx_mode(); void hotswap_gfx_mode();
int TMP_SCREEN_WIDTH;
}; };
OSystem_SDL_Common *OSystem_SDL_Common::create() { OSystem_SDL_Common *OSystem_SDL_Common::create() {
return new OSystem_SDL_Normal(); return new OSystem_SDL_Normal();
} }
OSystem_SDL_Normal::OSystem_SDL_Normal()
: sdl_tmpscreen(0), sdl_hwscreen(0), _overlay_visible(false),
_scaler_proc(0), TMP_SCREEN_WIDTH(0)
{
}
void OSystem_SDL_Normal::set_palette(const byte *colors, uint start, uint num) { void OSystem_SDL_Normal::set_palette(const byte *colors, uint start, uint num) {
const byte *b = colors; const byte *b = colors;
uint i; uint i;
@ -95,10 +101,10 @@ void OSystem_SDL_Normal::draw_mouse() {
if (_mouseDrawn || !_mouseVisible) if (_mouseDrawn || !_mouseVisible)
return; return;
int x = _mouse_cur_state.x - _mouseHotspotX; int x = _mouseCurState.x - _mouseHotspotX;
int y = _mouse_cur_state.y - _mouseHotspotY; int y = _mouseCurState.y - _mouseHotspotY;
int w = _mouse_cur_state.w; int w = _mouseCurState.w;
int h = _mouse_cur_state.h; int h = _mouseCurState.h;
byte color; byte color;
byte *src = _mouseData; // Image representing the mouse byte *src = _mouseData; // Image representing the mouse
uint16 *bak = (uint16*)_mouseBackup; // Surface used to backup the area obscured by the mouse uint16 *bak = (uint16*)_mouseBackup; // Surface used to backup the area obscured by the mouse
@ -112,7 +118,7 @@ void OSystem_SDL_Normal::draw_mouse() {
} }
if (y < 0) { if (y < 0) {
h += y; h += y;
src -= y * _mouse_cur_state.w; src -= y * _mouseCurState.w;
y = 0; y = 0;
} }
@ -127,10 +133,10 @@ void OSystem_SDL_Normal::draw_mouse() {
// Store the bounding box so that undraw mouse can restore the area the // Store the bounding box so that undraw mouse can restore the area the
// mouse currently covers to its original content. // mouse currently covers to its original content.
_mouse_old_state.x = x; _mouseOldState.x = x;
_mouse_old_state.y = y; _mouseOldState.y = y;
_mouse_old_state.w = w; _mouseOldState.w = w;
_mouse_old_state.h = h; _mouseOldState.h = h;
// Draw the mouse cursor; backup the covered area in "bak" // Draw the mouse cursor; backup the covered area in "bak"
@ -151,7 +157,7 @@ void OSystem_SDL_Normal::draw_mouse() {
dst++; dst++;
width--; width--;
} }
src += _mouse_cur_state.w - w; src += _mouseCurState.w - w;
bak += MAX_MOUSE_W - w; bak += MAX_MOUSE_W - w;
dst += TMP_SCREEN_WIDTH - w; dst += TMP_SCREEN_WIDTH - w;
h--; h--;
@ -176,10 +182,10 @@ void OSystem_SDL_Normal::undraw_mouse() {
error("SDL_LockSurface failed: %s.\n", SDL_GetError()); error("SDL_LockSurface failed: %s.\n", SDL_GetError());
uint16 *dst, *bak = (uint16 *)_mouseBackup; uint16 *dst, *bak = (uint16 *)_mouseBackup;
const int old_mouse_x = _mouse_old_state.x; const int old_mouse_x = _mouseOldState.x;
const int old_mouse_y = _mouse_old_state.y; const int old_mouse_y = _mouseOldState.y;
const int old_mouse_w = _mouse_old_state.w; const int old_mouse_w = _mouseOldState.w;
const int old_mouse_h = _mouse_old_state.h; const int old_mouse_h = _mouseOldState.h;
int x, y; int x, y;
// No need to do clipping here, since draw_mouse() did that already // No need to do clipping here, since draw_mouse() did that already

View file

@ -109,10 +109,10 @@ void OSystem_SDL_Normal::draw_mouse() {
if (_mouseDrawn || !_mouseVisible) if (_mouseDrawn || !_mouseVisible)
return; return;
int x = _mouse_cur_state.x - _mouseHotspotX; int x = _mouseCurState.x - _mouseHotspotX;
int y = _mouse_cur_state.y - _mouseHotspotY; int y = _mouseCurState.y - _mouseHotspotY;
int w = _mouse_cur_state.w; int w = _mouseCurState.w;
int h = _mouse_cur_state.h; int h = _mouseCurState.h;
byte color; byte color;
byte *src = _mouseData; // Image representing the mouse byte *src = _mouseData; // Image representing the mouse
uint16 *bak = (uint16*)_mouseBackup; // Surface used to backup the area obscured by the mouse uint16 *bak = (uint16*)_mouseBackup; // Surface used to backup the area obscured by the mouse
@ -126,7 +126,7 @@ void OSystem_SDL_Normal::draw_mouse() {
} }
if (y < 0) { if (y < 0) {
h += y; h += y;
src -= y * _mouse_cur_state.w; src -= y * _mouseCurState.w;
y = 0; y = 0;
} }
@ -141,10 +141,10 @@ void OSystem_SDL_Normal::draw_mouse() {
// Store the bounding box so that undraw mouse can restore the area the // Store the bounding box so that undraw mouse can restore the area the
// mouse currently covers to its original content. // mouse currently covers to its original content.
_mouse_old_state.x = x; _mouseOldState.x = x;
_mouse_old_state.y = y; _mouseOldState.y = y;
_mouse_old_state.w = w; _mouseOldState.w = w;
_mouse_old_state.h = h; _mouseOldState.h = h;
// Draw the mouse cursor; backup the covered area in "bak" // Draw the mouse cursor; backup the covered area in "bak"
@ -162,7 +162,7 @@ void OSystem_SDL_Normal::draw_mouse() {
dst++; dst++;
width--; width--;
} }
src += _mouse_cur_state.w - w; src += _mouseCurState.w - w;
bak += MAX_MOUSE_W - w; bak += MAX_MOUSE_W - w;
dst += TMP_SCREEN_WIDTH - w; dst += TMP_SCREEN_WIDTH - w;
h--; h--;
@ -190,10 +190,10 @@ void OSystem_SDL_Normal::undraw_mouse() {
error("SDL_LockSurface failed: %s.\n", SDL_GetError()); error("SDL_LockSurface failed: %s.\n", SDL_GetError());
uint16 *dst, *bak = (uint16 *)_mouseBackup; uint16 *dst, *bak = (uint16 *)_mouseBackup;
const int old_mouse_x = _mouse_old_state.x; const int old_mouse_x = _mouseOldState.x;
const int old_mouse_y = _mouse_old_state.y; const int old_mouse_y = _mouseOldState.y;
const int old_mouse_w = _mouse_old_state.w; const int old_mouse_w = _mouseOldState.w;
const int old_mouse_h = _mouse_old_state.h; const int old_mouse_h = _mouseOldState.h;
int x, y; int x, y;
// No need to do clipping here, since draw_mouse() did that already // No need to do clipping here, since draw_mouse() did that already
@ -445,9 +445,9 @@ uint32 OSystem_SDL_Normal::property(int param, Property *value) {
/* SDL_FillRect(tmpSurface, &full, 0); /* SDL_FillRect(tmpSurface, &full, 0);
fb2gl.blit16(tmpSurface,1,&full,0,_glScreenStart); fb2gl.blit16(tmpSurface,1,&full,0,_glScreenStart);
fb2gl.display(); fb2gl.display();
double x = (double)((_mouse_cur_state.x) double x = (double)((_mouseCurState.x)
- (_screenWidth/2)) / (_screenWidth/2); - (_screenWidth/2)) / (_screenWidth/2);
double y = (double)((_mouse_cur_state.y) double y = (double)((_mouseCurState.y)
- (_screenHeight/2)) / (_screenHeight/2); - (_screenHeight/2)) / (_screenHeight/2);
glTranslatef(-x,y,0); glTranslatef(-x,y,0);
*/ */