summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/company_gui.cpp17
-rw-r--r--src/gfx.cpp8
-rw-r--r--src/gfx_func.h2
3 files changed, 23 insertions, 4 deletions
diff --git a/src/company_gui.cpp b/src/company_gui.cpp
index 92a9d722f..a79ef5eb1 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 5862e7ee0..300a33ecf 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<int>(0, sprite->x_offs + sprite->width);
d.height = max<int>(0, sprite->y_offs + sprite->height);
diff --git a/src/gfx_func.h b/src/gfx_func.h
index 5e269bff7..16cd42d84 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. */