# HG changeset patch # Parent 3c8795c7ae1beae0393b6959eb012802cddbd755 diff -r 3c8795c7ae1b src/rail_gui.cpp --- a/src/rail_gui.cpp Tue Sep 03 09:44:21 2013 +0200 +++ b/src/rail_gui.cpp Tue Sep 03 09:44:22 2013 +0200 @@ -1504,6 +1504,26 @@ } } + virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + { + if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) { + /* Extract signal from widget number. */ + int type = (widget - WID_BS_SEMAPHORE_NORM) % SIGTYPE_END; + int var = (widget < WID_BS_ELECTRIC_NORM) ? SIG_SEMAPHORE : SIG_ELECTRIC; + /* Fit the widget to signal sprites. */ + Dimension dim = { 0, 0 }; + const SpriteID *images = GetRailTypeInfo(_cur_railtype)->gui_sprites.signals[type][var]; + for (uint lowered = 0; lowered < 2; lowered++) { + const Sprite *sprite = GetSprite(images[lowered], ST_NORMAL); + dim.width = max(dim.width, UnScaleByZoom(sprite->width, ZOOM_LVL_GUI)); + dim.height = max(dim.height, UnScaleByZoom(sprite->height, ZOOM_LVL_GUI)); + } + dim.width += padding.width + 4; + dim.height += padding.height + 4; + *size = maxdim(*size, dim); + } + } + virtual void DrawWidget(const Rect &r, int widget) const { if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) {