#include "wx/settings.h"
#include "wx/debug.h"
-
+#include "wx/module.h"
#include "wx/cmndata.h"
+#include "wx/fontutil.h"
#include <gdk/gdk.h>
#include <gdk/gdkprivate.h>
#include <gtk/gtk.h>
-extern GdkFont *GtkGetDefaultGuiFont();
-
-
-/*
-#define wxSYS_COLOUR_SCROLLBAR 0
-#define wxSYS_COLOUR_BACKGROUND 1
-#define wxSYS_COLOUR_ACTIVECAPTION 2
-#define wxSYS_COLOUR_INACTIVECAPTION 3
-#define wxSYS_COLOUR_MENU 4
-#define wxSYS_COLOUR_WINDOW 5
-#define wxSYS_COLOUR_WINDOWFRAME 6
-#define wxSYS_COLOUR_MENUTEXT 7
-#define wxSYS_COLOUR_WINDOWTEXT 8
-#define wxSYS_COLOUR_CAPTIONTEXT 9
-#define wxSYS_COLOUR_ACTIVEBORDER 10
-#define wxSYS_COLOUR_INACTIVEBORDER 11
-#define wxSYS_COLOUR_APPWORKSPACE 12
-#define wxSYS_COLOUR_HIGHLIGHT 13
-#define wxSYS_COLOUR_HIGHLIGHTTEXT 14
-#define wxSYS_COLOUR_BTNFACE 15
-#define wxSYS_COLOUR_BTNSHADOW 16
-#define wxSYS_COLOUR_GRAYTEXT 17
-#define wxSYS_COLOUR_BTNTEXT 18
-#define wxSYS_COLOUR_INACTIVECAPTIONTEXT 19
-#define wxSYS_COLOUR_BTNHIGHLIGHT 20
-
-#define wxSYS_COLOUR_3DDKSHADOW 21
-#define wxSYS_COLOUR_3DLIGHT 22
-#define wxSYS_COLOUR_INFOTEXT 23
-#define wxSYS_COLOUR_INFOBK 24
-
-#define wxSYS_COLOUR_DESKTOP wxSYS_COLOUR_BACKGROUND
-#define wxSYS_COLOUR_3DFACE wxSYS_COLOUR_BTNFACE
-#define wxSYS_COLOUR_3DSHADOW wxSYS_COLOUR_BTNSHADOW
-#define wxSYS_COLOUR_3DHIGHLIGHT wxSYS_COLOUR_BTNHIGHLIGHT
-#define wxSYS_COLOUR_3DHILIGHT wxSYS_COLOUR_BTNHIGHLIGHT
-#define wxSYS_COLOUR_BTNHILIGHT wxSYS_COLOUR_BTNHIGHLIGHT
-*/
-
#define SHIFT (8*(sizeof(short int)-sizeof(char)))
//wxColour *g_systemWinColour = (wxColour *) NULL;
wxFont *g_systemFont = (wxFont *) NULL;
-void wxSystemSettings::Done()
+// ----------------------------------------------------------------------------
+// wxSystemSettingsModule
+// ----------------------------------------------------------------------------
+
+class wxSystemSettingsModule : public wxModule
{
-// 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;
-}
+public:
+ bool OnInit() { return TRUE; }
+ void OnExit()
+ {
+ //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;
+ }
+ DECLARE_DYNAMIC_CLASS(wxSystemSettingsModule)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxSystemSettingsModule, wxModule)
+
+// ----------------------------------------------------------------------------
+// wxSystemSettings implementation
+// ----------------------------------------------------------------------------
// kind of widget to use in GetColourFromGTKWidget
enum wxGtkWidgetType
wxGTK_BASE
};
-// wxSystemSettings::GetSystemColour() helper: get the colours from a GTK+
+// wxSystemSettings::GetColour() helper: get the colours from a GTK+
// widget style, return true if we did get them, false to use defaults
static bool GetColourFromGTKWidget(int& red, int& green, int& blue,
wxGtkWidgetType type = wxGTK_BUTTON,
return ok;
}
-wxColour wxSystemSettings::GetSystemColour( int index )
+wxColour wxSystemSettingsNative::GetColour( wxSystemColour index )
{
switch (index)
{
case wxSYS_COLOUR_ACTIVEBORDER:
case wxSYS_COLOUR_INACTIVEBORDER:
case wxSYS_COLOUR_BTNFACE:
+ case wxSYS_COLOUR_MENUBAR:
case wxSYS_COLOUR_3DLIGHT:
if (!g_systemBtnFaceColour)
{
//case wxSYS_COLOUR_3DSHADOW:
if (!g_systemBtnShadowColour)
{
- wxColour faceColour(GetSystemColour(wxSYS_COLOUR_3DFACE));
+ wxColour faceColour(GetColour(wxSYS_COLOUR_3DFACE));
g_systemBtnShadowColour =
new wxColour((unsigned char) (faceColour.Red() * 0.666),
(unsigned char) (faceColour.Green() * 0.666),
}
return *g_systemBtnTextColour;
+ // 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);
+
case wxSYS_COLOUR_HIGHLIGHTTEXT:
if (!g_systemHighlightTextColour)
{
- wxColour hclr = GetSystemColour(wxSYS_COLOUR_HIGHLIGHT);
+ wxColour hclr = GetColour(wxSYS_COLOUR_HIGHLIGHT);
if (hclr.Red() > 200 && hclr.Green() > 200 && hclr.Blue() > 200)
g_systemHighlightTextColour = new wxColour(*wxBLACK);
else
}
return *g_systemHighlightTextColour;
- case wxSYS_COLOUR_INFOBK:
case wxSYS_COLOUR_APPWORKSPACE:
return *wxWHITE; // ?
+
+ case wxSYS_COLOUR_HOTLIGHT:
+ case wxSYS_COLOUR_GRADIENTACTIVECAPTION:
+ case wxSYS_COLOUR_GRADIENTINACTIVECAPTION:
+ case wxSYS_COLOUR_MENUHILIGHT:
+ // TODO
+ return *wxBLACK;
+
+ case wxSYS_COLOUR_MAX:
+ default:
+ wxFAIL_MSG( _T("unknown system colour index") );
}
return *wxWHITE;
}
-wxFont wxSystemSettings::GetSystemFont( int index )
+wxFont wxSystemSettingsNative::GetFont( wxSystemFont index )
{
switch (index)
{
{
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 );
- }
+#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();
+ if ( def && def->font_desc )
+ {
+ wxNativeFontInfo info;
+ info.description = def->font_desc;
+ g_systemFont = new wxFont(info);
+ }
+ else
+ {
+ const gchar *font_name =
+ _gtk_rc_context_get_default_font_name(gtk_settings_get_default());
+ g_systemFont = new wxFont(wxString::FromAscii(font_name));
+ }
gtk_widget_destroy( widget );
-#endif
-
+#else
g_systemFont = new wxFont( 12, wxSWISS, wxNORMAL, wxNORMAL );
-
+#endif
}
return *g_systemFont;
}
- }
- return wxNullFont;
+ default:
+ return wxNullFont;
+ }
}
-int wxSystemSettings::GetSystemMetric( int index )
+int wxSystemSettingsNative::GetMetric( wxSystemMetric index )
{
switch (index)
{
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") );
+ // VZ: is there any way to get the cursor size with GDK?
+ case wxSYS_CURSOR_X: return 16;
+ case wxSYS_CURSOR_Y: return 16;
+ // 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 0;
+bool wxSystemSettingsNative::HasFeature(wxSystemFeature index)
+{
+ switch (index)
+ {
+ case wxSYS_CAN_ICONIZE_FRAME:
+ return FALSE;
+ break;
+ case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
+ return TRUE;
+ break;
+ default:
+ return FALSE;
+ }
}