/*ARGSUSED*/ Bool cfbPositionWindow(WindowPtr pWin, int x, int y) { cfbPrivWin *pPrivWin; int setxy = 0; pPrivWin = cfbGetWindowPrivate(pWin); if (pWin->backgroundState == BackgroundPixmap && pPrivWin->fastBackground) { cfbXRotatePixmap(pPrivWin->pRotatedBackground, pWin->drawable.x - pPrivWin->oldRotate.x); cfbYRotatePixmap(pPrivWin->pRotatedBackground, pWin->drawable.y - pPrivWin->oldRotate.y); setxy = 1; } if (!pWin->borderIsPixel && pPrivWin->fastBorder) { while (pWin->backgroundState == ParentRelative) pWin = pWin->parent; cfbXRotatePixmap(pPrivWin->pRotatedBorder, pWin->drawable.x - pPrivWin->oldRotate.x); cfbYRotatePixmap(pPrivWin->pRotatedBorder, pWin->drawable.y - pPrivWin->oldRotate.y); setxy = 1; } if (setxy) { pPrivWin->oldRotate.x = pWin->drawable.x; pPrivWin->oldRotate.y = pWin->drawable.y; } return (TRUE); }
Bool cfb8_32CreateWindow(WindowPtr pWin) { cfbPrivWin *pPrivWin = cfbGetWindowPrivate(pWin); pPrivWin->fastBackground = FALSE; pPrivWin->fastBorder = FALSE; pWin->drawable.bitsPerPixel = 32; return TRUE; }
Bool cfbDestroyWindow(WindowPtr pWin) { cfbPrivWin *pPrivWin; pPrivWin = cfbGetWindowPrivate(pWin); if (pPrivWin->pRotatedBorder) (*pWin->drawable.pScreen->DestroyPixmap)(pPrivWin->pRotatedBorder); if (pPrivWin->pRotatedBackground) (*pWin->drawable.pScreen->DestroyPixmap)(pPrivWin->pRotatedBackground); return(TRUE); }
Bool cfb8_16CreateWindow(WindowPtr pWin) { cfbPrivWin *pPrivWin = cfbGetWindowPrivate(pWin); pPrivWin->pRotatedBorder = NullPixmap; pPrivWin->pRotatedBackground = NullPixmap; pPrivWin->fastBackground = FALSE; pPrivWin->fastBorder = FALSE; pPrivWin->oldRotate.x = 0; pPrivWin->oldRotate.y = 0; return TRUE; }
Bool cfb8_32WidCreateWindow(WindowPtr pWin) { ScreenPtr pScreen = pWin->drawable.pScreen; cfb8_32WidScreenPtr pScreenPriv = CFB8_32WID_GET_SCREEN_PRIVATE(pScreen); cfbPrivWin *pPrivWin = cfbGetWindowPrivate(pWin); pPrivWin->fastBackground = FALSE; pPrivWin->fastBorder = FALSE; if (!pScreenPriv->WIDOps->WidAlloc(pWin)) return FALSE; return TRUE; }
Bool cfbCreateWindow(WindowPtr pWin) { cfbPrivWin *pPrivWin; pPrivWin = cfbGetWindowPrivate(pWin); pPrivWin->pRotatedBorder = NullPixmap; pPrivWin->pRotatedBackground = NullPixmap; pPrivWin->fastBackground = FALSE; pPrivWin->fastBorder = FALSE; pPrivWin->oldRotate.x = 0; pPrivWin->oldRotate.y = 0; #ifdef PIXMAP_PER_WINDOW /* Setup pointer to Screen pixmap */ pWin->devPrivates[frameWindowPrivateIndex].ptr = (pointer) cfbGetScreenPixmap(pWin->drawable.pScreen); #endif return TRUE; }
/* swap in correct PaintWindow* routine. If we can use a fast output routine (i.e. the pixmap is paddable to 32 bits), also pre-rotate a copy of it in devPrivates[cfbWindowPrivateIndex].ptr. */ Bool cfbChangeWindowAttributes(WindowPtr pWin, unsigned long mask) { unsigned long index; cfbPrivWin *pPrivWin; int width; WindowPtr pBgWin; pPrivWin = cfbGetWindowPrivate(pWin); /* * When background state changes from ParentRelative and * we had previously rotated the fast border pixmap to match * the parent relative origin, rerotate to match window */ if (mask & (CWBackPixmap | CWBackPixel) && pWin->backgroundState != ParentRelative && pPrivWin->fastBorder && (pPrivWin->oldRotate.x != pWin->drawable.x || pPrivWin->oldRotate.y != pWin->drawable.y)) { cfbXRotatePixmap(pPrivWin->pRotatedBorder, pWin->drawable.x - pPrivWin->oldRotate.x); cfbYRotatePixmap(pPrivWin->pRotatedBorder, pWin->drawable.y - pPrivWin->oldRotate.y); pPrivWin->oldRotate.x = pWin->drawable.x; pPrivWin->oldRotate.y = pWin->drawable.y; } while(mask) { index = lowbit (mask); mask &= ~index; switch(index) { case CWBackPixmap: if (pWin->backgroundState == None) { pPrivWin->fastBackground = FALSE; } else if (pWin->backgroundState == ParentRelative) { pPrivWin->fastBackground = FALSE; /* Rotate border to match parent origin */ if (pPrivWin->pRotatedBorder) { for (pBgWin = pWin->parent; pBgWin->backgroundState == ParentRelative; pBgWin = pBgWin->parent); cfbXRotatePixmap(pPrivWin->pRotatedBorder, pBgWin->drawable.x - pPrivWin->oldRotate.x); cfbYRotatePixmap(pPrivWin->pRotatedBorder, pBgWin->drawable.y - pPrivWin->oldRotate.y); pPrivWin->oldRotate.x = pBgWin->drawable.x; pPrivWin->oldRotate.y = pBgWin->drawable.y; } } else if (((width = (pWin->background.pixmap->drawable.width * PSZ)) <= PGSZ) && !(width & (width - 1))) { cfbCopyRotatePixmap(pWin->background.pixmap, &pPrivWin->pRotatedBackground, pWin->drawable.x, pWin->drawable.y); if (pPrivWin->pRotatedBackground) { pPrivWin->fastBackground = TRUE; pPrivWin->oldRotate.x = pWin->drawable.x; pPrivWin->oldRotate.y = pWin->drawable.y; } else { pPrivWin->fastBackground = FALSE; } } else { pPrivWin->fastBackground = FALSE; } break; case CWBackPixel: pPrivWin->fastBackground = FALSE; break; case CWBorderPixmap: if (((width = (pWin->border.pixmap->drawable.width * PSZ)) <= PGSZ) && !(width & (width - 1))) { for (pBgWin = pWin; pBgWin->backgroundState == ParentRelative; pBgWin = pBgWin->parent); cfbCopyRotatePixmap(pWin->border.pixmap, &pPrivWin->pRotatedBorder, pBgWin->drawable.x, pBgWin->drawable.y); if (pPrivWin->pRotatedBorder) { pPrivWin->fastBorder = TRUE; pPrivWin->oldRotate.x = pBgWin->drawable.x; pPrivWin->oldRotate.y = pBgWin->drawable.y; } else { pPrivWin->fastBorder = FALSE; } } else { pPrivWin->fastBorder = FALSE; } break; case CWBorderPixel: pPrivWin->fastBorder = FALSE; break; } } return (TRUE); }