X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Feditor.c;h=828ebd7fd9987128d896279f0636d60d51720582;hp=632810d3f2b3fd854475aeb5e39cb12177983d3e;hb=6f5b701331e07bdd3e02eeb61f66bfa14d5b530f;hpb=1c428c3e9e9625ec4a0fbec9129138baf3cf8a63 diff --git a/src/editor.c b/src/editor.c index 632810d3..828ebd7f 100644 --- a/src/editor.c +++ b/src/editor.c @@ -69,7 +69,6 @@ #define ED_GADGET_TINY_DISTANCE (editor.gadget.tiny_spacing) #define ED_GADGET_LINE_DISTANCE (editor.gadget.line_spacing) #define ED_GADGET_TEXT_DISTANCE (editor.gadget.text_spacing) -#define ED_GADGET_TAB_DISTANCE (editor.gadget.tab_spacing) #define ED_TAB_BAR_HEIGHT (editor.gadget.separator_line.height) #define ED_DRAWINGAREA_TEXT_DISTANCE (ED_GADGET_TEXT_DISTANCE + \ ED_DRAWINGAREA_BORDER_SIZE) @@ -80,7 +79,7 @@ #define IMG_BORDER_2 IMG_EDITOR_ELEMENT_BORDER_INPUT #define ED_ELEMENT_BORDER (graphic_info[IMG_BORDER_1].border_size) #define ED_DRAWINGAREA_BORDER_SIZE (graphic_info[IMG_BORDER_2].border_size) -#define ED_DRAWINGAREA_TILE_SIZE (graphic_info[IMG_BORDER_2].tile_size) +#define ED_DRAWINGAREA_TILE_SIZE (editor.drawingarea.tile_size) /* values for checkbutton gadgets */ #define ED_CHECKBUTTON_XSIZE (graphic_info[IMG_EDITOR_CHECKBOX].width) @@ -89,25 +88,31 @@ #define ED_TABBUTTON_XSIZE (graphic_info[IMG_EDITOR_TABBUTTON].width) #define ED_TABBUTTON_YSIZE (graphic_info[IMG_EDITOR_TABBUTTON].height) -#define ED_LEVEL_SETTINGS_TABS_XPOS (editor.level_settings.tabs.x) -#define ED_LEVEL_SETTINGS_TABS_YPOS (editor.level_settings.tabs.y) -#define ED_ELEMENT_SETTINGS_TABS_XPOS (editor.element_settings.tabs.x) -#define ED_ELEMENT_SETTINGS_TABS_YPOS (editor.element_settings.tabs.y) +#define ED_LEVEL_SETTINGS_TABS_X (editor.settings.tabs.x) +#define ED_LEVEL_SETTINGS_TABS_Y (editor.settings.tabs.y) +#define ED_ELEMENT_SETTINGS_TABS_X (editor.settings.tabs.x) +#define ED_ELEMENT_SETTINGS_TABS_Y (editor.settings.tabs.y + \ + editor.settings.tabs.yoffset2) -#define ED_LEVEL_SETTINGS_XSTART (ED_LEVEL_SETTINGS_TABS_XPOS) -#define ED_LEVEL_SETTINGS_YSTART (ED_LEVEL_SETTINGS_TABS_YPOS + \ +#define ED_SETTINGS_TABS_XOFFSET (editor.settings.tabs.draw_xoffset) +#define ED_SETTINGS_TABS_YOFFSET (editor.settings.tabs.draw_yoffset) + +#define ED_LEVEL_SETTINGS_XSTART (ED_LEVEL_SETTINGS_TABS_X + \ + ED_SETTINGS_TABS_XOFFSET) +#define ED_LEVEL_SETTINGS_YSTART (ED_LEVEL_SETTINGS_TABS_Y + \ ED_TABBUTTON_YSIZE + \ ED_GADGET_TINY_DISTANCE + \ ED_TAB_BAR_HEIGHT + \ - ED_GADGET_TAB_DISTANCE + \ + ED_SETTINGS_TABS_YOFFSET + \ getFontHeight(FONT_TEXT_1) + \ ED_GADGET_TEXT_DISTANCE) -#define ED_ELEMENT_SETTINGS_XSTART (ED_ELEMENT_SETTINGS_TABS_XPOS) -#define ED_ELEMENT_SETTINGS_YSTART (ED_ELEMENT_SETTINGS_TABS_YPOS + \ +#define ED_ELEMENT_SETTINGS_XSTART (ED_ELEMENT_SETTINGS_TABS_X + \ + ED_SETTINGS_TABS_XOFFSET) +#define ED_ELEMENT_SETTINGS_YSTART (ED_ELEMENT_SETTINGS_TABS_Y + \ ED_TABBUTTON_YSIZE + \ ED_GADGET_TINY_DISTANCE + \ ED_TAB_BAR_HEIGHT + \ - ED_GADGET_TAB_DISTANCE) + ED_SETTINGS_TABS_YOFFSET) #define ED_SETTINGS_XOFFSET (ED_CHECKBUTTON_XSIZE + \ ED_GADGET_TEXT_DISTANCE) @@ -164,11 +169,11 @@ ED_POS_TO_ELEMENT_SETTINGS_Y(n) : (n)) #define ED_TAB_SETTINGS_X(n) (IS_POS_LEVEL_SETTINGS(n) ? \ - ED_LEVEL_SETTINGS_TABS_XPOS : \ - ED_ELEMENT_SETTINGS_TABS_XPOS) + ED_LEVEL_SETTINGS_TABS_X : \ + ED_ELEMENT_SETTINGS_TABS_X) #define ED_TAB_SETTINGS_Y(n) (IS_POS_LEVEL_SETTINGS(n) ? \ - ED_LEVEL_SETTINGS_TABS_YPOS : \ - ED_ELEMENT_SETTINGS_TABS_YPOS) + ED_LEVEL_SETTINGS_TABS_Y : \ + ED_ELEMENT_SETTINGS_TABS_Y) #define ED_SETTINGS_XOFF(n) (5 * ((n) % 4) * \ ED_DRAWINGAREA_TILE_SIZE) @@ -1050,7 +1055,7 @@ static struct { IMG_EDITOR_BUTTON_GFX_ZOOM_LEVEL, GADGET_ID_ZOOM, &editor.button.zoom_level, GD_TYPE_NORMAL_BUTTON, - "zoom level tile size", '-' + "zoom level tile size", '+' }, { IMG_EDITOR_BUTTON_GFX_ROTATE_RIGHT, GADGET_ID_WRAP_RIGHT, @@ -3419,10 +3424,6 @@ static int new_element3 = EL_SAND; #define BUTTON_ELEMENT(button) ((button) == 1 ? new_element1 : \ (button) == 2 ? new_element2 : \ (button) == 3 ? new_element3 : EL_EMPTY) -#define BUTTON_STEPSIZE(button) ((button) == 1 ? 1 : \ - (button) == 2 ? 5 : \ - (button) == 3 ? 10 : \ - (button)) /* forward declaration for internal use */ static void ModifyEditorCounterValue(int, int); @@ -5216,9 +5217,9 @@ void PrintEditorElementList() int cascade_element_show = EL_CASCADE_INACTIVE(cascade_element); char *headline = element_info[cascade_element_show].editor_description; - printf_line_with_prefix("# ", "-", 77); - printf("# %s\n", headline); - printf_line_with_prefix("# ", "-", 77); + PrintLineWithPrefix("# ", "-", 77); + Print("# %s\n", headline); + PrintLineWithPrefix("# ", "-", 77); } for (j = 0; j < *editor_elements_info[i].headline_list_size; j++) @@ -5228,21 +5229,21 @@ void PrintEditorElementList() if (IS_EDITOR_CASCADE(element)) element = EL_CHAR_MINUS; - printf("# %s\n", element_info[element].token_name); + Print("# %s\n", element_info[element].token_name); } if (j > 0) - printf("#\n"); + Print("#\n"); for (j = 0; j < *editor_elements_info[i].element_list_size; j++) { int element = (*editor_elements_info[i].element_list)[j]; - printf("# %s\n", element_info[element].token_name); + Print("# %s\n", element_info[element].token_name); } if (j > 0) - printf("#\n"); + Print("#\n"); } } @@ -5844,8 +5845,12 @@ static void CreateTextInputGadgets() int xoffset = element_border + TILEX + element_border + 3 * border_size; int yoffset = element_border + (TILEY - font_height) / 2; - x = editor.element_settings.element.x + xoffset - border_size; - y = editor.element_settings.element.y + yoffset - border_size; + x = (editor.settings.element_name.x != -1 ? + editor.settings.element_name.x : + editor.settings.element_graphic.x + xoffset) - border_size; + y = (editor.settings.element_name.y != -1 ? + editor.settings.element_name.y : + editor.settings.element_graphic.y + yoffset) - border_size; } else { @@ -7607,25 +7612,23 @@ void InitZoomLevelSettings() MAX_ED_FIELDY = getMaxEdFieldY(FALSE); } -static boolean playfield_area_changed = FALSE; - void DrawLevelEd() { - StopAnimation(); + int fade_mask = REDRAW_FIELD; CloseDoor(DOOR_CLOSE_ALL); - FadeOut(REDRAW_FIELD); - - /* needed after playing if editor playfield area has different size */ - ClearRectangle(drawto, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE); - /* needed if different viewport properties defined for editor */ ChangeViewportPropertiesIfNeeded(); - InitZoomLevelSettings(); + if (CheckIfGlobalBorderHasChanged()) + fade_mask = REDRAW_ALL; + + FadeOut(fade_mask); - playfield_area_changed = DrawingAreaChanged(); + ClearField(); + + InitZoomLevelSettings(); OpenDoor(DOOR_OPEN_1 | DOOR_OPEN_2 | DOOR_NO_DELAY); @@ -7685,7 +7688,9 @@ void DrawLevelEd() DrawEditModeWindow(); - FadeIn(playfield_area_changed ? REDRAW_ALL : REDRAW_FIELD); + DrawMaskedBorder(fade_mask); + + FadeIn(fade_mask); /* copy actual editor door content to door double buffer for OpenDoor() */ BlitBitmap(drawto, bitmap_db_door_1, DX, DY, DXSIZE, DYSIZE, 0, 0); @@ -8107,7 +8112,7 @@ static void DrawLevelInfoWindow() { char *text = "Global Settings"; int font_nr = FONT_TITLE_1; - struct MenuPosInfo *pos = &editor.level_settings.headline; + struct MenuPosInfo *pos = &editor.settings.headline; int sx = SX + ALIGNED_XPOS(pos->x, getTextWidth(text, font_nr), pos->align); int sy = SY + pos->y; @@ -8972,7 +8977,7 @@ static void DrawPropertiesConfig() if (tab_color != BLACK_PIXEL) /* black => transparent */ FillRectangle(drawto, SX + ED_ELEMENT_SETTINGS_X(0), - SY + ED_ELEMENT_SETTINGS_Y(14) - ED_GADGET_TAB_DISTANCE - + SY + ED_ELEMENT_SETTINGS_Y(14) - ED_SETTINGS_TABS_YOFFSET - ED_TAB_BAR_HEIGHT, getTabulatorBarWidth(), getTabulatorBarHeight(), tab_color); } @@ -9093,13 +9098,17 @@ static void DrawPropertiesWindow() int border_size = gd->border_size; int font_nr = FONT_TEXT_1; int font_height = getFontHeight(font_nr); - int x = editor.element_settings.element.x + element_border; - int y = editor.element_settings.element.y + element_border; int xoffset = TILEX + element_border + 3 * border_size; int yoffset = (TILEY - font_height) / 2; + int x1 = editor.settings.element_graphic.x + element_border; + int y1 = editor.settings.element_graphic.y + element_border; + int x2 = (editor.settings.element_name.x == -1 ? x1 + xoffset : + editor.settings.element_name.x); + int y2 = (editor.settings.element_name.y == -1 ? y1 + yoffset : + editor.settings.element_name.y); char *text = "Element Settings"; int font2_nr = FONT_TITLE_1; - struct MenuPosInfo *pos = &editor.element_settings.headline; + struct MenuPosInfo *pos = &editor.settings.headline; int sx = SX + ALIGNED_XPOS(pos->x, getTextWidth(text, font2_nr), pos->align); int sy = SY + pos->y; @@ -9137,9 +9146,9 @@ static void DrawPropertiesWindow() FrameCounter = 0; /* restart animation frame counter */ - DrawElementBorder(SX + x, SY + y, TILEX, TILEY, FALSE); - DrawEditorElementAnimation(SX + x, SY + y); - DrawEditorElementName(x + xoffset, y + yoffset, font_nr); + DrawElementBorder(SX + x1, SY + y1, TILEX, TILEY, FALSE); + DrawEditorElementAnimation(SX + x1, SY + y1); + DrawEditorElementName(x2, y2, font_nr); DrawPropertiesTabulatorGadgets(); @@ -10912,7 +10921,7 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) DrawFixedGraphicExt(drawto, gi->x + sx * TILEX, gi->y + sy * TILEY, - el2img(new_element), 0); + el2edimg(new_element), 0); if (id == GADGET_ID_CUSTOM_GRAPHIC) new_element = GFX_ELEMENT(new_element); @@ -11974,12 +11983,12 @@ void HandleLevelEditorKeyInput(Key key) ClickOnGadget(level_editor_gadget[GADGET_ID_SINGLE_ITEMS], button); else if (letter == 'U') ClickOnGadget(level_editor_gadget[GADGET_ID_UNDO], 3); - else if (key == KSYM_KP_Subtract) - ClickOnGadget(level_editor_gadget[GADGET_ID_ZOOM], 1); + else if (key == KSYM_KP_Subtract || letter == '-') + ClickOnGadget(level_editor_gadget[GADGET_ID_ZOOM], 3); else if (key == KSYM_KP_0 || letter == '0') ClickOnGadget(level_editor_gadget[GADGET_ID_ZOOM], 2); - else if (key == KSYM_KP_Add || letter == '+') - ClickOnGadget(level_editor_gadget[GADGET_ID_ZOOM], 3); + else if (key == KSYM_KP_Add) + ClickOnGadget(level_editor_gadget[GADGET_ID_ZOOM], 1); else if (key == KSYM_Return || key == KSYM_space || key == setup.shortcut.toggle_pause) @@ -11995,8 +12004,8 @@ void HandleLevelEditorKeyInput(Key key) void HandleLevelEditorIdle() { int element_border = graphic_info[IMG_EDITOR_ELEMENT_BORDER].border_size; - int x = editor.element_settings.element.x + element_border; - int y = editor.element_settings.element.y + element_border; + int x = editor.settings.element_graphic.x + element_border; + int y = editor.settings.element_graphic.y + element_border; static unsigned int action_delay = 0; unsigned int action_delay_value = GameFrameDelay; int i; @@ -12255,7 +12264,7 @@ void RequestExitLevelEditor(boolean ask_if_level_has_changed, game_status = GAME_MODE_MAIN; - DrawAndFadeInMainMenu(playfield_area_changed ? REDRAW_ALL : REDRAW_FIELD); + DrawMainMenu(); } else {