⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tkcanvas.c

📁 MPICH是MPI的重要研究,提供了一系列的接口函数,为并行计算的实现提供了编程环境.
💻 C
📖 第 1 页 / 共 5 页
字号:
	    for (itemPtr = StartTagSearch(canvasPtr, argv[i], &search);		    itemPtr != NULL; itemPtr = NextItem(&search)) {		if (!gotAny) {		    x1 = itemPtr->x1;		    y1 = itemPtr->y1;		    x2 = itemPtr->x2;		    y2 = itemPtr->y2;		    gotAny = 1;		} else {		    if (itemPtr->x1 < x1) {			x1 = itemPtr->x1;		    }		    if (itemPtr->y1 < y1) {			y1 = itemPtr->y1;		    }		    if (itemPtr->x2 > x2) {			x2 = itemPtr->x2;		    }		    if (itemPtr->y2 > y2) {			y2 = itemPtr->y2;		    }		}	    }	}	if (gotAny) {	    sprintf(interp->result, "%d %d %d %d", x1, y1, x2, y2);	}    } else if ((c == 'b') && (strncmp(argv[1], "bind", length) == 0)	    && (length >= 2)) {	ClientData object;	if ((argc < 3) || (argc > 5)) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " bind tagOrId ?sequence? ?command?\"",		    (char *) NULL);	    goto error;	}	/*	 * Figure out what object to use for the binding (individual	 * item vs. tag).	 */	object = 0;	if (isdigit(UCHAR(argv[2][0]))) {	    int id;	    char *end;	    id = strtoul(argv[2], &end, 0);	    if (*end != 0) {		goto bindByTag;	    }	    for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;		    itemPtr = itemPtr->nextPtr) {		if (itemPtr->id == id) {		    object = (ClientData) itemPtr;		    break;		}	    }	    if (object == 0) {		Tcl_AppendResult(interp, "item \"", argv[2],			"\" doesn't exist", (char *) NULL);		goto error;	    }	} else {	    bindByTag:	    object = (ClientData) Tk_GetUid(argv[2]);	}	/*	 * Make a binding table if the canvas doesn't already have	 * one.	 */	if (canvasPtr->bindingTable == NULL) {	    canvasPtr->bindingTable = Tk_CreateBindingTable(interp);	}	if (argc == 5) {	    int append = 0;	    unsigned long mask;	    if (argv[4][0] == 0) {		result = Tk_DeleteBinding(interp, canvasPtr->bindingTable,			object, argv[3]);		goto done;	    }	    if (argv[4][0] == '+') {		argv[4]++;		append = 1;	    }	    mask = Tk_CreateBinding(interp, canvasPtr->bindingTable,		    object, argv[3], argv[4], append);	    if (mask == 0) {		goto error;	    }	    if (mask & ~(ButtonMotionMask|Button1MotionMask|Button2MotionMask		    |Button3MotionMask|Button4MotionMask|Button5MotionMask		    |ButtonPressMask|ButtonReleaseMask|EnterWindowMask		    |LeaveWindowMask|KeyPressMask|KeyReleaseMask		    |PointerMotionMask)) {		Tk_DeleteBinding(interp, canvasPtr->bindingTable,			object, argv[3]);		Tcl_ResetResult(interp);		Tcl_AppendResult(interp, "requested illegal events; ",			"only key, button, motion, and enter/leave ",			"events may be used", (char *) NULL);		goto error;	    }	} else if (argc == 4) {	    char *command;    	    command = Tk_GetBinding(interp, canvasPtr->bindingTable,		    object, argv[3]);	    if (command == NULL) {		goto error;	    }	    interp->result = command;	} else {	    Tk_GetAllBindings(interp, canvasPtr->bindingTable, object);	}    } else if ((c == 'c') && (strcmp(argv[1], "canvasx") == 0)) {	int x;	double grid;	if ((argc < 3) || (argc > 4)) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " canvasx screenx ?gridspacing?\"",		    (char *) NULL);	    goto error;	}	if (Tk_GetPixels(interp, canvasPtr->tkwin, argv[2], &x) != TCL_OK) {	    goto error;	}	if (argc == 4) {	    if (TkGetCanvasCoord(canvasPtr, argv[3], &grid) != TCL_OK) {		goto error;	    }	} else {	    grid = 0.0;	}	x += canvasPtr->xOrigin;	Tcl_PrintDouble(interp, GridAlign((double) x, grid), interp->result);    } else if ((c == 'c') && (strcmp(argv[1], "canvasy") == 0)) {	int y;	double grid;	if ((argc < 3) || (argc > 4)) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " canvasy screeny ?gridspacing?\"",		    (char *) NULL);	    goto error;	}	if (Tk_GetPixels(interp, canvasPtr->tkwin, argv[2], &y) != TCL_OK) {	    goto error;	}	if (argc == 4) {	    if (TkGetCanvasCoord(canvasPtr, argv[3], &grid) != TCL_OK) {		goto error;	    }	} else {	    grid = 0.0;	}	y += canvasPtr->yOrigin;	Tcl_PrintDouble(interp, GridAlign((double) y, grid), interp->result);    } else if ((c == 'c') && (strncmp(argv[1], "configure", length) == 0)	    && (length >= 3)) {	if (argc == 2) {	    result = Tk_ConfigureInfo(interp, canvasPtr->tkwin, configSpecs,		    (char *) canvasPtr, (char *) NULL, 0);	} else if (argc == 3) {	    result = Tk_ConfigureInfo(interp, canvasPtr->tkwin, configSpecs,		    (char *) canvasPtr, argv[2], 0);	} else {	    result = ConfigureCanvas(interp, canvasPtr, argc-2, argv+2,		    TK_CONFIG_ARGV_ONLY);	}    } else if ((c == 'c') && (strncmp(argv[1], "coords", length) == 0)	    && (length >= 3)) {	if (argc < 3) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " coords tagOrId ?x y x y ...?\"",		    (char *) NULL);	    goto error;	}	itemPtr = StartTagSearch(canvasPtr, argv[2], &search);	if (itemPtr != NULL) {	    if (argc != 3) {		EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1,		    itemPtr->x2, itemPtr->y2);	    }	    if (itemPtr->typePtr->coordProc != NULL) {		result = (*itemPtr->typePtr->coordProc)(canvasPtr, itemPtr,			argc-3, argv+3);	    }	    if (argc != 3) {		EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1,		    itemPtr->x2, itemPtr->y2);	    }	}    } else if ((c == 'c') && (strncmp(argv[1], "create", length) == 0)	    && (length >= 2)) {	register Tk_ItemType *typePtr;	Tk_ItemType *matchPtr = NULL;	register Tk_Item *itemPtr;	if (argc < 3) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " create type ?arg arg ...?\"", (char *) NULL);	    goto error;	}	c = argv[2][0];	length = strlen(argv[2]);	for (typePtr = typeList; typePtr != NULL; typePtr = typePtr->nextPtr) {	    if ((c == typePtr->name[0])		    && (strncmp(argv[2], typePtr->name, length) == 0)) {		if (matchPtr != NULL) {		    badType:		    Tcl_AppendResult(interp,			    "unknown or ambiguous item type \"",			    argv[2], "\"", (char *) NULL);		    goto error;		}		matchPtr = typePtr;	    }	}	if (matchPtr == NULL) {	    goto badType;	}	typePtr = matchPtr;	itemPtr = (Tk_Item *) ckalloc((unsigned) typePtr->itemSize);	itemPtr->id = canvasPtr->nextId;	canvasPtr->nextId++;	itemPtr->tagPtr = itemPtr->staticTagSpace;	itemPtr->tagSpace = TK_TAG_SPACE;	itemPtr->numTags = 0;	itemPtr->typePtr = typePtr;	if ((*typePtr->createProc)(canvasPtr, itemPtr, argc-3, argv+3)		!= TCL_OK) {	    ckfree((char *) itemPtr);	    goto error;	}	itemPtr->nextPtr = NULL;	canvasPtr->hotPtr = itemPtr;	canvasPtr->hotPrevPtr = canvasPtr->lastItemPtr;	if (canvasPtr->lastItemPtr == NULL) {	    canvasPtr->firstItemPtr = itemPtr;	} else {	    canvasPtr->lastItemPtr->nextPtr = itemPtr;	}	canvasPtr->lastItemPtr = itemPtr;	EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1,		itemPtr->x2, itemPtr->y2);	canvasPtr->flags |= REPICK_NEEDED;	sprintf(interp->result, "%d", itemPtr->id);    } else if ((c == 'd') && (strncmp(argv[1], "dchars", length) == 0)	    && (length >= 2)) {	int first, last;	if ((argc != 4) && (argc != 5)) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " dchars tagOrId first ?last?\"",		    (char *) NULL);	    goto error;	}	for (itemPtr = StartTagSearch(canvasPtr, argv[2], &search);		itemPtr != NULL; itemPtr = NextItem(&search)) {	    if ((itemPtr->typePtr->indexProc == NULL)		    || (itemPtr->typePtr->dCharsProc == NULL)) {		continue;	    }	    if ((*itemPtr->typePtr->indexProc)(canvasPtr, itemPtr,		    argv[3], &first) != TCL_OK) {		goto error;	    }	    if (argc == 5) {		if ((*itemPtr->typePtr->indexProc)(canvasPtr, itemPtr,			argv[4], &last) != TCL_OK) {		    goto error;		}	    } else {		last = first;	    }	    /*	     * Redraw both item's old and new areas:  it's possible	     * that a delete could result in a new area larger than	     * the old area.	     */	    EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1,		    itemPtr->x2, itemPtr->y2);	    result = (*itemPtr->typePtr->dCharsProc)(canvasPtr, itemPtr,		    first, last);	    EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1,		    itemPtr->x2, itemPtr->y2);	    if (result != TCL_OK) {		goto error;	    }	}    } else if ((c == 'd') && (strncmp(argv[1], "delete", length) == 0)	    && (length >= 2)) {	int i;	for (i = 2; i < argc; i++) {	    for (itemPtr = StartTagSearch(canvasPtr, argv[i], &search);		itemPtr != NULL; itemPtr = NextItem(&search)) {		EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1,		    itemPtr->x2, itemPtr->y2);		if (canvasPtr->bindingTable != NULL) {		    Tk_DeleteAllBindings(canvasPtr->bindingTable,			    (ClientData) itemPtr);		}		(*itemPtr->typePtr->deleteProc)(canvasPtr, itemPtr);		if (itemPtr->tagPtr != itemPtr->staticTagSpace) {		    ckfree((char *) itemPtr->tagPtr);		}		if (search.prevPtr == NULL) {		    canvasPtr->firstItemPtr = itemPtr->nextPtr;		    if (canvasPtr->firstItemPtr == NULL) {			canvasPtr->lastItemPtr = NULL;		    }		} else {		    search.prevPtr->nextPtr = itemPtr->nextPtr;		}		if (canvasPtr->lastItemPtr == itemPtr) {		    canvasPtr->lastItemPtr = search.prevPtr;		}		ckfree((char *) itemPtr);		if (itemPtr == canvasPtr->currentItemPtr) {		    canvasPtr->currentItemPtr = NULL;		    canvasPtr->flags |= REPICK_NEEDED;		}		if (itemPtr == canvasPtr->focusItemPtr) {		    canvasPtr->focusItemPtr = NULL;		}		if (itemPtr == canvasPtr->selItemPtr) {		    canvasPtr->selItemPtr = NULL;		}		if ((itemPtr == canvasPtr->hotPtr)			|| (itemPtr = canvasPtr->hotPrevPtr)) {		    canvasPtr->hotPtr = NULL;		}	    }	}    } else if ((c == 'd') && (strncmp(argv[1], "dtag", length) == 0)	    && (length >= 2)) {	Tk_Uid tag;	int i;	if ((argc != 3) && (argc != 4)) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " dtag tagOrId ?tagToDelete?\"",		    (char *) NULL);	    goto error;	}	if (argc == 4) {	    tag = Tk_GetUid(argv[3]);	} else {	    tag = Tk_GetUid(argv[2]);	}	for (itemPtr = StartTagSearch(canvasPtr, argv[2], &search);		itemPtr != NULL; itemPtr = NextItem(&search)) {	    for (i = itemPtr->numTags-1; i >= 0; i--) {		if (itemPtr->tagPtr[i] == tag) {		    itemPtr->tagPtr[i] = itemPtr->tagPtr[itemPtr->numTags-1];		    itemPtr->numTags--;		}	    }	}    } else if ((c == 'f') && (strncmp(argv[1], "find", length) == 0)	    && (length >= 2)) {	if (argc < 3) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " find searchCommand ?arg arg ...?\"",		    (char *) NULL);	    goto error;	}	result = FindItems(interp, canvasPtr, argc-2, argv+2, (char *) NULL,		argv[0]," find");    } else if ((c == 'f') && (strncmp(argv[1], "focus", length) == 0)	    && (length >= 2)) {	if (argc > 3) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " focus ?tagOrId?\"",		    (char *) NULL);	    goto error;	}	itemPtr = canvasPtr->focusItemPtr;	if (argc == 2) {	    if (itemPtr != NULL) {		sprintf(interp->result, "%d", itemPtr->id);	    }	    goto done;	}	if ((itemPtr != NULL) && (canvasPtr->flags & GOT_FOCUS)) {	    EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1,		    itemPtr->x2, itemPtr->y2);	}	if (argv[2][0] == 0) {	    canvasPtr->focusItemPtr = NULL;	    goto done;	}	for (itemPtr = StartTagSearch(canvasPtr, argv[2], &search);		itemPtr != NULL; itemPtr = NextItem(&search)) {	    if (itemPtr->typePtr->icursorProc != NULL) {		break;	    }	}	if (itemPtr == NULL) {	    goto done;	}	canvasPtr->focusItemPtr = itemPtr;	if (canvasPtr->flags & GOT_FOCUS) {	    EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1,		    itemPtr->x2, itemPtr->y2);	}    } else if ((c == 'g') && (strncmp(argv[1], "gettags", length) == 0)) {	if (argc != 3) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " gettags tagOrId\"", (char *) NULL);	    goto error;	}	itemPtr = StartTagSearch(canvasPtr, argv[2], &search);	if (itemPtr != NULL) {	    int i;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -