added options for custom position of editor tooltip (mouse-over info text)
[rocksndiamonds.git] / src / editor.c
index 9677a17cfc1e018891b785b05945d7cb31ca1988..5c8b67bf3a1ab61e92a009fa2cc253b922cae46e 100644 (file)
 #define INFOTEXT_XSIZE         SXSIZE
 #define INFOTEXT_YSIZE         getFontHeight(INFOTEXT_FONT)
 #define INFOTEXT_YSIZE_FULL    (INFOTEXT_YSIZE + ED_GADGET_SMALL_DISTANCE)
-#define INFOTEXT_XPOS          SX
-#define INFOTEXT_YPOS          (SY + SYSIZE - INFOTEXT_YSIZE)
+#define INFOTEXT_X             (editor.settings.tooltip.x)
+#define INFOTEXT_Y             (editor.settings.tooltip.y)
+#define INFOTEXT_XY_REDEFINED  (INFOTEXT_X != -1 || INFOTEXT_Y != -1)
+#define INFOTEXT_XPOS          SX + (INFOTEXT_XY_REDEFINED ? INFOTEXT_X : 0)
+#define INFOTEXT_YPOS          SY + (INFOTEXT_XY_REDEFINED ? INFOTEXT_Y : \
+                                     SYSIZE - INFOTEXT_YSIZE)
 
 
 /*
@@ -1297,7 +1301,6 @@ static struct ElementInfo custom_element;
 static char levelset_name[MAX_LEVEL_NAME_LEN + 1];
 static char levelset_author[MAX_LEVEL_AUTHOR_LEN + 1];
 static int levelset_num_levels = 100;
-static int levelset_first_level_nr = 1;
 static int levelset_save_mode = LEVELSET_SAVE_MODE_UPDATE;
 
 static struct
@@ -5689,6 +5692,10 @@ static void ReinitializeElementList()
 
     num_editor_elements += num_editor_el_empty;
   }
+  else
+  {
+    num_editor_el_empty = 0;
+  }
 
   editor_elements = checked_malloc(num_editor_elements * sizeof(int));
 
@@ -7591,7 +7598,7 @@ static void ModifyLevelInfoForSavingIntoPersonalLevelSet(char *former_name)
   }
 
   if (level_nr > leveldir_current->last_level)
-    UpdateUserLevelSet(getLoginName(), NULL, NULL, level_nr + 9, -1);
+    UpdateUserLevelSet(getLoginName(), NULL, NULL, level_nr + 9);
 
   // else: allow the save even if annotation failed
 
@@ -8201,7 +8208,8 @@ static int getMaxEdFieldX(boolean has_scrollbar)
 
 static int getMaxEdFieldY(boolean has_scrollbar)
 {
-  int infotext_height = INFOTEXT_YSIZE_FULL;
+  int infotext_height = (IN_PIX_FIELD(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY) ?
+                        INFOTEXT_YSIZE_FULL : 0);
   int scrollbar_height = (has_scrollbar ? ED_SCROLLBUTTON_YSIZE : 0);
   int sysize = SYSIZE - scrollbar_height - infotext_height;
   int max_ed_fieldy = sysize / ed_tilesize;
@@ -8230,8 +8238,7 @@ static void InitLevelSetInfo()
   snprintf(levelset_author, MAX_LEVEL_AUTHOR_LEN + 1,
           "%s", leveldir_current->author);
 
-  levelset_num_levels     = leveldir_current->levels;
-  levelset_first_level_nr = leveldir_current->first_level;
+  levelset_num_levels = leveldir_current->levels;
 
   levelset_save_mode = LEVELSET_SAVE_MODE_UPDATE;
 }
@@ -8262,7 +8269,7 @@ void DrawLevelEd()
 
   FadeSoundsAndMusic();
 
-  if (CheckIfGlobalBorderHasChanged())
+  if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
     fade_mask = REDRAW_ALL;
 
   FadeOut(fade_mask);
@@ -8275,7 +8282,7 @@ void DrawLevelEd()
   InitZoomLevelSettings(-1);
   InitLevelSetInfo();
 
-  OpenDoor(DOOR_OPEN_1 | DOOR_OPEN_2 | DOOR_NO_DELAY);
+  SetDoorState(DOOR_OPEN_1 | DOOR_OPEN_2);
 
 #if DEBUG
   CheckElementDescriptions();
@@ -12640,8 +12647,7 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
       if (UpdateUserLevelSet(levelset_subdir,
                             levelset_name,
                             levelset_author,
-                            levelset_num_levels,
-                            levelset_first_level_nr))
+                            levelset_num_levels))
       {
        Request("Level set updated!", REQ_CONFIRM);
       }
@@ -12655,8 +12661,7 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
       if (CreateUserLevelSet(levelset_subdir,
                             levelset_name,
                             levelset_author,
-                            levelset_num_levels,
-                            1))
+                            levelset_num_levels))
       {
        Request("New level set created!", REQ_CONFIRM);