]> git.eshelyaron.com Git - emacs.git/commitdiff
The following changes fix Bug#3005 for wide glyphs on each platform,
authorJason Rumney <jasonr@gnu.org>
Sun, 19 Apr 2009 15:09:25 +0000 (15:09 +0000)
committerJason Rumney <jasonr@gnu.org>
Sun, 19 Apr 2009 15:09:25 +0000 (15:09 +0000)
without reintroducing Bug#1258 for stretch glyphs.

* xterm.c (x_draw_bar_cursor): Limit cursor width differently for
BAR_CURSOR and HBAR_CURSOR.  Calculate width of HBAR_CURSOR using
get_phys_cursor_geometry.

* w32term.c (x_draw_bar_cursor):  Limit cursor width differently
for BAR_CURSOR and HBAR_CURSOR.  Calculate width of HBAR_CURSOR
using get_phys_cursor_geometry.

* nsterm.m (ns_draw_window_cursor): HBAR_CURSOR width already
correctly calculated.

src/ChangeLog
src/nsterm.m
src/w32term.c
src/xterm.c

index 5c66a9734431d8ce868db2a4b65aab6ce09a7bad..cdde8a597f2ca3295aa48e808daab6748bd67b86 100644 (file)
@@ -1,3 +1,19 @@
+2009-04-19  Jason Rumney  <jasonr@gnu.org>
+
+       The following changes fix Bug#3005 for wide glyphs on each platform,
+       without reintroducing Bug#1258 for stretch glyphs.
+
+       * xterm.c (x_draw_bar_cursor): Limit cursor width differently for
+       BAR_CURSOR and HBAR_CURSOR.  Calculate width of HBAR_CURSOR using
+       get_phys_cursor_geometry.
+
+       * w32term.c (x_draw_bar_cursor):  Limit cursor width differently
+       for BAR_CURSOR and HBAR_CURSOR.  Calculate width of HBAR_CURSOR
+       using get_phys_cursor_geometry.
+
+       * nsterm.m (ns_draw_window_cursor): HBAR_CURSOR width already
+       correctly calculated.
+
 2009-04-19  Jan Djärv  <jan.h.d@swipnet.se>
 
        * gtkutil.c (xg_tool_bar_menu_proxy, update_frame_tool_bar): Use
index 07acc8d8013e39fc0ca80c648339479ad8ade3b4..5085679e04a198a941cb1ea83241b4d632349235 100644 (file)
@@ -2412,7 +2412,6 @@ ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row,
     case HBAR_CURSOR:
       s = r;
       s.origin.y += lrint (0.75 * s.size.height);
-      s.size.width = min (FRAME_COLUMN_WIDTH (f), s.size.width);
       s.size.height = lrint (s.size.height * 0.25);
       NSRectFill (s);
       break;
index bc76ac58d1a086f16a7188b6560540bd531032d7..f38895b6312a80b3d1cbe349b4fe8a5d99ff7241 100644 (file)
@@ -4970,8 +4970,6 @@ x_draw_bar_cursor (w, row, width, kind)
 {
   struct frame *f = XFRAME (w->frame);
   struct glyph *cursor_glyph;
-  int x;
-  HDC hdc;
 
   /* If cursor is out of bounds, don't draw garbage.  This can happen
      in mini-buffer windows when switching between echo area glyphs
@@ -4993,6 +4991,8 @@ x_draw_bar_cursor (w, row, width, kind)
     {
       COLORREF cursor_color = f->output_data.w32->cursor_pixel;
       struct face *face = FACE_FROM_ID (f, cursor_glyph->face_id);
+      int x;
+      HDC hdc;
 
       /* If the glyph's background equals the color we normally draw
         the bar cursor in, the bar cursor in its normal color is
@@ -5004,29 +5004,36 @@ x_draw_bar_cursor (w, row, width, kind)
 
       x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
 
-      if (width < 0)
-        width = FRAME_CURSOR_WIDTH (f);
-      width = min (cursor_glyph->pixel_width, width);
-
-      w->phys_cursor_width = width;
-
-
       hdc = get_frame_dc (f);
       w32_clip_to_row (w, row, TEXT_AREA, hdc);
 
       if (kind == BAR_CURSOR)
        {
+         if (width < 0)
+           width = FRAME_CURSOR_WIDTH (f);
+         width = min (cursor_glyph->pixel_width, width);
+
+         w->phys_cursor_width = width;
+
          w32_fill_area (f, hdc, cursor_color, x,
                         WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y),
                         width, row->height);
        }
       else
        {
+         int dummy_x, dummy_y, dummy_h;
+
+         if (width < 0)
+           width = row->height;
+
+         width = min (row->height, width);
+
+         get_phys_cursor_geometry (w, row, cursor_glyph, &dummy_x,
+                                   &dummy_y, &dummy_h);
          w32_fill_area (f, hdc, cursor_color, x,
                         WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y +
                                                  row->height - width),
-                        min (FRAME_COLUMN_WIDTH (f), cursor_glyph->pixel_width),
-                        width);
+                        w->phys_cursor_width, width);
        }
 
       w32_set_clip_rectangle (hdc, NULL);
index 76beb62e4e39edf9c7ee84d8187ef4d5053546c0..e5f8a0c17c91455b7f453a483aad5b3c487bd9ef 100644 (file)
@@ -7426,7 +7426,7 @@ x_draw_bar_cursor (w, row, width, kind)
       XGCValues xgcv;
 
       /* If the glyph's background equals the color we normally draw
-        the bar cursor in, the bar cursor in its normal color is
+        the bars cursor in, the bar cursor in its normal color is
         invisible.  Use the glyph's foreground color instead in this
         case, on the assumption that the glyph's colors are chosen so
         that the glyph is legible.  */
@@ -7444,25 +7444,39 @@ x_draw_bar_cursor (w, row, width, kind)
          FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc = gc;
        }
 
-      if (width < 0)
-       width = FRAME_CURSOR_WIDTH (f);
-      width = min (cursor_glyph->pixel_width, width);
-
-      w->phys_cursor_width = width;
       x_clip_to_row (w, row, TEXT_AREA, gc);
 
       if (kind == BAR_CURSOR)
+       {
+         if (width < 0)
+           width = FRAME_CURSOR_WIDTH (f);
+         width = min (cursor_glyph->pixel_width, width);
+
+         w->phys_cursor_width = width;
+
          XFillRectangle (dpy, window, gc,
                          WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x),
                          WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y),
                          width, row->height);
+       }
       else
+       {
+         int dummy_x, dummy_y, dummy_h;
+
+         if (width < 0)
+           width = row->height;
+
+         width = min (row->height, width);
+
+         get_phys_cursor_geometry (w, row, cursor_glyph, &dummy_x,
+                                   &dummy_y, &dummy_h);
+
          XFillRectangle (dpy, window, gc,
                          WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x),
                          WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y +
                                                   row->height - width),
-                         min (FRAME_COLUMN_WIDTH (f), cursor_glyph->pixel_width),
-                         width);
+                         w->phys_cursor_width, width);
+       }
 
       XSetClipMask (dpy, gc, None);
     }