Highly experimental, unstable code (for determining the
[wxWidgets.git] / src / gtk1 / settings.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: settings.cpp
3 // Purpose:
4 // Author: Robert Roebling
5 // Id: $Id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10
11 #ifdef __GNUG__
12 #pragma implementation "settings.h"
13 #endif
14
15 #include "wx/settings.h"
16 #include "wx/debug.h"
17
18 #include "wx/cmndata.h"
19
20 #include <gdk/gdk.h>
21 #include <gdk/gdkprivate.h>
22 #include <gtk/gtk.h>
23
24
25 /*
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
47
48 #define wxSYS_COLOUR_3DDKSHADOW 21
49 #define wxSYS_COLOUR_3DLIGHT 22
50 #define wxSYS_COLOUR_INFOTEXT 23
51 #define wxSYS_COLOUR_INFOBK 24
52
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
59 */
60
61 #define SHIFT (8*(sizeof(short int)-sizeof(char)))
62
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;
70
71 wxFont *g_systemFont = (wxFont *) NULL;
72
73 void wxSystemSettings::Done()
74 {
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;
82 delete g_systemFont;
83 }
84
85 wxColour wxSystemSettings::GetSystemColour( int index )
86 {
87 switch (index)
88 {
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:
98 {
99 if (!g_systemBtnFaceColour)
100 {
101 g_systemBtnFaceColour =
102 new wxColour( 0xd6d6 >> SHIFT,
103 0xd6d6 >> SHIFT,
104 0xd6d6 >> SHIFT );
105 }
106 return *g_systemBtnFaceColour;
107 }
108 case wxSYS_COLOUR_WINDOW:
109 {
110 return *wxWHITE;
111 }
112 case wxSYS_COLOUR_GRAYTEXT:
113 case wxSYS_COLOUR_BTNSHADOW:
114 {
115 if (!g_systemBtnShadowColour)
116 {
117 g_systemBtnShadowColour =
118 new wxColour( 0x7530 >> SHIFT,
119 0x7530 >> SHIFT,
120 0x7530 >> SHIFT );
121 }
122 return *g_systemBtnShadowColour;
123 }
124 case wxSYS_COLOUR_BTNHIGHLIGHT:
125 {
126 if (!g_systemBtnHighlightColour)
127 {
128 g_systemBtnHighlightColour =
129 new wxColour( 0xea60 >> SHIFT,
130 0xea60 >> SHIFT,
131 0xea60 >> SHIFT );
132 }
133 return *g_systemBtnHighlightColour;
134 }
135 case wxSYS_COLOUR_HIGHLIGHT:
136 {
137 if (!g_systemHighlightColour)
138 {
139 GtkWidget *widget = gtk_button_new();
140 GtkStyle *def = gtk_rc_get_style( widget );
141 if (!def)
142 def = gtk_widget_get_default_style();
143 if (def)
144 {
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,
150 green >> SHIFT,
151 blue >> SHIFT );
152 }
153 else
154 {
155 g_systemHighlightColour =
156 new wxColour( 0 >> SHIFT,
157 0 >> SHIFT,
158 0x9c40 >> SHIFT );
159 }
160 gtk_widget_destroy( widget );
161
162 }
163 return *g_systemHighlightColour;
164 }
165 case wxSYS_COLOUR_LISTBOX:
166 {
167 if (!g_systemListBoxColour)
168 {
169 GtkWidget *widget = gtk_list_new();
170 GtkStyle *def = gtk_rc_get_style( widget );
171 if (!def)
172 def = gtk_widget_get_default_style();
173 if (def)
174 {
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,
180 green >> SHIFT,
181 blue >> SHIFT );
182 }
183 else
184 g_systemListBoxColour = new wxColour(*wxWHITE);
185 gtk_widget_destroy( widget );
186 }
187 return *g_systemListBoxColour;
188 }
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:
195 {
196 return *wxBLACK;
197 }
198 case wxSYS_COLOUR_HIGHLIGHTTEXT:
199 {
200 if (!g_systemHighlightTextColour)
201 {
202 wxColour hclr = GetSystemColour(wxSYS_COLOUR_HIGHLIGHT);
203 if (hclr.Red() > 200 && hclr.Green() > 200 && hclr.Blue() > 200)
204 g_systemHighlightTextColour = new wxColour(*wxBLACK);
205 else
206 g_systemHighlightTextColour = new wxColour(*wxWHITE);
207 }
208 return *g_systemHighlightTextColour;
209 }
210 case wxSYS_COLOUR_INFOBK:
211 case wxSYS_COLOUR_APPWORKSPACE:
212 {
213 return *wxWHITE; // ?
214 }
215 }
216 return *wxWHITE;
217 }
218
219 wxFont wxSystemSettings::GetSystemFont( int index )
220 {
221 switch (index)
222 {
223 case wxSYS_OEM_FIXED_FONT:
224 case wxSYS_ANSI_FIXED_FONT:
225 case wxSYS_SYSTEM_FIXED_FONT:
226 {
227 return *wxNORMAL_FONT;
228 }
229 case wxSYS_ANSI_VAR_FONT:
230 case wxSYS_SYSTEM_FONT:
231 case wxSYS_DEVICE_DEFAULT_FONT:
232 case wxSYS_DEFAULT_GUI_FONT:
233 {
234 if (!g_systemFont)
235 {
236 GdkFont *gdk_font = (GdkFont*) NULL;
237 GtkWidget *widget = gtk_button_new();
238 #if 0
239 GtkStyle *def = gtk_rc_get_style( widget );
240 if (def)
241 gdk_font = def->font;
242 else
243 {
244 def = gtk_widget_get_default_style();
245 if (def)
246 gdk_font = def->font;
247 }
248 #endif
249 if (gdk_font)
250 {
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 );
256 }
257 else
258 {
259 g_systemFont = new wxFont( 12, wxSWISS, wxNORMAL, wxNORMAL );
260 }
261
262 gtk_widget_destroy( widget );
263 }
264 return *g_systemFont;
265 }
266 }
267
268 return wxNullFont;
269 }
270
271 int wxSystemSettings::GetSystemMetric( int index )
272 {
273 switch (index)
274 {
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;
279 }
280
281 wxCHECK_MSG( index, 0, wxT("wxSystemSettings::GetSystemMetric not fully implemented") );
282
283 return 0;
284 }