… | |
… | |
188 | drawn_buf = (line_t *)chunk; |
188 | drawn_buf = (line_t *)chunk; |
189 | swap_buf = drawn_buf + nrow; |
189 | swap_buf = drawn_buf + nrow; |
190 | row_buf = swap_buf + nrow; |
190 | row_buf = swap_buf + nrow; |
191 | } |
191 | } |
192 | |
192 | |
|
|
193 | void |
|
|
194 | rxvt_term::copy_line (line_t &dst, line_t &src) |
|
|
195 | { |
|
|
196 | scr_blank_screen_mem (dst, DEFAULT_RSTYLE); |
|
|
197 | dst.l = min (src.l, ncol); |
|
|
198 | memcpy (dst.t, src.t, sizeof (text_t) * dst.l); |
|
|
199 | memcpy (dst.r, src.r, sizeof (rend_t) * dst.l); |
|
|
200 | dst.f = src.f; |
|
|
201 | } |
|
|
202 | |
193 | void ecb_cold |
203 | void ecb_cold |
194 | rxvt_term::scr_reset () |
204 | rxvt_term::scr_reset () |
195 | { |
205 | { |
196 | #if ENABLE_OVERLAY |
206 | #if ENABLE_OVERLAY |
197 | scr_overlay_off (); |
207 | scr_overlay_off (); |
… | |
… | |
229 | void *prev_chunk = chunk; |
239 | void *prev_chunk = chunk; |
230 | size_t prev_chunk_size = chunk_size; |
240 | size_t prev_chunk_size = chunk_size; |
231 | line_t *prev_drawn_buf = drawn_buf; |
241 | line_t *prev_drawn_buf = drawn_buf; |
232 | line_t *prev_swap_buf = swap_buf; |
242 | line_t *prev_swap_buf = swap_buf; |
233 | line_t *prev_row_buf = row_buf; |
243 | line_t *prev_row_buf = row_buf; |
234 | |
|
|
235 | int common_col = min (prev_ncol, ncol); |
|
|
236 | |
244 | |
237 | scr_alloc (); |
245 | scr_alloc (); |
238 | |
246 | |
239 | if (!prev_row_buf) |
247 | if (!prev_row_buf) |
240 | { |
248 | { |
… | |
… | |
275 | * add or delete rows as appropriate |
283 | * add or delete rows as appropriate |
276 | */ |
284 | */ |
277 | |
285 | |
278 | for (int row = min (nrow, prev_nrow); row--; ) |
286 | for (int row = min (nrow, prev_nrow); row--; ) |
279 | { |
287 | { |
280 | scr_blank_screen_mem (drawn_buf [row], DEFAULT_RSTYLE); |
288 | copy_line (drawn_buf [row], prev_drawn_buf [row]); |
281 | scr_blank_screen_mem (swap_buf [row], DEFAULT_RSTYLE); |
289 | copy_line (swap_buf [row], prev_swap_buf [row]); |
282 | |
|
|
283 | memcpy (drawn_buf [row].t, prev_drawn_buf [row].t, sizeof (text_t) * common_col); |
|
|
284 | memcpy (drawn_buf [row].r, prev_drawn_buf [row].r, sizeof (rend_t) * common_col); |
|
|
285 | memcpy (swap_buf [row].t, prev_swap_buf [row].t, sizeof (text_t) * common_col); |
|
|
286 | memcpy (swap_buf [row].r, prev_swap_buf [row].r, sizeof (rend_t) * common_col); |
|
|
287 | } |
290 | } |
288 | |
291 | |
289 | int p = MOD (term_start + prev_nrow, prev_total_rows); // previous row |
292 | int p = MOD (term_start + prev_nrow, prev_total_rows); // previous row |
290 | int pend = MOD (term_start + top_row , prev_total_rows); |
293 | int pend = MOD (term_start + top_row , prev_total_rows); |
291 | int q = total_rows; // rewrapped row |
294 | int q = total_rows; // rewrapped row |
… | |
… | |
386 | for (int row = min (nrow, prev_nrow); row--; ) |
389 | for (int row = min (nrow, prev_nrow); row--; ) |
387 | { |
390 | { |
388 | line_t &src = prev_row_buf [MOD (term_start + row, prev_total_rows)]; |
391 | line_t &src = prev_row_buf [MOD (term_start + row, prev_total_rows)]; |
389 | line_t &dst = row_buf [row]; |
392 | line_t &dst = row_buf [row]; |
390 | |
393 | |
391 | scr_blank_screen_mem (dst, DEFAULT_RSTYLE); |
394 | copy_line (dst, src); |
392 | |
|
|
393 | memcpy (dst.t, src.t, sizeof (text_t) * common_col); |
|
|
394 | memcpy (dst.r, src.r, sizeof (rend_t) * common_col); |
|
|
395 | } |
395 | } |
396 | |
396 | |
397 | for (int row = prev_nrow; row < nrow; row++) |
397 | for (int row = prev_nrow; row < nrow; row++) |
398 | scr_blank_screen_mem (row_buf [row], DEFAULT_RSTYLE); |
398 | scr_blank_screen_mem (row_buf [row], DEFAULT_RSTYLE); |
399 | |
399 | |
… | |
… | |
1706 | if (rvideo_state != on) |
1706 | if (rvideo_state != on) |
1707 | { |
1707 | { |
1708 | rvideo_state = on; |
1708 | rvideo_state = on; |
1709 | |
1709 | |
1710 | ::swap (pix_colors[Color_fg], pix_colors[Color_bg]); |
1710 | ::swap (pix_colors[Color_fg], pix_colors[Color_bg]); |
1711 | #ifdef HAVE_BG_PIXMAP |
1711 | #ifdef HAVE_IMG |
1712 | if (bg_img == 0) |
1712 | if (bg_img == 0) |
1713 | #endif |
1713 | #endif |
1714 | XSetWindowBackground (dpy, vt, pix_colors[Color_bg]); |
1714 | XSetWindowBackground (dpy, vt, pix_colors[Color_bg]); |
1715 | |
1715 | |
1716 | XGCValues gcvalue; |
1716 | XGCValues gcvalue; |
… | |
… | |
2051 | */ |
2051 | */ |
2052 | refresh_count = 0; |
2052 | refresh_count = 0; |
2053 | |
2053 | |
2054 | unsigned int old_screen_flags = screen.flags; |
2054 | unsigned int old_screen_flags = screen.flags; |
2055 | bool have_bg = 0; |
2055 | bool have_bg = 0; |
2056 | #ifdef HAVE_BG_PIXMAP |
2056 | #ifdef HAVE_IMG |
2057 | have_bg = bg_img != 0; |
2057 | have_bg = bg_img != 0; |
2058 | #endif |
2058 | #endif |
2059 | ocrow = oldcursor.row; /* is there an old outline cursor on screen? */ |
2059 | ocrow = oldcursor.row; /* is there an old outline cursor on screen? */ |
2060 | |
2060 | |
2061 | /* |
2061 | /* |
… | |
… | |
2532 | void ecb_cold |
2532 | void ecb_cold |
2533 | rxvt_term::scr_recolour (bool refresh) NOTHROW |
2533 | rxvt_term::scr_recolour (bool refresh) NOTHROW |
2534 | { |
2534 | { |
2535 | bool transparent = false; |
2535 | bool transparent = false; |
2536 | |
2536 | |
2537 | #ifdef HAVE_BG_PIXMAP |
2537 | #ifdef HAVE_IMG |
2538 | if (bg_img != 0) |
2538 | if (bg_img != 0) |
2539 | { |
2539 | { |
2540 | # if ENABLE_TRANSPARENCY |
2540 | # if ENABLE_TRANSPARENCY |
2541 | if (bg_flags & BG_IS_TRANSPARENT) |
2541 | if (bg_flags & BG_IS_TRANSPARENT) |
2542 | { |
2542 | { |