X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5ac8ce9e055c56bb0b939905fa682a324ec3d300..3e822cd8d0bdf04cd2c7a3dddff61dcc211f7439:/src/gtk/settings.cpp diff --git a/src/gtk/settings.cpp b/src/gtk/settings.cpp index bf2d3b2f20..d5391ad1e4 100644 --- a/src/gtk/settings.cpp +++ b/src/gtk/settings.cpp @@ -8,11 +8,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// - -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "settings.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -44,7 +39,9 @@ struct wxSystemObjects m_colHighlightText, m_colListBox, m_colBtnText, - m_colMenuItemHighlight; + m_colMenuItemHighlight, + m_colTooltip, + m_colTooltipText; wxFont m_fontSystem; }; @@ -91,7 +88,8 @@ static bool GetColourFromGTKWidget(int& red, int& green, int& blue, case wxGTK_LIST: widget = gtk_list_new(); - + break; + case wxGTK_MENUITEM: widget = gtk_menu_item_new(); } @@ -139,6 +137,18 @@ static bool GetColourFromGTKWidget(int& red, int& green, int& blue, return ok; } +static void GetTooltipColors() +{ + GtkTooltips* tooltips = gtk_tooltips_new(); + gtk_tooltips_force_window(tooltips); + gtk_widget_ensure_style(tooltips->tip_window); + GdkColor c = tooltips->tip_window->style->bg[GTK_STATE_NORMAL]; + gs_objects.m_colTooltip = wxColor(c.red >> SHIFT, c.green >> SHIFT, c.blue >> SHIFT); + c = tooltips->tip_window->style->fg[GTK_STATE_NORMAL]; + gs_objects.m_colTooltipText = wxColor(c.red >> SHIFT, c.green >> SHIFT, c.blue >> SHIFT); + gtk_object_sink(wx_reinterpret_cast(GtkObject*, tooltips)); +} + wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) { switch (index) @@ -237,7 +247,6 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) case wxSYS_COLOUR_CAPTIONTEXT: case wxSYS_COLOUR_INACTIVECAPTIONTEXT: case wxSYS_COLOUR_BTNTEXT: - case wxSYS_COLOUR_INFOTEXT: if (!gs_objects.m_colBtnText.Ok()) { int red, green, blue; @@ -257,11 +266,17 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) } 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 - // real GTK tooltips when/if you can (TODO) case wxSYS_COLOUR_INFOBK: - return wxColour(255, 255, 225); + if (!gs_objects.m_colTooltip.Ok()) { + GetTooltipColors(); + } + return gs_objects.m_colTooltip; + + case wxSYS_COLOUR_INFOTEXT: + if (!gs_objects.m_colTooltipText.Ok()) { + GetTooltipColors(); + } + return gs_objects.m_colTooltipText; case wxSYS_COLOUR_HIGHLIGHTTEXT: if (!gs_objects.m_colHighlightText.Ok()) @@ -307,9 +322,9 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) case wxSYS_COLOUR_MAX: default: wxFAIL_MSG( _T("unknown system colour index") ); - } + } - return *wxWHITE; + return *wxWHITE; } wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) @@ -329,24 +344,23 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) { if (!gs_objects.m_fontSystem.Ok()) { -#ifdef __WXGTK20__ GtkWidget *widget = gtk_button_new(); GtkStyle *def = gtk_rc_get_style( widget ); if ( !def || !def->font_desc ) - def = gtk_widget_get_default_style(); + def = gtk_widget_get_default_style(); if ( def && def->font_desc ) - { - wxNativeFontInfo info; - info.description = + { + wxNativeFontInfo info; + info.description = pango_font_description_copy(def->font_desc); - gs_objects.m_fontSystem = wxFont(info); - } - else - { + gs_objects.m_fontSystem = wxFont(info); + } + else + { GtkSettings *settings = gtk_settings_get_default(); gchar *font_name = NULL; g_object_get ( settings, - "gtk-font-name", + "gtk-font-name", &font_name, NULL); if (!font_name) @@ -354,11 +368,8 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) else gs_objects.m_fontSystem = wxFont(wxString::FromAscii(font_name)); g_free (font_name); - } + } gtk_widget_destroy( widget ); -#else - gs_objects.m_fontSystem = wxFont( 12, wxSWISS, wxNORMAL, wxNORMAL ); -#endif } return gs_objects.m_fontSystem; } @@ -370,18 +381,15 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) { -#ifdef __WXGTK20__ bool success = false; - + guchar *data = NULL; GdkWindow *window = NULL; if(win && GTK_WIDGET_REALIZED(win->GetHandle())) window = win->GetHandle()->window; -#endif switch (index) { -#ifdef __WXGTK20__ case wxSYS_BORDER_X: case wxSYS_BORDER_Y: case wxSYS_EDGE_X: @@ -413,15 +421,15 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) if (!gdk_net_wm_supports(gdk_atom_intern("_NET_FRAME_EXTENTS", false))) return -1; } - + // Get the frame extents from the windowmanager. // In most cases the top extent is the titlebar, so we use the bottom extent // for the heights. - + Atom type; gint format; gulong nitems; - + #if GTK_CHECK_VERSION(2,2,0) if (!gtk_check_version(2,2,0)) { @@ -469,7 +477,6 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) } return -1; // no window specified -#endif // gtk2 case wxSYS_CURSOR_X: case wxSYS_CURSOR_Y: @@ -485,7 +492,6 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) #endif return 16; -#ifdef __WXGTK20__ case wxSYS_DCLICK_X: case wxSYS_DCLICK_Y: gint dclick_distance; @@ -499,9 +505,7 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) "gtk-double-click-distance", &dclick_distance, NULL); return dclick_distance * 2; -#endif // gtk2 -#ifdef __WXGTK20__ case wxSYS_DRAG_X: case wxSYS_DRAG_Y: gint drag_threshold; @@ -521,7 +525,6 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) } return drag_threshold * 2; -#endif // MBN: ditto for icons case wxSYS_ICON_X: return 32; @@ -546,8 +549,6 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) case wxSYS_HSCROLL_Y: return 15; case wxSYS_VSCROLL_X: return 15; -// a gtk1 implementation should be possible too if gtk2 efficiency/convenience functions aren't used -#ifdef __WXGTK20__ case wxSYS_CAPTION_Y: if (!window) // No realized window specified, and no implementation for that case yet. @@ -620,7 +621,6 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) // ... return -1; -#endif // gtk2 case wxSYS_PENWINDOWS_PRESENT: // No MS Windows for Pen computing extension available in X11 based gtk+. @@ -635,12 +635,12 @@ bool wxSystemSettingsNative::HasFeature(wxSystemFeature index) { switch (index) { - case wxSYS_CAN_ICONIZE_FRAME: - return FALSE; - break; + case wxSYS_CAN_ICONIZE_FRAME: + return FALSE; + case wxSYS_CAN_DRAW_FRAME_DECORATIONS: - return TRUE; - break; + return TRUE; + default: return FALSE; }