typedef struct TkCimeth TkCimeth;typedef struct TkCitem TkCitem;typedef struct TkCanvas TkCanvas;typedef struct TkCline TkCline;typedef struct TkCtag TkCtag;typedef struct TkCpoints TkCpoints;typedef struct TkCwind TkCwind; struct TkCline{ int arrow; int shape[3]; int width; Image* stipple; Image* pen; int arrowf; int arrowl; int capstyle; int smooth; int steps;}; struct TkCwind{ Tk* sub; /* Subwindow of canvas */ Tk* focus; /* Current Mouse focus */ int width; /* Requested width */ int height; /* Requested height */ int flags; /* possible: Tkanchor|Tksetwidth|Tksetheight */}; struct TkCpoints{ int npoint; /* Number of points */ Point* parampt; /* Parameters in fixed point */ Point* drawpt; /* Draw coord in pixels */ Rectangle bb; /* Bounding box in pixels */}; struct TkCitem{ int id; /* Unique id */ int type; /* Object type */ TkCpoints p; /* Points plus bounding box */ TkEnv* env; /* Colors & fonts */ TkCitem* next; /* Z order */ TkName* tags; /* Temporary tag spot */ TkCtag* stag; /* Real tag structure */// char obj[TKSTRUCTALIGN];}; struct TkCtag{ TkCitem* item; /* Link to item */ TkName* name; /* Text name or id */ TkCtag* taglist; /* link items with this tag */ TkCtag* itemlist; /* link tags for this item */}; enum{ /* Item types */ TkCVline, TkCVtext, TkCVrect, TkCVoval, TkCVbitmap, TkCVpoly, TkCVwindow, TkCVimage, TkCVarc, TkCselto = 0, TkCselfrom, TkCseladjust, TkCbufauto = 0, TkCbufnone, TkCbufvisible, TkCbufall, TkCadd = 0, TkCfind, TkChash = 32, TkCarrowf = (1<<0), TkCarrowl = (1<<1), Tknarrow = 6 /* Number of points in arrow */}; struct TkCanvas{ int close; int confine; int cleanup; int scrollr[4]; Rectangle region; Rectangle update; /* Area to paint next draw */ Point view; TkCitem* selection; int width; int height; int sborderwidth; int xscrolli; /* Scroll increment */ int yscrolli; char* xscroll; /* Scroll commands */ char* yscroll; int id; /* Unique id */ TkCitem* head; /* Items in Z order */ TkCitem* tail; /* Head is lowest, tail is highest */ TkCitem* focus; /* Keyboard focus */ TkCitem* mouse; /* Mouse focus */ TkCitem* grab; TkName* current; /* Fake for current tag */ TkCtag curtag; Image* image; /* Drawing space */ int ialloc; /* image was allocated by us? */ Image* mask; /* mask space (for stippling) */ TkName* thash[TkChash]; /* Tag hash */ int actions; int actlim; int buffer;}; struct TkCimeth{ char* name; char* (*create)(Tk*, char *arg, char **val); void (*draw)(Image*, TkCitem*, TkEnv*); void (*free)(TkCitem*); char* (*coord)(TkCitem*, char*, int, int); char* (*cget)(TkCitem*, char*, char**); char* (*conf)(Tk*, TkCitem*, char*); int (*hit)(TkCitem*, Point);}; extern TkCimeth tkcimethod[];extern int cvslshape[];extern Rectangle bbnil;extern Rectangle huger; /* General */extern char* tkcaddtag(Tk*, TkCitem*, int);extern TkCtag* tkcfirsttag(TkCitem*, TkCtag*);extern TkCtag* tkclasttag(TkCitem*, TkCtag*);extern void tkcvsappend(TkCanvas*, TkCitem*);extern TkCitem* tkcnewitem(Tk*, int, int);extern void tkcvsfreeitem(TkCitem*);extern Point tkcvsrelpos(Tk*);extern Tk* tkcvsinwindow(Tk*, Point*);extern char* tkcvstextdchar(Tk*, TkCitem*, char*);extern char* tkcvstextindex(Tk*, TkCitem*, char*, char **val);extern char* tkcvstextinsert(Tk*, TkCitem*, char*);extern char* tkcvstexticursor(Tk*, TkCitem*, char*);extern void tkmkpen(Image**, TkEnv*, Image*);extern void tkcvstextfocus(Tk*, TkCitem*, int);extern char* tkcvstextselect(Tk*, TkCitem*, char*, int);extern void tkcvstextclr(Tk*);extern Tk* tkcvsevent(Tk*, int, void*);extern Point tkcvsanchor(Point, int, int, int);extern void tkcvsdirty(Tk*);extern void tkfreectag(TkCtag*);extern char* tkparsepts(TkTop*, TkCpoints*, char**, int);extern void tkfreepoint(TkCpoints*);extern void tkxlatepts(Point*, int, int, int);extern void tkpolybound(Point*, int, Rectangle*);extern TkName* tkctaglook(Tk*, TkName*, char*);extern void tkbbmax(Rectangle*, Rectangle*);extern void tkcvssetdirty(Tk*); /* Canvas Item methods - required to populate tkcimethod in canvs.c */extern char* tkcvslinecreat(Tk*, char *arg, char **val);extern void tkcvslinedraw(Image*, TkCitem*, TkEnv*);extern void tkcvslinefree(TkCitem*);extern char* tkcvslinecoord(TkCitem*, char*, int, int);extern char* tkcvslinecget(TkCitem*, char*, char**);extern char* tkcvslineconf(Tk*, TkCitem*, char*);extern int tkcvslinehit(TkCitem*, Point); extern char* tkcvstextcreat(Tk*, char *arg, char **val);extern void tkcvstextdraw(Image*, TkCitem*, TkEnv*);extern void tkcvstextfree(TkCitem*);extern char* tkcvstextcoord(TkCitem*, char*, int, int);extern char* tkcvstextcget(TkCitem*, char*, char**);extern char* tkcvstextconf(Tk*, TkCitem*, char*); extern char* tkcvsrectcreat(Tk*, char *arg, char **val);extern void tkcvsrectdraw(Image*, TkCitem*, TkEnv*);extern void tkcvsrectfree(TkCitem*);extern char* tkcvsrectcoord(TkCitem*, char*, int, int);extern char* tkcvsrectcget(TkCitem*, char*, char**);extern char* tkcvsrectconf(Tk*, TkCitem*, char*); extern char* tkcvsovalcreat(Tk*, char *arg, char **val);extern void tkcvsovaldraw(Image*, TkCitem*, TkEnv*);extern void tkcvsovalfree(TkCitem*);extern char* tkcvsovalcoord(TkCitem*, char*, int, int);extern char* tkcvsovalcget(TkCitem*, char*, char**);extern char* tkcvsovalconf(Tk*, TkCitem*, char*);extern int tkcvsovalhit(TkCitem*, Point); extern char* tkcvsarccreat(Tk*, char *arg, char **val);extern void tkcvsarcdraw(Image*, TkCitem*, TkEnv*);extern void tkcvsarcfree(TkCitem*);extern char* tkcvsarccoord(TkCitem*, char*, int, int);extern char* tkcvsarccget(TkCitem*, char*, char**);extern char* tkcvsarcconf(Tk*, TkCitem*, char*); extern char* tkcvsbitcreat(Tk*, char *arg, char **val);extern void tkcvsbitdraw(Image*, TkCitem*, TkEnv*);extern void tkcvsbitfree(TkCitem*);extern char* tkcvsbitcoord(TkCitem*, char*, int, int);extern char* tkcvsbitcget(TkCitem*, char*, char**);extern char* tkcvsbitconf(Tk*, TkCitem*, char*); extern char* tkcvswindcreat(Tk*, char *arg, char **val);extern void tkcvswinddraw(Image*, TkCitem*, TkEnv*);extern void tkcvswindfree(TkCitem*);extern char* tkcvswindcoord(TkCitem*, char*, int, int);extern char* tkcvswindcget(TkCitem*, char*, char**);extern char* tkcvswindconf(Tk*, TkCitem*, char*); extern char* tkcvspolycreat(Tk*, char *arg, char **val);extern void tkcvspolydraw(Image*, TkCitem*, TkEnv*);extern void tkcvspolyfree(TkCitem*);extern char* tkcvspolycoord(TkCitem*, char*, int, int);extern char* tkcvspolycget(TkCitem*, char*, char**);extern char* tkcvspolyconf(Tk*, TkCitem*, char*);extern int tkcvspolyhit(TkCitem*, Point); extern char* tkcvsimgcreat(Tk*, char *arg, char **val);extern void tkcvsimgdraw(Image*, TkCitem*, TkEnv*);extern void tkcvsimgfree(TkCitem*);extern char* tkcvsimgcoord(TkCitem*, char*, int, int);extern char* tkcvsimgcget(TkCitem*, char*, char**);extern char* tkcvsimgconf(Tk*, TkCitem*, char*); extern TkCitem* tkcvsfindwin(Tk*);extern void tkcvsforgetsub(Tk*, Tk*);
typedef struct TkCimeth TkCimeth;
typedef struct TkCitem TkCitem;
typedef struct TkCanvas TkCanvas;
typedef struct TkCline TkCline;
typedef struct TkCtag TkCtag;
typedef struct TkCpoints TkCpoints;
typedef struct TkCwind TkCwind;
struct TkCline
{
int arrow;
int shape[3];
int width;
Image* stipple;
Image* pen;
int arrowf;
int arrowl;
int capstyle;
int smooth;
int steps;
};
struct TkCwind
{
Tk* sub; /* Subwindow of canvas */
Tk* focus; /* Current Mouse focus */
int width; /* Requested width */
int height; /* Requested height */
int flags; /* possible: Tkanchor|Tksetwidth|Tksetheight */
};
struct TkCpoints
{
int npoint; /* Number of points */
Point* parampt; /* Parameters in fixed point */
Point* drawpt; /* Draw coord in pixels */
Rectangle bb; /* Bounding box in pixels */
};
struct TkCitem
{
int id; /* Unique id */
int type; /* Object type */
TkCpoints p; /* Points plus bounding box */
TkEnv* env; /* Colors & fonts */
TkCitem* next; /* Z order */
TkName* tags; /* Temporary tag spot */
TkCtag* stag; /* Real tag structure */
// char obj[TKSTRUCTALIGN];
};
struct TkCtag
{
TkCitem* item; /* Link to item */
TkName* name; /* Text name or id */
TkCtag* taglist; /* link items with this tag */
TkCtag* itemlist; /* link tags for this item */
};
enum
{
/* Item types */
TkCVline,
TkCVtext,
TkCVrect,
TkCVoval,
TkCVbitmap,
TkCVpoly,
TkCVwindow,
TkCVimage,
TkCVarc,
TkCselto = 0,
TkCselfrom,
TkCseladjust,
TkCbufauto = 0,
TkCbufnone,
TkCbufvisible,
TkCbufall,
TkCadd = 0,
TkCfind,
TkChash = 32,
TkCarrowf = (1<<0),
TkCarrowl = (1<<1),
Tknarrow = 6 /* Number of points in arrow */
};
struct TkCanvas
{
int close;
int confine;
int cleanup;
int scrollr[4];
Rectangle region;
Rectangle update; /* Area to paint next draw */
Point view;
TkCitem* selection;
int width;
int height;
int sborderwidth;
int xscrolli; /* Scroll increment */
int yscrolli;
char* xscroll; /* Scroll commands */
char* yscroll;
int id; /* Unique id */
TkCitem* head; /* Items in Z order */
TkCitem* tail; /* Head is lowest, tail is highest */
TkCitem* focus; /* Keyboard focus */
TkCitem* mouse; /* Mouse focus */
TkCitem* grab;
TkName* current; /* Fake for current tag */
TkCtag curtag;
Image* image; /* Drawing space */
int ialloc; /* image was allocated by us? */
Image* mask; /* mask space (for stippling) */
TkName* thash[TkChash]; /* Tag hash */
int actions;
int actlim;
int buffer;
};
struct TkCimeth
{
char* name;
char* (*create)(Tk*, char *arg, char **val);
void (*draw)(Image*, TkCitem*, TkEnv*);
void (*free)(TkCitem*);
char* (*coord)(TkCitem*, char*, int, int);
char* (*cget)(TkCitem*, char*, char**);
char* (*conf)(Tk*, TkCitem*, char*);
int (*hit)(TkCitem*, Point);
};
extern TkCimeth tkcimethod[];
extern int cvslshape[];
extern Rectangle bbnil;
extern Rectangle huger;
/* General */
extern char* tkcaddtag(Tk*, TkCitem*, int);
extern TkCtag* tkcfirsttag(TkCitem*, TkCtag*);
extern TkCtag* tkclasttag(TkCitem*, TkCtag*);
extern void tkcvsappend(TkCanvas*, TkCitem*);
extern TkCitem* tkcnewitem(Tk*, int, int);
extern void tkcvsfreeitem(TkCitem*);
extern Point tkcvsrelpos(Tk*);
extern Tk* tkcvsinwindow(Tk*, Point*);
extern char* tkcvstextdchar(Tk*, TkCitem*, char*);
extern char* tkcvstextindex(Tk*, TkCitem*, char*, char **val);
extern char* tkcvstextinsert(Tk*, TkCitem*, char*);
extern char* tkcvstexticursor(Tk*, TkCitem*, char*);
extern void tkmkpen(Image**, TkEnv*, Image*);
extern void tkcvstextfocus(Tk*, TkCitem*, int);
extern char* tkcvstextselect(Tk*, TkCitem*, char*, int);
extern void tkcvstextclr(Tk*);
extern Tk* tkcvsevent(Tk*, int, void*);
extern Point tkcvsanchor(Point, int, int, int);
extern void tkcvsdirty(Tk*);
extern void tkfreectag(TkCtag*);
extern char* tkparsepts(TkTop*, TkCpoints*, char**, int);
extern void tkfreepoint(TkCpoints*);
extern void tkxlatepts(Point*, int, int, int);
extern void tkpolybound(Point*, int, Rectangle*);
extern TkName* tkctaglook(Tk*, TkName*, char*);
extern void tkbbmax(Rectangle*, Rectangle*);
extern void tkcvssetdirty(Tk*);
/* Canvas Item methods - required to populate tkcimethod in canvs.c */
extern char* tkcvslinecreat(Tk*, char *arg, char **val);
extern void tkcvslinedraw(Image*, TkCitem*, TkEnv*);
extern void tkcvslinefree(TkCitem*);
extern char* tkcvslinecoord(TkCitem*, char*, int, int);
extern char* tkcvslinecget(TkCitem*, char*, char**);
extern char* tkcvslineconf(Tk*, TkCitem*, char*);
extern int tkcvslinehit(TkCitem*, Point);
extern char* tkcvstextcreat(Tk*, char *arg, char **val);
extern void tkcvstextdraw(Image*, TkCitem*, TkEnv*);
extern void tkcvstextfree(TkCitem*);
extern char* tkcvstextcoord(TkCitem*, char*, int, int);
extern char* tkcvstextcget(TkCitem*, char*, char**);
extern char* tkcvstextconf(Tk*, TkCitem*, char*);
extern char* tkcvsrectcreat(Tk*, char *arg, char **val);
extern void tkcvsrectdraw(Image*, TkCitem*, TkEnv*);
extern void tkcvsrectfree(TkCitem*);
extern char* tkcvsrectcoord(TkCitem*, char*, int, int);
extern char* tkcvsrectcget(TkCitem*, char*, char**);
extern char* tkcvsrectconf(Tk*, TkCitem*, char*);
extern char* tkcvsovalcreat(Tk*, char *arg, char **val);
extern void tkcvsovaldraw(Image*, TkCitem*, TkEnv*);
extern void tkcvsovalfree(TkCitem*);
extern char* tkcvsovalcoord(TkCitem*, char*, int, int);
extern char* tkcvsovalcget(TkCitem*, char*, char**);
extern char* tkcvsovalconf(Tk*, TkCitem*, char*);
extern int tkcvsovalhit(TkCitem*, Point);
extern char* tkcvsarccreat(Tk*, char *arg, char **val);
extern void tkcvsarcdraw(Image*, TkCitem*, TkEnv*);
extern void tkcvsarcfree(TkCitem*);
extern char* tkcvsarccoord(TkCitem*, char*, int, int);
extern char* tkcvsarccget(TkCitem*, char*, char**);
extern char* tkcvsarcconf(Tk*, TkCitem*, char*);
extern char* tkcvsbitcreat(Tk*, char *arg, char **val);
extern void tkcvsbitdraw(Image*, TkCitem*, TkEnv*);
extern void tkcvsbitfree(TkCitem*);
extern char* tkcvsbitcoord(TkCitem*, char*, int, int);
extern char* tkcvsbitcget(TkCitem*, char*, char**);
extern char* tkcvsbitconf(Tk*, TkCitem*, char*);
extern char* tkcvswindcreat(Tk*, char *arg, char **val);
extern void tkcvswinddraw(Image*, TkCitem*, TkEnv*);
extern void tkcvswindfree(TkCitem*);
extern char* tkcvswindcoord(TkCitem*, char*, int, int);
extern char* tkcvswindcget(TkCitem*, char*, char**);
extern char* tkcvswindconf(Tk*, TkCitem*, char*);
extern char* tkcvspolycreat(Tk*, char *arg, char **val);
extern void tkcvspolydraw(Image*, TkCitem*, TkEnv*);
extern void tkcvspolyfree(TkCitem*);
extern char* tkcvspolycoord(TkCitem*, char*, int, int);
extern char* tkcvspolycget(TkCitem*, char*, char**);
extern char* tkcvspolyconf(Tk*, TkCitem*, char*);
extern int tkcvspolyhit(TkCitem*, Point);
extern char* tkcvsimgcreat(Tk*, char *arg, char **val);
extern void tkcvsimgdraw(Image*, TkCitem*, TkEnv*);
extern void tkcvsimgfree(TkCitem*);
extern char* tkcvsimgcoord(TkCitem*, char*, int, int);
extern char* tkcvsimgcget(TkCitem*, char*, char**);
extern char* tkcvsimgconf(Tk*, TkCitem*, char*);
extern TkCitem* tkcvsfindwin(Tk*);
extern void tkcvsforgetsub(Tk*, Tk*);