aboutsummaryrefslogtreecommitdiff
path: root/generic/tkZinc.c
diff options
context:
space:
mode:
authorlecoanet2002-12-09 15:01:23 +0000
committerlecoanet2002-12-09 15:01:23 +0000
commit738783f6f34dd90ca4958569060bf2cdc36aa859 (patch)
tree2f07675805405d6cfa5a6ad37d390ed95f13dd4d /generic/tkZinc.c
parentb9708ed35b6893c20df0fb033846e215175acf45 (diff)
downloadtkzinc-738783f6f34dd90ca4958569060bf2cdc36aa859.zip
tkzinc-738783f6f34dd90ca4958569060bf2cdc36aa859.tar.gz
tkzinc-738783f6f34dd90ca4958569060bf2cdc36aa859.tar.bz2
tkzinc-738783f6f34dd90ca4958569060bf2cdc36aa859.tar.xz
* Le tesselateur est toujours cr�� m�me quand on ne compile pas
avec GL. * Modifs pour compiler proprement en Tcl * Corrections de bugs dans Contour et Coords.
Diffstat (limited to 'generic/tkZinc.c')
-rw-r--r--generic/tkZinc.c72
1 files changed, 47 insertions, 25 deletions
diff --git a/generic/tkZinc.c b/generic/tkZinc.c
index 3733051..d360539 100644
--- a/generic/tkZinc.c
+++ b/generic/tkZinc.c
@@ -303,7 +303,7 @@ static void Repair _ANSI_ARGS_((WidgetInfo *wi));
Tcl_Obj *
-NewStringObj(char *str) {
+NewStringObj(CONST char *str) {
return Tcl_NewStringObj(str, strlen(str));
}
@@ -595,9 +595,9 @@ ZincObjCmd(ClientData client_data, /* Main window associated with
Tk_Window tkwin;
unsigned int num;
int major_op, first_err, first_evt;
- int major_glx, minor_glx;
ZnBool has_glx = False;
#ifdef GLX
+ int major_glx, minor_glx;
Display *dpy = Tk_Display(top_w);
Screen *screen = Tk_Screen(top_w);
int attribs[] = {
@@ -788,13 +788,17 @@ ZincObjCmd(ClientData client_data, /* Main window associated with
wi->damaged_area.corner.y = wi->height = wi->opt_height;
/*
+ * Allocate a GLU tesselator.
+ */
+ wi->tess = gluNewTess();
+ wi->tess_combine_list = NULL;
+
+ /*
* Allocate double buffer pixmap/image.
*/
if (wi->render) {
#ifdef GLX
wi->gl_context = 0;
- wi->tess = 0;
- wi->tess_combine_list = NULL;
if (wi->has_glx) {
#ifdef GLX_PRINT_CONFIG
@@ -843,7 +847,6 @@ ZincObjCmd(ClientData client_data, /* Main window associated with
24,
XCreateColormap(wi->dpy, RootWindowOfScreen(wi->screen),
wi->gl_visual->visual, AllocNone));
- wi->tess = gluNewTess();
}
}
}
@@ -1376,7 +1379,7 @@ ZnTagSearchScan(WidgetInfo *wi,
TagSearch **search_var) /* Record describing tag search;
* will be initialized here. */
{
- char *tag;
+ Tk_Uid tag;
int i;
TagSearch *search;
Item group = wi->top_group;
@@ -1428,8 +1431,8 @@ ZnTagSearchScan(WidgetInfo *wi,
* tag and search for a matching group.
*/
if (strpbrk(tag, ".*")) {
- char *path, *next;
- char c;
+ Tk_Uid path;
+ char c, *next;
unsigned long id;
Tcl_HashEntry *entry;
@@ -2090,7 +2093,7 @@ FindItems(WidgetInfo *wi,
Item item;
ZnBool recursive = True;
ZnPickStruct ps;
- static char *search_cmd_strings[] = {
+ static CONST char *search_cmd_strings[] = {
"above", "ancestors", "atpriority", "below", "closest", "enclosed",
"overlapping", "withtag", "withtype", NULL
};
@@ -2441,7 +2444,9 @@ ZnParseCoordList(WidgetInfo *wi,
if (Tcl_GetDoubleFromObj(wi->interp, elems[i+1], &p->y) == ZN_ERROR) {
goto coord_error;
}
+ /*printf("Parsed a point: %g@%g, ", p->x, p->y);*/
}
+ /*printf("\n");*/
}
else {
Tcl_ResetResult(wi->interp);
@@ -2502,7 +2507,7 @@ Contour(WidgetInfo *wi,
ZnTransfo t, inv;
ZnContour *contours;
/* Keep this array in sync with ZnContourCmd in Types.h */
- static char *op_strings[] = {
+ static CONST char *op_strings[] = {
"add", "addhole", "remove", NULL
};
@@ -2556,7 +2561,7 @@ Contour(WidgetInfo *wi,
if (ZnParseCoordList(wi, args[4], &points, &controls, &num_points) == ZN_ERROR) {
return ZN_ERROR;
}
- POLY_CONTOUR1(&poly, NULL, num_points);
+ POLY_CONTOUR1(&poly, NULL, num_points, False);
/*
* Allocate a fresh point array, ZnParseCoordList returns a shared
* array.
@@ -2602,7 +2607,7 @@ Contour(WidgetInfo *wi,
if (!simple) {
goto noshape;
}
- POLY_CONTOUR1(&poly, tristrip.strip1.points, tristrip.strip1.num_points);
+ POLY_CONTOUR1(&poly, tristrip.strip1.points, tristrip.strip1.num_points, False);
poly.contours[0].controls = NULL;
}
else {
@@ -2712,7 +2717,7 @@ Coords(WidgetInfo *wi,
long index, contour = 0;
char *str, *controls = NULL;
char c[2] = " ";
- Tcl_Obj *l;
+ Tcl_Obj *l, *entries[3];
result = ZnItemWithTagOrId(wi, args[2], &item, search_var);
if ((result == ZN_ERROR) || (item == ZN_NO_ITEM)) {
@@ -2734,11 +2739,15 @@ Coords(WidgetInfo *wi,
num_points, points->x, points->y);*/
l = Tcl_GetObjResult(wi->interp);
for (i = 0; i < num_points; i++, points++) {
- Tcl_ListObjAppendElement(wi->interp, l, NewDoubleObj(points->x));
- Tcl_ListObjAppendElement(wi->interp, l, NewDoubleObj(points->y));
- if (controls) {
+ entries[0] = NewDoubleObj(points->x);
+ entries[1] = NewDoubleObj(points->y);
+ if (controls && controls[i]) {
c[0] = controls[i];
- Tcl_ListObjAppendElement(wi->interp, l, NewStringObj(c));
+ entries[2] = NewStringObj(c);
+ Tcl_ListObjAppendElement(wi->interp, l, Tcl_NewListObj(3, entries));
+ }
+ else {
+ Tcl_ListObjAppendElement(wi->interp, l, Tcl_NewListObj(2, entries));
}
}
return ZN_OK;
@@ -2866,7 +2875,18 @@ Coords(WidgetInfo *wi,
&points, &controls, &num_points) == ZN_ERROR) {
return ZN_ERROR;
}
- goto coords_read;
+ if (num_points) {
+ /*printf(" coords: read contour:%d, index:%d, point is %g@%g\n",
+ contour, index, points->x, points->y); */
+ l = Tcl_GetObjResult(wi->interp);
+ Tcl_ListObjAppendElement(wi->interp, l, NewDoubleObj(points->x));
+ Tcl_ListObjAppendElement(wi->interp, l, NewDoubleObj(points->y));
+ if (controls && controls[0]) {
+ c[0] = controls[0];
+ Tcl_ListObjAppendElement(wi->interp, l, NewStringObj(c));
+ }
+ }
+ return ZN_OK;
}
else if ((argc == 6) && (cmd == COORDS_REMOVE)) {
/* Remove coord of contour at index. */
@@ -2929,7 +2949,7 @@ WidgetObjCmd(ClientData client_data, /* Information about the widget. */
Tcl_Obj *l;
TagSearch *search_var = NULL;
Tcl_HashEntry *entry;
- static char *sub_cmd_strings[] = {
+ static CONST char *sub_cmd_strings[] = {
"add", "addtag", "anchorxy", "bbox", "becomes", "bind",
"cget", "chggroup", "clone", "configure", "contour",
"coords", "currentpart", "cursor", "dchars",
@@ -2953,7 +2973,7 @@ WidgetObjCmd(ClientData client_data, /* Information about the widget. */
ZN_W_TAPPLY, ZN_W_TDELETE, ZN_W_TRANSFORM, ZN_W_TRANSLATE, ZN_W_TRESET,
ZN_W_TRESTORE, ZN_W_TSAVE, ZN_W_TYPE, ZN_W_VERTEX_AT,
};
- static char *sel_cmd_strings[] = {
+ static CONST char *sel_cmd_strings[] = {
"adjust", "clear", "from", "item", "to", NULL
};
enum sel_cmds {
@@ -3225,7 +3245,7 @@ WidgetObjCmd(ClientData client_data, /* Information about the widget. */
#ifdef PTK
Tcl_Obj *command;
#else
- char *command;
+ CONST char *command;
#endif
command = Tk_GetBinding(interp, wi->binding_table, elem, Tcl_GetString(args[3]));
if (command == NULL) {
@@ -4768,7 +4788,7 @@ Configure(Tcl_Interp *interp,/* Used for error reporting. */
#ifdef PTK
(Tcl_Obj **) args, (char *) wi, flags) != TCL_OK) {
#else
- (char **) args, (char *) wi, flags|TK_CONFIG_OBJS) != TCL_OK) {
+ (CONST char **) args, (char *) wi, flags|TK_CONFIG_OBJS) != TCL_OK) {
#endif
return TCL_ERROR;
}
@@ -5187,13 +5207,13 @@ DoEvent(WidgetInfo *wi,
#define BIND_ITEM(test) \
if (bind_item && (test)) { \
- its[ptr] = all_uid; \
+ its[ptr] = (ClientData) all_uid; \
ptr++; \
for (i = 0; i < num_tags; i++) { \
its[ptr] = tag_list[i]; \
ptr++; \
} \
- its[ptr] = item; \
+ its[ptr] = (ClientData) item; \
ptr++; \
}
@@ -5281,7 +5301,7 @@ DoEvent(WidgetInfo *wi,
workspace = ZnRealloc(workspace, len);
}
sprintf(workspace, "%s:%d", (char *) tag_list[i], wi->current_part);
- its[ptr] = Tk_GetUid(workspace);
+ its[ptr] = (ClientData) Tk_GetUid(workspace);
ptr++;
}
/*
@@ -6089,7 +6109,9 @@ Repair(WidgetInfo *wi)
XGCValues values;
ZnPoint pts[2];
ZnTriStrip tristrip;
+#ifdef GLX
XColor *color;
+#endif
ZnReal int_width = Tk_Width(wi->win);
ZnReal int_height = Tk_Height(wi->win);