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

📄 midispcur.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 2 页
字号:
{    miDCScreenPtr   pScreenPriv;    miDCCursorPtr   pPriv;    WindowPtr	    pWin;    pPriv = (miDCCursorPtr) pCursor->bits->devPriv[pScreen->myNum];    if (!pPriv)    {	pPriv = miDCRealize(pScreen, pCursor);	if (!pPriv)	    return FALSE;    }    pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;    pWin = WindowTable[pScreen->myNum];    if (!EnsureGC(pScreenPriv->pSourceGC, pWin))	return FALSE;    if (!EnsureGC(pScreenPriv->pMaskGC, pWin))    {	FreeGC (pScreenPriv->pSourceGC, (GContext) 0);	pScreenPriv->pSourceGC = 0;	return FALSE;    }    miDCPutBits ((DrawablePtr)pWin, pPriv,		 pScreenPriv->pSourceGC, pScreenPriv->pMaskGC,		 x, y, pCursor->bits->width, pCursor->bits->height,		 source, mask);    return TRUE;}static BoolmiDCSaveUnderCursor (pScreen, x, y, w, h)    ScreenPtr	pScreen;    int		x, y, w, h;{    miDCScreenPtr   pScreenPriv;    PixmapPtr	    pSave;    WindowPtr	    pWin;    GCPtr	    pGC;    pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;    pSave = pScreenPriv->pSave;    pWin = WindowTable[pScreen->myNum];    if (!pSave || pSave->drawable.width < w || pSave->drawable.height < h)    {	if (pSave)	    (*pScreen->DestroyPixmap) (pSave);	pScreenPriv->pSave = pSave =		(*pScreen->CreatePixmap) (pScreen, w, h, pScreen->rootDepth);	if (!pSave)	    return FALSE;    }    if (!EnsureGC(pScreenPriv->pSaveGC, pWin))	return FALSE;    pGC = pScreenPriv->pSaveGC;    if (pSave->drawable.serialNumber != pGC->serialNumber)	ValidateGC ((DrawablePtr) pSave, pGC);    (*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,			    x, y, w, h, 0, 0);    return TRUE;}static BoolmiDCRestoreUnderCursor (pScreen, x, y, w, h)    ScreenPtr	pScreen;    int		x, y, w, h;{    miDCScreenPtr   pScreenPriv;    PixmapPtr	    pSave;    WindowPtr	    pWin;    GCPtr	    pGC;    pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;    pSave = pScreenPriv->pSave;    pWin = WindowTable[pScreen->myNum];    if (!pSave)	return FALSE;    if (!EnsureGC(pScreenPriv->pRestoreGC, pWin))	return FALSE;    pGC = pScreenPriv->pRestoreGC;    if (pWin->drawable.serialNumber != pGC->serialNumber)	ValidateGC ((DrawablePtr) pWin, pGC);    (*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,			    0, 0, w, h, x, y);    return TRUE;}static BoolmiDCChangeSave (pScreen, x, y, w, h, dx, dy)    ScreenPtr	    pScreen;    int		    x, y, w, h, dx, dy;{    miDCScreenPtr   pScreenPriv;    PixmapPtr	    pSave;    WindowPtr	    pWin;    GCPtr	    pGC;    int		    sourcex, sourcey, destx, desty, copyw, copyh;    pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;    pSave = pScreenPriv->pSave;    pWin = WindowTable[pScreen->myNum];    /*     * restore the bits which are about to get trashed     */    if (!pSave)	return FALSE;    if (!EnsureGC(pScreenPriv->pRestoreGC, pWin))	return FALSE;    pGC = pScreenPriv->pRestoreGC;    if (pWin->drawable.serialNumber != pGC->serialNumber)	ValidateGC ((DrawablePtr) pWin, pGC);    /*     * copy the old bits to the screen.     */    if (dy > 0)    {	(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,			       0, h - dy, w, dy, x + dx, y + h);    }    else if (dy < 0)    {	(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,			       0, 0, w, -dy, x + dx, y + dy);    }    if (dy >= 0)    {	desty = y + dy;	sourcey = 0;	copyh = h - dy;    }    else    {	desty = y;	sourcey = - dy;	copyh = h + dy;    }    if (dx > 0)    {	(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,			       w - dx, sourcey, dx, copyh, x + w, desty);    }    else if (dx < 0)    {	(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,			       0, sourcey, -dx, copyh, x + dx, desty);    }    if (!EnsureGC(pScreenPriv->pSaveGC, pWin))	return FALSE;    pGC = pScreenPriv->pSaveGC;    if (pSave->drawable.serialNumber != pGC->serialNumber)	ValidateGC ((DrawablePtr) pSave, pGC);    /*     * move the bits that are still valid within the pixmap     */    if (dx >= 0)    {	sourcex = 0;	destx = dx;	copyw = w - dx;    }    else    {	destx = 0;	sourcex = - dx;	copyw = w + dx;    }    if (dy >= 0)    {	sourcey = 0;	desty = dy;	copyh = h - dy;    }    else    {	desty = 0;	sourcey = -dy;	copyh = h + dy;    }    (*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pSave, pGC,			   sourcex, sourcey, copyw, copyh, destx, desty);    /*     * copy the new bits from the screen into the remaining areas of the     * pixmap     */    if (dy > 0)    {	(*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,			       x, y, w, dy, 0, 0);    }    else if (dy < 0)    {	(*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,			       x, y + h + dy, w, -dy, 0, h + dy);    }    if (dy >= 0)    {	desty = dy;	sourcey = y + dy;	copyh = h - dy;    }    else    {	desty = 0;	sourcey = y;	copyh = h + dy;    }    if (dx > 0)    {	(*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,			       x, sourcey, dx, copyh, 0, desty);    }    else if (dx < 0)    {	(*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,			       x + w + dx, sourcey, -dx, copyh, w + dx, desty);    }    return TRUE;}static BoolmiDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask)    ScreenPtr	    pScreen;    CursorPtr	    pCursor;    int		    x, y, w, h, dx, dy;    unsigned long   source, mask;{    miDCCursorPtr   pPriv;    miDCScreenPtr   pScreenPriv;    int		    status;    WindowPtr	    pWin;    GCPtr	    pGC;    XID		    gcval = FALSE;    PixmapPtr	    pTemp;    pPriv = (miDCCursorPtr) pCursor->bits->devPriv[pScreen->myNum];    if (!pPriv)    {	pPriv = miDCRealize(pScreen, pCursor);	if (!pPriv)	    return FALSE;    }    pScreenPriv = (miDCScreenPtr) pScreen->devPrivates[miDCScreenIndex].ptr;    pWin = WindowTable[pScreen->myNum];    pTemp = pScreenPriv->pTemp;    if (!pTemp ||	pTemp->drawable.width != pScreenPriv->pSave->drawable.width ||	pTemp->drawable.height != pScreenPriv->pSave->drawable.height)    {	if (pTemp)	    (*pScreen->DestroyPixmap) (pTemp);	pScreenPriv->pTemp = pTemp = (*pScreen->CreatePixmap)	    (pScreen, w, h, pScreenPriv->pSave->drawable.depth);	if (!pTemp)	    return FALSE;    }    if (!pScreenPriv->pMoveGC)    {	pScreenPriv->pMoveGC = CreateGC ((DrawablePtr)pTemp,	    GCGraphicsExposures, &gcval, &status);	if (!pScreenPriv->pMoveGC)	    return FALSE;    }    /*     * copy the saved area to a temporary pixmap     */    pGC = pScreenPriv->pMoveGC;    if (pGC->serialNumber != pTemp->drawable.serialNumber)	ValidateGC ((DrawablePtr) pTemp, pGC);    (*pGC->ops->CopyArea)((DrawablePtr)pScreenPriv->pSave,			  (DrawablePtr)pTemp, pGC, 0, 0, w, h, 0, 0);        /*     * draw the cursor in the temporary pixmap     */    if (!pScreenPriv->pPixSourceGC)    {	pScreenPriv->pPixSourceGC = CreateGC ((DrawablePtr)pTemp,	    GCGraphicsExposures, &gcval, &status);	if (!pScreenPriv->pPixSourceGC)	    return FALSE;    }    if (!pScreenPriv->pPixMaskGC)    {	pScreenPriv->pPixMaskGC = CreateGC ((DrawablePtr)pTemp,	    GCGraphicsExposures, &gcval, &status);	if (!pScreenPriv->pPixMaskGC)	    return FALSE;    }    miDCPutBits ((DrawablePtr)pTemp, pPriv,		 pScreenPriv->pPixSourceGC, pScreenPriv->pPixMaskGC, 		 dx, dy, pCursor->bits->width, pCursor->bits->height,		 source, mask);    /*     * copy the temporary pixmap onto the screen     */    if (!EnsureGC(pScreenPriv->pRestoreGC, pWin))	return FALSE;    pGC = pScreenPriv->pRestoreGC;    if (pWin->drawable.serialNumber != pGC->serialNumber)	ValidateGC ((DrawablePtr) pWin, pGC);    (*pGC->ops->CopyArea) ((DrawablePtr) pTemp, (DrawablePtr) pWin,			    pGC,			    0, 0, w, h, x, y);    return TRUE;}

⌨️ 快捷键说明

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