frame.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
---
frame.h (2791B)
---
1 /* Copyright (c) 1998 Lucent Technologies - All rights reserved. */
2
3 typedef struct Frbox Frbox;
4 typedef struct Frame Frame;
5
6 struct Frbox
7 {
8 int64_t wid; /* in pixels */
9 int64_t nrune; /* <0 ==> negate and treat as break char */
10 union{
11 uint8_t *ptr;
12 struct{
13 int16_t bc; /* break char */
14 int16_t minwid;
15 } b;
16 } a;
17 };
18
19 /* note that we track background color, but not foreground
20 * this is because the foreground color is the same for all frames
21 */
22 struct Frame
23 {
24 uint64_t bg; /* background color */
25 XftFont *font; /* of chars in the frame */
26 Bitmap *b; /* on which frame appears */
27 Rectangle r; /* in which text appears */
28 Rectangle entire; /* of full frame */
29 Frbox *box;
30 uint64_t p0, p1; /* selection */
31 int16_t left; /* left edge of text */
32 uint16_t nbox, nalloc;
33 uint16_t maxtab; /* max size of tab, in pixels */
34 uint16_t fheight; /* font height, in pixels */
35 uint16_t nchars; /* # runes in frame */
36 uint16_t nlines; /* # lines with text */
37 uint16_t maxlines; /* total # lines in frame */
38 bool lastlinefull; /* last line fills frame */
39 bool modified; /* changed since frselect() */
40 };
41
42 uint64_t frcharofpt(Frame*, Point);
43 Point frptofchar(Frame*, uint64_t);
44 int frdelete(Frame*, uint64_t, uint64_t);
45 void frinsert(Frame*, wchar_t*, wchar_t*, uint64_t);
46 void frselect(Frame*, Mouse*);
47 void frselectp(Frame*, Fcode);
48 void frselectf(Frame*, Point, Point, Fcode);
49 void frinit(Frame*, Rectangle, XftFont*, Bitmap*, uint64_t);
50 void frsetrects(Frame*, Rectangle, Bitmap*);
51 void frclear(Frame*);
52 void frgetmouse(void);
53
54 uint8_t *_frallocstr(unsigned);
55 void _frinsure(Frame*, int, unsigned);
56 Point _frdraw(Frame*, Point);
57 void _frgrowbox(Frame*, int);
58 void _frfreebox(Frame*, int, int);
59 void _frmergebox(Frame*, int);
60 void _frdelbox(Frame*, int, int);
61 void _frsplitbox(Frame*, int, int);
62 int _frfindbox(Frame*, int, uint64_t, uint64_t);
63 void _frclosebox(Frame*, int, int);
64 int _frcanfit(Frame*, Point, Frbox*);
65 void _frcklinewrap(Frame*, Point*, Frbox*);
66 void _frcklinewrap0(Frame*, Point*, Frbox*);
67 void _fradvance(Frame*, Point*, Frbox*);
68 int _frnewwid(Frame*, Point, Frbox*);
69 void _frclean(Frame*, Point, int, int);
70 void _frredraw(Frame*, Point);
71 void _fraddbox(Frame*, int, int);
72 Point _frptofcharptb(Frame*, uint64_t, Point, int);
73 Point _frptofcharnb(Frame*, uint64_t, int);
74 int _frstrlen(Frame*, int);
75
76 extern int tabwidth;
77
78 #define NRUNE(b) ((b)->nrune<0? 1 : (b)->nrune)
79 #define NBYTE(b) strlen((char*)(b)->a.ptr)