Mercurial > emacs
changeset 70695:c91b342afed1
(display_tool_bar_line): Restore entire tool-bar geometry when
backtracking in case last image doesn't fit on line.
(display_tool_bar_line): Don't adjust tool-bar height by more than
height of one frame default line. From: MIYOSHI Masanori.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Wed, 17 May 2006 22:24:13 +0000 |
parents | c7b7ef478a35 |
children | a678a92fb660 |
files | src/xdisp.c |
diffstat | 1 files changed, 8 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Wed May 17 22:23:17 2006 +0000 +++ b/src/xdisp.c Wed May 17 22:24:13 2006 +0000 @@ -9492,6 +9492,7 @@ while (it->current_x < max_x) { int x_before, x, n_glyphs_before, i, nglyphs; + struct it it_before; /* Get the next display element. */ if (!get_next_display_element (it)) @@ -9505,9 +9506,10 @@ /* Produce glyphs. */ x_before = it->current_x; n_glyphs_before = it->glyph_row->used[TEXT_AREA]; + it_before = *it; PRODUCE_GLYPHS (it); - nglyphs = it->glyph_row->used[TEXT_AREA] - n_glyphs_before; + nglyphs = row->used[TEXT_AREA] - n_glyphs_before; i = 0; x = x_before; while (i < nglyphs) @@ -9516,9 +9518,9 @@ if (x + glyph->pixel_width > max_x) { - /* Glyph doesn't fit on line. */ - it->glyph_row->used[TEXT_AREA] = n_glyphs_before + i; - it->current_x = x; + /* Glyph doesn't fit on line. Backtrack. */ + row->used[TEXT_AREA] = n_glyphs_before; + *it = it_before; goto out; } @@ -9549,6 +9551,8 @@ /* Make line the desired height and center it vertically. */ if ((height -= it->max_ascent + it->max_descent) > 0) { + /* Don't add more than one line height. */ + height %= FRAME_LINE_HEIGHT (it->f); it->max_ascent += height / 2; it->max_descent += (height + 1) / 2; }