2 |
- |
1 |
#pragma src "/sys/src/libframe"
|
|
|
2 |
#pragma lib "libframe.a"
|
|
|
3 |
|
|
|
4 |
typedef struct Frbox Frbox;
|
|
|
5 |
typedef struct Frame Frame;
|
|
|
6 |
|
|
|
7 |
enum{
|
|
|
8 |
BACK,
|
|
|
9 |
HIGH,
|
|
|
10 |
BORD,
|
|
|
11 |
TEXT,
|
|
|
12 |
HTEXT,
|
|
|
13 |
NCOL
|
|
|
14 |
};
|
|
|
15 |
|
|
|
16 |
#define FRTICKW 3
|
|
|
17 |
|
|
|
18 |
struct Frbox
|
|
|
19 |
{
|
|
|
20 |
long wid; /* in pixels */
|
|
|
21 |
long nrune; /* <0 ==> negate and treat as break char */
|
|
|
22 |
union{
|
|
|
23 |
uchar *ptr;
|
|
|
24 |
struct{
|
|
|
25 |
short bc; /* break char */
|
|
|
26 |
short minwid;
|
|
|
27 |
};
|
|
|
28 |
};
|
|
|
29 |
};
|
|
|
30 |
|
|
|
31 |
struct Frame
|
|
|
32 |
{
|
|
|
33 |
Font *font; /* of chars in the frame */
|
|
|
34 |
Display *display; /* on which frame appears */
|
|
|
35 |
Image *b; /* on which frame appears */
|
|
|
36 |
Image *cols[NCOL]; /* text and background colors */
|
|
|
37 |
Rectangle r; /* in which text appears */
|
|
|
38 |
Rectangle entire; /* of full frame */
|
|
|
39 |
void (*scroll)(Frame*, int); /* scroll function provided by application */
|
|
|
40 |
Frbox *box;
|
|
|
41 |
ulong p0, p1; /* selection */
|
|
|
42 |
ushort nbox, nalloc;
|
|
|
43 |
ushort maxtab; /* max size of tab, in pixels */
|
|
|
44 |
ushort nchars; /* # runes in frame */
|
|
|
45 |
ushort nlines; /* # lines with text */
|
|
|
46 |
ushort maxlines; /* total # lines in frame */
|
|
|
47 |
ushort lastlinefull; /* last line fills frame */
|
|
|
48 |
ushort modified; /* changed since frselect() */
|
|
|
49 |
Image *tick; /* typing tick */
|
|
|
50 |
Image *tickback; /* saved image under tick */
|
|
|
51 |
int ticked; /* flag: is tick onscreen? */
|
|
|
52 |
};
|
|
|
53 |
|
|
|
54 |
ulong frcharofpt(Frame*, Point);
|
|
|
55 |
Point frptofchar(Frame*, ulong);
|
|
|
56 |
int frdelete(Frame*, ulong, ulong);
|
|
|
57 |
void frinsert(Frame*, Rune*, Rune*, ulong);
|
|
|
58 |
void frselect(Frame*, Mousectl*);
|
|
|
59 |
void frselectpaint(Frame*, Point, Point, Image*);
|
|
|
60 |
void frdrawsel(Frame*, Point, ulong, ulong, int);
|
|
|
61 |
Point frdrawsel0(Frame*, Point, ulong, ulong, Image*, Image*);
|
|
|
62 |
void frinit(Frame*, Rectangle, Font*, Image*, Image**);
|
|
|
63 |
void frsetrects(Frame*, Rectangle, Image*);
|
|
|
64 |
void frclear(Frame*, int);
|
|
|
65 |
|
|
|
66 |
uchar *_frallocstr(Frame*, unsigned);
|
|
|
67 |
void _frinsure(Frame*, int, unsigned);
|
|
|
68 |
Point _frdraw(Frame*, Point);
|
|
|
69 |
void _frgrowbox(Frame*, int);
|
|
|
70 |
void _frfreebox(Frame*, int, int);
|
|
|
71 |
void _frmergebox(Frame*, int);
|
|
|
72 |
void _frdelbox(Frame*, int, int);
|
|
|
73 |
void _frsplitbox(Frame*, int, int);
|
|
|
74 |
int _frfindbox(Frame*, int, ulong, ulong);
|
|
|
75 |
void _frclosebox(Frame*, int, int);
|
|
|
76 |
int _frcanfit(Frame*, Point, Frbox*);
|
|
|
77 |
void _frcklinewrap(Frame*, Point*, Frbox*);
|
|
|
78 |
void _frcklinewrap0(Frame*, Point*, Frbox*);
|
|
|
79 |
void _fradvance(Frame*, Point*, Frbox*);
|
|
|
80 |
int _frnewwid(Frame*, Point, Frbox*);
|
|
|
81 |
int _frnewwid0(Frame*, Point, Frbox*);
|
|
|
82 |
void _frclean(Frame*, Point, int, int);
|
|
|
83 |
void _frdrawtext(Frame*, Point, Image*, Image*);
|
|
|
84 |
void _fraddbox(Frame*, int, int);
|
|
|
85 |
Point _frptofcharptb(Frame*, ulong, Point, int);
|
|
|
86 |
Point _frptofcharnb(Frame*, ulong, int);
|
|
|
87 |
int _frstrlen(Frame*, int);
|
|
|
88 |
void frtick(Frame*, Point, int);
|
|
|
89 |
void frinittick(Frame*);
|
|
|
90 |
void frredraw(Frame*);
|
|
|
91 |
|
|
|
92 |
#define NRUNE(b) ((b)->nrune<0? 1 : (b)->nrune)
|
|
|
93 |
#define NBYTE(b) strlen((char*)(b)->ptr)
|