fix #H4237 - color ignored for X11 text map
Color was only being tracked for locations that had the pile of objects flag set. And hilite_pile made a monster on a pile take on the color of the top object of the pile. This restores the tracking of color for the whole map, and makes highlighted piles be drawn in inverse like highligted pets. The drawing routine doesn't know the difference (but could tell, if necessary, by testing whether the glyph is an object or a monster). Also, variables 'inbuf', 'inptr', and 'incount' were global; limit their scope to winmap.c.
This commit is contained in:
+6
-2
@@ -179,8 +179,7 @@ X11: enable a scroll bar in menu windows
|
|||||||
X11: support pre-selected entries in menu windows
|
X11: support pre-selected entries in menu windows
|
||||||
X11: make the extended command menu be easier to use and look a little nicer
|
X11: make the extended command menu be easier to use and look a little nicer
|
||||||
X11: make the getline text entry widget display a bigger text entry area
|
X11: make the getline text entry widget display a bigger text entry area
|
||||||
unix: add CHECK_PLNAME-option to sysconf to make WIZARDS, EXPLORERS, and
|
X11: color didn't work when the map was displayed as text rather than tiles
|
||||||
SHELLERS check player name instead of user's login name
|
|
||||||
|
|
||||||
|
|
||||||
General New Features
|
General New Features
|
||||||
@@ -215,6 +214,11 @@ Platform- and/or Interface-Specific New Features
|
|||||||
tty: menu_overlay -option to clear screen and align menus to left
|
tty: menu_overlay -option to clear screen and align menus to left
|
||||||
tty: compile-time option to output escape codes for tile data hints
|
tty: compile-time option to output escape codes for tile data hints
|
||||||
unix: compile-time option MSGHANDLER to pass messages to external program
|
unix: compile-time option MSGHANDLER to pass messages to external program
|
||||||
|
unix: add CHECK_PLNAME-option to sysconf to make WIZARDS, EXPLORERS, and
|
||||||
|
SHELLERS check player's character name instead of login name
|
||||||
|
X11: new NetHack*highlight_prompt resource to control whether the persistent
|
||||||
|
prompt line between the map and message windows for the NetHack*slow
|
||||||
|
configuration will be highlighted when it's expecting input
|
||||||
|
|
||||||
|
|
||||||
NetHack Community Patches (or Variation) Included
|
NetHack Community Patches (or Variation) Included
|
||||||
|
|||||||
+35
-37
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 winmap.c $NHDT-Date: 1454977918 2016/02/09 00:31:58 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.27 $ */
|
/* NetHack 3.6 winmap.c $NHDT-Date: 1454986883 2016/02/09 03:01:23 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.28 $ */
|
||||||
/* Copyright (c) Dean Luick, 1992 */
|
/* Copyright (c) Dean Luick, 1992 */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -102,6 +102,7 @@ int bkglyph UNUSED;
|
|||||||
int color, och;
|
int color, och;
|
||||||
unsigned special;
|
unsigned special;
|
||||||
#ifdef TEXTCOLOR
|
#ifdef TEXTCOLOR
|
||||||
|
int colordif;
|
||||||
register unsigned char *co_ptr;
|
register unsigned char *co_ptr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -116,24 +117,22 @@ int bkglyph UNUSED;
|
|||||||
|
|
||||||
/* Only update if we need to. */
|
/* Only update if we need to. */
|
||||||
ch_ptr = &map_info->text_map.text[y][x];
|
ch_ptr = &map_info->text_map.text[y][x];
|
||||||
|
if (*ch_ptr != ch) {
|
||||||
#ifdef TEXTCOLOR
|
|
||||||
co_ptr = &map_info->text_map.colors[y][x];
|
|
||||||
if (*ch_ptr != ch || *co_ptr != color)
|
|
||||||
#else
|
|
||||||
if (*ch_ptr != ch)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
*ch_ptr = ch;
|
*ch_ptr = ch;
|
||||||
#ifdef TEXTCOLOR
|
|
||||||
if ((special & MG_PET) && iflags.hilite_pet)
|
|
||||||
color += CLR_MAX;
|
|
||||||
if ((special & MG_OBJPILE) && iflags.hilite_pile)
|
|
||||||
*co_ptr = color;
|
|
||||||
#endif
|
|
||||||
if (!map_info->is_tile)
|
if (!map_info->is_tile)
|
||||||
update_bbox = TRUE;
|
update_bbox = TRUE;
|
||||||
}
|
}
|
||||||
|
#ifdef TEXTCOLOR
|
||||||
|
co_ptr = &map_info->text_map.colors[y][x];
|
||||||
|
colordif = (((special & MG_PET) && iflags.hilite_pet)
|
||||||
|
|| ((special & MG_OBJPILE) && iflags.hilite_pile))
|
||||||
|
? CLR_MAX : 0;
|
||||||
|
if (*co_ptr != (uchar) (color + colordif)) {
|
||||||
|
*co_ptr = (uchar) (color + colordif);
|
||||||
|
if (!map_info->is_tile)
|
||||||
|
update_bbox = TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (update_bbox) { /* update row bbox */
|
if (update_bbox) { /* update row bbox */
|
||||||
@@ -844,7 +843,8 @@ Font font;
|
|||||||
set_color_gc(CLR_BRIGHT_CYAN, XtNbright_cyan);
|
set_color_gc(CLR_BRIGHT_CYAN, XtNbright_cyan);
|
||||||
set_color_gc(CLR_WHITE, XtNwhite);
|
set_color_gc(CLR_WHITE, XtNwhite);
|
||||||
#else
|
#else
|
||||||
set_gc(wp->w, font, XtNforeground, bgpixel, &map_info->text_map.copy_gc,
|
set_gc(wp->w, font, XtNforeground, bgpixel,
|
||||||
|
&map_info->text_map.copy_gc,
|
||||||
&map_info->text_map.inv_copy_gc);
|
&map_info->text_map.inv_copy_gc);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -943,17 +943,17 @@ struct xwindow *wp;
|
|||||||
|
|
||||||
map_all_stone(map_info);
|
map_all_stone(map_info);
|
||||||
(void) memset((genericptr_t) map_info->text_map.text, ' ',
|
(void) memset((genericptr_t) map_info->text_map.text, ' ',
|
||||||
sizeof(map_info->text_map.text));
|
sizeof map_info->text_map.text);
|
||||||
#ifdef TEXTCOLOR
|
#ifdef TEXTCOLOR
|
||||||
(void) memset((genericptr_t) map_info->text_map.colors, NO_COLOR,
|
(void) memset((genericptr_t) map_info->text_map.colors, NO_COLOR,
|
||||||
sizeof(map_info->text_map.colors));
|
sizeof map_info->text_map.colors);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* force a full update */
|
/* force a full update */
|
||||||
(void) memset((genericptr_t) map_info->t_start, (char) 0,
|
(void) memset((genericptr_t) map_info->t_start, (char) 0,
|
||||||
sizeof(map_info->t_start));
|
sizeof map_info->t_start);
|
||||||
(void) memset((genericptr_t) map_info->t_stop, (char) COLNO - 1,
|
(void) memset((genericptr_t) map_info->t_stop, (char) COLNO - 1,
|
||||||
sizeof(map_info->t_stop));
|
sizeof map_info->t_stop);
|
||||||
display_map_window(wp);
|
display_map_window(wp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -978,8 +978,8 @@ struct xwindow *wp;
|
|||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
printf("Font information:\n");
|
printf("Font information:\n");
|
||||||
printf("fid = %ld, direction = %d\n", fs->fid, fs->direction);
|
printf("fid = %ld, direction = %d\n", fs->fid, fs->direction);
|
||||||
printf("first = %d, last = %d\n", fs->min_char_or_byte2,
|
printf("first = %d, last = %d\n",
|
||||||
fs->max_char_or_byte2);
|
fs->min_char_or_byte2, fs->max_char_or_byte2);
|
||||||
printf("all chars exist? %s\n", fs->all_chars_exist ? "yes" : "no");
|
printf("all chars exist? %s\n", fs->all_chars_exist ? "yes" : "no");
|
||||||
printf("min_bounds:lb=%d rb=%d width=%d asc=%d des=%d attr=%d\n",
|
printf("min_bounds:lb=%d rb=%d width=%d asc=%d des=%d attr=%d\n",
|
||||||
fs->min_bounds.lbearing, fs->min_bounds.rbearing,
|
fs->min_bounds.lbearing, fs->min_bounds.rbearing,
|
||||||
@@ -990,8 +990,8 @@ struct xwindow *wp;
|
|||||||
fs->max_bounds.width, fs->max_bounds.ascent,
|
fs->max_bounds.width, fs->max_bounds.ascent,
|
||||||
fs->max_bounds.descent, fs->max_bounds.attributes);
|
fs->max_bounds.descent, fs->max_bounds.attributes);
|
||||||
printf("per_char = 0x%lx\n", (unsigned long) fs->per_char);
|
printf("per_char = 0x%lx\n", (unsigned long) fs->per_char);
|
||||||
printf("Text: (max) width = %d, height = %d\n", text_map->square_width,
|
printf("Text: (max) width = %d, height = %d\n",
|
||||||
text_map->square_height);
|
text_map->square_width, text_map->square_height);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (fs->min_bounds.width != fs->max_bounds.width)
|
if (fs->min_bounds.width != fs->max_bounds.width)
|
||||||
@@ -1002,9 +1002,9 @@ struct xwindow *wp;
|
|||||||
* keyhit buffer
|
* keyhit buffer
|
||||||
*/
|
*/
|
||||||
#define INBUF_SIZE 64
|
#define INBUF_SIZE 64
|
||||||
int inbuf[INBUF_SIZE];
|
static int inbuf[INBUF_SIZE];
|
||||||
int incount = 0;
|
static int incount = 0;
|
||||||
int inptr = 0; /* points to valid data */
|
static int inptr = 0; /* points to valid data */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Keyboard and button event handler for map window.
|
* Keyboard and button event handler for map window.
|
||||||
@@ -1249,8 +1249,8 @@ boolean inverted;
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef VERBOSE_UPDATE
|
#ifdef VERBOSE_UPDATE
|
||||||
printf("update: [0x%x] %d %d %d %d\n", (int) wp->w, start_row, stop_row,
|
printf("update: [0x%x] %d %d %d %d\n",
|
||||||
start_col, stop_col);
|
(int) wp->w, start_row, stop_row, start_col, stop_col);
|
||||||
#endif
|
#endif
|
||||||
win_start_row = start_row;
|
win_start_row = start_row;
|
||||||
win_start_col = start_col;
|
win_start_col = start_col;
|
||||||
@@ -1273,8 +1273,8 @@ boolean inverted;
|
|||||||
src_y = (tile / TILES_PER_ROW) * tile_height;
|
src_y = (tile / TILES_PER_ROW) * tile_height;
|
||||||
XCopyArea(dpy, tile_pixmap, XtWindow(wp->w),
|
XCopyArea(dpy, tile_pixmap, XtWindow(wp->w),
|
||||||
tile_map->black_gc, /* no grapics_expose */
|
tile_map->black_gc, /* no grapics_expose */
|
||||||
src_x, src_y, tile_width, tile_height, dest_x,
|
src_x, src_y, tile_width, tile_height,
|
||||||
dest_y);
|
dest_x, dest_y);
|
||||||
|
|
||||||
if (glyph_is_pet(glyph) && iflags.hilite_pet) {
|
if (glyph_is_pet(glyph) && iflags.hilite_pet) {
|
||||||
/* draw pet annotation (a heart) */
|
/* draw pet annotation (a heart) */
|
||||||
@@ -1412,10 +1412,8 @@ Dimension cols, rows;
|
|||||||
}
|
}
|
||||||
|
|
||||||
num_args = 0;
|
num_args = 0;
|
||||||
XtSetArg(args[num_args], XtNwidth, wp->pixel_width);
|
XtSetArg(args[num_args], XtNwidth, wp->pixel_width); num_args++;
|
||||||
num_args++;
|
XtSetArg(args[num_args], XtNheight, wp->pixel_height); num_args++;
|
||||||
XtSetArg(args[num_args], XtNheight, wp->pixel_height);
|
|
||||||
num_args++;
|
|
||||||
XtSetValues(wp->w, args, num_args);
|
XtSetValues(wp->w, args, num_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1426,10 +1424,10 @@ struct xwindow *wp;
|
|||||||
struct map_info_t *map_info = wp->map_information;
|
struct map_info_t *map_info = wp->map_information;
|
||||||
struct text_map_info_t *text_map = &map_info->text_map;
|
struct text_map_info_t *text_map = &map_info->text_map;
|
||||||
|
|
||||||
(void) memset((genericptr_t) text_map->text, ' ', sizeof(text_map->text));
|
(void) memset((genericptr_t) text_map->text, ' ', sizeof text_map->text);
|
||||||
#ifdef TEXTCOLOR
|
#ifdef TEXTCOLOR
|
||||||
(void) memset((genericptr_t) text_map->colors, NO_COLOR,
|
(void) memset((genericptr_t) text_map->colors, NO_COLOR,
|
||||||
sizeof(text_map->colors));
|
sizeof text_map->colors);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
get_char_info(wp);
|
get_char_info(wp);
|
||||||
|
|||||||
Reference in New Issue
Block a user