#define ED_GADGET_DISTANCE 2
#define ED_GADGET_TEXT_DISTANCE (2 * ED_GADGET_DISTANCE)
+#define ED_GADGET_LINE_DISTANCE (2 * ED_GADGET_DISTANCE)
#define ED_DRAWINGAREA_TEXT_DISTANCE (ED_GADGET_TEXT_DISTANCE + \
MINI_TILEX / 2)
/* values for the settings windows */
-#define ED_LEVEL_SETTINGS_XSTART (3 * MINI_TILEX / 2)
-#define ED_LEVEL_SETTINGS_YSTART (7 * MINI_TILEY)
+#define ED_SETTINGS1_YPOS MINI_TILEY
+
+#define ED_ELEMENT_SETTINGS_ELEM_XPOS (2 * MINI_TILEX)
+#define ED_ELEMENT_SETTINGS_ELEM_YPOS (4 * MINI_TILEY + MINI_TILEY / 2)
+
+/* values for checkbutton gadgets */
+#define ED_CHECKBUTTON_XSIZE (graphic_info[IMG_EDITOR_CHECKBOX].width)
+#define ED_CHECKBUTTON_YSIZE (graphic_info[IMG_EDITOR_CHECKBOX].height)
+
+#define ED_TABBUTTON_XSIZE (graphic_info[IMG_EDITOR_TABBUTTON].width)
+#define ED_TABBUTTON_YSIZE (graphic_info[IMG_EDITOR_TABBUTTON].height)
-#define ED_ELEMENT_SETTINGS_XSTART (3 * MINI_TILEX / 2)
-#define ED_ELEMENT_SETTINGS_YSTART (10 * MINI_TILEY)
+#define ED_TAB_BAR_HEIGHT ED_GADGET_DISTANCE
+
+#define ED_LEVEL_SETTINGS_BASE_XSTART (3 * MINI_TILEX / 2)
+#define ED_LEVEL_SETTINGS_BASE_YSTART (9 * MINI_TILEY / 2)
+#define ED_ELEMENT_SETTINGS_BASE_XSTART (3 * MINI_TILEX / 2)
+#define ED_ELEMENT_SETTINGS_BASE_YSTART (9 * MINI_TILEY)
+
+#define ED_LEVEL_SETTINGS_XSTART (ED_LEVEL_SETTINGS_BASE_XSTART)
+#define ED_LEVEL_SETTINGS_YSTART (ED_LEVEL_SETTINGS_BASE_YSTART + \
+ ED_TABBUTTON_YSIZE + \
+ ED_TAB_BAR_HEIGHT + \
+ ED_GADGET_DISTANCE + \
+ getFontHeight(FONT_TEXT_1) + \
+ ED_GADGET_DISTANCE)
+#define ED_ELEMENT_SETTINGS_XSTART (ED_ELEMENT_SETTINGS_BASE_XSTART)
+#define ED_ELEMENT_SETTINGS_YSTART (ED_ELEMENT_SETTINGS_BASE_YSTART + \
+ getFontHeight(FONT_INPUT_2) + \
+ ED_GADGET_DISTANCE)
-#define ED_XOFFSET_CHECKBOX (ED_CHECKBUTTON_XSIZE + \
- 2 * ED_GADGET_DISTANCE)
+#define ED_SETTINGS_XOFFSET (ED_CHECKBUTTON_XSIZE + \
+ ED_GADGET_TEXT_DISTANCE)
+#define ED_SETTINGS_YOFFSET (ED_CHECKBUTTON_YSIZE + \
+ ED_GADGET_LINE_DISTANCE)
-#define ED_SETTINGS_XOFFSET ED_XOFFSET_CHECKBOX
-#define ED_SETTINGS_YOFFSET (3 * MINI_TILEY / 2)
-#define ED_SETTINGS_TAB_XOFFSET 124
+#define ED_POS_LEVEL_SETTINGS (100)
+#define ED_POS_ELEMENT_SETTINGS (200)
-#define ED_LEVEL_SETTINGS_XPOS(n) (ED_LEVEL_SETTINGS_XSTART + \
- (n) * ED_SETTINGS_XOFFSET)
-#define ED_LEVEL_SETTINGS_YPOS(n) (ED_LEVEL_SETTINGS_YSTART + \
+#define ED_LEVEL_SETTINGS_XPOS(n) (ED_POS_LEVEL_SETTINGS + (n))
+#define ED_LEVEL_SETTINGS_YPOS(n) (ED_POS_LEVEL_SETTINGS + (n))
+
+#define ED_ELEMENT_SETTINGS_XPOS(n) (ED_POS_ELEMENT_SETTINGS + (n))
+#define ED_ELEMENT_SETTINGS_YPOS(n) (ED_POS_ELEMENT_SETTINGS + (n))
+
+#define IS_POS_LEVEL_SETTINGS(n) ((n) >= ED_POS_LEVEL_SETTINGS && \
+ (n) < ED_POS_LEVEL_SETTINGS + 100)
+#define IS_POS_ELEMENT_SETTINGS(n) ((n) >= ED_POS_ELEMENT_SETTINGS && \
+ (n) < ED_POS_ELEMENT_SETTINGS + 100)
+
+#define ED_LEVEL_SETTINGS_LINE(n) ((n) - ED_POS_LEVEL_SETTINGS)
+#define ED_ELEMENT_SETTINGS_LINE(n) ((n) - ED_POS_ELEMENT_SETTINGS)
+
+#define ED_LEVEL_SETTINGS_X(n) (ED_LEVEL_SETTINGS_XSTART + \
+ (n) * ED_SETTINGS_XOFFSET)
+#define ED_LEVEL_SETTINGS_Y(n) (ED_LEVEL_SETTINGS_YSTART + \
(n) * ED_SETTINGS_YOFFSET)
-#define ED_ELEMENT_SETTINGS_XPOS(n) (ED_ELEMENT_SETTINGS_XSTART + \
- (n) * ED_SETTINGS_XOFFSET)
-#define ED_ELEMENT_SETTINGS_YPOS(n) (ED_ELEMENT_SETTINGS_YSTART + \
+#define ED_ELEMENT_SETTINGS_X(n) (ED_ELEMENT_SETTINGS_XSTART + \
+ (n) * ED_SETTINGS_XOFFSET)
+#define ED_ELEMENT_SETTINGS_Y(n) (ED_ELEMENT_SETTINGS_YSTART + \
(n) * ED_SETTINGS_YOFFSET)
-#define ED_LEVEL_SETTINGS_TABS_XPOS(n) (ED_LEVEL_SETTINGS_XPOS(0) + \
- (n) * ED_SETTINGS_TAB_XOFFSET)
-#define ED_LEVEL_SETTINGS_TABS_YPOS(n) (ED_LEVEL_SETTINGS_YSTART - \
- 3 * MINI_TILEY)
+#define ED_POS_TO_LEVEL_SETTINGS_X(n) \
+ (ED_LEVEL_SETTINGS_X(ED_LEVEL_SETTINGS_LINE(n)))
+#define ED_POS_TO_LEVEL_SETTINGS_Y(n) \
+ (ED_LEVEL_SETTINGS_Y(ED_LEVEL_SETTINGS_LINE(n)))
-#define ED_ELEMENT_SETTINGS_TABS_XPOS(n) (ED_ELEMENT_SETTINGS_XPOS(0) + \
- (n) * ED_SETTINGS_TAB_XOFFSET)
-#define ED_ELEMENT_SETTINGS_TABS_YPOS(n) (ED_ELEMENT_SETTINGS_YSTART - \
- 2 * MINI_TILEY)
+#define ED_POS_TO_ELEMENT_SETTINGS_X(n) \
+ (ED_ELEMENT_SETTINGS_X(ED_ELEMENT_SETTINGS_LINE(n)))
+#define ED_POS_TO_ELEMENT_SETTINGS_Y(n) \
+ (ED_ELEMENT_SETTINGS_Y(ED_ELEMENT_SETTINGS_LINE(n)))
-#define ED_SETTINGS1_YPOS MINI_TILEY
+#define ED_SETTINGS_X(n) (IS_POS_LEVEL_SETTINGS(n) ? \
+ ED_POS_TO_LEVEL_SETTINGS_X(n) : \
+ ED_POS_TO_ELEMENT_SETTINGS_X(n))
+#define ED_SETTINGS_Y(n) (IS_POS_LEVEL_SETTINGS(n) ? \
+ ED_POS_TO_LEVEL_SETTINGS_Y(n) : \
+ ED_POS_TO_ELEMENT_SETTINGS_Y(n))
+
+#define ED_AREA_SETTINGS_X(i) (ED_SETTINGS_X((i).x) + (i).xoffset)
+#define ED_AREA_SETTINGS_Y(i) (ED_SETTINGS_Y((i).y) + (i).yoffset)
+
+#define ED_LEVEL_SETTINGS_TABS_XPOS (ED_LEVEL_SETTINGS_BASE_XSTART)
+#define ED_LEVEL_SETTINGS_TABS_YPOS (4 * MINI_TILEY)
+#define ED_ELEMENT_SETTINGS_TABS_XPOS (ED_ELEMENT_SETTINGS_BASE_XSTART)
+#define ED_ELEMENT_SETTINGS_TABS_YPOS (8 * MINI_TILEY)
/* values for element content drawing areas */
-#define ED_AREA_1X1_SETTINGS_XPOS(n) (ED_ELEMENT_SETTINGS_XPOS(n))
-#define ED_AREA_1X1_SETTINGS_YPOS(n) (ED_ELEMENT_SETTINGS_YPOS(n) + \
- ED_GADGET_DISTANCE)
+#define ED_AREA_1X1_LSETTINGS_XPOS(n) ED_LEVEL_SETTINGS_XPOS(n)
+#define ED_AREA_1X1_LSETTINGS_YPOS(n) ED_LEVEL_SETTINGS_YPOS(n)
+#define ED_AREA_1X1_LSETTINGS_XOFF (0)
+#define ED_AREA_1X1_LSETTINGS_YOFF (ED_GADGET_DISTANCE)
-#define ED_AREA_3X3_SETTINGS_XPOS(n) (ED_ELEMENT_SETTINGS_XPOS(n))
-#define ED_AREA_3X3_SETTINGS_YPOS(n) (ED_ELEMENT_SETTINGS_YPOS(n) + \
- ED_GADGET_DISTANCE - MINI_TILEY)
+#define ED_AREA_1X1_SETTINGS_XPOS(n) ED_ELEMENT_SETTINGS_XPOS(n)
+#define ED_AREA_1X1_SETTINGS_YPOS(n) ED_ELEMENT_SETTINGS_YPOS(n)
+#define ED_AREA_1X1_SETTINGS_XOFF (0)
+#define ED_AREA_1X1_SETTINGS_YOFF (ED_GADGET_DISTANCE)
+
+#define ED_AREA_3X3_SETTINGS_XPOS(n) ED_ELEMENT_SETTINGS_XPOS(n)
+#define ED_AREA_3X3_SETTINGS_YPOS(n) ED_ELEMENT_SETTINGS_YPOS(n)
+#define ED_AREA_3X3_SETTINGS_XOFF (0)
+#define ED_AREA_3X3_SETTINGS_YOFF (ED_GADGET_DISTANCE - MINI_TILEY)
/* yamyam content */
-#define ED_AREA_YAMYAM_CONTENT_XPOS(n) (2 * MINI_TILEX + \
+#define ED_AREA_YAMYAM_CONTENT_XPOS ED_ELEMENT_SETTINGS_XPOS(0)
+#define ED_AREA_YAMYAM_CONTENT_YPOS ED_ELEMENT_SETTINGS_YPOS(0)
+#define ED_AREA_YAMYAM_CONTENT_XOFF(n) (MINI_TILEX / 2 + \
5 * ((n) % 4) * MINI_TILEX)
-#define ED_AREA_YAMYAM_CONTENT_YPOS(n) (11 * ED_SETTINGS_YOFFSET + \
+#define ED_AREA_YAMYAM_CONTENT_YOFF(n) (13 * MINI_TILEY / 2 + \
6 * ((n) / 4) * MINI_TILEY)
+#define ED_AREA_YAMYAM_CONTENT_X(n) (ED_ELEMENT_SETTINGS_X(0) + \
+ ED_AREA_YAMYAM_CONTENT_XOFF(n))
+#define ED_AREA_YAMYAM_CONTENT_Y(n) (ED_ELEMENT_SETTINGS_Y(0) + \
+ ED_AREA_YAMYAM_CONTENT_YOFF(n))
/* magic ball content */
-#define ED_AREA_MAGIC_BALL_CONTENT_XPOS(n) (2 * MINI_TILEX + \
+#define ED_AREA_MAGIC_BALL_CONTENT_XPOS ED_ELEMENT_SETTINGS_XPOS(0)
+#define ED_AREA_MAGIC_BALL_CONTENT_YPOS ED_ELEMENT_SETTINGS_YPOS(0)
+#define ED_AREA_MAGIC_BALL_CONTENT_XOFF(n) (MINI_TILEX / 2 + \
5 * ((n) % 4) * MINI_TILEX)
-#define ED_AREA_MAGIC_BALL_CONTENT_YPOS(n) (12 * ED_SETTINGS_YOFFSET + \
+#define ED_AREA_MAGIC_BALL_CONTENT_YOFF(n) (16 * MINI_TILEY / 2 + \
6 * ((n) / 4) * MINI_TILEY)
+#define ED_AREA_MAGIC_BALL_CONTENT_X(n) (ED_ELEMENT_SETTINGS_X(0) + \
+ ED_AREA_MAGIC_BALL_CONTENT_XOFF(n))
+#define ED_AREA_MAGIC_BALL_CONTENT_Y(n) (ED_ELEMENT_SETTINGS_Y(0) + \
+ ED_AREA_MAGIC_BALL_CONTENT_YOFF(n))
/* values for scrolling gadgets for drawing area */
#define ED_SCROLLBUTTON_XSIZE 16
ED_ELEMENTLIST_YSIZE - \
2 * ED_SCROLLBUTTON2_YSIZE)
-/* values for checkbutton gadgets */
-#define ED_CHECKBUTTON_XSIZE 20
-#define ED_CHECKBUTTON_YSIZE 20
-
/* values for ClearEditorGadgetInfoText() and HandleEditorGadgetInfoText() */
#define INFOTEXT_XPOS SX
#define INFOTEXT_YPOS (SY + SYSIZE - MINI_TILEX + 2)
"Author:", "Author"
},
{
- 5 * MINI_TILEX - 2, 5 * MINI_TILEY - ED_BORDER_SIZE + 1,
+ -1, -1, /* these values are not constant, but can change at runtime */
GADGET_ID_ELEMENT_NAME,
MAX_ELEMENT_NAME_LEN - 2, /* currently 2 chars less editable */
custom_element.description,
-1,
options_move_leave_type,
&custom_element.move_leave_type,
- "can dig: can", ":", "leave behind or change element"
+ // left text with leading spaces to place gadget next to "can dig" gadget
+ // (needed because drawing area gadgets created after selectbox gadgets)
+ // "can dig: can", ":", "leave behind or change element"
+ " can", ":", "leave behind or change element"
},
{
-1, ED_ELEMENT_SETTINGS_YPOS(7),
} textbutton_info[ED_NUM_TEXTBUTTONS] =
{
{
- ED_LEVEL_SETTINGS_TABS_XPOS(0), ED_LEVEL_SETTINGS_TABS_YPOS(0),
+ ED_LEVEL_SETTINGS_TABS_XPOS, ED_LEVEL_SETTINGS_TABS_YPOS,
GADGET_ID_LEVELINFO_LEVEL, GADGET_ID_NONE,
8, "Level",
NULL, NULL, "Configure level properties"
},
{
- ED_LEVEL_SETTINGS_TABS_XPOS(1), ED_LEVEL_SETTINGS_TABS_YPOS(0),
- GADGET_ID_LEVELINFO_EDITOR, GADGET_ID_NONE,
+ -1, -1,
+ GADGET_ID_LEVELINFO_EDITOR, GADGET_ID_LEVELINFO_LEVEL,
8, "Editor",
NULL, NULL, "Configure editor properties"
},
{
- ED_ELEMENT_SETTINGS_TABS_XPOS(0), ED_ELEMENT_SETTINGS_TABS_YPOS(0),
+ ED_ELEMENT_SETTINGS_TABS_XPOS, ED_ELEMENT_SETTINGS_TABS_YPOS,
GADGET_ID_PROPERTIES_INFO, GADGET_ID_NONE,
8, "Info",
NULL, NULL, "Show information about element"
},
{
- ED_ELEMENT_SETTINGS_TABS_XPOS(1), ED_ELEMENT_SETTINGS_TABS_YPOS(0),
- GADGET_ID_PROPERTIES_CONFIG, GADGET_ID_NONE,
+ -1, -1,
+ GADGET_ID_PROPERTIES_CONFIG, GADGET_ID_PROPERTIES_INFO,
8, "Config",
NULL, NULL, "Configure element properties"
},
{
- ED_ELEMENT_SETTINGS_TABS_XPOS(1), ED_ELEMENT_SETTINGS_TABS_YPOS(0),
- GADGET_ID_PROPERTIES_CONFIG_1, GADGET_ID_NONE,
+ -1, -1,
+ GADGET_ID_PROPERTIES_CONFIG_1, GADGET_ID_PROPERTIES_INFO,
8, "Config 1",
NULL, NULL, "Configure element properties, part 1"
},
{
- ED_ELEMENT_SETTINGS_TABS_XPOS(2), ED_ELEMENT_SETTINGS_TABS_YPOS(0),
- GADGET_ID_PROPERTIES_CONFIG_2, GADGET_ID_NONE,
+ -1, -1,
+ GADGET_ID_PROPERTIES_CONFIG_2, GADGET_ID_PROPERTIES_CONFIG_1,
8, "Config 2",
NULL, NULL, "Configure element properties, part 2"
},
{
- ED_ELEMENT_SETTINGS_TABS_XPOS(3), ED_ELEMENT_SETTINGS_TABS_YPOS(0),
- GADGET_ID_PROPERTIES_CHANGE, GADGET_ID_NONE,
+ -1, -1,
+ GADGET_ID_PROPERTIES_CHANGE, GADGET_ID_PROPERTIES_CONFIG_2,
8, "Change",
NULL, NULL, "Configure custom element change pages"
},
{
- -1, ED_ELEMENT_SETTINGS_YPOS(14),
+ -1, -1,
GADGET_ID_SAVE_AS_TEMPLATE, GADGET_ID_CUSTOM_USE_TEMPLATE,
-1, "Save",
" ", "As Template", "Save current settings as new template"
},
{
- -1, ED_ELEMENT_SETTINGS_YPOS(14),
+ -1, -1,
GADGET_ID_ADD_CHANGE_PAGE, GADGET_ID_PASTE_CHANGE_PAGE,
-1, "New",
NULL, NULL, "Add new change page"
},
{
- -1, ED_ELEMENT_SETTINGS_YPOS(14),
+ -1, -1,
GADGET_ID_DEL_CHANGE_PAGE, GADGET_ID_ADD_CHANGE_PAGE,
-1, "Delete",
NULL, NULL, "Delete current change page"
static struct
{
int x, y;
+ int xoffset, yoffset;
int gadget_id;
int gadget_id_align;
int *value;
/* ---------- level playfield content ------------------------------------ */
{
+ 0, 0,
0, 0,
GADGET_ID_DRAWING_LEVEL, GADGET_ID_NONE,
NULL,
/* ---------- yam yam content -------------------------------------------- */
{
- ED_AREA_YAMYAM_CONTENT_XPOS(0), ED_AREA_YAMYAM_CONTENT_YPOS(0),
+ ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
+ ED_AREA_YAMYAM_CONTENT_XOFF(0), ED_AREA_YAMYAM_CONTENT_YOFF(0),
GADGET_ID_YAMYAM_CONTENT_0, GADGET_ID_NONE,
&level.yamyam_content[0].e[0][0], 3, 3,
NULL, NULL, "1", NULL
},
{
- ED_AREA_YAMYAM_CONTENT_XPOS(1), ED_AREA_YAMYAM_CONTENT_YPOS(1),
+ ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
+ ED_AREA_YAMYAM_CONTENT_XOFF(1), ED_AREA_YAMYAM_CONTENT_YOFF(1),
GADGET_ID_YAMYAM_CONTENT_1, GADGET_ID_NONE,
&level.yamyam_content[1].e[0][0], 3, 3,
NULL, NULL, "2", NULL
},
{
- ED_AREA_YAMYAM_CONTENT_XPOS(2), ED_AREA_YAMYAM_CONTENT_YPOS(2),
+ ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
+ ED_AREA_YAMYAM_CONTENT_XOFF(2), ED_AREA_YAMYAM_CONTENT_YOFF(2),
GADGET_ID_YAMYAM_CONTENT_2, GADGET_ID_NONE,
&level.yamyam_content[2].e[0][0], 3, 3,
NULL, NULL, "3", NULL
},
{
- ED_AREA_YAMYAM_CONTENT_XPOS(3), ED_AREA_YAMYAM_CONTENT_YPOS(3),
+ ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
+ ED_AREA_YAMYAM_CONTENT_XOFF(3), ED_AREA_YAMYAM_CONTENT_YOFF(3),
GADGET_ID_YAMYAM_CONTENT_3, GADGET_ID_NONE,
&level.yamyam_content[3].e[0][0], 3, 3,
NULL, NULL, "4", NULL
},
{
- ED_AREA_YAMYAM_CONTENT_XPOS(4), ED_AREA_YAMYAM_CONTENT_YPOS(4),
+ ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
+ ED_AREA_YAMYAM_CONTENT_XOFF(4), ED_AREA_YAMYAM_CONTENT_YOFF(4),
GADGET_ID_YAMYAM_CONTENT_4, GADGET_ID_NONE,
&level.yamyam_content[4].e[0][0], 3, 3,
NULL, NULL, "5", NULL
},
{
- ED_AREA_YAMYAM_CONTENT_XPOS(5), ED_AREA_YAMYAM_CONTENT_YPOS(5),
+ ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
+ ED_AREA_YAMYAM_CONTENT_XOFF(5), ED_AREA_YAMYAM_CONTENT_YOFF(5),
GADGET_ID_YAMYAM_CONTENT_5, GADGET_ID_NONE,
&level.yamyam_content[5].e[0][0], 3, 3,
NULL, NULL, "6", NULL
},
{
- ED_AREA_YAMYAM_CONTENT_XPOS(6), ED_AREA_YAMYAM_CONTENT_YPOS(6),
+ ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
+ ED_AREA_YAMYAM_CONTENT_XOFF(6), ED_AREA_YAMYAM_CONTENT_YOFF(6),
GADGET_ID_YAMYAM_CONTENT_6, GADGET_ID_NONE,
&level.yamyam_content[6].e[0][0], 3, 3,
NULL, NULL, "7", NULL
},
{
- ED_AREA_YAMYAM_CONTENT_XPOS(7), ED_AREA_YAMYAM_CONTENT_YPOS(7),
+ ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
+ ED_AREA_YAMYAM_CONTENT_XOFF(7), ED_AREA_YAMYAM_CONTENT_YOFF(7),
GADGET_ID_YAMYAM_CONTENT_7, GADGET_ID_NONE,
&level.yamyam_content[7].e[0][0], 3, 3,
NULL, NULL, "8", NULL
/* ---------- magic ball content ----------------------------------------- */
{
- ED_AREA_MAGIC_BALL_CONTENT_XPOS(0), ED_AREA_MAGIC_BALL_CONTENT_YPOS(0),
+ ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+ ED_AREA_MAGIC_BALL_CONTENT_XOFF(0), ED_AREA_MAGIC_BALL_CONTENT_YOFF(0),
GADGET_ID_MAGIC_BALL_CONTENT_0, GADGET_ID_NONE,
&level.ball_content[0].e[0][0], 3, 3,
NULL, NULL, "1", NULL
},
{
- ED_AREA_MAGIC_BALL_CONTENT_XPOS(1), ED_AREA_MAGIC_BALL_CONTENT_YPOS(1),
+ ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+ ED_AREA_MAGIC_BALL_CONTENT_XOFF(1), ED_AREA_MAGIC_BALL_CONTENT_YOFF(1),
GADGET_ID_MAGIC_BALL_CONTENT_1, GADGET_ID_NONE,
&level.ball_content[1].e[0][0], 3, 3,
NULL, NULL, "2", NULL
},
{
- ED_AREA_MAGIC_BALL_CONTENT_XPOS(2), ED_AREA_MAGIC_BALL_CONTENT_YPOS(2),
+ ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+ ED_AREA_MAGIC_BALL_CONTENT_XOFF(2), ED_AREA_MAGIC_BALL_CONTENT_YOFF(2),
GADGET_ID_MAGIC_BALL_CONTENT_2, GADGET_ID_NONE,
&level.ball_content[2].e[0][0], 3, 3,
NULL, NULL, "3", NULL
},
{
- ED_AREA_MAGIC_BALL_CONTENT_XPOS(3), ED_AREA_MAGIC_BALL_CONTENT_YPOS(3),
+ ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+ ED_AREA_MAGIC_BALL_CONTENT_XOFF(3), ED_AREA_MAGIC_BALL_CONTENT_YOFF(3),
GADGET_ID_MAGIC_BALL_CONTENT_3, GADGET_ID_NONE,
&level.ball_content[3].e[0][0], 3, 3,
NULL, NULL, "4", NULL
},
{
- ED_AREA_MAGIC_BALL_CONTENT_XPOS(4), ED_AREA_MAGIC_BALL_CONTENT_YPOS(4),
+ ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+ ED_AREA_MAGIC_BALL_CONTENT_XOFF(4), ED_AREA_MAGIC_BALL_CONTENT_YOFF(4),
GADGET_ID_MAGIC_BALL_CONTENT_4, GADGET_ID_NONE,
&level.ball_content[4].e[0][0], 3, 3,
NULL, NULL, "5", NULL
},
{
- ED_AREA_MAGIC_BALL_CONTENT_XPOS(5), ED_AREA_MAGIC_BALL_CONTENT_YPOS(5),
+ ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+ ED_AREA_MAGIC_BALL_CONTENT_XOFF(5), ED_AREA_MAGIC_BALL_CONTENT_YOFF(5),
GADGET_ID_MAGIC_BALL_CONTENT_5, GADGET_ID_NONE,
&level.ball_content[5].e[0][0], 3, 3,
NULL, NULL, "6", NULL
},
{
- ED_AREA_MAGIC_BALL_CONTENT_XPOS(6), ED_AREA_MAGIC_BALL_CONTENT_YPOS(6),
+ ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+ ED_AREA_MAGIC_BALL_CONTENT_XOFF(6), ED_AREA_MAGIC_BALL_CONTENT_YOFF(6),
GADGET_ID_MAGIC_BALL_CONTENT_6, GADGET_ID_NONE,
&level.ball_content[6].e[0][0], 3, 3,
NULL, NULL, "7", NULL
},
{
- ED_AREA_MAGIC_BALL_CONTENT_XPOS(7), ED_AREA_MAGIC_BALL_CONTENT_YPOS(7),
+ ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
+ ED_AREA_MAGIC_BALL_CONTENT_XOFF(7), ED_AREA_MAGIC_BALL_CONTENT_YOFF(7),
GADGET_ID_MAGIC_BALL_CONTENT_7, GADGET_ID_NONE,
&level.ball_content[7].e[0][0], 3, 3,
NULL, NULL, "8", NULL
{
ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(5),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_ANDROID_CONTENT, GADGET_ID_NONE,
&level.android_clone_element[0], MAX_ANDROID_ELEMENTS, 1,
"elements:", NULL, NULL, "elements android can clone"
{
ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(3),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_AMOEBA_CONTENT, GADGET_ID_NONE,
&level.amoeba_content, 1, 1,
"content:", NULL, NULL, "amoeba content"
{
-1, ED_AREA_1X1_SETTINGS_YPOS(9),
+ 0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_START_ELEMENT, GADGET_ID_USE_START_ELEMENT,
&level.start_element[0], 1, 1,
NULL, NULL, NULL, "level start element"
{
-1, ED_AREA_1X1_SETTINGS_YPOS(10),
+ 0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_ARTWORK_ELEMENT, GADGET_ID_USE_ARTWORK_ELEMENT,
&level.artwork_element[0], 1, 1,
NULL, NULL, NULL, "element for player artwork"
{
-1, ED_AREA_1X1_SETTINGS_YPOS(11),
+ 0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_EXPLOSION_ELEMENT, GADGET_ID_USE_EXPLOSION_ELEMENT,
&level.explosion_element[0], 1, 1,
NULL, NULL, NULL, "element for player explosion"
{
-1, ED_AREA_1X1_SETTINGS_YPOS(1),
+ 0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_INVENTORY_CONTENT, GADGET_ID_USE_INITIAL_INVENTORY,
&level.initial_inventory_content[0][0], MAX_INITIAL_INVENTORY_SIZE, 1,
NULL, NULL, NULL, "content for initial inventory"
{
-1, ED_AREA_1X1_SETTINGS_YPOS(1),
+ 0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_GRAPHIC, GADGET_ID_CUSTOM_USE_GRAPHIC,
&custom_element.gfx_element_initial,1, 1,
NULL, NULL, NULL, "custom graphic element"
{
-1, ED_AREA_3X3_SETTINGS_YPOS(10),
+ 0, ED_AREA_3X3_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CONTENT, GADGET_ID_NONE, /* align three rows */
&custom_element.content.e[0][0], 3, 3,
"content:", NULL, NULL, NULL
{
ED_AREA_1X1_SETTINGS_XPOS(1), ED_AREA_1X1_SETTINGS_YPOS(3),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_MOVE_ENTER, GADGET_ID_NONE,
&custom_element.move_enter_element, 1, 1,
"can dig:", " ", NULL, "element that can be digged/collected"
},
{
-1, ED_AREA_1X1_SETTINGS_YPOS(3),
+ 0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_MOVE_LEAVE, GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE,
&custom_element.move_leave_element, 1, 1,
NULL, NULL, NULL, "element that will be left behind"
{
-1, ED_AREA_1X1_SETTINGS_YPOS(1),
+ 0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CHANGE_TARGET, GADGET_ID_CUSTOM_CAN_CHANGE,
&custom_element_change.target_element, 1, 1,
NULL, "after/when:", NULL, "new target element after change"
{
-1, ED_AREA_3X3_SETTINGS_YPOS(9),
+ 0, ED_AREA_3X3_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CHANGE_CONTENT, GADGET_ID_NONE, /* align three rows */
&custom_element_change.target_content.e[0][0], 3, 3,
NULL, NULL, NULL, "new extended elements after change"
{
-1, ED_AREA_1X1_SETTINGS_YPOS(5),
+ 0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CHANGE_TRIGGER, GADGET_ID_CHANGE_OTHER_ACTION,
&custom_element_change.initial_trigger_element, 1, 1,
NULL, NULL, NULL, "other element triggering change"
{
-1, ED_AREA_1X1_SETTINGS_YPOS(13),
+ 0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CHANGE_ACTION, GADGET_ID_ACTION_ARG,
&custom_element_change.action_element, 1, 1,
NULL, NULL, NULL, "element used as action parameter"
{
ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(2),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_GROUP_CONTENT, GADGET_ID_NONE,
&group_element_info.element[0], MAX_ELEMENTS_IN_GROUP, 1,
"content:", NULL, NULL, NULL
/* ---------- random background (for random painting) -------------------- */
{
- -1, ED_AREA_1X1_SETTINGS_YPOS(-1),
+ -1, ED_AREA_1X1_LSETTINGS_YPOS(1),
+ 0, ED_AREA_1X1_LSETTINGS_YOFF,
GADGET_ID_RANDOM_BACKGROUND, GADGET_ID_RANDOM_RESTRICTED,
&random_placement_background_element, 1, 1,
NULL, NULL, NULL, "random placement background"
for (i = 0; i < ED_NUM_COUNTERBUTTONS; i++)
{
int j;
- int x = SX + counterbutton_info[i].x; /* down count button */
- int y = SY + counterbutton_info[i].y;
+ int x = SX + ED_SETTINGS_X(counterbutton_info[i].x); /* down count button */
+ int y = SY + ED_SETTINGS_Y(counterbutton_info[i].y);
/* determine horizontal position to the right of specified gadget */
if (counterbutton_info[i].gadget_id_align != GADGET_ID_NONE)
struct GadgetInfo *gi;
unsigned int event_mask;
int id = drawingarea_info[i].gadget_id;
- int x = SX + drawingarea_info[i].x;
- int y = SY + drawingarea_info[i].y;
+ int x = SX + ED_AREA_SETTINGS_X(drawingarea_info[i]);
+ int y = SY + ED_AREA_SETTINGS_Y(drawingarea_info[i]);
int area_xsize = drawingarea_info[i].area_xsize;
int area_ysize = drawingarea_info[i].area_ysize;
static void CreateTextInputGadgets()
{
+ struct GraphicInfo *gd = &graphic_info[IMG_EDITOR_INPUT_TEXT];
+ int border_size = gd->border_size;
+ int font_nr = FONT_INPUT_1;
+ int font_height = getFontHeight(font_nr);
+ int xoffset = TILEX + ED_ELEMENT_BORDER + 3 * border_size;
+ int yoffset = (TILEY - font_height) / 2;
int max_infotext_len = getMaxInfoTextLength();
int i;
for (i = 0; i < ED_NUM_TEXTINPUT; i++)
{
- struct GraphicInfo *gd = &graphic_info[IMG_EDITOR_INPUT_TEXT];
int gd_x1 = gd->src_x;
int gd_y1 = gd->src_y;
int gd_x2 = gd->src_x + gd->active_xoffset;
unsigned int event_mask;
char infotext[MAX_OUTPUT_LINESIZE + 1];
int id = textinput_info[i].gadget_id;
+ int x, y;
+
+ if (i == ED_TEXTINPUT_ID_ELEMENT_NAME)
+ {
+ x = ED_ELEMENT_SETTINGS_ELEM_XPOS + xoffset - border_size;
+ y = ED_ELEMENT_SETTINGS_ELEM_YPOS + yoffset - border_size;
+ }
+ else
+ {
+ x = ED_SETTINGS_X(textinput_info[i].x);
+ y = ED_SETTINGS_Y(textinput_info[i].y);
+ }
event_mask = GD_EVENT_TEXT_RETURN | GD_EVENT_TEXT_LEAVING;
gi = CreateGadget(GDI_CUSTOM_ID, id,
GDI_CUSTOM_TYPE_ID, i,
GDI_INFO_TEXT, infotext,
- GDI_X, SX + textinput_info[i].x,
- GDI_Y, SY + textinput_info[i].y,
+ GDI_X, SX + x,
+ GDI_Y, SY + y,
GDI_TYPE, GD_TYPE_TEXT_INPUT_ALPHANUMERIC,
GDI_TEXT_VALUE, textinput_info[i].value,
GDI_TEXT_SIZE, textinput_info[i].size,
gi = CreateGadget(GDI_CUSTOM_ID, id,
GDI_CUSTOM_TYPE_ID, i,
GDI_INFO_TEXT, infotext,
- GDI_X, SX + textarea_info[i].x,
- GDI_Y, SY + textarea_info[i].y,
+ GDI_X, SX + ED_SETTINGS_X(textarea_info[i].x),
+ GDI_Y, SY + ED_SETTINGS_Y(textarea_info[i].y),
GDI_TYPE, GD_TYPE_TEXT_AREA,
GDI_AREA_SIZE, area_xsize, area_ysize,
GDI_TEXT_FONT, FONT_INPUT_1,
unsigned int event_mask;
char infotext[MAX_OUTPUT_LINESIZE + 1];
int id = selectbox_info[i].gadget_id;
- int x = SX + selectbox_info[i].x;
- int y = SY + selectbox_info[i].y;
+ int x = SX + ED_SETTINGS_X(selectbox_info[i].x);
+ int y = SY + ED_SETTINGS_Y(selectbox_info[i].y);
if (selectbox_info[i].size == -1) /* dynamically determine size */
{
for (i = 0; i < ED_NUM_TEXTBUTTONS; i++)
{
int id = textbutton_info[i].gadget_id;
- int graphic =
+ int is_tab_button =
((id >= GADGET_ID_LEVELINFO_LEVEL && id <= GADGET_ID_LEVELINFO_EDITOR) ||
- (id >= GADGET_ID_PROPERTIES_INFO && id <= GADGET_ID_PROPERTIES_CHANGE) ?
- IMG_EDITOR_TABBUTTON : IMG_EDITOR_TEXTBUTTON);
+ (id >= GADGET_ID_PROPERTIES_INFO && id <= GADGET_ID_PROPERTIES_CHANGE));
+ int graphic =
+ (is_tab_button ? IMG_EDITOR_TABBUTTON : IMG_EDITOR_TEXTBUTTON);
+ int gadget_distance =
+ (is_tab_button ? ED_GADGET_DISTANCE : ED_GADGET_TEXT_DISTANCE);
struct GraphicInfo *gd = &graphic_info[graphic];
int gd_x1 = gd->src_x;
int gd_y1 = gd->src_y;
/* determine horizontal position to the right of specified gadget */
if (textbutton_info[i].gadget_id_align != GADGET_ID_NONE)
- x = (right_gadget_border[textbutton_info[i].gadget_id_align] +
- ED_GADGET_TEXT_DISTANCE);
+ {
+ int gadget_id_align = textbutton_info[i].gadget_id_align;
+
+ x = right_gadget_border[gadget_id_align] + gadget_distance;
+
+ if (textbutton_info[i].y == -1)
+ y = level_editor_gadget[gadget_id_align]->y;
+ }
/* determine horizontal offset for leading text */
if (textbutton_info[i].text_left != NULL)
for (i = 0; i < ED_NUM_GRAPHICBUTTONS; i++)
{
int id = graphicbutton_info[i].gadget_id;
- int x = SX + graphicbutton_info[i].x;
- int y = SY + graphicbutton_info[i].y;
+ int x = SX + ED_SETTINGS_X(graphicbutton_info[i].x);
+ int y = SY + ED_SETTINGS_Y(graphicbutton_info[i].y);
struct GraphicInfo *gd = &graphic_info[graphicbutton_info[i].graphic];
int gd_x1 = gd->src_x;
int gd_y1 = gd->src_y;
int gd_y1a = gd->src_y + gd->active_yoffset;
int gd_x2a = gd->src_x + gd->active_xoffset + gd->pressed_xoffset;
int gd_y2a = gd->src_y + gd->active_yoffset + gd->pressed_yoffset;
- int x = SX + checkbutton_info[i].x;
- int y = SY + checkbutton_info[i].y;
+ int x = SX + ED_SETTINGS_X(checkbutton_info[i].x);
+ int y = SY + ED_SETTINGS_Y(checkbutton_info[i].y);
/* determine horizontal position to the right of specified gadget */
if (checkbutton_info[i].gadget_id_align != GADGET_ID_NONE)
for (i = 0; i < ED_NUM_RADIOBUTTONS; i++)
{
int id = radiobutton_info[i].gadget_id;
- int x = SX + radiobutton_info[i].x;
- int y = SY + radiobutton_info[i].y;
+ int x = SX + ED_SETTINGS_X(radiobutton_info[i].x);
+ int y = SY + ED_SETTINGS_Y(radiobutton_info[i].y);
int checked =
(*radiobutton_info[i].value == radiobutton_info[i].checked_value);
static void MapCounterButtons(int id)
{
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
int gadget_id_down = counterbutton_info[id].gadget_id_down;
int gadget_id_text = counterbutton_info[id].gadget_id_text;
int gadget_id_up = counterbutton_info[id].gadget_id_up;
struct GadgetInfo *gi_up = level_editor_gadget[gadget_id_up];
int xoffset_left = getTextWidthForGadget(counterbutton_info[id].text_left);
int xoffset_right = ED_GADGET_TEXT_DISTANCE;
- int yoffset_above = MINI_TILEX + ED_GADGET_DISTANCE;
- int yoffset = ED_BORDER_SIZE;
+ int yoffset_above = font_height + ED_GADGET_LINE_DISTANCE;
+ int yoffset = (gi_down->height - font_height) / 2;
int x_left = gi_down->x - xoffset_left;
int x_right; /* set after gadget position was modified */
int y_above = gi_down->y - yoffset_above;
if (id >= ED_COUNTER_ID_ELEMENT_VALUE1 &&
id <= ED_COUNTER_ID_ELEMENT_VALUE4)
{
- ModifyGadget(gi_down, GDI_Y, SY + counterbutton_info[id].y, GDI_END);
- ModifyGadget(gi_text, GDI_Y, SY + counterbutton_info[id].y, GDI_END);
- ModifyGadget(gi_up, GDI_Y, SY + counterbutton_info[id].y, GDI_END);
+ ModifyGadget(gi_down, GDI_Y,
+ SY + ED_SETTINGS_Y(counterbutton_info[id].y), GDI_END);
+ ModifyGadget(gi_text, GDI_Y,
+ SY + ED_SETTINGS_Y(counterbutton_info[id].y), GDI_END);
+ ModifyGadget(gi_up, GDI_Y,
+ SY + ED_SETTINGS_Y(counterbutton_info[id].y), GDI_END);
}
/* vertical position might have changed after setting position above */
y = gi_up->y + yoffset;
if (counterbutton_info[id].text_above)
- DrawText(x, y_above, counterbutton_info[id].text_above, FONT_TEXT_1);
+ DrawText(x, y_above, counterbutton_info[id].text_above, font_nr);
if (counterbutton_info[id].text_left)
- DrawText(x_left, y, counterbutton_info[id].text_left, FONT_TEXT_1);
+ DrawText(x_left, y, counterbutton_info[id].text_left, font_nr);
if (counterbutton_info[id].text_right)
- DrawText(x_right, y, counterbutton_info[id].text_right, FONT_TEXT_1);
+ DrawText(x_right, y, counterbutton_info[id].text_right, font_nr);
MapGadget(gi_down);
MapGadget(gi_text);
static void MapDrawingArea(int id)
{
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
struct GadgetInfo *gi = level_editor_gadget[drawingarea_info[id].gadget_id];
int area_xsize = gi->drawing.area_xsize;
int area_ysize = gi->drawing.area_ysize;
- int xoffset_left= getTextWidthForDrawingArea(drawingarea_info[id].text_left);
- int xoffset_below= getTextWidth(drawingarea_info[id].text_below,FONT_TEXT_1);
+ int xoffset_left = getTextWidthForDrawingArea(drawingarea_info[id].text_left);
+ int xoffset_below = getTextWidth(drawingarea_info[id].text_below, font_nr);
int x_left = gi->x - xoffset_left;
int x_right = gi->x + gi->width + ED_DRAWINGAREA_TEXT_DISTANCE;
int x_below = gi->x + (gi->width - xoffset_below) / 2;
- int y_side = gi->y + (gi->height - getFontHeight(FONT_TEXT_1)) / 2;
+ int y_side = gi->y + (gi->height - font_height) / 2;
int y_below = gi->y + gi->height + ED_DRAWINGAREA_TEXT_DISTANCE;
if (drawingarea_info[id].text_left)
- DrawText(x_left, y_side, drawingarea_info[id].text_left, FONT_TEXT_1);
+ DrawText(x_left, y_side, drawingarea_info[id].text_left, font_nr);
if (drawingarea_info[id].text_right)
- DrawText(x_right, y_side, drawingarea_info[id].text_right, FONT_TEXT_1);
+ DrawText(x_right, y_side, drawingarea_info[id].text_right, font_nr);
if (drawingarea_info[id].text_below)
- DrawText(x_below, y_below, drawingarea_info[id].text_below, FONT_TEXT_1);
+ DrawText(x_below, y_below, drawingarea_info[id].text_below, font_nr);
if (id != ED_DRAWING_ID_DRAWING_LEVEL)
{
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_above = 0;
- int yoffset_above = -(MINI_TILEX + ED_GADGET_DISTANCE);
- int x_above = textinput_info[id].x + xoffset_above;
- int y_above = textinput_info[id].y + yoffset_above;
+ 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;
if (textinput_info[id].text_above)
- DrawTextS(x_above, y_above, FONT_TEXT_1, textinput_info[id].text_above);
+ DrawTextS(x_above, y_above, font_nr, textinput_info[id].text_above);
ModifyGadget(gi, GDI_TEXT_VALUE, textinput_info[id].value, GDI_END);
static void MapTextAreaGadget(int id)
{
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
struct GadgetInfo *gi = level_editor_gadget[textarea_info[id].gadget_id];
- int xoffset_above = 0;
- int yoffset_above = -(MINI_TILEX + ED_GADGET_DISTANCE);
- int x_above = textarea_info[id].x + xoffset_above;
- int y_above = textarea_info[id].y + yoffset_above;
+ int yoffset_above = font_height + ED_GADGET_LINE_DISTANCE;
+ int x_above = ED_SETTINGS_X(textarea_info[id].x);
+ int y_above = ED_SETTINGS_Y(textarea_info[id].y) - yoffset_above;
if (textarea_info[id].text_above)
- DrawTextS(x_above, y_above, FONT_TEXT_1, textarea_info[id].text_above);
+ DrawTextS(x_above, y_above, font_nr, textarea_info[id].text_above);
ModifyGadget(gi, GDI_TEXT_VALUE, textarea_info[id].value, GDI_END);
static void MapSelectboxGadget(int id)
{
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
struct GadgetInfo *gi = level_editor_gadget[selectbox_info[id].gadget_id];
int xoffset_left = getTextWidthForGadget(selectbox_info[id].text_left);
int xoffset_right = ED_GADGET_TEXT_DISTANCE;
- int yoffset = ED_BORDER_SIZE;
+ 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 = gi->y + yoffset;
if (selectbox_info[id].text_left)
- DrawText(x_left, y, selectbox_info[id].text_left, FONT_TEXT_1);
+ DrawText(x_left, y, selectbox_info[id].text_left, font_nr);
if (selectbox_info[id].text_right)
- DrawText(x_right, y, selectbox_info[id].text_right, FONT_TEXT_1);
+ DrawText(x_right, y, selectbox_info[id].text_right, font_nr);
ModifyEditorSelectboxValue(id, *selectbox_info[id].value);
static void MapTextbuttonGadget(int id)
{
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
struct GadgetInfo *gi = level_editor_gadget[textbutton_info[id].gadget_id];
int xoffset_left = getTextWidthForGadget(textbutton_info[id].text_left);
int xoffset_right = ED_GADGET_TEXT_DISTANCE;
- int yoffset = ED_BORDER_SIZE;
+ 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 = gi->y + yoffset;
return;
if (textbutton_info[id].text_left)
- DrawText(x_left, y, textbutton_info[id].text_left, FONT_TEXT_1);
+ DrawText(x_left, y, textbutton_info[id].text_left, font_nr);
if (textbutton_info[id].text_right)
- DrawText(x_right, y, textbutton_info[id].text_right, FONT_TEXT_1);
+ DrawText(x_right, y, textbutton_info[id].text_right, font_nr);
MapGadget(gi);
}
static void MapGraphicbuttonGadget(int id)
{
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
struct GadgetInfo *gi= level_editor_gadget[graphicbutton_info[id].gadget_id];
int xoffset_left = getTextWidthForGadget(graphicbutton_info[id].text_left);
int xoffset_right = ED_GADGET_TEXT_DISTANCE;
- int yoffset = ED_BORDER_SIZE;
+ 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 = gi->y + yoffset;
if (graphicbutton_info[id].text_left)
- DrawText(x_left, y, graphicbutton_info[id].text_left, FONT_TEXT_1);
+ DrawText(x_left, y, graphicbutton_info[id].text_left, font_nr);
if (graphicbutton_info[id].text_right)
- DrawText(x_right, y, graphicbutton_info[id].text_right, FONT_TEXT_1);
+ DrawText(x_right, y, graphicbutton_info[id].text_right, font_nr);
MapGadget(gi);
}
static void MapRadiobuttonGadget(int id)
{
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
struct GadgetInfo *gi = level_editor_gadget[radiobutton_info[id].gadget_id];
int xoffset_left = getTextWidthForGadget(checkbutton_info[id].text_left);
int xoffset_right = ED_GADGET_TEXT_DISTANCE;
- int yoffset = ED_BORDER_SIZE;
+ 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 = gi->y + yoffset;
(*radiobutton_info[id].value == radiobutton_info[id].checked_value);
if (radiobutton_info[id].text_left)
- DrawText(x_left, y, radiobutton_info[id].text_left, FONT_TEXT_1);
+ DrawText(x_left, y, radiobutton_info[id].text_left, font_nr);
if (radiobutton_info[id].text_right)
- DrawText(x_right, y, radiobutton_info[id].text_right, FONT_TEXT_1);
+ DrawText(x_right, y, radiobutton_info[id].text_right, font_nr);
ModifyGadget(gi, GDI_CHECKED, checked, GDI_END);
static void MapCheckbuttonGadget(int id)
{
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
struct GadgetInfo *gi = level_editor_gadget[checkbutton_info[id].gadget_id];
int xoffset_left = getTextWidthForGadget(checkbutton_info[id].text_left);
int xoffset_right = ED_GADGET_TEXT_DISTANCE;
- int yoffset = ED_BORDER_SIZE;
+ int yoffset = (gi->height - font_height) / 2;
int x_left, x_right, y; /* set after gadget position was modified */
/* set position for gadgets with dynamically determined position */
if (checkbutton_info[id].x != -1) /* do not change dynamic positions */
- ModifyGadget(gi, GDI_X, SX + checkbutton_info[id].x, GDI_END);
- ModifyGadget(gi, GDI_Y, SY + checkbutton_info[id].y, GDI_END);
+ ModifyGadget(gi, GDI_X, SX + ED_SETTINGS_X(checkbutton_info[id].x),GDI_END);
+ ModifyGadget(gi, GDI_Y, SY + ED_SETTINGS_Y(checkbutton_info[id].y), GDI_END);
x_left = gi->x - xoffset_left;
x_right = gi->x + gi->width + xoffset_right;
y = gi->y + yoffset;
if (checkbutton_info[id].text_left)
- DrawText(x_left, y, checkbutton_info[id].text_left, FONT_TEXT_1);
+ DrawText(x_left, y, checkbutton_info[id].text_left, font_nr);
if (checkbutton_info[id].text_right)
- DrawText(x_right, y, checkbutton_info[id].text_right, FONT_TEXT_1);
+ DrawText(x_right, y, checkbutton_info[id].text_right, font_nr);
ModifyGadget(gi, GDI_CHECKED, *checkbutton_info[id].value, GDI_END);
return gd_gi4->x - gd_gi1->x + gd_gi4->width;
}
+static int getTabulatorBarHeight()
+{
+ return ED_TAB_BAR_HEIGHT;
+}
+
static void DrawLevelInfoTabulatorGadgets()
{
struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_LEVELINFO_LEVEL];
/* draw little border line below tabulator buttons */
if (tab_color != BLACK_PIXEL) /* black => transparent */
FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + 1,
- getTabulatorBarWidth(), ED_GADGET_DISTANCE,
- tab_color);
+ getTabulatorBarWidth(), getTabulatorBarHeight(), tab_color);
}
static void DrawPropertiesTabulatorGadgets()
/* draw little border line below tabulator buttons */
if (tab_color != BLACK_PIXEL) /* black => transparent */
FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + 1,
- getTabulatorBarWidth(), ED_GADGET_DISTANCE,
- tab_color);
+ getTabulatorBarWidth(), getTabulatorBarHeight(), tab_color);
}
static void DrawLevelInfoLevel()
static void DrawYamYamContentAreas()
{
- int x = SX + ED_AREA_YAMYAM_CONTENT_XPOS(3) + 4 * MINI_TILEX;
- int y = SY + ED_AREA_YAMYAM_CONTENT_YPOS(0) + ED_BORDER_AREA_YSIZE;
+ int x = SX + ED_AREA_YAMYAM_CONTENT_X(3) + 4 * MINI_TILEX;
+ int y = SY + ED_AREA_YAMYAM_CONTENT_Y(0) + ED_BORDER_AREA_YSIZE;
int i;
/* display counter to choose number of element content areas */
UnmapDrawingArea(id);
/* delete content areas in case of reducing number of them */
- DrawBackground(SX + drawingarea_info[id].x - MINI_TILEX / 2,
- SY + drawingarea_info[id].y - MINI_TILEY / 2,
+ DrawBackground(SX + ED_AREA_SETTINGS_X(drawingarea_info[id])
+ - MINI_TILEX / 2,
+ SY + ED_AREA_SETTINGS_Y(drawingarea_info[id])
+ - MINI_TILEY / 2,
4 * MINI_TILEX,
4 * MINI_TILEY + ED_GADGET_TEXT_DISTANCE + font_height);
}
static void DrawMagicBallContentAreas()
{
- int x = SX + ED_AREA_MAGIC_BALL_CONTENT_XPOS(3) + 4 * MINI_TILEX;
- int y = SY + ED_AREA_MAGIC_BALL_CONTENT_YPOS(0) + ED_BORDER_AREA_YSIZE;
+ int x = SX + ED_AREA_MAGIC_BALL_CONTENT_X(3) + 4 * MINI_TILEX;
+ int y = SY + ED_AREA_MAGIC_BALL_CONTENT_Y(0) + ED_BORDER_AREA_YSIZE;
int i;
/* display counter to choose number of element content areas */
UnmapDrawingArea(id);
/* delete content areas in case of reducing number of them */
- DrawBackground(SX + drawingarea_info[id].x - MINI_TILEX / 2,
- SY + drawingarea_info[id].y - MINI_TILEY / 2,
+ DrawBackground(SX + ED_AREA_SETTINGS_X(drawingarea_info[id])
+ - MINI_TILEX / 2,
+ SY + ED_AREA_SETTINGS_Y(drawingarea_info[id])
+ - MINI_TILEY / 2,
4 * MINI_TILEX,
4 * MINI_TILEY + ED_GADGET_TEXT_DISTANCE + font_height);
}
{
int num_elements = level.num_android_clone_elements;
int id = ED_DRAWING_ID_ANDROID_CONTENT;
- int sx = SX + drawingarea_info[id].x - MINI_TILEX / 2;
- int sy = SY + drawingarea_info[id].y - MINI_TILEY / 2;
+ int sx = SX + ED_AREA_SETTINGS_X(drawingarea_info[id]) - MINI_TILEX / 2;
+ int sy = SY + ED_AREA_SETTINGS_Y(drawingarea_info[id]) - MINI_TILEY / 2;
int xsize = MAX_ANDROID_ELEMENTS;
int ysize = 1;
int id = ED_DRAWING_ID_GROUP_CONTENT;
int bx = ED_ELEMENT_BORDER_INPUT;
int by = ED_ELEMENT_BORDER_INPUT;
- int sx = SX + drawingarea_info[id].x - bx;
- int sy = SY + drawingarea_info[id].y - by;
+ int sx = SX + ED_AREA_SETTINGS_X(drawingarea_info[id]) - bx;
+ int sy = SY + ED_AREA_SETTINGS_Y(drawingarea_info[id]) - by;
int xsize = MAX_ELEMENTS_IN_GROUP;
int ysize = 1;
int player_nr = GET_PLAYER_NR(element);
int num_elements = level.initial_inventory_size[player_nr];
int id = ED_DRAWING_ID_INVENTORY_CONTENT;
- int sx = SX + drawingarea_info[id].x - MINI_TILEX / 2;
- int sy = SY + drawingarea_info[id].y - MINI_TILEY / 2;
+ int sx = SX + ED_AREA_SETTINGS_X(drawingarea_info[id]) - MINI_TILEX / 2;
+ int sy = SY + ED_AREA_SETTINGS_Y(drawingarea_info[id]) - MINI_TILEY / 2;
int xsize = MAX_INITIAL_INVENTORY_SIZE;
int ysize = 1;
static boolean PrintInfoText(char *text, int font_nr, int start_line)
{
int font_height = getFontHeight(font_nr);
- int pad_x = ED_ELEMENT_SETTINGS_XPOS(0);
- int pad_y = ED_ELEMENT_SETTINGS_YPOS(0) + ED_BORDER_SIZE;
+ int pad_x = ED_ELEMENT_SETTINGS_X(0);
+ int pad_y = ED_ELEMENT_SETTINGS_Y(0) + ED_BORDER_SIZE;
int sx = SX + pad_x;
int sy = SY + pad_y;
int max_lines_per_screen = (SYSIZE - pad_y) / font_height - 1;
int font_nr = FONT_TEXT_2;
int font_width = getFontWidth(font_nr);
int font_height = getFontHeight(font_nr);
- int pad_x = ED_ELEMENT_SETTINGS_XPOS(0);
- int pad_y = ED_ELEMENT_SETTINGS_YPOS(0) + ED_BORDER_SIZE;
+ int pad_x = ED_ELEMENT_SETTINGS_X(0);
+ int pad_y = ED_ELEMENT_SETTINGS_Y(0) + ED_BORDER_SIZE;
int sx = SX + pad_x;
int sy = SY + pad_y + start_line * font_height;
int max_chars_per_line = (SXSIZE - 2 * pad_x) / font_width;
int font2_nr = FONT_TEXT_2;
int font1_width = getFontWidth(font1_nr);
int font2_height = getFontHeight(font2_nr);
- int pad_x = ED_ELEMENT_SETTINGS_XPOS(0);
- int pad_y = ED_ELEMENT_SETTINGS_YPOS(0) + ED_BORDER_SIZE;
+ int pad_x = ED_ELEMENT_SETTINGS_X(0);
+ int pad_y = ED_ELEMENT_SETTINGS_Y(0) + ED_BORDER_SIZE;
int screen_line = 0;
int i, x, y;
if (tab_color != BLACK_PIXEL) /* black => transparent */
FillRectangle(drawto,
- SX + ED_ELEMENT_SETTINGS_XPOS(0),
- SY + ED_ELEMENT_SETTINGS_YPOS(14) - MINI_TILEY / 2,
- getTabulatorBarWidth(), ED_GADGET_DISTANCE,
- tab_color);
+ SX + ED_ELEMENT_SETTINGS_X(0),
+ SY + ED_ELEMENT_SETTINGS_Y(14) - MINI_TILEY / 2,
+ getTabulatorBarWidth(), getTabulatorBarHeight(), tab_color);
}
}
DrawFixedGraphicAnimationExt(drawto, x, y, graphic, frame, NO_MASKING);
}
-static void DrawEditorElementName(int x, int y, int element)
+static void DrawEditorElementName(int x, int y, int font_nr)
{
- char *element_name = getElementInfoText(element);
- int font_nr = FONT_TEXT_1;
+ char *element_name = getElementInfoText(properties_element);
int font_width = getFontWidth(font_nr);
int font_height = getFontHeight(font_nr);
- int max_text_width = SXSIZE - x - ED_ELEMENT_SETTINGS_XPOS(0);
+ int max_text_width = SXSIZE - x - ED_ELEMENT_SETTINGS_X(0);
int max_chars_per_line = max_text_width / font_width;
char buffer[max_chars_per_line + 1];
static void DrawPropertiesWindow()
{
- int xstart = 2;
- int ystart = 4;
-
stick_element_properties_window = FALSE;
/* make sure that previous properties edit mode exists for this element */
FrameCounter = 0; /* restart animation frame counter */
- DrawElementBorder(SX + xstart * MINI_TILEX,
- SY + ystart * MINI_TILEY + MINI_TILEY / 2,
- TILEX, TILEY, FALSE);
-
- DrawEditorElementAnimation(SX + xstart * MINI_TILEX,
- SY + ystart * MINI_TILEY + MINI_TILEY / 2);
-
- DrawEditorElementName((xstart + 3) * MINI_TILEX + 1,
- (ystart + 1) * MINI_TILEY + 1,
- properties_element);
+ struct GraphicInfo *gd = &graphic_info[IMG_EDITOR_INPUT_TEXT];
+ int border_size = gd->border_size;
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
+ int x = ED_ELEMENT_SETTINGS_ELEM_XPOS;
+ int y = ED_ELEMENT_SETTINGS_ELEM_YPOS;
+ int xoffset = TILEX + ED_ELEMENT_BORDER + 3 * border_size;
+ int yoffset = (TILEY - font_height) / 2;
+
+ DrawElementBorder(SX + x, SY + y, TILEX, TILEY, FALSE);
+ DrawEditorElementAnimation(SX + x, SY + y);
+ DrawEditorElementName(x + xoffset, y + yoffset, font_nr);
DrawPropertiesTabulatorGadgets();