Palette code

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8953 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2000-12-19 03:10:11 +00:00
parent 1378f26027
commit deb63b954b
2 changed files with 201 additions and 87 deletions

View File

@@ -23,36 +23,54 @@ public:
wxPaletteRefData(); wxPaletteRefData();
~wxPaletteRefData(); ~wxPaletteRefData();
protected: protected:
WXHPALETTE m_hPalette; WXHPALETTE m_hPalette;
}; HPS m_hPS;
}; // end of CLASS wxPaletteRefData
#define M_PALETTEDATA ((wxPaletteRefData *)m_refData) #define M_PALETTEDATA ((wxPaletteRefData *)m_refData)
class WXDLLEXPORT wxPalette: public wxGDIObject class WXDLLEXPORT wxPalette: public wxGDIObject
{ {
DECLARE_DYNAMIC_CLASS(wxPalette) DECLARE_DYNAMIC_CLASS(wxPalette)
public: public:
wxPalette(); wxPalette();
inline wxPalette(const wxPalette& palette) { Ref(palette); } inline wxPalette(const wxPalette& rPalette) { Ref(rPalette); }
wxPalette(int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue); wxPalette( int n
~wxPalette(); ,const unsigned char* pRed
bool Create(int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue); ,const unsigned char* pGreen
int GetPixel(const unsigned char red, const unsigned char green, const unsigned char blue) const; ,const unsigned char* pBlue
bool GetRGB(int pixel, unsigned char *red, unsigned char *green, unsigned char *blue) const; );
~wxPalette();
virtual bool Ok() const { return (m_refData != NULL) ; } bool Create( int n
,const unsigned char* pRed
,const unsigned char* pGreen
,const unsigned char* pBlue
);
int GetPixel( const unsigned char cRed
,const unsigned char cGreen
,const unsigned char cBlue
) const;
bool GetRGB( int nPixel
,unsigned char* pRed
,unsigned char* pGreen
,unsigned char* pBlue
) const;
inline wxPalette& operator = (const wxPalette& palette) { if (*this == palette) return (*this); Ref(palette); return *this; } virtual bool Ok(void) const { return (m_refData != NULL) ; }
inline bool operator == (const wxPalette& palette) { return m_refData == palette.m_refData; }
inline bool operator != (const wxPalette& palette) { return m_refData != palette.m_refData; }
virtual bool FreeResource(bool force = FALSE); inline wxPalette& operator = (const wxPalette& rPalette) { if (*this == rPalette) return (*this); Ref(rPalette); return *this; }
inline bool operator == (const wxPalette& rPalette) { return m_refData == rPalette.m_refData; }
inline bool operator != (const wxPalette& rPalette) { return m_refData != rPalette.m_refData; }
inline WXHPALETTE GetHPALETTE() const { return (M_PALETTEDATA ? M_PALETTEDATA->m_hPalette : 0); } virtual bool FreeResource(bool bForce = FALSE);
void SetHPALETTE(WXHPALETTE pal);
}; inline WXHPALETTE GetHPALETTE(void) const { return (M_PALETTEDATA ? M_PALETTEDATA->m_hPalette : 0); }
void SetHPALETTE(WXHPALETTE hPalette);
void SetPS(HPS hPS);
}; // end of CLASS wxPalette
#define wxColorMap wxPalette #define wxColorMap wxPalette
#define wxColourMap wxPalette #define wxColourMap wxPalette

View File

@@ -33,105 +33,201 @@ IMPLEMENT_DYNAMIC_CLASS(wxPalette, wxGDIObject)
wxPaletteRefData::wxPaletteRefData() wxPaletteRefData::wxPaletteRefData()
{ {
m_hPalette = 0; m_hPalette = NULLHANDLE;
} m_hPS = NULLHANDLE;
} // end of wxPaletteRefData::wxPaletteRefData
wxPaletteRefData::~wxPaletteRefData() wxPaletteRefData::~wxPaletteRefData()
{ {
if ( m_hPalette ) if ( m_hPalette )
return; return;
// TODO: ::DeleteObject((HPALETTE) m_hPalette); } // end of wxPaletteRefData::~wxPaletteRefData
}
wxPalette::wxPalette() wxPalette::wxPalette()
{ {
} } // end of wxPalette::wxPalette
wxPalette::wxPalette(int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue) wxPalette::wxPalette(
int n
, const unsigned char* pRed
, const unsigned char* pGreen
, const unsigned char* pBlue
)
{ {
Create(n, red, green, blue); Create( n
} ,pRed
,pGreen
,pBlue
);
} // end of wxPalette::wxPalette
wxPalette::~wxPalette() wxPalette::~wxPalette()
{ {
} } // end of wxPalette::~wxPalette
bool wxPalette::FreeResource(bool force) bool wxPalette::FreeResource(
bool bForce
)
{ {
if ( M_PALETTEDATA && M_PALETTEDATA->m_hPalette) if ( M_PALETTEDATA && M_PALETTEDATA->m_hPalette)
{ {
// TODO: DeleteObject((HPALETTE)M_PALETTEDATA->m_hPalette); ::GpiSelectPalette(M_PALETTEDATA->m_hPS, NULLHANDLE);
::GpiDeletePalette((HPAL)M_PALETTEDATA->m_hPalette);
} }
return TRUE; return TRUE;
} } // end of wxPalette::FreeResource
bool wxPalette::Create(int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue) bool wxPalette::Create(
int n
, const unsigned char* pRed
, const unsigned char* pGreen
, const unsigned char* pBlue
)
{ {
UnRef(); PULONG pualTable;
m_refData = new wxPaletteRefData; UnRef();
// TODO m_refData = new wxPaletteRefData;
/* pualTable = new ULONG[n];
NPLOGPALETTE npPal = (NPLOGPALETTE)LocalAlloc(LMEM_FIXED, sizeof(LOGPALETTE) + if (!pualTable)
(WORD)n * sizeof(PALETTEENTRY)); return(FALSE);
if (!npPal)
return(FALSE);
npPal->palVersion = 0x300; for (int i = 0; i < n; i ++)
npPal->palNumEntries = n; {
pualTable[i] = (PC_RESERVED * 16777216) + ((int)pRed[i] * 65536) + ((int)pGreen[i] * 256) + (int)pBlue[i];
}
M_PALETTEDATA->m_hPalette = (WXHPALETTE)::GpiCreatePalette( vHabmain
,LCOL_PURECOLOR
,LCOLF_CONSECRGB
,(LONG)n
,pualTable
);
delete [] pualTable;
return TRUE;
} // end of wxPalette::Create
int i; int wxPalette::GetPixel(
for (i = 0; i < n; i ++) const unsigned char cRed
{ , const unsigned char cGreen
npPal->palPalEntry[i].peRed = red[i]; , const unsigned char cBlue
npPal->palPalEntry[i].peGreen = green[i]; ) const
npPal->palPalEntry[i].peBlue = blue[i];
npPal->palPalEntry[i].peFlags = 0;
}
M_PALETTEDATA->m_hPalette = (WXHPALETTE) CreatePalette((LPLOGPALETTE)npPal);
LocalFree((HANDLE)npPal);
*/
return FALSE;
}
int wxPalette::GetPixel(const unsigned char red, const unsigned char green, const unsigned char blue) const
{ {
if ( !m_refData ) bool bFound = FALSE;
return FALSE; PULONG pualTable = NULL;
ULONG ulNumEntries;
ULONG ulRGB = (PC_RESERVED * 16777216) +
((int)cRed * 65536) +
((int)cGreen * 256) +
(int)cBlue;
// TODO if (!m_refData)
return FALSE;
}
bool wxPalette::GetRGB(int index, unsigned char *red, unsigned char *green, unsigned char *blue) const
{
if ( !m_refData )
return FALSE;
if (index < 0 || index > 255)
return FALSE; return FALSE;
// TODO
/*
PALETTEENTRY entry;
if (::GetPaletteEntries((HPALETTE) M_PALETTEDATA->m_hPalette, index, 1, &entry))
{
*red = entry.peRed;
*green = entry.peGreen;
*blue = entry.peBlue;
return TRUE;
} else
return FALSE;
*/
return FALSE;
}
void wxPalette::SetHPALETTE(WXHPALETTE pal) //
// Get number of entries first
//
ulNumEntries = ::GpiQueryPaletteInfo( M_PALETTEDATA->m_hPalette
,M_PALETTEDATA->m_hPS
,0 // No options
,0 // No start index
,0 // Force return of number entries
,NULL // No array
);
pualTable = new ULONG[ulNumEntries];
//
// Now get the entries
//
ulNumEntries = ::GpiQueryPaletteInfo( M_PALETTEDATA->m_hPalette
,M_PALETTEDATA->m_hPS
,0 // No options
,0 // start at 0
,ulNumEntries // Force return of number entries
,pualTable // Palette entry array with RGB values
);
//
// Now loop through and find the matching entry
//
for (int i = 0; i < ulNumEntries; i++)
{
if (pualTable[i] == ulRGB)
{
bFound = TRUE;
break;
}
}
if (!bFound)
return 0;
return (i + 1);
} // end of wxPalette::GetPixel
bool wxPalette::GetRGB(
int nIndex
, unsigned char* pRed
, unsigned char* pGreen
, unsigned char* pBlue
) const
{ {
if ( !m_refData ) PULONG pualTable = NULL;
m_refData = new wxPaletteRefData; RGB2 vRGB;
ULONG ulNumEntries;
M_PALETTEDATA->m_hPalette = pal; if (!m_refData)
} return FALSE;
if (nIndex < 0 || nIndex > 255)
return FALSE;
//
// Get number of entries first
//
ulNumEntries = ::GpiQueryPaletteInfo( M_PALETTEDATA->m_hPalette
,M_PALETTEDATA->m_hPS
,0 // No options
,0 // No start index
,0 // Force return of number entries
,NULL // No array
);
pualTable = new ULONG[ulNumEntries];
//
// Now get the entries
//
ulNumEntries = ::GpiQueryPaletteInfo( M_PALETTEDATA->m_hPalette
,M_PALETTEDATA->m_hPS
,0 // No options
,0 // start at 0
,ulNumEntries // Force return of number entries
,pualTable // Palette entry array with RGB values
);
memcpy(&vRGB, &pualTable[nIndex], sizeof(RGB2));
*pBlue = vRGB.bBlue;
*pGreen = vRGB.bGreen;
*pRed = vRGB.bRed;
return TRUE;
} // end of wxPalette::GetRGB
void wxPalette::SetHPALETTE(
WXHPALETTE hPal
)
{
if ( !m_refData )
m_refData = new wxPaletteRefData;
M_PALETTEDATA->m_hPalette = hPal;
} // end of wxPalette::SetHPALETTE
void wxPalette::SetPS(
HPS hPS
)
{
if ( !m_refData )
m_refData = new wxPaletteRefData;
::GpiSelectPalette(M_PALETTEDATA->m_hPS, M_PALETTEDATA->m_hPalette);
M_PALETTEDATA->m_hPS = hPS;
} // end of wxPalette::SetHPALETTE