X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0d0b57acec6b28eb5246ef467dfde2432a016e09..4776c0b783a9776f94b049aecdc253d379686b6b:/src/gtk/settings.cpp diff --git a/src/gtk/settings.cpp b/src/gtk/settings.cpp index 26951dcfd9..35f0649a37 100644 --- a/src/gtk/settings.cpp +++ b/src/gtk/settings.cpp @@ -19,8 +19,10 @@ #endif #include "wx/fontutil.h" +#include "wx/fontenum.h" #include +#include "wx/gtk/private/win_gtk.h" bool wxGetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* bottom); @@ -184,6 +186,10 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) color = wxColor(ListStyle()->base[GTK_STATE_NORMAL]); break; + case wxSYS_COLOUR_LISTBOXTEXT: + color = wxColor(ListStyle()->text[GTK_STATE_NORMAL]); + break; + case wxSYS_COLOUR_MENUTEXT: case wxSYS_COLOUR_WINDOWTEXT: case wxSYS_COLOUR_CAPTIONTEXT: @@ -222,11 +228,12 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index ) case wxSYS_COLOUR_MAX: default: - wxFAIL_MSG( _T("unknown system colour index") ); + wxFAIL_MSG( wxT("unknown system colour index") ); color = *wxWHITE; break; } + wxASSERT(color.IsOk()); return color; } @@ -250,6 +257,15 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) wxNativeFontInfo info; info.description = ButtonStyle()->font_desc; gs_fontSystem = wxFont(info); + +#if wxUSE_FONTENUM + // (try to) heal the default font (on some common systems e.g. Ubuntu + // it's "Sans Serif" but the real font is called "Sans"): + if (!wxFontEnumerator::IsValidFacename(gs_fontSystem.GetFaceName()) && + gs_fontSystem.GetFaceName() == "Sans Serif") + gs_fontSystem.SetFaceName("Sans"); +#endif // wxUSE_FONTENUM + info.description = NULL; } font = gs_fontSystem; @@ -258,6 +274,9 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index ) default: break; } + + wxASSERT( font.IsOk() ); + return font; } @@ -269,6 +288,26 @@ static GtkSettings *GetSettingsForWindowScreen(GdkWindow *window) : gtk_settings_get_default(); } +static int GetBorderWidth(wxSystemMetric index, wxWindow* win) +{ + if (win->m_wxwindow) + { + wxPizza* pizza = WX_PIZZA(win->m_wxwindow); + int x, y; + pizza->get_border_widths(x, y); + switch (index) + { + case wxSYS_BORDER_X: + case wxSYS_EDGE_X: + case wxSYS_FRAMESIZE_X: + return x; + default: + return y; + } + } + return -1; +} + int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) { GdkWindow *window = NULL; @@ -283,14 +322,12 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win ) case wxSYS_EDGE_Y: case wxSYS_FRAMESIZE_X: case wxSYS_FRAMESIZE_Y: - // If a window is specified/realized, and it is a toplevel window, we can query from wm. - // The returned border thickness is outside the client area in that case. - if (window) + if (win) { wxTopLevelWindow *tlw = wxDynamicCast(win, wxTopLevelWindow); if (!tlw) - return -1; // not a tlw, not sure how to approach - else + return GetBorderWidth(index, win); + else if (window) { // Get the frame extents from the windowmanager. // In most cases the top extent is the titlebar, so we use the bottom extent