X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=5c8b67bf3a1ab61e92a009fa2cc253b922cae46e;hb=d298323ec00b208324df23aecff55a808efce26a;hp=78864c6d34806f4aabb1649b010c71e28707c7f7;hpb=9b469d4246eb3b346aadba8ec3fe20db88340606;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 78864c6d..5c8b67bf 100644 --- a/src/editor.c +++ b/src/editor.c @@ -346,8 +346,12 @@ #define INFOTEXT_XSIZE SXSIZE #define INFOTEXT_YSIZE getFontHeight(INFOTEXT_FONT) #define INFOTEXT_YSIZE_FULL (INFOTEXT_YSIZE + ED_GADGET_SMALL_DISTANCE) -#define INFOTEXT_XPOS SX -#define INFOTEXT_YPOS (SY + SYSIZE - INFOTEXT_YSIZE) +#define INFOTEXT_X (editor.settings.tooltip.x) +#define INFOTEXT_Y (editor.settings.tooltip.y) +#define INFOTEXT_XY_REDEFINED (INFOTEXT_X != -1 || INFOTEXT_Y != -1) +#define INFOTEXT_XPOS SX + (INFOTEXT_XY_REDEFINED ? INFOTEXT_X : 0) +#define INFOTEXT_YPOS SY + (INFOTEXT_XY_REDEFINED ? INFOTEXT_Y : \ + SYSIZE - INFOTEXT_YSIZE) /* @@ -1297,7 +1301,6 @@ static struct ElementInfo custom_element; static char levelset_name[MAX_LEVEL_NAME_LEN + 1]; static char levelset_author[MAX_LEVEL_AUTHOR_LEN + 1]; static int levelset_num_levels = 100; -static int levelset_first_level_nr = 1; static int levelset_save_mode = LEVELSET_SAVE_MODE_UPDATE; static struct @@ -5689,6 +5692,10 @@ static void ReinitializeElementList() num_editor_elements += num_editor_el_empty; } + else + { + num_editor_el_empty = 0; + } editor_elements = checked_malloc(num_editor_elements * sizeof(int)); @@ -7591,7 +7598,7 @@ static void ModifyLevelInfoForSavingIntoPersonalLevelSet(char *former_name) } if (level_nr > leveldir_current->last_level) - UpdateUserLevelSet(getLoginName(), NULL, NULL, level_nr + 9, -1); + UpdateUserLevelSet(getLoginName(), NULL, NULL, level_nr + 9); // else: allow the save even if annotation failed @@ -8201,7 +8208,8 @@ static int getMaxEdFieldX(boolean has_scrollbar) static int getMaxEdFieldY(boolean has_scrollbar) { - int infotext_height = INFOTEXT_YSIZE_FULL; + int infotext_height = (IN_PIX_FIELD(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY) ? + INFOTEXT_YSIZE_FULL : 0); int scrollbar_height = (has_scrollbar ? ED_SCROLLBUTTON_YSIZE : 0); int sysize = SYSIZE - scrollbar_height - infotext_height; int max_ed_fieldy = sysize / ed_tilesize; @@ -8230,19 +8238,38 @@ static void InitLevelSetInfo() snprintf(levelset_author, MAX_LEVEL_AUTHOR_LEN + 1, "%s", leveldir_current->author); - levelset_num_levels = leveldir_current->levels; - levelset_first_level_nr = leveldir_current->first_level; + levelset_num_levels = leveldir_current->levels; levelset_save_mode = LEVELSET_SAVE_MODE_UPDATE; } +static void ChangeEditorToLevelSet(char *levelset_subdir) +{ + leveldir_current = getTreeInfoFromIdentifier(leveldir_first, levelset_subdir); + + // the previous level set might have used custom artwork + ReloadCustomArtwork(0); + + LoadLevelSetup_SeriesInfo(); + + SaveLevelSetup_LastSeries(); + SaveLevelSetup_SeriesInfo(); + + TapeErase(); + + LoadLevel(level_nr); + LoadScore(level_nr); + + DrawLevelEd(); +} + void DrawLevelEd() { int fade_mask = REDRAW_FIELD; FadeSoundsAndMusic(); - if (CheckIfGlobalBorderHasChanged()) + if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged()) fade_mask = REDRAW_ALL; FadeOut(fade_mask); @@ -8255,7 +8282,7 @@ void DrawLevelEd() InitZoomLevelSettings(-1); InitLevelSetInfo(); - OpenDoor(DOOR_OPEN_1 | DOOR_OPEN_2 | DOOR_NO_DELAY); + SetDoorState(DOOR_OPEN_1 | DOOR_OPEN_2); #if DEBUG CheckElementDescriptions(); @@ -12620,8 +12647,7 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi) if (UpdateUserLevelSet(levelset_subdir, levelset_name, levelset_author, - levelset_num_levels, - levelset_first_level_nr)) + levelset_num_levels)) { Request("Level set updated!", REQ_CONFIRM); } @@ -12635,17 +12661,17 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi) if (CreateUserLevelSet(levelset_subdir, levelset_name, levelset_author, - levelset_num_levels, - levelset_first_level_nr)) + levelset_num_levels)) { Request("New level set created!", REQ_CONFIRM); + + AddUserLevelSetToLevelInfo(levelset_subdir); + ChangeEditorToLevelSet(levelset_subdir); } else { Request("Creating new level set failed!", REQ_CONFIRM); } - - DrawLevelInfoWindow(); // update (increment) level set directory name } } else if (type_id == ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE &&