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

📄 miwindow.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 3 页
字号:
		(* MarkWindow)(pChild);		if (pChild->firstChild)		{		    pChild = pChild->firstChild;		    continue;		}	    }	    while (!pChild->nextSib && (pChild != pWin))		pChild = pChild->parent;	    if (pChild == pWin)		break;	    pChild = pChild->nextSib;	}	anyMarked = TRUE;	pFirst = pFirst->nextSib;    }    if ( (pChild = pFirst) )    {	box = REGION_EXTENTS(pChild->drawable.pScreen, &pWin->borderSize);	pLast = pChild->parent->lastChild;	while (1)	{	    if (pChild->viewable && RECT_IN_REGION(pScreen, &pChild->borderSize,						       box))	    {		(* MarkWindow)(pChild);		anyMarked = TRUE;		if (pChild->firstChild)		{		    pChild = pChild->firstChild;		    continue;		}	    }	    while (!pChild->nextSib && (pChild != pLast))		pChild = pChild->parent;	    if (pChild == pLast)		break;	    pChild = pChild->nextSib;	}    }    if (anyMarked)	(* MarkWindow)(pWin->parent);    return anyMarked;}/***** *  miHandleValidateExposures(pWin) *    starting at pWin, draw background in any windows that have exposure *    regions, translate the regions, restore any backing store, *    and then send any regions still exposed to the client *****/voidmiHandleValidateExposures(pWin)    WindowPtr pWin;{    register WindowPtr pChild;    register ValidatePtr val;    ScreenPtr pScreen = pWin->drawable.pScreen;    void (* WindowExposures)();    pChild = pWin;    WindowExposures = pChild->drawable.pScreen->WindowExposures;    while (1)    {	if ( (val = pChild->valdata) )	{	    if (REGION_NOTEMPTY(pScreen, &val->after.borderExposed))		(*pChild->drawable.pScreen->PaintWindowBorder)(pChild,						    &val->after.borderExposed,						    PW_BORDER);	    REGION_UNINIT(pScreen, &val->after.borderExposed);	    (*WindowExposures)(pChild, &val->after.exposed, NullRegion);	    REGION_UNINIT(pScreen, &val->after.exposed);	    xfree(val);	    pChild->valdata = (ValidatePtr)NULL;	    if (pChild->firstChild)	    {		pChild = pChild->firstChild;		continue;	    }	}	while (!pChild->nextSib && (pChild != pWin))	    pChild = pChild->parent;	if (pChild == pWin)	    break;	pChild = pChild->nextSib;    }}voidmiMoveWindow(pWin, x, y, pNextSib, kind)    register WindowPtr pWin;    int x,y;    WindowPtr pNextSib;    VTKind kind;{    WindowPtr pParent;    Bool WasViewable = (Bool)(pWin->viewable);    short bw;    RegionPtr oldRegion;    DDXPointRec oldpt;    Bool anyMarked;    register ScreenPtr pScreen;    WindowPtr windowToValidate;#ifdef DO_SAVE_UNDERS    Bool dosave = FALSE;#endif    WindowPtr pLayerWin;    /* if this is a root window, can't be moved */    if (!(pParent = pWin->parent))       return ;    pScreen = pWin->drawable.pScreen;    bw = wBorderWidth (pWin);    oldpt.x = pWin->drawable.x;    oldpt.y = pWin->drawable.y;    if (WasViewable)    {	oldRegion = REGION_CREATE(pScreen, NullBox, 1);	REGION_COPY(pScreen, oldRegion, &pWin->borderClip);	anyMarked = (*pScreen->MarkOverlappedWindows)(pWin, pWin, &pLayerWin);    }    pWin->origin.x = x + (int)bw;    pWin->origin.y = y + (int)bw;    x = pWin->drawable.x = pParent->drawable.x + x + (int)bw;    y = pWin->drawable.y = pParent->drawable.y + y + (int)bw;    SetWinSize (pWin);    SetBorderSize (pWin);    (*pScreen->PositionWindow)(pWin, x, y);    windowToValidate = MoveWindowInStack(pWin, pNextSib);    ResizeChildrenWinSize(pWin, x - oldpt.x, y - oldpt.y, 0, 0);    if (WasViewable)    {	if (pLayerWin == pWin)	    anyMarked |= (*pScreen->MarkOverlappedWindows)				(pWin, windowToValidate, (WindowPtr *)NULL);	else	    anyMarked |= (*pScreen->MarkOverlappedWindows)				(pWin, pLayerWin, (WindowPtr *)NULL);#ifdef DO_SAVE_UNDERS	if (DO_SAVE_UNDERS(pWin))	{	    dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, windowToValidate);	}#endif /* DO_SAVE_UNDERS */	if (anyMarked)	{	    (*pScreen->ValidateTree)(pLayerWin->parent, NullWindow, kind);	    (* pWin->drawable.pScreen->CopyWindow)(pWin, oldpt, oldRegion);	    REGION_DESTROY(pScreen, oldRegion);	    /* XXX need to retile border if ParentRelative origin */	    (*pScreen->HandleExposures)(pLayerWin->parent);	}#ifdef DO_SAVE_UNDERS	if (dosave)	    (*pScreen->PostChangeSaveUnder)(pLayerWin, windowToValidate);#endif /* DO_SAVE_UNDERS */	if (anyMarked && pScreen->PostValidateTree)	    (*pScreen->PostValidateTree)(pLayerWin->parent, NullWindow, kind);    }    if (pWin->realized)	WindowsRestructured ();}/* * pValid is a region of the screen which has been * successfully copied -- recomputed exposed regions for affected windows */static intmiRecomputeExposures (pWin, value)    register WindowPtr	pWin;    pointer		value; /* must conform to VisitWindowProcPtr */{    register ScreenPtr	pScreen;    RegionPtr	pValid = (RegionPtr)value;    if (pWin->valdata)    {	pScreen = pWin->drawable.pScreen;	/*	 * compute exposed regions of this window	 */	REGION_SUBTRACT(pScreen, &pWin->valdata->after.exposed,			&pWin->clipList, pValid);	/*	 * compute exposed regions of the border	 */	REGION_SUBTRACT(pScreen, &pWin->valdata->after.borderExposed,			     &pWin->borderClip, &pWin->winSize);	REGION_SUBTRACT(pScreen, &pWin->valdata->after.borderExposed,			     &pWin->valdata->after.borderExposed, pValid);	return WT_WALKCHILDREN;    }    return WT_NOMATCH;}voidmiSlideAndSizeWindow(pWin, x, y, w, h, pSib)    register WindowPtr pWin;    int x,y;    unsigned int w, h;    WindowPtr pSib;{    WindowPtr pParent;    Bool WasViewable = (Bool)(pWin->viewable);    unsigned short width = pWin->drawable.width,		   height = pWin->drawable.height;    short oldx = pWin->drawable.x,	  oldy = pWin->drawable.y;    int bw = wBorderWidth (pWin);    short dw, dh;    DDXPointRec oldpt;    RegionPtr oldRegion;    Bool anyMarked;    register ScreenPtr pScreen;    WindowPtr pFirstChange;    register WindowPtr pChild;    RegionPtr	gravitate[StaticGravity + 1];    register unsigned g;    int		nx, ny;		/* destination x,y */    int		newx, newy;	/* new inner window position */    RegionPtr	pRegion;    RegionPtr	destClip;	/* portions of destination already written */    RegionPtr	oldWinClip;	/* old clip list for window */    RegionPtr	borderVisible = NullRegion; /* visible area of the border */    RegionPtr	bsExposed = NullRegion;	    /* backing store exposures */    Bool	shrunk = FALSE; /* shrunk in an inner dimension */    Bool	moved = FALSE;	/* window position changed */#ifdef DO_SAVE_UNDERS    Bool	dosave = FALSE;#endif    WindowPtr  pLayerWin;    /* if this is a root window, can't be resized */    if (!(pParent = pWin->parent))	return ;    pScreen = pWin->drawable.pScreen;    newx = pParent->drawable.x + x + bw;    newy = pParent->drawable.y + y + bw;    if (WasViewable)    {	anyMarked = FALSE;	/*	 * save the visible region of the window	 */	oldRegion = REGION_CREATE(pScreen, NullBox, 1);	REGION_COPY(pScreen, oldRegion, &pWin->winSize);	/*	 * categorize child windows into regions to be moved	 */	for (g = 0; g <= StaticGravity; g++)	    gravitate[g] = (RegionPtr) NULL;	for (pChild = pWin->firstChild; pChild; pChild = pChild->nextSib)	{	    g = pChild->winGravity;	    if (g != UnmapGravity)	    {		if (!gravitate[g])		    gravitate[g] = REGION_CREATE(pScreen, NullBox, 1);		REGION_UNION(pScreen, gravitate[g],				   gravitate[g], &pChild->borderClip);	    }	    else	    {		UnmapWindow(pChild, TRUE);		anyMarked = TRUE;	    }	}	anyMarked |= (*pScreen->MarkOverlappedWindows)(pWin, pWin, 						       &pLayerWin);	oldWinClip = NULL;	if (pWin->bitGravity != ForgetGravity)	{	    oldWinClip = REGION_CREATE(pScreen, NullBox, 1);	    REGION_COPY(pScreen, oldWinClip, &pWin->clipList);	}	/*	 * if the window is changing size, borderExposed	 * can't be computed correctly without some help.	 */	if (pWin->drawable.height > h || pWin->drawable.width > w)	    shrunk = TRUE;	if (newx != oldx || newy != oldy)	    moved = TRUE;	if ((pWin->drawable.height != h || pWin->drawable.width != w) &&	    HasBorder (pWin))	{	    borderVisible = REGION_CREATE(pScreen, NullBox, 1);	    /* for tiled borders, we punt and draw the whole thing */	    if (pWin->borderIsPixel || !moved)	    {		if (shrunk || moved)		    REGION_SUBTRACT(pScreen, borderVisible,					  &pWin->borderClip,					  &pWin->winSize);		else		    REGION_COPY(pScreen, borderVisible,					    &pWin->borderClip);	    }	}    }    pWin->origin.x = x + bw;    pWin->origin.y = y + bw;    pWin->drawable.height = h;    pWin->drawable.width = w;    x = pWin->drawable.x = newx;    y = pWin->drawable.y = newy;    SetWinSize (pWin);    SetBorderSize (pWin);    dw = (int)w - (int)width;    dh = (int)h - (int)height;    ResizeChildrenWinSize(pWin, x - oldx, y - oldy, dw, dh);    /* let the hardware adjust background and border pixmaps, if any */    (*pScreen->PositionWindow)(pWin, x, y);    pFirstChange = MoveWindowInStack(pWin, pSib);    if (WasViewable)    {	pRegion = REGION_CREATE(pScreen, NullBox, 1);	if (pWin->backStorage)	    REGION_COPY(pScreen, pRegion, &pWin->clipList);	if (pLayerWin == pWin)	    anyMarked |= (*pScreen->MarkOverlappedWindows)(pWin, pFirstChange,						(WindowPtr *)NULL);	else	    anyMarked |= (*pScreen->MarkOverlappedWindows)(pWin, pLayerWin,						(WindowPtr *)NULL);	if (pWin->valdata)	{	    pWin->valdata->before.resized = TRUE;	    pWin->valdata->before.borderVisible = borderVisible;	}#ifdef DO_SAVE_UNDERS	if (DO_SAVE_UNDERS(pWin))	{	    dosave = (*pScreen->ChangeSaveUnder)(pLayerWin, pFirstChange);	}#endif /* DO_SAVE_UNDERS */	if (anyMarked)	    (*pScreen->ValidateTree)(pLayerWin->parent, pFirstChange, VTOther);	/*	 * the entire window is trashed unless bitGravity	 * recovers portions of it	 */	REGION_COPY(pScreen, &pWin->valdata->after.exposed, &pWin->clipList);    }    GravityTranslate (x, y, oldx, oldy, dw, dh, pWin->bitGravity, &nx, &ny);    if (pWin->backStorage &&	((pWin->backingStore == Always) || WasViewable))    {	if (!WasViewable)	    pRegion = &pWin->clipList; /* a convenient empty region */	if (pWin->bitGravity == ForgetGravity)	    bsExposed = (*pScreen->TranslateBackingStore)				(pWin, 0, 0, NullRegion, oldx, oldy);	else

⌨️ 快捷键说明

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