X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a3622daa901777a33969d8bc04e2d62dee14d164..0c55409f3a315e45963bc48f52435245e6af6c9d:/src/gtk/settings.cpp?ds=sidebyside diff --git a/src/gtk/settings.cpp b/src/gtk/settings.cpp index aa24393c68..4aae2448f7 100644 --- a/src/gtk/settings.cpp +++ b/src/gtk/settings.cpp @@ -2,9 +2,8 @@ // Name: settings.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -14,6 +13,16 @@ #endif #include "wx/settings.h" +#include "wx/debug.h" + +#include "wx/cmndata.h" + +#include +#include +#include + +extern GdkFont *GtkGetDefaultGuiFont(); + /* #define wxSYS_COLOUR_SCROLLBAR 0 @@ -53,139 +62,287 @@ #define SHIFT (8*(sizeof(short int)-sizeof(char))) -wxColour *g_systemBtnFaceColour = NULL; -wxColour *g_systemBtnShadowColour = NULL; -wxColour *g_systemBtnHighlightColour = NULL; -wxColour *g_systemHighlightColour = NULL; +//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_systemHighlightTextColour = (wxColour *) NULL; +wxColour *g_systemListBoxColour = (wxColour *) NULL; +wxColour *g_systemBtnTextColour = (wxColour *) NULL; -wxFont *g_systemFont = NULL; +wxFont *g_systemFont = (wxFont *) NULL; -void wxSystemSettings::Done() { - wxDELETE(g_systemBtnFaceColour); - wxDELETE(g_systemBtnShadowColour); - wxDELETE(g_systemBtnHighlightColour); - wxDELETE(g_systemHighlightColour); - wxDELETE(g_systemFont); +void wxSystemSettings::Done() +{ +// delete g_systemWinColour; + delete g_systemBtnFaceColour; + delete g_systemBtnShadowColour; + delete g_systemBtnHighlightColour; + delete g_systemHighlightColour; + delete g_systemHighlightTextColour; + delete g_systemListBoxColour; + delete g_systemFont; + delete g_systemBtnTextColour; } wxColour wxSystemSettings::GetSystemColour( int index ) { - switch (index) - { - case wxSYS_COLOUR_SCROLLBAR: - case wxSYS_COLOUR_BACKGROUND: - case wxSYS_COLOUR_ACTIVECAPTION: - case wxSYS_COLOUR_INACTIVECAPTION: - case wxSYS_COLOUR_MENU: - case wxSYS_COLOUR_WINDOW: - case wxSYS_COLOUR_WINDOWFRAME: - case wxSYS_COLOUR_ACTIVEBORDER: - case wxSYS_COLOUR_INACTIVEBORDER: - case wxSYS_COLOUR_BTNFACE: + switch (index) { - GtkStyle *style = gtk_widget_get_default_style(); - if (!g_systemBtnFaceColour) - { - g_systemBtnFaceColour = - new wxColour( style->bg[0].red >> SHIFT, - style->bg[0].green >> SHIFT, - style->bg[0].blue >> SHIFT ); - }; - return *g_systemBtnFaceColour; - }; - case wxSYS_COLOUR_BTNSHADOW: - { - GtkStyle *style = gtk_widget_get_default_style(); - if (!g_systemBtnShadowColour) - { - g_systemBtnShadowColour = - new wxColour( style->dark[0].red >> SHIFT, - style->dark[0].green >> SHIFT, - style->dark[0].blue >> SHIFT ); - }; - return *g_systemBtnShadowColour; - }; - case wxSYS_COLOUR_GRAYTEXT: - case wxSYS_COLOUR_BTNHIGHLIGHT: - { - GtkStyle *style = gtk_widget_get_default_style(); - if (!g_systemBtnHighlightColour) - { - g_systemBtnHighlightColour = - new wxColour( style->light[0].red >> SHIFT, - style->light[0].green >> SHIFT, - style->light[0].blue >> SHIFT ); - }; - return *g_systemBtnHighlightColour; - }; - case wxSYS_COLOUR_HIGHLIGHT: - { - GtkStyle *style = gtk_widget_get_default_style(); - if (!g_systemHighlightColour) - { - g_systemHighlightColour = - new wxColour( style->bg[GTK_STATE_SELECTED].red >> SHIFT, - style->bg[GTK_STATE_SELECTED].green >> SHIFT, - style->bg[GTK_STATE_SELECTED].blue >> SHIFT ); - }; - return *g_systemHighlightColour; - }; + case wxSYS_COLOUR_SCROLLBAR: + case wxSYS_COLOUR_BACKGROUND: + case wxSYS_COLOUR_ACTIVECAPTION: + case wxSYS_COLOUR_INACTIVECAPTION: + case wxSYS_COLOUR_MENU: + case wxSYS_COLOUR_WINDOWFRAME: + case wxSYS_COLOUR_ACTIVEBORDER: + case wxSYS_COLOUR_INACTIVEBORDER: + case wxSYS_COLOUR_BTNFACE: + case wxSYS_COLOUR_3DLIGHT: + { + if (!g_systemBtnFaceColour) + { + GtkWidget *widget = gtk_button_new(); + GtkStyle *def = gtk_rc_get_style( widget ); + if (!def) + def = gtk_widget_get_default_style(); + if (def) + { + int red = def->bg[GTK_STATE_NORMAL].red; + int green = def->bg[GTK_STATE_NORMAL].green; + int blue = def->bg[GTK_STATE_NORMAL].blue; + g_systemBtnFaceColour = + new wxColour( red >> SHIFT, + green >> SHIFT, + blue >> SHIFT ); + } + else + { + g_systemBtnFaceColour = + new wxColour( 0 >> SHIFT, + 0 >> SHIFT, + 0x9c40 >> SHIFT ); + } + gtk_widget_destroy( widget ); + + } + return *g_systemBtnFaceColour; + /* + if (!g_systemBtnFaceColour) + { + g_systemBtnFaceColour = + new wxColour( 0xd6d6 >> SHIFT, + 0xd6d6 >> SHIFT, + 0xd6d6 >> SHIFT ); + } + return *g_systemBtnFaceColour; + */ + } + case wxSYS_COLOUR_WINDOW: + { + return *wxWHITE; + } + case wxSYS_COLOUR_3DDKSHADOW: + { + return *wxBLACK; + } + case wxSYS_COLOUR_GRAYTEXT: + case wxSYS_COLOUR_BTNSHADOW: + //case wxSYS_COLOUR_3DSHADOW: + { + if (!g_systemBtnShadowColour) + { + wxColour faceColour(GetSystemColour(wxSYS_COLOUR_3DFACE)); + g_systemBtnShadowColour = + new wxColour((unsigned char) (faceColour.Red() * 0.666), + (unsigned char) (faceColour.Green() * 0.666), + (unsigned char) (faceColour.Blue() * 0.666)); + } + /* + if (!g_systemBtnShadowColour) + { + g_systemBtnShadowColour = + new wxColour( 0x7530 >> SHIFT, + 0x7530 >> SHIFT, + 0x7530 >> SHIFT ); + } + */ + return *g_systemBtnShadowColour; + } + case wxSYS_COLOUR_3DHIGHLIGHT: + //case wxSYS_COLOUR_BTNHIGHLIGHT: + { + return * wxWHITE; +/* I think this should normally be white (JACS 8/2000) + if (!g_systemBtnHighlightColour) + { + g_systemBtnHighlightColour = + new wxColour( 0xea60 >> SHIFT, + 0xea60 >> SHIFT, + 0xea60 >> SHIFT ); + } + return *g_systemBtnHighlightColour; +*/ + } + case wxSYS_COLOUR_HIGHLIGHT: + { + if (!g_systemHighlightColour) + { + GtkWidget *widget = gtk_button_new(); + GtkStyle *def = gtk_rc_get_style( widget ); + 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 ); + + } + 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: case wxSYS_COLOUR_INACTIVECAPTIONTEXT: + case wxSYS_COLOUR_BTNTEXT: case wxSYS_COLOUR_INFOTEXT: { - return *wxBLACK; - }; + if (!g_systemBtnTextColour) + { + GtkWidget *widget = gtk_button_new(); + GtkStyle *def = gtk_rc_get_style( widget ); + if (!def) + def = gtk_widget_get_default_style(); + if (def) + { + int red = def->fg[GTK_STATE_NORMAL].red; + int green = def->fg[GTK_STATE_NORMAL].green; + int blue = def->fg[GTK_STATE_NORMAL].blue; + g_systemBtnTextColour = + new wxColour( red >> SHIFT, + green >> SHIFT, + blue >> SHIFT ); + } + else + { + g_systemBtnTextColour = + new wxColour(0, 0, 0); + } + gtk_widget_destroy( widget ); + } + return *g_systemBtnTextColour; + } 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: { return *wxWHITE; // ? - }; - }; + } + } return *wxWHITE; -}; +} wxFont wxSystemSettings::GetSystemFont( int index ) { - switch (index) - { - case wxSYS_OEM_FIXED_FONT: - case wxSYS_ANSI_FIXED_FONT: - case wxSYS_SYSTEM_FIXED_FONT: - { - return *wxNORMAL_FONT; - }; - case wxSYS_ANSI_VAR_FONT: - case wxSYS_SYSTEM_FONT: - case wxSYS_DEVICE_DEFAULT_FONT: - case wxSYS_DEFAULT_GUI_FONT: + switch (index) { - if (!g_systemFont) - g_systemFont = new wxFont( "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*" ); - return *g_systemFont; - }; - }; + case wxSYS_OEM_FIXED_FONT: + case wxSYS_ANSI_FIXED_FONT: + case wxSYS_SYSTEM_FIXED_FONT: + { + return *wxNORMAL_FONT; + } + case wxSYS_ANSI_VAR_FONT: + case wxSYS_SYSTEM_FONT: + case wxSYS_DEVICE_DEFAULT_FONT: + case wxSYS_DEFAULT_GUI_FONT: + { + if (!g_systemFont) + { +#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; + } + } - return wxNullFont; + return wxNullFont; } -; int wxSystemSettings::GetSystemMetric( int index ) { - switch (index) - { - case wxSYS_SCREEN_X: - return gdk_screen_width(); - case wxSYS_SCREEN_Y: - return gdk_screen_height(); - }; - return 0; + switch (index) + { + case wxSYS_SCREEN_X: return gdk_screen_width(); + case wxSYS_SCREEN_Y: return gdk_screen_height(); + case wxSYS_HSCROLL_Y: return 15; + case wxSYS_VSCROLL_X: return 15; + } + + wxCHECK_MSG( index, 0, wxT("wxSystemSettings::GetSystemMetric not fully implemented") ); + + return 0; } -; -