(svn r20384) -Fix: Update cursor dimensions when reloading grfs resp. changing base graphics, so the cursor does not glitch if it becomes bigger.

This commit is contained in:
frosch
2010-08-05 19:23:19 +00:00
parent 80149f0f0a
commit c8758fc7a7
3 changed files with 36 additions and 7 deletions

View File

@@ -1775,22 +1775,37 @@ bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int heigh
return true;
}
static void SetCursorSprite(CursorID cursor, PaletteID pal)
/**
* Update cursor dimension.
* Called when changing cursor sprite resp. reloading grfs.
*/
void UpdateCursorSize()
{
CursorVars *cv = &_cursor;
const Sprite *p;
const Sprite *p = GetSprite(GB(cv->sprite, 0, SPRITE_WIDTH), ST_NORMAL);
if (cv->sprite == cursor) return;
p = GetSprite(GB(cursor, 0, SPRITE_WIDTH), ST_NORMAL);
cv->sprite = cursor;
cv->pal = pal;
cv->size.y = p->height;
cv->size.x = p->width;
cv->offs.x = p->x_offs;
cv->offs.y = p->y_offs;
cv->dirty = true;
}
/**
* Switch cursor to different sprite.
* @param cursor Sprite to draw for the cursor.
* @param pal Palette to use for recolouring.
*/
static void SetCursorSprite(CursorID cursor, PaletteID pal)
{
CursorVars *cv = &_cursor;
if (cv->sprite == cursor) return;
cv->sprite = cursor;
cv->pal = pal;
UpdateCursorSize();
cv->short_vehicle_offset = 0;
}
@@ -1813,6 +1828,12 @@ void CursorTick()
}
}
/**
* Assign a single non-animated sprite to the cursor.
* @param sprite Sprite to draw for the cursor.
* @param pal Palette to use for recolouring.
* @see SetAnimatedMouseCursor
*/
void SetMouseCursor(CursorID sprite, PaletteID pal)
{
/* Turn off animation */
@@ -1821,6 +1842,11 @@ void SetMouseCursor(CursorID sprite, PaletteID pal)
SetCursorSprite(sprite, pal);
}
/**
* Assign an animation to the cursor.
* @param table Array of animation states.
* @see SetMouseCursor
*/
void SetAnimatedMouseCursor(const AnimCursor *table)
{
_cursor.animate_list = table;