1/////////////////////////////////////////////////////////////////////////////
2// Name:        src/mac/classic/settings.cpp
3// Purpose:     wxSettings
4// Author:      Stefan Csomor
5// Modified by:
6// Created:     1998-01-01
7// RCS-ID:      $Id: settings.cpp 57542 2008-12-25 13:03:24Z VZ $
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    wxGetOsVersion( &major, &minor );
35
36    switch( index )
37    {
38        case wxSYS_COLOUR_SCROLLBAR :
39        case wxSYS_COLOUR_BACKGROUND:
40        case wxSYS_COLOUR_ACTIVECAPTION:
41        case wxSYS_COLOUR_INACTIVECAPTION:
42        case wxSYS_COLOUR_MENU:
43        case wxSYS_COLOUR_WINDOW:
44        case wxSYS_COLOUR_WINDOWFRAME:
45        case wxSYS_COLOUR_ACTIVEBORDER:
46        case wxSYS_COLOUR_INACTIVEBORDER:
47        case wxSYS_COLOUR_BTNFACE:
48        case wxSYS_COLOUR_MENUBAR:
49            return wxColor( 0xDD , 0xDD , 0xDD ) ;
50            break ;
51
52        case wxSYS_COLOUR_LISTBOX :
53        {
54            if (major >= 10)
55                return *wxWHITE ;
56            else
57                return wxColor( 0xEE , 0xEE , 0xEE ) ;
58            break ;
59        }
60        case wxSYS_COLOUR_BTNSHADOW:
61            if (major >= 10)
62                return wxColor( 0xBE , 0xBE , 0xBE ) ;
63            else
64                return wxColor( 0x44 , 0x44 , 0x44 ) ;
65            break ;
66
67        case wxSYS_COLOUR_BTNTEXT:
68        case wxSYS_COLOUR_MENUTEXT:
69        case wxSYS_COLOUR_WINDOWTEXT:
70        case wxSYS_COLOUR_CAPTIONTEXT:
71        case wxSYS_COLOUR_INFOTEXT:
72        case wxSYS_COLOUR_INACTIVECAPTIONTEXT:
73        case wxSYS_COLOUR_LISTBOXTEXT:
74            return *wxBLACK;
75            break ;
76        case wxSYS_COLOUR_HIGHLIGHT:
77            {
78                RGBColor hilite ;
79                LMGetHiliteRGB(&hilite) ;
80                return wxColor( hilite.red >> 8 , hilite.green >> 8  , hilite.blue >> 8  ) ;
81            }
82            break ;
83        case wxSYS_COLOUR_BTNHIGHLIGHT:
84        case wxSYS_COLOUR_GRAYTEXT:
85            return wxColor( 0xCC , 0xCC , 0xCC ) ;
86            break ;
87
88        case wxSYS_COLOUR_3DDKSHADOW:
89            return wxColor( 0x44 , 0x44 , 0x44 ) ;
90            break ;
91        case wxSYS_COLOUR_3DLIGHT:
92            return wxColor( 0xCC , 0xCC , 0xCC ) ;
93            break ;
94        case wxSYS_COLOUR_HIGHLIGHTTEXT :
95            {
96                RGBColor hilite ;
97                LMGetHiliteRGB(&hilite) ;
98                if ( ( hilite.red + hilite.green + hilite.blue ) == 0 )
99                        return *wxWHITE ;
100                else
101                        return *wxBLACK ;
102            }
103            break ;
104        case wxSYS_COLOUR_INFOBK :
105        case wxSYS_COLOUR_APPWORKSPACE:
106            return *wxWHITE ;
107            break ;
108
109        case wxSYS_COLOUR_HOTLIGHT:
110        case wxSYS_COLOUR_GRADIENTACTIVECAPTION:
111        case wxSYS_COLOUR_GRADIENTINACTIVECAPTION:
112        case wxSYS_COLOUR_MENUHILIGHT:
113            // TODO
114            return *wxBLACK;
115
116        case wxSYS_COLOUR_MAX:
117            wxFAIL_MSG( _T("unknown system colour index") );
118            break ;
119    }
120    return *wxWHITE;
121}
122
123// ----------------------------------------------------------------------------
124// fonts
125// ----------------------------------------------------------------------------
126
127wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
128{
129    switch (index)
130    {
131        case wxSYS_ANSI_VAR_FONT :
132        case wxSYS_SYSTEM_FONT :
133        case wxSYS_DEVICE_DEFAULT_FONT :
134        case wxSYS_DEFAULT_GUI_FONT :
135            {
136                return *wxSMALL_FONT ;
137                    } ;
138            break ;
139        case wxSYS_OEM_FIXED_FONT :
140        case wxSYS_ANSI_FIXED_FONT :
141        case wxSYS_SYSTEM_FIXED_FONT :
142        default :
143            {
144                return *wxNORMAL_FONT ;
145                    } ;
146            break ;
147    }
148    return *wxNORMAL_FONT;
149}
150
151// ----------------------------------------------------------------------------
152// system metrics/features
153// ----------------------------------------------------------------------------
154
155// Get a system metric, e.g. scrollbar size
156int wxSystemSettingsNative::GetMetric(wxSystemMetric index, wxWindow* WXUNUSED(win))
157{
158    int value;
159
160    switch ( index)
161    {
162        case wxSYS_MOUSE_BUTTONS:
163            // we emulate a two button mouse (ctrl + click = right button )
164            return 2;
165
166        // TODO case wxSYS_BORDER_X:
167        // TODO case wxSYS_BORDER_Y:
168        // TODO case wxSYS_CURSOR_X:
169        // TODO case wxSYS_CURSOR_Y:
170        // TODO case wxSYS_DCLICK_X:
171        // TODO case wxSYS_DCLICK_Y:
172        // TODO case wxSYS_DRAG_X:
173        // TODO case wxSYS_DRAG_Y:
174        // TODO case wxSYS_EDGE_X:
175        // TODO case wxSYS_EDGE_Y:
176
177        case wxSYS_HSCROLL_ARROW_X:
178            return 16;
179        case wxSYS_HSCROLL_ARROW_Y:
180            return 16;
181        case wxSYS_HTHUMB_X:
182            return 16;
183
184        // TODO case wxSYS_ICON_X:
185        // TODO case wxSYS_ICON_Y:
186        // TODO case wxSYS_ICONSPACING_X:
187        // TODO case wxSYS_ICONSPACING_Y:
188        // TODO case wxSYS_WINDOWMIN_X:
189        // TODO case wxSYS_WINDOWMIN_Y:
190
191        case wxSYS_SCREEN_X:
192            wxDisplaySize(&value, NULL);
193            return value;
194        case wxSYS_SCREEN_Y:
195            wxDisplaySize(NULL, &value);
196            return value;
197
198        // TODO case wxSYS_FRAMESIZE_X:
199        // TODO case wxSYS_FRAMESIZE_Y:
200        // TODO case wxSYS_SMALLICON_X:
201        // TODO case wxSYS_SMALLICON_Y:
202
203        case wxSYS_HSCROLL_Y:
204            return 16;
205        case wxSYS_VSCROLL_X:
206            return 16;
207        case wxSYS_VSCROLL_ARROW_X:
208            return 16;
209        case wxSYS_VSCROLL_ARROW_Y:
210            return 16;
211        case wxSYS_VTHUMB_Y:
212            return 16;
213
214        // TODO case wxSYS_CAPTION_Y:
215        // TODO case wxSYS_MENU_Y:
216        // TODO case wxSYS_NETWORK_PRESENT:
217
218        case wxSYS_PENWINDOWS_PRESENT:
219            return 0;
220
221        // TODO case wxSYS_SHOW_SOUNDS:
222
223        case wxSYS_SWAP_BUTTONS:
224            return 0;
225
226        default:
227            return -1;  // unsupported metric
228    }
229    return 0;
230}
231
232bool wxSystemSettingsNative::HasFeature(wxSystemFeature index)
233{
234    switch (index)
235    {
236        case wxSYS_CAN_ICONIZE_FRAME:
237        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
238            return true;
239
240        default:
241            return false;
242    }
243}
244