1 /////////////////////////////////////////////////////////////////////////////
4 // Author: Robert Roebling
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
12 #pragma implementation "settings.h"
15 #include "wx/settings.h"
18 #include "wx/cmndata.h"
21 #include <gdk/gdkprivate.h>
26 #define wxSYS_COLOUR_SCROLLBAR 0
27 #define wxSYS_COLOUR_BACKGROUND 1
28 #define wxSYS_COLOUR_ACTIVECAPTION 2
29 #define wxSYS_COLOUR_INACTIVECAPTION 3
30 #define wxSYS_COLOUR_MENU 4
31 #define wxSYS_COLOUR_WINDOW 5
32 #define wxSYS_COLOUR_WINDOWFRAME 6
33 #define wxSYS_COLOUR_MENUTEXT 7
34 #define wxSYS_COLOUR_WINDOWTEXT 8
35 #define wxSYS_COLOUR_CAPTIONTEXT 9
36 #define wxSYS_COLOUR_ACTIVEBORDER 10
37 #define wxSYS_COLOUR_INACTIVEBORDER 11
38 #define wxSYS_COLOUR_APPWORKSPACE 12
39 #define wxSYS_COLOUR_HIGHLIGHT 13
40 #define wxSYS_COLOUR_HIGHLIGHTTEXT 14
41 #define wxSYS_COLOUR_BTNFACE 15
42 #define wxSYS_COLOUR_BTNSHADOW 16
43 #define wxSYS_COLOUR_GRAYTEXT 17
44 #define wxSYS_COLOUR_BTNTEXT 18
45 #define wxSYS_COLOUR_INACTIVECAPTIONTEXT 19
46 #define wxSYS_COLOUR_BTNHIGHLIGHT 20
48 #define wxSYS_COLOUR_3DDKSHADOW 21
49 #define wxSYS_COLOUR_3DLIGHT 22
50 #define wxSYS_COLOUR_INFOTEXT 23
51 #define wxSYS_COLOUR_INFOBK 24
53 #define wxSYS_COLOUR_DESKTOP wxSYS_COLOUR_BACKGROUND
54 #define wxSYS_COLOUR_3DFACE wxSYS_COLOUR_BTNFACE
55 #define wxSYS_COLOUR_3DSHADOW wxSYS_COLOUR_BTNSHADOW
56 #define wxSYS_COLOUR_3DHIGHLIGHT wxSYS_COLOUR_BTNHIGHLIGHT
57 #define wxSYS_COLOUR_3DHILIGHT wxSYS_COLOUR_BTNHIGHLIGHT
58 #define wxSYS_COLOUR_BTNHILIGHT wxSYS_COLOUR_BTNHIGHLIGHT
61 #define SHIFT (8*(sizeof(short int)-sizeof(char)))
63 //wxColour *g_systemWinColour = (wxColour *) NULL;
64 wxColour
*g_systemBtnFaceColour
= (wxColour
*) NULL
;
65 wxColour
*g_systemBtnShadowColour
= (wxColour
*) NULL
;
66 wxColour
*g_systemBtnHighlightColour
= (wxColour
*) NULL
;
67 wxColour
*g_systemHighlightColour
= (wxColour
*) NULL
;
68 wxColour
*g_systemHighlightTextColour
= (wxColour
*) NULL
;
69 wxColour
*g_systemListBoxColour
= (wxColour
*) NULL
;
71 wxFont
*g_systemFont
= (wxFont
*) NULL
;
73 void wxSystemSettings::Done()
75 // delete g_systemWinColour;
76 delete g_systemBtnFaceColour
;
77 delete g_systemBtnShadowColour
;
78 delete g_systemBtnHighlightColour
;
79 delete g_systemHighlightColour
;
80 delete g_systemHighlightTextColour
;
81 delete g_systemListBoxColour
;
85 wxColour
wxSystemSettings::GetSystemColour( int index
)
89 case wxSYS_COLOUR_SCROLLBAR
:
90 case wxSYS_COLOUR_BACKGROUND
:
91 case wxSYS_COLOUR_ACTIVECAPTION
:
92 case wxSYS_COLOUR_INACTIVECAPTION
:
93 case wxSYS_COLOUR_MENU
:
94 case wxSYS_COLOUR_WINDOWFRAME
:
95 case wxSYS_COLOUR_ACTIVEBORDER
:
96 case wxSYS_COLOUR_INACTIVEBORDER
:
97 case wxSYS_COLOUR_BTNFACE
:
99 if (!g_systemBtnFaceColour
)
101 g_systemBtnFaceColour
=
102 new wxColour( 0xd6d6 >> SHIFT
,
106 return *g_systemBtnFaceColour
;
108 case wxSYS_COLOUR_WINDOW
:
112 case wxSYS_COLOUR_GRAYTEXT
:
113 case wxSYS_COLOUR_BTNSHADOW
:
115 if (!g_systemBtnShadowColour
)
117 g_systemBtnShadowColour
=
118 new wxColour( 0x7530 >> SHIFT
,
122 return *g_systemBtnShadowColour
;
124 case wxSYS_COLOUR_BTNHIGHLIGHT
:
126 if (!g_systemBtnHighlightColour
)
128 g_systemBtnHighlightColour
=
129 new wxColour( 0xea60 >> SHIFT
,
133 return *g_systemBtnHighlightColour
;
135 case wxSYS_COLOUR_HIGHLIGHT
:
137 if (!g_systemHighlightColour
)
139 GtkWidget
*widget
= gtk_button_new();
140 GtkStyle
*def
= gtk_rc_get_style( widget
);
142 def
= gtk_widget_get_default_style();
145 int red
= def
->bg
[GTK_STATE_SELECTED
].red
;
146 int green
= def
->bg
[GTK_STATE_SELECTED
].green
;
147 int blue
= def
->bg
[GTK_STATE_SELECTED
].blue
;
148 g_systemHighlightColour
=
149 new wxColour( red
>> SHIFT
,
155 g_systemHighlightColour
=
156 new wxColour( 0 >> SHIFT
,
160 gtk_widget_destroy( widget
);
163 return *g_systemHighlightColour
;
165 case wxSYS_COLOUR_LISTBOX
:
167 if (!g_systemListBoxColour
)
169 GtkWidget
*widget
= gtk_list_new();
170 GtkStyle
*def
= gtk_rc_get_style( widget
);
172 def
= gtk_widget_get_default_style();
175 int red
= def
->base
[GTK_STATE_NORMAL
].red
;
176 int green
= def
->base
[GTK_STATE_NORMAL
].green
;
177 int blue
= def
->base
[GTK_STATE_NORMAL
].blue
;
178 g_systemListBoxColour
=
179 new wxColour( red
>> SHIFT
,
184 g_systemListBoxColour
= new wxColour(*wxWHITE
);
185 gtk_widget_destroy( widget
);
187 return *g_systemListBoxColour
;
189 case wxSYS_COLOUR_MENUTEXT
:
190 case wxSYS_COLOUR_WINDOWTEXT
:
191 case wxSYS_COLOUR_CAPTIONTEXT
:
192 case wxSYS_COLOUR_INACTIVECAPTIONTEXT
:
193 case wxSYS_COLOUR_BTNTEXT
:
194 case wxSYS_COLOUR_INFOTEXT
:
198 case wxSYS_COLOUR_HIGHLIGHTTEXT
:
200 if (!g_systemHighlightTextColour
)
202 wxColour hclr
= GetSystemColour(wxSYS_COLOUR_HIGHLIGHT
);
203 if (hclr
.Red() > 200 && hclr
.Green() > 200 && hclr
.Blue() > 200)
204 g_systemHighlightTextColour
= new wxColour(*wxBLACK
);
206 g_systemHighlightTextColour
= new wxColour(*wxWHITE
);
208 return *g_systemHighlightTextColour
;
210 case wxSYS_COLOUR_INFOBK
:
211 case wxSYS_COLOUR_APPWORKSPACE
:
213 return *wxWHITE
; // ?
219 wxFont
wxSystemSettings::GetSystemFont( int index
)
223 case wxSYS_OEM_FIXED_FONT
:
224 case wxSYS_ANSI_FIXED_FONT
:
225 case wxSYS_SYSTEM_FIXED_FONT
:
227 return *wxNORMAL_FONT
;
229 case wxSYS_ANSI_VAR_FONT
:
230 case wxSYS_SYSTEM_FONT
:
231 case wxSYS_DEVICE_DEFAULT_FONT
:
232 case wxSYS_DEFAULT_GUI_FONT
:
236 GdkFont
*gdk_font
= (GdkFont
*) NULL
;
237 GtkWidget
*widget
= gtk_button_new();
239 GtkStyle
*def
= gtk_rc_get_style( widget
);
241 gdk_font
= def
->font
;
244 def
= gtk_widget_get_default_style();
246 gdk_font
= def
->font
;
251 GSList
*font_list
= ((GdkFontPrivate
*)gdk_font
)->names
;
252 char *name
= (char*)font_list
->data
;
253 wxString
font_string( name
);
254 wxFontData font_data
;
255 g_systemFont
= new wxFont( font_string
, font_data
);
259 g_systemFont
= new wxFont( 12, wxSWISS
, wxNORMAL
, wxNORMAL
);
262 gtk_widget_destroy( widget
);
264 return *g_systemFont
;
271 int wxSystemSettings::GetSystemMetric( int index
)
275 case wxSYS_SCREEN_X
: return gdk_screen_width();
276 case wxSYS_SCREEN_Y
: return gdk_screen_height();
277 case wxSYS_HSCROLL_Y
: return 15;
278 case wxSYS_VSCROLL_X
: return 15;
281 wxCHECK_MSG( index
, 0, wxT("wxSystemSettings::GetSystemMetric not fully implemented") );