diff src/w32term.c @ 45467:583ed47de245

(x_draw_bar_cursor): New argument KIND; callers changed. Handle the `hbar' cursor type. (x_display_and_set_cursor): Handle the HBAR_CURSOR case.
author Jason Rumney <jasonr@gnu.org>
date Wed, 22 May 2002 19:37:17 +0000
parents fb8359237a78
children b69bbd1285d1
line wrap: on
line diff
--- a/src/w32term.c	Wed May 22 19:36:13 2002 +0000
+++ b/src/w32term.c	Wed May 22 19:37:17 2002 +0000
@@ -9455,10 +9455,11 @@
    --gerd.  */
 
 static void
-x_draw_bar_cursor (w, row, width)
+x_draw_bar_cursor (w, row, width, kind)
      struct window *w;
      struct glyph_row *row;
      int width;
+     enum text_cursor_kinds kind;
 {
   struct frame *f = XFRAME (w->frame);
   struct glyph *cursor_glyph;
@@ -9488,6 +9489,7 @@
 
       if (width < 0)
         width = f->output_data.w32->cursor_width;
+      width = min (cursor_glyph->pixel_width, width);
 
       /* If the glyph's background equals the color we normally draw
 	 the bar cursor in, the bar cursor in its normal color is
@@ -9500,10 +9502,20 @@
       x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
       hdc = get_frame_dc (f);
       w32_clip_to_row (w, row, hdc, 0);
-      w32_fill_area (f, hdc, cursor_color, x,
-                     WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y),
-                     min (cursor_glyph->pixel_width, width),
-                     row->height);
+
+      if (kind == BAR_CURSOR)
+	{
+	  w32_fill_area (f, hdc, cursor_color, x,
+			 WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y),
+			 width, row->height);
+	}
+      else
+	{
+	  w32_fill_area (f, hdc, cursor_color, x,
+			 WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y +
+						  row->height - width),
+			 cursor_glyph->pixel_width, width);
+	}
       release_frame_dc (f, hdc);
     }
 }
@@ -9872,7 +9884,11 @@
 	  break;
 
 	case BAR_CURSOR:
-	  x_draw_bar_cursor (w, glyph_row, new_cursor_width);
+	  x_draw_bar_cursor (w, glyph_row, new_cursor_width, BAR_CURSOR);
+	  break;
+
+	case HBAR_CURSOR:
+	  x_draw_bar_cursor (w, glyph_row, new_cursor_width, HBAR_CURSOR);
 	  break;
 
 	case NO_CURSOR: