changeset 53607:4262a032b45b

(x_update_window_end): Call draw_window_fringes. (x_after_update_window_line): Just set redraw_fringe_bitmaps_p in row instead of actually drawing fringe bitmaps. (w32_draw_fringe_bitmap): Handle bottom aligned bitmaps. (w32_draw_window_cursor): Draw cursor in fringe.
author Kim F. Storm <storm@cua.dk>
date Fri, 16 Jan 2004 18:46:47 +0000
parents 96c29ac603e8
children 81b31a8c3313
files src/w32term.c
diffstat 1 files changed, 28 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32term.c	Fri Jan 16 18:46:29 2004 +0000
+++ b/src/w32term.c	Fri Jan 16 18:46:47 2004 +0000
@@ -540,6 +540,9 @@
 				output_cursor.x, output_cursor.y);
 
       x_draw_vertical_border (w);
+
+      draw_window_fringes (w);
+
       UNBLOCK_INPUT;
     }
 
@@ -624,11 +627,7 @@
   xassert (w);
 
   if (!desired_row->mode_line_p && !w->pseudo_window_p)
-    {
-      BLOCK_INPUT;
-      draw_row_fringe_bitmaps (w, desired_row);
-      UNBLOCK_INPUT;
-    }
+    desired_row->redraw_fringe_bitmaps_p = 1;
 
   /* When a window has disappeared, make sure that no rest of
      full-width rows stays visible in the internal border.  Could
@@ -678,11 +677,26 @@
   struct frame *f = XFRAME (WINDOW_FRAME (w));
   HDC hdc;
   struct face *face = p->face;
+  int rowY;
 
   hdc = get_frame_dc (f);
 
   /* Must clip because of partially visible lines.  */
-  w32_clip_to_row (w, row, hdc);
+  rowY = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
+  if (p->y < rowY)
+    {
+      /* Adjust position of "bottom aligned" bitmap on partially
+	 visible last row.  */
+      int oldY = row->y;
+      int oldVH = row->visible_height;
+      row->visible_height = p->h;
+      row->y -= rowY - p->y;
+      w32_clip_to_row (w, row, hdc);
+      row->y = oldY;
+      row->visible_height = oldVH;
+    }
+  else
+    w32_clip_to_row (w, row, hdc);
 
   if (p->bx >= 0)
     {
@@ -5121,6 +5135,14 @@
 	  PostMessage (hwnd, WM_EMACS_TRACK_CARET, 0, 0);
 	}
 
+      if (glyph_row->exact_window_width_line_p
+	  && w->phys_cursor.hpos >= glyph_row->used[TEXT_AREA])
+	{
+	  glyph_row->cursor_in_fringe_p = 1;
+	  draw_fringe_bitmap (w, glyph_row, 0);
+	  return;
+	}
+
       switch (cursor_type)
 	{
 	case HOLLOW_BOX_CURSOR: