fixed bug with cutting text on setup screens without scrollbar
authorHolger Schemel <info@artsoft.org>
Mon, 4 Feb 2019 08:10:18 +0000 (09:10 +0100)
committerHolger Schemel <info@artsoft.org>
Mon, 4 Feb 2019 08:10:18 +0000 (09:10 +0100)
When drawing selection lists on setup sub-screens, text was always cut
on the right side to prevent drawing text over a potential scrollbar,
even if the selection list is short enough that there is no scrollbar.

Now it is checked if the setup sub-screens has a scrollbar or not, and
the right edge where text has to be cut is calculated accordingly.

src/screens.c

index c8324210de2648e2cec37e8865946783b2148b0b..64677bd23746be635c6b80351e68a4dee3fa5f4e 100644 (file)
@@ -4036,6 +4036,10 @@ static void DrawChooseTree(TreeInfo **ti_ptr)
 static void drawChooseTreeList(int first_entry, int num_page_entries,
                               TreeInfo *ti)
 {
+  int num_entries = numTreeInfoInGroup(ti);
+  boolean scrollbar_needed = (num_entries > NUM_MENU_ENTRIES_ON_SCREEN);
+  int scrollbar_xpos = SC_SCROLLBAR_XPOS + menu.scrollbar_xoffset;
+  int screen_width = (scrollbar_needed ? scrollbar_xpos : SXSIZE);
   int i;
   char *title_string = NULL;
   int yoffset_sets = MENU_TITLE1_YPOS;
@@ -4060,8 +4064,8 @@ static void drawChooseTreeList(int first_entry, int num_page_entries,
     int font_nr = FONT_TEXT_1;
     int font_xoffset = getFontBitmapInfo(font_nr)->draw_xoffset;
     int startx_text = startx + font_xoffset;
-    int startx_scrollbar = mSX + SC_SCROLLBAR_XPOS + menu.scrollbar_xoffset;
-    int text_size = startx_scrollbar - startx_text;
+    int endx_text = mSX + screen_width;
+    int text_size = endx_text - startx_text;
     int max_buffer_len = text_size / getFontWidth(font_nr);
     char buffer[max_buffer_len + 1];