Fix disappearing bar cursor on Hebrew text (bug#72230)
* src/nsterm.m (ns_draw_window_cursor): Compute the correct bar cursor rectangle for R2L before setting the clipping.
This commit is contained in:
parent
1aaadc8aec
commit
2074e94c3b
1 changed files with 8 additions and 12 deletions
20
src/nsterm.m
20
src/nsterm.m
|
@ -3026,7 +3026,7 @@ External call (RIF): draw cursor.
|
||||||
Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
|
Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
|
||||||
-------------------------------------------------------------------------- */
|
-------------------------------------------------------------------------- */
|
||||||
{
|
{
|
||||||
NSRect r, s;
|
NSRect r;
|
||||||
int fx, fy, h, cursor_height;
|
int fx, fy, h, cursor_height;
|
||||||
struct frame *f = WINDOW_XFRAME (w);
|
struct frame *f = WINDOW_XFRAME (w);
|
||||||
struct glyph *phys_cursor_glyph;
|
struct glyph *phys_cursor_glyph;
|
||||||
|
@ -3076,6 +3076,12 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
|
||||||
/* The bar cursor should never be wider than the glyph. */
|
/* The bar cursor should never be wider than the glyph. */
|
||||||
if (cursor_width < w->phys_cursor_width)
|
if (cursor_width < w->phys_cursor_width)
|
||||||
w->phys_cursor_width = cursor_width;
|
w->phys_cursor_width = cursor_width;
|
||||||
|
|
||||||
|
/* 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)
|
||||||
|
fx += cursor_glyph->pixel_width - w->phys_cursor_width;
|
||||||
}
|
}
|
||||||
/* If we have an HBAR, "cursor_width" MAY specify height. */
|
/* If we have an HBAR, "cursor_width" MAY specify height. */
|
||||||
else if (cursor_type == HBAR_CURSOR)
|
else if (cursor_type == HBAR_CURSOR)
|
||||||
|
@ -3126,18 +3132,8 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
|
||||||
[ctx restoreGraphicsState];
|
[ctx restoreGraphicsState];
|
||||||
break;
|
break;
|
||||||
case HBAR_CURSOR:
|
case HBAR_CURSOR:
|
||||||
NSRectFill (r);
|
|
||||||
[ctx restoreGraphicsState];
|
|
||||||
break;
|
|
||||||
case BAR_CURSOR:
|
case BAR_CURSOR:
|
||||||
s = r;
|
NSRectFill (r);
|
||||||
/* 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);
|
|
||||||
[ctx restoreGraphicsState];
|
[ctx restoreGraphicsState];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue