]> git.saurik.com Git - wxWidgets.git/blob - src/gtk/settings.cpp
Added chapter on collection and container classes to contents
[wxWidgets.git] / src / gtk / 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 extern GdkFont *GtkGetDefaultGuiFont();
25
26
27 /*
28 #define wxSYS_COLOUR_SCROLLBAR 0
29 #define wxSYS_COLOUR_BACKGROUND 1
30 #define wxSYS_COLOUR_ACTIVECAPTION 2
31 #define wxSYS_COLOUR_INACTIVECAPTION 3
32 #define wxSYS_COLOUR_MENU 4
33 #define wxSYS_COLOUR_WINDOW 5
34 #define wxSYS_COLOUR_WINDOWFRAME 6
35 #define wxSYS_COLOUR_MENUTEXT 7
36 #define wxSYS_COLOUR_WINDOWTEXT 8
37 #define wxSYS_COLOUR_CAPTIONTEXT 9
38 #define wxSYS_COLOUR_ACTIVEBORDER 10
39 #define wxSYS_COLOUR_INACTIVEBORDER 11
40 #define wxSYS_COLOUR_APPWORKSPACE 12
41 #define wxSYS_COLOUR_HIGHLIGHT 13
42 #define wxSYS_COLOUR_HIGHLIGHTTEXT 14
43 #define wxSYS_COLOUR_BTNFACE 15
44 #define wxSYS_COLOUR_BTNSHADOW 16
45 #define wxSYS_COLOUR_GRAYTEXT 17
46 #define wxSYS_COLOUR_BTNTEXT 18
47 #define wxSYS_COLOUR_INACTIVECAPTIONTEXT 19
48 #define wxSYS_COLOUR_BTNHIGHLIGHT 20
49
50 #define wxSYS_COLOUR_3DDKSHADOW 21
51 #define wxSYS_COLOUR_3DLIGHT 22
52 #define wxSYS_COLOUR_INFOTEXT 23
53 #define wxSYS_COLOUR_INFOBK 24
54
55 #define wxSYS_COLOUR_DESKTOP wxSYS_COLOUR_BACKGROUND
56 #define wxSYS_COLOUR_3DFACE wxSYS_COLOUR_BTNFACE
57 #define wxSYS_COLOUR_3DSHADOW wxSYS_COLOUR_BTNSHADOW
58 #define wxSYS_COLOUR_3DHIGHLIGHT wxSYS_COLOUR_BTNHIGHLIGHT
59 #define wxSYS_COLOUR_3DHILIGHT wxSYS_COLOUR_BTNHIGHLIGHT
60 #define wxSYS_COLOUR_BTNHILIGHT wxSYS_COLOUR_BTNHIGHLIGHT
61 */
62
63 #define SHIFT (8*(sizeof(short int)-sizeof(char)))
64
65 //wxColour *g_systemWinColour = (wxColour *) NULL;
66 wxColour *g_systemBtnFaceColour = (wxColour *) NULL;
67 wxColour *g_systemBtnShadowColour = (wxColour *) NULL;
68 wxColour *g_systemBtnHighlightColour = (wxColour *) NULL;
69 wxColour *g_systemHighlightColour = (wxColour *) NULL;
70 wxColour *g_systemHighlightTextColour = (wxColour *) NULL;
71 wxColour *g_systemListBoxColour = (wxColour *) NULL;
72
73 wxFont *g_systemFont = (wxFont *) NULL;
74
75 void wxSystemSettings::Done()
76 {
77 // delete g_systemWinColour;
78 delete g_systemBtnFaceColour;
79 delete g_systemBtnShadowColour;
80 delete g_systemBtnHighlightColour;
81 delete g_systemHighlightColour;
82 delete g_systemHighlightTextColour;
83 delete g_systemListBoxColour;
84 delete g_systemFont;
85 }
86
87 wxColour wxSystemSettings::GetSystemColour( int index )
88 {
89 switch (index)
90 {
91 case wxSYS_COLOUR_SCROLLBAR:
92 case wxSYS_COLOUR_BACKGROUND:
93 case wxSYS_COLOUR_ACTIVECAPTION:
94 case wxSYS_COLOUR_INACTIVECAPTION:
95 case wxSYS_COLOUR_MENU:
96 case wxSYS_COLOUR_WINDOWFRAME:
97 case wxSYS_COLOUR_ACTIVEBORDER:
98 case wxSYS_COLOUR_INACTIVEBORDER:
99 case wxSYS_COLOUR_BTNFACE:
100 {
101 if (!g_systemBtnFaceColour)
102 {
103 g_systemBtnFaceColour =
104 new wxColour( 0xd6d6 >> SHIFT,
105 0xd6d6 >> SHIFT,
106 0xd6d6 >> SHIFT );
107 }
108 return *g_systemBtnFaceColour;
109 }
110 case wxSYS_COLOUR_WINDOW:
111 {
112 return *wxWHITE;
113 }
114 case wxSYS_COLOUR_GRAYTEXT:
115 case wxSYS_COLOUR_BTNSHADOW:
116 {
117 if (!g_systemBtnShadowColour)
118 {
119 g_systemBtnShadowColour =
120 new wxColour( 0x7530 >> SHIFT,
121 0x7530 >> SHIFT,
122 0x7530 >> SHIFT );
123 }
124 return *g_systemBtnShadowColour;
125 }
126 case wxSYS_COLOUR_BTNHIGHLIGHT:
127 {
128 if (!g_systemBtnHighlightColour)
129 {
130 g_systemBtnHighlightColour =
131 new wxColour( 0xea60 >> SHIFT,
132 0xea60 >> SHIFT,
133 0xea60 >> SHIFT );
134 }
135 return *g_systemBtnHighlightColour;
136 }
137 case wxSYS_COLOUR_HIGHLIGHT:
138 {
139 if (!g_systemHighlightColour)
140 {
141 GtkWidget *widget = gtk_button_new();
142 GtkStyle *def = gtk_rc_get_style( widget );
143 if (!def)
144 def = gtk_widget_get_default_style();
145 if (def)
146 {
147 int red = def->bg[GTK_STATE_SELECTED].red;
148 int green = def->bg[GTK_STATE_SELECTED].green;
149 int blue = def->bg[GTK_STATE_SELECTED].blue;
150 g_systemHighlightColour =
151 new wxColour( red >> SHIFT,
152 green >> SHIFT,
153 blue >> SHIFT );
154 }
155 else
156 {
157 g_systemHighlightColour =
158 new wxColour( 0 >> SHIFT,
159 0 >> SHIFT,
160 0x9c40 >> SHIFT );
161 }
162 gtk_widget_destroy( widget );
163
164 }
165 return *g_systemHighlightColour;
166 }
167 case wxSYS_COLOUR_LISTBOX:
168 {
169 if (!g_systemListBoxColour)
170 {
171 GtkWidget *widget = gtk_list_new();
172 GtkStyle *def = gtk_rc_get_style( widget );
173 if (!def)
174 def = gtk_widget_get_default_style();
175 if (def)
176 {
177 int red = def->base[GTK_STATE_NORMAL].red;
178 int green = def->base[GTK_STATE_NORMAL].green;
179 int blue = def->base[GTK_STATE_NORMAL].blue;
180 g_systemListBoxColour =
181 new wxColour( red >> SHIFT,
182 green >> SHIFT,
183 blue >> SHIFT );
184 }
185 else
186 g_systemListBoxColour = new wxColour(*wxWHITE);
187 gtk_widget_destroy( widget );
188 }
189 return *g_systemListBoxColour;
190 }
191 case wxSYS_COLOUR_MENUTEXT:
192 case wxSYS_COLOUR_WINDOWTEXT:
193 case wxSYS_COLOUR_CAPTIONTEXT:
194 case wxSYS_COLOUR_INACTIVECAPTIONTEXT:
195 case wxSYS_COLOUR_BTNTEXT:
196 case wxSYS_COLOUR_INFOTEXT:
197 {
198 return *wxBLACK;
199 }
200 case wxSYS_COLOUR_HIGHLIGHTTEXT:
201 {
202 if (!g_systemHighlightTextColour)
203 {
204 wxColour hclr = GetSystemColour(wxSYS_COLOUR_HIGHLIGHT);
205 if (hclr.Red() > 200 && hclr.Green() > 200 && hclr.Blue() > 200)
206 g_systemHighlightTextColour = new wxColour(*wxBLACK);
207 else
208 g_systemHighlightTextColour = new wxColour(*wxWHITE);
209 }
210 return *g_systemHighlightTextColour;
211 }
212 case wxSYS_COLOUR_INFOBK:
213 case wxSYS_COLOUR_APPWORKSPACE:
214 {
215 return *wxWHITE; // ?
216 }
217 }
218 return *wxWHITE;
219 }
220
221 wxFont wxSystemSettings::GetSystemFont( int index )
222 {
223 switch (index)
224 {
225 case wxSYS_OEM_FIXED_FONT:
226 case wxSYS_ANSI_FIXED_FONT:
227 case wxSYS_SYSTEM_FIXED_FONT:
228 {
229 return *wxNORMAL_FONT;
230 }
231 case wxSYS_ANSI_VAR_FONT:
232 case wxSYS_SYSTEM_FONT:
233 case wxSYS_DEVICE_DEFAULT_FONT:
234 case wxSYS_DEFAULT_GUI_FONT:
235 {
236 if (!g_systemFont)
237 {
238 #if 0
239 GdkFont *gdk_font = GtkGetDefaultGuiFont();
240 if (gdk_font)
241 {
242 GSList *font_list = ((GdkFontPrivate*)gdk_font)->names;
243 char *name = (char*)font_list->data;
244 wxString font_string( name );
245 wxFontData font_data;
246 g_systemFont = new wxFont( font_string, font_data );
247 }
248 gtk_widget_destroy( widget );
249 #endif
250
251 g_systemFont = new wxFont( 12, wxSWISS, wxNORMAL, wxNORMAL );
252
253 }
254 return *g_systemFont;
255 }
256 }
257
258 return wxNullFont;
259 }
260
261 int wxSystemSettings::GetSystemMetric( int index )
262 {
263 switch (index)
264 {
265 case wxSYS_SCREEN_X: return gdk_screen_width();
266 case wxSYS_SCREEN_Y: return gdk_screen_height();
267 case wxSYS_HSCROLL_Y: return 15;
268 case wxSYS_VSCROLL_X: return 15;
269 }
270
271 wxCHECK_MSG( index, 0, wxT("wxSystemSettings::GetSystemMetric not fully implemented") );
272
273 return 0;
274 }