X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=82e049596d20baa54ed2d5c4eb2e36bcef659d3a;hb=6b83db8bee17d70c4e89dc3e3b703b7032aa5f27;hp=99997f269aa444611a4671f2aaa0acd98ad426be;hpb=6db563bee95da1c0a791bc5f425edae162628c13;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 99997f26..82e04959 100644 --- a/src/editor.c +++ b/src/editor.c @@ -95,7 +95,7 @@ ED_ELEMENTLIST_BUTTONS_VERT) /* values for the setting windows */ -#define ED_SETTINGS_XPOS (MINI_TILEX + 8 * 1) +#define ED_SETTINGS_XPOS (MINI_TILEX + 8) #define ED_SETTINGS2_XPOS MINI_TILEX #define ED_SETTINGS_YPOS MINI_TILEY #define ED_SETTINGS2_YPOS (ED_SETTINGS_YPOS + 12 * TILEY - 2) @@ -104,7 +104,7 @@ #define ED_COUNT_ELEM_SCORE_XPOS ED_SETTINGS_XPOS #define ED_COUNT_ELEM_SCORE_YPOS (14 * MINI_TILEY) #define ED_COUNT_ELEM_CONTENT_XPOS ED_SETTINGS_XPOS -#define ED_COUNT_ELEM_CONTENT_YPOS (17 * MINI_TILEY) +#define ED_COUNT_ELEM_CONTENT_YPOS (19 * MINI_TILEY) #define ED_COUNTER_YSTART (ED_SETTINGS_YPOS + 2 * TILEY) #define ED_COUNTER_YDISTANCE (3 * MINI_TILEY) @@ -118,7 +118,7 @@ /* values for element content drawing areas */ #define ED_AREA_ELEM_CONTENT_XPOS ( 2 * MINI_TILEX) -#define ED_AREA_ELEM_CONTENT_YPOS (20 * MINI_TILEY) +#define ED_AREA_ELEM_CONTENT_YPOS (22 * MINI_TILEY) /* values for random placement background drawing area */ #define ED_AREA_RANDOM_BACKGROUND_XPOS (29 * MINI_TILEX) @@ -154,9 +154,9 @@ #define ED_CHECKBUTTON_XSIZE ED_BUTTON_COUNT_XSIZE #define ED_CHECKBUTTON_YSIZE ED_BUTTON_COUNT_YSIZE #define ED_CHECKBUTTON_UNCHECKED_XPOS ED_BUTTON_MINUS_XPOS -#define ED_CHECKBUTTON_UNCHECKED_YPOS (ED_BUTTON_MINUS_YPOS + 22) #define ED_CHECKBUTTON_CHECKED_XPOS ED_BUTTON_PLUS_XPOS -#define ED_CHECKBUTTON_CHECKED_YPOS (ED_BUTTON_PLUS_YPOS + 22) +#define ED_CHECKBUTTON_YPOS (ED_BUTTON_MINUS_YPOS + 22) +#define ED_STICKYBUTTON_YPOS (ED_BUTTON_MINUS_YPOS + 88) #define GADGET_ID_NONE -1 @@ -247,11 +247,12 @@ #define GADGET_ID_RANDOM_QUANTITY 107 #define GADGET_ID_RANDOM_RESTRICTED 108 #define GADGET_ID_DOUBLE_SPEED 109 +#define GADGET_ID_STICK_ELEMENT 110 /* another drawing area for random placement */ -#define GADGET_ID_RANDOM_BACKGROUND 110 +#define GADGET_ID_RANDOM_BACKGROUND 111 -#define NUM_EDITOR_GADGETS 111 +#define NUM_EDITOR_GADGETS 112 /* radio button numbers */ #define RADIO_NR_NONE 0 @@ -268,24 +269,24 @@ #define ED_COUNTER_ID_LEVEL_TIMESCORE 6 #define ED_COUNTER_ID_LEVEL_RANDOM 7 +#define ED_NUM_COUNTERBUTTONS 8 + #define ED_COUNTER_ID_LEVEL_FIRST ED_COUNTER_ID_LEVEL_XSIZE #define ED_COUNTER_ID_LEVEL_LAST ED_COUNTER_ID_LEVEL_RANDOM -#define ED_NUM_COUNTERBUTTONS 8 - /* values for scrollbutton gadgets */ -#define ED_SCROLLBUTTON_AREA_UP 0 -#define ED_SCROLLBUTTON_AREA_DOWN 1 -#define ED_SCROLLBUTTON_AREA_LEFT 2 -#define ED_SCROLLBUTTON_AREA_RIGHT 3 -#define ED_SCROLLBUTTON_LIST_UP 4 -#define ED_SCROLLBUTTON_LIST_DOWN 5 +#define ED_SCROLLBUTTON_ID_AREA_UP 0 +#define ED_SCROLLBUTTON_ID_AREA_DOWN 1 +#define ED_SCROLLBUTTON_ID_AREA_LEFT 2 +#define ED_SCROLLBUTTON_ID_AREA_RIGHT 3 +#define ED_SCROLLBUTTON_ID_LIST_UP 4 +#define ED_SCROLLBUTTON_ID_LIST_DOWN 5 #define ED_NUM_SCROLLBUTTONS 6 /* values for scrollbar gadgets */ -#define ED_SCROLLBAR_HORIZONTAL 0 -#define ED_SCROLLBAR_VERTICAL 1 +#define ED_SCROLLBAR_ID_HORIZONTAL 0 +#define ED_SCROLLBAR_ID_VERTICAL 1 #define ED_NUM_SCROLLBARS 2 @@ -293,23 +294,30 @@ #define ED_TEXTINPUT_ID_LEVEL_NAME 0 #define ED_TEXTINPUT_ID_LEVEL_AUTHOR 1 +#define ED_NUM_TEXTINPUT 2 + #define ED_TEXTINPUT_ID_LEVEL_FIRST ED_TEXTINPUT_ID_LEVEL_NAME #define ED_TEXTINPUT_ID_LEVEL_LAST ED_TEXTINPUT_ID_LEVEL_AUTHOR -#define ED_NUM_TEXTINPUT 2 - /* values for checkbutton gadgets */ -#define ED_CHECKBUTTON_DOUBLE_SPEED 0 -#define ED_CHECKBUTTON_RANDOM_RESTRICTED 1 +#define ED_CHECKBUTTON_ID_DOUBLE_SPEED 0 +#define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED 1 +#define ED_CHECKBUTTON_ID_STICK_ELEMENT 2 + +#define ED_NUM_CHECKBUTTONS 3 -#define ED_NUM_CHECKBUTTONS 2 +#define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_DOUBLE_SPEED +#define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED /* values for radiobutton gadgets */ -#define ED_RADIOBUTTON_PERCENTAGE 0 -#define ED_RADIOBUTTON_QUANTITY 1 +#define ED_RADIOBUTTON_ID_PERCENTAGE 0 +#define ED_RADIOBUTTON_ID_QUANTITY 1 #define ED_NUM_RADIOBUTTONS 2 +#define ED_RADIOBUTTON_ID_LEVEL_FIRST ED_RADIOBUTTON_ID_PERCENTAGE +#define ED_RADIOBUTTON_ID_LEVEL_LAST ED_RADIOBUTTON_ID_QUANTITY + /* values for CopyLevelToUndoBuffer() */ #define UNDO_IMMEDIATE 0 #define UNDO_ACCUMULATE 1 @@ -544,6 +552,7 @@ static int random_placement_value = 10; static int random_placement_method = RANDOM_USE_QUANTITY; static int random_placement_background_element = EL_ERDREICH; static boolean random_placement_background_restricted = FALSE; +static boolean stick_element_properties_window = FALSE; static struct { @@ -590,6 +599,12 @@ static struct GADGET_ID_RANDOM_RESTRICTED, &random_placement_background_restricted, "restrict random placement to", "set random placement restriction" + }, + { + ED_SETTINGS_XPOS, ED_COUNTER_YPOS(4), + GADGET_ID_STICK_ELEMENT, + &stick_element_properties_window, + "stick window to edit content", "stick window to edit content" } }; @@ -1221,7 +1236,7 @@ static void CreateControlButtons() deco_ypos = (ED_ELEMENTLIST_YSIZE - MINI_TILEY) / 2; gi = CreateGadget(GDI_CUSTOM_ID, id, - GDI_INFO_TEXT, "choose element", + GDI_INFO_TEXT, element_info[editor_element[i]], GDI_X, DX + gd_xoffset, GDI_Y, DY + gd_yoffset, GDI_WIDTH, ED_ELEMENTLIST_XSIZE, @@ -1530,7 +1545,7 @@ static void CreateCheckbuttonGadgets() Pixmap gd_pixmap = pix[PIX_DOOR]; struct GadgetInfo *gi; unsigned long event_mask; - int gd_x1, gd_x2, gd_x3, gd_x4, gd_y1, gd_y2; + int gd_x1, gd_x2, gd_x3, gd_x4, gd_y; boolean checked; int i; @@ -1540,8 +1555,7 @@ static void CreateCheckbuttonGadgets() gd_x2 = DOOR_GFX_PAGEX3 + ED_CHECKBUTTON_UNCHECKED_XPOS; gd_x3 = DOOR_GFX_PAGEX4 + ED_CHECKBUTTON_CHECKED_XPOS; gd_x4 = DOOR_GFX_PAGEX3 + ED_CHECKBUTTON_CHECKED_XPOS; - gd_y1 = DOOR_GFX_PAGEY1 + ED_CHECKBUTTON_UNCHECKED_YPOS; - gd_y2 = DOOR_GFX_PAGEY1 + ED_CHECKBUTTON_CHECKED_YPOS; + gd_y = DOOR_GFX_PAGEY1 + ED_CHECKBUTTON_YPOS; for (i=0; ideco.design; + struct GadgetDesign *gd = &gi->deco.design; + int element = editor_element[element_shift + i]; UnmapGadget(gi); - getMiniGraphicSource(el2gfx(editor_element[element_shift + i]), - &design->pixmap, &design->x, &design->y); + getMiniGraphicSource(el2gfx(element), &gd->pixmap, &gd->x, &gd->y); + ModifyGadget(gi, GDI_INFO_TEXT, element_info[element], GDI_END); MapGadget(gi); } break; @@ -3722,21 +3760,25 @@ static void HandleControlButtons(struct GadgetInfo *gi) break; case GADGET_ID_RANDOM_PERCENTAGE: - *radiobutton_info[ED_RADIOBUTTON_PERCENTAGE].value = - radiobutton_info[ED_RADIOBUTTON_PERCENTAGE].checked_value; + *radiobutton_info[ED_RADIOBUTTON_ID_PERCENTAGE].value = + radiobutton_info[ED_RADIOBUTTON_ID_PERCENTAGE].checked_value; break; case GADGET_ID_RANDOM_QUANTITY: - *radiobutton_info[ED_RADIOBUTTON_QUANTITY].value = - radiobutton_info[ED_RADIOBUTTON_QUANTITY].checked_value; + *radiobutton_info[ED_RADIOBUTTON_ID_QUANTITY].value = + radiobutton_info[ED_RADIOBUTTON_ID_QUANTITY].checked_value; break; case GADGET_ID_RANDOM_RESTRICTED: - *checkbutton_info[ED_CHECKBUTTON_RANDOM_RESTRICTED].value ^= TRUE; + *checkbutton_info[ED_CHECKBUTTON_ID_RANDOM_RESTRICTED].value ^= TRUE; break; case GADGET_ID_DOUBLE_SPEED: - *checkbutton_info[ED_CHECKBUTTON_DOUBLE_SPEED].value ^= TRUE; + *checkbutton_info[ED_CHECKBUTTON_ID_DOUBLE_SPEED].value ^= TRUE; + break; + + case GADGET_ID_STICK_ELEMENT: + *checkbutton_info[ED_CHECKBUTTON_ID_STICK_ELEMENT].value ^= TRUE; break; default: @@ -3748,7 +3790,8 @@ static void HandleControlButtons(struct GadgetInfo *gi) PickDrawingElement(button, new_element); - if (!HAS_CONTENT(properties_element)) + if (!HAS_CONTENT(properties_element) || + !stick_element_properties_window) { properties_element = new_element; if (edit_mode == ED_MODE_PROPERTIES) @@ -3880,23 +3923,23 @@ static void HandleDrawingAreaInfo(struct GadgetInfo *gi) int sy = gi->event.y; int lx = sx + level_xpos; int ly = sy + level_ypos; + int min_sx = 0, min_sy = 0; + int max_sx = gi->drawing.area_xsize - 1; + int max_sy = gi->drawing.area_ysize - 1; ClearEditorGadgetInfoText(); + /* make sure to stay inside drawing area boundaries */ + sx = (sx < min_sx ? min_sx : sx > max_sx ? max_sx : sx); + sy = (sy < min_sy ? min_sy : sy > max_sy ? max_sy : sy); + if (id == GADGET_ID_DRAWING_LEVEL) { if (button_status) { - int min_sx = 0, min_sy = 0; - int max_sx = gi->drawing.area_xsize - 1; - int max_sy = gi->drawing.area_ysize - 1; int min_lx = 0, min_ly = 0; int max_lx = lev_fieldx - 1, max_ly = lev_fieldy - 1; - /* make sure to stay inside drawing area boundaries */ - sx = (sx < min_sx ? min_sx : sx > max_sx ? max_sx : sx); - sy = (sy < min_sy ? min_sy : sy > max_sy ? max_sy : sy); - /* get positions inside level field */ lx = sx + level_xpos; ly = sy + level_ypos; @@ -3985,6 +4028,6 @@ static void HandleDrawingAreaInfo(struct GadgetInfo *gi) "Random placement background"); else DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, - "Cruncher %d content: %d, %d", + "Content area %d position: %d, %d", id - GADGET_ID_ELEM_CONTENT_0 + 1, sx, sy); }