]> git.eshelyaron.com Git - emacs.git/commitdiff
(x_draw_fringe_bitmap): Copy unadapted code from
authorKim F. Storm <storm@cua.dk>
Sun, 8 Feb 2004 23:20:10 +0000 (23:20 +0000)
committerKim F. Storm <storm@cua.dk>
Sun, 8 Feb 2004 23:20:10 +0000 (23:20 +0000)
xterm.c to handle overlayed fringe bitmaps and to use cursor color
for displaying cursor in fringe.
(x_redisplay_interface): Add null handlers for
define_fringe_bitmap and destroy_fringe_bitmap functions.

src/macterm.c

index 5446fd5efadcb5c76aadec9ff1ec2319a1ef8aba..b9e76d47d16f6dc0563753caa9525eba2a66055e 100644 (file)
@@ -1313,7 +1313,7 @@ x_draw_fringe_bitmap (w, row, p)
   else
     x_clip_to_row (w, row, gc);
 
-  if (p->bx >= 0)
+  if (p->bx >= 0 && !p->overlay_p)
     {
       XGCValues gcv;
       gcv.foreground = face->background;
@@ -1339,18 +1339,45 @@ x_draw_fringe_bitmap (w, row, p)
 #endif
     }
 
-  if (p->which != NO_FRINGE_BITMAP)
+  if (p->which)
     {
-      unsigned char *bits = fringe_bitmaps[p->which].bits + p->dh;
+      unsigned char *bits = p->bits + p->dh;
       BitMap bitmap;
 
       mac_create_bitmap_from_bitmap_data (&bitmap, bits, p->wd, p->h);
       gcv.foreground = face->foreground;
       gcv.background = face->background;
 
-      mac_draw_bitmap (display, window, &gcv, p->x, p->y, &bitmap);
+#if 0  /* TODO: fringe overlay_p and cursor_p */
+      gcv.foreground = (p->cursor_p
+                       ? (p->overlay_p ? face->background
+                          : f->output_data.mac->cursor_pixel)
+                       : face->foreground));
+
+      if (p->overlay_p)
+       {
+         clipmask = XCreatePixmapFromBitmapData (display, 
+                                                 FRAME_X_DISPLAY_INFO (f)->root_window,
+                                                 bits, p->wd, p->h, 
+                                                 1, 0, 1);
+         gcv.clip_mask = clipmask;
+         gcv.clip_x_origin = p->x;
+         gcv.clip_y_origin = p->y; 
+         XChangeGC (display, gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, &gcv);
+       }
+#endif
 
+      mac_draw_bitmap (display, window, &gcv, p->x, p->y, &bitmap);
       mac_free_bitmap (&bitmap);
+
+#if 0  /* TODO: fringe overlay_p and cursor_p */
+      if (p->overlay_p)
+       {
+         gcv.clip_mask = (Pixmap) 0;
+         XChangeGC (display, gc, GCClipMask, &gcv);
+         XFreePixmap (display, clipmask);
+       }
+#endif
     }
 
   mac_reset_clipping (display, window);
@@ -8517,6 +8544,8 @@ static struct redisplay_interface x_redisplay_interface =
   x_get_glyph_overhangs,
   x_fix_overlapping_area,
   x_draw_fringe_bitmap,
+  0, /* define_fringe_bitmap */
+  0, /* destroy_fringe_bitmap */
   mac_per_char_metric,
   mac_encode_char,
   NULL, /* mac_compute_glyph_string_overhangs */