1 typedef struct TkCimeth TkCimeth; 2 typedef struct TkCitem TkCitem; 3 typedef struct TkCanvas TkCanvas; 4 typedef struct TkCline TkCline; 5 typedef struct TkCtag TkCtag; 6 typedef struct TkCpoints TkCpoints; 7 typedef struct TkCwind TkCwind; 8 9 struct TkCline 10 { 11 int arrow; 12 int shape[3]; 13 int width; 14 Image* stipple; 15 Image* pen; 16 int arrowf; 17 int arrowl; 18 int capstyle; 19 int smooth; 20 int steps; 21 }; 22 23 struct TkCwind 24 { 25 Tk* sub; /* Subwindow of canvas */ 26 Tk* focus; /* Current Mouse focus */ 27 int width; /* Requested width */ 28 int height; /* Requested height */ 29 int flags; /* possible: Tkanchor|Tksetwidth|Tksetheight */ 30 }; 31 32 struct TkCpoints 33 { 34 int npoint; /* Number of points */ 35 Point* parampt; /* Parameters in fixed point */ 36 Point* drawpt; /* Draw coord in pixels */ 37 Rectangle bb; /* Bounding box in pixels */ 38 }; 39 40 struct TkCitem 41 { 42 int id; /* Unique id */ 43 int type; /* Object type */ 44 TkCpoints p; /* Points plus bounding box */ 45 TkEnv* env; /* Colors & fonts */ 46 TkCitem* next; /* Z order */ 47 TkName* tags; /* Temporary tag spot */ 48 TkCtag* stag; /* Real tag structure */ 49 // char obj[TKSTRUCTALIGN]; 50 }; 51 52 struct TkCtag 53 { 54 TkCitem* item; /* Link to item */ 55 TkName* name; /* Text name or id */ 56 TkCtag* taglist; /* link items with this tag */ 57 TkCtag* itemlist; /* link tags for this item */ 58 }; 59 60 enum 61 { 62 /* Item types */ 63 TkCVline, 64 TkCVtext, 65 TkCVrect, 66 TkCVoval, 67 TkCVbitmap, 68 TkCVpoly, 69 TkCVwindow, 70 TkCVimage, 71 TkCVarc, 72 73 TkCselto = 0, 74 TkCselfrom, 75 TkCseladjust, 76 77 TkCbufauto = 0, 78 TkCbufnone, 79 TkCbufvisible, 80 TkCbufall, 81 82 TkCadd = 0, 83 TkCfind, 84 85 TkChash = 32, 86 87 TkCarrowf = (1<<0), 88 TkCarrowl = (1<<1), 89 Tknarrow = 6 /* Number of points in arrow */ 90 }; 91 92 struct TkCanvas 93 { 94 int close; 95 int confine; 96 int cleanup; 97 int scrollr[4]; 98 Rectangle region; 99 Rectangle update; /* Area to paint next draw */ 100 Point view; 101 TkCitem* selection; 102 int width; 103 int height; 104 int sborderwidth; 105 int xscrolli; /* Scroll increment */ 106 int yscrolli; 107 char* xscroll; /* Scroll commands */ 108 char* yscroll; 109 int id; /* Unique id */ 110 TkCitem* head; /* Items in Z order */ 111 TkCitem* tail; /* Head is lowest, tail is highest */ 112 TkCitem* focus; /* Keyboard focus */ 113 TkCitem* mouse; /* Mouse focus */ 114 TkCitem* grab; 115 TkName* current; /* Fake for current tag */ 116 TkCtag curtag; 117 Image* image; /* Drawing space */ 118 int ialloc; /* image was allocated by us? */ 119 Image* mask; /* mask space (for stippling) */ 120 TkName* thash[TkChash]; /* Tag hash */ 121 int actions; 122 int actlim; 123 int buffer; 124 }; 125 126 struct TkCimeth 127 { 128 char* name; 129 char* (*create)(Tk*, char *arg, char **val); 130 void (*draw)(Image*, TkCitem*, TkEnv*); 131 void (*free)(TkCitem*); 132 char* (*coord)(TkCitem*, char*, int, int); 133 char* (*cget)(TkCitem*, char*, char**); 134 char* (*conf)(Tk*, TkCitem*, char*); 135 int (*hit)(TkCitem*, Point); 136 }; 137 138 extern TkCimeth tkcimethod[]; 139 extern int cvslshape[]; 140 extern Rectangle bbnil; 141 extern Rectangle huger; 142 143 /* General */ 144 extern char* tkcaddtag(Tk*, TkCitem*, int); 145 extern TkCtag* tkcfirsttag(TkCitem*, TkCtag*); 146 extern TkCtag* tkclasttag(TkCitem*, TkCtag*); 147 extern void tkcvsappend(TkCanvas*, TkCitem*); 148 extern TkCitem* tkcnewitem(Tk*, int, int); 149 extern void tkcvsfreeitem(TkCitem*); 150 extern Point tkcvsrelpos(Tk*); 151 extern Tk* tkcvsinwindow(Tk*, Point*); 152 extern char* tkcvstextdchar(Tk*, TkCitem*, char*); 153 extern char* tkcvstextindex(Tk*, TkCitem*, char*, char **val); 154 extern char* tkcvstextinsert(Tk*, TkCitem*, char*); 155 extern char* tkcvstexticursor(Tk*, TkCitem*, char*); 156 extern void tkmkpen(Image**, TkEnv*, Image*); 157 extern void tkcvstextfocus(Tk*, TkCitem*, int); 158 extern char* tkcvstextselect(Tk*, TkCitem*, char*, int); 159 extern void tkcvstextclr(Tk*); 160 extern Tk* tkcvsevent(Tk*, int, void*); 161 extern Point tkcvsanchor(Point, int, int, int); 162 extern void tkcvsdirty(Tk*); 163 extern void tkfreectag(TkCtag*); 164 extern char* tkparsepts(TkTop*, TkCpoints*, char**, int); 165 extern void tkfreepoint(TkCpoints*); 166 extern void tkxlatepts(Point*, int, int, int); 167 extern void tkpolybound(Point*, int, Rectangle*); 168 extern TkName* tkctaglook(Tk*, TkName*, char*); 169 extern void tkbbmax(Rectangle*, Rectangle*); 170 extern void tkcvssetdirty(Tk*); 171 172 /* Canvas Item methods - required to populate tkcimethod in canvs.c */ 173 extern char* tkcvslinecreat(Tk*, char *arg, char **val); 174 extern void tkcvslinedraw(Image*, TkCitem*, TkEnv*); 175 extern void tkcvslinefree(TkCitem*); 176 extern char* tkcvslinecoord(TkCitem*, char*, int, int); 177 extern char* tkcvslinecget(TkCitem*, char*, char**); 178 extern char* tkcvslineconf(Tk*, TkCitem*, char*); 179 extern int tkcvslinehit(TkCitem*, Point); 180 181 extern char* tkcvstextcreat(Tk*, char *arg, char **val); 182 extern void tkcvstextdraw(Image*, TkCitem*, TkEnv*); 183 extern void tkcvstextfree(TkCitem*); 184 extern char* tkcvstextcoord(TkCitem*, char*, int, int); 185 extern char* tkcvstextcget(TkCitem*, char*, char**); 186 extern char* tkcvstextconf(Tk*, TkCitem*, char*); 187 188 extern char* tkcvsrectcreat(Tk*, char *arg, char **val); 189 extern void tkcvsrectdraw(Image*, TkCitem*, TkEnv*); 190 extern void tkcvsrectfree(TkCitem*); 191 extern char* tkcvsrectcoord(TkCitem*, char*, int, int); 192 extern char* tkcvsrectcget(TkCitem*, char*, char**); 193 extern char* tkcvsrectconf(Tk*, TkCitem*, char*); 194 195 extern char* tkcvsovalcreat(Tk*, char *arg, char **val); 196 extern void tkcvsovaldraw(Image*, TkCitem*, TkEnv*); 197 extern void tkcvsovalfree(TkCitem*); 198 extern char* tkcvsovalcoord(TkCitem*, char*, int, int); 199 extern char* tkcvsovalcget(TkCitem*, char*, char**); 200 extern char* tkcvsovalconf(Tk*, TkCitem*, char*); 201 extern int tkcvsovalhit(TkCitem*, Point); 202 203 extern char* tkcvsarccreat(Tk*, char *arg, char **val); 204 extern void tkcvsarcdraw(Image*, TkCitem*, TkEnv*); 205 extern void tkcvsarcfree(TkCitem*); 206 extern char* tkcvsarccoord(TkCitem*, char*, int, int); 207 extern char* tkcvsarccget(TkCitem*, char*, char**); 208 extern char* tkcvsarcconf(Tk*, TkCitem*, char*); 209 210 extern char* tkcvsbitcreat(Tk*, char *arg, char **val); 211 extern void tkcvsbitdraw(Image*, TkCitem*, TkEnv*); 212 extern void tkcvsbitfree(TkCitem*); 213 extern char* tkcvsbitcoord(TkCitem*, char*, int, int); 214 extern char* tkcvsbitcget(TkCitem*, char*, char**); 215 extern char* tkcvsbitconf(Tk*, TkCitem*, char*); 216 217 extern char* tkcvswindcreat(Tk*, char *arg, char **val); 218 extern void tkcvswinddraw(Image*, TkCitem*, TkEnv*); 219 extern void tkcvswindfree(TkCitem*); 220 extern char* tkcvswindcoord(TkCitem*, char*, int, int); 221 extern char* tkcvswindcget(TkCitem*, char*, char**); 222 extern char* tkcvswindconf(Tk*, TkCitem*, char*); 223 224 extern char* tkcvspolycreat(Tk*, char *arg, char **val); 225 extern void tkcvspolydraw(Image*, TkCitem*, TkEnv*); 226 extern void tkcvspolyfree(TkCitem*); 227 extern char* tkcvspolycoord(TkCitem*, char*, int, int); 228 extern char* tkcvspolycget(TkCitem*, char*, char**); 229 extern char* tkcvspolyconf(Tk*, TkCitem*, char*); 230 extern int tkcvspolyhit(TkCitem*, Point); 231 232 extern char* tkcvsimgcreat(Tk*, char *arg, char **val); 233 extern void tkcvsimgdraw(Image*, TkCitem*, TkEnv*); 234 extern void tkcvsimgfree(TkCitem*); 235 extern char* tkcvsimgcoord(TkCitem*, char*, int, int); 236 extern char* tkcvsimgcget(TkCitem*, char*, char**); 237 extern char* tkcvsimgconf(Tk*, TkCitem*, char*); 238 239 extern TkCitem* tkcvsfindwin(Tk*); 240 extern void tkcvsforgetsub(Tk*, Tk*); 241