]> granicus.if.org Git - nethack/commitdiff
fix #H4237 - color ignored for X11 text map
authorPatR <rankin@nethack.org>
Tue, 9 Feb 2016 03:01:26 +0000 (19:01 -0800)
committerPatR <rankin@nethack.org>
Tue, 9 Feb 2016 03:01:26 +0000 (19:01 -0800)
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.

doc/fixes36.1
win/X11/winmap.c

index 47120a06d205f0b2b09c6cc031bf3ecc7b58e48b..7a2467d09868a465b3cf20ad91027a06abc91ef1 100644 (file)
@@ -179,8 +179,7 @@ X11: enable a scroll bar 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 getline text entry widget display a bigger text entry area
-unix: add CHECK_PLNAME-option to sysconf to make WIZARDS, EXPLORERS, and
-       SHELLERS check player name instead of user's login name
+X11: color didn't work when the map was displayed as text rather than tiles
 
 
 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: compile-time option to output escape codes for tile data hints
 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
index 93f5dd6c3710d3e0fd6925e28f3660fa3ade3795..f089a5da29c5d71b1d548276cfbb2ed9e0524dd3 100644 (file)
@@ -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                                 */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -102,6 +102,7 @@ int bkglyph UNUSED;
         int color, och;
         unsigned special;
 #ifdef TEXTCOLOR
+        int colordif;
         register unsigned char *co_ptr;
 #endif
 
@@ -116,24 +117,22 @@ int bkglyph UNUSED;
 
         /* Only update if we need to. */
         ch_ptr = &map_info->text_map.text[y][x];
-
-#ifdef TEXTCOLOR
-        co_ptr = &map_info->text_map.colors[y][x];
-        if (*ch_ptr != ch || *co_ptr != color)
-#else
-        if (*ch_ptr != ch)
-#endif
-        {
+        if (*ch_ptr != ch) {
             *ch_ptr = ch;
+            if (!map_info->is_tile)
+                update_bbox = TRUE;
+        }
 #ifdef TEXTCOLOR
-            if ((special & MG_PET) && iflags.hilite_pet)
-                color += CLR_MAX;
-            if ((special & MG_OBJPILE) && iflags.hilite_pile)
-            *co_ptr = color;
-#endif
+        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 */
@@ -844,7 +843,8 @@ Font font;
     set_color_gc(CLR_BRIGHT_CYAN, XtNbright_cyan);
     set_color_gc(CLR_WHITE, XtNwhite);
 #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);
 #endif
 }
@@ -943,17 +943,17 @@ struct xwindow *wp;
 
     map_all_stone(map_info);
     (void) memset((genericptr_t) map_info->text_map.text, ' ',
-                  sizeof(map_info->text_map.text));
+                  sizeof map_info->text_map.text);
 #ifdef TEXTCOLOR
     (void) memset((genericptr_t) map_info->text_map.colors, NO_COLOR,
-                  sizeof(map_info->text_map.colors));
+                  sizeof map_info->text_map.colors);
 #endif
 
     /* force a full update */
     (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,
-                  sizeof(map_info->t_stop));
+                  sizeof map_info->t_stop);
     display_map_window(wp);
 }
 
@@ -978,8 +978,8 @@ struct xwindow *wp;
 #ifdef VERBOSE
     printf("Font information:\n");
     printf("fid = %ld, direction = %d\n", fs->fid, fs->direction);
-    printf("first = %d, last = %d\n", fs->min_char_or_byte2,
-           fs->max_char_or_byte2);
+    printf("first = %d, last = %d\n",
+           fs->min_char_or_byte2, fs->max_char_or_byte2);
     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",
            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.descent, fs->max_bounds.attributes);
     printf("per_char = 0x%lx\n", (unsigned long) fs->per_char);
-    printf("Text: (max) width = %d, height = %d\n", text_map->square_width,
-           text_map->square_height);
+    printf("Text: (max) width = %d, height = %d\n",
+           text_map->square_width, text_map->square_height);
 #endif
 
     if (fs->min_bounds.width != fs->max_bounds.width)
@@ -1002,9 +1002,9 @@ struct xwindow *wp;
  * keyhit buffer
  */
 #define INBUF_SIZE 64
-int inbuf[INBUF_SIZE];
-int incount = 0;
-int inptr = 0; /* points to valid data */
+static int inbuf[INBUF_SIZE];
+static int incount = 0;
+static int inptr = 0; /* points to valid data */
 
 /*
  * Keyboard and button event handler for map window.
@@ -1249,8 +1249,8 @@ boolean inverted;
     }
 
 #ifdef VERBOSE_UPDATE
-    printf("update: [0x%x] %d %d %d %d\n", (int) wp->w, start_row, stop_row,
-           start_col, stop_col);
+    printf("update: [0x%x] %d %d %d %d\n",
+           (int) wp->w, start_row, stop_row, start_col, stop_col);
 #endif
     win_start_row = start_row;
     win_start_col = start_col;
@@ -1273,8 +1273,8 @@ boolean inverted;
                 src_y = (tile / TILES_PER_ROW) * tile_height;
                 XCopyArea(dpy, tile_pixmap, XtWindow(wp->w),
                           tile_map->black_gc, /* no grapics_expose */
-                          src_x, src_y, tile_width, tile_height, dest_x,
-                          dest_y);
+                          src_x, src_y, tile_width, tile_height,
+                          dest_x, dest_y);
 
                 if (glyph_is_pet(glyph) && iflags.hilite_pet) {
                     /* draw pet annotation (a heart) */
@@ -1412,10 +1412,8 @@ Dimension cols, rows;
     }
 
     num_args = 0;
-    XtSetArg(args[num_args], XtNwidth, wp->pixel_width);
-    num_args++;
-    XtSetArg(args[num_args], XtNheight, wp->pixel_height);
-    num_args++;
+    XtSetArg(args[num_args], XtNwidth, wp->pixel_width); num_args++;
+    XtSetArg(args[num_args], XtNheight, wp->pixel_height); 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 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
     (void) memset((genericptr_t) text_map->colors, NO_COLOR,
-                  sizeof(text_map->colors));
+                  sizeof text_map->colors);
 #endif
 
     get_char_info(wp);