X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c1ef87c33d21f834a55f106324d5a6de4b9600cb..a83ea9c15a7ac7bbdc6686164cfcbbc21ae5031a:/src/gtk1/settings.cpp?ds=sidebyside diff --git a/src/gtk1/settings.cpp b/src/gtk1/settings.cpp index ec65276d9c..44b3433b3f 100644 --- a/src/gtk1/settings.cpp +++ b/src/gtk1/settings.cpp @@ -17,7 +17,6 @@ #include "wx/settings.h" #include "wx/debug.h" -#include "wx/module.h" #include "wx/cmndata.h" #include "wx/fontutil.h" @@ -28,17 +27,11 @@ #define SHIFT (8*(sizeof(short int)-sizeof(char))) // ---------------------------------------------------------------------------- -// wxSystemSettingsModule +// wxSystemObjects // ---------------------------------------------------------------------------- -class wxSystemSettingsModule : public wxModule +struct wxSystemObjects { -public: - virtual bool OnInit() { ms_instance = this; return TRUE; } - virtual void OnExit() { ms_instance = NULL; } - - static wxSystemSettingsModule *ms_instance; - wxColour m_colBtnFace, m_colBtnShadow, m_colBtnHighlight, @@ -48,14 +41,9 @@ public: m_colBtnText; wxFont m_fontSystem; - -private: - DECLARE_DYNAMIC_CLASS(wxSystemSettingsModule) }; -IMPLEMENT_DYNAMIC_CLASS(wxSystemSettingsModule, wxModule) - -wxSystemSettingsModule *wxSystemSettingsModule::ms_instance = NULL; +static wxSystemObjects gs_objects; // ---------------------------------------------------------------------------- // wxSystemSettings implementation @@ -156,7 +144,7 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) case wxSYS_COLOUR_BTNFACE: case wxSYS_COLOUR_MENUBAR: case wxSYS_COLOUR_3DLIGHT: - if (!wxSystemSettingsModule::ms_instance->m_colBtnFace.Ok()) + if (!gs_objects.m_colBtnFace.Ok()) { int red, green, blue; if ( !GetColourFromGTKWidget(red, green, blue) ) @@ -166,11 +154,11 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) blue = 0x9c40; } - wxSystemSettingsModule::ms_instance->m_colBtnFace = wxColour( red >> SHIFT, + gs_objects.m_colBtnFace = wxColour( red >> SHIFT, green >> SHIFT, blue >> SHIFT ); } - return wxSystemSettingsModule::ms_instance->m_colBtnFace; + return gs_objects.m_colBtnFace; case wxSYS_COLOUR_WINDOW: return *wxWHITE; @@ -181,23 +169,23 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) case wxSYS_COLOUR_GRAYTEXT: case wxSYS_COLOUR_BTNSHADOW: //case wxSYS_COLOUR_3DSHADOW: - if (!wxSystemSettingsModule::ms_instance->m_colBtnShadow.Ok()) + if (!gs_objects.m_colBtnShadow.Ok()) { wxColour faceColour(GetColour(wxSYS_COLOUR_3DFACE)); - wxSystemSettingsModule::ms_instance->m_colBtnShadow = + gs_objects.m_colBtnShadow = wxColour((unsigned char) (faceColour.Red() * 0.666), (unsigned char) (faceColour.Green() * 0.666), (unsigned char) (faceColour.Blue() * 0.666)); } - return wxSystemSettingsModule::ms_instance->m_colBtnShadow; + return gs_objects.m_colBtnShadow; case wxSYS_COLOUR_3DHIGHLIGHT: //case wxSYS_COLOUR_BTNHIGHLIGHT: return * wxWHITE; case wxSYS_COLOUR_HIGHLIGHT: - if (!wxSystemSettingsModule::ms_instance->m_colHighlight.Ok()) + if (!gs_objects.m_colHighlight.Ok()) { int red, green, blue; if ( !GetColourFromGTKWidget(red, green, blue, @@ -209,14 +197,14 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) blue = 0x9c40; } - wxSystemSettingsModule::ms_instance->m_colHighlight = wxColour( red >> SHIFT, + gs_objects.m_colHighlight = wxColour( red >> SHIFT, green >> SHIFT, blue >> SHIFT ); } - return wxSystemSettingsModule::ms_instance->m_colHighlight; + return gs_objects.m_colHighlight; case wxSYS_COLOUR_LISTBOX: - if (!wxSystemSettingsModule::ms_instance->m_colListBox.Ok()) + if (!gs_objects.m_colListBox.Ok()) { int red, green, blue; if ( GetColourFromGTKWidget(red, green, blue, @@ -224,16 +212,16 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) GTK_STATE_NORMAL, wxGTK_BASE) ) { - wxSystemSettingsModule::ms_instance->m_colListBox = wxColour( red >> SHIFT, + gs_objects.m_colListBox = wxColour( red >> SHIFT, green >> SHIFT, blue >> SHIFT ); } else { - wxSystemSettingsModule::ms_instance->m_colListBox = wxColour(*wxWHITE); + gs_objects.m_colListBox = wxColour(*wxWHITE); } } - return wxSystemSettingsModule::ms_instance->m_colListBox; + return gs_objects.m_colListBox; case wxSYS_COLOUR_MENUTEXT: case wxSYS_COLOUR_WINDOWTEXT: @@ -241,7 +229,7 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) case wxSYS_COLOUR_INACTIVECAPTIONTEXT: case wxSYS_COLOUR_BTNTEXT: case wxSYS_COLOUR_INFOTEXT: - if (!wxSystemSettingsModule::ms_instance->m_colBtnText.Ok()) + if (!gs_objects.m_colBtnText.Ok()) { int red, green, blue; if ( !GetColourFromGTKWidget(red, green, blue, @@ -254,11 +242,11 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) blue = 0; } - wxSystemSettingsModule::ms_instance->m_colBtnText = wxColour( red >> SHIFT, + gs_objects.m_colBtnText = wxColour( red >> SHIFT, green >> SHIFT, blue >> SHIFT ); } - return wxSystemSettingsModule::ms_instance->m_colBtnText; + return gs_objects.m_colBtnText; // this (as well as wxSYS_COLOUR_INFOTEXT above) is used for // tooltip windows - Robert, please change this code to use the @@ -267,15 +255,15 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) return wxColour(255, 255, 225); case wxSYS_COLOUR_HIGHLIGHTTEXT: - if (!wxSystemSettingsModule::ms_instance->m_colHighlightText.Ok()) + if (!gs_objects.m_colHighlightText.Ok()) { wxColour hclr = GetColour(wxSYS_COLOUR_HIGHLIGHT); if (hclr.Red() > 200 && hclr.Green() > 200 && hclr.Blue() > 200) - wxSystemSettingsModule::ms_instance->m_colHighlightText = wxColour(*wxBLACK); + gs_objects.m_colHighlightText = wxColour(*wxBLACK); else - wxSystemSettingsModule::ms_instance->m_colHighlightText = wxColour(*wxWHITE); + gs_objects.m_colHighlightText = wxColour(*wxWHITE); } - return wxSystemSettingsModule::ms_instance->m_colHighlightText; + return gs_objects.m_colHighlightText; case wxSYS_COLOUR_APPWORKSPACE: return *wxWHITE; // ? @@ -310,7 +298,7 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) case wxSYS_DEVICE_DEFAULT_FONT: case wxSYS_DEFAULT_GUI_FONT: { - if (!wxSystemSettingsModule::ms_instance->m_fontSystem.Ok()) + if (!gs_objects.m_fontSystem.Ok()) { #ifdef __WXGTK20__ GtkWidget *widget = gtk_button_new(); @@ -320,21 +308,30 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) if ( def && def->font_desc ) { wxNativeFontInfo info; - info.description = def->font_desc; - wxSystemSettingsModule::ms_instance->m_fontSystem = wxFont(info); + info.description = + pango_font_description_copy(def->font_desc); + gs_objects.m_fontSystem = wxFont(info); } else { - const gchar *font_name = - _gtk_rc_context_get_default_font_name(gtk_settings_get_default()); - wxSystemSettingsModule::ms_instance->m_fontSystem = wxFont(wxString::FromAscii(font_name)); + GtkSettings *settings = gtk_settings_get_default(); + gchar *font_name = NULL; + g_object_get ( settings, + "gtk-font-name", + &font_name, + NULL); + if (!font_name) + gs_objects.m_fontSystem = wxFont( 12, wxSWISS, wxNORMAL, wxNORMAL ); + else + gs_objects.m_fontSystem = wxFont(wxString::FromAscii(font_name)); + g_free (font_name); } gtk_widget_destroy( widget ); #else - wxSystemSettingsModule::ms_instance->m_fontSystem = wxFont( 12, wxSWISS, wxNORMAL, wxNORMAL ); + gs_objects.m_fontSystem = wxFont( 12, wxSWISS, wxNORMAL, wxNORMAL ); #endif } - return wxSystemSettingsModule::ms_instance->m_fontSystem; + return gs_objects.m_fontSystem; } default: @@ -351,15 +348,37 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index ) case wxSYS_HSCROLL_Y: return 15; case wxSYS_VSCROLL_X: return 15; +#if defined(__WXGTK20__) && GTK_CHECK_VERSION(2, 4, 0) + case wxSYS_DCLICK_X: + case wxSYS_DCLICK_Y: + gint dclick_distance; + g_object_get(gtk_settings_get_default(), "gtk-double-click-distance", &dclick_distance, NULL); + return dclick_distance * 2; +#endif + +#if defined(__WXGTK20__) + case wxSYS_DRAG_X: + case wxSYS_DRAG_Y: + gint drag_threshold; + g_object_get(gtk_settings_get_default(), "gtk-dnd-drag-threshold", &drag_threshold, NULL); + return drag_threshold * 2; +#endif + // VZ: is there any way to get the cursor size with GDK? + // Mart Raudsepp: Yes, there is a way to get the default cursor size for a display ever since GDK 2.4 +#if defined(__WXGTK20__) && GTK_CHECK_VERSION(2, 4, 0) + case wxSYS_CURSOR_X: + case wxSYS_CURSOR_Y: + return gdk_display_get_default_cursor_size(gdk_display_get_default()); +#else case wxSYS_CURSOR_X: return 16; case wxSYS_CURSOR_Y: return 16; +#endif // MBN: ditto for icons case wxSYS_ICON_X: return 32; case wxSYS_ICON_Y: return 32; default: - wxFAIL_MSG( wxT("wxSystemSettings::GetMetric not fully implemented") ); - return 0; + return -1; // metric is unknown } }