X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=375b942b03c6fc36a20a4749499f1f98d91a47ba;hb=a91eb1729c7bff1a2c274d73bc223f58a0cabf4e;hp=ce97227216f0e26d7a28180a7db03b234bc8d47e;hpb=ba4235954c2f507e24bcffa0faa3fc02266da3a2;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index ce972272..375b942b 100644 --- a/src/editor.c +++ b/src/editor.c @@ -72,65 +72,138 @@ #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 @@ -176,10 +249,6 @@ 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) @@ -1380,7 +1449,7 @@ static struct "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, @@ -2232,7 +2301,10 @@ static struct -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), @@ -2381,61 +2453,61 @@ static struct } 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" @@ -2977,6 +3049,7 @@ static struct static struct { int x, y; + int xoffset, yoffset; int gadget_id; int gadget_id_align; int *value; @@ -2987,6 +3060,7 @@ static struct /* ---------- level playfield content ------------------------------------ */ { + 0, 0, 0, 0, GADGET_ID_DRAWING_LEVEL, GADGET_ID_NONE, NULL, @@ -2997,49 +3071,57 @@ static struct /* ---------- 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 @@ -3048,49 +3130,57 @@ static struct /* ---------- 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 @@ -3100,6 +3190,7 @@ static struct { 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" @@ -3109,6 +3200,7 @@ static struct { 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" @@ -3118,6 +3210,7 @@ static struct { -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" @@ -3127,6 +3220,7 @@ static struct { -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" @@ -3136,6 +3230,7 @@ static struct { -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" @@ -3145,6 +3240,7 @@ static struct { -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" @@ -3156,6 +3252,7 @@ static struct { -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" @@ -3167,6 +3264,7 @@ static struct { -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 @@ -3176,12 +3274,14 @@ static struct { 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" @@ -3193,6 +3293,7 @@ static struct { -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" @@ -3202,6 +3303,7 @@ static struct { -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" @@ -3211,6 +3313,7 @@ static struct { -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" @@ -3220,6 +3323,7 @@ static struct { -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" @@ -3229,6 +3333,7 @@ static struct { 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 @@ -3237,7 +3342,8 @@ static struct /* ---------- 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" @@ -5457,8 +5563,8 @@ static void CreateCounterButtons() 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) @@ -5622,8 +5728,8 @@ static void CreateDrawingAreas() 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; @@ -5663,12 +5769,17 @@ static void CreateDrawingAreas() 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; @@ -5677,6 +5788,18 @@ static void CreateTextInputGadgets() 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; @@ -5686,8 +5809,8 @@ static void CreateTextInputGadgets() 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, @@ -5736,8 +5859,8 @@ static void CreateTextAreaGadgets() 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, @@ -5776,8 +5899,8 @@ static void CreateSelectboxGadgets() 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 */ { @@ -5847,10 +5970,13 @@ static void CreateTextbuttonGadgets() 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; @@ -5876,8 +6002,14 @@ static void CreateTextbuttonGadgets() /* 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) @@ -5923,8 +6055,8 @@ static void CreateGraphicbuttonGadgets() 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; @@ -6104,8 +6236,8 @@ static void CreateCheckbuttonGadgets() 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) @@ -6163,8 +6295,8 @@ static void CreateRadiobuttonGadgets() 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); @@ -6269,6 +6401,8 @@ void FreeLevelEditorGadgets() 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; @@ -6277,8 +6411,8 @@ static void MapCounterButtons(int id) 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; @@ -6298,22 +6432,25 @@ static void MapCounterButtons(int id) 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); @@ -6348,25 +6485,27 @@ static void MapControlButtons() 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) { @@ -6381,14 +6520,15 @@ static void MapDrawingArea(int id) 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); @@ -6397,14 +6537,15 @@ static void MapTextInputGadget(int id) 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); @@ -6413,19 +6554,21 @@ static void MapTextAreaGadget(int id) 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); @@ -6434,10 +6577,12 @@ static void MapSelectboxGadget(int id) 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; @@ -6448,39 +6593,43 @@ static void MapTextbuttonGadget(int id) 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; @@ -6488,10 +6637,10 @@ static void MapRadiobuttonGadget(int id) (*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); @@ -6500,26 +6649,28 @@ static void MapRadiobuttonGadget(int id) 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); @@ -7773,6 +7924,11 @@ static int getTabulatorBarWidth() 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]; @@ -7804,8 +7960,7 @@ static void DrawLevelInfoTabulatorGadgets() /* 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() @@ -7853,8 +8008,7 @@ 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() @@ -7946,8 +8100,8 @@ static void DrawCustomChangeContentArea() 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 */ @@ -7968,8 +8122,10 @@ static void DrawYamYamContentAreas() 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); } @@ -7982,8 +8138,8 @@ static void DrawYamYamContentAreas() 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 */ @@ -8004,8 +8160,10 @@ static void DrawMagicBallContentAreas() 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); } @@ -8020,8 +8178,8 @@ static void DrawAndroidElementArea(int element) { 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; @@ -8047,8 +8205,8 @@ static void DrawGroupElementArea(int element) 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; @@ -8070,8 +8228,8 @@ static void DrawPlayerInitialInventoryArea(int element) 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; @@ -8116,8 +8274,8 @@ static void DrawEnvelopeTextArea(int envelope_nr) 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; @@ -8135,8 +8293,8 @@ static int PrintElementDescriptionFromFile(char *filename, int start_line) 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; @@ -8220,8 +8378,8 @@ static void DrawPropertiesInfo() 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; @@ -8740,10 +8898,9 @@ static void DrawPropertiesConfig() 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); } } @@ -8811,13 +8968,12 @@ static void DrawEditorElementAnimation(int x, int y) 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]; @@ -8858,9 +9014,6 @@ static void DrawEditorElementName(int x, int y, int element) 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 */ @@ -8895,16 +9048,18 @@ static void DrawPropertiesWindow() 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();