X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9576ca53db96b462ed4c0b4bdf47d64c40203e4..40d601782ec2466a02eab190aeb59ee168a12ea9:/src/mac/carbon/palette.cpp diff --git a/src/mac/carbon/palette.cpp b/src/mac/carbon/palette.cpp index f8db96f8d0..1c18196135 100644 --- a/src/mac/carbon/palette.cpp +++ b/src/mac/carbon/palette.cpp @@ -13,6 +13,10 @@ #pragma implementation "palette.h" #endif +#include "wx/defs.h" + +#if wxUSE_PALETTE + #include "wx/palette.h" #if !USE_SHARED_LIBRARIES @@ -26,12 +30,13 @@ IMPLEMENT_DYNAMIC_CLASS(wxPalette, wxGDIObject) wxPaletteRefData::wxPaletteRefData() { - // TODO + m_palette = NULL ; + m_count = 0 ; } wxPaletteRefData::~wxPaletteRefData() { - // TODO + delete[] m_palette ; } wxPalette::wxPalette() @@ -53,7 +58,13 @@ bool wxPalette::Create(int n, const unsigned char *red, const unsigned char *gre m_refData = new wxPaletteRefData; - // TODO + M_PALETTEDATA->m_count = n ; + M_PALETTEDATA->m_palette = new wxColour[n] ; + + for ( int i = 0 ; i < n ; ++i) + { + M_PALETTEDATA->m_palette[i].Set( red[i] , green[i] , blue[i] ) ; + } return FALSE; } @@ -61,10 +72,26 @@ bool wxPalette::Create(int n, const unsigned char *red, const unsigned char *gre int wxPalette::GetPixel(const unsigned char red, const unsigned char green, const unsigned char blue) const { if ( !m_refData ) - return FALSE; - - // TODO - return FALSE; + return -1; + + long bestdiff = 3 * 256 ; + long bestpos = 0 ; + long currentdiff ; + + for ( int i = 0 ; i < M_PALETTEDATA->m_count ; ++i ) + { + const wxColour& col = &M_PALETTEDATA->m_palette[i] ; + currentdiff = abs ( col.Red() - red ) + abs( col.Green() - green ) + abs ( col.Blue() - blue ) ; + if ( currentdiff < bestdiff ) + { + bestdiff = currentdiff ; + bestpos = i ; + if ( bestdiff == 0 ) + break ; + } + } + + return bestpos; } bool wxPalette::GetRGB(int index, unsigned char *red, unsigned char *green, unsigned char *blue) const @@ -72,11 +99,17 @@ bool wxPalette::GetRGB(int index, unsigned char *red, unsigned char *green, unsi if ( !m_refData ) return FALSE; - if (index < 0 || index > 255) + if (index < 0 || index >= M_PALETTEDATA->m_count) return FALSE; - // TODO - return FALSE; + const wxColour& col = &M_PALETTEDATA->m_palette[index] ; + *red = col.Red() ; + *green = col.Green() ; + *blue = col.Blue() ; + + return TRUE; } +#endif + // wxUSE_PALETTE