#endif
#include "wx/gdicmn.h"
+#include "wx/app.h"
#include "wx/x11/private.h"
m_colormap = (WXColormap *) NULL;
m_hasPixel = FALSE;
}
+ wxColourRefData(const wxColourRefData& data):
+ wxObjectRefData()
+ {
+ m_color = data.m_color;
+ m_colormap = data.m_colormap;
+ m_hasPixel = data.m_hasPixel;
+ }
~wxColourRefData()
{
void wxColourRefData::FreeColour()
{
- if (m_colormap)
+ if (!m_colormap)
+ return;
+#if !wxUSE_NANOX
+ if ((wxTheApp->m_visualInfo->m_visualType == GrayScale) ||
+ (wxTheApp->m_visualInfo->m_visualType == PseudoColor))
{
- Colormap cm = (Colormap)m_colormap;
-
-#if 0
- GdkColormapPrivate *private_colormap = (GdkColormapPrivate*) m_colormap;
- if ((private_colormap->visual->type == GDK_VISUAL_GRAYSCALE) ||
- (private_colormap->visual->type == GDK_VISUAL_PSEUDO_COLOR))
- {
- int idx = m_color.pixel;
- colMapAllocCounter[ idx ] = colMapAllocCounter[ idx ] - 1;
+ int idx = m_color.pixel;
+ colMapAllocCounter[ idx ] = colMapAllocCounter[ idx ] - 1;
- if (colMapAllocCounter[ idx ] == 0)
- gdk_colormap_free_colors( m_colormap, &m_color, 1 );
+ if (colMapAllocCounter[ idx ] == 0)
+ {
+ unsigned long pixel = m_color.pixel;
+ XFreeColors( wxGlobalDisplay(), (Colormap) m_colormap, &pixel, 1, 0 );
}
-#endif
}
+#endif
}
void wxColourRefData::AllocColour( WXColormap cmap )
FreeColour();
-#if 0
- GdkColormapPrivate *private_colormap = (GdkColormapPrivate*) cmap;
- if ((private_colormap->visual->type == GDK_VISUAL_GRAYSCALE) ||
- (private_colormap->visual->type == GDK_VISUAL_PSEUDO_COLOR))
+#if !wxUSE_NANOX
+ if ((wxTheApp->m_visualInfo->m_visualType == GrayScale) ||
+ (wxTheApp->m_visualInfo->m_visualType == PseudoColor))
{
- m_hasPixel = gdk_colormap_alloc_color( cmap, &m_color, FALSE, TRUE );
+ m_hasPixel = XAllocColor( wxGlobalDisplay(), (Colormap) cmap, &m_color );
int idx = m_color.pixel;
colMapAllocCounter[ idx ] = colMapAllocCounter[ idx ] + 1;
}
{
m_hasPixel = XAllocColor( wxGlobalDisplay(), (Colormap) cmap, &m_color );
}
+
m_colormap = cmap;
}
wxColour::wxColour( unsigned char red, unsigned char green, unsigned char blue )
{
m_refData = new wxColourRefData();
+#if wxUSE_NANOX
+ M_COLDATA->m_color.red = ((unsigned short)red) ;
+ M_COLDATA->m_color.green = ((unsigned short)green) ;
+ M_COLDATA->m_color.blue = ((unsigned short)blue) ;
+#else
M_COLDATA->m_color.red = ((unsigned short)red) << SHIFT;
M_COLDATA->m_color.green = ((unsigned short)green) << SHIFT;
M_COLDATA->m_color.blue = ((unsigned short)blue) << SHIFT;
+#endif
M_COLDATA->m_color.pixel = 0;
}
wxNode *node = (wxNode *) NULL;
if ( (wxTheColourDatabase) && (node = wxTheColourDatabase->Find(colourName)) )
{
- wxColour *col = (wxColour*)node->Data();
+ wxColour *col = (wxColour*)node->GetData();
UnRef();
if (col) Ref( *col );
}
else
{
m_refData = new wxColourRefData();
+
+ M_COLDATA->m_colormap = wxTheApp->GetMainColormap( wxGlobalDisplay() );
+
if (!XParseColor( wxGlobalDisplay(), (Colormap) M_COLDATA->m_colormap, colourName.mb_str(), &M_COLDATA->m_color ))
{
// VZ: asserts are good in general but this one is triggered by
AllocExclusive();
m_refData = new wxColourRefData();
+#if wxUSE_NANOX
+ M_COLDATA->m_color.red = ((unsigned short)red) ;
+ M_COLDATA->m_color.green = ((unsigned short)green) ;
+ M_COLDATA->m_color.blue = ((unsigned short)blue) ;
+#else
M_COLDATA->m_color.red = ((unsigned short)red) << SHIFT;
M_COLDATA->m_color.green = ((unsigned short)green) << SHIFT;
M_COLDATA->m_color.blue = ((unsigned short)blue) << SHIFT;
+#endif
M_COLDATA->m_color.pixel = 0;
}
{
wxCHECK_MSG( Ok(), 0, wxT("invalid colour") );
+#if wxUSE_NANOX
+ return (unsigned char) M_COLDATA->m_color.red ;
+#else
return (unsigned char)(M_COLDATA->m_color.red >> SHIFT);
+#endif
}
unsigned char wxColour::Green() const
{
wxCHECK_MSG( Ok(), 0, wxT("invalid colour") );
+#if wxUSE_NANOX
+ return (unsigned char) M_COLDATA->m_color.green ;
+#else
return (unsigned char)(M_COLDATA->m_color.green >> SHIFT);
+#endif
}
unsigned char wxColour::Blue() const
{
wxCHECK_MSG( Ok(), 0, wxT("invalid colour") );
+#if wxUSE_NANOX
+ return (unsigned char) M_COLDATA->m_color.blue ;
+#else
return (unsigned char)(M_COLDATA->m_color.blue >> SHIFT);
+#endif
}
void wxColour::CalcPixel( WXColormap cmap )
{
- if (!Ok()) return;
+ wxCHECK_RET( Ok(), wxT("invalid colour") );
+
+ wxCHECK_RET( cmap, wxT("invalid colormap") );
M_COLDATA->AllocColour( cmap );
}