/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "colour.h"
#endif
void wxColourRefData::FreeColour()
{
-#if 0
- 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;
-
- 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
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;
}
M_COLDATA->m_color.pixel = 0;
}
-void wxColour::InitFromName( const wxString &colourName )
+/* static */
+wxColour wxColour::CreateByName(const wxString& name)
{
- wxNode *node = (wxNode *) NULL;
- if ( (wxTheColourDatabase) && (node = wxTheColourDatabase->Find(colourName)) )
+ wxColour col;
+
+ Display *dpy = wxGlobalDisplay();
+ WXColormap colormap = wxTheApp->GetMainColormap( dpy );
+ XColor xcol;
+ if ( XParseColor( dpy, (Colormap)colormap, name.mb_str(), &xcol ) )
{
- wxColour *col = (wxColour*)node->Data();
- UnRef();
- if (col) Ref( *col );
+ wxColourRefData *refData = new wxColourRefData;
+ refData->m_colormap = colormap;
+ refData->m_color = xcol;
+ col.m_refData = refData;
}
- else
+
+ return col;
+}
+
+void wxColour::InitFromName( const wxString &colourName )
+{
+ // check the cache first
+ wxColour col;
+ if ( wxTheColourDatabase )
{
- 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
- // calling wxColourDatabase::FindColour() with an
- // unrecognized colour name and this can't be avoided from the
- // user code, so don't give it here
- //
- // a better solution would be to changed code in FindColour()
+ col = wxTheColourDatabase->Find(colourName);
+ }
- //wxFAIL_MSG( wxT("wxColour: couldn't find colour") );
+ if ( !col.Ok() )
+ {
+ col = CreateByName(colourName);
+ }
- delete m_refData;
- m_refData = (wxObjectRefData *) NULL;
- }
+ if ( col.Ok() )
+ {
+ *this = col;
+ }
+ else
+ {
+ wxFAIL_MSG( wxT("wxColour: couldn't find colour") );
}
}