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

📄 tkmacsubwindows.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 3 页
字号:
	        /*         * Find the Parent window -         *    For an embedded window this will be its container.         */         	if (Tk_IsEmbedded(macWin->winPtr)) {	    TkWindow *contWinPtr;	    	    contWinPtr = TkpGetOtherWindow(macWin->winPtr);	    if (contWinPtr == NULL) {	            panic("XMoveResizeWindow could not find container");	    }	    macParent = contWinPtr->privatePtr;	    	    /*	     * NOTE: Here we should handle out of process embedding.	     */		    	} else {	    macParent = macWin->winPtr->parentPtr->privatePtr;   	    if (macParent == NULL) {	        return; /* TODO: Probably should be a panic */	    }	}	        	TkMacInvalClipRgns(macParent->winPtr);	TkMacInvalidateWindow(macWin, TK_PARENT_WINDOW);	deltaX = - macWin->xOff;	deltaY = - macWin->yOff;	        /*	 * If macWin->winPtr is an embedded window, don't offset by its	 *  parent's borderwidth...	 */	 	if (!Tk_IsEmbedded(macWin->winPtr)) {	    parentBorderwidth = macWin->winPtr->parentPtr->changes.border_width;	} else {	    parentBorderwidth = 0;	}	deltaX += macParent->xOff + parentBorderwidth +	    macWin->winPtr->changes.x;	deltaY += macParent->yOff + parentBorderwidth +	    macWin->winPtr->changes.y;			UpdateOffsets(macWin->winPtr, deltaX, deltaY);	TkMacWinBounds(macWin->winPtr, &bounds);	InvalRect(&bounds);    }}/* *---------------------------------------------------------------------- * * XMoveWindow -- * *	Move a given X window.  See X windows documentation for further *  details. * * Results: *	None. * * Side effects: *	None. * *---------------------------------------------------------------------- */void XMoveWindow(    Display* display,		/* Display. */    Window window,		/* Window. */    int x,    int y){    MacDrawable *macWin = (MacDrawable *) window;    GWorldPtr destPort;    destPort = TkMacGetDrawablePort(window);    if (destPort == NULL) {	return;    }    SetPort((GrafPtr) destPort);    if (Tk_IsTopLevel(macWin->winPtr) && !Tk_IsEmbedded(macWin->winPtr)) {	/* 	 * NOTE: we are not adding the new space to the update	 * region.  It is currently assumed that Tk will need	 * to completely redraw anway.	 */	tkMacMoveWindow((WindowRef) destPort, x, y);	/* TODO: is the following right? */	TkMacInvalidateWindow(macWin, TK_WINDOW_ONLY);	TkMacInvalClipRgns(macWin->winPtr);    } else {	int deltaX, deltaY, parentBorderwidth;	Rect bounds;	MacDrawable *macParent;	        /*         * Find the Parent window -         * For an embedded window this will be its container.         */         	if (Tk_IsEmbedded(macWin->winPtr)) {	    TkWindow *contWinPtr;	    	    contWinPtr = TkpGetOtherWindow(macWin->winPtr);	    if (contWinPtr == NULL) {	            panic("XMoveWindow could not find container");	    }	    macParent = contWinPtr->privatePtr;	    	    /*	     * NOTE: Here we should handle out of process embedding.	     */		    	} else {	    macParent = macWin->winPtr->parentPtr->privatePtr;   	    if (macParent == NULL) {	        return; /* TODO: Probably should be a panic */	    }	}	TkMacInvalClipRgns(macParent->winPtr);	TkMacInvalidateWindow(macWin, TK_PARENT_WINDOW);	deltaX = - macWin->xOff;	deltaY = - macWin->yOff;	        /*	 * If macWin->winPtr is an embedded window, don't offset by its	 *  parent's borderwidth...	 */	 	if (!Tk_IsEmbedded(macWin->winPtr)) {	    parentBorderwidth = macWin->winPtr->parentPtr->changes.border_width;	} else {	    parentBorderwidth = 0;	}	deltaX += macParent->xOff + parentBorderwidth +	    macWin->winPtr->changes.x;	deltaY += macParent->yOff + parentBorderwidth +	    macWin->winPtr->changes.y;			UpdateOffsets(macWin->winPtr, deltaX, deltaY);	TkMacWinBounds(macWin->winPtr, &bounds);	InvalRect(&bounds);    }}/* *---------------------------------------------------------------------- * * XRaiseWindow -- * *	Change the stacking order of a window. * * Results: *	None. * * Side effects: *	Changes the stacking order of the specified window. * *---------------------------------------------------------------------- */void XRaiseWindow(    Display* display,		/* Display. */    Window window)		/* Window. */{    MacDrawable *macWin = (MacDrawable *) window;        display->request++;    if (Tk_IsTopLevel(macWin->winPtr) && !Tk_IsEmbedded(macWin->winPtr)) {	TkWmRestackToplevel(macWin->winPtr, Above, NULL);    } else {    	/* TODO: this should generate damage */    }}/* *---------------------------------------------------------------------- * * XConfigureWindow -- * *	Change the size, position, stacking, or border of the specified *	window. * * Results: *	None. * * Side effects: *	Changes the attributes of the specified window.  Note that we *	ignore the passed in values and use the values stored in the *	TkWindow data structure. * *---------------------------------------------------------------------- */voidXConfigureWindow(    Display* display,		/* Display. */    Window w,			/* Window. */    unsigned int value_mask,    XWindowChanges* values){    MacDrawable *macWin = (MacDrawable *) w;    TkWindow *winPtr = macWin->winPtr;    display->request++;    /*     * Change the shape and/or position of the window.     */    if (value_mask & (CWX|CWY|CWWidth|CWHeight)) {	XMoveResizeWindow(display, w, winPtr->changes.x, winPtr->changes.y,		winPtr->changes.width, winPtr->changes.height);    }    /*     * Change the stacking order of the window.  Tk actuall keeps all     * the information we need for stacking order.  All we need to do     * is make sure the clipping regions get updated and generate damage     * that will ensure things get drawn correctly.     */    if (value_mask & CWStackMode) {	Rect bounds;	GWorldPtr destPort;		destPort = TkMacGetDrawablePort(w);	if (destPort != NULL) {	    SetPort((GrafPtr) destPort);	    TkMacInvalClipRgns(winPtr->parentPtr);	    TkMacWinBounds(winPtr, &bounds);	    InvalRect(&bounds);	}    }     /* TkGenWMMoveRequestEvent(macWin->winPtr, 	    macWin->winPtr->changes.x, macWin->winPtr->changes.y); */}/* *---------------------------------------------------------------------- * *  TkMacUpdateClipRgn -- * *	This function updates the cliping regions for a given window *	and all of its children.  Once updated the TK_CLIP_INVALID flag *	in the subwindow data structure is unset.  The TK_CLIP_INVALID  *	flag should always be unset before any drawing is attempted. * * Results: *	None. * * Side effects: *	The clip regions for the window and its children are updated. * *---------------------------------------------------------------------- */voidTkMacUpdateClipRgn(    TkWindow *winPtr){    RgnHandle rgn;    int x, y;    TkWindow *win2Ptr;    if (winPtr == NULL) {	return;    }        if (winPtr->privatePtr->flags & TK_CLIP_INVALID) {	rgn = winPtr->privatePtr->aboveClipRgn;	if (tmpRgn == NULL) {	    tmpRgn = NewRgn();	}		/* 	 * Start with a region defined by the window bounds.  	 */        x = winPtr->privatePtr->xOff;        y = winPtr->privatePtr->yOff;        SetRectRgn(rgn, (short) x, (short) y,	    (short) (winPtr->changes.width  + x), 	    (short) (winPtr->changes.height + y));	    	/* 	 * Clip away the area of any windows that may obscure this	 * window.  	 * For a non-toplevel window, first, clip to the parents visable	 * clip region.	 * Second, clip away any siblings that are higher in the	 * stacking order.	 * For an embedded toplevel, just clip to the container's visible	 * clip region.  Remember, we only allow one contained window 	 * in a frame, and don't support any other widgets in the frame either.	 * This is not currently enforced, however.	 */		if (!Tk_IsTopLevel(winPtr)) { 	    TkMacUpdateClipRgn(winPtr->parentPtr);	    SectRgn(rgn, 		    winPtr->parentPtr->privatePtr->aboveClipRgn, rgn);					    win2Ptr = winPtr->nextPtr;	    while (win2Ptr != NULL) {		if (Tk_IsTopLevel(win2Ptr) || !Tk_IsMapped(win2Ptr)) {		    win2Ptr = win2Ptr->nextPtr;		    continue;		}		x = win2Ptr->privatePtr->xOff;		y = win2Ptr->privatePtr->yOff;		SetRectRgn(tmpRgn, (short) x, (short) y,			(short) (win2Ptr->changes.width  + x), 			(short) (win2Ptr->changes.height + y));		DiffRgn(rgn, tmpRgn, rgn);							  		win2Ptr = win2Ptr->nextPtr;	    }	} else if (Tk_IsEmbedded(winPtr)) {            TkWindow *contWinPtr;        	    contWinPtr = TkpGetOtherWindow(winPtr);    	         	    if (contWinPtr != NULL) { 	        TkMacUpdateClipRgn(contWinPtr);	        SectRgn(rgn, 		        contWinPtr->privatePtr->aboveClipRgn, rgn);   	    } else if (gMacEmbedHandler != NULL) {   	        gMacEmbedHandler->getClipProc((Tk_Window) winPtr, tmpRgn);   	        SectRgn(rgn, tmpRgn, rgn);   	    }	    	    /*	     * NOTE: Here we should handle out of process embedding.	     */		    	}		/* 	 * The final clip region is the aboveClip region (or visable	 * region) minus all the children of this window.	 * Alternatively, if the window is a container, we must also 	 * subtract the region of the embedded window.	 */	 	rgn = winPtr->privatePtr->clipRgn;	CopyRgn(winPtr->privatePtr->aboveClipRgn, rgn);			win2Ptr = winPtr->childList;	while (win2Ptr != NULL) {	    if (Tk_IsTopLevel(win2Ptr) || !Tk_IsMapped(win2Ptr)) {		win2Ptr = win2Ptr->nextPtr;		continue;	    }	    x = win2Ptr->privatePtr->xOff;	    y = win2Ptr->privatePtr->yOff;	    SetRectRgn(tmpRgn, (short) x, (short) y,		    (short) (win2Ptr->changes.width  + x), 		    (short) (win2Ptr->changes.height + y));	    DiffRgn(rgn, tmpRgn, rgn);							  	    win2Ptr = win2Ptr->nextPtr;	}		if (Tk_IsContainer(winPtr)) {	    win2Ptr = TkpGetOtherWindow(winPtr);	    if (win2Ptr != NULL) {		if (Tk_IsMapped(win2Ptr)) {		    x = win2Ptr->privatePtr->xOff;		    y = win2Ptr->privatePtr->yOff;		    SetRectRgn(tmpRgn, (short) x, (short) y,			    (short) (win2Ptr->changes.width  + x), 			    (short) (win2Ptr->changes.height + y));		    DiffRgn(rgn, tmpRgn, rgn);		}	    } 	    	    /*	     * NOTE: Here we should handle out of process embedding.	     */		    	}			winPtr->privatePtr->flags &= ~TK_CLIP_INVALID;    }}/* *---------------------------------------------------------------------- * * TkMacVisableClipRgn -- * *	This function returnd the Macintosh cliping region for the  *	given window.  A NULL Rgn means the window is not visable. * * Results: *	The region. * * Side effects: *	None. * *---------------------------------------------------------------------- */

⌨️ 快捷键说明

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