mirror of https://github.com/OpenTTD/OpenTTD.git
(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:
parent
b2181365b0
commit
01833039bd
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;
|
||||
|
|
|
@ -159,6 +159,7 @@ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom);
|
|||
void SetMouseCursor(CursorID cursor, PaletteID pal);
|
||||
void SetAnimatedMouseCursor(const AnimCursor *table);
|
||||
void CursorTick();
|
||||
void UpdateCursorSize();
|
||||
bool ChangeResInGame(int w, int h);
|
||||
void SortResolutions(int count);
|
||||
bool ToggleFullScreen(bool fs);
|
||||
|
|
|
@ -207,6 +207,8 @@ void GfxLoadSprites()
|
|||
GfxInitSpriteMem();
|
||||
LoadSpriteTables();
|
||||
GfxInitPalettes();
|
||||
|
||||
UpdateCursorSize();
|
||||
}
|
||||
|
||||
bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *full_filename)
|
||||
|
|
Loading…
Reference in New Issue