added support for page up/down keys for scrollable info text
authorHolger Schemel <holger.schemel@virtion.de>
Tue, 15 Oct 2024 02:07:05 +0000 (04:07 +0200)
committerHolger Schemel <holger.schemel@virtion.de>
Tue, 15 Oct 2024 02:07:07 +0000 (04:07 +0200)
src/screens.c

index 1896122b7a15a879f6741822921ec8d3561e3d7d..7205e0a2eae05a4a13b19d9a9cef521bef7d29ea 100644 (file)
@@ -4320,7 +4320,29 @@ void HandleInfoScreen_Generic(int mx, int my, int dx, int dy, int button)
   else if ((dy < 0 && wrapped_text->line_visible_first > 0) ||
            (dy > 0 && wrapped_text->line_visible_last < wrapped_text->num_lines - 1))
   {
-    start_pos += SIGN(dy);
+    if (ABS(dy) == SCROLL_PAGE)
+    {
+      if (dy < 0)
+      {
+        int old_line_visible_first = wrapped_text->line_visible_first;
+
+        while (wrapped_text->line_visible_first > 0 &&
+               wrapped_text->line_visible_last > old_line_visible_first)
+          InitWrappedText(0, 0, wrapped_text, --start_pos);
+      }
+      else
+      {
+        int old_line_visible_last = wrapped_text->line_visible_last;
+
+        while (wrapped_text->line_visible_last < wrapped_text->num_lines - 1 &&
+               wrapped_text->line_visible_first < old_line_visible_last)
+          InitWrappedText(0, 0, wrapped_text, ++start_pos);
+      }
+    }
+    else
+    {
+      start_pos += SIGN(dy);
+    }
 
     DrawInfoScreen_GenericText(wrapped_text, wrapped_tmi, start_pos);
   }