Introduction
Introduction Statistics Contact Development Disclaimer Help
frselect.c - sam - An updated version of the sam text editor.
git clone git://vernunftzentrum.de/sam.git
Log
Files
Refs
LICENSE
---
frselect.c (2426B)
---
1 /* Copyright (c) 1998 Lucent Technologies - All rights reserved. */
2 #include <u.h>
3 #include <libg.h>
4 #include <frame.h>
5
6 void
7 frselect(Frame *f, Mouse *m) /* when called, button 1 is down */
8 {
9 uint64_t p0, p1, q;
10 Point mp, pt0, pt1, qt;
11
12 mp = m->xy;
13
14 Again:
15 f->modified = 0;
16 frselectp(f, F&~D);
17 p0 = p1 = frcharofpt(f, mp);
18 pt0 = frptofchar(f, p0);
19 pt1 = frptofchar(f, p1);
20 frselectf(f, pt0, pt1, F&~D);
21 do{
22 if(f->modified) /* special hack so 8½ can frselect in parallel …
23 goto Again;
24 q = frcharofpt(f, m->xy);
25 if(p1 != q){
26 if(p0 == p1)
27 frselectf(f, pt0, pt1, F&~D);
28 qt = frptofchar(f, q);
29 if(p1 < q)
30 frselectf(f, pt1, qt, F&~D);
31 else
32 frselectf(f, qt, pt1, F&~D);
33 p1 = q;
34 pt1 = qt;
35 if(p0 == p1)
36 frselectf(f, pt0, pt1, F&~D);
37 }
38 f->modified = 0;
39 if(p0 < p1)
40 f->p0 = p0, f->p1 = p1;
41 else
42 f->p0 = p1, f->p1 = p0;
43 frgetmouse();
44 }while((m->buttons & 7) == 1);
45 }
46 /* it is assumed p0<=p1 and both were generated by frptofchar() */
47 void
48 frselectf(Frame *f, Point p0, Point p1, Fcode c)
49 {
50 int n;
51 Point q0, q1;
52
53 if(p0.x == f->left)
54 p0.x = f->r.min.x;
55 if(p1.x == f->left)
56 p1.x = f->r.min.x;
57 q0 = p0;
58 q1 = p1;
59 q0.y += f->fheight;
60 q1.y += f->fheight;
61 n = (p1.y-p0.y)/f->fheight;
62 if(f->b == 0)
63 berror("frselectf b==0");
64 if(p0.y == f->r.max.y)
65 return;
66 if(n == 0){
67 if(p0.x == p1.x){
68 if(p0.x == f->r.min.x)
69 q1.x++;
70 else
71 p0.x--;
72 }
73 bitblt2(f->b, p0, f->b, Rpt(p0, q1), c, 0, f->bg);
74 }else{
75 if(p0.x >= f->r.max.x)
76 p0.x = f->r.max.x-1;
77 bitblt2(f->b, p0, f->b, Rect(p0.x, p0.y, f->r.max.x, q0.y), c, 0…
78 if(n > 1)
79 bitblt2(f->b, Pt(f->r.min.x, q0.y),
80 f->b, Rect(f->r.min.x, q0.y, f->r.max.x, p1.y), c, 0, f-…
81 bitblt2(f->b, Pt(f->r.min.x, p1.y),
82 f->b, Rect(f->r.min.x, p1.y, q1.x, q1.y), c, 0, f->bg);
83 }
84 }
85
86 void
87 frselectp(Frame *f, Fcode c)
88 {
89 Point pt0, pt1;
90
91 pt0 = frptofchar(f, f->p0);
92 pt1 = (f->p0==f->p1)? pt0 : frptofchar(f, f->p1);
93 frselectf(f, pt0, pt1, c);
94 }
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.