add_menu follow-up, part 2 of interface adjustment

Remove menu_color support from the window port side of the interface.
The window port just has to honor the color parameter that was added
to the add_menu() interface definition in June 2022 commit
2770223d10, and let the core-side of
the interface handle things.

To that end, this does the following:

Removes the #define of add_menu() from include/winprocs.h and add a
real core-side add_menu() function to windows.c which acts as a
trampoline to the window port win_add_menu() function, while providing
a single location to adjust the parameters passed to the window port
function. get_menu_coloring() is now called in there.

Moves get_menu_coloring() from options.c into windows.c and makes it
static.

Removes all the calls to get_menu_coloring() from the tty, Qt, X11,
curses, and win32 interfaces and adjusts their code to simply honor
the color parameter in add_menu, similar to what the menu_headings
change from earlier today did.
This commit is contained in:
nhmall
2023-11-13 12:56:38 -05:00
parent 59a74a00fd
commit 4b79baa55b
11 changed files with 72 additions and 78 deletions

View File

@@ -293,12 +293,6 @@ void NetHackQtMenuWindow::AddMenu(int glyph, const ANY_P *identifier,
+ str.mid(bracket+2);
}
}
int mcolor, mattr;
if (::iflags.use_menu_color
&& get_menu_coloring(str.toLatin1().constData(), &mcolor, &mattr)) {
itemlist[itemcount].attr = mattr;
itemlist[itemcount].color = mcolor;
}
++itemcount;
if (glyph != NO_GLYPH)

View File

@@ -1314,11 +1314,9 @@ menu_create_entries(struct xwindow *wp, struct menu *curr_menu)
XtSetArg(args[num_args], nhStr(XtNborderWidth), 0); num_args++;
XtSetArg(args[num_args], nhStr(XtNvertDistance), 0); num_args++;
if (!iflags.use_menu_color || wp->menu_information->disable_mcolors
|| !get_menu_coloring(curr->str, &color, &attr)) {
attr = curr->attr;
attr = curr->attr;
if (!wp->menu_information->disable_mcolors)
color = curr->color;
}
if (color != NO_COLOR) {
if (attr != ATR_INVERSE)

View File

@@ -1176,7 +1176,6 @@ menu_display_page(
char *tmpstr;
boolean first_accel = TRUE;
int color = NO_COLOR, attr = A_NORMAL;
boolean menu_color = FALSE;
/* letters assigned to entries on current page */
if (selectors)
@@ -1281,19 +1280,15 @@ menu_display_page(
start_col += 2;
}
#endif
color = NONE;
menu_color = iflags.use_menu_color
&& get_menu_coloring(menu_item_ptr->str, &color, &attr);
if (menu_color) {
attr = curses_convert_attr(attr);
if (color != NONE || attr != A_NORMAL)
curses_menu_color_attr(win, color, attr, ON);
} else {
attr = menu_item_ptr->attr;
if (color != NO_COLOR)
color = menu_item_ptr->color;
if (color != NONE || attr != A_NORMAL)
curses_toggle_color_attr(win, color, attr, ON);
}
if (color == NO_COLOR)
color = NONE;
attr = menu_item_ptr->attr;
attr = curses_convert_attr(attr);
if (color != NONE || attr != A_NORMAL)
curses_menu_color_attr(win, color, attr, ON);
num_lines = curses_num_lines(menu_item_ptr->str, entry_cols);
for (count = 0; count < num_lines; count++) {
@@ -1306,12 +1301,8 @@ menu_display_page(
}
}
if (color != NONE || attr != A_NORMAL) {
if (menu_color)
curses_menu_color_attr(win, color, attr, OFF);
else
curses_toggle_color_attr(win, color, attr, OFF);
curses_menu_color_attr(win, color, attr, OFF);
}
menu_item_ptr = menu_item_ptr->next_item;
}

View File

@@ -375,8 +375,10 @@ curs_show_invt(WINDOW *win)
for (lineno = pi.rowoffset; lineno < pi.inuseindx; ++lineno) {
str = pi.array[lineno].invtxt;
accelerator = pi.array[lineno].letter;
attr = pi.array[lineno].c_attr;
attr = curses_convert_attr(pi.array[lineno].c_attr);
color = pi.array[lineno].color;
if (color == NO_COLOR)
color = NONE;
if (accelerator)
++item_count;
@@ -413,17 +415,9 @@ curs_show_invt(WINDOW *win)
stroffset = pi_article_skip(str); /* to skip "a "/"an "/"the " */
/* if/when scrolled right, invtxt for item lines gets shifted */
stroffset += pi.coloffset;
/* only perform menu coloring on item entries, not subtitles */
if (iflags.use_menu_color) {
get_menu_coloring(str, &color, (int *) &attr);
attr = curses_convert_attr(attr);
}
}
if (stroffset < strlen(str)) {
if (color == NO_COLOR)
color = NONE;
curses_menu_color_attr(win, color, attr, ON);
wprintw(win, "%.*s", available_width, str + stroffset);
curses_menu_color_attr(win, color, attr, OFF);

View File

@@ -1419,11 +1419,8 @@ process_menu_window(winid window, struct WinDesc *cw)
(void) putchar(' ');
++ttyDisplay->curx;
if (!iflags.use_menu_color
|| !get_menu_coloring(curr->str, &color, &attr)) {
attr = curr->attr;
color = curr->color;
}
attr = curr->attr;
color = curr->color;
/* which character to start attribute highlighting;
whole line for headers and such, after the selector

View File

@@ -991,9 +991,6 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
char *p, *p1;
int column;
int spacing = 0;
int color = NO_COLOR, attr;
boolean menucolr = FALSE;
double monitorScale = win10_monitor_scale(hWnd);
int tileXScaled = (int) (TILE_X * monitorScale);
int tileYScaled = (int) (TILE_Y * monitorScale);
@@ -1021,6 +1018,9 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
? menu_fg_color
: (COLORREF) GetSysColor(DEFAULT_COLOR_FG_MENU));
if (item->color != NO_COLOR)
(void) SetTextColor(lpdis->hDC, nhcolor_to_RGB(item->color));
GetTextMetrics(lpdis->hDC, &tm);
spacing = tm.tmAveCharWidth;
@@ -1058,15 +1058,6 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
if (item->accelerator != 0) {
buf[0] = item->accelerator;
buf[1] = '\x0';
if (iflags.use_menu_color
&& (menucolr = get_menu_coloring(item->str, &color, &attr))) {
cached_font * menu_font = mswin_get_font(NHW_MENU, attr, lpdis->hDC, FALSE);
SelectObject(lpdis->hDC, menu_font->hFont);
if (color != NO_COLOR)
SetTextColor(lpdis->hDC, nhcolor_to_RGB(color));
}
SetRect(&drawRect, x, lpdis->rcItem.top, lpdis->rcItem.right,
lpdis->rcItem.bottom);
DrawText(lpdis->hDC, NH_A2W(buf, wbuf, 2), 1, &drawRect,
@@ -1074,12 +1065,6 @@ onDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
}
x += tm.tmAveCharWidth + tm.tmOverhang + spacing;
} else {
/* heading */
if (iflags.use_menu_color) {
color = item->color;
if (color != NO_COLOR)
(void) SetTextColor(lpdis->hDC, nhcolor_to_RGB(color));
}
x += tileXScaled + tm.tmAveCharWidth + tm.tmOverhang + 2 * spacing;
}