[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Truncating scroll runs that copy to where we copied to
From: |
YAMAMOTO Mitsuharu |
Subject: |
Truncating scroll runs that copy to where we copied to |
Date: |
Sun, 20 Nov 2011 16:13:59 +0900 |
User-agent: |
Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.3 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI) |
I think that `scrolling_window' needs to truncate scroll runs that
copy to where we copied to; otherwise, `assign_row (to, from)' assigns
a previously disabled bogus row in the desired matrix when we have an
overlap in the copy destination. Such truncation can also avoid
unnecessary copy in the actual graphics operation.
Could someone double-check the code below?
YAMAMOTO Mitsuharu
address@hidden
=== modified file 'src/dispnew.c'
*** src/dispnew.c 2011-11-19 08:39:42 +0000
--- src/dispnew.c 2011-11-20 06:44:25 +0000
***************
*** 4552,4562 ****
rif->clear_window_mouse_face (w);
rif->scroll_run_hook (w, r);
! /* Invalidate runs that copy from where we copied to. */
for (j = i + 1; j < nruns; ++j)
{
struct run *p = runs[j];
if ((p->current_y >= r->desired_y
&& p->current_y < r->desired_y + r->height)
|| (p->current_y + p->height >= r->desired_y
--- 4552,4594 ----
rif->clear_window_mouse_face (w);
rif->scroll_run_hook (w, r);
! /* Truncate runs that copy to where we copied to, and
! invalidate runs that copy from where we copied to. */
for (j = i + 1; j < nruns; ++j)
{
struct run *p = runs[j];
+ if (p->nrows > 0
+ && p->desired_vpos < r->desired_vpos + r->nrows
+ && p->desired_vpos + p->nrows > r->desired_vpos)
+ {
+ if (p->desired_vpos < r->desired_vpos)
+ {
+ p->nrows = r->desired_vpos - p->desired_vpos;
+ p->height = r->desired_y - p->desired_y;
+ }
+ else
+ {
+ int nrows_copied = (r->desired_vpos + r->nrows
+ - p->desired_vpos);
+
+ if (p->nrows <= nrows_copied)
+ p->nrows = 0;
+ else
+ {
+ int height_copied = (r->desired_y + r->height
+ - p->desired_y);
+
+ p->current_vpos += nrows_copied;
+ p->desired_vpos += nrows_copied;
+ p->nrows -= nrows_copied;
+ p->current_y += height_copied;
+ p->desired_y += height_copied;
+ p->height -= height_copied;
+ }
+ }
+ }
+
if ((p->current_y >= r->desired_y
&& p->current_y < r->desired_y + r->height)
|| (p->current_y + p->height >= r->desired_y
- Truncating scroll runs that copy to where we copied to,
YAMAMOTO Mitsuharu <=
- Re: Truncating scroll runs that copy to where we copied to, Eli Zaretskii, 2011/11/20
- Re: Truncating scroll runs that copy to where we copied to, YAMAMOTO Mitsuharu, 2011/11/20
- Re: Truncating scroll runs that copy to where we copied to, David Reitter, 2011/11/21
- Re: Truncating scroll runs that copy to where we copied to, Eli Zaretskii, 2011/11/22
- Re: Truncating scroll runs that copy to where we copied to, YAMAMOTO Mitsuharu, 2011/11/22
- Re: Truncating scroll runs that copy to where we copied to, Eli Zaretskii, 2011/11/22
- Re: Truncating scroll runs that copy to where we copied to, YAMAMOTO Mitsuharu, 2011/11/22
- Re: Truncating scroll runs that copy to where we copied to, YAMAMOTO Mitsuharu, 2011/11/22
- Re: Truncating scroll runs that copy to where we copied to, Eli Zaretskii, 2011/11/22
- Re: Truncating scroll runs that copy to where we copied to, YAMAMOTO Mitsuharu, 2011/11/22