]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/colour.cpp
rtti api mods added
[wxWidgets.git] / src / x11 / colour.cpp
index f989be7f44a6f32aeb7e9375dd72e3190cf47dad..d9ef08580817ffa92c598c118a4f137bdcaaccfb 100644 (file)
@@ -10,7 +10,7 @@
 /////////////////////////////////////////////////////////////////////////////
 
 
 /////////////////////////////////////////////////////////////////////////////
 
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "colour.h"
 #endif
 
 #pragma implementation "colour.h"
 #endif
 
@@ -35,6 +35,13 @@ public:
         m_colormap = (WXColormap *) NULL;
         m_hasPixel = FALSE;
     }
         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()
     {
     
     ~wxColourRefData()
     {
@@ -83,20 +90,19 @@ unsigned short wxColourRefData::colMapAllocCounter[ 256 ] =
 
 void wxColourRefData::FreeColour()
 {
 
 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
         }
     }
 #endif
@@ -109,12 +115,11 @@ void wxColourRefData::AllocColour( WXColormap cmap )
 
     FreeColour();
 
 
     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;
     }
         int idx = m_color.pixel;
         colMapAllocCounter[ idx ] = colMapAllocCounter[ idx ] + 1;
     }
@@ -123,6 +128,7 @@ void wxColourRefData::AllocColour( WXColormap cmap )
     {
         m_hasPixel = XAllocColor( wxGlobalDisplay(), (Colormap) cmap, &m_color );
     }
     {
         m_hasPixel = XAllocColor( wxGlobalDisplay(), (Colormap) cmap, &m_color );
     }
+    
     m_colormap = cmap;
 }
 
     m_colormap = cmap;
 }
 
@@ -137,18 +143,23 @@ IMPLEMENT_DYNAMIC_CLASS(wxColour,wxGDIObject)
 wxColour::wxColour( unsigned char red, unsigned char green, unsigned char blue )
 {
     m_refData = new wxColourRefData();
 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;
     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;
 }
 
 void wxColour::InitFromName( const wxString &colourName )
 {
     M_COLDATA->m_color.pixel = 0;
 }
 
 void wxColour::InitFromName( const wxString &colourName )
 {
-    wxNode *node = (wxNode *) NULL;
-    if ( (wxTheColourDatabase) && (node = wxTheColourDatabase->Find(colourName)) )
+    wxColour* col;
+    if ( (wxTheColourDatabase) && (col = wxTheColourDatabase->FindColourNoAdd(colourName)) )
     {
     {
-        wxColour *col = (wxColour*)node->Data();
         UnRef();
         if (col) Ref( *col );
     }
         UnRef();
         if (col) Ref( *col );
     }
@@ -209,9 +220,15 @@ void wxColour::Set( unsigned char red, unsigned char green, unsigned char blue )
     AllocExclusive();
     
     m_refData = new wxColourRefData();
     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;
     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;
 }
 
     M_COLDATA->m_color.pixel = 0;
 }
 
@@ -219,21 +236,33 @@ unsigned char wxColour::Red() const
 {
     wxCHECK_MSG( Ok(), 0, wxT("invalid colour") );
 
 {
     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);
     return (unsigned char)(M_COLDATA->m_color.red >> SHIFT);
+#endif
 }
 
 unsigned char wxColour::Green() const
 {
     wxCHECK_MSG( Ok(), 0, wxT("invalid colour") );
 
 }
 
 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);
     return (unsigned char)(M_COLDATA->m_color.green >> SHIFT);
+#endif
 }
 
 unsigned char wxColour::Blue() const
 {
     wxCHECK_MSG( Ok(), 0, wxT("invalid colour") );
 
 }
 
 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);
     return (unsigned char)(M_COLDATA->m_color.blue >> SHIFT);
+#endif
 }
 
 void wxColour::CalcPixel( WXColormap cmap )
 }
 
 void wxColour::CalcPixel( WXColormap cmap )