X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=fe3291faea48c4958ac3fdfda7554a5b736e6020;hb=2eb48ed1142be3334211d4e7740d64bd7cdbf55c;hp=0c8bde1b9e04ef02429fdcd9027d9813b2338375;hpb=57bbc28786e5cc6c531b53ef5e29512b1e0b73e8;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 0c8bde1b..fe3291fa 100644 --- a/src/tools.c +++ b/src/tools.c @@ -349,6 +349,7 @@ void DrawTextExt(Drawable d, GC gc, int x, int y, { int font_width, font_height, font_start; int font_pixmap; + boolean print_inverse = FALSE; if (font_size != FS_SMALL && font_size != FS_BIG) font_size = FS_SMALL; @@ -364,10 +365,16 @@ void DrawTextExt(Drawable d, GC gc, int x, int y, font_start = (font_type * (font_size == FS_BIG ? FONT1_YSIZE : FONT2_YSIZE) * FONT_LINES_PER_FONT); - while(*text) + while (*text) { char c = *text++; + if (c == '~' && font_size == FS_SMALL && font_type <= FC_YELLOW) + { + print_inverse = TRUE; + continue; + } + if (c >= 'a' && c <= 'z') c = 'A' + (c - 'a'); else if (c == 'ä' || c == 'Ä') @@ -378,10 +385,27 @@ void DrawTextExt(Drawable d, GC gc, int x, int y, c = 93; if (c >= 32 && c <= 95) - XCopyArea(display, pix[font_pixmap], d, gc, - ((c - 32) % FONT_CHARS_PER_LINE) * font_width, - ((c - 32) / FONT_CHARS_PER_LINE) * font_height + font_start, - font_width, font_height, x, y); + { + int src_x = ((c - 32) % FONT_CHARS_PER_LINE) * font_width; + int src_y = ((c - 32) / FONT_CHARS_PER_LINE) * font_height + font_start; + int dest_x = x, dest_y = y; + + if (print_inverse) + { + XCopyArea(display, pix[font_pixmap], d, gc, + FONT_CHARS_PER_LINE * font_width, + 3 * font_height + font_start, + font_width, font_height, x, y); + + XSetClipOrigin(display, clip_gc[font_pixmap], + dest_x - src_x, dest_y - src_y); + XCopyArea(display, pix[font_pixmap], drawto, clip_gc[font_pixmap], + 0, 0, font_width, font_height, dest_x, dest_y); + } + else + XCopyArea(display, pix[font_pixmap], d, gc, + src_x, src_y, font_width, font_height, dest_x, dest_y); + } x += font_width; } @@ -1370,10 +1394,8 @@ void DrawMiniLevel(int scroll_x, int scroll_y) { int x,y; - ClearWindow(); - - for(x=0; x<2*SCR_FIELDX; x++) - for(y=0; y<2*SCR_FIELDY; y++) + for(x=0; x