changeset 110014:f576b550fb69

* nsterm.m (ns_draw_window_cursor): Draw BAR_CURSOR correct for R2L.
author Jan D <jan.h.d@swipnet.se>
date Sun, 29 Aug 2010 12:30:45 +0200
parents 0fb70b0c7489
children 280c8ae2476d
files src/ChangeLog src/nsterm.m
diffstat 2 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sat Aug 28 21:31:45 2010 -0400
+++ b/src/ChangeLog	Sun Aug 29 12:30:45 2010 +0200
@@ -1,3 +1,7 @@
+2010-08-29  Jan Djärv  <jan.h.d@swipnet.se>
+
+	* nsterm.m (ns_draw_window_cursor): Draw BAR_CURSOR correct for R2L.
+
 2010-08-26  Kenichi Handa  <handa@m17n.org>
 
 	* xdisp.c (compute_stop_pos): Pay attention to bidi scan direction
--- a/src/nsterm.m	Sat Aug 28 21:31:45 2010 -0400
+++ b/src/nsterm.m	Sun Aug 29 12:30:45 2010 +0200
@@ -2251,6 +2251,11 @@
   struct frame *f = WINDOW_XFRAME (w);
   struct glyph *phys_cursor_glyph;
   int overspill;
+  struct glyph *cursor_glyph;
+
+  /* If cursor is out of bounds, don't draw garbage.  This can happen
+     in mini-buffer windows when switching between echo area glyphs
+     and mini-buffer.  */
 
   NSTRACE (dumpcursor);
 //fprintf(stderr, "drawcursor (%d,%d) activep = %d\tonp = %d\tc_type = %d\twidth = %d\n",x,y, active_p,on_p,cursor_type,cursor_width);
@@ -2328,6 +2333,13 @@
     case BAR_CURSOR:
       s = r;
       s.size.width = min (cursor_width, 2); //FIXME(see above)
+
+      /* If the character under cursor is R2L, draw the bar cursor
+         on the right of its glyph, rather than on the left.  */
+      cursor_glyph = get_phys_cursor_glyph (w);
+      if ((cursor_glyph->resolved_level & 1) != 0)
+        s.origin.x += cursor_glyph->pixel_width - s.size.width;
+
       NSRectFill (s);
       break;
     }