Files
Work/ddraw/PALETTE.CPP
2024-08-07 09:16:27 -04:00

84 lines
2.3 KiB
C++

#include <ddraw/palette.hpp>
#include <common/openfile.hpp>
#include <common/filemap.hpp>
#include <common/pview.hpp>
#include <common/purehdc.hpp>
WORD DirectPalette::systemPalette(void)
{
PureDevice screenDevice;
WORD systemPaletteEntries;
screenDevice.screenDevice();
systemPaletteEntries=::GetSystemPaletteEntries(screenDevice,0,MaxColors,(PALETTEENTRY FAR*)&mPaletteEntries);
return systemPaletteEntries;
}
BOOL DirectPalette::readPalette(const String &strPathFileName)
{
FileHandle palFile(strPathFileName);
FileMap palMap(palFile);
PureViewOfFile palView(palMap);
PaletteEntry paletteEntry;
String strLine;
int palEntries;
char *pLine;
char strTokens[]={' ','\0'};
if(!palFile.isOkay())return FALSE;
palView.getLine(strLine);
if(!(strLine==String("JASC-PAL")))return FALSE;
palView.getLine(strLine);
if(!(strLine==String("0100")))return FALSE;
palView.getLine(strLine);
palEntries=::atoi(strLine);
if(palEntries!=MaxColors)return FALSE;
for(int palEntry=0;palEntry<palEntries;palEntry++)
{
palView.getLine(strLine);
pLine=(char*)strLine;
pLine=::strtok(pLine,strTokens);
if(!pLine)continue;
paletteEntry.red(::atoi(pLine));
pLine=::strtok(0,strTokens);
if(!pLine)continue;
paletteEntry.green(::atoi(pLine));
pLine=::strtok(0,strTokens);
if(!pLine)continue;
paletteEntry.blue(::atoi(pLine));
paletteEntry.flags(PaletteEntry::NoCollapse);
mPaletteEntries[palEntry]=paletteEntry;
}
return TRUE;
}
void DirectPalette::initPalette(void)
{
for(int index=0;index<10;index++)
{
mPaletteEntries[index].flags(PaletteEntry::Explicit);
mPaletteEntries[index].red(index);
mPaletteEntries[index].green(0);
mPaletteEntries[index].blue(0);
mPaletteEntries[246+index].flags(PaletteEntry::Explicit);
mPaletteEntries[246+index].red(246+index);
mPaletteEntries[246+index].green(0);
mPaletteEntries[246+index].blue(0);
}
for(index=10;index<26;index++)
{
mPaletteEntries[index].flags(PaletteEntry::PaletteFlags(PaletteEntry::NoCollapse|PaletteEntry::Reserved));
mPaletteEntries[index].red(255);
mPaletteEntries[index].green(64);
mPaletteEntries[index].blue(32);
}
for(;index<246;index++)
{
mPaletteEntries[index].flags(PaletteEntry::NoCollapse);
mPaletteEntries[index].red(25);
mPaletteEntries[index].green(6);
mPaletteEntries[index].blue(63);
}
}