diff options
author | lecoanet | 2000-09-27 14:47:28 +0000 |
---|---|---|
committer | lecoanet | 2000-09-27 14:47:28 +0000 |
commit | 5be9f0a9040282e8a5eb7e5a40df9855b25ee8b5 (patch) | |
tree | f9dac972697cd1ec1500e649d35c0f82311f5790 /generic/tkZinc.c | |
parent | 22b3f683453a64443ded4ce655c3cf5cd25761c0 (diff) | |
download | tkzinc-5be9f0a9040282e8a5eb7e5a40df9855b25ee8b5.zip tkzinc-5be9f0a9040282e8a5eb7e5a40df9855b25ee8b5.tar.gz tkzinc-5be9f0a9040282e8a5eb7e5a40df9855b25ee8b5.tar.bz2 tkzinc-5be9f0a9040282e8a5eb7e5a40df9855b25ee8b5.tar.xz |
Debut de travail sur le rendu local avec m�moire partag�e.
Renommage de la commande verticeat en vertexat.
Diffstat (limited to 'generic/tkZinc.c')
-rw-r--r-- | generic/tkZinc.c | 68 |
1 files changed, 45 insertions, 23 deletions
diff --git a/generic/tkZinc.c b/generic/tkZinc.c index faf1d10..dc255d5 100644 --- a/generic/tkZinc.c +++ b/generic/tkZinc.c @@ -62,6 +62,11 @@ static const char compile_id[]="$Compile: " __FILE__ " " __DATE__ " " __TIME__ " #include <sys/time.h> #include <unistd.h> #include <X11/Xatom.h> +#ifdef SHM +#include <sys/shm.h> +#include <X11/extensions/XShm.h> +#endif + #if 0 typedef struct TagSearch { @@ -385,8 +390,8 @@ ZincObjCmd(ClientData client_data, /* Main window associated with WidgetInfo *wi; Tk_Window tkwin; unsigned int num; - int major_op, first_err, first_evt; - + int major_op, minor_op, first_err, first_evt; + if (!inited) { InitZinc(interp); } @@ -414,8 +419,19 @@ ZincObjCmd(ClientData client_data, /* Main window associated with wi->interp = interp; wi->dpy = Tk_Display(tkwin); wi->screen = Tk_Screen(tkwin); - wi->has_x_shm = XQueryExtension(wi->dpy, "MIT-SHM", - &major_op, &first_evt, &first_err); + wi->has_z_pixmaps = False; + wi->has_x_shm = False; +#ifdef SHM + if (XQueryExtension(wi->dpy, "MIT-SHM", &major_op, &first_evt, &first_err)) { + ZnBool pixmaps; + if (XShmQueryVersion(wi->dpy, &major_op, &minor_op, &pixmaps) == True) { + wi->has_x_shm = True; + if ((pixmaps == True) && (XShmPixmapFormat(wi->dpy) == ZPixmap)) { + wi->has_z_pixmap = True; + } + } + } +#endif #ifdef SHAPE wi->has_x_shape = XQueryExtension(wi->dpy, "SHAPE", &major_op, &first_evt, &first_err); @@ -2103,8 +2119,7 @@ Contour(WidgetInfo *wi, } cmd = ops[index]; - result = ZnItemWithTagOrId(wi, args[4], wi->top_group, True, - &shape, search); + result = ZnItemWithTagOrId(wi, args[4], wi->top_group, True, &shape, search_var); if ((result == ZN_ERROR) || (shape == ZN_NO_ITEM)) { Tcl_ResetResult(wi->interp); if (ParseCoordList(wi, args[4], &points, &num_points) == ZN_ERROR) { @@ -2407,7 +2422,7 @@ WidgetObjCmd(ClientData client_data, /* Information about the widget. */ "lower", "monitor", "numparts", "postscript", "raise", "remove", "rotate", "scale", "select", "smooth", "tapply", "tdelete", "transform", "translate", "treset", - "trestore", "tsave", "type", "verticeat", NULL + "trestore", "tsave", "type", "vertexat", NULL }; enum sub_cmds { ZN_W_ADD, ZN_W_ADDTAG, ZN_W_ANCHORXY, ZN_W_BBOX, ZN_W_BECOMES, ZN_W_BIND, @@ -2419,7 +2434,7 @@ WidgetObjCmd(ClientData client_data, /* Information about the widget. */ ZN_W_LOWER, ZN_W_MONITOR, ZN_W_NUMPARTS, ZN_W_POSTSCRIPT, ZN_W_RAISE, ZN_W_REMOVE, ZN_W_ROTATE, ZN_W_SCALE, ZN_W_SELECT, ZN_W_SMOOTH, 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_VERTICE_AT, + ZN_W_TRESTORE, ZN_W_TSAVE, ZN_W_TYPE, ZN_W_VERTEX_AT, }; static char *sel_cmd_strings[] = { "adjust", "clear", "from", "item", "to", NULL @@ -2757,7 +2772,7 @@ WidgetObjCmd(ClientData client_data, /* Information about the widget. */ } result = ZnItemWithTagOrId(wi, args[3], wi->top_group, True, &grp, &search_var); - if ((result == ZN_ERROR) || (grp == ZN_NO_ITEM)) { + if ((result == ZN_ERROR) || (grp == ZN_NO_ITEM)|| (grp->class != ZnGroup)) { goto error; } if (argc == 5) { @@ -2842,7 +2857,7 @@ WidgetObjCmd(ClientData client_data, /* Information about the widget. */ "contour tagOrId operator coordListOrTagOrId"); goto error; } - if (Contour(wi, argc, args) == ZN_ERROR) { + if (Contour(wi, argc, args, &search_var) == ZN_ERROR) { goto error; } break; @@ -4005,20 +4020,29 @@ WidgetObjCmd(ClientData client_data, /* Information about the widget. */ } break; /* - * verticeat + * vertexat */ - case ZN_W_VERTICE_AT: + case ZN_W_VERTEX_AT: { ZnPoint p; int contour, vertex, o_vertex; if (argc != 5) { - Tcl_WrongNumArgs(interp, 1, args, " verticeat tagOrId x y"); + Tcl_WrongNumArgs(interp, 1, args, " vertexat tagOrId x y"); goto error; } - result = ZnItemWithTagOrId(wi, args[2], wi->top_group, True, - &item, &search_var); - if ((result == ZN_ERROR) || (item == ZN_NO_ITEM)) { + if (ZnTagSearchScan(wi, args[2], &search_var) == ZN_ERROR) { + goto error; + } + for (item = ZnTagSearchFirst(search_var, wi->top_group, True); + item != ZN_NO_ITEM; item = ZnTagSearchNext(search_var)) { + if (item->class->PickVertex != NULL) { + break; + } + } + if (item == ZN_NO_ITEM) { + Tcl_AppendResult(interp, "can't find a suitable item \"", + Tcl_GetString(args[2]), "\"", NULL); goto error; } if (Tcl_GetDoubleFromObj(interp, args[3], &p.x) == ZN_ERROR) { @@ -4029,13 +4053,11 @@ WidgetObjCmd(ClientData client_data, /* Information about the widget. */ } p.x -= wi->inset; p.y -= wi->inset; - if (item->class->PickVertex) { - item->class->PickVertex(item, &p, &contour, &vertex, &o_vertex); - l = Tcl_GetObjResult(interp); - Tcl_ListObjAppendElement(interp, l, Tcl_NewIntObj(contour)); - Tcl_ListObjAppendElement(interp, l, Tcl_NewIntObj(vertex)); - Tcl_ListObjAppendElement(interp, l, Tcl_NewIntObj(o_vertex)); - } + item->class->PickVertex(item, &p, &contour, &vertex, &o_vertex); + l = Tcl_GetObjResult(interp); + Tcl_ListObjAppendElement(interp, l, Tcl_NewIntObj(contour)); + Tcl_ListObjAppendElement(interp, l, Tcl_NewIntObj(vertex)); + Tcl_ListObjAppendElement(interp, l, Tcl_NewIntObj(o_vertex)); } } |