[
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:
2011年11月20日 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日