X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=23f12d071424b82cc6c5ebf0ac9100ed114d9938;hb=0d2143d53f76e2780260996fae2b9f3ce4f29913;hp=d4f68daa3eb0ae819ba586a9d5d139df3df580a6;hpb=cdf554f6229e6eafe2f19519adfe90c74e3449f2;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index d4f68daa..23f12d07 100644 --- a/src/editor.c +++ b/src/editor.c @@ -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 2 +#define ED_NUM_CHECKBUTTONS 3 + +#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" } }; @@ -829,7 +844,7 @@ int editor_element[] = EL_INVISIBLE_STEEL, EL_UNSICHTBAR, EL_SPEED_PILL, - EL_LEERRAUM, + EL_BLACK_ORB, EL_CHAR_A + ('S' - 'A'), EL_CHAR_A + ('O' - 'A'), @@ -933,80 +948,85 @@ int editor_element[] = EL_LEERRAUM, EL_LEERRAUM, - EL_CHAR_AUSRUF, - EL_CHAR_ZOLL, - EL_CHAR_DOLLAR, - EL_CHAR_PROZ, + EL_CHAR(' '), + EL_CHAR('!'), + EL_CHAR('"'), + EL_CHAR('#'), + + EL_CHAR('$'), + EL_CHAR('%'), + EL_CHAR('&'), + EL_CHAR('\''), + + EL_CHAR('('), + EL_CHAR(')'), + EL_CHAR('*'), + EL_CHAR('+'), + + EL_CHAR(','), + EL_CHAR('-'), + EL_CHAR('.'), + EL_CHAR('/'), + + EL_CHAR('0'), + EL_CHAR('1'), + EL_CHAR('2'), + EL_CHAR('3'), + + EL_CHAR('4'), + EL_CHAR('5'), + EL_CHAR('6'), + EL_CHAR('7'), + + EL_CHAR('8'), + EL_CHAR('9'), + EL_CHAR(':'), + EL_CHAR(';'), + + EL_CHAR('<'), + EL_CHAR('='), + EL_CHAR('>'), + EL_CHAR('?'), + + EL_CHAR('@'), + EL_CHAR('A'), + EL_CHAR('B'), + EL_CHAR('C'), + + EL_CHAR('D'), + EL_CHAR('E'), + EL_CHAR('F'), + EL_CHAR('G'), - EL_CHAR_APOSTR, - EL_CHAR_KLAMM1, - EL_CHAR_KLAMM2, - EL_CHAR_PLUS, + EL_CHAR('H'), + EL_CHAR('I'), + EL_CHAR('J'), + EL_CHAR('K'), - EL_CHAR_KOMMA, - EL_CHAR_MINUS, - EL_CHAR_PUNKT, - EL_CHAR_SLASH, - - EL_CHAR_0 + 0, - EL_CHAR_0 + 1, - EL_CHAR_0 + 2, - EL_CHAR_0 + 3, - - EL_CHAR_0 + 4, - EL_CHAR_0 + 5, - EL_CHAR_0 + 6, - EL_CHAR_0 + 7, - - EL_CHAR_0 + 8, - EL_CHAR_0 + 9, - EL_CHAR_DOPPEL, - EL_CHAR_SEMIKL, - - EL_CHAR_LT, - EL_CHAR_GLEICH, - EL_CHAR_GT, - EL_CHAR_FRAGE, - - EL_CHAR_AT, - EL_CHAR_A + 0, - EL_CHAR_A + 1, - EL_CHAR_A + 2, - - EL_CHAR_A + 3, - EL_CHAR_A + 4, - EL_CHAR_A + 5, - EL_CHAR_A + 6, - - EL_CHAR_A + 7, - EL_CHAR_A + 8, - EL_CHAR_A + 9, - EL_CHAR_A + 10, - - EL_CHAR_A + 11, - EL_CHAR_A + 12, - EL_CHAR_A + 13, - EL_CHAR_A + 14, - - EL_CHAR_A + 15, - EL_CHAR_A + 16, - EL_CHAR_A + 17, - EL_CHAR_A + 18, - - EL_CHAR_A + 19, - EL_CHAR_A + 20, - EL_CHAR_A + 21, - EL_CHAR_A + 22, - - EL_CHAR_A + 23, - EL_CHAR_A + 24, - EL_CHAR_A + 25, - EL_CHAR_AE, - - EL_CHAR_OE, - EL_CHAR_UE, - EL_CHAR_COPY, - EL_LEERRAUM + EL_CHAR('L'), + EL_CHAR('M'), + EL_CHAR('N'), + EL_CHAR('O'), + + EL_CHAR('P'), + EL_CHAR('Q'), + EL_CHAR('R'), + EL_CHAR('S'), + + EL_CHAR('T'), + EL_CHAR('U'), + EL_CHAR('V'), + EL_CHAR('W'), + + EL_CHAR('X'), + EL_CHAR('Y'), + EL_CHAR('Z'), + EL_CHAR('Ä'), + + EL_CHAR('Ö'), + EL_CHAR('Ü'), + EL_CHAR('^'), + EL_CHAR(' ') }; int elements_in_list = sizeof(editor_element)/sizeof(int); @@ -1530,7 +1550,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 +1560,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; ievent.type == GD_EVENT_PRESSED) @@ -3881,23 +3938,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; @@ -3959,11 +4016,17 @@ static void HandleDrawingAreaInfo(struct GadgetInfo *gi) break; } - DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, - "%s: %d, %d", infotext, - ABS(lx - start_lx) + 1, - ABS(ly - start_ly) + 1); + if (drawing_function == GADGET_ID_PICK_ELEMENT) + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + "%s: %d, %d", infotext, lx, ly); + else + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + "%s: %d, %d", infotext, + ABS(lx - start_lx) + 1, ABS(ly - start_ly) + 1); } + else if (drawing_function == GADGET_ID_PICK_ELEMENT) + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + "%s", element_info[Feld[lx][ly]]); else DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, "Level position: %d, %d", lx, ly); @@ -3986,6 +4049,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); }