width of curses menus
Menus with wide header or separator lines were rendered wide enough to avoid wrapping those lines, but ones with narrow header/separators and wide selectable entries were limited to half the display even though lots of lines that would fit with full width were being wrapped. Change the latter behavior. Menus are right justified with the edge of the map when narrower than it, left justified otherwise, and if the display is wider than the map, they'll extend beyond its right edge. (That hasn't actually changed; it's just that left-justification is more likely now that menus will be wide enough to show wide inventory lines without wrapping.) Get rid of my ridiculous hack to force wider menu for the 'symset' and 'roguesymset' sub-menus of 'O' since it's no longer useful. There's still room for improvement. If any lines need to be wrapped despite using the full width, or perhaps are just a lot wider than most of the entries, menu width could be narrowed to just enough for 'normal' lines to fit so that one or two really long entries don't distort the menu. That's a bit more complicated than I want to deal with right now. [If implemented, it would be relevant for tty too.]
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 options.c $NHDT-Date: 1572303730 2019/10/28 23:02:10 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.383 $ */
|
||||
/* NetHack 3.6 options.c $NHDT-Date: 1573505739 2019/11/11 20:55:39 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.386 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Michael Allison, 2008. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -5432,44 +5432,6 @@ boolean setinitial, setfromfile;
|
||||
tmpwin = create_nhwindow(NHW_MENU);
|
||||
start_menu(tmpwin);
|
||||
any = zeroany;
|
||||
#ifdef CURSES_GRAPHICS /* this ought to be handled within curses... */
|
||||
/*
|
||||
* Symbol sets are formatted in two columns, "name description",
|
||||
* on selectable lines. curses bases menu width on the length
|
||||
* of non-selectable lines (main header, separators if present,
|
||||
* with trailing spaces ignored) and defaults to half the map.
|
||||
* Without something like this separator (shown after the menu
|
||||
* title and a blank line which follows that) to force a wider
|
||||
* menu, entries with long descriptions wrap. That would be
|
||||
* ok if wrapping operated on the same two columns, but the
|
||||
* menu doesn't know anything about those and the description
|
||||
* is wrapping into the next line's name column, making long
|
||||
* descriptions--and menus containing them--hard to read.
|
||||
*/
|
||||
if (WINDOWPORT("curses")) {
|
||||
char tmp1[BUFSZ], tmp2[BUFSZ], bigbuf[BUFSZ + 1 + BUFSZ];
|
||||
|
||||
/* 4: room for space+letter+paren+space, fake selector;
|
||||
2: added to 'biggest' when constructing 'fmtstr';
|
||||
1: space between symset name+2 and symset description */
|
||||
if (4 + biggest + 2 + 1 > (int) sizeof tmp1 - 1)
|
||||
biggest = (int) sizeof tmp1 - 1 - (4 + 2 + 1);
|
||||
(void) memset((genericptr_t) tmp1, '-', biggest);
|
||||
tmp1[biggest] = '\0';
|
||||
if (big_desc > (int) sizeof tmp2 - 1)
|
||||
big_desc = (int) sizeof tmp2 - 1;
|
||||
(void) memset((genericptr_t) tmp2, '-', big_desc);
|
||||
tmp2[big_desc] = '\0';
|
||||
Sprintf(bigbuf, "%4s", "");
|
||||
Sprintf(eos(bigbuf), fmtstr, tmp1, tmp2);
|
||||
bigbuf[BUFSZ - 1] = '\0';
|
||||
any.a_int = 0;
|
||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
|
||||
bigbuf, MENU_UNSELECTED);
|
||||
}
|
||||
#else
|
||||
nhUse(big_desc);
|
||||
#endif
|
||||
any.a_int = 1; /* -1 + 2 [see 'if (sl->name) {' below]*/
|
||||
if (!symset_name)
|
||||
defindx = any.a_int;
|
||||
|
||||
Reference in New Issue
Block a user