added support for text left/right of level editor text input gadgets
[rocksndiamonds.git] / src / editor.c
index 941cc4da155f7aa18880e35c8592795302feac70..6d38861e69440a665f40b97d49a5a1921991c994 100644 (file)
@@ -691,8 +691,8 @@ enum
   GADGET_ID_TIME_OR_STEPS,
   GADGET_ID_TIME_SCORE_BASE,
   GADGET_ID_GAME_ENGINE_TYPE,
-  GADGET_ID_BD_SCHEDULING_TYPE,
   GADGET_ID_LEVELSET_SAVE_MODE,
+  GADGET_ID_BD_SCHEDULING_TYPE,
   GADGET_ID_WIND_DIRECTION,
   GADGET_ID_PLAYER_SPEED,
   GADGET_ID_BD_GRAVITY_DIRECTION,
@@ -1023,8 +1023,8 @@ enum
   ED_SELECTBOX_ID_TIME_OR_STEPS,
   ED_SELECTBOX_ID_TIME_SCORE_BASE,
   ED_SELECTBOX_ID_GAME_ENGINE_TYPE,
-  ED_SELECTBOX_ID_BD_SCHEDULING_TYPE,
   ED_SELECTBOX_ID_LEVELSET_SAVE_MODE,
+  ED_SELECTBOX_ID_BD_SCHEDULING_TYPE,
   ED_SELECTBOX_ID_WIND_DIRECTION,
   ED_SELECTBOX_ID_PLAYER_SPEED,
   ED_SELECTBOX_ID_BD_GRAVITY_DIRECTION,
@@ -2064,7 +2064,7 @@ static struct
   int gadget_id;
   int size;
   char *value;
-  char *text_above, *infotext;
+  char *text_above, *text_left, *text_right, *infotext;
 } textinput_info[ED_NUM_TEXTINPUT] =
 {
   {
@@ -2073,7 +2073,7 @@ static struct
     GADGET_ID_LEVEL_NAME,
     MAX_LEVEL_NAME_LEN,
     level.name,
-    "Title:", "Title for this level"
+    "Title:", NULL, NULL,                      "Enter title for this level"
   },
   {
     ED_TEXTINPUT_ID_LEVEL_AUTHOR,
@@ -2081,7 +2081,7 @@ static struct
     GADGET_ID_LEVEL_AUTHOR,
     MAX_LEVEL_AUTHOR_LEN,
     level.author,
-    "Author:", "Author for this level"
+    "Author:", NULL, NULL,                     "Enter author for this level"
   },
   {
     ED_TEXTINPUT_ID_LEVELSET_NAME,
@@ -2089,7 +2089,7 @@ static struct
     GADGET_ID_LEVELSET_NAME,
     MAX_LEVEL_NAME_LEN,
     levelset_name,
-    "Title:", "Title for this or new level set"
+    "Title:", NULL, NULL,                      "Enter title for this or new level set"
   },
   {
     ED_TEXTINPUT_ID_LEVELSET_AUTHOR,
@@ -2097,7 +2097,7 @@ static struct
     GADGET_ID_LEVELSET_AUTHOR,
     MAX_LEVEL_AUTHOR_LEN,
     levelset_author,
-    "Author:", "Author for this or new level set"
+    "Author:", NULL, NULL,                     "Enter author for this or new level set"
   },
   {
     ED_TEXTINPUT_ID_ELEMENT_NAME,
@@ -2105,7 +2105,7 @@ static struct
     GADGET_ID_ELEMENT_NAME,
     MAX_ELEMENT_NAME_LEN - 2,                  // currently 2 chars less editable
     custom_element.description,
-    NULL, "Element name"
+    NULL, NULL, NULL,                          "Enter element name"
   }
 };
 
@@ -2931,15 +2931,6 @@ static struct
     &level.game_engine_type,
     NULL, "Game engine:", NULL,                        "Select game engine"
   },
-  {
-    ED_SELECTBOX_ID_BD_SCHEDULING_TYPE,
-    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(1),
-    GADGET_ID_BD_SCHEDULING_TYPE,              GADGET_ID_NONE,
-    -1,
-    options_bd_scheduling_type,
-    &level.bd_scheduling_type,
-    NULL, "Scheduling type:", NULL,            "Select level timing"
-  },
   {
     ED_SELECTBOX_ID_LEVELSET_SAVE_MODE,
     ED_LEVEL_SETTINGS_XPOS(0),                 ED_LEVEL_SETTINGS_YPOS(10),
@@ -2950,6 +2941,20 @@ static struct
     "Action:", NULL, NULL,                     "Select action when saving level set"
   },
 
+  // ---------- engine settings: config ---------------------------------------
+
+  {
+    ED_SELECTBOX_ID_BD_SCHEDULING_TYPE,
+    ED_ENGINE_SETTINGS_XPOS(0),                        ED_ENGINE_SETTINGS_YPOS(1),
+    GADGET_ID_BD_SCHEDULING_TYPE,              GADGET_ID_NONE,
+    -1,
+    options_bd_scheduling_type,
+    &level.bd_scheduling_type,
+    NULL, "Scheduling type:", NULL,            "Select level timing"
+  },
+
+  // ---------- engine settings: colors ---------------------------------------
+
   // ---------- element settings: configure (several elements) ----------------
 
   {
@@ -8414,7 +8419,11 @@ static void CreateTextInputGadgets(void)
       y = ED_SETTINGS_Y(textinput_info[i].y);
     }
 
-    sprintf(infotext, "Enter %s", textinput_info[i].infotext);
+    // determine horizontal offset for leading text
+    if (textinput_info[i].text_left != NULL)
+      x += getTextWidthForGadget(textinput_info[i].text_left);
+
+    sprintf(infotext, "%s", textinput_info[i].infotext);
     infotext[max_infotext_len] = '\0';
 
     gi = CreateGadget(GDI_CUSTOM_ID, id,
@@ -9165,12 +9174,23 @@ static void MapTextInputGadget(int id)
   int font_nr = FONT_TEXT_1;
   int font_height = getFontHeight(font_nr);
   struct GadgetInfo *gi = level_editor_gadget[textinput_info[id].gadget_id];
+  int xoffset_left = getTextWidthForGadget(textinput_info[id].text_left);
+  int xoffset_right = ED_GADGET_TEXT_DISTANCE;
   int yoffset_above = font_height + ED_GADGET_LINE_DISTANCE;
-  int x_above = ED_SETTINGS_X(textinput_info[id].x);
-  int y_above = ED_SETTINGS_Y(textinput_info[id].y) - yoffset_above;
+  int yoffset = (gi->height - font_height) / 2;
+  int x_left = gi->x - xoffset_left;
+  int x_right = gi->x + gi->width + xoffset_right;
+  int y_above = gi->y - yoffset_above;
+  int y = gi->y + yoffset;
 
   if (textinput_info[id].text_above)
-    DrawTextS(x_above, y_above, font_nr, textinput_info[id].text_above);
+    DrawText(x_left, y_above, textinput_info[id].text_above, font_nr);
+
+  if (textinput_info[id].text_left)
+    DrawText(x_left, y, textinput_info[id].text_left, font_nr);
+
+  if (textinput_info[id].text_right)
+    DrawText(x_right, y, textinput_info[id].text_right, font_nr);
 
   ModifyGadget(gi, GDI_TEXT_VALUE, textinput_info[id].value, GDI_END);
 
@@ -9210,11 +9230,10 @@ static void MapSelectboxGadget(int id)
   int x_left = gi->x - xoffset_left;
   int x_right = gi->x + gi->width + xoffset_right;
   int y_above = gi->y - yoffset_above;
-  int x = gi->x;
   int y = gi->y + yoffset;
 
   if (selectbox_info[id].text_above)
-    DrawText(x, y_above, selectbox_info[id].text_above, font_nr);
+    DrawText(x_left, y_above, selectbox_info[id].text_above, font_nr);
 
   if (selectbox_info[id].text_left)
     DrawText(x_left, y, selectbox_info[id].text_left, font_nr);