xref: /plan9/sys/include/frame.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #pragma	src	"/sys/src/libframe"
23e12c5d1SDavid du Colombier #pragma	lib	"libframe.a"
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier typedef struct Frbox Frbox;
53e12c5d1SDavid du Colombier typedef struct Frame Frame;
63e12c5d1SDavid du Colombier 
73e12c5d1SDavid du Colombier struct Frbox
83e12c5d1SDavid du Colombier {
93e12c5d1SDavid du Colombier 	long		wid;		/* in pixels */
103e12c5d1SDavid du Colombier 	long		nrune;		/* <0 ==> negate and treat as break char */
113e12c5d1SDavid du Colombier 	union{
123e12c5d1SDavid du Colombier 		uchar	*ptr;
133e12c5d1SDavid du Colombier 		struct{
143e12c5d1SDavid du Colombier 			short	bc;	/* break char */
153e12c5d1SDavid du Colombier 			short	minwid;
163e12c5d1SDavid du Colombier 		};
173e12c5d1SDavid du Colombier 	};
183e12c5d1SDavid du Colombier };
193e12c5d1SDavid du Colombier 
203e12c5d1SDavid du Colombier struct Frame
213e12c5d1SDavid du Colombier {
223e12c5d1SDavid du Colombier 	Font		*font;		/* of chars in the frame */
233e12c5d1SDavid du Colombier 	Bitmap		*b;		/* on which frame appears */
243e12c5d1SDavid du Colombier 	Rectangle	r;		/* in which text appears */
253e12c5d1SDavid du Colombier 	Rectangle	entire;		/* of full frame */
263e12c5d1SDavid du Colombier 	Frbox		*box;
273e12c5d1SDavid du Colombier 	ulong		p0, p1;		/* selection */
283e12c5d1SDavid du Colombier 	short		left;		/* left edge of text */
293e12c5d1SDavid du Colombier 	ushort		nbox, nalloc;
303e12c5d1SDavid du Colombier 	ushort		maxtab;		/* max size of tab, in pixels */
313e12c5d1SDavid du Colombier 	ushort		nchars;		/* # runes in frame */
323e12c5d1SDavid du Colombier 	ushort		nlines;		/* # lines with text */
333e12c5d1SDavid du Colombier 	ushort		maxlines;	/* total # lines in frame */
343e12c5d1SDavid du Colombier 	ushort		lastlinefull;	/* last line fills frame */
353e12c5d1SDavid du Colombier 	ushort		modified;	/* changed since frselect() */
363e12c5d1SDavid du Colombier };
373e12c5d1SDavid du Colombier 
383e12c5d1SDavid du Colombier ulong	frcharofpt(Frame*, Point);
393e12c5d1SDavid du Colombier Point	frptofchar(Frame*, ulong);
403e12c5d1SDavid du Colombier int	frdelete(Frame*, ulong, ulong);
413e12c5d1SDavid du Colombier void	frinsert(Frame*, Rune*, Rune*, ulong);
423e12c5d1SDavid du Colombier void	frselect(Frame*, Mouse*);
433e12c5d1SDavid du Colombier void	frselectp(Frame*, Fcode);
443e12c5d1SDavid du Colombier void	frselectf(Frame*, Point, Point, Fcode);
453e12c5d1SDavid du Colombier void	frinit(Frame*, Rectangle, Font*, Bitmap*);
463e12c5d1SDavid du Colombier void	frsetrects(Frame*, Rectangle, Bitmap*);
473e12c5d1SDavid du Colombier void	frclear(Frame*);
483e12c5d1SDavid du Colombier void	frgetmouse(void);
493e12c5d1SDavid du Colombier 
503e12c5d1SDavid du Colombier uchar	*_frallocstr(unsigned);
513e12c5d1SDavid du Colombier void	_frinsure(Frame*, int, unsigned);
523e12c5d1SDavid du Colombier Point	_frdraw(Frame*, Point);
533e12c5d1SDavid du Colombier void	_frgrowbox(Frame*, int);
543e12c5d1SDavid du Colombier void	_frfreebox(Frame*, int, int);
553e12c5d1SDavid du Colombier void	_frmergebox(Frame*, int);
563e12c5d1SDavid du Colombier void	_frdelbox(Frame*, int, int);
573e12c5d1SDavid du Colombier void	_frsplitbox(Frame*, int, int);
583e12c5d1SDavid du Colombier int	_frfindbox(Frame*, int, ulong, ulong);
593e12c5d1SDavid du Colombier void	_frclosebox(Frame*, int, int);
603e12c5d1SDavid du Colombier int	_frcanfit(Frame*, Point, Frbox*);
613e12c5d1SDavid du Colombier void	_frcklinewrap(Frame*, Point*, Frbox*);
623e12c5d1SDavid du Colombier void	_frcklinewrap0(Frame*, Point*, Frbox*);
633e12c5d1SDavid du Colombier void	_fradvance(Frame*, Point*, Frbox*);
643e12c5d1SDavid du Colombier int	_frnewwid(Frame*, Point, Frbox*);
653e12c5d1SDavid du Colombier void	_frclean(Frame*, Point, int, int);
663e12c5d1SDavid du Colombier void	_frredraw(Frame*, Point);
673e12c5d1SDavid du Colombier void	_fraddbox(Frame*, int, int);
683e12c5d1SDavid du Colombier Point	_frptofcharptb(Frame*, ulong, Point, int);
693e12c5d1SDavid du Colombier Point	_frptofcharnb(Frame*, ulong, int);
703e12c5d1SDavid du Colombier int	_frstrlen(Frame*, int);
713e12c5d1SDavid du Colombier 
723e12c5d1SDavid du Colombier #define	NRUNE(b)	((b)->nrune<0? 1 : (b)->nrune)
733e12c5d1SDavid du Colombier #define	NBYTE(b)	strlen((char*)(b)->ptr)
74