Mercurial > hg > openttd
changeset 13944:60178db29ff0 draft
(svn r18480) -Codechange: Moved column width computation of smallmap legends to OnInit(), added a few doxy comments.
author | alberth <alberth@openttd.org> |
---|---|
date | Sun, 13 Dec 2009 10:25:37 +0000 |
parents | 1473565220a3 |
children | d725b850c967 |
files | src/smallmap_gui.cpp |
diffstat | 1 files changed, 31 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -494,7 +494,9 @@ }; +/** Class managing the smallmap window. */ class SmallMapWindow : public Window { + /** Types of legends in the #SM_WIDGET_LEGEND widget. */ enum SmallMapType { SMT_CONTOUR, SMT_VEHICLES, @@ -504,12 +506,12 @@ SMT_OWNER, }; - static SmallMapType map_type; - static bool show_towns; + static SmallMapType map_type; ///< Currently displayed legends. + static bool show_towns; ///< Display town names in the smallmap. - static const uint LEGEND_BLOB_WIDTH = 8; - uint column_width; - uint number_of_rows; + static const uint LEGEND_BLOB_WIDTH = 8; ///< Width of the coloured blob in front of a line text in the #SM_WIDGET_LEGEND widget. + uint column_width; ///< Width of a column in the #SM_WIDGET_LEGEND widget. + uint number_of_rows; ///< Number of rows in a column in the #SM_WIDGET_LEGEND widget. int32 scroll_x; int32 scroll_y; @@ -852,24 +854,37 @@ } } + virtual void OnInit() + { + uint min_width = 0; + for (uint i = 0; i < lengthof(_legend_table); i++) { + for (const LegendAndColour *tbl = _legend_table[i]; !tbl->end; ++tbl) { + StringID str; + if (i == SMT_INDUSTRY) { + SetDParam(0, tbl->legend); + SetDParam(1, IndustryPool::MAX_SIZE); + str = STR_SMALLMAP_INDUSTRY; + } else { + str = tbl->legend; + } + min_width = max(GetStringBoundingBox(str).width, min_width); + } + } + + /* The width of a column is the minimum width of all texts + the size of the blob + some spacing */ + this->column_width = min_width + LEGEND_BLOB_WIDTH + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; + } + virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) { if (widget != SM_WIDGET_LEGEND) return; + /* Count minimal number of rows needed for the legends with fixed layout (all except the industry legend). */ uint min_height = 0; - uint min_width = 0; for (uint i = 0; i < lengthof(_legend_table); i++) { - /* Only check the width, which are a bit more special! */ - if (i == SMT_INDUSTRY) { - for (const LegendAndColour *tbl = _legend_table[i]; !tbl->end; ++tbl) { - SetDParam(0, tbl->legend); - SetDParam(1, IndustryPool::MAX_SIZE); - min_width = max(GetStringBoundingBox(STR_SMALLMAP_INDUSTRY).width, min_width); - } - } else { + if (i != SMT_INDUSTRY) { uint height = 0; for (const LegendAndColour *tbl = _legend_table[i]; !tbl->end; ++tbl) { - min_width = max(GetStringBoundingBox(tbl->legend).width, min_width); if (tbl->col_break) { min_height = max(min_height, height); height = 0; @@ -880,14 +895,12 @@ } } - /* The width of a column is the minimum width of all texts + the size of the blob + some spacing */ - this->column_width = min_width + LEGEND_BLOB_WIDTH + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; /* The number of columns is always two, but if the it's wide enough there may be more columns */ uint columns = max(2U, (size->width - WD_FRAMERECT_LEFT) / this->column_width); /* The number of rows is always the minimum, otherwise it depends on the number of industries */ this->number_of_rows = max(min_height, (_smallmap_industry_count + columns - 1) / columns); - size->width = max(columns * column_width + WD_FRAMERECT_LEFT, size->width); + size->width = max(columns * this->column_width + WD_FRAMERECT_LEFT, size->width); size->height = max(this->number_of_rows * FONT_HEIGHT_SMALL + WD_FRAMERECT_TOP + 1 + WD_FRAMERECT_BOTTOM, size->height); }