rnd-20030406-2-src
authorHolger Schemel <info@artsoft.org>
Sun, 6 Apr 2003 20:55:37 +0000 (22:55 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:41:00 +0000 (10:41 +0200)
src/conftime.h
src/libgame/gadgets.c
src/libgame/system.h
src/libgame/text.c

index 0f48dbfab7da23c604da96de2fd1cfa43eeb864f..d03062df0a052f9973e8fb581aa28d31f162276c 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2003-04-06 02:20]"
+#define COMPILE_DATE_STRING "[2003-04-06 22:55]"
index 594131676338192ac4fd05444fd8b1ce6d6b9b15..69108942972fe2f8112a25dbb7d868e9b6945eb4 100644 (file)
@@ -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;
index 0474bc7570405d8d376bf3017db47ad7732a744b..a73f8a4653cc04836faaf245ff72fe5f121122ce 100644 (file)
@@ -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
index e440d2172031c9d33a4c424c719169bc367314d6..2ba68ae816347262b48ff4dd1118893a57c37a99 100644 (file)
@@ -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;