xref: /plan9/sys/include/frame.h (revision 8f5875f3e9b20916b4c52ad4336922bc8653eb7b)
1219b2ee8SDavid 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 
77dd7cddfSDavid du Colombier enum{
87dd7cddfSDavid du Colombier 	BACK,
97dd7cddfSDavid du Colombier 	HIGH,
107dd7cddfSDavid du Colombier 	BORD,
117dd7cddfSDavid du Colombier 	TEXT,
127dd7cddfSDavid du Colombier 	HTEXT,
137dd7cddfSDavid du Colombier 	NCOL
147dd7cddfSDavid du Colombier };
157dd7cddfSDavid du Colombier 
167dd7cddfSDavid du Colombier #define	FRTICKW	3
177dd7cddfSDavid du Colombier 
183e12c5d1SDavid du Colombier struct Frbox
193e12c5d1SDavid du Colombier {
203e12c5d1SDavid du Colombier 	long		wid;		/* in pixels */
213e12c5d1SDavid du Colombier 	long		nrune;		/* <0 ==> negate and treat as break char */
223e12c5d1SDavid du Colombier 	union{
233e12c5d1SDavid du Colombier 		uchar	*ptr;
243e12c5d1SDavid du Colombier 		struct{
253e12c5d1SDavid du Colombier 			short	bc;	/* break char */
263e12c5d1SDavid du Colombier 			short	minwid;
273e12c5d1SDavid du Colombier 		};
283e12c5d1SDavid du Colombier 	};
293e12c5d1SDavid du Colombier };
303e12c5d1SDavid du Colombier 
313e12c5d1SDavid du Colombier struct Frame
323e12c5d1SDavid du Colombier {
333e12c5d1SDavid du Colombier 	Font		*font;		/* of chars in the frame */
347dd7cddfSDavid du Colombier 	Display		*display;	/* on which frame appears */
357dd7cddfSDavid du Colombier 	Image		*b;		/* on which frame appears */
367dd7cddfSDavid du Colombier 	Image		*cols[NCOL];	/* text and background colors */
373e12c5d1SDavid du Colombier 	Rectangle	r;		/* in which text appears */
383e12c5d1SDavid du Colombier 	Rectangle	entire;		/* of full frame */
397dd7cddfSDavid du Colombier 	void			(*scroll)(Frame*, int);	/* scroll function provided by application */
403e12c5d1SDavid du Colombier 	Frbox		*box;
413e12c5d1SDavid du Colombier 	ulong		p0, p1;		/* selection */
423e12c5d1SDavid du Colombier 	ushort		nbox, nalloc;
433e12c5d1SDavid du Colombier 	ushort		maxtab;		/* max size of tab, in pixels */
443e12c5d1SDavid du Colombier 	ushort		nchars;		/* # runes in frame */
453e12c5d1SDavid du Colombier 	ushort		nlines;		/* # lines with text */
463e12c5d1SDavid du Colombier 	ushort		maxlines;	/* total # lines in frame */
473e12c5d1SDavid du Colombier 	ushort		lastlinefull;	/* last line fills frame */
483e12c5d1SDavid du Colombier 	ushort		modified;	/* changed since frselect() */
497dd7cddfSDavid du Colombier 	Image		*tick;	/* typing tick */
507dd7cddfSDavid du Colombier 	Image		*tickback;	/* saved image under tick */
517dd7cddfSDavid du Colombier 	int			ticked;	/* flag: is tick onscreen? */
523e12c5d1SDavid du Colombier };
533e12c5d1SDavid du Colombier 
543e12c5d1SDavid du Colombier ulong	frcharofpt(Frame*, Point);
553e12c5d1SDavid du Colombier Point	frptofchar(Frame*, ulong);
563e12c5d1SDavid du Colombier int	frdelete(Frame*, ulong, ulong);
573e12c5d1SDavid du Colombier void	frinsert(Frame*, Rune*, Rune*, ulong);
587dd7cddfSDavid du Colombier void	frselect(Frame*, Mousectl*);
597dd7cddfSDavid du Colombier void	frselectpaint(Frame*, Point, Point, Image*);
607dd7cddfSDavid du Colombier void	frdrawsel(Frame*, Point, ulong, ulong, int);
61*8f5875f3SDavid du Colombier Point frdrawsel0(Frame*, Point, ulong, ulong, Image*, Image*);
627dd7cddfSDavid du Colombier void	frinit(Frame*, Rectangle, Font*, Image*, Image**);
637dd7cddfSDavid du Colombier void	frsetrects(Frame*, Rectangle, Image*);
647dd7cddfSDavid du Colombier void	frclear(Frame*, int);
653e12c5d1SDavid du Colombier 
667dd7cddfSDavid du Colombier uchar	*_frallocstr(Frame*, unsigned);
673e12c5d1SDavid du Colombier void	_frinsure(Frame*, int, unsigned);
683e12c5d1SDavid du Colombier Point	_frdraw(Frame*, Point);
693e12c5d1SDavid du Colombier void	_frgrowbox(Frame*, int);
703e12c5d1SDavid du Colombier void	_frfreebox(Frame*, int, int);
713e12c5d1SDavid du Colombier void	_frmergebox(Frame*, int);
723e12c5d1SDavid du Colombier void	_frdelbox(Frame*, int, int);
733e12c5d1SDavid du Colombier void	_frsplitbox(Frame*, int, int);
743e12c5d1SDavid du Colombier int	_frfindbox(Frame*, int, ulong, ulong);
753e12c5d1SDavid du Colombier void	_frclosebox(Frame*, int, int);
763e12c5d1SDavid du Colombier int	_frcanfit(Frame*, Point, Frbox*);
773e12c5d1SDavid du Colombier void	_frcklinewrap(Frame*, Point*, Frbox*);
783e12c5d1SDavid du Colombier void	_frcklinewrap0(Frame*, Point*, Frbox*);
793e12c5d1SDavid du Colombier void	_fradvance(Frame*, Point*, Frbox*);
803e12c5d1SDavid du Colombier int	_frnewwid(Frame*, Point, Frbox*);
817dd7cddfSDavid du Colombier int	_frnewwid0(Frame*, Point, Frbox*);
823e12c5d1SDavid du Colombier void	_frclean(Frame*, Point, int, int);
83*8f5875f3SDavid du Colombier void	_frdrawtext(Frame*, Point, Image*, Image*);
843e12c5d1SDavid du Colombier void	_fraddbox(Frame*, int, int);
853e12c5d1SDavid du Colombier Point	_frptofcharptb(Frame*, ulong, Point, int);
863e12c5d1SDavid du Colombier Point	_frptofcharnb(Frame*, ulong, int);
873e12c5d1SDavid du Colombier int	_frstrlen(Frame*, int);
887dd7cddfSDavid du Colombier void	frtick(Frame*, Point, int);
897dd7cddfSDavid du Colombier void	frinittick(Frame*);
90*8f5875f3SDavid du Colombier void	frredraw(Frame*);
913e12c5d1SDavid du Colombier 
923e12c5d1SDavid du Colombier #define	NRUNE(b)	((b)->nrune<0? 1 : (b)->nrune)
933e12c5d1SDavid du Colombier #define	NBYTE(b)	strlen((char*)(b)->ptr)
94