From 452b487f31df6457fc5eccd805b044e54c02b097 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Wed, 9 May 2018 11:52:09 -0700 Subject: screen_ui: Fix an issue when displaying wrapped text. The last character at EOL is cut when showing the prompt-for-data-wipe message on angler. Address the issue by keeping symmetrical margins based on the given offset. Test: Trigger prompt-and-wipe-data menu. No cutout character at EOL. Change-Id: Id6e8dc7815bf681435bcaf13e7bdd09cf870d95f --- screen_ui.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'screen_ui.cpp') diff --git a/screen_ui.cpp b/screen_ui.cpp index 90e0e30af..c0fb2cfba 100644 --- a/screen_ui.cpp +++ b/screen_ui.cpp @@ -468,20 +468,22 @@ int ScreenRecoveryUI::DrawTextLines(int x, int y, const std::vector int ScreenRecoveryUI::DrawWrappedTextLines(int x, int y, const std::vector& 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; -- cgit v1.2.3