]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/settings.cpp
Really cheesy attempt to make wxDC::DrawText() utilize gtk+ 1.3.1's
[wxWidgets.git] / src / gtk1 / settings.cpp
index 2fde66188cf401d320ed446f8462948e4c4e51e8..0adcfd51b32fcb15985767d3851a140d9abe095f 100644 (file)
 #include "wx/settings.h"
 #include "wx/debug.h"
 
+#include "wx/cmndata.h"
+
 #include <gdk/gdk.h>
+#include <gdk/gdkprivate.h>
 #include <gtk/gtk.h>
 
+extern GdkFont *GtkGetDefaultGuiFont();
+
+
 /*
 #define wxSYS_COLOUR_SCROLLBAR         0
 #define wxSYS_COLOUR_BACKGROUND        1
 #define SHIFT (8*(sizeof(short int)-sizeof(char)))
 
 //wxColour *g_systemWinColour          = (wxColour *) NULL;
-wxColour *g_systemBtnFaceColour      = (wxColour *) NULL;
-wxColour *g_systemBtnShadowColour    = (wxColour *) NULL;
-wxColour *g_systemBtnHighlightColour = (wxColour *) NULL;
-wxColour *g_systemHighlightColour    = (wxColour *) NULL;
+wxColour *g_systemBtnFaceColour       = (wxColour *) NULL;
+wxColour *g_systemBtnShadowColour     = (wxColour *) NULL;
+wxColour *g_systemBtnHighlightColour  = (wxColour *) NULL;
+wxColour *g_systemHighlightColour     = (wxColour *) NULL;
+wxColour *g_systemHighlightTextColour = (wxColour *) NULL;
+wxColour *g_systemListBoxColour       = (wxColour *) NULL;
 
 wxFont *g_systemFont = (wxFont *) NULL;
 
@@ -71,6 +79,8 @@ void wxSystemSettings::Done()
     delete g_systemBtnShadowColour;
     delete g_systemBtnHighlightColour;
     delete g_systemHighlightColour;
+    delete g_systemHighlightTextColour;
+    delete g_systemListBoxColour;
     delete g_systemFont;
 }
 
@@ -128,26 +138,56 @@ wxColour wxSystemSettings::GetSystemColour( int index )
         {
             if (!g_systemHighlightColour)
             {
-/*
-                g_systemHighlightColour = 
-                       new wxColour( 0      >> SHIFT,
-                                     0      >> SHIFT,
-                                             0x9c40 >> SHIFT );
-*/              
                 GtkWidget *widget = gtk_button_new();
                 GtkStyle *def = gtk_rc_get_style( widget );
-                int red = def->bg[GTK_STATE_SELECTED].red;
-                int green = def->bg[GTK_STATE_SELECTED].green;
-                int blue = def->bg[GTK_STATE_SELECTED].blue;
+                if (!def)
+                    def = gtk_widget_get_default_style();
+                if (def)
+                {
+                    int red = def->bg[GTK_STATE_SELECTED].red;
+                    int green = def->bg[GTK_STATE_SELECTED].green;
+                    int blue = def->bg[GTK_STATE_SELECTED].blue;
+                    g_systemHighlightColour = 
+                           new wxColour( red    >> SHIFT,
+                                         green  >> SHIFT,
+                                                 blue   >> SHIFT );
+                }
+                else
+                {
+                    g_systemHighlightColour = 
+                           new wxColour( 0      >> SHIFT,
+                                         0      >> SHIFT,
+                                                 0x9c40 >> SHIFT );
+                }
                 gtk_widget_destroy( widget );
 
-                g_systemHighlightColour = 
-                       new wxColour( red    >> SHIFT,
-                                     green  >> SHIFT,
-                                             blue   >> SHIFT );
             }
             return *g_systemHighlightColour;
         }
+        case wxSYS_COLOUR_LISTBOX:
+        {
+            if (!g_systemListBoxColour)
+            {
+                GtkWidget *widget = gtk_list_new();
+                GtkStyle *def = gtk_rc_get_style( widget );
+                if (!def) 
+                    def = gtk_widget_get_default_style();
+                if (def)
+                {
+                    int red = def->base[GTK_STATE_NORMAL].red;
+                    int green = def->base[GTK_STATE_NORMAL].green;
+                    int blue = def->base[GTK_STATE_NORMAL].blue;
+                    g_systemListBoxColour = 
+                           new wxColour( red    >> SHIFT,
+                                         green  >> SHIFT,
+                                                 blue   >> SHIFT );
+                }
+                else
+                    g_systemListBoxColour = new wxColour(*wxWHITE);
+                gtk_widget_destroy( widget );
+            }
+            return *g_systemListBoxColour;
+        }
     case wxSYS_COLOUR_MENUTEXT:
     case wxSYS_COLOUR_WINDOWTEXT:
     case wxSYS_COLOUR_CAPTIONTEXT:
@@ -159,7 +199,15 @@ wxColour wxSystemSettings::GetSystemColour( int index )
     }
     case wxSYS_COLOUR_HIGHLIGHTTEXT:
     {
-      return *wxWHITE;
+        if (!g_systemHighlightTextColour)
+               {
+                   wxColour hclr = GetSystemColour(wxSYS_COLOUR_HIGHLIGHT);
+                       if (hclr.Red() > 200 && hclr.Green() > 200 && hclr.Blue() > 200)
+                           g_systemHighlightTextColour = new wxColour(*wxBLACK);
+                       else
+                           g_systemHighlightTextColour = new wxColour(*wxWHITE);
+        }
+        return *g_systemHighlightTextColour;
     }
     case wxSYS_COLOUR_INFOBK:
     case wxSYS_COLOUR_APPWORKSPACE:
@@ -186,7 +234,23 @@ wxFont wxSystemSettings::GetSystemFont( int index )
         case wxSYS_DEFAULT_GUI_FONT:
         {
             if (!g_systemFont)
-                g_systemFont = new wxFont( 16, wxSWISS, wxNORMAL, wxNORMAL );
+            {
+#if 0
+                GdkFont *gdk_font = GtkGetDefaultGuiFont();
+                if (gdk_font)
+                {
+                    GSList *font_list = ((GdkFontPrivate*)gdk_font)->names;
+                    char *name = (char*)font_list->data;
+                    wxString font_string( name );
+                    wxFontData font_data;
+                    g_systemFont = new wxFont( font_string, font_data );
+                }
+                gtk_widget_destroy( widget );
+#endif
+
+                g_systemFont = new wxFont( 12, wxSWISS, wxNORMAL, wxNORMAL );
+                
+            }
             return *g_systemFont;
         }
     }