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

📄 tkcanvas.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 5 页
字号:
    TagSearch search;    if (argc < 2) {	Tcl_AppendResult(interp, "wrong # args: should be \"",		argv[0], " option ?arg arg ...?\"", (char *) NULL);	return TCL_ERROR;    }    Tcl_Preserve((ClientData) canvasPtr);    result = TCL_OK;    c = argv[1][0];    length = strlen(argv[1]);    if ((c == 'a') && (strncmp(argv[1], "addtag", length) == 0)) {	if (argc < 4) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " addtags tag searchCommand ?arg arg ...?\"",		    (char *) NULL);	    goto error;	}	result = FindItems(interp, canvasPtr, argc-3, argv+3, argv[2], argv[0],		" addtag tag");    } else if ((c == 'b') && (strncmp(argv[1], "bbox", length) == 0)	    && (length >= 2)) {	int i, gotAny;	int x1 = 0, y1 = 0, x2 = 0, y2 = 0;	/* Initializations needed						 * only to prevent compiler						 * warnings. */	if (argc < 3) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " bbox tagOrId ?tagOrId ...?\"",		    (char *) NULL);	    goto error;	}	gotAny = 0;	for (i = 2; i < argc; i++) {	    for (itemPtr = StartTagSearch(canvasPtr, argv[i], &search);		    itemPtr != NULL; itemPtr = NextItem(&search)) {		if ((itemPtr->x1 >= itemPtr->x2)			|| (itemPtr->y1 >= itemPtr->y2)) {		    continue;		}		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 & (unsigned) ~(ButtonMotionMask|Button1MotionMask		    |Button2MotionMask|Button3MotionMask|Button4MotionMask		    |Button5MotionMask|ButtonPressMask|ButtonReleaseMask		    |EnterWindowMask|LeaveWindowMask|KeyPressMask		    |KeyReleaseMask|PointerMotionMask|VirtualEventMask)) {		Tk_DeleteBinding(interp, canvasPtr->bindingTable,			object, argv[3]);		Tcl_ResetResult(interp);		Tcl_AppendResult(interp, "requested illegal events; ",			"only key, button, motion, enter, leave, and virtual ",			"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 (Tk_CanvasGetCoord(interp, (Tk_Canvas) 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 (Tk_CanvasGetCoord(interp, (Tk_Canvas) 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], "cget", length) == 0)	    && (length >= 2)) {	if (argc != 3) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " cget option\"",		    (char *) NULL);	    goto error;	}	result = Tk_ConfigureValue(interp, canvasPtr->tkwin, configSpecs,		(char *) canvasPtr, argv[2], 0);    } 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) {		Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,			itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2);	    }	    if (itemPtr->typePtr->coordProc != NULL) {		result = (*itemPtr->typePtr->coordProc)(interp,			(Tk_Canvas) canvasPtr, itemPtr, argc-3, argv+3);	    }	    if (argc != 3) {		Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,			itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2);	    }	}    } else if ((c == 'c') && (strncmp(argv[1], "create", length) == 0)	    && (length >= 2)) {	Tk_ItemType *typePtr;	Tk_ItemType *matchPtr = NULL;	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)(interp, (Tk_Canvas) 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;	Tk_CanvasEventuallyRedraw((Tk_Canvas) 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)(interp, (Tk_Canvas) canvasPtr,		    itemPtr, argv[3], &first) != TCL_OK) {		goto error;	    }	    if (argc == 5) {		if ((*itemPtr->typePtr->indexProc)(interp,			(Tk_Canvas) 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.	     */	    Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,		    itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2);	    (*itemPtr->typePtr->dCharsProc)((Tk_Canvas) canvasPtr,		    itemPtr, first, last);	    Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,		    itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2);	}    } 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)) {		Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,			itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2);		if (canvasPtr->bindingTable != NULL) {		    Tk_DeleteAllBindings(canvasPtr->bindingTable,			    (ClientData) itemPtr);		}		(*itemPtr->typePtr->deleteProc)((Tk_Canvas) canvasPtr, itemPtr,			canvasPtr->display);		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->newCurrentPtr) {		    canvasPtr->newCurrentPtr = NULL;		    canvasPtr->flags |= REPICK_NEEDED;		}		if (itemPtr == canvasPtr->textInfo.focusItemPtr) {		    canvasPtr->textInfo.focusItemPtr = NULL;		}		if (itemPtr == canvasPtr->textInfo.selItemPtr) {		    canvasPtr->textInfo.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;	}

⌨️ 快捷键说明

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