acme: implement position-dependent scroll-wheel scrolling
This brings acme scrolling behaviour in line with that of 9front's rio and sam, where the amount scrolled varies with a vertical position of the pointer within the window, similar to how the scrollbar works. At some point it would be good to implement a line-at-a-time scrolling when the Shift key is pressed, as seen in rio. For this to happen the acme keyboard input needs to be rewritten in terms of /dev/kbd instead of relying on keyboard(2) -- that is, the /dev/cons interface.
This commit is contained in:
parent
db6e26d55e
commit
57362e0c8c
2 changed files with 8 additions and 15 deletions
|
@ -513,8 +513,13 @@ mousethread(void *)
|
||||||
but = 2;
|
but = 2;
|
||||||
else if(m.buttons == 4)
|
else if(m.buttons == 4)
|
||||||
but = 3;
|
but = 3;
|
||||||
|
else if(m.buttons == 8)
|
||||||
|
but = 4;
|
||||||
|
else if(m.buttons == 16)
|
||||||
|
but = 5;
|
||||||
barttext = t;
|
barttext = t;
|
||||||
if(t->what==Body && ptinrect(m.xy, t->scrollr)){
|
if(t->what==Body && w != nil
|
||||||
|
&& (ptinrect(m.xy, t->scrollr) || (m.buttons & (8|16)))){
|
||||||
if(but){
|
if(but){
|
||||||
winlock(w, 'M');
|
winlock(w, 'M');
|
||||||
t->eq0 = ~0;
|
t->eq0 = ~0;
|
||||||
|
@ -523,18 +528,6 @@ mousethread(void *)
|
||||||
}
|
}
|
||||||
goto Continue;
|
goto Continue;
|
||||||
}
|
}
|
||||||
/* scroll buttons, wheels, etc. */
|
|
||||||
if(t->what==Body && w != nil && (m.buttons & (8|16))){
|
|
||||||
if(m.buttons & 8)
|
|
||||||
but = Kscrolloneup;
|
|
||||||
else
|
|
||||||
but = Kscrollonedown;
|
|
||||||
winlock(w, 'M');
|
|
||||||
t->eq0 = ~0;
|
|
||||||
texttype(t, but);
|
|
||||||
winunlock(w);
|
|
||||||
goto Continue;
|
|
||||||
}
|
|
||||||
if(ptinrect(m.xy, t->scrollr)){
|
if(ptinrect(m.xy, t->scrollr)){
|
||||||
if(but){
|
if(but){
|
||||||
if(t->what == Columntag)
|
if(t->what == Columntag)
|
||||||
|
|
|
@ -132,7 +132,7 @@ textscroll(Text *t, int but)
|
||||||
readmouse(mousectl);
|
readmouse(mousectl);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(but == 1)
|
if(but == 1 || but == 4)
|
||||||
p0 = textbacknl(t, t->org, (my-s.min.y)/t->font->height);
|
p0 = textbacknl(t, t->org, (my-s.min.y)/t->font->height);
|
||||||
else
|
else
|
||||||
p0 = t->org+frcharofpt(t, Pt(s.max.x, my));
|
p0 = t->org+frcharofpt(t, Pt(s.max.x, my));
|
||||||
|
@ -140,7 +140,7 @@ textscroll(Text *t, int but)
|
||||||
textsetorigin(t, p0, TRUE);
|
textsetorigin(t, p0, TRUE);
|
||||||
oldp0 = p0;
|
oldp0 = p0;
|
||||||
/* debounce */
|
/* debounce */
|
||||||
if(first){
|
if(first && but < 4){
|
||||||
flushimage(display, 1);
|
flushimage(display, 1);
|
||||||
sleep(200);
|
sleep(200);
|
||||||
nbrecv(mousectl->c, &mousectl->Mouse);
|
nbrecv(mousectl->c, &mousectl->Mouse);
|
||||||
|
|
Loading…
Reference in a new issue