Add pop-up menu in lens. [rsc] --rw-rw-r-- M 320859 glenda sys 1272 Oct 27 11:11 sys/man/1/lens /n/sourcesdump/2005/1027/plan9/sys/man/1/lens:37,42 - /n/sourcesdump/2005/1028/plan9/sys/man/1/lens:37,44 To make counting pixels easier, typing a .B g toggles whether a checkerboard grid is imposed on the magnified area. + .PP + Button 3 brings up a menu of actions. .SH SOURCE .B /sys/src/cmd/lens.c .SH BUGS [rsc] --rw-rw-r-- M 320859 glenda sys 5109 Oct 27 11:10 sys/src/cmd/lens.c /n/sourcesdump/2005/1027/plan9/sys/src/cmd/lens.c:8,13 - /n/sourcesdump/2005/1028/plan9/sys/src/cmd/lens.c:8,36 Maxmag = 16 }; + enum { + Mzoom, + Munzoom, + Mgrid, + Mredraw, + Mexit + }; + + char *menustr[] = { + "zoom", + "unzoom", + "grid", + "redraw", + "exit", + nil + }; + + Menu menu = { + menustr, + nil, + -1 + }; + Point lastp; Image *red; Image *tmp; /n/sourcesdump/2005/1027/plan9/sys/src/cmd/lens.c:86,95 - /n/sourcesdump/2005/1028/plan9/sys/src/cmd/lens.c:109,121 case Ekeyboard: switch(e.kbdc){ case 'q': + case 0x7f: case '\04': + caseexit: exits(nil); case '=': case '+': + casezoom: if(mag < Maxmag){ mag++; makegrid(); /n/sourcesdump/2005/1027/plan9/sys/src/cmd/lens.c:97,102 - /n/sourcesdump/2005/1028/plan9/sys/src/cmd/lens.c:123,129 } break; case 'g': + casegrid: showgrid = !showgrid; makegrid(); drawit(); /n/sourcesdump/2005/1027/plan9/sys/src/cmd/lens.c:103,108 - /n/sourcesdump/2005/1028/plan9/sys/src/cmd/lens.c:130,136 break; case '-': case '_': + caseunzoom: if(mag > 1){ mag--; makegrid(); /n/sourcesdump/2005/1027/plan9/sys/src/cmd/lens.c:111,116 - /n/sourcesdump/2005/1028/plan9/sys/src/cmd/lens.c:139,145 break; case '.': case ' ': + caseredraw: drawit(); break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case'0': /n/sourcesdump/2005/1027/plan9/sys/src/cmd/lens.c:121,134 - /n/sourcesdump/2005/1028/plan9/sys/src/cmd/lens.c:150,174 drawit(); break; } - if(e.kbdc == 'q' || e.kbdc == '\04') - exits(nil); break; case Emouse: - if(e.mouse.buttons){ + if(e.mouse.buttons & 1){ lastp = e.mouse.xy; drawit(); } + if(e.mouse.buttons & 4) + switch(emenuhit(3, &e.mouse, &menu)){ + case Mzoom: + goto casezoom; + case Munzoom: + goto caseunzoom; + case Mgrid: + goto casegrid; + case Mredraw: + goto caseredraw; + case Mexit: + goto caseexit; + } break; } }