Mercurial > hg > openttd
changeset 13951:443ff91fea9a draft
(svn r18487) -Codechange: Move row height and column counting to OnInit in the smallmap window as well.
author | alberth <alberth@openttd.org> |
---|---|
date | Sun, 13 Dec 2009 20:19:08 +0000 |
parents | 77bfe67f23bd |
children | 315bfb533af0 |
files | src/smallmap_gui.cpp |
diffstat | 1 files changed, 20 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -509,8 +509,11 @@ static SmallMapType map_type; ///< Currently displayed legends. static bool show_towns; ///< Display town names in the smallmap. - 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. + static const uint LEGEND_BLOB_WIDTH = 8; ///< Width of the coloured blob in front of a line text in the #SM_WIDGET_LEGEND widget. + static const uint INDUSTRY_MIN_NUMBER_OF_COLUMNS = 2; ///< Minimal number of columns in the #SM_WIDGET_LEGEND widget for the #SMT_INDUSTRY legend. + uint min_number_of_columns; ///< Minimal number of columns in legends. + uint min_number_of_fixed_rows; ///< Minimal number of rows in the legends for the fixed layouts only (all except #SMT_INDUSTRY). + 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; @@ -857,7 +860,11 @@ virtual void OnInit() { uint min_width = 0; + this->min_number_of_columns = INDUSTRY_MIN_NUMBER_OF_COLUMNS; + this->min_number_of_fixed_rows = 0; for (uint i = 0; i < lengthof(_legend_table); i++) { + uint height = 0; + uint num_columns = 1; for (const LegendAndColour *tbl = _legend_table[i]; !tbl->end; ++tbl) { StringID str; if (i == SMT_INDUSTRY) { @@ -865,10 +872,18 @@ SetDParam(1, IndustryPool::MAX_SIZE); str = STR_SMALLMAP_INDUSTRY; } else { + if (tbl->col_break) { + this->min_number_of_fixed_rows = max(this->min_number_of_fixed_rows, height); + height = 0; + num_columns++; + } + height++; str = tbl->legend; } min_width = max(GetStringBoundingBox(str).width, min_width); } + this->min_number_of_fixed_rows = max(this->min_number_of_fixed_rows, height); + this->min_number_of_columns = max(this->min_number_of_columns, num_columns); } /* The width of a column is the minimum width of all texts + the size of the blob + some spacing */ @@ -879,26 +894,10 @@ { 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; - for (uint i = 0; i < lengthof(_legend_table); i++) { - if (i != SMT_INDUSTRY) { - uint height = 0; - for (const LegendAndColour *tbl = _legend_table[i]; !tbl->end; ++tbl) { - if (tbl->col_break) { - min_height = max(min_height, height); - height = 0; - } - height++; - } - min_height = max(min_height, height); - } - } - - /* 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 columns may grow beyond the minimally required if the widget is wide enough. */ + uint columns = max(this->min_number_of_columns, (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); + this->number_of_rows = max(this->min_number_of_fixed_rows, (_smallmap_industry_count + columns - 1) / columns); 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);