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->body;
|
||||
}
|
||||
/* scrollr drops below w->r on low windows */
|
||||
if(ptinrect(p, w->body.scrollr))
|
||||
return &w->body;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,48 +117,41 @@ textscroll(Text *t, int but)
|
|||
first = TRUE;
|
||||
do{
|
||||
flushimage(display, 1);
|
||||
if(mouse->xy.x<s.min.x || s.max.x<=mouse->xy.x){
|
||||
readmouse(mousectl);
|
||||
}else{
|
||||
my = mouse->xy.y;
|
||||
if(my < s.min.y)
|
||||
my = s.min.y;
|
||||
if(my >= s.max.y)
|
||||
my = s.max.y;
|
||||
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);
|
||||
my = mouse->xy.y;
|
||||
if(my < s.min.y)
|
||||
my = s.min.y;
|
||||
if(my >= s.max.y)
|
||||
my = s.max.y;
|
||||
if(!eqpt(mouse->xy, Pt(x, my))){
|
||||
moveto(mousectl, Pt(x, my));
|
||||
readmouse(mousectl); /* absorb event generated by moveto() */
|
||||
}
|
||||
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)
|
||||
readmouse(mousectl);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue