X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/849252d51c0d224889e09ca2cb422ddb4173ae29..bc5c09a3aa3662137da2d781c0b101a598d2650d:/src/osx/cocoa/window.mm diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm index 8e579e45d0..195d789478 100644 --- a/src/osx/cocoa/window.mm +++ b/src/osx/cocoa/window.mm @@ -13,7 +13,7 @@ #ifndef WX_PRECOMP #include "wx/dcclient.h" - #include "wx/nonownedwnd.h" + #include "wx/frame.h" #include "wx/log.h" #include "wx/textctrl.h" #endif @@ -131,6 +131,7 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const - (void)setAction:(SEL)aSelector; - (void)setDoubleAction:(SEL)aSelector; - (void)setBackgroundColor:(NSColor*)aColor; +- (void)setOpaque:(BOOL)opaque; - (void)setTextColor:(NSColor *)color; - (void)setImagePosition:(NSCellImagePosition)aPosition; @end @@ -1092,15 +1093,23 @@ void wxWidgetCocoaImpl::drawRect(void* rect, WXWidget slf, void *WXUNUSED(_cmd)) [slf getRectsBeingDrawn:&rects count:&count]; for ( int i = 0 ; i < count ; ++i ) { - updateRgn.Union(wxFromNSRect(slf, rects[i]) ); + updateRgn.Union(wxFromNSRect(slf, rects[i])); } wxWindow* wxpeer = GetWXPeer(); + if ( wxpeer->MacGetTopLevelWindow()->GetWindowStyle() & wxFRAME_SHAPED ) + { + int xoffset = 0, yoffset = 0; + wxRegion rgn = wxpeer->MacGetTopLevelWindow()->GetShape(); + wxpeer->MacRootWindowToWindow( &xoffset, &yoffset ); + rgn.Offset( xoffset, yoffset ); + updateRgn.Intersect(rgn); + } + wxpeer->GetUpdateRegion() = updateRgn; wxpeer->MacSetCGContextRef( context ); bool handled = wxpeer->MacDoRedraw( 0 ); - CGContextRestoreGState( context ); CGContextSaveGState( context ); @@ -1682,6 +1691,18 @@ void wxWidgetCocoaImpl::SetBackgroundColour( const wxColour &col ) } } +bool wxWidgetCocoaImpl::SetBackgroundStyle( wxBackgroundStyle style ) +{ + BOOL opaque = ( style == wxBG_STYLE_PAINT ); + + if ( [m_osxView respondsToSelector:@selector(setOpaque:) ] ) + { + [m_osxView setOpaque: opaque]; + } + + return true ; +} + void wxWidgetCocoaImpl::SetLabel( const wxString& title, wxFontEncoding encoding ) { if ( [m_osxView respondsToSelector:@selector(setTitle:) ] ) @@ -2076,9 +2097,24 @@ wxWidgetImpl* wxWidgetImpl::CreateUserPane( wxWindowMac* wxpeer, wxWindowMac* WX wxWidgetImpl* wxWidgetImpl::CreateContentView( wxNonOwnedWindow* now ) { NSWindow* tlw = now->GetWXWindow(); - wxNSView* v = [[wxNSView alloc] initWithFrame:[[tlw contentView] frame]]; - wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( now, v, true ); - c->InstallEventHandler(); - [tlw setContentView:v]; + + wxWidgetCocoaImpl* c = NULL; + if ( now->IsNativeWindowWrapper() ) + { + NSView* cv = [tlw contentView]; + c = new wxWidgetCocoaImpl( now, cv, true ); + // increase ref count, because the impl destructor will decrement it again + CFRetain(cv); + if ( !now->IsShown() ) + [cv setHidden:NO]; + + } + else + { + wxNSView* v = [[wxNSView alloc] initWithFrame:[[tlw contentView] frame]]; + c = new wxWidgetCocoaImpl( now, v, true ); + c->InstallEventHandler(); + [tlw setContentView:v]; + } return c; }