1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/osx/utils_osx.cpp
3 // Purpose: Various utilities
4 // Author: Stefan Csomor
7 // RCS-ID: $Id: utils.cpp 54886 2008-07-31 13:02:53Z SC $
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #include "wx/wxprec.h"
22 #include "wx/toplevel.h"
27 #include "wx/apptrait.h"
36 // #include "MoreFilesX.h"
38 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
39 #include <AudioToolbox/AudioServices.h>
42 #include "wx/osx/private.h"
43 #include "wx/osx/private/timer.h"
45 #include "wx/evtloop.h"
47 #if defined(__MWERKS__) && wxUSE_UNICODE
48 #if __MWERKS__ < 0x4100
53 // Check whether this window wants to process messages, e.g. Stop button
54 // in long calculations.
55 bool wxCheckForInterrupt(wxWindow
*WXUNUSED(wnd
))
61 // Return true if we have a colour display
62 bool wxColourDisplay()
67 #if wxOSX_USE_COCOA_OR_CARBON
68 // Returns depth of screen
71 int theDepth
= (int) CGDisplayBitsPerPixel(CGMainDisplayID());
75 // Get size of display
76 void wxDisplaySize(int *width
, int *height
)
78 // TODO adapt for multi-displays
79 CGRect bounds
= CGDisplayBounds(CGMainDisplayID());
81 *width
= (int)bounds
.size
.width
;
83 *height
= (int)bounds
.size
.height
;
88 // ----------------------------------------------------------------------------
89 // Launch document with default app
90 // ----------------------------------------------------------------------------
92 bool wxLaunchDefaultApplication(const wxString
& document
, int flags
)
96 wxCFRef
<CFMutableStringRef
> cfMutableString(CFStringCreateMutableCopy(NULL
, 0, wxCFStringRef(document
)));
97 CFStringNormalize(cfMutableString
,kCFStringNormalizationFormD
);
98 wxCFRef
<CFURLRef
> curl(CFURLCreateWithFileSystemPath(kCFAllocatorDefault
, cfMutableString
, kCFURLPOSIXPathStyle
, false));
99 OSStatus err
= LSOpenCFURLRef( curl
, NULL
);
107 wxLogDebug(wxT("Default Application Launch error %d"), (int) err
);
112 // ----------------------------------------------------------------------------
113 // Launch default browser
114 // ----------------------------------------------------------------------------
116 bool wxDoLaunchDefaultBrowser(const wxString
& url
, int flags
)
119 wxCFRef
< CFURLRef
> curl( CFURLCreateWithString( kCFAllocatorDefault
,
120 wxCFStringRef( url
), NULL
) );
121 OSStatus err
= LSOpenCFURLRef( curl
, NULL
);
129 wxLogDebug(wxT("Browser Launch error %d"), (int) err
);
138 void wxDisplaySizeMM(int *width
, int *height
)
140 wxDisplaySize(width
, height
);
141 // on mac 72 is fixed (at least now;-)
142 double cvPt2Mm
= 25.4 / 72;
145 *width
= int( *width
* cvPt2Mm
);
148 *height
= int( *height
* cvPt2Mm
);
152 wxPortId
wxGUIAppTraits::GetToolkitVersion(int *verMaj
, int *verMin
) const
154 // We suppose that toolkit version is the same as OS version under Mac
155 wxGetOsVersion(verMaj
, verMin
);
160 wxEventLoopBase
* wxGUIAppTraits::CreateEventLoop()
162 return new wxEventLoop
;
165 wxWindow
* wxFindWindowAtPoint(wxWindow
* win
, const wxPoint
& pt
);
167 wxWindow
* wxFindWindowAtPoint(const wxPoint
& pt
)
171 Point screenPoint
= { pt
.y
, pt
.x
};
174 if ( FindWindow( screenPoint
, &windowRef
) )
176 wxNonOwnedWindow
*nonOwned
= wxNonOwnedWindow::GetFromWXWindow( windowRef
);
179 return wxFindWindowAtPoint( nonOwned
, pt
);
186 return wxGenericFindWindowAtPoint( pt
);
192 Return the generic RGB color space. This is a 'get' function and the caller should
193 not release the returned value unless the caller retains it first. Usually callers
194 of this routine will immediately use the returned colorspace with CoreGraphics
195 so they typically do not need to retain it themselves.
197 This function creates the generic RGB color space once and hangs onto it so it can
198 return it whenever this function is called.
201 CGColorSpaceRef
wxMacGetGenericRGBColorSpace()
203 static wxCFRef
<CGColorSpaceRef
> genericRGBColorSpace
;
205 if (genericRGBColorSpace
== NULL
)
208 genericRGBColorSpace
.reset( CGColorSpaceCreateDeviceRGB() );
210 genericRGBColorSpace
.reset( CGColorSpaceCreateWithName( kCGColorSpaceGenericRGB
) );
214 return genericRGBColorSpace
;
217 #if wxOSX_USE_COCOA_OR_CARBON
219 CGColorRef
wxMacCreateCGColorFromHITheme( ThemeBrush brush
)
222 HIThemeBrushCreateCGColor( brush
, &color
);
226 //---------------------------------------------------------------------------
227 // Mac Specific string utility functions
228 //---------------------------------------------------------------------------
230 void wxMacStringToPascal( const wxString
&from
, unsigned char * to
)
232 wxCharBuffer buf
= from
.mb_str( wxConvLocal
);
233 int len
= strlen(buf
);
238 memcpy( (char*) &to
[1] , buf
, len
);
241 wxString
wxMacMakeStringFromPascal( const unsigned char * from
)
243 return wxString( (char*) &from
[1] , wxConvLocal
, from
[0] );
246 #endif // wxOSX_USE_COCOA_OR_CARBON