Files
firestorm/Gameleap/code/mw4/Tools/mapquery/dibsurf.hpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

677 lines
22 KiB
C++

#ifndef __DIBSURFHPP__
#define __DIBSURFHPP__
//*******************************************************************
//
// DESCRIPTION: Header file for CDIBSurface class
//
// AUTHOR: Andrew Farrier
//
// SourceSafe Version: $Revision: 68 $
//
// HISTORY: Created 11/15/95
//
//*******************************************************************
#include <map>
#include <vector>
#include <stack>
#pragma warning (disable : 4786)
struct DCData
{
HDC thedc;
HBITMAP oldbits;
DCData (void)
{
thedc = NULL;
oldbits = NULL;
}
DCData (HDC p1,HBITMAP p2)
{
thedc = p1;
oldbits = p2;
}
~DCData (void)
{
thedc = NULL;
oldbits = NULL;
}
DCData (const DCData& p1)
{
thedc = p1.thedc;
oldbits = p1.oldbits;
}
DCData& operator= (const DCData& p1)
{
thedc = p1.thedc;
oldbits = p1.oldbits;
return *this;
}
};
//****************************************************************
//
// Function Name: clamp
//
// Description: Will clamp x to be between min and max exclusive
//
// Returns: clamped value of x
//
//****************************************************************
template<typename type>
inline type clamp (const type& min,const type& x,const type& max)
{
if (x < min)
return min;
if (x>max)
return max;
return x;
}
//****************************************************************
//
// Function Name: RGBQUADtoCOLORREF
//
// Description: Will convert from an RGBQUAD to a COLORREF
//
// Returns: the COLORREF equal to the RGBQUAD
//
//****************************************************************
inline COLORREF RGBQUADtoCOLORREF (RGBQUAD value)
{
int red,green,blue;
COLORREF toret;
red = value.rgbRed;
green = value.rgbGreen;
blue = value.rgbBlue;
toret = RGB (red,green,blue);
return toret;
}
//****************************************************************
//
// Function Name: RGBtoCOLORREF
//
// Description: Will convert from an RGB packed int to a COLORREF
// int is in the form 0x00RRGGBB
//
// Returns: the COLORREF equal to the packed value
//
//****************************************************************
inline COLORREF RGBtoCOLORREF (int value)
{
int red,green,blue;
COLORREF toret;
red = (value>>16) & 0xff;
green = (value>>8) & 0xff;
blue = value&0xff;
toret = RGB (red,green,blue);
return toret;
}
//****************************************************************
//
// Function Name: COLORREFtoRGBQUAD
//
// Description: Will convert from a COLORREF value to an RGBQUAD
//
// Returns: the RGBQUAD equal to the COLORREF
//
//****************************************************************
inline RGBQUAD COLORREFtoRGBQUAD (COLORREF value)
{
RGBQUAD toret;
toret.rgbRed = (value >> 16) & 0xff;
toret.rgbGreen = (value >> 8) & 0xff;
toret.rgbBlue = value & 0xff;
return toret;
}
class CDIBSurface
{
private:
static std::vector<HDC> *m_FreeDC;
static std::vector<DCData> *m_AllDCs;
static int m_DCStackRefCount;
struct FloodData
{
unsigned char *mem;
CPoint where;
FloodData (unsigned char *p1,CPoint p2)
{mem = p1;where = p2;}
};
bool Create1BitMask (COLORREF colorref);
bool Create4BitMask (COLORREF colorref);
bool Create8BitMask (COLORREF colorref);
bool Create16BitMask (COLORREF colorref);
bool Create24BitMask (COLORREF colorref);
int FloodFill24 (const CPoint& start,const COLORREF color);
bool AlphaBlt16 (const int x,const int y,const int width,const int height,const CDIBSurface *src,const CDIBSurface *alpha,const int srcx,const int srcy,const int alphasrcx,const int alphasrcy);
bool AlphaBlt24 (const int x,const int y,const int width,const int height,const CDIBSurface *src,const CDIBSurface *alpha,const int srcx,const int srcy,const int alphasrcx,const int alphasrcy);
bool ColorBlt16 (const int x,const int y,const int width,const int height,const CDIBSurface* src,const int srcx,const int srcy,const COLORREF color,bool addred=true,bool addgreen=true,bool addblue=true,CDIBSurface *altmask=NULL);
bool ColorBlt24 (const int x,const int y,const int width,const int height,const CDIBSurface* src,const int srcx,const int srcy,const COLORREF color,bool addred=true,bool addgreen=true,bool addblue=true,CDIBSurface *altmask=NULL);
bool GrayBlt16 (const int x,const int y,const int width,const int height,const CDIBSurface* srcdib,const int srcx,const int srcy,CDIBSurface *altmask=NULL);
bool GrayBlt24 (const int x,const int y,const int width,const int height,const CDIBSurface* srcdib,const int srcx,const int srcy,CDIBSurface *altmask=NULL);
bool MultBlt16 (const int x,const int y,const int width,const int height,const CDIBSurface* src,const int srcx,const int srcy,const float red,const float green,const float blue,CDIBSurface *altmask=NULL);
bool MultBlt24 (const int x,const int y,const int width,const int height,const CDIBSurface* src,const int srcx,const int srcy,const float red,const float green,const float blue,CDIBSurface *altmask=NULL);
bool Convert24to16 (void);
bool SetupLoadedBitmap (HBITMAP hbm);
BITMAPINFO *AllocBitmapInfo (void) const; // delete when done with it
void ClearData (void);
struct DIBData
{
CDIBSurface *m_Mask;
HDC m_SelectedDC;
int m_SelectedDCRefCount;
bool m_AllocedDC;
HBITMAP m_OldBitmap;
HBITMAP m_BackBits; // may be NULL, call GetBitmap() if you need to create it
// HBITMAP m_OldBits;
unsigned char *m_Data;
unsigned char *m_UpperLeft;
UINT m_Width,m_Height;
UINT m_BitDepth;
int m_Pitch;
bool m_OwnPalette;
bool m_UseMask;
};
protected:
UINT *m_RefCount;
DIBData *m_DIBData;
public:
CDIBSurface (void);
CDIBSurface (UINT Width,UINT Height,UINT BitDepth);
CDIBSurface (const CDIBSurface&);
CDIBSurface& operator= (const CDIBSurface&);
~CDIBSurface (void);
bool Create (UINT Width,UINT Height,UINT BitDepth=0);
void Destroy (void);
bool operator== (const CDIBSurface& param)
{
if(!param.IsValid ())
return false;
if(!IsValid ())
return false;
ASSERT (m_DIBData);
ASSERT (param.m_DIBData);
return param.m_DIBData->m_Data == m_DIBData->m_Data;
}
HDC GetDC (void);
HDC GetDC (void) const;
void ReleaseDC (HDC) const;
void UseDC (HDC);
// These are not really consts, but behave like that (the state of the object
// is not the same on return, but it has the same functionality). This was needed
// to keep GetDC() const happy.
HBITMAP GetBitmap (void) const; // actually creates the DIB section (if needed)
void ReleaseBitmap (void) const; // call to free up GDI resources
unsigned char *CDIBSurface::GetMem (void)
{
ASSERT (m_DIBData);
if(!m_DIBData->m_Data)
return NULL;
if(!GdiFlush ())
return NULL;
return m_DIBData->m_UpperLeft;
}
unsigned char *GetMem( int x, int y );
unsigned char *GetData( void )
{
ASSERT( m_DIBData );
if( !(m_DIBData->m_Data && GdiFlush()) )
return( NULL );
return( m_DIBData->m_Data );
}
const unsigned char *GetData( void ) const
{
ASSERT( m_DIBData );
if( !(m_DIBData->m_Data && GdiFlush()) )
return( NULL );
return( m_DIBData->m_Data );
}
bool ReleaseMem (unsigned char *)
{ return (GdiFlush ()==TRUE);}
const unsigned char *CDIBSurface::GetMem (void) const
{
ASSERT (m_DIBData);
if(!m_DIBData->m_Data)
return NULL;
if(!GdiFlush ())
return NULL;
return m_DIBData->m_UpperLeft;
}
void ReleaseMem (const unsigned char *) const
{}
int GetPitch (void) const
{
ASSERT (m_DIBData);
return m_DIBData->m_Pitch;
}
int GetLocation (UINT x,UINT y) const
{
int tx,ty;
ASSERT (m_DIBData);
ASSERT (((UINT) x) < m_DIBData->m_Width);
ASSERT (((UINT) y) < m_DIBData->m_Height);
switch(m_DIBData->m_BitDepth)
{
case 1:
x>>=3;
break;
case 4:
x>>=1;
break;
case 8:
break;
case 16:
x<<=1;
break;
case 24:
x *= 3;
break;
default:
ASSERT (false);
break;
}
tx = (int) x;
ty = (int) y;
return((ty*m_DIBData->m_Pitch)+tx);
}
DWORD GetValue (UINT x,UINT y) const
{
const unsigned char *mem;
DWORD toret;
ASSERT (m_DIBData);
ASSERT (((UINT) x) < m_DIBData->m_Width);
ASSERT (((UINT) y) < m_DIBData->m_Height);
mem = GetMem ();
mem += GetLocation (x,y);
toret = 0;
switch(m_DIBData->m_BitDepth)
{
case 1:
toret = (*mem >> ((~x)&0x07)) & 0x01; //lint !e504
break;
case 4:
if(x & 0x01)
toret = *mem & 0x0f;
else
toret = *mem>>4;
break;
case 8:
toret = *mem;
break;
case 16:
toret = (*(mem+1)<<8) + *(mem);
break;
case 24:
toret = ((*mem)<<16)+ ((*(mem+1))<<8) + (*(mem+2));
break;
default:
ASSERT (false);
break;
}
ReleaseMem (mem);
return toret;
}
void SetValue (UINT x,UINT y,DWORD value)
{
unsigned char *mem;
DWORD toret;
ASSERT (m_DIBData);
ASSERT (((UINT) x) < m_DIBData->m_Width);
ASSERT (((UINT) y) < m_DIBData->m_Height);
mem = GetMem ();
mem += GetLocation (x,y);
toret = 0;
switch(m_DIBData->m_BitDepth)
{
case 1:
if (value & 0x01)
*mem |= (0x01 << ((~x)&0x07));
else
*mem &= ~(0x01 << ((~x)&0x07));
break;
case 4:
value &= 0x0f;
if(x & 0x01)
{
*mem &= 0xf0;
*mem |= value;
}
else
{
value <<= 4;
*mem &= 0x0f;
*mem |= value;
}
break;
case 8:
value &= 0xff;
*mem = value;
break;
case 16:
value &= 0xffff;
*(mem+1) = value&0xff;
*(mem) = ((value>>8) & 0xff);
break;
case 24:
value &= 0xffffff;
*(mem+2) = value&0xff;
*(mem+1) = ((value>>8) & 0xff);
*(mem) = ((value>>16) & 0xff);
break;
default:
ASSERT (false);
break;
}
ReleaseMem (mem);
}
COLORREF GetColor (UINT x,UINT y) const;
void SetColor (UINT x,UINT y,COLORREF color);
void SetColor( COLORREF color );
bool Fill (const CRect *therect,const COLORREF colorref=0);
bool Fill (const int left,const int top,const int right,const int bottom,const COLORREF colorref=0)
{return Fill (&CRect(left,top,right,bottom),colorref);} //lint !e50
bool Fill (const CPoint& topleft,const CPoint& botright,const COLORREF colorref=0)
{return Fill (&CRect (topleft,botright),colorref);} //lint !e50
bool Fill (const CRect& therect,const COLORREF colorref=0)
{return Fill (&therect,colorref);}
bool FillHatchBrush (const CRect *therect,
int stockHatchBrushStyle,const COLORREF colorref=0);
bool FillHatchBrush (const int left,const int top,const int right,
const int bottom,int stockHatchBrushStyle,const COLORREF colorref=0)
{return FillHatchBrush (&CRect(left,top,right,bottom),
stockHatchBrushStyle, colorref);} //lint !e50
bool HighlightFrame (const CRect& therect,bool up); // light is from upper left
void HLine( int x1, int x2, int y, COLORREF crColor );
bool Blt (int x,int y,int width,int height,const CDIBSurface *src,int srcx,int srcy,DWORD rop=SRCCOPY);
bool Blt (const CPoint& loc,const CSize& size,const CDIBSurface *src,const CPoint& srcloc,DWORD rop=SRCCOPY)
{return Blt (loc.x,loc.y,size.cx,size.cy,src,srcloc.x,srcloc.y,rop);}
bool Blt (const CRect& loc,const CDIBSurface *src,const CPoint& srcloc,DWORD rop=SRCCOPY)
{return Blt (loc.left,loc.top,loc.Width(),loc.Height(),src,srcloc.x,srcloc.y,rop);}
bool Blt (int x,int y,int width,int height,const CDIBSurface& src,int srcx,int srcy,DWORD rop=SRCCOPY)
{return Blt (x,y,width,height,&src,srcx,srcy,rop);}
bool Blt (const CPoint& loc,const CSize& size,const CDIBSurface& src,const CPoint& srcloc,DWORD rop=SRCCOPY)
{return Blt (loc.x,loc.y,size.cx,size.cy,&src,srcloc.x,srcloc.y,rop);}
bool Blt (const CRect& loc,const CDIBSurface& src,const CPoint& srcloc,DWORD rop=SRCCOPY)
{return Blt (loc.left,loc.top,loc.Width(),loc.Height(),&src,srcloc.x,srcloc.y,rop);}
bool Blt (int x,int y,int width,int height,HDC src,int srcx,int srcy,DWORD rop)
{
ASSERT (m_DIBData);
ASSERT (src);
ASSERT (IsValid ());
if((!src) || (!IsValid()))
return false;
HDC dc;
bool toret;
dc = GetDC ();
toret = (::BitBlt (dc,x,y,width,height,src,srcx,srcy,rop)==TRUE);
ReleaseDC (dc);
return toret;
}
// these two are functionally equivalent to their normal versions but do not
// perform format or palette conversions and do not use any GDI resources
bool BltNonGDI (int x,int y,int width,int height,const CDIBSurface& src,int srcx,int srcy);
bool MaskBltNonGDI (int x,int y,int width,int height,const CDIBSurface& src,int srcx,int srcy);
bool MaskBlt (const int x,const int y,const int width,const int height,const HDC src,const HDC mask,const int srcx,const int srcy);
bool MaskBlt (const int x,const int y,const int width,const int height,const CDIBSurface *src,const int srcx,const int srcy);
bool AlphaBlt (const int x,const int y,const int width,const int height,const CDIBSurface *src,const CDIBSurface *alpha,const int srcx,const int srcy,const int alphasrcx=-1,const int alphasrcy=-1);
bool AlphaBlt (const CRect& loc,const CDIBSurface *src,const CDIBSurface *alpha,const CPoint& srcloc)
{ return AlphaBlt (loc.left,loc.top,loc.Width (),loc.Height(),src,alpha,srcloc.x,srcloc.y); }
bool AlphaBlt (const CRect& loc,const CDIBSurface *src,const CDIBSurface *alpha,const CPoint& srcloc,const CPoint& alphaloc)
{ return AlphaBlt (loc.left,loc.top,loc.Width (),loc.Height(),src,alpha,srcloc.x,srcloc.y,alphaloc.x,alphaloc.y); }
bool AlphaBlt (const int x,const int y,const int width,const int height,const CDIBSurface& src,const CDIBSurface& alpha,const int srcx,const int srcy,const int alphasrcx=-1,const int alphasrcy=-1)
{ return AlphaBlt (x,y,width,height,&src,&alpha,srcx,srcy,alphasrcx,alphasrcy); }
bool AlphaBlt (const CRect& loc,const CDIBSurface& src,const CDIBSurface& alpha,const CPoint& srcloc)
{ return AlphaBlt (loc.left,loc.top,loc.Width (),loc.Height(),&src,&alpha,srcloc.x,srcloc.y); }
bool AlphaBlt (const CRect& loc,const CDIBSurface& src,const CDIBSurface& alpha,const CPoint& srcloc,const CPoint& alphaloc)
{ return AlphaBlt (loc.left,loc.top,loc.Width (),loc.Height(),&src,&alpha,srcloc.x,srcloc.y,alphaloc.x,alphaloc.y); }
bool RotateBlt( int left, int top, int right, int bottom, const CDIBSurface& src, int x, int y, int ang );
bool RotateBlt( const CRect& loc, const CDIBSurface& src, const CPoint& srcloc, int ang )
{ return( RotateBlt( loc.left, loc.top, loc.right, loc.bottom, src, srcloc.x, srcloc.y, ang ) ); }
bool TransparentBlt( int left, int top, int right, int bottom, const CDIBSurface& src, int x, int y, const COLORREF bgClr );
bool TransparentBlt( const CRect& loc, const CDIBSurface& src, const CPoint& srcloc, const COLORREF bgClr )
{ return( TransparentBlt( loc.left, loc.top, loc.right, loc.bottom, src, srcloc.x, srcloc.y, bgClr ) ); }
bool ColorBlt (const int x,const int y,const int width,const int height,const CDIBSurface* src,const int srcx,const int srcy,const COLORREF color,bool addred=true,bool addgreen=true,bool addblue=true,CDIBSurface *altmask=NULL);
bool ColorBlt (const CRect& loc,const CDIBSurface* src,const CPoint& srcloc,const COLORREF color,bool addred=true,bool addgreen=true,bool addblue=true,CDIBSurface *altmask=NULL)
{ return ColorBlt (loc.left,loc.top,loc.Width (),loc.Height (),src,srcloc.x,srcloc.y,color,addred,addgreen,addblue,altmask); }
bool GrayBlt (const int x,const int y,const int width,const int height,const CDIBSurface* src,const int srcx,const int srcy, CDIBSurface *altmask=NULL);
bool MultBlt (const int x,const int y,const int width,const int height,const CDIBSurface* src,const int srcx,const int srcy,const float red,const float green,const float blue,CDIBSurface *altmask=NULL);
bool MultBlt (const CRect& loc,const CDIBSurface* src,const CPoint& srcloc,const float red,const float green,const float blue,CDIBSurface *altmask=NULL)
{ return MultBlt (loc.left,loc.top,loc.Width (),loc.Height (),src,srcloc.x,srcloc.y,red,green,blue,altmask); }
bool SetClipArea (HRGN newcliparea)
{ return false; /* ASSERT (m_DIBData);if(SelectClipRgn (m_DIBData->m_BackDC,newcliparea) == ERROR) return false;return true;*/}
bool StretchBlt (const CRect& loc,const CDIBSurface *src,const CRect& srcloc,DWORD rop=SRCCOPY)
{return StretchBlt (loc.left,loc.top,loc.Width(),loc.Height(),src,srcloc.left,srcloc.top,srcloc.Width(),srcloc.Height(),rop);}
bool StretchBlt (const CRect& loc,const CDIBSurface& src,const CRect& srcloc,DWORD rop=SRCCOPY)
{return StretchBlt (loc.left,loc.top,loc.Width(),loc.Height(),&src,srcloc.left,srcloc.top,srcloc.Width(),srcloc.Height(),rop);}
bool StretchBlt (int x,int y,int width,int height,const CDIBSurface *src,int srcx,int srcy,int srcwidth,int srcheight,DWORD rop)
{
ASSERT (m_DIBData);
ASSERT (src);
ASSERT (IsValid ());
if((!src) || (!IsValid()))
return false;
HDC dc1,dc2;
bool toret;
dc1 = GetDC ();
dc2 = src->GetDC ();
ASSERT (dc1 && dc2);
toret = (::StretchBlt (dc1,x,y,width,height,dc2,srcx,srcy,srcwidth,srcheight,rop)==TRUE);
ReleaseDC (dc1);
src->ReleaseDC (dc2);
return toret;
}
bool StretchBlt (int x,int y,int width,int height,HDC src,int srcx,int srcy,int srcwidth,int srcheight,DWORD rop)
{
ASSERT (m_DIBData);
ASSERT (src);
ASSERT (IsValid ());
if((!src) || (!IsValid()))
return false;
HDC dc;
bool toret;
dc = GetDC ();
toret = (::StretchBlt (dc,x,y,width,height,src,srcx,srcy,srcwidth,srcheight,rop)==TRUE);
ReleaseDC (dc);
return toret;
}
int FloodFill (const CPoint& start,const COLORREF color);
bool SetSize (UINT cx,UINT cy,UINT BitDepth)
{ ASSERT (m_DIBData);Destroy (); return Create (cx,cy,BitDepth);}
UINT GetWidth (void) const
{ ASSERT (m_DIBData);return m_DIBData->m_Width;}
UINT GetHeight (void) const
{ ASSERT (m_DIBData);return m_DIBData->m_Height;}
UINT GetBitDepth (void) const
{ ASSERT (m_DIBData);return m_DIBData->m_BitDepth;}
CSize GetSize( void ) const
{ ASSERT (m_DIBData); return CSize( m_DIBData->m_Width, m_DIBData->m_Height ); }
CDIBSurface* Mask (void)
{ ASSERT (m_DIBData);return m_DIBData->m_Mask;}
const CDIBSurface* Mask (void) const
{ ASSERT (m_DIBData);return m_DIBData->m_Mask;}
bool UseMask (void) const
{ ASSERT (m_DIBData);return m_DIBData->m_UseMask;}
void UseMask (bool newflag)
{ ASSERT (m_DIBData);if((!newflag) || ((m_DIBData->m_Mask) && (m_DIBData->m_Mask->IsValid ()))) m_DIBData->m_UseMask = newflag;}
bool IsValid (void) const
{ ASSERT (m_DIBData);return m_DIBData->m_Data != NULL;}
bool CopyBitmap(HBITMAP hbm,int x,int y,int dx,int dy);
bool CalcMask (COLORREF colorref);
bool CalcMask (const std::vector<COLORREF>& colors);
bool CalcMask (void);
bool DestroyMask (void);
bool ConvertBitDepth (int newdepth);
bool ConvertToGray (void); // converts contents to 8-bit with gray palette
//white is transparent
WORD ConvertColorToWord( COLORREF crColor )
{ return( WORD( ((0xf80000 & crColor) >> 19) | ((0xf800 & crColor) >> 6) | ((0xf8 & crColor) << 7) ) ); }
RGBTRIPLE ConvertColorToTriple( COLORREF crColor )
{ RGBTRIPLE rgb = { (0xff & crColor) >> 16, 0xff & (crColor >> 8), 0xff & crColor }; return( rgb ); }
DWORD ConvertColorToLong( COLORREF crColor )
{ return( DWORD( 0x00ffffff & crColor ) ); }
COLORREF ConvertWordToColor( WORD wColor )
{ return( RGB( (0x7c00 & wColor) >> 7, (0x03e0 & wColor) >> 2, (0x1f & wColor) << 3 ) ); }
COLORREF ConvertTripleToColor( RGBTRIPLE rgbColor )
{ return( RGB( rgbColor.rgbtRed, rgbColor.rgbtGreen, rgbColor.rgbtBlue ) ); }
COLORREF ConvertLongToColor( DWORD dwColor )
{ return( RGB( 0xff & dwColor, (0xff00 & dwColor) >> 8, (0xff0000 & dwColor) >> 16 ) ); }
void ClearOutsideMask (void) // clears any part of the bitmap that is in the transparent part of the mask
{ if (Mask())
Blt (0, 0, GetWidth(), GetHeight(), Mask(), 0, 0, 0x00220326); // DSna
}
bool SplitRef (void);
void AddRef (void)
{
ASSERT (m_RefCount);
(*m_RefCount)++;
if(!m_DCStackRefCount)
{
m_AllDCs = new std::vector<DCData>;
m_FreeDC = new std::vector<HDC>;
}
m_DCStackRefCount++;
}
bool Release (void)
{
ASSERT (m_RefCount);
ASSERT (*m_RefCount);
ASSERT (m_DIBData);
m_DCStackRefCount--;
if(!m_DCStackRefCount)
{
std::vector<DCData>::iterator iter;
ASSERT (m_FreeDC->size () == m_AllDCs->size ());
iter = m_AllDCs->begin ();
while(iter != m_AllDCs->end ())
{
DeleteDC (iter->thedc);
iter++;
}
delete m_FreeDC;
delete m_AllDCs;
m_FreeDC = NULL;
m_AllDCs = NULL;
}
(*m_RefCount)--;
if (!(*m_RefCount))
{
Destroy ();
delete m_RefCount;
delete m_DIBData;
m_RefCount = NULL;
m_DIBData = NULL;
return false;
}
return true;
}
#if 0
static void *operator new (size_t size)
{
void *temp;
temp = new BYTE[size];
if(!temp)
{
return NULL;
}
memset (temp,0,size);
((CDIBSurface *) temp)->m_RefCount = 1;
((CDIBSurface *) temp)->m_Alloced = true;
return temp;
}
static void operator delete (void *,size_t)
{ }
#endif
};
bool MaskBlt (HDC dest,const int x,const int y,const int width,const int height,const HDC src,const HDC mask,const int srcx,const int srcy);
bool MaskBlt (HDC dest,const int x,const int y,const int width,const int height,const HDC src,const HDC mask,const int srcx,const int srcy,const int maskx,const int masky);
bool MaskBlt (HDC dest,const int x,const int y,const int width,const int height,const CDIBSurface *src,const int srcx,const int srcy);
inline bool MaskBlt (HDC dest,const CPoint& loc,const CSize& size,const CDIBSurface *src,const CPoint& srcloc)
{return MaskBlt (dest,loc.x,loc.y,size.cx,size.cy,src,srcloc.x,srcloc.y);}
inline bool MaskBlt (HDC dest,const CRect& loc,const CDIBSurface *src,const CPoint& srcloc)
{return MaskBlt (dest,loc.left,loc.top,loc.Width(),loc.Height(),src,srcloc.x,srcloc.y);}
#endif