diff options
author | frosch <frosch@openttd.org> | 2013-06-01 15:10:32 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2013-06-01 15:10:32 +0000 |
commit | 4261b6cc822fa03e5d2c9824fdd610d21c7b289f (patch) | |
tree | 78836a3dc158844b9061ded777544aa2237032df | |
parent | ce110eed32eef08e7ce1c35a2c5893698afee73a (diff) | |
download | openttd-4261b6cc822fa03e5d2c9824fdd610d21c7b289f.tar.xz |
(svn r25314) -Fix (r25313): If '0' is the broadest digit, 0 * sum(10^i, i=0..(n-1)) is not the broadest n-digit number.
-Fix [FS#5562]: Proper size-estimation for numbers with n digits.
-rw-r--r-- | src/gfx.cpp | 18 | ||||
-rw-r--r-- | src/gfx_func.h | 2 | ||||
-rw-r--r-- | src/strings.cpp | 7 |
3 files changed, 14 insertions, 13 deletions
diff --git a/src/gfx.cpp b/src/gfx.cpp index b9249af47..962913495 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1690,22 +1690,22 @@ byte GetDigitWidth(FontSize size) } /** - * Return the digit with the biggest width. + * Determine the broadest digits for guessing the maximum width of a n-digit number. + * @param [out] front Broadest digit, which is not 0. (Use this digit as first digit for numbers with more than one digit.) + * @param [out] next Broadest digit, including 0. (Use this digit for all digits, except the first one; or for numbers with only one digit.) * @param size Font of the digit - * @return Broadest digit. */ -uint GetBroadestDigit(FontSize size) +void GetBroadestDigit(uint *front, uint *next, FontSize size) { - uint digit = 0; - byte width = 0; - for (char c = '0'; c <= '9'; c++) { - byte w = GetCharacterWidth(size, c); + int width = -1; + for (char c = '9'; c >= '0'; c--) { + int w = GetCharacterWidth(size, c); if (w > width) { width = w; - digit = c - '0'; + *next = c - '0'; + if (c != '0') *front = c - '0'; } } - return digit; } void ScreenSizeChanged() diff --git a/src/gfx_func.h b/src/gfx_func.h index f5dbcc0bf..65616e618 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -150,7 +150,7 @@ bool ToggleFullScreen(bool fs); /* gfx.cpp */ byte GetCharacterWidth(FontSize size, uint32 key); byte GetDigitWidth(FontSize size = FS_NORMAL); -uint GetBroadestDigit(FontSize size = FS_NORMAL); +void GetBroadestDigit(uint *front, uint *next, FontSize size = FS_NORMAL); /** * Get height of a character for a given font size. diff --git a/src/strings.cpp b/src/strings.cpp index 777d5ccf4..fcc8df60e 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -116,10 +116,11 @@ void SetDParamMaxValue(uint n, uint64 max_value, uint min_count, FontSize size) */ void SetDParamMaxDigits(uint n, uint count, FontSize size) { - uint biggest_digit = GetBroadestDigit(size); - uint64 val = biggest_digit; + uint front, next; + GetBroadestDigit(&front, &next, size); + uint64 val = count > 1 ? front : next; for (; count > 1; count--) { - val = 10 * val + biggest_digit; + val = 10 * val + next; } SetDParam(n, val); } |