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()
71 wxEventLoopBase
* const loop
= wxEventLoopBase::GetActive();
79 #if wxOSX_USE_COCOA_OR_CARBON
80 // Returns depth of screen
83 int theDepth
= (int) CGDisplayBitsPerPixel(CGMainDisplayID());
87 // Get size of display
88 void wxDisplaySize(int *width
, int *height
)
90 // TODO adapt for multi-displays
91 CGRect bounds
= CGDisplayBounds(CGMainDisplayID());
93 *width
= (int)bounds
.size
.width
;
95 *height
= (int)bounds
.size
.height
;
100 // ----------------------------------------------------------------------------
101 // Launch document with default app
102 // ----------------------------------------------------------------------------
104 bool wxLaunchDefaultApplication(const wxString
& document
, int flags
)
108 wxCFRef
<CFMutableStringRef
> cfMutableString(CFStringCreateMutableCopy(NULL
, 0, wxCFStringRef(document
)));
109 CFStringNormalize(cfMutableString
,kCFStringNormalizationFormD
);
110 wxCFRef
<CFURLRef
> curl(CFURLCreateWithFileSystemPath(kCFAllocatorDefault
, cfMutableString
, kCFURLPOSIXPathStyle
, false));
111 OSStatus err
= LSOpenCFURLRef( curl
, NULL
);
119 wxLogDebug(wxT("Default Application Launch error %d"), (int) err
);
124 // ----------------------------------------------------------------------------
125 // Launch default browser
126 // ----------------------------------------------------------------------------
128 bool wxDoLaunchDefaultBrowser(const wxString
& url
, int flags
)
131 wxCFRef
< CFURLRef
> curl( CFURLCreateWithString( kCFAllocatorDefault
,
132 wxCFStringRef( url
), NULL
) );
133 OSStatus err
= LSOpenCFURLRef( curl
, NULL
);
141 wxLogDebug(wxT("Browser Launch error %d"), (int) err
);
150 void wxDisplaySizeMM(int *width
, int *height
)
152 wxDisplaySize(width
, height
);
153 // on mac 72 is fixed (at least now;-)
154 double cvPt2Mm
= 25.4 / 72;
157 *width
= int( *width
* cvPt2Mm
);
160 *height
= int( *height
* cvPt2Mm
);
164 wxPortId
wxGUIAppTraits::GetToolkitVersion(int *verMaj
, int *verMin
) const
166 // We suppose that toolkit version is the same as OS version under Mac
167 wxGetOsVersion(verMaj
, verMin
);
172 wxEventLoopBase
* wxGUIAppTraits::CreateEventLoop()
174 return new wxEventLoop
;
177 wxWindow
* wxFindWindowAtPoint(wxWindow
* win
, const wxPoint
& pt
);
179 wxWindow
* wxFindWindowAtPoint(const wxPoint
& pt
)
183 Point screenPoint
= { pt
.y
, pt
.x
};
186 if ( FindWindow( screenPoint
, &windowRef
) )
188 wxNonOwnedWindow
*nonOwned
= wxNonOwnedWindow::GetFromWXWindow( windowRef
);
191 return wxFindWindowAtPoint( nonOwned
, pt
);
198 return wxGenericFindWindowAtPoint( pt
);
204 Return the generic RGB color space. This is a 'get' function and the caller should
205 not release the returned value unless the caller retains it first. Usually callers
206 of this routine will immediately use the returned colorspace with CoreGraphics
207 so they typically do not need to retain it themselves.
209 This function creates the generic RGB color space once and hangs onto it so it can
210 return it whenever this function is called.
213 CGColorSpaceRef
wxMacGetGenericRGBColorSpace()
215 static wxCFRef
<CGColorSpaceRef
> genericRGBColorSpace
;
217 if (genericRGBColorSpace
== NULL
)
220 genericRGBColorSpace
.reset( CGColorSpaceCreateDeviceRGB() );
222 genericRGBColorSpace
.reset( CGColorSpaceCreateWithName( kCGColorSpaceGenericRGB
) );
226 return genericRGBColorSpace
;
229 #if wxOSX_USE_COCOA_OR_CARBON
231 CGColorRef
wxMacCreateCGColorFromHITheme( ThemeBrush brush
)
234 HIThemeBrushCreateCGColor( brush
, &color
);
238 //---------------------------------------------------------------------------
239 // Mac Specific string utility functions
240 //---------------------------------------------------------------------------
242 void wxMacStringToPascal( const wxString
&from
, unsigned char * to
)
244 wxCharBuffer buf
= from
.mb_str( wxConvLocal
);
245 int len
= strlen(buf
);
250 memcpy( (char*) &to
[1] , buf
, len
);
253 wxString
wxMacMakeStringFromPascal( const unsigned char * from
)
255 return wxString( (char*) &from
[1] , wxConvLocal
, from
[0] );
258 #endif // wxOSX_USE_COCOA_OR_CARBON