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

📄 tkplace.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 3 页
字号:
	slavePtr->tkwin = tkwin;	slavePtr->masterPtr = NULL;	slavePtr->nextPtr = NULL;	slavePtr->x = slavePtr->y = 0;	slavePtr->relX = slavePtr->relY = (float) 0.0;	slavePtr->width = slavePtr->height = 0;	slavePtr->relWidth = slavePtr->relHeight = (float) 0.0;	slavePtr->anchor = TK_ANCHOR_NW;	slavePtr->borderMode = BM_INSIDE;	slavePtr->flags = 0;	Tcl_SetHashValue(hPtr, slavePtr);	Tk_CreateEventHandler(tkwin, StructureNotifyMask, SlaveStructureProc,		(ClientData) slavePtr);	Tk_ManageGeometry(tkwin, &placerType, (ClientData) slavePtr);    } else {	slavePtr = (Slave *) Tcl_GetHashValue(hPtr);    }    return slavePtr;}/* *---------------------------------------------------------------------- * * UnlinkSlave -- * *	This procedure removes a slave window from the chain of slaves *	in its master. * * Results: *	None. * * Side effects: *	The slave list of slavePtr's master changes. * *---------------------------------------------------------------------- */static voidUnlinkSlave(slavePtr)    Slave *slavePtr;		/* Slave structure to be unlinked. */{    register Master *masterPtr;    register Slave *prevPtr;    masterPtr = slavePtr->masterPtr;    if (masterPtr == NULL) {	return;    }    if (masterPtr->slavePtr == slavePtr) {	masterPtr->slavePtr = slavePtr->nextPtr;    } else {	for (prevPtr = masterPtr->slavePtr; ;		prevPtr = prevPtr->nextPtr) {	    if (prevPtr == NULL) {		panic("UnlinkSlave couldn't find slave to unlink");	    }	    if (prevPtr->nextPtr == slavePtr) {		prevPtr->nextPtr = slavePtr->nextPtr;		break;	    }	}    }    slavePtr->masterPtr = NULL;}/* *---------------------------------------------------------------------- * * FindMaster -- * *	Given a Tk_Window token, find the Master structure corresponding *	to that token (making a new one if necessary). * * Results: *	None. * * Side effects: *	A new Master structure may be created. * *---------------------------------------------------------------------- */static Master *FindMaster(tkwin)    Tk_Window tkwin;		/* Token for desired master. */{    Tcl_HashEntry *hPtr;    register Master *masterPtr;    int new;    hPtr = Tcl_CreateHashEntry(&masterTable, (char *) tkwin, &new);    if (new) {	masterPtr = (Master *) ckalloc(sizeof(Master));	masterPtr->tkwin = tkwin;	masterPtr->slavePtr = NULL;	masterPtr->flags = 0;	Tcl_SetHashValue(hPtr, masterPtr);	Tk_CreateEventHandler(masterPtr->tkwin, StructureNotifyMask,		MasterStructureProc, (ClientData) masterPtr);    } else {	masterPtr = (Master *) Tcl_GetHashValue(hPtr);    }    return masterPtr;}/* *---------------------------------------------------------------------- * * ConfigureSlave -- * *	This procedure is called to process an argv/argc list to *	reconfigure the placement of a window. * * Results: *	A standard Tcl result.  If an error occurs then a message is *	left in interp->result. * * Side effects: *	Information in slavePtr may change, and slavePtr's master is *	scheduled for reconfiguration. * *---------------------------------------------------------------------- */static intConfigureSlave(interp, slavePtr, argc, argv)    Tcl_Interp *interp;		/* Used for error reporting. */    Slave *slavePtr;		/* Pointer to current information				 * about slave. */    int argc;			/* Number of config arguments. */    char **argv;		/* String values for arguments. */{    register Master *masterPtr;    int c, result;    size_t length;    double d;    result = TCL_OK;    if (Tk_IsTopLevel(slavePtr->tkwin)) {	Tcl_AppendResult(interp, "can't use placer on top-level window \"",		Tk_PathName(slavePtr->tkwin), "\"; use wm command instead",		(char *) NULL);	return TCL_ERROR;    }    for ( ; argc > 0; argc -= 2, argv += 2) {	if (argc < 2) {	    Tcl_AppendResult(interp, "extra option \"", argv[0],		    "\" (option with no value?)", (char *) NULL);	    result = TCL_ERROR;	    goto done;	}	length = strlen(argv[0]);	c = argv[0][1];	if ((c == 'a') && (strncmp(argv[0], "-anchor", length) == 0)) {	    if (Tk_GetAnchor(interp, argv[1], &slavePtr->anchor) != TCL_OK) {		result = TCL_ERROR;		goto done;	    }	} else if ((c == 'b')		&& (strncmp(argv[0], "-bordermode", length) == 0)) {	    c = argv[1][0];	    length = strlen(argv[1]);	    if ((c == 'i') && (strncmp(argv[1], "ignore", length) == 0)		    && (length >= 2)) {		slavePtr->borderMode = BM_IGNORE;	    } else if ((c == 'i') && (strncmp(argv[1], "inside", length) == 0)		    && (length >= 2)) {		slavePtr->borderMode = BM_INSIDE;	    } else if ((c == 'o')		    && (strncmp(argv[1], "outside", length) == 0)) {		slavePtr->borderMode = BM_OUTSIDE;	    } else {		Tcl_AppendResult(interp, "bad border mode \"", argv[1],			"\": must be ignore, inside, or outside",			(char *) NULL);		result = TCL_ERROR;		goto done;	    }	} else if ((c == 'h') && (strncmp(argv[0], "-height", length) == 0)) {	    if (argv[1][0] == 0) {		slavePtr->flags &= ~CHILD_HEIGHT;	    } else {		if (Tk_GetPixels(interp, slavePtr->tkwin, argv[1],			&slavePtr->height) != TCL_OK) {		    result = TCL_ERROR;		    goto done;		}		slavePtr->flags |= CHILD_HEIGHT;	    }	} else if ((c == 'i') && (strncmp(argv[0], "-in", length) == 0)) {	    Tk_Window tkwin;	    Tk_Window ancestor;	    tkwin = Tk_NameToWindow(interp, argv[1], slavePtr->tkwin);	    if (tkwin == NULL) {		result = TCL_ERROR;		goto done;	    }	    /*	     * Make sure that the new master is either the logical parent	     * of the slave or a descendant of that window, and that the	     * master and slave aren't the same.	     */	    for (ancestor = tkwin; ; ancestor = Tk_Parent(ancestor)) {		if (ancestor == Tk_Parent(slavePtr->tkwin)) {		    break;		}		if (Tk_IsTopLevel(ancestor)) {		    Tcl_AppendResult(interp, "can't place ",			    Tk_PathName(slavePtr->tkwin), " relative to ",			    Tk_PathName(tkwin), (char *) NULL);		    result = TCL_ERROR;		    goto done;		}	    }	    if (slavePtr->tkwin == tkwin) {		Tcl_AppendResult(interp, "can't place ",			Tk_PathName(slavePtr->tkwin), " relative to itself",			(char *) NULL);		result = TCL_ERROR;		goto done;	    }	    if ((slavePtr->masterPtr != NULL)		    && (slavePtr->masterPtr->tkwin == tkwin)) {		/*		 * Re-using same old master.  Nothing to do.		 */	    } else {		if ((slavePtr->masterPtr != NULL)			&& (slavePtr->masterPtr->tkwin			!= Tk_Parent(slavePtr->tkwin))) {		    Tk_UnmaintainGeometry(slavePtr->tkwin,			    slavePtr->masterPtr->tkwin);		}		UnlinkSlave(slavePtr);		slavePtr->masterPtr = FindMaster(tkwin);		slavePtr->nextPtr = slavePtr->masterPtr->slavePtr;		slavePtr->masterPtr->slavePtr = slavePtr;	    }	} else if ((c == 'r') && (strncmp(argv[0], "-relheight", length) == 0)		&& (length >= 5)) {	    if (argv[1][0] == 0) {		slavePtr->flags &= ~CHILD_REL_HEIGHT;	    } else {		if (Tcl_GetDouble(interp, argv[1], &d) != TCL_OK) {		    result = TCL_ERROR;		    goto done;		}		slavePtr->relHeight = (float) d;		slavePtr->flags |= CHILD_REL_HEIGHT;	    }	} else if ((c == 'r') && (strncmp(argv[0], "-relwidth", length) == 0)		&& (length >= 5)) {	    if (argv[1][0] == 0) {		slavePtr->flags &= ~CHILD_REL_WIDTH;	    } else {		if (Tcl_GetDouble(interp, argv[1], &d) != TCL_OK) {		    result = TCL_ERROR;		    goto done;		}		slavePtr->relWidth = (float) d;		slavePtr->flags |= CHILD_REL_WIDTH;	    }	} else if ((c == 'r') && (strncmp(argv[0], "-relx", length) == 0)		&& (length >= 5)) {	    if (Tcl_GetDouble(interp, argv[1], &d) != TCL_OK) {		result = TCL_ERROR;		goto done;	    }	    slavePtr->relX = (float) d;	} else if ((c == 'r') && (strncmp(argv[0], "-rely", length) == 0)		&& (length >= 5)) {	    if (Tcl_GetDouble(interp, argv[1], &d) != TCL_OK) {		result = TCL_ERROR;		goto done;	    }	    slavePtr->relY = (float) d;	} else if ((c == 'w') && (strncmp(argv[0], "-width", length) == 0)) {	    if (argv[1][0] == 0) {		slavePtr->flags &= ~CHILD_WIDTH;	    } else {		if (Tk_GetPixels(interp, slavePtr->tkwin, argv[1],			&slavePtr->width) != TCL_OK) {		    result = TCL_ERROR;		    goto done;		}		slavePtr->flags |= CHILD_WIDTH;	    }	} else if ((c == 'x') && (strncmp(argv[0], "-x", length) == 0)) {	    if (Tk_GetPixels(interp, slavePtr->tkwin, argv[1],		    &slavePtr->x) != TCL_OK) {		result = TCL_ERROR;		goto done;	    }	} else if ((c == 'y') && (strncmp(argv[0], "-y", length) == 0)) {	    if (Tk_GetPixels(interp, slavePtr->tkwin, argv[1],		    &slavePtr->y) != TCL_OK) {		result = TCL_ERROR;		goto done;	    }	} else {	    Tcl_AppendResult(interp, "unknown or ambiguous option \"",		    argv[0], "\": must be -anchor, -bordermode, -height, ",		    "-in, -relheight, -relwidth, -relx, -rely, -width, ",		    "-x, or -y", (char *) NULL);	    result = TCL_ERROR;	    goto done;	}    }    /*     * If there's no master specified for this slave, use its Tk_Parent.     * Then arrange for a placement recalculation in the master.     */    done:    masterPtr = slavePtr->masterPtr;    if (masterPtr == NULL) {	masterPtr = FindMaster(Tk_Parent(slavePtr->tkwin));	slavePtr->masterPtr = masterPtr;	slavePtr->nextPtr = masterPtr->slavePtr;	masterPtr->slavePtr = slavePtr;    }    if (!(masterPtr->flags & PARENT_RECONFIG_PENDING)) {	masterPtr->flags |= PARENT_RECONFIG_PENDING;	Tcl_DoWhenIdle(RecomputePlacement, (ClientData) masterPtr);    }    return result;}/* *---------------------------------------------------------------------- * * RecomputePlacement -- * *	This procedure is called as a when-idle handler.  It recomputes *	the geometries of all the slaves of a given master. * * Results: *	None. * * Side effects: *	Windows may change size or shape. * *---------------------------------------------------------------------- */static voidRecomputePlacement(clientData)    ClientData clientData;	/* Pointer to Master record. */{    register Master *masterPtr = (Master *) clientData;

⌨️ 快捷键说明

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