19 frselect(Frame *f, Mousectl *mc) /* when called, button 1 is down */
22 Point mp, pt0, pt1, qt;
29 frdrawsel(f, frptofchar(f, f->p0), f->p0, f->p1, 0);
30 p0 = p1 = frcharofpt(f, mp);
33 pt0 = frptofchar(f, p0);
34 pt1 = frptofchar(f, p1);
35 frdrawsel(f, pt0, p0, p1, 1);
40 if(mp.y < f->r.min.y){
41 (*f->scroll)(f, -(f->r.min.y-mp.y)/(int)f->font->height-1);
45 }else if(mp.y > f->r.max.y){
46 (*f->scroll)(f, (mp.y-f->r.max.y)/(int)f->font->height+1);
52 if(reg != region(p1, p0))
53 q = p0, p0 = p1, p1 = q; /* undo the swap that will happen below */
54 pt0 = frptofchar(f, p0);
55 pt1 = frptofchar(f, p1);
59 q = frcharofpt(f, mp);
61 if(reg != region(q, p0)){ /* crossed starting point; reset */
63 frdrawsel(f, pt0, p0, p1, 0);
65 frdrawsel(f, pt1, p1, p0, 0);
70 frdrawsel(f, pt0, p0, p1, 1);
72 qt = frptofchar(f, q);
75 frdrawsel(f, pt1, p1, q, 1);
77 frdrawsel(f, qt, q, p1, 0);
80 frdrawsel(f, pt1, p1, q, 0);
82 frdrawsel(f, qt, q, p1, 1);
98 flushimage(f->display, 1);
102 }while(mc->m.buttons == b);
106 frselectpaint(Frame *f, Point p0, Point p1, Image *col)
113 q0.y += f->font->height;
114 q1.y += f->font->height;
115 n = (p1.y-p0.y)/f->font->height;
117 drawerror(f->display, "frselectpaint b==0");
118 if(p0.y == f->r.max.y)
121 draw(f->b, Rpt(p0, q1), col, nil, ZP);
123 if(p0.x >= f->r.max.x)
125 draw(f->b, Rect(p0.x, p0.y, f->r.max.x, q0.y), col, nil, ZP);
127 draw(f->b, Rect(f->r.min.x, q0.y, f->r.max.x, p1.y),
129 draw(f->b, Rect(f->r.min.x, p1.y, q1.x, q1.y),