84 lines
2.3 KiB
C++
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);
|
|
}
|
|
}
|
|
|