mirror of https://github.com/OpenTTD/OpenTTD
(svn r25526) -Fix: line breaking in fallback layouter was off-by-one, so sometimes strings that needed to be broken off earlier got truncated later on
parent
4fed658a63
commit
92f276f26d
|
@ -310,7 +310,8 @@ ParagraphLayout::Line *ParagraphLayout::nextLine(int max_width)
|
||||||
const WChar *next_run = this->buffer_begin + iter->first;
|
const WChar *next_run = this->buffer_begin + iter->first;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
WChar c = *this->buffer++;
|
WChar c = *this->buffer;
|
||||||
|
last_char = this->buffer;
|
||||||
|
|
||||||
if (c == '\0') {
|
if (c == '\0') {
|
||||||
this->buffer = NULL;
|
this->buffer = NULL;
|
||||||
|
@ -325,14 +326,11 @@ ParagraphLayout::Line *ParagraphLayout::nextLine(int max_width)
|
||||||
next_run = this->buffer_begin + iter->first;
|
next_run = this->buffer_begin + iter->first;
|
||||||
begin = this->buffer;
|
begin = this->buffer;
|
||||||
|
|
||||||
last_char = begin;
|
|
||||||
last_space = NULL;
|
last_space = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsWhitespace(c)) last_space = this->buffer;
|
if (IsWhitespace(c)) last_space = this->buffer;
|
||||||
|
|
||||||
last_char = this->buffer;
|
|
||||||
|
|
||||||
if (IsPrintable(c) && !IsTextDirectionChar(c)) {
|
if (IsPrintable(c) && !IsTextDirectionChar(c)) {
|
||||||
int char_width = GetCharacterWidth(fc->GetSize(), c);
|
int char_width = GetCharacterWidth(fc->GetSize(), c);
|
||||||
width += char_width;
|
width += char_width;
|
||||||
|
@ -353,16 +351,17 @@ ParagraphLayout::Line *ParagraphLayout::nextLine(int max_width)
|
||||||
* Korean. For other languages terminating mid-word might
|
* Korean. For other languages terminating mid-word might
|
||||||
* not be the best, but terminating the whole string instead
|
* not be the best, but terminating the whole string instead
|
||||||
* of continuing the word at the next line is worse. */
|
* of continuing the word at the next line is worse. */
|
||||||
this->buffer--;
|
|
||||||
last_char = this->buffer;
|
last_char = this->buffer;
|
||||||
} else {
|
} else {
|
||||||
/* A space is found; perfect place to terminate */
|
/* A space is found; perfect place to terminate */
|
||||||
this->buffer = last_space;
|
this->buffer = last_space;
|
||||||
last_char = last_space - 1;
|
last_char = last_space;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->buffer++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (l->Length() == 0 || last_char - begin != 0) {
|
if (l->Length() == 0 || last_char - begin != 0) {
|
||||||
|
|
Loading…
Reference in New Issue