scrollpad: fix bug in Scrollpad::flush()
This commit is contained in:
@@ -157,10 +157,11 @@ void Scrollpad::flush()
|
||||
w << s[i];
|
||||
}
|
||||
};
|
||||
auto write_word = [&]() {
|
||||
auto write_word = [&](bool load_properties_) {
|
||||
for (; i < s.length() && !iswspace(s[i]); ++i)
|
||||
{
|
||||
load_properties();
|
||||
if (load_properties_)
|
||||
load_properties();
|
||||
w << s[i];
|
||||
}
|
||||
};
|
||||
@@ -198,7 +199,13 @@ void Scrollpad::flush()
|
||||
x = getX();
|
||||
y = getY();
|
||||
|
||||
write_word();
|
||||
// write word to test if it overflows, but do not load properties
|
||||
// yet since if it overflows, we do not want to load them twice.
|
||||
write_word(false);
|
||||
|
||||
// restore previous indexes state
|
||||
i = old_i;
|
||||
p = old_p;
|
||||
|
||||
// get new Y coord to see if word overflew into next line.
|
||||
new_y = getY();
|
||||
@@ -221,10 +228,8 @@ void Scrollpad::flush()
|
||||
++y;
|
||||
goToXY(0, y);
|
||||
|
||||
i = old_i;
|
||||
p = old_p;
|
||||
// ...write this word again...
|
||||
write_word();
|
||||
// ...write word again, this time with properties...
|
||||
write_word(true);
|
||||
|
||||
if (generate_height_only)
|
||||
{
|
||||
@@ -234,6 +239,12 @@ void Scrollpad::flush()
|
||||
height += new_y - y;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// word didn't overflow, rewrite it with properties.
|
||||
goToXY(x, y);
|
||||
write_word(true);
|
||||
}
|
||||
|
||||
if (generate_height_only)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user