Exemplo n.º 1
0
/* Destroy a pixmap*/
void
GsDestroyPixmap(GR_PIXMAP *pp)
{
	GR_PIXMAP	*prevpp;
	PSD			psd = pp->psd;

	/* deallocate mem gc*/
	psd->FreeMemGC(psd);

	/*
	 * Remove this pixmap from the complete list of pixmaps.
	 */
	prevpp = listpp;
	if (prevpp == pp)
		listpp = pp->next;
	else {
		while (prevpp->next != pp)
			prevpp = prevpp->next;
		prevpp->next = pp->next;
	}

	/*
	 * Forget various information if they related to this
	 * pixmap.  Then finally free the structure.
	 */
	if (pp == cachepp) {
		cachepixmapid = 0;
		cachepp = NULL;
	}
	free(pp);
}
Exemplo n.º 2
0
/* return NULL if no driver bitblit available*/
HDC WINAPI
CreateCompatibleDC(HDC hdc)
{
	HDC	hdcmem;
	PSD	psd;
	PSD	mempsd;

	/* allow NULL hdc to mean screen*/
	psd = hdc? hdc->psd: &scrdev;

	/* allocate memory device, if driver doesn't blit will fail*/
	mempsd = psd->AllocateMemGC(psd);
	if(!mempsd)
		return NULL;

	/* allocate a DC for DesktopWindow*/
	hdcmem = GetDCEx(NULL, NULL, DCX_DEFAULTCLIP);
	if(!hdcmem) {
		mempsd->FreeMemGC(mempsd);
		return NULL;
	}
	hdcmem->psd = mempsd;

	/* select in default bitmap to setup mem device parms*/
	SelectObject(hdcmem, (HGDIOBJ)&default_bitmap);
	return hdcmem;
}