1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
/*
* XEvil(TM) Copyright (C) 1994,2000 Steve Hardt and Michael Judge
* http://www.xevil.com
* satan@xevil.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program, the file "gpl.txt"; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA, or visit http://www.gnu.org.
*/
#include "stdafx.h"
#include "palmod.h"
#include "xdata.h"
/*passed a palette, does some modification on it and makes a lpdirectdrawpalette
keeps pointer to old palette to return it to normal.*/
PaletteModifier::PaletteModifier(ColorPalette &p_palette)
{
m_applied=FALSE;
m_ddpalette=NULL;
m_oldpalette=NULL;
m_surface=NULL;
m_hpal=NULL;
}
PaletteModifier::PaletteModifier()
{
m_applied=FALSE;
m_ddpalette=NULL;
m_oldpalette=NULL;
m_surface=NULL;
m_hpal=NULL;
}
PaletteModifier::~PaletteModifier()
{
HRESULT t_result;
if (m_applied)
t_result=m_surface->SetPalette( m_oldpalette);
if (m_ddpalette)
m_ddpalette->Release();
if (m_hpal)
::DeleteObject(m_hpal);
}
HRESULT
PaletteModifier::applyPalette(HDC p_hdc,LPDIRECTDRAWSURFACE p_surface, LPDIRECTDRAW p_lpDD)
{
if (m_applied)
return DD_OK;
/* ::SelectPalette(p_hdc,m_hpal,FALSE);//false is to force us to use our own palette!
UINT t_uint=::RealizePalette(p_hdc);
t_uint=::GetSystemPaletteEntries(p_hdc,0,PALENTRIES,m_palette.palentries);*/
HRESULT t_result=p_lpDD->CreatePalette( DDPCAPS_ALLOW256|DDPCAPS_8BIT, m_palette.palentries, &m_ddpalette,NULL);
DHRESULT(t_result,return t_result);
m_surface=p_surface;
t_result=m_surface->GetPalette( &m_oldpalette);
DHRESULT(t_result,return t_result);
t_result=m_surface->SetPalette( m_ddpalette);
DHRESULT(t_result,return t_result);
m_applied=TRUE;
return DD_OK;
}
HRESULT
PaletteModifier::removePalette()
{
if (!m_applied)
return DD_OK;
HRESULT t_result=DD_OK;
if (m_applied)
t_result=m_surface->SetPalette( m_oldpalette);
m_applied=FALSE;
return t_result;
}
|