Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/******************************Module*Header*******************************\
* Module Name: palddi.cxx * * provides driver callbacks for palette management. * * Created: 06-Dec-1990 11:16:58 * Author: Patrick Haluptzok patrickh * * Copyright (c) 1990-1999 Microsoft Corporation \**************************************************************************/
#include "precomp.hxx"
/******************************Public*Routine******************************\
* EngCreatePalette * * This is the engine entry point for device drivers to create palettes. * * History: * 05-Feb-1991 -by- Patrick Haluptzok patrickh * Wrote it. \**************************************************************************/
HPALETTE EngCreatePalette( ULONG iMode, ULONG cColors, PULONG pulColors, FLONG flRed, FLONG flGre, FLONG flBlu) { HPALETTE hpal = (HPALETTE) 0; BOOL bUMPD = iMode & UMPD_FLAG; PALMEMOBJ pal;
iMode = iMode & ~UMPD_FLAG;
// If PAL_BITFIELDS, check to see if we can substitute one of the
// special cases PAL_RGB or PAL_BGR.
if ( (iMode == PAL_BITFIELDS) && (flGre == 0x0000ff00) && ( ((flRed == 0x000000ff) && (flBlu == 0x00ff0000)) || ((flRed == 0x00ff0000) && (flBlu == 0x000000ff)) ) ) { iMode = (flRed == 0x000000ff) ? PAL_RGB : PAL_BGR; }
// We default to assuming it's fixed palette and then at EngAssociate
// time we look at his pdev and decide if this guy is more capable
// than that and set the palette up accordingly.
if (pal.bCreatePalette(iMode, cColors, pulColors, flRed, flGre, flBlu, PAL_FIXED)) { pal.vKeepIt(); hpal = (HPALETTE)pal.hpal(); pal.ppalSet(NULL); // Leave a reference count of 1 so that we
// can do vUnrefPalette() in EngDeletePalette
if (bUMPD) { GreSetPaletteOwner(hpal, OBJECT_OWNER_CURRENT); } }
return(hpal); }
/******************************Public*Routine******************************\
* EngQueryPalette * * This is the engine entry point for device drivers to query palettes. * This is intended mostly for remote-control drivers such as NetMeeting * to determine the palette type of the primary display. * * Note that the driver has to look at GCAPS_PALMANAGED to determine * whether it's a fixed palette or not. * * History: * 04-Jan-1997 -by- J. Andrew Goossen andrewgo * Wrote it. \**************************************************************************/
ULONG EngQueryPalette( HPALETTE hpal, ULONG *piMode, ULONG cColors, ULONG *pulColors) { ULONG ulRet = 0;
EPALOBJ pal(hpal); if (pal.bValid()) { *piMode = pal.flPal() & (PAL_INDEXED | PAL_BITFIELDS | PAL_RGB | PAL_BGR);
if (pal.cEntries() != 0) { // It's palettized:
ulRet = pal.ulGetEntries(0, cColors, (PALETTEENTRY*) pulColors, TRUE); } else { // It's bitfields:
ulRet = 3;
if ((cColors >= 3) && (pulColors != NULL)) { *(pulColors) = pal.flRed(); *(pulColors + 1) = pal.flGre(); *(pulColors + 2) = pal.flBlu(); } } } else { WARNING("EngQueryPalette -- Invalid palette"); }
return(ulRet); }
/******************************Public*Routine******************************\
* EngDeletePalette * * Driver entry point for deleting palettes it has created * * History: * 05-Feb-1991 -by- Patrick Haluptzok patrickh * Wrote it. \**************************************************************************/
BOOL EngDeletePalette(HPALETTE hpal) { BOOL b = FALSE;
EPALOBJ palobj(hpal); if (palobj.bValid() && !palobj.bIsPalDC()) { // First, undo the alt-lock we just did by invoking EPALOBJ:
DEC_SHARE_REF_CNT(palobj.ppalGet());
// Device dependent bitmaps for RGB colour depths have their palettes
// pointing to the surface's primary palette. With dynamic colour
// depth changing, we want to keep those palette references around
// even after the primary surface is deleted.
//
// This means that during the dynamic mode change, the palette should
// not be deleted when the old instance of the driver asks it to be
// deleted, but instead when the last bitmap referencing the palette
// is deleted. Having everyone use 'vUnrefPalette' makes this Just
// Work.
palobj.vUnrefPalette();
b = TRUE; }
return(b); }
|