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

📄 tkcanvas.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 5 页
字号:
			    canvasPtr->textInfo.selectFirst;		}	    }	    CanvasSelectTo(canvasPtr, itemPtr, index);	} else if ((c == 'c') && (argv[2] != NULL)		&& (strncmp(argv[2], "clear", length) == 0)) {	    if (argc != 3) {		Tcl_AppendResult(interp, "wrong # args: should be \"",			argv[0], " select clear\"", (char *) NULL);		goto error;	    }	    if (canvasPtr->textInfo.selItemPtr != NULL) {		Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,			canvasPtr->textInfo.selItemPtr->x1,			canvasPtr->textInfo.selItemPtr->y1,			canvasPtr->textInfo.selItemPtr->x2,			canvasPtr->textInfo.selItemPtr->y2);		canvasPtr->textInfo.selItemPtr = NULL;	    }	    goto done;	} else if ((c == 'f') && (strncmp(argv[2], "from", length) == 0)) {	    if (argc != 5) {		Tcl_AppendResult(interp, "wrong # args: should be \"",			argv[0], " select from tagOrId index\"",			(char *) NULL);		goto error;	    }	    canvasPtr->textInfo.anchorItemPtr = itemPtr;	    canvasPtr->textInfo.selectAnchor = index;	} else if ((c == 'i') && (strncmp(argv[2], "item", length) == 0)) {	    if (argc != 3) {		Tcl_AppendResult(interp, "wrong # args: should be \"",			argv[0], " select item\"", (char *) NULL);		goto error;	    }	    if (canvasPtr->textInfo.selItemPtr != NULL) {		sprintf(interp->result, "%d",			canvasPtr->textInfo.selItemPtr->id);	    }	} else if ((c == 't') && (strncmp(argv[2], "to", length) == 0)) {	    if (argc != 5) {		Tcl_AppendResult(interp, "wrong # args: should be \"",			argv[0], " select to tagOrId index\"",			(char *) NULL);		goto error;	    }	    CanvasSelectTo(canvasPtr, itemPtr, index);	} else {	    Tcl_AppendResult(interp, "bad select option \"", argv[2],		    "\": must be adjust, clear, from, item, or to",		    (char *) NULL);	    goto error;	}    } else if ((c == 't') && (strncmp(argv[1], "type", length) == 0)) {	if (argc != 3) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " type tag\"", (char *) NULL);	    goto error;	}	itemPtr = StartTagSearch(canvasPtr, argv[2], &search);	if (itemPtr != NULL) {	    interp->result = itemPtr->typePtr->name;	}    } else if ((c == 'x') && (strncmp(argv[1], "xview", length) == 0)) {	int count, type;	int newX = 0;		/* Initialization needed only to prevent				 * gcc warnings. */	double fraction;	if (argc == 2) {	    PrintScrollFractions(canvasPtr->xOrigin + canvasPtr->inset,		    canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin)		    - canvasPtr->inset, canvasPtr->scrollX1,		    canvasPtr->scrollX2, interp->result);	} else {	    type = Tk_GetScrollInfo(interp, argc, argv, &fraction, &count);	    switch (type) {		case TK_SCROLL_ERROR:		    goto error;		case TK_SCROLL_MOVETO:		    newX = canvasPtr->scrollX1 - canvasPtr->inset			    + (int) (fraction * (canvasPtr->scrollX2			    - canvasPtr->scrollX1) + 0.5);		    break;		case TK_SCROLL_PAGES:		    newX = (int) (canvasPtr->xOrigin + count * .9			    * (Tk_Width(canvasPtr->tkwin) - 2*canvasPtr->inset));		    break;		case TK_SCROLL_UNITS:		    if (canvasPtr->xScrollIncrement > 0) {			newX = canvasPtr->xOrigin				+ count*canvasPtr->xScrollIncrement;		    } else {			newX = (int) (canvasPtr->xOrigin + count * .1				* (Tk_Width(canvasPtr->tkwin)				- 2*canvasPtr->inset));		    }		    break;	    }	    CanvasSetOrigin(canvasPtr, newX, canvasPtr->yOrigin);	}    } else if ((c == 'y') && (strncmp(argv[1], "yview", length) == 0)) {	int count, type;	int newY = 0;		/* Initialization needed only to prevent				 * gcc warnings. */	double fraction;	if (argc == 2) {	    PrintScrollFractions(canvasPtr->yOrigin + canvasPtr->inset,		    canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin)		    - canvasPtr->inset, canvasPtr->scrollY1,		    canvasPtr->scrollY2, interp->result);	} else {	    type = Tk_GetScrollInfo(interp, argc, argv, &fraction, &count);	    switch (type) {		case TK_SCROLL_ERROR:		    goto error;		case TK_SCROLL_MOVETO:		    newY = canvasPtr->scrollY1 - canvasPtr->inset			    + (int) (fraction*(canvasPtr->scrollY2			    - canvasPtr->scrollY1) + 0.5);		    break;		case TK_SCROLL_PAGES:		    newY = (int) (canvasPtr->yOrigin + count * .9			    * (Tk_Height(canvasPtr->tkwin)			    - 2*canvasPtr->inset));		    break;		case TK_SCROLL_UNITS:		    if (canvasPtr->yScrollIncrement > 0) {			newY = canvasPtr->yOrigin				+ count*canvasPtr->yScrollIncrement;		    } else {			newY = (int) (canvasPtr->yOrigin + count * .1				* (Tk_Height(canvasPtr->tkwin)				- 2*canvasPtr->inset));		    }		    break;	    }	    CanvasSetOrigin(canvasPtr, canvasPtr->xOrigin, newY);	}    } else {	Tcl_AppendResult(interp, "bad option \"", argv[1],		"\": must be addtag, bbox, bind, ",		"canvasx, canvasy, cget, configure, coords, create, ",		"dchars, delete, dtag, find, focus, ",		"gettags, icursor, index, insert, itemcget, itemconfigure, ",		"lower, move, postscript, raise, scale, scan, ",		"select, type, xview, or yview",		(char *) NULL);  	goto error;    }    done:    Tcl_Release((ClientData) canvasPtr);    return result;    error:    Tcl_Release((ClientData) canvasPtr);    return TCL_ERROR;}/* *---------------------------------------------------------------------- * * DestroyCanvas -- * *	This procedure is invoked by Tcl_EventuallyFree or Tcl_Release *	to clean up the internal structure of a canvas at a safe time *	(when no-one is using it anymore). * * Results: *	None. * * Side effects: *	Everything associated with the canvas is freed up. * *---------------------------------------------------------------------- */static voidDestroyCanvas(memPtr)    char *memPtr;		/* Info about canvas widget. */{    TkCanvas *canvasPtr = (TkCanvas *) memPtr;    Tk_Item *itemPtr;    /*     * Free up all of the items in the canvas.     */    for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;	    itemPtr = canvasPtr->firstItemPtr) {	canvasPtr->firstItemPtr = itemPtr->nextPtr;	(*itemPtr->typePtr->deleteProc)((Tk_Canvas) canvasPtr, itemPtr,		canvasPtr->display);	if (itemPtr->tagPtr != itemPtr->staticTagSpace) {	    ckfree((char *) itemPtr->tagPtr);	}	ckfree((char *) itemPtr);    }    /*     * Free up all the stuff that requires special handling,     * then let Tk_FreeOptions handle all the standard option-related     * stuff.     */    if (canvasPtr->pixmapGC != None) {	Tk_FreeGC(canvasPtr->display, canvasPtr->pixmapGC);    }    Tcl_DeleteTimerHandler(canvasPtr->insertBlinkHandler);    if (canvasPtr->bindingTable != NULL) {	Tk_DeleteBindingTable(canvasPtr->bindingTable);    }    Tk_FreeOptions(configSpecs, (char *) canvasPtr, canvasPtr->display, 0);    ckfree((char *) canvasPtr);}/* *---------------------------------------------------------------------- * * ConfigureCanvas -- * *	This procedure is called to process an argv/argc list, plus *	the Tk option database, in order to configure (or *	reconfigure) a canvas widget. * * Results: *	The return value is a standard Tcl result.  If TCL_ERROR is *	returned, then interp->result contains an error message. * * Side effects: *	Configuration information, such as colors, border width, *	etc. get set for canvasPtr;  old resources get freed, *	if there were any. * *---------------------------------------------------------------------- */static intConfigureCanvas(interp, canvasPtr, argc, argv, flags)    Tcl_Interp *interp;		/* Used for error reporting. */    TkCanvas *canvasPtr;	/* Information about widget;  may or may				 * not already have values for some fields. */    int argc;			/* Number of valid entries in argv. */    char **argv;		/* Arguments. */    int flags;			/* Flags to pass to Tk_ConfigureWidget. */{    XGCValues gcValues;    GC new;    if (Tk_ConfigureWidget(interp, canvasPtr->tkwin, configSpecs,	    argc, argv, (char *) canvasPtr, flags) != TCL_OK) {	return TCL_ERROR;    }    /*     * A few options need special processing, such as setting the     * background from a 3-D border and creating a GC for copying     * bits to the screen.     */    Tk_SetBackgroundFromBorder(canvasPtr->tkwin, canvasPtr->bgBorder);    if (canvasPtr->highlightWidth < 0) {	canvasPtr->highlightWidth = 0;    }    canvasPtr->inset = canvasPtr->borderWidth + canvasPtr->highlightWidth;    gcValues.function = GXcopy;    gcValues.foreground = Tk_3DBorderColor(canvasPtr->bgBorder)->pixel;    gcValues.graphics_exposures = False;    new = Tk_GetGC(canvasPtr->tkwin,	    GCFunction|GCForeground|GCGraphicsExposures, &gcValues);    if (canvasPtr->pixmapGC != None) {	Tk_FreeGC(canvasPtr->display, canvasPtr->pixmapGC);    }    canvasPtr->pixmapGC = new;    /*     * Reset the desired dimensions for the window.     */    Tk_GeometryRequest(canvasPtr->tkwin, canvasPtr->width + 2*canvasPtr->inset,	    canvasPtr->height + 2*canvasPtr->inset);    /*     * Restart the cursor timing sequence in case the on-time or off-time     * just changed.     */    if (canvasPtr->textInfo.gotFocus) {	CanvasFocusProc(canvasPtr, 1);    }    /*     * Recompute the scroll region.     */    canvasPtr->scrollX1 = 0;    canvasPtr->scrollY1 = 0;    canvasPtr->scrollX2 = 0;    canvasPtr->scrollY2 = 0;    if (canvasPtr->regionString != NULL) {	int argc2;	char **argv2;	if (Tcl_SplitList(canvasPtr->interp, canvasPtr->regionString,		&argc2, &argv2) != TCL_OK) {	    return TCL_ERROR;	}	if (argc2 != 4) {	    Tcl_AppendResult(interp, "bad scrollRegion \"",		    canvasPtr->regionString, "\"", (char *) NULL);	    badRegion:	    ckfree(canvasPtr->regionString);	    ckfree((char *) argv2);	    canvasPtr->regionString = NULL;	    return TCL_ERROR;	}	if ((Tk_GetPixels(canvasPtr->interp, canvasPtr->tkwin,		    argv2[0], &canvasPtr->scrollX1) != TCL_OK)		|| (Tk_GetPixels(canvasPtr->interp, canvasPtr->tkwin,		    argv2[1], &canvasPtr->scrollY1) != TCL_OK)		|| (Tk_GetPixels(canvasPtr->interp, canvasPtr->tkwin,		    argv2[2], &canvasPtr->scrollX2) != TCL_OK)		|| (Tk_GetPixels(canvasPtr->interp, canvasPtr->tkwin,		    argv2[3], &canvasPtr->scrollY2) != TCL_OK)) {	    goto badRegion;	}	ckfree((char *) argv2);    }    /*     * Reset the canvas's origin (this is a no-op unless confine     * mode has just been turned on or the scroll region has changed).     */    CanvasSetOrigin(canvasPtr, canvasPtr->xOrigin, canvasPtr->yOrigin);    canvasPtr->flags |= UPDATE_SCROLLBARS|REDRAW_BORDERS;    Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,	    canvasPtr->xOrigin, canvasPtr->yOrigin,	    canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin),	    canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin));    return TCL_OK;}/* *--------------------------------------------------------------------------- * * CanvasWorldChanged -- * *      This procedure is called when the world has changed in some *      way and the widget needs to recompute all its graphics contexts *	and determine its new geometry. * * Results: *      None. * * Side effects: *	Configures all items in the canvas with a empty argc/argv, for *	the side effect of causing all the items to recompute their *	geometry and to be redisplayed. * *--------------------------------------------------------------------------- */ static voidCanvasWorldChanged(instanceData)    ClientData instanceData;	/* Information about widget. */{    TkCanvas *canvasPtr;    Tk_Item *itemPtr;    int result;    canvasPtr = (TkCanvas *) instanceData;    itemPtr = canvasPtr->firstItemPtr;    for ( ; itemPtr != NULL; itemPtr = itemPtr->nextPtr) {	result = (*itemPtr->typePtr->configProc)(canvasPtr->interp,		(Tk_Canvas) canvasPtr, itemPtr, 0, NULL,		TK_CONFIG_ARGV_ONLY);	if (result != TCL_OK) {	    Tcl_ResetResult(canvasPtr->interp);	}    }    canvasPtr->flags |= REPICK_NEEDED;    Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,	    canvasPtr->xOrigin, canvasPtr->yOrigin,	    canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin),	    canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin));}/* *-------------------------------------------------------------- * * DisplayCanvas -- * *	This procedure redraws the contents of a canvas window. *	It is invoked as a do-when-idle handler, so it only runs *	when there's nothing else for the application to do. * * Results: *	None. * * Side effects: *	Information appears on the screen. * *-------------------------------------------------------------- */static void

⌨️ 快捷键说明

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