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) 94