fixed bug with broken 'page up/down' keys (for element list) in level editor
[rocksndiamonds.git] / src / editor.c
index 3338b0f8d2c5735ff722348b386ad8df7c5c3b12..479fec7af807ebc7dbd3bbb34c3f5a078c6a0197 100644 (file)
@@ -7625,14 +7625,14 @@ void DrawLevelEd()
 
   FadeSoundsAndMusic();
 
-  /* needed if different viewport properties defined for editor */
-  ChangeViewportPropertiesIfNeeded();
-
   if (CheckIfGlobalBorderHasChanged())
     fade_mask = REDRAW_ALL;
 
   FadeOut(fade_mask);
 
+  /* needed if different viewport properties defined for editor */
+  ChangeViewportPropertiesIfNeeded();
+
   ClearField();
 
   InitZoomLevelSettings();
@@ -11885,6 +11885,7 @@ void HandleLevelEditorKeyInput(Key key)
   {
     int id = GADGET_ID_NONE;
     int new_element_shift = element_shift;
+    int step = ED_ELEMENTLIST_BUTTONS_VERT - 1;
     int i;
 
     switch (key)
@@ -11901,13 +11902,23 @@ void HandleLevelEditorKeyInput(Key key)
       case KSYM_Down:
        id = GADGET_ID_SCROLL_DOWN;
        break;
+
       case KSYM_Page_Up:
-       id = GADGET_ID_SCROLL_LIST_UP;
-       button = ED_ELEMENTLIST_BUTTONS_VERT - 1;
-       break;
       case KSYM_Page_Down:
-       id = GADGET_ID_SCROLL_LIST_DOWN;
-       button = ED_ELEMENTLIST_BUTTONS_VERT - 1;
+       step *= (key == KSYM_Page_Up ? -1 : +1);
+        element_shift += step * ED_ELEMENTLIST_BUTTONS_HORIZ;
+
+        if (element_shift < 0)
+          element_shift = 0;
+        if (element_shift > num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS)
+          element_shift = num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS;
+
+        ModifyGadget(level_editor_gadget[GADGET_ID_SCROLL_LIST_VERTICAL],
+                     GDI_SCROLLBAR_ITEM_POSITION,
+                     element_shift / ED_ELEMENTLIST_BUTTONS_HORIZ, GDI_END);
+
+       ModifyEditorElementList();
+
        break;
 
       case KSYM_Home:
@@ -11991,11 +12002,12 @@ void HandleLevelEditorKeyInput(Key key)
       ClickOnGadget(level_editor_gadget[GADGET_ID_SINGLE_ITEMS], button);
     else if (letter == 'U')
       ClickOnGadget(level_editor_gadget[GADGET_ID_UNDO], 3);
-    else if (key == KSYM_KP_Subtract || letter == '-')
+    else if (letter == '-' || key == KSYM_KP_Subtract)
       ClickOnGadget(level_editor_gadget[GADGET_ID_ZOOM], 3);
-    else if (key == KSYM_KP_0 || letter == '0')
+    else if (letter == '0' || key == KSYM_KP_0)
       ClickOnGadget(level_editor_gadget[GADGET_ID_ZOOM], 2);
-    else if (key == KSYM_KP_Add)
+    else if (letter == '+' || key == KSYM_KP_Add ||
+            letter == '=')     // ("Shift-=" is "+" on US keyboards)
       ClickOnGadget(level_editor_gadget[GADGET_ID_ZOOM], 1);
     else if (key == KSYM_Return ||
             key == KSYM_space ||
@@ -12050,7 +12062,7 @@ void PrintEditorGadgetInfoText(struct GadgetInfo *gi)
   char shortcut[MAX_OUTPUT_LINESIZE + 1];
   int max_infotext_len = getMaxInfoTextLength();
 
-  if (gi == NULL || gi->info_text == NULL)
+  if (gi == NULL || strlen(gi->info_text) == 0)
     return;
 
   strncpy(infotext, gi->info_text, max_infotext_len);