📄 midispcur.c
字号:
{ 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 + -