Merge "screen_ui: Fix an issue when displaying wrapped text."
This commit is contained in:
@@ -468,20 +468,22 @@ int ScreenRecoveryUI::DrawTextLines(int x, int y, const std::vector<std::string>
|
||||
|
||||
int ScreenRecoveryUI::DrawWrappedTextLines(int x, int y,
|
||||
const std::vector<std::string>& lines) const {
|
||||
// Keep symmetrical margins based on the given offset (i.e. x).
|
||||
size_t text_cols = (ScreenWidth() - x * 2) / char_width_;
|
||||
int offset = 0;
|
||||
for (const auto& line : lines) {
|
||||
size_t next_start = 0;
|
||||
while (next_start < line.size()) {
|
||||
std::string sub = line.substr(next_start, text_cols_ + 1);
|
||||
if (sub.size() <= text_cols_) {
|
||||
std::string sub = line.substr(next_start, text_cols + 1);
|
||||
if (sub.size() <= text_cols) {
|
||||
next_start += sub.size();
|
||||
} else {
|
||||
// Line too long and must be wrapped to text_cols_ columns.
|
||||
// Line too long and must be wrapped to text_cols columns.
|
||||
size_t last_space = sub.find_last_of(" \t\n");
|
||||
if (last_space == std::string::npos) {
|
||||
// No space found, just draw as much as we can.
|
||||
sub.resize(text_cols_);
|
||||
next_start += text_cols_;
|
||||
sub.resize(text_cols);
|
||||
next_start += text_cols;
|
||||
} else {
|
||||
sub.resize(last_space);
|
||||
next_start += last_space + 1;
|
||||
|
||||
@@ -224,8 +224,9 @@ class ScreenRecoveryUI : public RecoveryUI {
|
||||
virtual void DrawTextIcon(int x, int y, GRSurface* surface) const;
|
||||
// Draws multiple text lines. Returns the offset it should be moving along Y-axis.
|
||||
int DrawTextLines(int x, int y, const std::vector<std::string>& lines) const;
|
||||
// Similar to DrawTextLines() to draw multiple text lines, but additionally wraps long lines.
|
||||
// Returns the offset it should be moving along Y-axis.
|
||||
// Similar to DrawTextLines() to draw multiple text lines, but additionally wraps long lines. It
|
||||
// keeps symmetrical margins of 'x' at each end of a line. Returns the offset it should be moving
|
||||
// along Y-axis.
|
||||
int DrawWrappedTextLines(int x, int y, const std::vector<std::string>& lines) const;
|
||||
|
||||
Icon currentIcon;
|
||||
|
||||
Reference in New Issue
Block a user