Fix bug #7398 with truncated glyphs in w32 tooltips.
w32fns.c (Fx_show_tip): Call try_window with last argument TRY_WINDOW_IGNORE_FONTS_CHANGE. Delete the TODO ifdef: problem solved. Round up the tip height to an integral multiple of the frame's line height. Add FRAME_COLUMN_WIDTH to the tip width.
This commit is contained in:
parent
2b40459776
commit
39321b94bf
2 changed files with 21 additions and 14 deletions
|
@ -1,3 +1,11 @@
|
|||
2010-12-11 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* w32fns.c (Fx_show_tip): Call try_window with last argument
|
||||
TRY_WINDOW_IGNORE_FONTS_CHANGE. Delete the TODO ifdef: problem
|
||||
solved. Round up the tip height to an integral multiple of the
|
||||
frame's line height. Add FRAME_COLUMN_WIDTH to the tip width.
|
||||
(Bug#7398)
|
||||
|
||||
2010-12-08 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* fileio.c (Fverify_visited_file_modtime): Default to current buffer.
|
||||
|
|
27
src/w32fns.c
27
src/w32fns.c
|
@ -5782,7 +5782,7 @@ Text larger than the specified size is clipped. */)
|
|||
clear_glyph_matrix (w->desired_matrix);
|
||||
clear_glyph_matrix (w->current_matrix);
|
||||
SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
|
||||
try_window (FRAME_ROOT_WINDOW (f), pos, 0);
|
||||
try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
|
||||
|
||||
/* Compute width and height of the tooltip. */
|
||||
width = height = seen_reversed_p = 0;
|
||||
|
@ -5804,16 +5804,12 @@ Text larger than the specified size is clipped. */)
|
|||
{
|
||||
if (!row->reversed_p)
|
||||
{
|
||||
#ifdef TODO /* Investigate why some fonts need more width than is
|
||||
calculated for some tooltips. */
|
||||
|
||||
/* There's a glyph at the end of rows that is used to
|
||||
place the cursor there. Don't include the width of
|
||||
this glyph. */
|
||||
last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
|
||||
if (INTEGERP (last->object))
|
||||
row_width -= last->pixel_width;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -5830,7 +5826,6 @@ Text larger than the specified size is clipped. */)
|
|||
}
|
||||
}
|
||||
|
||||
/* TODO: find why tips do not draw along baseline as instructed. */
|
||||
height += row->height;
|
||||
width = max (width, row_width);
|
||||
}
|
||||
|
@ -5847,9 +5842,10 @@ Text larger than the specified size is clipped. */)
|
|||
w->total_cols = make_number (width);
|
||||
FRAME_TOTAL_COLS (f) = width;
|
||||
adjust_glyphs (f);
|
||||
w->pseudo_window_p = 1;
|
||||
clear_glyph_matrix (w->desired_matrix);
|
||||
clear_glyph_matrix (w->current_matrix);
|
||||
try_window (FRAME_ROOT_WINDOW (f), pos, 0);
|
||||
try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
|
||||
width = height = 0;
|
||||
/* Recompute width and height of the tooltip. */
|
||||
for (i = 0; i < w->desired_matrix->nrows; ++i)
|
||||
|
@ -5862,21 +5858,22 @@ Text larger than the specified size is clipped. */)
|
|||
break;
|
||||
row->full_width_p = 1;
|
||||
row_width = row->pixel_width;
|
||||
#ifdef TODO /* See above. */
|
||||
if (row->used[TEXT_AREA] && !row->reversed_p)
|
||||
{
|
||||
last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1];
|
||||
if (INTEGERP (last->object))
|
||||
row_width -= last->pixel_width;
|
||||
}
|
||||
#endif
|
||||
|
||||
height += row->height;
|
||||
width = max (width, row_width);
|
||||
}
|
||||
}
|
||||
|
||||
/* Add the frame's internal border to the width and height the X
|
||||
/* Round up the height to an integral multiple of FRAME_LINE_HEIGHT. */
|
||||
if (height % FRAME_LINE_HEIGHT (f) != 0)
|
||||
height += FRAME_LINE_HEIGHT (f) - height % FRAME_LINE_HEIGHT (f);
|
||||
/* Add the frame's internal border to the width and height the w32
|
||||
window should have. */
|
||||
height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
|
||||
width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f);
|
||||
|
@ -5895,11 +5892,13 @@ Text larger than the specified size is clipped. */)
|
|||
FRAME_EXTERNAL_MENU_BAR (f));
|
||||
|
||||
/* Position and size tooltip, and put it in the topmost group.
|
||||
The add-on of 3 to the 5th argument is a kludge: without it,
|
||||
some fonts cause the last character of the tip to be truncated,
|
||||
for some obscure reason. */
|
||||
The add-on of FRAME_COLUMN_WIDTH to the 5th argument is a
|
||||
peculiarity of w32 display: without it, some fonts cause the
|
||||
last character of the tip to be truncated or wrapped around to
|
||||
the next line. */
|
||||
SetWindowPos (FRAME_W32_WINDOW (f), HWND_TOPMOST,
|
||||
root_x, root_y, rect.right - rect.left + 3,
|
||||
root_x, root_y,
|
||||
rect.right - rect.left + FRAME_COLUMN_WIDTH (f),
|
||||
rect.bottom - rect.top, SWP_NOACTIVATE);
|
||||
|
||||
/* Ensure tooltip is on top of other topmost windows (eg menus). */
|
||||
|
|
Loading…
Add table
Reference in a new issue