diff --git a/CMakeModules/download_wxpython.cmake b/CMakeModules/download_wxpython.cmake index e9738f5830..60225b40f4 100644 --- a/CMakeModules/download_wxpython.cmake +++ b/CMakeModules/download_wxpython.cmake @@ -69,7 +69,7 @@ ExternalProject_Add( libwxpython PATCH_COMMAND bzr revert COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx.patch" - #COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxwidgets-3.0.0_macosx_bug_15908.patch" + COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx_multiarch.patch" # http://trac.wxwidgets.org/ticket/15957 UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBWXPYTHON_ROOT}" COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --clean diff --git a/patches/wxpython-3.0.0_macosx.patch b/patches/wxpython-3.0.0_macosx.patch new file mode 100644 index 0000000000..746943f5b4 --- /dev/null +++ b/patches/wxpython-3.0.0_macosx.patch @@ -0,0 +1,289 @@ +=== modified file 'Makefile.in' +--- Makefile.in 2014-02-05 21:57:29 +0000 ++++ Makefile.in 2014-02-05 22:00:01 +0000 +@@ -14601,7 +14601,7 @@ + monodll_carbon_frame.o \ + monodll_carbon_mdi.o \ + monodll_carbon_metafile.o \ +- monodll_carbon_overlay.o \ ++ monodll_osx_cocoa_overlay.o \ + monodll_carbon_popupwin.o \ + monodll_carbon_renderer.o \ + monodll_carbon_settings.o \ +@@ -14748,7 +14748,7 @@ + monolib_carbon_frame.o \ + monolib_carbon_mdi.o \ + monolib_carbon_metafile.o \ +- monolib_carbon_overlay.o \ ++ monolib_osx_cocoa_overlay.o \ + monolib_carbon_popupwin.o \ + monolib_carbon_renderer.o \ + monolib_carbon_settings.o \ +@@ -14895,7 +14895,7 @@ + coredll_carbon_frame.o \ + coredll_carbon_mdi.o \ + coredll_carbon_metafile.o \ +- coredll_carbon_overlay.o \ ++ coredll_osx_cocoa_overlay.o \ + coredll_carbon_popupwin.o \ + coredll_carbon_renderer.o \ + coredll_carbon_settings.o \ +@@ -15027,7 +15027,7 @@ + corelib_carbon_frame.o \ + corelib_carbon_mdi.o \ + corelib_carbon_metafile.o \ +- corelib_carbon_overlay.o \ ++ corelib_osx_cocoa_overlay.o \ + corelib_carbon_popupwin.o \ + corelib_carbon_renderer.o \ + corelib_carbon_settings.o \ +@@ -17774,6 +17774,9 @@ + monodll_osx_cocoa_notebook.o: $(srcdir)/src/osx/cocoa/notebook.mm $(MONODLL_ODEP) + $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/notebook.mm + ++monodll_osx_cocoa_overla.o: $(srcdir)/src/osx/cocoa/overlay.mm $(MONODLL_ODEP) ++ $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm ++ + monodll_osx_cocoa_radiobut.o: $(srcdir)/src/osx/cocoa/radiobut.mm $(MONODLL_ODEP) + $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/radiobut.mm + +@@ -21683,8 +21686,8 @@ + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@monodll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(MONODLL_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp + +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monodll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(MONODLL_ODEP) +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monodll_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(MONODLL_ODEP) ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm + + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@monodll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(MONODLL_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp +@@ -23642,6 +23645,9 @@ + monolib_osx_cocoa_notebook.o: $(srcdir)/src/osx/cocoa/notebook.mm $(MONOLIB_ODEP) + $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/notebook.mm + ++monolib_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(MONOLIB_ODEP) ++ $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm ++ + monolib_osx_cocoa_radiobut.o: $(srcdir)/src/osx/cocoa/radiobut.mm $(MONOLIB_ODEP) + $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/radiobut.mm + +@@ -33584,8 +33590,8 @@ + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@coredll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(COREDLL_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp + +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@coredll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(COREDLL_ODEP) +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@coredll_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(COREDLL_ODEP) ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm + + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@coredll_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(COREDLL_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp +@@ -37961,8 +37967,8 @@ + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@corelib_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(CORELIB_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp + +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@corelib_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(CORELIB_ODEP) +-@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@corelib_osx_cocoa_overlay.o: $(srcdir)/src/osx/cocoa/overlay.mm $(CORELIB_ODEP) ++@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/cocoa/overlay.mm + + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@corelib_carbon_overlay.o: $(srcdir)/src/osx/carbon/overlay.cpp $(CORELIB_ODEP) + @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/overlay.cpp + +=== modified file 'include/wx/overlay.h' +--- include/wx/overlay.h 2014-02-05 21:57:29 +0000 ++++ include/wx/overlay.h 2014-02-05 21:57:47 +0000 +@@ -13,7 +13,7 @@ + + #include "wx/defs.h" + +-#if defined(__WXMAC__) && wxOSX_USE_CARBON ++#if defined(__WXMAC__) && wxOSX_USE_COCOA_OR_CARBON + #define wxHAS_NATIVE_OVERLAY 1 + #elif defined(__WXDFB__) + #define wxHAS_NATIVE_OVERLAY 1 + +=== modified file 'include/wx/private/overlay.h' +--- include/wx/private/overlay.h 2014-02-05 21:57:29 +0000 ++++ include/wx/private/overlay.h 2014-02-05 21:57:47 +0000 +@@ -16,7 +16,11 @@ + #ifdef wxHAS_NATIVE_OVERLAY + + #if defined(__WXMAC__) ++#if wxOSX_USE_CARBON + #include "wx/osx/carbon/private/overlay.h" ++#else ++ #include "wx/osx/cocoa/private/overlay.h" ++#endif + #elif defined(__WXDFB__) + #include "wx/dfb/private/overlay.h" + #else + +=== modified file 'src/osx/cocoa/overlay.mm' +--- src/osx/cocoa/overlay.mm 2014-02-05 21:57:29 +0000 ++++ src/osx/cocoa/overlay.mm 2014-02-05 21:57:47 +0000 +@@ -34,6 +34,7 @@ + #include "wx/private/overlay.h" + + #ifdef wxHAS_NATIVE_OVERLAY ++#import + + // ============================================================================ + // implementation +@@ -58,48 +59,6 @@ + + void wxOverlayImpl::CreateOverlayWindow() + { +- if ( m_window ) +- { +- m_overlayParentWindow = m_window->MacGetTopLevelWindowRef(); +- [m_overlayParentWindow makeKeyAndOrderFront:nil]; +- +- NSView* view = m_window->GetHandle(); +- +- NSPoint viewOriginBase, viewOriginScreen; +- viewOriginBase = [view convertPoint:NSMakePoint(0, 0) toView:nil]; +- viewOriginScreen = [m_overlayParentWindow convertBaseToScreen:viewOriginBase]; +- +- NSSize viewSize = [view frame].size; +- if ( [view isFlipped] ) +- viewOriginScreen.y -= viewSize.height; +- +- m_overlayWindow=[[NSWindow alloc] initWithContentRect:NSMakeRect(viewOriginScreen.x,viewOriginScreen.y, +- viewSize.width, +- viewSize.height) +- styleMask:NSBorderlessWindowMask +- backing:NSBackingStoreBuffered +- defer:YES]; +- +- [m_overlayParentWindow addChildWindow:m_overlayWindow ordered:NSWindowAbove]; +- } +- else +- { +- m_overlayParentWindow = NULL ; +- CGRect cgbounds ; +- cgbounds = CGDisplayBounds(CGMainDisplayID()); +- +- m_overlayWindow=[[NSWindow alloc] initWithContentRect:NSMakeRect(cgbounds.origin.x,cgbounds.origin.y, +- cgbounds.size.width, +- cgbounds.size.height) +- styleMask:NSBorderlessWindowMask +- backing:NSBackingStoreBuffered +- defer:YES]; +- } +- [m_overlayWindow setOpaque:NO]; +- [m_overlayWindow setIgnoresMouseEvents:YES]; +- [m_overlayWindow setAlphaValue:1.0]; +- +- [m_overlayWindow orderFront:nil]; + } + + void wxOverlayImpl::Init( wxDC* dc, int x , int y , int width , int height ) +@@ -107,84 +66,50 @@ + wxASSERT_MSG( !IsOk() , _("You cannot Init an overlay twice") ); + + m_window = dc->GetWindow(); +- m_x = x ; +- m_y = y ; +- if ( dc->IsKindOf( CLASSINFO( wxClientDC ) )) +- { +- wxPoint origin = m_window->GetClientAreaOrigin(); +- m_x += origin.x; +- m_y += origin.y; +- } +- m_width = width ; +- m_height = height ; +- +- CreateOverlayWindow(); +- wxASSERT_MSG( m_overlayWindow != NULL , _("Couldn't create the overlay window") ); +- m_overlayContext = (CGContextRef) [[m_overlayWindow graphicsContext] graphicsPort]; +- wxASSERT_MSG( m_overlayContext != NULL , _("Couldn't init the context on the overlay window") ); +- +- int ySize = 0; +- if ( m_window ) +- { +- NSView* view = m_window->GetHandle(); +- NSSize viewSize = [view frame].size; +- ySize = viewSize.height; +- } +- else +- { +- CGRect cgbounds ; +- cgbounds = CGDisplayBounds(CGMainDisplayID()); +- ySize = cgbounds.size.height; +- +- +- +- } +- CGContextTranslateCTM( m_overlayContext, 0, ySize ); +- CGContextScaleCTM( m_overlayContext, 1, -1 ); +- CGContextTranslateCTM( m_overlayContext, -m_x , -m_y ); ++ m_overlayWindow = m_window->MacGetTopLevelWindowRef(); ++ ++ NSRect box = [m_overlayWindow frame]; ++ ++ if( [m_overlayWindow isVisible] ) ++ { ++ [m_overlayWindow discardCachedImage]; ++ [m_overlayWindow cacheImageInRect:box]; ++ } + } + + void wxOverlayImpl::BeginDrawing( wxDC* dc) + { +- wxDCImpl *impl = dc->GetImpl(); +- wxGCDCImpl *win_impl = wxDynamicCast(impl,wxGCDCImpl); +- if (win_impl) +- { +- win_impl->SetGraphicsContext( wxGraphicsContext::CreateFromNative( m_overlayContext ) ); +- dc->SetClippingRegion( m_x , m_y , m_width , m_height ) ; +- } ++ + } + + void wxOverlayImpl::EndDrawing( wxDC* dc) + { +- wxDCImpl *impl = dc->GetImpl(); +- wxGCDCImpl *win_impl = wxDynamicCast(impl,wxGCDCImpl); +- if (win_impl) +- win_impl->SetGraphicsContext(NULL); +- +- CGContextFlush( m_overlayContext ); + } + + void wxOverlayImpl::Clear(wxDC* WXUNUSED(dc)) + { + wxASSERT_MSG( IsOk() , _("You cannot Clear an overlay that is not inited") ); +- CGRect box = CGRectMake( m_x - 1, m_y - 1 , m_width + 2 , m_height + 2 ); +- CGContextClearRect( m_overlayContext, box ); ++ if( [m_overlayWindow isVisible] ) ++ { ++ [m_overlayWindow restoreCachedImage]; ++// [m_overlayWindow flushWindow]; ++ } + } + + void wxOverlayImpl::Reset() + { +- if ( m_overlayContext ) ++ if ( m_overlayContext) + { + m_overlayContext = NULL ; + } + + // todo : don't dispose, only hide and reposition on next run +- if (m_overlayWindow) ++ if (m_overlayWindow && [m_overlayWindow isVisible]) + { +- [m_overlayParentWindow removeChildWindow:m_overlayWindow]; +- [m_overlayWindow release]; +- m_overlayWindow = NULL ; ++ NSRect box = [m_overlayWindow frame]; ++ ++ [m_overlayWindow discardCachedImage]; ++ [m_overlayWindow cacheImageInRect:box]; + } + } + + diff --git a/patches/wxpython-3.0.0_macosx_multiarch.patch b/patches/wxpython-3.0.0_macosx_multiarch.patch new file mode 100644 index 0000000000..e8270251b7 --- /dev/null +++ b/patches/wxpython-3.0.0_macosx_multiarch.patch @@ -0,0 +1,25 @@ +=== modified file 'wxPython/config.py' +--- wxPython/config.py 2014-02-07 20:23:11 +0000 ++++ wxPython/config.py 2014-02-07 21:00:18 +0000 +@@ -22,6 +22,7 @@ + + import sys, os, glob, fnmatch, tempfile + import subprocess ++import re + + EGGing = 'bdist_egg' in sys.argv or 'egg_info' in sys.argv + if not EGGing: +@@ -1059,10 +1060,8 @@ + libs = ['stdc++'] + NO_SCRIPTS = 1 + if ARCH != "": +- cflags.append("-arch") +- cflags.append(ARCH) +- lflags.append("-arch") +- lflags.append(ARCH) ++ cflags.append('-arch ' + re.sub(',',' -arch ',ARCH)) ++ lflags.append('-arch ' + re.sub(',',' -arch ',ARCH)) + + if not os.environ.get('CC') or not os.environ.get('CXX'): + os.environ["CXX"] = getWxConfigValue('--cxx') +