]> git.saurik.com Git - wxWidgets.git/commitdiff
translating background style BG_PAINT into opaqueness for speed-up of OS redraws...
authorStefan Csomor <csomor@advancedconcepts.ch>
Fri, 16 Apr 2010 06:18:16 +0000 (06:18 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Fri, 16 Apr 2010 06:18:16 +0000 (06:18 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63988 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/osx/carbon/private.h
include/wx/osx/cocoa/private.h
include/wx/osx/core/private.h
include/wx/osx/window.h
src/osx/carbon/window.cpp
src/osx/cocoa/window.mm
src/osx/window_osx.cpp

index ab9ac47ed4ab4239f1010cb33f873694b99da5db..2f413419994a60fe373395ea391241b66ef6b39a 100644 (file)
@@ -433,6 +433,7 @@ public :
 
     virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true );
     virtual void SetBackgroundColour( const wxColour& col );
+    virtual bool SetBackgroundStyle(wxBackgroundStyle style);
     virtual ControlPartCode HandleKey(  SInt16 keyCode,  SInt16 charCode, EventModifiers modifiers );
     void SetActionProc( ControlActionUPP   actionProc );
     SInt32 GetViewSize() const;
index 893aba3ac21f099d6315a5eef4718a6c5325084c..95d466563702144e9417de167f1b192883e0db80 100644 (file)
@@ -101,6 +101,7 @@ public :
     virtual WXWidget    GetWXWidget() const { return m_osxView; }
 
     virtual void        SetBackgroundColour(const wxColour&);
+    virtual bool        SetBackgroundStyle(wxBackgroundStyle style);
 
     virtual void        GetContentArea( int &left , int &top , int &width , int &height ) const;
     virtual void        Move(int x, int y, int width, int height);
index b3ff76448dec68022a4f854da88767c9bbd21070..254681868221d3394f3b662157864f2213faddcd 100644 (file)
@@ -215,6 +215,7 @@ public :
     virtual WXWidget    GetWXWidget() const = 0;
 
     virtual void        SetBackgroundColour( const wxColour& col ) = 0;
+    virtual bool        SetBackgroundStyle(wxBackgroundStyle style) = 0;
 
     // all coordinates in native parent widget relative coordinates
     virtual void        GetContentArea( int &left , int &top , int &width , int &height ) const = 0;
index 9f5b7ae7bfe7a5a84820f38f00fad5596698320c..54446478ad4a8f5554208bcdf6761728245a21df 100644 (file)
@@ -91,6 +91,8 @@ public:
     virtual bool SetBackgroundColour( const wxColour &colour );
     virtual bool SetForegroundColour( const wxColour &colour );
 
+    virtual bool SetBackgroundStyle(wxBackgroundStyle style);
+
     virtual int GetCharHeight() const;
     virtual int GetCharWidth() const;
 
index cab7af9aad2e9a82c2b6095e371713d34c4bb0bf..7545767b41643b0a47ae48c0b8aa632ffd8b25e0 100644 (file)
@@ -970,7 +970,17 @@ void wxMacControl::GetContentArea(int &left , int &top , int &width , int &heigh
 
 void wxMacControl::Move(int x, int y, int width, int height)
 {
+    UInt32 attr = 0 ;
+    GetWindowAttributes( GetControlOwner(m_controlRef) , &attr ) ;
+
     HIRect hir = CGRectMake(x,y,width,height);
+    if ( !(attr & kWindowCompositingAttribute) )
+    {
+        HIRect parent;
+        HIViewGetFrame( HIViewGetSuperview(m_controlRef), &parent );
+        hir.origin.x += parent.origin.x;
+        hir.origin.y += parent.origin.y;
+    }
     HIViewSetFrame ( m_controlRef , &hir );
 }
 
@@ -980,6 +990,18 @@ void wxMacControl::GetPosition( int &x, int &y ) const
     GetControlBounds( m_controlRef , &r );
     x = r.left;
     y = r.top;
+
+    UInt32 attr = 0 ;
+    GetWindowAttributes( GetControlOwner(m_controlRef) , &attr ) ;
+
+    if ( !(attr & kWindowCompositingAttribute) )
+    {
+        HIRect parent;
+        HIViewGetFrame( HIViewGetSuperview(m_controlRef), &parent );
+        x -= parent.origin.x;
+        y -= parent.origin.y;
+    }
+    
 }
 
 void wxMacControl::GetSize( int &width, int &height ) const
@@ -1324,6 +1346,22 @@ void wxMacControl::SetBackgroundColour( const wxColour &WXUNUSED(col) )
 //    HITextViewSetBackgroundColor( m_textView , color );
 }
 
+bool wxMacControl::SetBackgroundStyle(wxBackgroundStyle style)
+{
+    if ( style != wxBG_STYLE_PAINT )
+    {
+        OSStatus err = HIViewChangeFeatures(m_controlRef , 0 , kHIViewIsOpaque);
+        verify_noerr( err );
+    }
+    else
+    {
+        OSStatus err = HIViewChangeFeatures(m_controlRef , kHIViewIsOpaque , 0);
+        verify_noerr( err );
+    }
+    
+    return true ;
+}
+
 void wxMacControl::SetRange( SInt32 minimum , SInt32 maximum )
 {
     ::SetControl32BitMinimum( m_controlRef , minimum );
@@ -1393,7 +1431,7 @@ void wxMacControl::GetRectInWindowCoords( Rect *r )
         OffsetRect( r , (short) hiPoint.x , (short) hiPoint.y ) ;
     }
 }
-
+        
 void wxMacControl::GetBestRect( wxRect *rect ) const
 {
     short   baselineoffset;
index 6acdec29ee9746aebaf4863d93a658b9f72a9e0e..195d7894780ee6a4d1646ab9b9206bec50c07c8a 100644 (file)
@@ -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
@@ -1690,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:) ] )
@@ -2088,7 +2101,13 @@ wxWidgetImpl* wxWidgetImpl::CreateContentView( wxNonOwnedWindow* now )
     wxWidgetCocoaImpl* c = NULL;
     if ( now->IsNativeWindowWrapper() )
     {
-        c = new wxWidgetCocoaImpl( now, [tlw contentView], true );
+        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
     {
index 04e3a9e127f7265c8cd318d3405870d767ef8bc7..9625a709065053750e504abf5bc651107e92b558 100644 (file)
@@ -472,6 +472,16 @@ bool wxWindowMac::SetForegroundColour(const wxColour& col )
     return retval;
 }
 
+bool wxWindowMac::SetBackgroundStyle(wxBackgroundStyle style)
+{
+    if ( !wxWindowBase::SetBackgroundStyle(style) )
+        return false;
+    
+    if ( m_peer )
+        m_peer->SetBackgroundStyle(style);
+    return true;
+}
+
 bool wxWindowMac::SetBackgroundColour(const wxColour& col )
 {
     if (m_growBox)