… | |
… | |
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); |
|
|
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 | |
|
|
286 | memcpy (swap_buf [row].t, prev_swap_buf [row].t, sizeof (text_t) * common_col); |
|
|
287 | memcpy (swap_buf [row].r, prev_swap_buf [row].r, sizeof (rend_t) * common_col); |
|
|
288 | swap_buf [row].l = min (prev_swap_buf [row].l, ncol); |
|
|
289 | swap_buf [row].f = prev_swap_buf [row].f; |
289 | copy_line (swap_buf [row], prev_swap_buf [row]); |
290 | } |
290 | } |
291 | |
291 | |
292 | 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 |
293 | int pend = MOD (term_start + top_row , prev_total_rows); |
293 | int pend = MOD (term_start + top_row , prev_total_rows); |
294 | int q = total_rows; // rewrapped row |
294 | int q = total_rows; // rewrapped row |
… | |
… | |
389 | for (int row = min (nrow, prev_nrow); row--; ) |
389 | for (int row = min (nrow, prev_nrow); row--; ) |
390 | { |
390 | { |
391 | 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)]; |
392 | line_t &dst = row_buf [row]; |
392 | line_t &dst = row_buf [row]; |
393 | |
393 | |
394 | scr_blank_screen_mem (dst, DEFAULT_RSTYLE); |
394 | copy_line (dst, src); |
395 | |
|
|
396 | memcpy (dst.t, src.t, sizeof (text_t) * common_col); |
|
|
397 | memcpy (dst.r, src.r, sizeof (rend_t) * common_col); |
|
|
398 | dst.l = min (src.l, ncol); |
|
|
399 | dst.f = src.f; |
|
|
400 | } |
395 | } |
401 | |
396 | |
402 | for (int row = prev_nrow; row < nrow; row++) |
397 | for (int row = prev_nrow; row < nrow; row++) |
403 | scr_blank_screen_mem (row_buf [row], DEFAULT_RSTYLE); |
398 | scr_blank_screen_mem (row_buf [row], DEFAULT_RSTYLE); |
404 | |
399 | |