Mercurial > emacs
changeset 111941:538894189022
Fix bug #7398 with truncated glyphs in tooltip display on w32.
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.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 11 Dec 2010 17:20:11 +0200 |
parents | 2b22180fb92e |
children | 9b5de34a8646 |
files | src/ChangeLog src/w32fns.c |
diffstat | 2 files changed, 18 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Sat Dec 11 14:27:13 2010 +0200 +++ b/src/ChangeLog Sat Dec 11 17:20:11 2010 +0200 @@ -1,5 +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) + * xdisp.c (string_pos_nchars_ahead, c_string_pos) (face_before_or_after_it_pos, next_element_from_string) (next_element_from_c_string, produce_stretch_glyph): Remove unused
--- a/src/w32fns.c Sat Dec 11 14:27:13 2010 +0200 +++ b/src/w32fns.c Sat Dec 11 17:20:11 2010 +0200 @@ -5892,7 +5892,7 @@ 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 = 0; @@ -5909,9 +5909,7 @@ /* Let the row go over the full width of the frame. */ row->full_width_p = 1; -#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 use to place + /* 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. */ if (row->used[TEXT_AREA]) { @@ -5919,15 +5917,16 @@ row_width = row->pixel_width - last->pixel_width; } else -#endif row_width = row->pixel_width; - /* TODO: find why tips do not draw along baseline as instructed. */ 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); @@ -5946,11 +5945,13 @@ 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). */