1/////////////////////////////////////////////////////////////////////////////
2// Name:        src/mac/carbon/settings.cpp
3// Purpose:     wxSettings
4// Author:      Stefan Csomor
5// Modified by:
6// Created:     1998-01-01
7// RCS-ID:      $Id: settings.cpp 67017 2011-02-25 09:37:28Z JS $
8// Copyright:   (c) Stefan Csomor
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#include "wx/wxprec.h"
13
14#include "wx/settings.h"
15
16#ifndef WX_PRECOMP
17    #include "wx/utils.h"
18    #include "wx/gdicmn.h"
19#endif
20
21#include "wx/mac/uma.h"
22
23// ----------------------------------------------------------------------------
24// wxSystemSettingsNative
25// ----------------------------------------------------------------------------
26
27// ----------------------------------------------------------------------------
28// colours
29// ----------------------------------------------------------------------------
30
31wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
32{
33    int major, minor;
34    wxColour resultColor;
35    RGBColor macRGB;
36    ThemeBrush colorBrushID;
37
38    wxGetOsVersion( &major, &minor );
39
40    switch ( index )
41    {
42        case wxSYS_COLOUR_WINDOW:
43            resultColor = *wxWHITE ;
44            break ;
45        case wxSYS_COLOUR_SCROLLBAR :
46        case wxSYS_COLOUR_BACKGROUND:
47        case wxSYS_COLOUR_ACTIVECAPTION:
48        case wxSYS_COLOUR_INACTIVECAPTION:
49        case wxSYS_COLOUR_MENU:
50        case wxSYS_COLOUR_WINDOWFRAME:
51        case wxSYS_COLOUR_ACTIVEBORDER:
52        case wxSYS_COLOUR_INACTIVEBORDER:
53        case wxSYS_COLOUR_BTNFACE:
54        case wxSYS_COLOUR_MENUBAR:
55            resultColor = wxColor( 0xDD, 0xDD, 0xDD );
56            break ;
57
58        case wxSYS_COLOUR_LISTBOX :
59            if (major >= 10)
60                resultColor = *wxWHITE ;
61            else
62                resultColor = wxColor( 0xEE, 0xEE, 0xEE );
63            break ;
64
65        case wxSYS_COLOUR_BTNSHADOW:
66            if (major >= 10)
67                resultColor = wxColor( 0xBE, 0xBE, 0xBE );
68            else
69                resultColor = wxColor( 0x44, 0x44, 0x44 );
70            break ;
71
72        case wxSYS_COLOUR_BTNTEXT:
73        case wxSYS_COLOUR_MENUTEXT:
74        case wxSYS_COLOUR_WINDOWTEXT:
75        case wxSYS_COLOUR_CAPTIONTEXT:
76        case wxSYS_COLOUR_INFOTEXT:
77        case wxSYS_COLOUR_INACTIVECAPTIONTEXT:
78        case wxSYS_COLOUR_LISTBOXTEXT:
79            resultColor = *wxBLACK;
80            break ;
81
82        case wxSYS_COLOUR_HIGHLIGHT:
83
84#if 0 && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3)
85            // NB: enable this case as desired
86            colorBrushID = kThemeBrushAlternatePrimaryHighlightColor;
87#else
88            colorBrushID = kThemeBrushPrimaryHighlightColor;
89#endif
90
91            GetThemeBrushAsColor( colorBrushID, 32, true, &macRGB );
92            resultColor = wxColor( macRGB.red >> 8, macRGB.green >> 8, macRGB.blue >> 8 );
93            break ;
94
95        case wxSYS_COLOUR_BTNHIGHLIGHT:
96        case wxSYS_COLOUR_GRAYTEXT:
97            resultColor = wxColor( 0xCC, 0xCC, 0xCC );
98            break ;
99
100        case wxSYS_COLOUR_3DDKSHADOW:
101            resultColor = wxColor( 0x44, 0x44, 0x44 );
102            break ;
103
104        case wxSYS_COLOUR_3DLIGHT:
105            resultColor = wxColor( 0xCC, 0xCC, 0xCC );
106            break ;
107
108        case wxSYS_COLOUR_HIGHLIGHTTEXT :
109        case wxSYS_COLOUR_LISTBOXHIGHLIGHTTEXT :
110#if 0 && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3)
111            // NB: enable this case as desired
112            resultColor = *wxWHITE ;
113#else
114            GetThemeBrushAsColor( kThemeBrushPrimaryHighlightColor, 32, true, &macRGB );
115            if ((macRGB.red + macRGB.green + macRGB.blue) == 0)
116                resultColor = *wxWHITE ;
117            else
118                resultColor = *wxBLACK ;
119#endif
120            break ;
121
122        case wxSYS_COLOUR_INFOBK :
123            // we don't have a way to detect tooltip color, so use the
124            // standard value used at least on 10.4:
125            resultColor = wxColour( 0xFF, 0xFF, 0xD3 ) ;
126            break ;
127        case wxSYS_COLOUR_APPWORKSPACE:
128            resultColor =  wxColor( 0x80, 0x80, 0x80 ); ;
129            break ;
130
131        case wxSYS_COLOUR_HOTLIGHT:
132        case wxSYS_COLOUR_GRADIENTACTIVECAPTION:
133        case wxSYS_COLOUR_GRADIENTINACTIVECAPTION:
134        case wxSYS_COLOUR_MENUHILIGHT:
135            // TODO:
136            resultColor = *wxBLACK;
137            break ;
138
139        // case wxSYS_COLOUR_MAX:
140        default:
141            resultColor = *wxWHITE;
142            // wxCHECK_MSG( index >= wxSYS_COLOUR_MAX, false, _T("unknown system colour index") );
143            break ;
144    }
145
146    return resultColor;
147}
148
149// ----------------------------------------------------------------------------
150// fonts
151// ----------------------------------------------------------------------------
152
153wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
154{
155    switch (index)
156    {
157        case wxSYS_ANSI_VAR_FONT :
158        case wxSYS_SYSTEM_FONT :
159        case wxSYS_DEVICE_DEFAULT_FONT :
160        case wxSYS_DEFAULT_GUI_FONT :
161            return *wxSMALL_FONT ;
162            break ;
163
164        default :
165            break ;
166    }
167
168    return *wxNORMAL_FONT;
169}
170
171// ----------------------------------------------------------------------------
172// system metrics/features
173// ----------------------------------------------------------------------------
174
175// Get a system metric, e.g. scrollbar size
176int wxSystemSettingsNative::GetMetric(wxSystemMetric index, wxWindow* WXUNUSED(win))
177{
178    int value;
179
180    switch ( index )
181    {
182        case wxSYS_MOUSE_BUTTONS:
183            // we emulate a two button mouse (ctrl + click = right button)
184            return 2;
185
186        // TODO case wxSYS_BORDER_X:
187        // TODO case wxSYS_BORDER_Y:
188        // TODO case wxSYS_CURSOR_X:
189        // TODO case wxSYS_CURSOR_Y:
190        // TODO case wxSYS_DCLICK_X:
191        // TODO case wxSYS_DCLICK_Y:
192        // TODO case wxSYS_DRAG_X:
193        // TODO case wxSYS_DRAG_Y:
194        // TODO case wxSYS_EDGE_X:
195        // TODO case wxSYS_EDGE_Y:
196
197        case wxSYS_HSCROLL_ARROW_X:
198        case wxSYS_HSCROLL_ARROW_Y:
199        case wxSYS_HTHUMB_X:
200            return 16;
201
202        // TODO case wxSYS_ICON_X:
203        // TODO case wxSYS_ICON_Y:
204        // TODO case wxSYS_ICONSPACING_X:
205        // TODO case wxSYS_ICONSPACING_Y:
206        // TODO case wxSYS_WINDOWMIN_X:
207        // TODO case wxSYS_WINDOWMIN_Y:
208
209        case wxSYS_SCREEN_X:
210            wxDisplaySize( &value, NULL );
211            return value;
212
213        case wxSYS_SCREEN_Y:
214            wxDisplaySize( NULL, &value );
215            return value;
216
217        // TODO case wxSYS_FRAMESIZE_X:
218        // TODO case wxSYS_FRAMESIZE_Y:
219        // TODO case wxSYS_SMALLICON_X:
220        // TODO case wxSYS_SMALLICON_Y:
221
222        case wxSYS_HSCROLL_Y:
223        case wxSYS_VSCROLL_X:
224        case wxSYS_VSCROLL_ARROW_X:
225        case wxSYS_VSCROLL_ARROW_Y:
226        case wxSYS_VTHUMB_Y:
227            return 16;
228
229        case wxSYS_PENWINDOWS_PRESENT:
230            return 0;
231
232        case wxSYS_SWAP_BUTTONS:
233            return 0;
234
235        // TODO: case wxSYS_CAPTION_Y:
236        // TODO: case wxSYS_MENU_Y:
237        // TODO: case wxSYS_NETWORK_PRESENT:
238        // TODO: case wxSYS_SHOW_SOUNDS:
239
240        default:
241            // unsupported metric
242            break;
243    }
244
245    return -1;
246}
247
248bool wxSystemSettingsNative::HasFeature(wxSystemFeature index)
249{
250    switch (index)
251    {
252        case wxSYS_CAN_ICONIZE_FRAME:
253        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
254            return true;
255
256        default:
257            return false;
258    }
259}
260