aboutsummaryrefslogtreecommitdiff
path: root/generic/tkZinc.c
diff options
context:
space:
mode:
authorlecoanet2000-09-27 14:47:28 +0000
committerlecoanet2000-09-27 14:47:28 +0000
commit5be9f0a9040282e8a5eb7e5a40df9855b25ee8b5 (patch)
treef9dac972697cd1ec1500e649d35c0f82311f5790 /generic/tkZinc.c
parent22b3f683453a64443ded4ce655c3cf5cd25761c0 (diff)
downloadtkzinc-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.c68
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));
}
}