Merge branch 'NetHack-3.6'
This commit is contained in:
+31
-20
@@ -135,7 +135,7 @@ curses_line_input_dialog(const char *prompt, char *answer, int buffer)
|
||||
curses_got_input();
|
||||
|
||||
if (buffer > (int) sizeof input)
|
||||
buffer = (int) sizeof input;
|
||||
buffer = (int) sizeof input;
|
||||
maxwidth = term_cols - 2;
|
||||
|
||||
if (iflags.window_inited) {
|
||||
@@ -264,7 +264,8 @@ curses_character_input_dialog(const char *prompt, const char *choices,
|
||||
any_choice = TRUE;
|
||||
}
|
||||
|
||||
prompt_width = (int) strlen(askstr);
|
||||
/* +1: room for a trailing space where the cursor will rest */
|
||||
prompt_width = (int) strlen(askstr) + 1;
|
||||
|
||||
if ((prompt_width + 2) > maxwidth) {
|
||||
prompt_height = curses_num_lines(askstr, maxwidth);
|
||||
@@ -284,11 +285,11 @@ curses_character_input_dialog(const char *prompt, const char *choices,
|
||||
/* TODO: add SUPPRESS_HISTORY flag, then after getting a response,
|
||||
append it and use put_msghistory() on combined prompt+answer */
|
||||
custompline(OVERRIDE_MSGTYPE, "%s", askstr);
|
||||
curs_set(1);
|
||||
}
|
||||
|
||||
/*curses_stupid_hack = 0; */
|
||||
|
||||
curs_set(1);
|
||||
while (1) {
|
||||
#ifdef PDCURSES
|
||||
answer = wgetch(message_window);
|
||||
@@ -342,6 +343,7 @@ curses_character_input_dialog(const char *prompt, const char *choices,
|
||||
if (choices != NULL && answer != '\0' && index(choices, answer))
|
||||
break;
|
||||
}
|
||||
curs_set(0);
|
||||
|
||||
if (iflags.wc_popup_dialog) {
|
||||
/* Kludge to make prompt visible after window is dismissed
|
||||
@@ -354,7 +356,6 @@ curses_character_input_dialog(const char *prompt, const char *choices,
|
||||
curses_destroy_win(askwin);
|
||||
} else {
|
||||
curses_clear_unhighlight_message_window();
|
||||
curs_set(0);
|
||||
}
|
||||
|
||||
return answer;
|
||||
@@ -388,7 +389,8 @@ curses_ext_cmd()
|
||||
getbegyx(extwin2, y0, x0);
|
||||
getmaxyx(extwin2, h, w);
|
||||
extwin = newwin(1, w - 2, y0 + 1, x0 + 1);
|
||||
if (w - 4 < maxlen) maxlen = w - 4;
|
||||
if (w - 4 < maxlen)
|
||||
maxlen = w - 4;
|
||||
} else {
|
||||
curses_get_window_xy(MESSAGE_WIN, &winx, &winy);
|
||||
curses_get_window_size(MESSAGE_WIN, &messageh, &messagew);
|
||||
@@ -985,14 +987,24 @@ menu_determine_pages(nhmenu *menu)
|
||||
static void
|
||||
menu_win_size(nhmenu *menu)
|
||||
{
|
||||
int width, height, maxwidth, maxheight, curentrywidth, lastline;
|
||||
int maxwidth, maxheight, curentrywidth, lastline;
|
||||
int maxentrywidth = (int) strlen(menu->prompt);
|
||||
int maxheaderwidth = 0;
|
||||
nhmenu_item *menu_item_ptr;
|
||||
|
||||
maxwidth = 38; /* Reasonable minimum usable width */
|
||||
if ((term_cols / 2) > maxwidth) {
|
||||
maxwidth = (term_cols / 2); /* Half the screen */
|
||||
if (program_state.gameover) {
|
||||
/* for final inventory disclosure, use full width */
|
||||
maxwidth = term_cols - 2;
|
||||
} else {
|
||||
/* this used to be 38, which is 80/2 - 2 (half a 'normal' sized
|
||||
screen minus room for a border box), but some data files
|
||||
have been manually formatted for 80 columns (usually limited
|
||||
to 78 but sometimes 79, rarely 80 itself) and using a value
|
||||
less that 40 meant that a full line would wrap twice:
|
||||
1..38, 39..76, and 77..80 */
|
||||
maxwidth = 40; /* Reasonable minimum usable width */
|
||||
if ((term_cols / 2) > maxwidth)
|
||||
maxwidth = (term_cols / 2); /* Half the screen */
|
||||
}
|
||||
maxheight = menu_max_height();
|
||||
|
||||
@@ -1017,7 +1029,8 @@ menu_win_size(nhmenu *menu)
|
||||
}
|
||||
}
|
||||
|
||||
/* If widest entry is smaller than maxwidth, reduce maxwidth accordingly */
|
||||
/* If widest entry is smaller than maxwidth, reduce maxwidth
|
||||
accordingly (but not too far; minimum width will be applied below) */
|
||||
if (maxentrywidth < maxwidth) {
|
||||
maxwidth = maxentrywidth;
|
||||
}
|
||||
@@ -1032,8 +1045,6 @@ menu_win_size(nhmenu *menu)
|
||||
maxwidth = term_cols - 2;
|
||||
}
|
||||
|
||||
width = maxwidth;
|
||||
|
||||
/* Possibly reduce height if only 1 page */
|
||||
if (!menu_is_multipage(menu, maxwidth, maxheight)) {
|
||||
menu_item_ptr = menu->entries;
|
||||
@@ -1047,16 +1058,16 @@ menu_win_size(nhmenu *menu)
|
||||
if (lastline < maxheight) {
|
||||
maxheight = lastline;
|
||||
}
|
||||
} else { /* If multipage, make sure we have enough width for page footer */
|
||||
|
||||
if (width < 20) {
|
||||
width = 20;
|
||||
}
|
||||
}
|
||||
|
||||
height = maxheight;
|
||||
menu->width = width;
|
||||
menu->height = height;
|
||||
/* avoid a tiny popup window; when it's shown over the endings of
|
||||
old messsages rather than over the map, it is fairly easy for
|
||||
the player to overlook it, particularly when walking around and
|
||||
stepping on a pile of 2 items; also, multi-page menus need enough
|
||||
room for "(Page M of N) => " even if all entries are narrower
|
||||
than that; we specify same minimum width even when single page */
|
||||
menu->width = max(maxwidth, 25);
|
||||
menu->height = max(maxheight, 5);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user