- // TODO
-/*
- NPLOGPALETTE npPal = (NPLOGPALETTE)LocalAlloc(LMEM_FIXED, sizeof(LOGPALETTE) +
- (WORD)n * sizeof(PALETTEENTRY));
- if (!npPal)
- return(FALSE);
-
- npPal->palVersion = 0x300;
- npPal->palNumEntries = n;
-
- int i;
- for (i = 0; i < n; i ++)
- {
- npPal->palPalEntry[i].peRed = red[i];
- npPal->palPalEntry[i].peGreen = green[i];
- npPal->palPalEntry[i].peBlue = blue[i];
- npPal->palPalEntry[i].peFlags = 0;
- }
- M_PALETTEDATA->m_hPalette = (WXHPALETTE) CreatePalette((LPLOGPALETTE)npPal);
- LocalFree((HANDLE)npPal);
-*/
-}
-
-int wxPalette::GetPixel(const unsigned char red, const unsigned char green, const unsigned char blue) const
+ m_refData = new wxPaletteRefData;
+ pualTable = new ULONG[n];
+ if (!pualTable)
+ return false;
+
+ for (int i = 0; i < n; i ++)
+ {
+ 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 wxPalette::GetPixel( unsigned char cRed,
+ unsigned char cGreen,
+ unsigned char cBlue) const
+{
+ bool bFound = false;
+ PULONG pualTable = NULL;
+ ULONG ulNumEntries;
+ ULONG ulRGB = (PC_RESERVED * 16777216) +
+ ((int)cRed * 65536) +
+ ((int)cGreen * 256) +
+ (int)cBlue;
+
+ if (!m_refData)
+ return wxNOT_FOUND;
+
+ //
+ // 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
+ //
+ ULONG i;
+ for (i = 0; i < ulNumEntries; i++)
+ {
+ if (pualTable[i] == ulRGB)
+ {
+ bFound = true;
+ break;
+ }
+ }
+ if (!bFound)
+ return wxNOT_FOUND;
+ return (i + 1);
+} // end of wxPalette::GetPixel
+
+bool wxPalette::GetRGB( int nIndex,
+ unsigned char* pRed,
+ unsigned char* pGreen,
+ unsigned char* pBlue) const
+{
+ PULONG pualTable = NULL;
+ RGB2 vRGB;
+ ULONG ulNumEntries;
+
+ 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
+)