#include #include #include PurePalette::PurePalette(const PurePalette &somePurePalette) : mhPalette(0), mhOldPalette(), mIsInUse(FALSE) { ::GetPaletteEntries(somePurePalette,0,MaxColors,(PALETTEENTRY FAR *)&mPaletteData); createPalette(); } PurePalette::PurePalette(HPALETTE hPalette) : mhPalette(0), mhOldPalette(0), mIsInUse(FALSE) { ::GetPaletteEntries(hPalette,0,MaxColors,(PALETTEENTRY FAR *)&mPaletteData); createPalette(); } PurePalette::PurePalette(const BitmapInfo &someBitmapInfo) : mhPalette(0), mhOldPalette(0), mIsInUse(FALSE) { *this=someBitmapInfo; } PurePalette &PurePalette::operator=(const PurePalette &somePurePalette) { destroyPalette(); ::GetPaletteEntries(somePurePalette,0,MaxColors,(PALETTEENTRY FAR*)&mPaletteData); createPalette(); return *this; } PurePalette &PurePalette::operator=(const BitmapInfo &someBitmapInfo) { destroyPalette(); for(int entryIndex=0;entryIndex=paletteEntries())return FALSE; someRGBColor=(RGBColor)mPaletteData[paletteIndex]; return TRUE; } RGBColor PurePalette::paletteEntry(PaletteIndex paletteIndex)const { RGBColor tempColor(0,0,0); paletteEntry(paletteIndex,tempColor); return tempColor; } WORD PurePalette::createPalette() { PaletteEntry FAR *lpPaletteEntry; LOGPALETTE FAR *lpLogPalette; HGLOBAL hGlobalPalette; if(mhPalette){::DeleteObject(mhPalette);mhPalette=0;} hGlobalPalette=::GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE,sizeof(LOGPALETTE)+(MaxColors*sizeof(PALETTEENTRY))); lpLogPalette=(LOGPALETTE FAR *)::GlobalLock(hGlobalPalette); lpLogPalette->palNumEntries=MaxColors; lpLogPalette->palVersion=0x300; for(short paletteIndex=0;paletteIndexpalPalEntry[paletteIndex]; *lpPaletteEntry=mPaletteData[paletteIndex]; } mhPalette=::CreatePalette((LOGPALETTE FAR *)lpLogPalette); ::GlobalUnlock(hGlobalPalette); ::GlobalFree(hGlobalPalette); return (mhPalette?TRUE:FALSE); } void PurePalette::usePalette(const PureDevice &somePureDevice,short usage) { if(usage) { mhOldPalette=::SelectPalette(somePureDevice,mhPalette,FALSE); ::RealizePalette(somePureDevice); mIsInUse=TRUE; } else { ::SelectPalette(somePureDevice,mhOldPalette,FALSE); ::RealizePalette(somePureDevice); mIsInUse=FALSE; } } void PurePalette::getPaletteColors(PureVector &someRGBColors)const { size_t paletteColors((size_t)someRGBColors.size(paletteEntries())); for(short paletteIndex=0;paletteIndex=paletteEntries())return FALSE; someRGBColor=(RGBColor)mPaletteData[paletteIndex]; return TRUE; } void PurePalette::setPaletteColors(PureVector &someRGBColors,PaletteEntry::PaletteFlags paletteFlag) { size_t paletteColors((size_t)someRGBColors.size()); for(short paletteIndex=0;paletteIndex=paletteEntries())return FALSE; mPaletteData[paletteIndex]=someRGBColor; mPaletteData[paletteIndex].flags(paletteFlag); ::SetPaletteEntries(mhPalette,paletteIndex,1,(PALETTEENTRY FAR*)&mPaletteData[paletteIndex]); return TRUE; } void PurePalette::clearPalette(void) { short paletteColors(paletteEntries()); RGBColor nullColor; for(short paletteIndex=0;paletteIndex paletteColors; getPaletteColors(paletteColors); setPaletteColors(paletteColors,PaletteEntry::NoCollapse); setPaletteColor(PurePalette::MaxColors-1,RGBColor(255,255,255)); setPaletteColor(0,RGBColor(0,0,0)); createPalette(); return TRUE; } if(SystemStaticColors!=(staticColors=::GetDeviceCaps(pureDevice,NUMCOLORS)))return FALSE; staticColors/=2; if(MaxColors!=::GetSystemPaletteEntries(pureDevice,0,MaxColors,(PALETTEENTRY FAR *)&paletteData))return FALSE; for(short paletteIndex=0;paletteIndex