mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 14:27:16 +00:00
(svn r20220) -Fix [FS#3974]: strip non-printable characters before showing it in an edit box, so when renaming a vehicle type you won't get the "SETX stuff" that some NewGRFs use
This commit is contained in:
parent
b38c4f897a
commit
80cc566553
@ -82,6 +82,15 @@ Long delay between switching songs/music
|
|||||||
is the default driver for OpenTTD. You can change this default by
|
is the default driver for OpenTTD. You can change this default by
|
||||||
setting the "musicdriver" in your openttd.cfg to "dmusic".
|
setting the "musicdriver" in your openttd.cfg to "dmusic".
|
||||||
|
|
||||||
|
Custom vehicle type name is incorrectly aligned
|
||||||
|
Some NewGRFs use sprites that are bigger than normal in the "buy
|
||||||
|
vehicle" window. Due to this they have to encode an offset for the
|
||||||
|
vehicle type name. Upon renaming the vehicle type this encoded offset
|
||||||
|
is stripped from the name because the "edit box" cannot show this
|
||||||
|
encoding. As a result the custom vehicle type names will get the
|
||||||
|
default alignment. The only way to (partly) fix this is by adding
|
||||||
|
spaces to the custom name.
|
||||||
|
|
||||||
Clipping problems [FS#119]
|
Clipping problems [FS#119]
|
||||||
In some cases sprites are not drawn as one would expect. Examples of
|
In some cases sprites are not drawn as one would expect. Examples of
|
||||||
this are aircraft that might be hidden below the runway or trees that
|
this are aircraft that might be hidden below the runway or trees that
|
||||||
|
@ -1282,7 +1282,7 @@ struct QueryStringWindow : public QueryStringBaseWindow
|
|||||||
QueryStringBaseWindow(maxsize)
|
QueryStringBaseWindow(maxsize)
|
||||||
{
|
{
|
||||||
GetString(this->edit_str_buf, str, &this->edit_str_buf[maxsize - 1]);
|
GetString(this->edit_str_buf, str, &this->edit_str_buf[maxsize - 1]);
|
||||||
this->edit_str_buf[maxsize - 1] = '\0';
|
str_validate(this->edit_str_buf, &this->edit_str_buf[maxsize - 1], false, true);
|
||||||
|
|
||||||
if ((flags & QSF_ACCEPT_UNCHANGED) == 0) this->orig = strdup(this->edit_str_buf);
|
if ((flags & QSF_ACCEPT_UNCHANGED) == 0) this->orig = strdup(this->edit_str_buf);
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ void str_validate(char *str, const char *last, bool allow_newlines, bool ignore)
|
|||||||
/* Assume the ABSOLUTE WORST to be in str as it comes from the outside. */
|
/* Assume the ABSOLUTE WORST to be in str as it comes from the outside. */
|
||||||
|
|
||||||
char *dst = str;
|
char *dst = str;
|
||||||
while (*str != '\0') {
|
while (str <= last && *str != '\0') {
|
||||||
size_t len = Utf8EncodedCharLen(*str);
|
size_t len = Utf8EncodedCharLen(*str);
|
||||||
/* If the character is unknown, i.e. encoded length is 0
|
/* If the character is unknown, i.e. encoded length is 0
|
||||||
* we assume worst case for the length check.
|
* we assume worst case for the length check.
|
||||||
@ -146,6 +146,16 @@ void str_validate(char *str, const char *last, bool allow_newlines, bool ignore)
|
|||||||
/* Replace the undesirable character with a question mark */
|
/* Replace the undesirable character with a question mark */
|
||||||
str += len;
|
str += len;
|
||||||
if (!ignore) *dst++ = '?';
|
if (!ignore) *dst++ = '?';
|
||||||
|
|
||||||
|
/* In case of these two special cases assume that they really
|
||||||
|
* mean SETX/SETXY and also "eat" the paramater. If this was
|
||||||
|
* not the case the string was broken to begin with and this
|
||||||
|
* would not break much more. */
|
||||||
|
if (c == SCC_SETX) {
|
||||||
|
str++;
|
||||||
|
} else if (c == SCC_SETXY) {
|
||||||
|
str += 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user