Initial
This commit is contained in:
83
ddraw/PALETTE.CPP
Normal file
83
ddraw/PALETTE.CPP
Normal file
@@ -0,0 +1,83 @@
|
||||
#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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user