Extend setMouseCursor with additional keycolor parameter. Lets saga use 255

as white color. Made this function more safe by copying cursor data to
newly created buffer.

svn-id: r13777
This commit is contained in:
Eugene Sandulenko 2004-05-05 02:32:46 +00:00
parent 5d0f0ea0c6
commit b7e62e4b61
13 changed files with 76 additions and 29 deletions

View file

@ -175,6 +175,8 @@ void OSystem_SDL::initSize(uint w, uint h) {
free(_dirty_checksums);
_dirty_checksums = (uint32 *)calloc(CKSUM_NUM * 2, sizeof(uint32));
_mouseData = NULL;
unload_gfx_mode();
load_gfx_mode();
}
@ -992,7 +994,7 @@ void OSystem_SDL::warpMouse(int x, int y) {
}
}
void OSystem_SDL::setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y) {
void OSystem_SDL::setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x, int hotspot_y, byte keycolor) {
undraw_mouse();
@ -1004,7 +1006,13 @@ void OSystem_SDL::setMouseCursor(const byte *buf, uint w, uint h, int hotspot_x,
_mouseHotspotX = hotspot_x;
_mouseHotspotY = hotspot_y;
_mouseData = buf;
_mouseKeycolor = keycolor;
if (_mouseData)
free(_mouseData);
_mouseData = (byte *)malloc(w * h);
memcpy(_mouseData, buf, w * h);
}
void OSystem_SDL::toggleMouseGrab() {
@ -1063,7 +1071,7 @@ void OSystem_SDL::draw_mouse() {
while (width > 0) {
*bak++ = *dst;
color = *src++;
if (color != 0xFF) // 0xFF = transparent, don't draw
if (color != _mouseKeycolor) // transparent, don't draw
*dst = color;
dst++;
width--;