From 75add713b14147fbd222c48504c4e797f3125286 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sun, 6 Apr 2003 22:55:37 +0200 Subject: [PATCH] rnd-20030406-2-src --- src/conftime.h | 2 +- src/libgame/gadgets.c | 20 ++++++++++++-------- src/libgame/system.h | 1 + src/libgame/text.c | 41 ++++++++++++----------------------------- 4 files changed, 26 insertions(+), 38 deletions(-) diff --git a/src/conftime.h b/src/conftime.h index 0f48dbfa..d03062df 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-04-06 02:20]" +#define COMPILE_DATE_STRING "[2003-04-06 22:55]" diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index 59413167..69108942 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -137,7 +137,7 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) { int i; char cursor_letter; - char cursor_string[3]; + char cursor_string[2]; char text[MAX_GADGET_TEXTSIZE + 1]; int font_type = gi->text.font_type; int font_width = getFontWidth(font_type); @@ -168,9 +168,8 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) font_type, BLIT_MASKED); cursor_letter = gi->text.value[gi->text.cursor_position]; - cursor_string[0] = '~'; - cursor_string[1] = (cursor_letter != '\0' ? cursor_letter : ' '); - cursor_string[2] = '\0'; + cursor_string[0] = (cursor_letter != '\0' ? cursor_letter : ' '); + cursor_string[1] = '\0'; SetInverseTextColor(gi->text.inverse_color); @@ -179,7 +178,7 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) DrawTextExt(drawto, gi->x + border + gi->text.cursor_position * font_width, gi->y + border, cursor_string, - font_type, BLIT_MASKED); + font_type, BLIT_INVERSE); } break; @@ -324,6 +323,8 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) /* selectbox text values */ for (i=0; i < gi->selectbox.num_values; i++) { + int mask_mode; + if (i == gi->selectbox.current_index) { FillRectangle(drawto, @@ -332,22 +333,25 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) gi->selectbox.width - 2 * border, font_height, gi->selectbox.inverse_color); - text[0] = '~'; - strncpy(&text[1], gi->selectbox.values[i], gi->selectbox.size); + strncpy(text, gi->selectbox.values[i], gi->selectbox.size); text[1 + gi->selectbox.size] = '\0'; SetInverseTextColor(gi->selectbox.inverse_color); + + mask_mode = BLIT_INVERSE; } else { strncpy(text, gi->selectbox.values[i], gi->selectbox.size); text[gi->selectbox.size] = '\0'; + + mask_mode = BLIT_MASKED; } DrawTextExt(drawto, gi->selectbox.x + border, gi->selectbox.y + border + i * font_height, text, - font_type, BLIT_MASKED); + font_type, mask_mode); } redraw_selectbox = TRUE; diff --git a/src/libgame/system.h b/src/libgame/system.h index 0474bc75..a73f8a46 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -42,6 +42,7 @@ #define BLIT_OPAQUE 0 #define BLIT_MASKED 1 +#define BLIT_INVERSE 2 #define FULLSCREEN_NOT_AVAILABLE FALSE #define FULLSCREEN_AVAILABLE TRUE diff --git a/src/libgame/text.c b/src/libgame/text.c index e440d217..2ba68ae8 100644 --- a/src/libgame/text.c +++ b/src/libgame/text.c @@ -27,7 +27,7 @@ static GC font_clip_gc = None; static void InitFontClipmasks() { - static boolean clipmasks_initialized = FALSE; + static int last_num_fonts = 0; XGCValues clip_gc_values; unsigned long clip_gc_valuemask; GC copy_clipmask_gc; @@ -36,28 +36,21 @@ static void InitFontClipmasks() if (gfx.num_fonts == 0 || gfx.font_bitmap_info[0].bitmap == NULL) return; - if (!clipmasks_initialized) - { - for (i=0; i < gfx.num_fonts; i++) - { - gfx.font_bitmap_info[i].clip_mask = NULL; - gfx.font_bitmap_info[i].last_num_chars = 0; - } - - clipmasks_initialized = TRUE; - } - - for (i=0; i < gfx.num_fonts; i++) + for (i=0; i < last_num_fonts; i++) { if (gfx.font_bitmap_info[i].clip_mask) + { for (j=0; j < gfx.font_bitmap_info[i].last_num_chars; j++) XFreePixmap(display, gfx.font_bitmap_info[i].clip_mask[j]); - free(gfx.font_bitmap_info[i].clip_mask); + free(gfx.font_bitmap_info[i].clip_mask); + } gfx.font_bitmap_info[i].clip_mask = NULL; gfx.font_bitmap_info[i].last_num_chars = 0; } + last_num_fonts = gfx.num_fonts; + if (font_clip_gc) XFreeGC(display, font_clip_gc); font_clip_gc = None; @@ -241,10 +234,9 @@ void DrawTextExt(DrawBuffer *dst_bitmap, int dst_x, int dst_y, char *text, struct FontBitmapInfo *font = &gfx.font_bitmap_info[font_bitmap_id]; int font_width = getFontWidth(font_nr); int font_height = getFontHeight(font_nr); - boolean print_inverse = FALSE; - boolean print_inverse_cursor = FALSE; Bitmap *src_bitmap; int src_x, src_y; + char *text_ptr = text; if (font->bitmap == NULL) return; @@ -253,22 +245,13 @@ void DrawTextExt(DrawBuffer *dst_bitmap, int dst_x, int dst_y, char *text, dst_x += font->draw_x; dst_y += font->draw_y; - while (*text) + while (*text_ptr) { - char c = *text++; - - if (c == '~') - { - print_inverse = TRUE; - if (strlen(text) == 1) - print_inverse_cursor = TRUE; - - continue; - } + char c = *text_ptr++; getFontCharSource(font_nr, c, &src_bitmap, &src_x, &src_y); - if (print_inverse) /* special mode for text gadgets */ + if (mask_mode == BLIT_INVERSE) /* special mode for text gadgets */ { #if defined(TARGET_SDL) /* blit normally (non-masked) */ @@ -280,7 +263,7 @@ void DrawTextExt(DrawBuffer *dst_bitmap, int dst_x, int dst_y, char *text, gfx.inverse_text_color); #else /* first step: draw solid colored rectangle (use "cursor" character) */ - if (print_inverse_cursor) + if (strlen(text) == 1) /* only one char inverted => draw cursor */ { Bitmap *cursor_bitmap; int cursor_x, cursor_y; -- 2.34.1