#endif
#include "wx/fontutil.h"
+#include "wx/fontenum.h"
#include <gtk/gtk.h>
+#include "wx/gtk/private/win_gtk.h"
bool wxGetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* bottom);
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:
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;
}
wxNativeFontInfo info;
info.description = ButtonStyle()->font_desc;
gs_fontSystem = wxFont(info);
+
+ // (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");
+
info.description = NULL;
}
font = gs_fontSystem;
default:
break;
}
+
+ wxASSERT(font.IsOk() && wxFontEnumerator::IsValidFacename(font.GetFaceName()));
+
return font;
}
: 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;
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