plan9fox/libpanel/pldefs.h
xfnw 856abd2f7d Squashed 'sys/src/cmd/gopher/' content from commit 3680728b6
git-subtree-dir: sys/src/cmd/gopher
git-subtree-split: 3680728b631ed65201b397f4ae3e5d1b03be42f9
2022-07-01 15:46:23 -04:00

106 lines
3 KiB
C

/*
* Definitions for internal use only
*/
/*
* Variable-font text routines
* These could make a separate library.
*/
Point pl_rtfmt(Rtext *, int);
void pl_rtdraw(Image *, Rectangle, Rtext *, Point);
void pl_rtredraw(Image *, Rectangle, Rtext *, Point, Point, int);
Rtext *pl_rthit(Rtext *, Point, Point, Point);
#define HITME 0x08000 /* tells ptinpanel not to look at children */
#define LEAF 0x10000 /* newpanel will refuse to attach children */
#define INVIS 0x20000 /* don't draw this */
#define REMOUSE 0x40000 /* send next mouse event here, even if not inside */
/*
* States, also styles
*/
enum{
UP,
DOWN1,
DOWN2,
DOWN3,
DOWN,
PASSIVE,
FRAME
};
/*
* Scroll flags
*/
enum{
SCROLLUP,
SCROLLDOWN,
SCROLLABSY,
SCROLLLEFT,
SCROLLRIGHT,
SCROLLABSX,
};
/*
* Scrollbar, slider orientations
*/
enum{
HORIZ,
VERT
};
Panel *pl_newpanel(Panel *, int); /* make a new Panel, given parent & data size */
void *pl_emalloc(int); /* allocate some space, exit on error */
void *pl_erealloc(void*,int); /* reallocate some space, exit on error */
void pl_print(Panel *); /* print a Panel tree */
Panel *pl_ptinpanel(Point, Panel *); /* highest-priority subpanel containing point */
/*
* Drawing primitives
*/
int pl_drawinit(int);
Rectangle pl_box(Image *, Rectangle, int);
Rectangle pl_boxf(Image *b, Rectangle r, int flags, int style);
Rectangle pl_outline(Image *, Rectangle, int);
Point pl_boxsize(Point, int);
void pl_interior(int, Point *, Point *);
void pl_drawicon(Image *, Rectangle, int, int, Icon *);
Rectangle pl_check(Image *, Rectangle, int);
Rectangle pl_radio(Image *, Rectangle, int);
int pl_ckwid(void);
void pl_sliderupd(Image *, Rectangle, int, int, int);
void pl_invis(Panel *, int);
Point pl_iconsize(int, Icon *);
void pl_highlight(Image *, Rectangle);
void pl_clr(Image *, Rectangle);
void pl_fill(Image *, Rectangle);
void pl_cpy(Image *, Point, Rectangle);
/*
* Rune mangling functions
*/
int pl_idchar(int);
int pl_rune1st(int);
char *pl_nextrune(char *);
int pl_runewidth(Font *, char *);
/*
* Fixed-font Text-window routines
* These could be separated out into a separate library.
*/
typedef struct Textwin Textwin;
struct Textwin{
Rune *text, *etext, *eslack; /* text, with some slack off the end */
int top, bot; /* range of runes visible on screen */
int sel0, sel1; /* selection */
Point *loc, *eloc; /* ul corners of visible runes (+1 more at end!) */
Image *b; /* bitmap the text is drawn in */
Rectangle r; /* rectangle the text is drawn in */
Font *font; /* font text is drawn in */
int hgt; /* same as font->height */
int tabstop; /* tab settings are every tabstop pixels */
int mintab; /* the minimum size of a tab */
};
Textwin *twnew(Image *, Font *, Rune *, int);
void twfree(Textwin *);
void twhilite(Textwin *, int, int, int);
void twselect(Textwin *, Mouse *);
void twreplace(Textwin *, int, int, Rune *, int);
void twscroll(Textwin *, int);
int twpt2rune(Textwin *, Point);
void twreshape(Textwin *, Rectangle);
void twmove(Textwin *, Point);
void plemove(Panel *, Point);