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.
This commit is contained in:
parent
dc2933ebde
commit
705af33f7e
4 changed files with 56 additions and 20 deletions
|
@ -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
|
||||
|
|
|
@ -2412,7 +2412,6 @@ External call (RIF): draw cursor
|
|||
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;
|
||||
|
|
|
@ -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);
|
||||
|
|
30
src/xterm.c
30
src/xterm.c
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue