ENHANCED_SYMBOLS: store all CLR_ colors specially
The 0x1000000 bit (NH_BASIC_COLOR bit) was used to mark CLR_BLACK when storing it in u->ucolor. Now, all of the basic CLR_* colors are stored that way. The NH_BASIC_COLOR bit indicates that the value in u->ucolor is not an rgb value, rather it is one of the 0-15 basic NetHack colors. The window-ports need to strip the NH_BASIC_COLOR bit off before using it for color changes.
This commit is contained in:
+6
-1
@@ -587,7 +587,12 @@ void NetHackQtMapViewport::PrintGlyph(int x, int y,
|
||||
&& glyphinfo->gm.u->utf8str) {
|
||||
Glyphttychar(x, y) = glyphinfo->gm.u->utf32ch;
|
||||
if (glyphinfo->gm.u->ucolor != 0) {
|
||||
Glyphcolor(x, y) = glyphinfo->gm.u->ucolor | 0x80000000;
|
||||
if ((glyphinfo->gm.u->ucolor & NH_BASIC_COLOR) == 0) {
|
||||
Glyphcolor(x, y) = glyphinfo->gm.u->ucolor | 0x80000000;
|
||||
} else {
|
||||
Glyphcolor(x, y) =
|
||||
(uint32) glyphinfo->gm.u->ucolor & ~NH_BASIC_COLOR;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
+12
-5
@@ -133,6 +133,12 @@ X11_print_glyph(
|
||||
color = glyphinfo->gm.sym.color;
|
||||
special = glyphinfo->gm.glyphflags;
|
||||
ch = glyph_char(glyphinfo);
|
||||
#ifdef ENHANCED_SYMBOLS
|
||||
if (SYMHANDLING(H_UTF8) && glyphinfo->gm.u != NULL
|
||||
&& glyphinfo->gm.u->ucolor != 0
|
||||
&& (glyphinfo->gm.u->ucolor & NH_BASIC_COLOR) != 0)
|
||||
color = glyphinfo->gm.u->ucolor & ~NH_BASIC_COLOR;
|
||||
#endif
|
||||
|
||||
if (special != map_info->tile_map.glyphs[y][x].glyphflags) {
|
||||
map_info->tile_map.glyphs[y][x].glyphflags = special;
|
||||
@@ -156,11 +162,12 @@ X11_print_glyph(
|
||||
color += colordif;
|
||||
#ifdef ENHANCED_SYMBOLS
|
||||
if (SYMHANDLING(H_UTF8) && glyphinfo->gm.u != NULL
|
||||
&& glyphinfo->gm.u->ucolor != 0) {
|
||||
color = glyphinfo->gm.u->ucolor | 0x80000000;
|
||||
if (colordif != 0) {
|
||||
color |= 0x40000000;
|
||||
}
|
||||
&& glyphinfo->gm.u->ucolor != 0
|
||||
&& (glyphinfo->gm.u->ucolor & NH_BASIC_COLOR) == 0) {
|
||||
color = glyphinfo->gm.u->ucolor | 0x80000000;
|
||||
if (colordif != 0) {
|
||||
color |= 0x40000000;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (*co_ptr != color) {
|
||||
|
||||
+7
-3
@@ -3844,9 +3844,13 @@ tty_print_glyph(
|
||||
&& !calling_from_update_inventory
|
||||
#endif
|
||||
&& glyphinfo->gm.u && glyphinfo->gm.u->ucolor) {
|
||||
term_start_24bitcolor(glyphinfo->gm.u);
|
||||
color24bit_on = TRUE;
|
||||
colordone = TRUE;
|
||||
if ((glyphinfo->gm.u->ucolor & NH_BASIC_COLOR) == 0) {
|
||||
term_start_24bitcolor(glyphinfo->gm.u);
|
||||
color24bit_on = TRUE;
|
||||
colordone = TRUE;
|
||||
} else {
|
||||
color = glyphinfo->gm.u->ucolor & ~NH_BASIC_COLOR;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (!colordone) {
|
||||
|
||||
+9
-4
@@ -978,10 +978,15 @@ paintGlyph(PNHMapWindow data, int i, int j, RECT * rect)
|
||||
&& glyphinfo->gm.u->utf8str) {
|
||||
ch = glyphinfo->gm.u->utf32ch;
|
||||
if (glyphinfo->gm.u->ucolor != 0) {
|
||||
rgbcolor = RGB(
|
||||
(glyphinfo->gm.u->ucolor >> 16) & 0xFF,
|
||||
(glyphinfo->gm.u->ucolor >> 8) & 0xFF,
|
||||
(glyphinfo->gm.u->ucolor >> 0) & 0xFF);
|
||||
if ((glyphinfo->gm.u->ucolor & NH_BASIC_COLOR) == 0) {
|
||||
rgbcolor = RGB(
|
||||
(glyphinfo->gm.u->ucolor >> 16) & 0xFF,
|
||||
(glyphinfo->gm.u->ucolor >> 8) & 0xFF,
|
||||
(glyphinfo->gm.u->ucolor >> 0) & 0xFF);
|
||||
} else {
|
||||
color = (int) (glyphinfo->gm.u->ucolor & ~NH_BASIC_COLOR);
|
||||
rgbcolor = nhcolor_to_RGB(color);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user