diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 92a9d722f2..a79ef5eb19 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -1824,6 +1824,15 @@ struct CompanyWindow : Window virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) { switch (widget) { + case CW_WIDGET_DESC_COLOUR_SCHEME_EXAMPLE: { + Point offset; + Dimension d = GetSpriteSize(SPR_VEH_BUS_SW_VIEW, &offset); + d.width -= offset.x; + d.height -= offset.y; + *size = maxdim(*size, d); + break; + } + case CW_WIDGET_DESC_COMPANY_VALUE: SetDParam(0, INT64_MAX); // Arguably the maximum company value size->width = GetStringBoundingBox(STR_COMPANY_VIEW_COMPANY_VALUE).width; @@ -1869,9 +1878,13 @@ struct CompanyWindow : Window DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE, TC_FROMSTRING, SA_CENTER); break; - case CW_WIDGET_DESC_COLOUR_SCHEME_EXAMPLE: - DrawSprite(SPR_VEH_BUS_SW_VIEW, COMPANY_SPRITE_COLOUR(c->index), (r.left + r.right) / 2, r.top + FONT_HEIGHT_NORMAL / 10); + case CW_WIDGET_DESC_COLOUR_SCHEME_EXAMPLE: { + Point offset; + Dimension d = GetSpriteSize(SPR_VEH_BUS_SW_VIEW, &offset); + d.height -= offset.y; + DrawSprite(SPR_VEH_BUS_SW_VIEW, COMPANY_SPRITE_COLOUR(c->index), r.left - offset.x, (r.top + r.bottom - d.height) / 2 - offset.y); break; + } case CW_WIDGET_DESC_VEHICLE_COUNTS: { uint amounts[4]; diff --git a/src/gfx.cpp b/src/gfx.cpp index 5862e7ee04..300a33ecfb 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1116,13 +1116,19 @@ skip_cont:; /** * Get the size of a sprite. * @param sprid Sprite to examine. + * @param [out] offset Optionally returns the sprite position offset. * @return Sprite size in pixels. * @note The size assumes (0, 0) as top-left coordinate and ignores any part of the sprite drawn at the left or above that position. */ -Dimension GetSpriteSize(SpriteID sprid) +Dimension GetSpriteSize(SpriteID sprid, Point *offset) { const Sprite *sprite = GetSprite(sprid, ST_NORMAL); + if (offset != NULL) { + offset->x = sprite->x_offs; + offset->y = sprite->y_offs; + } + Dimension d; d.width = max(0, sprite->x_offs + sprite->width); d.height = max(0, sprite->y_offs + sprite->height); diff --git a/src/gfx_func.h b/src/gfx_func.h index 5e269bff73..16cd42d842 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -88,7 +88,7 @@ static const int DRAW_STRING_BUFFER = 2048; void RedrawScreenRect(int left, int top, int right, int bottom); void GfxScroll(int left, int top, int width, int height, int xo, int yo); -Dimension GetSpriteSize(SpriteID sprid); +Dimension GetSpriteSize(SpriteID sprid, Point *offset = NULL); void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = NULL); /** How to align the to-be drawn text. */