Merge "screen_ui: Fix an issue when displaying wrapped text." am: 1d4ef4ba4b am: ae4b00c427
am: 641692f11d

Change-Id: Iee1226324747ba810e808b99b03a6971db2a6858
diff --git a/screen_ui.cpp b/screen_ui.cpp
index 90e0e30..c0fb2cf 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -468,20 +468,22 @@
 
 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;
diff --git a/screen_ui.h b/screen_ui.h
index d4923f5..293696d 100644
--- a/screen_ui.h
+++ b/screen_ui.h
@@ -224,8 +224,9 @@
   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;