mirror of https://github.com/OpenTTD/OpenTTD
(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.release/1.4
parent
ce110eed32
commit
4261b6cc82
18
src/gfx.cpp
18
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
|
* @param size Font of the digit
|
||||||
* @return Broadest digit.
|
|
||||||
*/
|
*/
|
||||||
uint GetBroadestDigit(FontSize size)
|
void GetBroadestDigit(uint *front, uint *next, FontSize size)
|
||||||
{
|
{
|
||||||
uint digit = 0;
|
int width = -1;
|
||||||
byte width = 0;
|
for (char c = '9'; c >= '0'; c--) {
|
||||||
for (char c = '0'; c <= '9'; c++) {
|
int w = GetCharacterWidth(size, c);
|
||||||
byte w = GetCharacterWidth(size, c);
|
|
||||||
if (w > width) {
|
if (w > width) {
|
||||||
width = w;
|
width = w;
|
||||||
digit = c - '0';
|
*next = c - '0';
|
||||||
|
if (c != '0') *front = c - '0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return digit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenSizeChanged()
|
void ScreenSizeChanged()
|
||||||
|
|
|
@ -150,7 +150,7 @@ bool ToggleFullScreen(bool fs);
|
||||||
/* gfx.cpp */
|
/* gfx.cpp */
|
||||||
byte GetCharacterWidth(FontSize size, uint32 key);
|
byte GetCharacterWidth(FontSize size, uint32 key);
|
||||||
byte GetDigitWidth(FontSize size = FS_NORMAL);
|
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.
|
* Get height of a character for a given font size.
|
||||||
|
|
|
@ -116,10 +116,11 @@ void SetDParamMaxValue(uint n, uint64 max_value, uint min_count, FontSize size)
|
||||||
*/
|
*/
|
||||||
void SetDParamMaxDigits(uint n, uint count, FontSize size)
|
void SetDParamMaxDigits(uint n, uint count, FontSize size)
|
||||||
{
|
{
|
||||||
uint biggest_digit = GetBroadestDigit(size);
|
uint front, next;
|
||||||
uint64 val = biggest_digit;
|
GetBroadestDigit(&front, &next, size);
|
||||||
|
uint64 val = count > 1 ? front : next;
|
||||||
for (; count > 1; count--) {
|
for (; count > 1; count--) {
|
||||||
val = 10 * val + biggest_digit;
|
val = 10 * val + next;
|
||||||
}
|
}
|
||||||
SetDParam(n, val);
|
SetDParam(n, val);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue