Changeset - r20303:6adbc75a1297
[Not reviewed]
master
0 9 0
frosch - 11 years ago 2013-06-01 14:33:48
frosch@openttd.org
(svn r25313) -Fix: Do not assume '8' to be the broadest digit, but test all of them.
9 files changed with 32 insertions and 11 deletions:
0 comments (0 inline, 0 general)
src/build_vehicle_gui.cpp
Show inline comments
 
@@ -887,13 +887,13 @@ void DrawEngineList(VehicleType type, in
 
	int sprite_y_offset = sprite_y_offsets[type] + step_size / 2;
 

	
 
	Dimension replace_icon = {0, 0};
 
	int count_width = 0;
 
	if (show_count) {
 
		replace_icon = GetSpriteSize(SPR_GROUP_REPLACE_ACTIVE);
 
		SetDParamMaxDigits(0, 3);
 
		SetDParamMaxDigits(0, 3, FS_SMALL);
 
		count_width = GetStringBoundingBox(STR_TINY_BLACK_COMA).width;
 
	}
 

	
 
	int text_left  = l + (rtl ? WD_FRAMERECT_LEFT + replace_icon.width + 8 + count_width : sprite_width + WD_FRAMETEXT_LEFT);
 
	int text_right = r - (rtl ? sprite_width + WD_FRAMETEXT_RIGHT : WD_FRAMERECT_RIGHT + replace_icon.width + 8 + count_width);
 
	int replace_icon_left = rtl ? l + WD_FRAMERECT_LEFT : r - WD_FRAMERECT_RIGHT - replace_icon.width;
src/depot_gui.cpp
Show inline comments
 
@@ -598,13 +598,13 @@ struct DepotWindow : Window {
 
	{
 
		switch (widget) {
 
			case WID_D_MATRIX: {
 
				uint min_height = 0;
 

	
 
				if (this->type == VEH_TRAIN) {
 
					SetDParamMaxValue(0, 1000);
 
					SetDParamMaxValue(0, 1000, 0, FS_SMALL);
 
					SetDParam(1, 1);
 
					this->count_width = GetStringBoundingBox(STR_TINY_BLACK_DECIMAL).width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
 
				} else {
 
					this->count_width = 0;
 
				}
 

	
src/gfx.cpp
Show inline comments
 
@@ -1686,12 +1686,30 @@ byte GetDigitWidth(FontSize size)
 
	for (char c = '0'; c <= '9'; c++) {
 
		width = max(GetCharacterWidth(size, c), width);
 
	}
 
	return width;
 
}
 

	
 
/**
 
 * Return the digit with the biggest width.
 
 * @param size  Font of the digit
 
 * @return Broadest digit.
 
 */
 
uint GetBroadestDigit(FontSize size)
 
{
 
	uint digit = 0;
 
	byte width = 0;
 
	for (char c = '0'; c <= '9'; c++) {
 
		byte w = GetCharacterWidth(size, c);
 
		if (w > width) {
 
			width = w;
 
			digit = c - '0';
 
		}
 
	}
 
	return digit;
 
}
 

	
 
void ScreenSizeChanged()
 
{
 
	_dirty_bytes_per_line = CeilDiv(_screen.width, DIRTY_BLOCK_WIDTH);
 
	_dirty_blocks = ReallocT<byte>(_dirty_blocks, _dirty_bytes_per_line * CeilDiv(_screen.height, DIRTY_BLOCK_HEIGHT));
 

	
src/gfx_func.h
Show inline comments
 
@@ -147,12 +147,13 @@ bool ChangeResInGame(int w, int h);
 
void SortResolutions(int count);
 
bool ToggleFullScreen(bool fs);
 

	
 
/* gfx.cpp */
 
byte GetCharacterWidth(FontSize size, uint32 key);
 
byte GetDigitWidth(FontSize size = FS_NORMAL);
 
uint GetBroadestDigit(FontSize size = FS_NORMAL);
 

	
 
/**
 
 * Get height of a character for a given font size.
 
 * @param size Font size to get height of
 
 * @return     Height of characters in the given font (pixels)
 
 */
src/graph_gui.cpp
Show inline comments
 
@@ -501,13 +501,13 @@ public:
 
					month = 0;
 
					year++;
 
				}
 
			}
 
		} else {
 
			/* Draw the label under the data point rather than on the grid line. */
 
			SetDParamMaxValue(0, this->x_values_start + this->num_on_x_axis * this->x_values_increment);
 
			SetDParamMaxValue(0, this->x_values_start + this->num_on_x_axis * this->x_values_increment, 0, FS_SMALL);
 
			x_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL_NUMBER).width;
 
		}
 

	
 
		SetDParam(0, this->format_str_y_axis);
 
		SetDParam(1, INT64_MAX);
 
		uint y_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL).width;
src/group_gui.cpp
Show inline comments
 
@@ -180,13 +180,13 @@ private:
 
		for (uint i = 0; i < lengthof(profit_sprites); i++) {
 
			Dimension d = GetSpriteSize(profit_sprites[i]);
 
			this->column_size[VGC_PROFIT] = maxdim(this->column_size[VGC_PROFIT], d);
 
		}
 
		this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROFIT].height);
 

	
 
		SetDParamMaxValue(0, GroupStatistics::Get(this->vli.company, ALL_GROUP, this->vli.vtype).num_vehicle, 3);
 
		SetDParamMaxValue(0, GroupStatistics::Get(this->vli.company, ALL_GROUP, this->vli.vtype).num_vehicle, 3, FS_SMALL);
 
		this->column_size[VGC_NUMBER] = GetStringBoundingBox(STR_TINY_COMMA);
 
		this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NUMBER].height);
 

	
 
		this->tiny_step_height += WD_MATRIX_TOP;
 

	
 
		return WD_FRAMERECT_LEFT + 8 +
src/strings.cpp
Show inline comments
 
@@ -93,31 +93,33 @@ void StringParameters::ShiftParameters(u
 
/**
 
 * Set DParam n to some number that is suitable for string size computations.
 
 * @param n Index of the string parameter.
 
 * @param max_value The biggest value which shall be displayed.
 
 *                  For the result only the number of digits of \a max_value matter.
 
 * @param min_count Minimum number of digits independent of \a max.
 
 * @param size  Font of the number
 
 */
 
void SetDParamMaxValue(uint n, uint64 max_value, uint min_count)
 
void SetDParamMaxValue(uint n, uint64 max_value, uint min_count, FontSize size)
 
{
 
	uint num_digits = 1;
 
	while (max_value >= 10) {
 
		num_digits++;
 
		max_value /= 10;
 
	}
 
	SetDParamMaxDigits(n, max(min_count, num_digits));
 
	SetDParamMaxDigits(n, max(min_count, num_digits), size);
 
}
 

	
 
/**
 
 * Set DParam n to some number that is suitable for string size computations.
 
 * @param n Index of the string parameter.
 
 * @param count Number of digits which shall be displayable.
 
 * @param size  Font of the number
 
 */
 
void SetDParamMaxDigits(uint n, uint count)
 
void SetDParamMaxDigits(uint n, uint count, FontSize size)
 
{
 
	static const uint biggest_digit = 8; ///< Digit with the biggest string width.
 
	uint biggest_digit = GetBroadestDigit(size);
 
	uint64 val = biggest_digit;
 
	for (; count > 1; count--) {
 
		val = 10 * val + biggest_digit;
 
	}
 
	SetDParam(n, val);
 
}
src/strings_func.h
Show inline comments
 
@@ -152,14 +152,14 @@ static inline void SetDParamX(uint64 *s,
 
 */
 
static inline void SetDParam(uint n, uint64 v)
 
{
 
	_global_string_params.SetParam(n, v);
 
}
 

	
 
void SetDParamMaxValue(uint n, uint64 max_value, uint min_count = 0);
 
void SetDParamMaxDigits(uint n, uint count);
 
void SetDParamMaxValue(uint n, uint64 max_value, uint min_count = 0, FontSize size = FS_NORMAL);
 
void SetDParamMaxDigits(uint n, uint count, FontSize size = FS_NORMAL);
 

	
 
void SetDParamStr(uint n, const char *str);
 

	
 
void CopyInDParam(int offs, const uint64 *src, int num);
 
void CopyOutDParam(uint64 *dst, int offs, int num);
 
void CopyOutDParam(uint64 *dst, const char **strings, StringID string, int num);
src/timetable_gui.cpp
Show inline comments
 
@@ -197,13 +197,13 @@ struct TimetableWindow : Window {
 
	}
 

	
 
	virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
 
	{
 
		switch (widget) {
 
			case WID_VT_ARRIVAL_DEPARTURE_PANEL:
 
				SetDParamMaxValue(0, MAX_YEAR * DAYS_IN_YEAR);
 
				SetDParamMaxValue(0, MAX_YEAR * DAYS_IN_YEAR, 0, FS_SMALL);
 
				this->deparr_time_width = GetStringBoundingBox(STR_JUST_DATE_TINY).width;
 
				this->deparr_abbr_width = max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_ABBREVIATION).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_ABBREVIATION).width);
 
				size->width = WD_FRAMERECT_LEFT + this->deparr_abbr_width + 10 + this->deparr_time_width + WD_FRAMERECT_RIGHT;
 
				/* FALL THROUGH */
 
			case WID_VT_ARRIVAL_DEPARTURE_SELECTION:
 
			case WID_VT_TIMETABLE_PANEL:
0 comments (0 inline, 0 general)