1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
--- a/src/rxvt.h 2012-11-30 07:52:10.000000000 +0100
+++ b/src/rxvt.h 2013-01-19 18:14:07.477653413 +0100
@@ -1488,6 +1488,7 @@
void scr_blank_screen_mem (line_t &l, rend_t efs) const NOTHROW;
void scr_kill_char (line_t &l, int col) const NOTHROW;
int scr_scroll_text (int row1, int row2, int count) NOTHROW;
+ void copy_line (line_t &dst, line_t &src);
void scr_reset ();
void scr_release () NOTHROW;
void scr_clear (bool really = false) NOTHROW;
--- a/src/screen.C 2012-11-30 08:13:38.000000000 +0100
+++ b/src/screen.C 2013-01-19 18:17:13.431014964 +0100
@@ -190,6 +190,16 @@
row_buf = swap_buf + nrow;
}
+void
+rxvt_term::copy_line (line_t &dst, line_t &src)
+{
+ scr_blank_screen_mem (dst, DEFAULT_RSTYLE);
+ dst.l = min (src.l, ncol);
+ memcpy (dst.t, src.t, sizeof (text_t) * dst.l);
+ memcpy (dst.r, src.r, sizeof (rend_t) * dst.l);
+ dst.f = src.f;
+}
+
void ecb_cold
rxvt_term::scr_reset ()
{
@@ -232,8 +242,6 @@
line_t *prev_swap_buf = swap_buf;
line_t *prev_row_buf = row_buf;
- int common_col = min (prev_ncol, ncol);
-
scr_alloc ();
if (!prev_row_buf)
@@ -277,13 +285,8 @@
for (int row = min (nrow, prev_nrow); row--; )
{
- scr_blank_screen_mem (drawn_buf [row], DEFAULT_RSTYLE);
- scr_blank_screen_mem (swap_buf [row], DEFAULT_RSTYLE);
-
- memcpy (drawn_buf [row].t, prev_drawn_buf [row].t, sizeof (text_t) * common_col);
- memcpy (drawn_buf [row].r, prev_drawn_buf [row].r, sizeof (rend_t) * common_col);
- memcpy (swap_buf [row].t, prev_swap_buf [row].t, sizeof (text_t) * common_col);
- memcpy (swap_buf [row].r, prev_swap_buf [row].r, sizeof (rend_t) * common_col);
+ copy_line (drawn_buf [row], prev_drawn_buf [row]);
+ copy_line (swap_buf [row], prev_swap_buf [row]);
}
int p = MOD (term_start + prev_nrow, prev_total_rows); // previous row
@@ -388,10 +391,7 @@
line_t &src = prev_row_buf [MOD (term_start + row, prev_total_rows)];
line_t &dst = row_buf [row];
- scr_blank_screen_mem (dst, DEFAULT_RSTYLE);
-
- memcpy (dst.t, src.t, sizeof (text_t) * common_col);
- memcpy (dst.r, src.r, sizeof (rend_t) * common_col);
+ copy_line (dst, src);
}
for (int row = prev_nrow; row < nrow; row++)
|