Snap mouse to border when grabbing to resize. [rsc] --rw-rw-r-- M 4315 glenda sys 22788 Nov 9 16:18 sys/src/cmd/rio/rio.c /n/sourcesdump/2005/1109/plan9/sys/src/cmd/rio/rio.c:887,892 - /n/sourcesdump/2005/1110/plan9/sys/src/cmd/rio/rio.c:887,924 return ni; } + Point + cornerpt(Rectangle r, Point p, int which) + { + switch(which){ + case 0: /* top left */ + p = Pt(r.min.x, r.min.y); + break; + case 2: /* top right */ + p = Pt(r.max.x,r.min.y); + break; + case 6: /* bottom left */ + p = Pt(r.min.x, r.max.y); + break; + case 8: /* bottom right */ + p = Pt(r.max.x, r.max.y); + break; + case 1: /* top edge */ + p = Pt(p.x,r.min.y); + break; + case 5: /* right edge */ + p = Pt(r.max.x, p.y); + break; + case 7: /* bottom edge */ + p = Pt(p.x, r.max.y); + break; + case 3: /* left edge */ + p = Pt(r.min.x, p.y); + break; + } + return p; + } + Rectangle whichrect(Rectangle r, Point p, int which) { /n/sourcesdump/2005/1109/plan9/sys/src/cmd/rio/rio.c:928,935 - /n/sourcesdump/2005/1110/plan9/sys/src/cmd/rio/rio.c:960,970 int which, but; p = mouse->xy; - startp = p; + which = whichcorner(w, p); + startp = cornerpt(w->screenr, p, which); + wmovemouse(w, startp); + readmouse(mousectl); r = whichrect(w->screenr, p, which); drawborder(r, 1); or = r;