X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2ae328d17faaae564da1b8d082313c4a52856e62..8a31648287be0ef976f133de2786b137f1e98340:/src/osx/utils_osx.cpp?ds=inline diff --git a/src/osx/utils_osx.cpp b/src/osx/utils_osx.cpp index e044f1a54d..e1765e81d1 100644 --- a/src/osx/utils_osx.cpp +++ b/src/osx/utils_osx.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: utils.cpp 54886 2008-07-31 13:02:53Z SC $ +// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,6 +17,7 @@ #ifndef WX_PRECOMP #include "wx/intl.h" #include "wx/app.h" + #include "wx/log.h" #if wxUSE_GUI #include "wx/toplevel.h" #include "wx/font.h" @@ -39,12 +40,6 @@ #endif #include "wx/osx/private.h" - -#ifdef wxOSX_USE_COCOA -// to get the themeing APIs -#include -#endif - #include "wx/osx/private/timer.h" #include "wx/evtloop.h" @@ -66,14 +61,49 @@ bool wxCheckForInterrupt(wxWindow *WXUNUSED(wnd)) // Return true if we have a colour display bool wxColourDisplay() { + // always the case on OS X return true; } + #if wxOSX_USE_COCOA_OR_CARBON + +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) && (MAC_OS_X_VERSION_MIN_REQUIRED < 1060) +// bring back declaration so that we can support deployment targets < 10_6 +CG_EXTERN size_t CGDisplayBitsPerPixel(CGDirectDisplayID display) +CG_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_6, + __IPHONE_NA, __IPHONE_NA); +#endif + // Returns depth of screen int wxDisplayDepth() { - int theDepth = (int) CGDisplayBitsPerPixel(CGMainDisplayID()); + int theDepth = 0; + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 + if ( UMAGetSystemVersion() >= 0x1060 ) + { + CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode(kCGDirectMainDisplay); + CFStringRef encoding = CGDisplayModeCopyPixelEncoding(currentMode); + + if(CFStringCompare(encoding, CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) + theDepth = 32; + else if(CFStringCompare(encoding, CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) + theDepth = 16; + else if(CFStringCompare(encoding, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) + theDepth = 8; + else + theDepth = 32; // some reasonable default + + CFRelease(encoding); + } + else +#endif + { +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + theDepth = (int) CGDisplayBitsPerPixel(CGMainDisplayID()); +#endif + } return theDepth; } @@ -98,12 +128,20 @@ bool wxLaunchDefaultApplication(const wxString& document, int flags) { wxUnusedVar(flags); - static const char * const OPEN_CMD = "/usr/bin/open"; - if ( wxFileExists(OPEN_CMD) && - wxExecute(wxString(OPEN_CMD) + " " + document) ) - return true; + wxCFRef cfMutableString(CFStringCreateMutableCopy(NULL, 0, wxCFStringRef(document))); + CFStringNormalize(cfMutableString,kCFStringNormalizationFormD); + wxCFRef curl(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, cfMutableString , kCFURLPOSIXPathStyle, false)); + OSStatus err = LSOpenCFURLRef( curl , NULL ); - return false; + if (err == noErr) + { + return true; + } + else + { + wxLogDebug(wxT("Default Application Launch error %d"), (int) err); + return false; + } } // ---------------------------------------------------------------------------- @@ -159,9 +197,30 @@ wxEventLoopBase* wxGUIAppTraits::CreateEventLoop() return new wxEventLoop; } +wxWindow* wxFindWindowAtPoint(wxWindow* win, const wxPoint& pt); + wxWindow* wxFindWindowAtPoint(const wxPoint& pt) { - return wxGenericFindWindowAtPoint(pt); +#if wxOSX_USE_CARBON + + Point screenPoint = { pt.y , pt.x }; + WindowRef windowRef; + + if ( FindWindow( screenPoint , &windowRef ) ) + { + wxNonOwnedWindow *nonOwned = wxNonOwnedWindow::GetFromWXWindow( windowRef ); + + if ( nonOwned ) + return wxFindWindowAtPoint( nonOwned , pt ); + } + + return NULL; + +#else + + return wxGenericFindWindowAtPoint( pt ); + +#endif } /*