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;
|
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;
|
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.y = p->height;
|
||||||
cv->size.x = p->width;
|
cv->size.x = p->width;
|
||||||
cv->offs.x = p->x_offs;
|
cv->offs.x = p->x_offs;
|
||||||
cv->offs.y = p->y_offs;
|
cv->offs.y = p->y_offs;
|
||||||
|
|
||||||
cv->dirty = true;
|
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;
|
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)
|
void SetMouseCursor(CursorID sprite, PaletteID pal)
|
||||||
{
|
{
|
||||||
/* Turn off animation */
|
/* Turn off animation */
|
||||||
|
@ -1821,6 +1842,11 @@ void SetMouseCursor(CursorID sprite, PaletteID pal)
|
||||||
SetCursorSprite(sprite, pal);
|
SetCursorSprite(sprite, pal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assign an animation to the cursor.
|
||||||
|
* @param table Array of animation states.
|
||||||
|
* @see SetMouseCursor
|
||||||
|
*/
|
||||||
void SetAnimatedMouseCursor(const AnimCursor *table)
|
void SetAnimatedMouseCursor(const AnimCursor *table)
|
||||||
{
|
{
|
||||||
_cursor.animate_list = 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 SetMouseCursor(CursorID cursor, PaletteID pal);
|
||||||
void SetAnimatedMouseCursor(const AnimCursor *table);
|
void SetAnimatedMouseCursor(const AnimCursor *table);
|
||||||
void CursorTick();
|
void CursorTick();
|
||||||
|
void UpdateCursorSize();
|
||||||
bool ChangeResInGame(int w, int h);
|
bool ChangeResInGame(int w, int h);
|
||||||
void SortResolutions(int count);
|
void SortResolutions(int count);
|
||||||
bool ToggleFullScreen(bool fs);
|
bool ToggleFullScreen(bool fs);
|
||||||
|
|
|
@ -207,6 +207,8 @@ void GfxLoadSprites()
|
||||||
GfxInitSpriteMem();
|
GfxInitSpriteMem();
|
||||||
LoadSpriteTables();
|
LoadSpriteTables();
|
||||||
GfxInitPalettes();
|
GfxInitPalettes();
|
||||||
|
|
||||||
|
UpdateCursorSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *full_filename)
|
bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *full_filename)
|
||||||
|
|
Loading…
Reference in New Issue