if (pos_button != NULL) /* (x/y may be -1/-1 here) */
{
- if (pos_button->width == 0)
- pos_button->width = button_width;
- if (pos_button->height == 0)
- pos_button->height = button_height;
+ pos_button->width = button_width;
+ pos_button->height = button_height;
}
if (pos_text != NULL) /* (x/y may be -1/-1 here) */
/* calculate size for non-clickable text -- needed for text alignment */
boolean calculate_text_size = (pos_button == NULL && text != NULL);
+ if (pos_text->width == -1 || calculate_text_size)
+ pos_text->width = text_width;
+ if (pos_text->height == -1 || calculate_text_size)
+ pos_text->height = text_height;
+
if (visibleMenuPos(pos_button))
{
if (pos_text->x == -1)
pos_text->x = pos_button->x + pos_button->width;
if (pos_text->y == -1)
- pos_text->y = pos_button->y;
+ pos_text->y =
+ pos_button->y + (pos_button->height - pos_text->height) / 2;
}
-
- if (pos_text->width == -1 || calculate_text_size)
- pos_text->width = text_width;
- if (pos_text->height == -1 || calculate_text_size)
- pos_text->height = text_height;
}
if (pos_input != NULL) /* (x/y may be -1/-1 here) */
KeyboardAutoRepeatOn();
ActivateJoystick();
- SetDrawDeactivationMask(REDRAW_NONE);
- SetDrawBackgroundMask(REDRAW_FIELD);
-
audio.sound_deactivated = FALSE;
GetPlayerConfig();
LoadLevel(level_nr);
LoadScore(level_nr);
+ // set this after "ChangeViewportPropertiesIfNeeded()" (which may reset it)
+ SetDrawDeactivationMask(REDRAW_NONE);
+ SetDrawBackgroundMask(REDRAW_FIELD);
+
SetMainBackgroundImage(IMG_BACKGROUND_MAIN);
if (fade_mask == REDRAW_ALL)
if (game_status == GAME_MODE_INFO)
{
+ int fade_mask = (num_title_screens == 0 ? REDRAW_FIELD : REDRAW_ALL);
+
info_mode = INFO_MODE_MAIN;
- DrawInfoScreenExt(REDRAW_ALL, use_fading_main_menu);
+ DrawInfoScreenExt(fade_mask, use_fading_main_menu);
}
else /* default: return to main menu */
{
int ystart2 = mSY - SY + 150;
int ybottom = mSY - SY + SYSIZE - 20;
- SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
+ SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO);
FadeOut(REDRAW_FIELD);
{
struct TitleMessageInfo *tmi = &readme;
char *filename = getLevelSetInfoFilename();
+ char *title = "Level Set Information:";
+ int ystart1 = mSY - SY + 100;
+ int ybottom = mSY - SY + SYSIZE - 20;
+
+ if (filename == NULL)
+ {
+ DrawInfoScreen_NotAvailable(title, "No information for this level set.");
+
+ return;
+ }
+
+ SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
+
+ FadeOut(REDRAW_FIELD);
+
+ ClearField();
+ DrawHeadline();
+
+ DrawTextSCentered(ystart1, FONT_TEXT_1, title);
+
+ /* if x position set to "-1", automatically determine by playfield width */
+ if (tmi->x == -1)
+ tmi->x = SXSIZE / 2;
+
+ /* if y position set to "-1", use static default value */
+ if (tmi->y == -1)
+ tmi->y = 150;
+
+ /* if width set to "-1", automatically determine by playfield width */
+ if (tmi->width == -1)
+ tmi->width = SXSIZE - 2 * TILEX;
+
+ /* if height set to "-1", automatically determine by playfield height */
+ if (tmi->height == -1)
+ tmi->height = SYSIZE - 20 - tmi->y - 10;
/* if chars set to "-1", automatically determine by text and font width */
if (tmi->chars == -1)
else
tmi->height = tmi->lines * getFontHeight(tmi->font);
- SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
-
- FadeOut(REDRAW_FIELD);
-
- ClearField();
- DrawHeadline();
-
- DrawTextCentered(mSY + 100, FONT_TEXT_1, "Level Set Information:");
-
- if (filename != NULL)
- DrawTextFile(mSX + ALIGNED_TEXT_XPOS(tmi), mSY + ALIGNED_TEXT_YPOS(tmi),
- filename, tmi->font, tmi->chars, -1, tmi->lines, 0, -1,
- tmi->autowrap, tmi->centered, tmi->parse_comments);
- else
- DrawTextCentered(mSY + ALIGNED_TEXT_YPOS(tmi), FONT_TEXT_2,
- "No information for this level set.");
+ DrawTextFile(mSX + ALIGNED_TEXT_XPOS(tmi), mSY + ALIGNED_TEXT_YPOS(tmi),
+ filename, tmi->font, tmi->chars, -1, tmi->lines, 0, -1,
+ tmi->autowrap, tmi->centered, tmi->parse_comments);
- DrawTextCentered(mSY + SYSIZE - 20, FONT_TEXT_4,
- "Press any key or button for info menu");
+ DrawTextSCentered(ybottom, FONT_TEXT_4,
+ "Press any key or button for info menu");
FadeIn(REDRAW_FIELD);
}
static void DrawChooseTree(TreeInfo **ti_ptr)
{
+ int fade_mask = (DrawingAreaChanged() ? REDRAW_ALL : REDRAW_FIELD);
+
UnmapAllGadgets();
FreeScreenGadgets();
CloseDoor(DOOR_CLOSE_2);
- FadeOut(REDRAW_FIELD);
+ FadeOut(fade_mask);
ClearField();
HandleChooseTree(0, 0, 0, 0, MB_MENU_INITIALIZE, ti_ptr);
MapScreenTreeGadgets(*ti_ptr);
- FadeIn(REDRAW_FIELD);
+ FadeIn(fade_mask);
InitAnimation();
}
int scrollbar_xpos = mSX + SC_SCROLLBAR_XPOS + menu.scrollbar_xoffset;
/* correct scrollbar position if placed outside menu (playfield) area */
- if (scrollbar_xpos > SC_SCROLLBAR_XPOS)
- scrollbar_xpos = SC_SCROLLBAR_XPOS;
+ if (scrollbar_xpos > SX + SC_SCROLLBAR_XPOS)
+ scrollbar_xpos = SX + SC_SCROLLBAR_XPOS;
/* clear menu list area, but not title or scrollbar */
DrawBackground(mSX, mSY + MENU_SCREEN_START_YPOS * 32,
void DrawHallOfFame(int highlight_position)
{
+ int fade_mask = (DrawingAreaChanged() ? REDRAW_ALL : REDRAW_FIELD);
+
UnmapAllGadgets();
FadeSoundsAndMusic();
FadeSetEnterScreen();
- FadeOut(REDRAW_FIELD);
+ FadeOut(fade_mask);
InitAnimation();
HandleHallOfFame(highlight_position, 0, 0, 0, MB_MENU_INITIALIZE);
- FadeIn(REDRAW_FIELD);
+ FadeIn(fade_mask);
}
static void drawHallOfFameList(int first_entry, int highlight_position)
static void DrawSetupScreen_Generic()
{
+ int fade_mask = (DrawingAreaChanged() ? REDRAW_ALL : REDRAW_FIELD);
boolean redraw_all = FALSE;
char *title_string = NULL;
int i;
if (redraw_mask & REDRAW_ALL)
redraw_all = TRUE;
- FadeOut(REDRAW_FIELD);
+ FadeOut(fade_mask);
ClearField();
MapScreenGadgets(max_setup_info);
if (redraw_all)
- redraw_mask = REDRAW_ALL;
+ redraw_mask = fade_mask = REDRAW_ALL;
- FadeIn(redraw_mask);
+ FadeIn(fade_mask);
InitAnimation();
}
height = SC_SCROLLBUTTON_YSIZE;
/* correct scrollbar position if placed outside menu (playfield) area */
- if (x > SC_SCROLL_UP_XPOS)
- x = SC_SCROLL_UP_XPOS;
+ if (x > SX + SC_SCROLL_UP_XPOS)
+ x = SX + SC_SCROLL_UP_XPOS;
if (id == SCREEN_CTRL_ID_SCROLL_DOWN)
y = mSY + (SC_SCROLL_VERTICAL_YPOS +
height = scrollbar_info[i].height;
/* correct scrollbar position if placed outside menu (playfield) area */
- if (x > SC_SCROLL_VERTICAL_XPOS)
- x = SC_SCROLL_VERTICAL_XPOS;
+ if (x > SX + SC_SCROLL_VERTICAL_XPOS)
+ x = SX + SC_SCROLL_VERTICAL_XPOS;
if (id == SCREEN_CTRL_ID_SCROLL_VERTICAL)
height = (NUM_MENU_ENTRIES_ON_SCREEN - 2) * SC_SCROLLBUTTON_YSIZE;