From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 In-Reply-To: <3aaafc130906302131se1c415bk3fa1dbeace41ce4e@mail.gmail.com> References: <3aaafc130906302131se1c415bk3fa1dbeace41ce4e@mail.gmail.com> Date: Wed, 1 Jul 2009 20:06:46 -0400 Message-ID: <3aaafc130907011706u55835decjcebfadce0076a37f@mail.gmail.com> Subject: Re: Scrolling for plan9port sam From: "J.R. Mauro" To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Cc: rsc@swtch.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Topicbox-Message-UUID: 12c96f2c-ead5-11e9-9d60-3106f5b1d025 Here is a less drunk and better working version of the patch. Scrolling seems to be working perfectly. I hope gmail doesn't eat this patch. = Add scrollwheel support to sam diff -r 5f1b36ecd9db src/cmd/samterm/main.c --- a/src/cmd/samterm/main.c Tue Jun 09 09:26:13 2009 -0700 +++ b/src/cmd/samterm/main.c Wed Jul 01 20:01:37 2009 -0400 @@ -142,6 +142,10 @@ scroll(which, 3); else menu3hit(); + } else if((mousep->buttons&8)) { + scroll(nwhich, 1); + } else if((mousep->buttons&16)) { + scroll(nwhich, 3); } mouseunblock(); } diff -r 5f1b36ecd9db src/cmd/samterm/scroll.c --- a/src/cmd/samterm/scroll.c Tue Jun 09 09:26:13 2009 -0700 +++ b/src/cmd/samterm/scroll.c Wed Jul 01 20:01:37 2009 -0400 @@ -100,7 +100,7 @@ void scroll(Flayer *l, int but) { - int in = 0, oin; + int in = 0, oin, scw = 0; long tot = scrtotal(l); Rectangle scr, r, s, rt; int x, y, my, oy, h; @@ -116,18 +116,21 @@ do{ oin = in; in = abs(x-mousep->xy.x)<=FLSCROLLWID/2; + scw = ((mousep->buttons&8) | (mousep->buttons&16)); if(oin && !in) scrunmark(l, r); - if(in){ + if(in || scw){ scrmark(l, r); oy = y; my = mousep->xy.y; - if(my < s.min.y) - my = s.min.y; - if(my >= s.max.y) - my = s.max.y; - if(!eqpt(mousep->xy, Pt(x, my))) - moveto(mousectl, Pt(x, my)); + if(!scw) { + if(my < s.min.y) + my = s.min.y; + if(my >= s.max.y) + my = s.max.y; + if(!eqpt(mousep->xy, Pt(x, my))) + moveto(mousectl, Pt(x, my)); + } if(but == 1){ p0 = l->origin-frcharofpt(&l->f, Pt(s.max.x, my)); rt = scrpos(l->scroll, p0, p0+l->f.nchars, tot); @@ -148,7 +151,7 @@ } } }while(button(but)); - if(in){ + if(in || scw){ h = s.max.y-s.min.y; scrunmark(l, r); p0 = 0;