扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Bool
miSpriteInitialize (pScreen, cursorFuncs, screenFuncs)
ScreenPtr pScreen;
miSpriteCursorFuncPtr cursorFuncs;
miPointerScreenFuncPtr screenFuncs;
...{
miSpriteScreenPtr pPriv;
VisualPtr pVisual;
#ifdef RENDER
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
#endif
if (miSpriteGeneration != serverGeneration)
...{
miSpriteScreenIndex = AllocateScreenPrivateIndex ();
if (miSpriteScreenIndex < 0)
return FALSE;
miSpriteGeneration = serverGeneration;
miSpriteGCIndex = AllocateGCPrivateIndex ();
}
if (!AllocateGCPrivate(pScreen, miSpriteGCIndex, sizeof(miSpriteGCRec)))
return FALSE;
pPriv = (miSpriteScreenPtr) xalloc (sizeof (miSpriteScreenRec));
if (!pPriv)
return FALSE;
if (!miPointerInitialize (pScreen, &miSpritePointerFuncs, screenFuncs,TRUE))
...{
xfree ((pointer) pPriv);
return FALSE;
}
for (pVisual = pScreen->visuals;
pVisual->vid != pScreen->rootVisual;
pVisual++)
;
pPriv->pVisual = pVisual;
pPriv->CloseScreen = pScreen->CloseScreen;
pPriv->GetImage = pScreen->GetImage;
pPriv->GetSpans = pScreen->GetSpans;
pPriv->SourceValidate = pScreen->SourceValidate;
pPriv->CreateGC = pScreen->CreateGC;
pPriv->BlockHandler = pScreen->BlockHandler;
pPriv->InstallColormap = pScreen->InstallColormap;
pPriv->StoreColors = pScreen->StoreColors;
pPriv->PaintWindowBackground = pScreen->PaintWindowBackground;
pPriv->PaintWindowBorder = pScreen->PaintWindowBorder;
pPriv->CopyWindow = pScreen->CopyWindow;
pPriv->ClearToBackground = pScreen->ClearToBackground;
pPriv->SaveDoomedAreas = pScreen->SaveDoomedAreas;
pPriv->RestoreAreas = pScreen->RestoreAreas;
#ifdef RENDER
if (ps)
...{
pPriv->Composite = ps->Composite;
pPriv->Glyphs = ps->Glyphs;
}
#endif
pPriv->pCursor = NULL;
pPriv->x = 0;
pPriv->y = 0;
pPriv->isUp = FALSE;
pPriv->shouldBeUp = FALSE;
pPriv->pCacheWin = NullWindow;
pPriv->isInCacheWin = FALSE;
pPriv->checkPixels = TRUE;
pPriv->pInstalledMap = NULL;
pPriv->pColormap = NULL;
pPriv->funcs = cursorFuncs;
pPriv->colors[SOURCE_COLOR].red = 0;
pPriv->colors[SOURCE_COLOR].green = 0;
pPriv->colors[SOURCE_COLOR].blue = 0;
pPriv->colors[MASK_COLOR].red = 0;
pPriv->colors[MASK_COLOR].green = 0;
pPriv->colors[MASK_COLOR].blue = 0;
pScreen->devPrivates[miSpriteScreenIndex].ptr = (pointer) pPriv;
pScreen->CloseScreen = miSpriteCloseScreen;
pScreen->GetImage = miSpriteGetImage;
pScreen->GetSpans = miSpriteGetSpans;
pScreen->SourceValidate = miSpriteSourceValidate;
pScreen->CreateGC = miSpriteCreateGC;
pScreen->BlockHandler = miSpriteBlockHandler;
pScreen->InstallColormap = miSpriteInstallColormap;
pScreen->StoreColors = miSpriteStoreColors;
pScreen->PaintWindowBackground = miSpritePaintWindowBackground;
pScreen->PaintWindowBorder = miSpritePaintWindowBorder;
pScreen->CopyWindow = miSpriteCopyWindow;
pScreen->ClearToBackground = miSpriteClearToBackground;
pScreen->SaveDoomedAreas = miSpriteSaveDoomedAreas;
pScreen->RestoreAreas = miSpriteRestoreAreas;
#ifdef RENDER
if (ps)
...{
ps->Composite = miSpriteComposite;
ps->Glyphs = miSpriteGlyphs;
}
#endif
return TRUE;
}
static void
miSpritePaintWindowBackground (pWin, pRegion, what)
WindowPtr pWin;
RegionPtr pRegion;
int what;
...{
ScreenPtr pScreen;
miSpriteScreenPtr pScreenPriv;
pScreen = pWin->drawable.pScreen;
SCREEN_PROLOGUE (pScreen, PaintWindowBackground);
pScreenPriv = (miSpriteScreenPtr) pScreen->devPrivates[miSpriteScreenIndex].ptr;
if (pScreenPriv->isUp)
...{
/**//*
* If the cursor is on the same screen as the window, check the
* region to paint for the cursor and remove it as necessary
*/
if (RECT_IN_REGION( pScreen, pRegion, &pScreenPriv->saved) != rgnOUT)
miSpriteRemoveCursor (pScreen);
}
(*pScreen->PaintWindowBackground) (pWin, pRegion, what);
SCREEN_EPILOGUE (pScreen, PaintWindowBackground, miSpritePaintWindowBackground);
}如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。