better scrolling
This commit is contained in:
parent
4b12db1171
commit
f334d75632
2 changed files with 37 additions and 41 deletions
|
|
@ -541,6 +541,9 @@ colwhich(Column *c, Point p)
|
||||||
return &w->tag;
|
return &w->tag;
|
||||||
return &w->body;
|
return &w->body;
|
||||||
}
|
}
|
||||||
|
/* scrollr drops below w->r on low windows */
|
||||||
|
if(ptinrect(p, w->body.scrollr))
|
||||||
|
return &w->body;
|
||||||
}
|
}
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -117,48 +117,41 @@ textscroll(Text *t, int but)
|
||||||
first = TRUE;
|
first = TRUE;
|
||||||
do{
|
do{
|
||||||
flushimage(display, 1);
|
flushimage(display, 1);
|
||||||
if(mouse->xy.x<s.min.x || s.max.x<=mouse->xy.x){
|
my = mouse->xy.y;
|
||||||
readmouse(mousectl);
|
if(my < s.min.y)
|
||||||
}else{
|
my = s.min.y;
|
||||||
my = mouse->xy.y;
|
if(my >= s.max.y)
|
||||||
if(my < s.min.y)
|
my = s.max.y;
|
||||||
my = s.min.y;
|
if(!eqpt(mouse->xy, Pt(x, my))){
|
||||||
if(my >= s.max.y)
|
moveto(mousectl, Pt(x, my));
|
||||||
my = s.max.y;
|
readmouse(mousectl); /* absorb event generated by moveto() */
|
||||||
if(!eqpt(mouse->xy, Pt(x, my))){
|
|
||||||
moveto(mousectl, Pt(x, my));
|
|
||||||
readmouse(mousectl); /* absorb event generated by moveto() */
|
|
||||||
}
|
|
||||||
if(but == 2){
|
|
||||||
y = my;
|
|
||||||
if(y > s.max.y-2)
|
|
||||||
y = s.max.y-2;
|
|
||||||
if(t->file->b.nc > 1024*1024)
|
|
||||||
p0 = ((t->file->b.nc>>10)*(y-s.min.y)/h)<<10;
|
|
||||||
else
|
|
||||||
p0 = t->file->b.nc*(y-s.min.y)/h;
|
|
||||||
if(oldp0 != p0)
|
|
||||||
textsetorigin(t, p0, FALSE);
|
|
||||||
oldp0 = p0;
|
|
||||||
readmouse(mousectl);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if(but == 1)
|
|
||||||
p0 = textbacknl(t, t->org, (my-s.min.y)/t->fr.font->height);
|
|
||||||
else
|
|
||||||
p0 = t->org+frcharofpt(&t->fr, Pt(s.max.x, my));
|
|
||||||
if(oldp0 != p0)
|
|
||||||
textsetorigin(t, p0, TRUE);
|
|
||||||
oldp0 = p0;
|
|
||||||
/* debounce */
|
|
||||||
if(first){
|
|
||||||
flushimage(display, 1);
|
|
||||||
sleep(200);
|
|
||||||
nbrecv(mousectl->c, &mousectl->m);
|
|
||||||
first = FALSE;
|
|
||||||
}
|
|
||||||
scrsleep(80);
|
|
||||||
}
|
}
|
||||||
|
if(but == 2){
|
||||||
|
y = my;
|
||||||
|
p0 = (vlong)t->file->b.nc*(y-s.min.y)/h;
|
||||||
|
if(p0 >= t->q1)
|
||||||
|
p0 = textbacknl(t, p0, 2);
|
||||||
|
if(oldp0 != p0)
|
||||||
|
textsetorigin(t, p0, FALSE);
|
||||||
|
oldp0 = p0;
|
||||||
|
readmouse(mousectl);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(but == 1)
|
||||||
|
p0 = textbacknl(t, t->org, (my-s.min.y)/t->fr.font->height);
|
||||||
|
else
|
||||||
|
p0 = t->org+frcharofpt(&t->fr, Pt(s.max.x, my));
|
||||||
|
if(oldp0 != p0)
|
||||||
|
textsetorigin(t, p0, TRUE);
|
||||||
|
oldp0 = p0;
|
||||||
|
/* debounce */
|
||||||
|
if(first){
|
||||||
|
flushimage(display, 1);
|
||||||
|
sleep(200);
|
||||||
|
nbrecv(mousectl->c, &mousectl->m);
|
||||||
|
first = FALSE;
|
||||||
|
}
|
||||||
|
scrsleep(80);
|
||||||
}while(mouse->buttons & (1<<(but-1)));
|
}while(mouse->buttons & (1<<(but-1)));
|
||||||
while(mouse->buttons)
|
while(mouse->buttons)
|
||||||
readmouse(mousectl);
|
readmouse(mousectl);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue