(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:
40
src/gfx.cpp
40
src/gfx.cpp
@@ -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;
|
||||
|
Reference in New Issue
Block a user