]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/gtk/settings.cpp
apparent gcc bug workaround
[wxWidgets.git] / src / gtk / settings.cpp
... / ...
CommitLineData
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;
64wxColour *g_systemBtnFaceColour = (wxColour *) NULL;
65wxColour *g_systemBtnShadowColour = (wxColour *) NULL;
66wxColour *g_systemBtnHighlightColour = (wxColour *) NULL;
67wxColour *g_systemHighlightColour = (wxColour *) NULL;
68wxColour *g_systemHighlightTextColour = (wxColour *) NULL;
69wxColour *g_systemListBoxColour = (wxColour *) NULL;
70
71wxFont *g_systemFont = (wxFont *) NULL;
72
73void 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
85wxColour 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
219wxFont 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
271int 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}