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()
64 // always the case on OS X
68 #if wxOSX_USE_COCOA_OR_CARBON
69 // Returns depth of screen
72 int theDepth
= (int) CGDisplayBitsPerPixel(CGMainDisplayID());
76 // Get size of display
77 void wxDisplaySize(int *width
, int *height
)
79 // TODO adapt for multi-displays
80 CGRect bounds
= CGDisplayBounds(CGMainDisplayID());
82 *width
= (int)bounds
.size
.width
;
84 *height
= (int)bounds
.size
.height
;
89 // ----------------------------------------------------------------------------
90 // Launch document with default app
91 // ----------------------------------------------------------------------------
93 bool wxLaunchDefaultApplication(const wxString
& document
, int flags
)
97 wxCFRef
<CFMutableStringRef
> cfMutableString(CFStringCreateMutableCopy(NULL
, 0, wxCFStringRef(document
)));
98 CFStringNormalize(cfMutableString
,kCFStringNormalizationFormD
);
99 wxCFRef
<CFURLRef
> curl(CFURLCreateWithFileSystemPath(kCFAllocatorDefault
, cfMutableString
, kCFURLPOSIXPathStyle
, false));
100 OSStatus err
= LSOpenCFURLRef( curl
, NULL
);
108 wxLogDebug(wxT("Default Application Launch error %d"), (int) err
);
113 // ----------------------------------------------------------------------------
114 // Launch default browser
115 // ----------------------------------------------------------------------------
117 bool wxDoLaunchDefaultBrowser(const wxString
& url
, int flags
)
120 wxCFRef
< CFURLRef
> curl( CFURLCreateWithString( kCFAllocatorDefault
,
121 wxCFStringRef( url
), NULL
) );
122 OSStatus err
= LSOpenCFURLRef( curl
, NULL
);
130 wxLogDebug(wxT("Browser Launch error %d"), (int) err
);
139 void wxDisplaySizeMM(int *width
, int *height
)
141 wxDisplaySize(width
, height
);
142 // on mac 72 is fixed (at least now;-)
143 double cvPt2Mm
= 25.4 / 72;
146 *width
= int( *width
* cvPt2Mm
);
149 *height
= int( *height
* cvPt2Mm
);
153 wxPortId
wxGUIAppTraits::GetToolkitVersion(int *verMaj
, int *verMin
) const
155 // We suppose that toolkit version is the same as OS version under Mac
156 wxGetOsVersion(verMaj
, verMin
);
161 wxEventLoopBase
* wxGUIAppTraits::CreateEventLoop()
163 return new wxEventLoop
;
166 wxWindow
* wxFindWindowAtPoint(wxWindow
* win
, const wxPoint
& pt
);
168 wxWindow
* wxFindWindowAtPoint(const wxPoint
& pt
)
172 Point screenPoint
= { pt
.y
, pt
.x
};
175 if ( FindWindow( screenPoint
, &windowRef
) )
177 wxNonOwnedWindow
*nonOwned
= wxNonOwnedWindow::GetFromWXWindow( windowRef
);
180 return wxFindWindowAtPoint( nonOwned
, pt
);
187 return wxGenericFindWindowAtPoint( pt
);
193 Return the generic RGB color space. This is a 'get' function and the caller should
194 not release the returned value unless the caller retains it first. Usually callers
195 of this routine will immediately use the returned colorspace with CoreGraphics
196 so they typically do not need to retain it themselves.
198 This function creates the generic RGB color space once and hangs onto it so it can
199 return it whenever this function is called.
202 CGColorSpaceRef
wxMacGetGenericRGBColorSpace()
204 static wxCFRef
<CGColorSpaceRef
> genericRGBColorSpace
;
206 if (genericRGBColorSpace
== NULL
)
209 genericRGBColorSpace
.reset( CGColorSpaceCreateDeviceRGB() );
211 genericRGBColorSpace
.reset( CGColorSpaceCreateWithName( kCGColorSpaceGenericRGB
) );
215 return genericRGBColorSpace
;
218 #if wxOSX_USE_COCOA_OR_CARBON
220 CGColorRef
wxMacCreateCGColorFromHITheme( ThemeBrush brush
)
223 HIThemeBrushCreateCGColor( brush
, &color
);
227 //---------------------------------------------------------------------------
228 // Mac Specific string utility functions
229 //---------------------------------------------------------------------------
231 void wxMacStringToPascal( const wxString
&from
, unsigned char * to
)
233 wxCharBuffer buf
= from
.mb_str( wxConvLocal
);
234 int len
= strlen(buf
);
239 memcpy( (char*) &to
[1] , buf
, len
);
242 wxString
wxMacMakeStringFromPascal( const unsigned char * from
)
244 return wxString( (char*) &from
[1] , wxConvLocal
, from
[0] );
247 #endif // wxOSX_USE_COCOA_OR_CARBON