From owner-freebsd-bugs Wed Mar 20 12:10:34 2002 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id ED6BA37B417 for ; Wed, 20 Mar 2002 12:10:01 -0800 (PST) Received: (from gnats@localhost) by freefall.freebsd.org (8.11.6/8.11.6) id g2KKA1e77142; Wed, 20 Mar 2002 12:10:01 -0800 (PST) (envelope-from gnats) Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id E4B8737B400 for ; Wed, 20 Mar 2002 12:07:39 -0800 (PST) Received: (from nobody@localhost) by freefall.freebsd.org (8.11.6/8.11.6) id g2KK7dK76857; Wed, 20 Mar 2002 12:07:39 -0800 (PST) (envelope-from nobody) Message-Id: <200203202007.g2KK7dK76857@freefall.freebsd.org> Date: Wed, 20 Mar 2002 12:07:39 -0800 (PST) From: "Mikhail A. Vladimirov" To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-1.0 Subject: misc/36143: Dynamic (non linear) mouse acceleration added to moused Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >Number: 36143 >Category: misc >Synopsis: Dynamic (non linear) mouse acceleration added to moused >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Wed Mar 20 12:10:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Mikhail A. Vladimirov >Release: 4.4-STABLE >Organization: Moscow State University >Environment: FreeBSD stalker.hackers 4.5-STABLE FreeBSD 4.5-STABLE #0: Fri Feb 1 18:52:34 MSK 2002 stalker@stalker.hackers:/usr/obj/usr/src/sys/STALKER i386 >Description: Patch for moused, that adds -A twice[,quadro] flag. Mouse movement speed accelerated twice, if mouse moves more then _twice_ steps a time. And when mouse moves more, then quadro steps a time, it accelerated four times. I changed moused.8 manual page too, but there may be some typos. I use resolution 1280x960 and I think, that this patch realy did things better. I found -F 200 -A 4,8 setting very suitable for my Logitech M-S48a mouse. >How-To-Repeat: Apply this patch, recompile and restart moused. :) >Fix: diff -c -r orig/moused.8 moused/moused.8 *** orig/moused.8 Wed Mar 20 22:46:59 2002 --- moused/moused.8 Wed Mar 20 22:40:22 2002 *************** *** 44,49 **** --- 44,50 ---- .Op Fl r Ar resolution .Op Fl S Ar baudrate .Op Fl a Ar X Ns Op , Ns Ar Y + .Op Fl A Ar twice Ns Op , Ns Ar quadro .Op Fl C Ar threshold .Op Fl m Ar N=M .Op Fl w Ar N *************** *** 161,166 **** --- 162,179 ---- Values less than 1.0 slow down movement, values greater than 1.0 speed it up. Specifying only one value sets the acceleration for both axes. + .It Fl A Ar twice Ns Op , Ns Ar quadro + Accelerate the mouse input dynamically. + If mouse moves more then + .Ar twice + steps at a time, extra movement accelerated twice. + If mouse moves more then + .Ar quadro + steps at a time, extra movement accelerated four times. + If the + .Fl a + option is present, the dynamic acceleration applies before + linear acceleration. .It Fl c Some mice report middle button down events as if the left and right buttons are being pressed. diff -c -r orig/moused.c moused/moused.c *** orig/moused.c Wed Mar 20 22:46:59 2002 --- moused/moused.c Wed Mar 20 22:21:31 2002 *************** *** 389,394 **** --- 389,396 ---- mousemode_t mode; /* protocol information */ float accelx; /* Acceleration in the X axis */ float accely; /* Acceleration in the Y axis */ + int twice; /* Twice acceleration limit in pixels */ + int quadro; /* Quadro acceleration limit in pixels */ } rodent = { flags : 0, portname : NULL, *************** *** 407,412 **** --- 409,416 ---- button2timeout : DFLT_BUTTON2TIMEOUT, accelx : 1.0, accely : 1.0, + twice : 10000, + quadro : 10000 }; /* button status */ *************** *** 474,479 **** --- 478,484 ---- static void hup(int sig); static void cleanup(int sig); static void usage(void); + static int dynaccel (int delta); static int r_identify(void); static char *r_if(int type); *************** *** 513,519 **** for (i = 0; i < MOUSE_MAXBUTTON; ++i) mstate[i] = &bstate[i]; ! while((c = getopt(argc,argv,"3C:DE:F:I:PRS:a:cdfhi:l:m:p:r:st:w:z:")) != -1) switch(c) { case '3': --- 518,524 ---- for (i = 0; i < MOUSE_MAXBUTTON; ++i) mstate[i] = &bstate[i]; ! while((c = getopt(argc,argv,"3C:DE:F:I:PRS:a:A:cdfhi:l:m:p:r:st:w:z:")) != -1) switch(c) { case '3': *************** *** 532,538 **** case 'a': i = sscanf(optarg, "%f,%f", &rodent.accelx, &rodent.accely); if (i == 0) { ! warnx("invalid acceleration argument '%s'", optarg); usage(); } --- 537,543 ---- case 'a': i = sscanf(optarg, "%f,%f", &rodent.accelx, &rodent.accely); if (i == 0) { ! warnx("invalid acceleration argument `%s'", optarg); usage(); } *************** *** 541,546 **** --- 546,560 ---- break; + case 'A': + i = sscanf(optarg, "%d,%d", &rodent.twice, &rodent.quadro); + if (i == 0) { + warnx("invalid dynamic acceleration argument `%s'", optarg); + usage(); + } + + break; + case 'c': rodent.flags |= ChordMiddle; break; *************** *** 943,950 **** if (action2.flags & MOUSE_POSCHANGED) { mouse.operation = MOUSE_MOTION_EVENT; mouse.u.data.buttons = action2.button; ! mouse.u.data.x = action2.dx * rodent.accelx; ! mouse.u.data.y = action2.dy * rodent.accely; mouse.u.data.z = action2.dz; if (debug < 2) ioctl(rodent.cfd, CONS_MOUSECTL, &mouse); --- 957,964 ---- if (action2.flags & MOUSE_POSCHANGED) { mouse.operation = MOUSE_MOTION_EVENT; mouse.u.data.buttons = action2.button; ! mouse.u.data.x = dynaccel(action2.dx) * rodent.accelx; ! mouse.u.data.y = dynaccel(action2.dy) * rodent.accely; mouse.u.data.z = action2.dz; if (debug < 2) ioctl(rodent.cfd, CONS_MOUSECTL, &mouse); *************** *** 1010,1021 **** { fprintf(stderr, "%s\n%s\n%s\n%s\n", "usage: moused [-DRcdfs] [-I file] [-F rate] [-r resolution] [-S baudrate]", ! " [-a X [,Y]] [-C threshold] [-m N=M] [-w N] [-z N]", ! " [-t ] [-3 [-E timeout]] -p ", " moused [-d] -i -p "); exit(1); } /** ** Mouse interface code, courtesy of XFree86 3.1.2. ** --- 1024,1056 ---- { fprintf(stderr, "%s\n%s\n%s\n%s\n", "usage: moused [-DRcdfs] [-I file] [-F rate] [-r resolution] [-S baudrate]", ! " [-a X [,Y]] [-A twice [,quadro]] [-C threshold] [-m N=M]", ! " [-w N] [-z N] [-t ] [-3 [-E timeout]] -p ", " moused [-d] -i -p "); exit(1); } + static int + dynaccel(int delta) + { + int sign=1; + + if (delta<0) + { + sign=-1; + delta=-delta; + } + + if (delta<=rodent.twice) return delta*sign; + + if (delta<=rodent.quadro) + return (rodent.twice+(delta-rodent.twice)*2)*sign; + + return (rodent.twice+ + (rodent.quadro-rodent.twice)*2+ + (delta-rodent.quadro)*4)*sign; + } + /** ** Mouse interface code, courtesy of XFree86 3.1.2. ** *************** *** 2940,2944 **** rodent.mremcfd = -1; } } - --- 2975,2978 ---- >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message