comparison src/redisplay.c @ 217:d44af0c54775 r20-4b7

Import from CVS: tag r20-4b7
author cvs
date Mon, 13 Aug 2007 10:08:34 +0200
parents 1f0dabaa0855
children 2c611d1463a6
comparison
equal deleted inserted replaced
216:43306a74e31c 217:d44af0c54775
144 need to be skipped. This is used for horizontal 144 need to be skipped. This is used for horizontal
145 scrolling, where a certain number of columns 145 scrolling, where a certain number of columns
146 (those off the left side of the screen) need 146 (those off the left side of the screen) need
147 to be skipped before anything is displayed. */ 147 to be skipped before anything is displayed. */
148 Bytind bi_start_col_enabled; 148 Bytind bi_start_col_enabled;
149
150 int hscroll_glyph_width_adjust; /* how much the width of the hscroll
151 glyph differs from space_width (w).
152 0 if no hscroll glyph was used,
153 i.e. the window is not scrolled
154 horizontally. Used in tab
155 calculations. */
149 156
150 /* Information about the face the text should be displayed in and 157 /* Information about the face the text should be displayed in and
151 any begin-glyphs and end-glyphs. */ 158 any begin-glyphs and end-glyphs. */
152 struct extent_fragment *ef; 159 struct extent_fragment *ef;
153 face_index findex; 160 face_index findex;
815 data->bi_endpos = data->bi_bufpos; 822 data->bi_endpos = data->bi_bufpos;
816 data->bi_bufpos = data->bi_start_col_enabled; 823 data->bi_bufpos = data->bi_start_col_enabled;
817 824
818 gb.extent = Qnil; 825 gb.extent = Qnil;
819 gb.glyph = Vhscroll_glyph; 826 gb.glyph = Vhscroll_glyph;
820 retval = add_glyph_rune (data, &gb, BEGIN_GLYPHS, 1, 827 {
821 GLYPH_CACHEL (XWINDOW (data->window), 828 int oldpixpos = data->pixpos;
822 HSCROLL_GLYPH_INDEX)); 829 retval = add_glyph_rune (data, &gb, BEGIN_GLYPHS, 1,
823 830 GLYPH_CACHEL (XWINDOW (data->window),
831 HSCROLL_GLYPH_INDEX));
832 data->hscroll_glyph_width_adjust =
833 data->pixpos - oldpixpos - space_width (XWINDOW (data->window));
834 }
824 data->bi_endpos = 0; 835 data->bi_endpos = 0;
825 data->bi_cursor_bufpos = bi_old_cursor_bufpos; 836 data->bi_cursor_bufpos = bi_old_cursor_bufpos;
826 data->cursor_type = old_cursor_type; 837 data->cursor_type = old_cursor_type;
827 data->bi_bufpos = bi_old_bufpos; 838 data->bi_bufpos = bi_old_bufpos;
828 839
1930 data.cursor_type = NO_CURSOR; 1941 data.cursor_type = NO_CURSOR;
1931 data.cursor_x = -1; 1942 data.cursor_x = -1;
1932 1943
1933 data.start_col = w->hscroll; 1944 data.start_col = w->hscroll;
1934 data.bi_start_col_enabled = (w->hscroll ? bi_start_pos : 0); 1945 data.bi_start_col_enabled = (w->hscroll ? bi_start_pos : 0);
1946 data.hscroll_glyph_width_adjust = 0;
1935 1947
1936 /* We regenerate the line from the very beginning. */ 1948 /* We regenerate the line from the very beginning. */
1937 Dynarr_reset (db->runes); 1949 Dynarr_reset (db->runes);
1938 1950
1939 /* Why is this less than or equal and not just less than? If the 1951 /* Why is this less than or equal and not just less than? If the
2281 int prop_width = 0; 2293 int prop_width = 0;
2282 2294
2283 if (data.start_col > 1) 2295 if (data.start_col > 1)
2284 tab_start_pixpos -= (space_width (w) * (data.start_col - 1)); 2296 tab_start_pixpos -= (space_width (w) * (data.start_col - 1));
2285 2297
2286 next_tab_start = next_tab_position (w, tab_start_pixpos, 2298 next_tab_start =
2287 dl->bounds.left_in); 2299 next_tab_position (w, tab_start_pixpos,
2300 dl->bounds.left_in +
2301 data.hscroll_glyph_width_adjust);
2288 if (next_tab_start > data.max_pixpos) 2302 if (next_tab_start > data.max_pixpos)
2289 { 2303 {
2290 prop_width = next_tab_start - data.max_pixpos; 2304 prop_width = next_tab_start - data.max_pixpos;
2291 next_tab_start = data.max_pixpos; 2305 next_tab_start = data.max_pixpos;
2292 } 2306 }
5426 f->point_changed = 0; 5440 f->point_changed = 0;
5427 f->toolbar_changed = 0; 5441 f->toolbar_changed = 0;
5428 f->windows_changed = 0; 5442 f->windows_changed = 0;
5429 f->windows_structure_changed = 0; 5443 f->windows_structure_changed = 0;
5430 f->window_face_cache_reset = 0; 5444 f->window_face_cache_reset = 0;
5445 f->echo_area_garbaged = 0;
5431 5446
5432 f->clear = 0; 5447 f->clear = 0;
5433 5448
5434 if (!f->size_change_pending) 5449 if (!f->size_change_pending)
5435 f->size_changed = 0; 5450 f->size_changed = 0;
7808 7823
7809 if (FRAME_REPAINT_P (f) && FRAME_HAS_MINIBUF_P (f)) 7824 if (FRAME_REPAINT_P (f) && FRAME_HAS_MINIBUF_P (f))
7810 { 7825 {
7811 Lisp_Object window = FRAME_MINIBUF_WINDOW (f); 7826 Lisp_Object window = FRAME_MINIBUF_WINDOW (f);
7812 /* 7827 /*
7813 * If the frame has changed, there may be random chud 7828 * If the frame size has changed, there may be random
7814 * on the screen left from previous messages because 7829 * chud on the screen left from previous messages
7815 * redisplay_frame hasn't been called yet. Clear the 7830 * because redisplay_frame hasn't been called yet.
7816 * screen to get rid of the potential mess. 7831 * Clear the screen to get rid of the potential mess.
7817 *
7818 * It would be nice if a way could be found not to
7819 * have to do this for every message until the next
7820 * full redisplay.
7821 */ 7832 */
7822 if (f->frame_changed) 7833 if (f->echo_area_garbaged)
7823 DEVMETH (d, clear_frame, (f)); 7834 {
7835 DEVMETH (d, clear_frame, (f));
7836 f->echo_area_garbaged = 0;
7837 }
7824 redisplay_window (window, 0); 7838 redisplay_window (window, 0);
7825 call_redisplay_end_triggers (XWINDOW (window), 0); 7839 call_redisplay_end_triggers (XWINDOW (window), 0);
7826 } 7840 }
7827 } 7841 }
7828 7842