libg.h - sam - An updated version of the sam text editor.
(HTM) git clone git://vernunftzentrum.de/sam.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
libg.h (6115B)
---
1 /* Copyright (c) 1998 Lucent Technologies - All rights reserved. */
2 #ifndef _LIBG_H
3 #define _LIBG_H
4
5 /*
6 * Like Plan9's libg.h, but suitable for inclusion on non-Plan9 machines
7 */
8
9 #include <X11/Xft/Xft.h>
10
11 enum{ EMAXMSG = 128+8192 }; /* max event size */
12
13 /*
14 * Cursors
15 */
16
17 enum{
18 DefaultCursor,
19 ArrowCursor,
20 BullseyeCursor,
21 SweepCursor,
22 DeadCursor,
23 LockCursor
24 };
25
26 /*
27 * Types
28 */
29
30 typedef struct Bitmap Bitmap;
31 typedef struct Point Point;
32 typedef struct Rectangle Rectangle;
33 typedef struct Keystroke Keystroke;
34 typedef struct Mouse Mouse;
35 typedef struct Menu Menu;
36 typedef struct Event Event;
37 typedef struct RGB RGB;
38
39 struct Point
40 {
41 int x;
42 int y;
43 };
44
45 struct Rectangle
46 {
47 Point min;
48 Point max;
49 };
50
51 struct Bitmap
52 {
53 Rectangle r; /* rectangle in data area, local coords */
54 Rectangle clipr; /* clipping region */
55 int ldepth;
56 int id; /* as known by the X server */
57 Bitmap *cache; /* zero; distinguishes bitmap from layer */
58 XftDraw *fd; /* font drawable */
59 int flag; /* flag used by X implementation of libg */
60 };
61
62 struct Mouse
63 {
64 int buttons; /* bit array: LMR=124 */
65 Point xy;
66 uint64_t msec;
67 char *a;
68 };
69
70 struct Keystroke
71 {
72 int k;
73 int c;
74 int t;
75 Point p;
76 const char *a;
77 };
78
79 struct Menu
80 {
81 char **item;
82 char *(*gen)(int);
83 int lasthit;
84 };
85
86 struct Event
87 {
88 Keystroke keystroke;
89 Mouse mouse;
90 int n; /* number of characters in mesage */
91 unsigned char data[EMAXMSG]; /* message from an arbitrary file descriptor */
92 };
93
94 struct RGB
95 {
96 uint64_t red;
97 uint64_t green;
98 uint64_t blue;
99 };
100
101 enum{
102 Knone, /* invalid command type */
103 Kdefault, /* perform default command action */
104 Kraw, /* insert raw character code, subject to transformation (e.g. tab expansion) */
105 Kcommand, /* execute command (see below) */
106 Kend /* mark the end of a command list */
107 };
108
109 enum{
110 Cnone, /* no command */
111 Cdefault, /* default action */
112 Csysmax
113 };
114
115 enum{
116 Tcurrent, /* command is sent to focused layer */
117 Tmouse /* command is sent to layer containing the mouse */
118 };
119
120 /*
121 * Codes for bitblt etc.
122 *
123 * D
124 * 0 1
125 * ---------
126 * 0 | 1 | 2 |
127 * S |---|---|
128 * 1 | 4 | 8 |
129 * ---------
130 *
131 * Usually used as D|S; DorS is so tracebacks are readable.
132 */
133 typedef
134 enum Fcode
135 {
136 Zero = 0x0,
137 DnorS = 0x1,
138 DandnotS = 0x2,
139 notS = 0x3,
140 notDandS = 0x4,
141 notD = 0x5,
142 DxorS = 0x6,
143 DnandS = 0x7,
144 DandS = 0x8,
145 DxnorS = 0x9,
146 D = 0xA,
147 DornotS = 0xB,
148 S = 0xC,
149 notDorS = 0xD,
150 DorS = 0xE,
151 F = 0xF
152 } Fcode;
153
154 /*
155 * Miscellany
156 */
157
158 typedef void (*Errfunc)(char *);
159
160 extern void addlatin(char, char, int16_t);
161 extern Point add(Point, Point);
162 extern Point sub(Point, Point);
163 extern Point mul(Point, int);
164 extern Point divpt(Point, int);
165 extern Rectangle rsubp(Rectangle, Point);
166 extern Rectangle raddp(Rectangle, Point);
167 extern Rectangle inset(Rectangle, int);
168 extern Rectangle rmul(Rectangle, int);
169 extern Rectangle rdiv(Rectangle, int);
170 extern Rectangle rshift(Rectangle, int);
171 extern Rectangle rcanon(Rectangle);
172 extern Bitmap* balloc(Rectangle, int);
173 extern void bfree(Bitmap*);
174 extern int rectclip(Rectangle*, Rectangle);
175 extern void xtbinit(Errfunc, char*, int*, char**, char**);
176 extern void bclose(void);
177 extern void berror(char*);
178 extern void bitblt2(Bitmap*, Point, Bitmap*, Rectangle, Fcode, uint64_t, uint64_t);
179 extern void bitblt(Bitmap*, Point, Bitmap*, Rectangle, Fcode);
180
181 extern Point string(Bitmap*, Point, XftFont*, char*, Fcode);
182 extern int64_t strwidth(XftFont*, char*);
183 extern int64_t charwidth(XftFont*, wchar_t);
184 extern void texture(Bitmap*, Rectangle, Bitmap*, Fcode);
185 extern void wrbitmap(Bitmap*, int, int, unsigned char*);
186 extern int ptinrect(Point, Rectangle);
187 extern int rectXrect(Rectangle, Rectangle);
188 extern int eqpt(Point, Point);
189 extern int eqrect(Rectangle, Rectangle);
190 extern void border(Bitmap*, Rectangle, int, Fcode, uint64_t);
191 extern void cursorswitch(unsigned int);
192 extern void cursorset(Point);
193 extern Rectangle bscreenrect(Rectangle*);
194 extern void bflush(void);
195
196 extern int clipr(Bitmap*, Rectangle);
197 extern int scrpix(int*,int*);
198 extern uint64_t getbg(void);
199
200 extern void einit(uint64_t);
201 extern uint64_t estart(uint64_t, int, size_t, bool);
202
203 extern uint64_t event(Event*);
204 extern uint64_t eread(uint64_t, Event*);
205 extern Mouse emouse(void);
206 extern Keystroke ekbd(void);
207 extern void pushkbd(int c);
208 extern int ecanread(uint64_t);
209 extern int ecanmouse(void);
210 extern int ecankbd(void);
211 extern void ereshaped(Rectangle); /* supplied by user */
212
213 extern int menuhit(int, Mouse*, Menu*);
214 extern Rectangle getrect(int, Mouse*);
215
216 extern void rdcolmap(Bitmap*, RGB*);
217 extern void wrcolmap(Bitmap*, RGB*);
218 extern void raisewindow(void);
219
220 /* Extra functions supplied by libXg */
221 extern int snarfswap(char*, int, char**);
222
223 enum{
224 Emouse = 1,
225 Ekeyboard = 2
226 };
227
228 extern Point Pt(int, int);
229 extern Rectangle Rect(int, int, int, int);
230 extern Rectangle Rpt(Point, Point);
231
232
233 #define Dx(r) ((r).max.x-(r).min.x)
234 #define Dy(r) ((r).max.y-(r).min.y)
235
236
237 extern Bitmap screen;
238 extern XftFont *font;
239 extern XftColor fontcolor;
240 extern XftColor bgcolor;
241
242 #define BGSHORT(p) (((p)[0]<<0) | ((p)[1]<<8))
243 #define BGLONG(p) ((BGSHORT(p)<<0) | (BGSHORT(p+2)<<16))
244 #define BPSHORT(p, v) ((p)[0]=(v), (p)[1]=((v)>>8))
245 #define BPLONG(p, v) (BPSHORT(p, (v)), BPSHORT(p+2, (v)>>16))
246
247 extern int installbinding(int, KeySym, int, int, const char *);
248 extern int installchord(int, int, int, int, const char *);
249 extern int removebinding(int, KeySym);
250 extern int removechord(int, int);
251
252 extern char foregroundspec[1024];
253 extern char backgroundspec[1024];
254 extern char borderspec[1024];
255 extern char fontspec[1024];
256 #endif