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 wxNonOwnedWindow
*wxFindWindowFromWXWindow(WXWindow inWindowRef
);
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
= wxFindWindowFromWXWindow( 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