]> git.saurik.com Git - wxWidgets.git/commitdiff
appearance brush support
authorStefan Csomor <csomor@advancedconcepts.ch>
Fri, 28 Dec 2001 19:16:56 +0000 (19:16 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Fri, 28 Dec 2001 19:16:56 +0000 (19:16 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13213 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/brush.cpp
src/mac/carbon/brush.cpp
src/mac/carbon/dc.cpp
src/mac/dc.cpp

index f9e14bad6b716bc48335581a6b3c7ed808b108fb..bb7008a32d83cf5f7cbf6f91dd603a2b0acb16e3 100644 (file)
@@ -24,6 +24,8 @@ IMPLEMENT_DYNAMIC_CLASS(wxBrush, wxGDIObject)
 wxBrushRefData::wxBrushRefData()
 {
     m_style = wxSOLID;
+    m_isMacTheme = false ;
+    m_isMacThemeBackground = false ;
 }
 
 wxBrushRefData::wxBrushRefData(const wxBrushRefData& data)
@@ -31,6 +33,8 @@ wxBrushRefData::wxBrushRefData(const wxBrushRefData& data)
   m_style = data.m_style;
   m_stipple = data.m_stipple;
   m_colour = data.m_colour;
+  m_isMacTheme = data.m_isMacTheme ;
+  m_macThemeBrush = data.m_macThemeBrush ;
 }
 
 wxBrushRefData::~wxBrushRefData()
@@ -66,6 +70,15 @@ wxBrush::wxBrush(const wxBitmap& stipple)
     RealizeResource();
 }
 
+wxBrush::wxBrush(ThemeBrush macThemeBrush ) 
+{
+    m_refData = new wxBrushRefData;
+
+    M_BRUSHDATA->m_isMacTheme = true;
+    M_BRUSHDATA->m_macThemeBrush = macThemeBrush;
+
+    RealizeResource();
+}
 void wxBrush::Unshare()
 {
        // Don't change shared data
@@ -84,7 +97,8 @@ void wxBrush::Unshare()
 void wxBrush::SetColour(const wxColour& col)
 {
     Unshare();
-
+    M_BRUSHDATA->m_isMacTheme = false;
+    M_BRUSHDATA->m_isMacThemeBackground = false ;
     M_BRUSHDATA->m_colour = col;
 
     RealizeResource();
@@ -94,6 +108,8 @@ void wxBrush::SetColour(unsigned char r, unsigned char g, unsigned char b)
 {
     Unshare();
 
+    M_BRUSHDATA->m_isMacTheme = false;
+    M_BRUSHDATA->m_isMacThemeBackground = false ;
     M_BRUSHDATA->m_colour.Set(r, g, b);
 
     RealizeResource();
@@ -103,6 +119,8 @@ void wxBrush::SetStyle(int Style)
 {
     Unshare();
 
+    M_BRUSHDATA->m_isMacTheme = false;
+    M_BRUSHDATA->m_isMacThemeBackground = false ;
     M_BRUSHDATA->m_style = Style;
 
     RealizeResource();
@@ -117,6 +135,28 @@ void wxBrush::SetStipple(const wxBitmap& Stipple)
     RealizeResource();
 }
 
+void wxBrush::SetMacTheme(ThemeBrush macThemeBrush)
+{
+    Unshare();
+
+    M_BRUSHDATA->m_isMacTheme = true;
+    M_BRUSHDATA->m_isMacThemeBackground = false ;
+    M_BRUSHDATA->m_macThemeBrush = macThemeBrush;
+
+    RealizeResource();
+}
+
+void wxBrush::SetMacThemeBackground(ThemeBackgroundKind macThemeBackground)
+{
+    Unshare();
+
+    M_BRUSHDATA->m_isMacTheme = false;
+    M_BRUSHDATA->m_isMacThemeBackground = true ;
+    M_BRUSHDATA->m_macThemeBackground = macThemeBackground;
+
+    RealizeResource();
+}
+
 bool wxBrush::RealizeResource()
 {
     return TRUE;
index f9e14bad6b716bc48335581a6b3c7ed808b108fb..bb7008a32d83cf5f7cbf6f91dd603a2b0acb16e3 100644 (file)
@@ -24,6 +24,8 @@ IMPLEMENT_DYNAMIC_CLASS(wxBrush, wxGDIObject)
 wxBrushRefData::wxBrushRefData()
 {
     m_style = wxSOLID;
+    m_isMacTheme = false ;
+    m_isMacThemeBackground = false ;
 }
 
 wxBrushRefData::wxBrushRefData(const wxBrushRefData& data)
@@ -31,6 +33,8 @@ wxBrushRefData::wxBrushRefData(const wxBrushRefData& data)
   m_style = data.m_style;
   m_stipple = data.m_stipple;
   m_colour = data.m_colour;
+  m_isMacTheme = data.m_isMacTheme ;
+  m_macThemeBrush = data.m_macThemeBrush ;
 }
 
 wxBrushRefData::~wxBrushRefData()
@@ -66,6 +70,15 @@ wxBrush::wxBrush(const wxBitmap& stipple)
     RealizeResource();
 }
 
+wxBrush::wxBrush(ThemeBrush macThemeBrush ) 
+{
+    m_refData = new wxBrushRefData;
+
+    M_BRUSHDATA->m_isMacTheme = true;
+    M_BRUSHDATA->m_macThemeBrush = macThemeBrush;
+
+    RealizeResource();
+}
 void wxBrush::Unshare()
 {
        // Don't change shared data
@@ -84,7 +97,8 @@ void wxBrush::Unshare()
 void wxBrush::SetColour(const wxColour& col)
 {
     Unshare();
-
+    M_BRUSHDATA->m_isMacTheme = false;
+    M_BRUSHDATA->m_isMacThemeBackground = false ;
     M_BRUSHDATA->m_colour = col;
 
     RealizeResource();
@@ -94,6 +108,8 @@ void wxBrush::SetColour(unsigned char r, unsigned char g, unsigned char b)
 {
     Unshare();
 
+    M_BRUSHDATA->m_isMacTheme = false;
+    M_BRUSHDATA->m_isMacThemeBackground = false ;
     M_BRUSHDATA->m_colour.Set(r, g, b);
 
     RealizeResource();
@@ -103,6 +119,8 @@ void wxBrush::SetStyle(int Style)
 {
     Unshare();
 
+    M_BRUSHDATA->m_isMacTheme = false;
+    M_BRUSHDATA->m_isMacThemeBackground = false ;
     M_BRUSHDATA->m_style = Style;
 
     RealizeResource();
@@ -117,6 +135,28 @@ void wxBrush::SetStipple(const wxBitmap& Stipple)
     RealizeResource();
 }
 
+void wxBrush::SetMacTheme(ThemeBrush macThemeBrush)
+{
+    Unshare();
+
+    M_BRUSHDATA->m_isMacTheme = true;
+    M_BRUSHDATA->m_isMacThemeBackground = false ;
+    M_BRUSHDATA->m_macThemeBrush = macThemeBrush;
+
+    RealizeResource();
+}
+
+void wxBrush::SetMacThemeBackground(ThemeBackgroundKind macThemeBackground)
+{
+    Unshare();
+
+    M_BRUSHDATA->m_isMacTheme = false;
+    M_BRUSHDATA->m_isMacThemeBackground = true ;
+    M_BRUSHDATA->m_macThemeBackground = macThemeBackground;
+
+    RealizeResource();
+}
+
 bool wxBrush::RealizeResource()
 {
     return TRUE;
index 275f5147249ff5ceb6a918c28682fb6ff8beb04c..6d995bb99f1e11bbd84c68f78e2cf3af5057256e 100644 (file)
@@ -473,16 +473,12 @@ void  wxDC::SetBackgroundMode( int mode )
 
 void  wxDC::SetFont( const wxFont &font )
 {
-    wxCHECK_RET(Ok(), wxT("Invalid DC"));
-
     m_font = font;
     m_macFontInstalled = false ;
 }
 
 void  wxDC::SetPen( const wxPen &pen )
 {
-    wxCHECK_RET(Ok(), wxT("Invalid DC"));
-
        if ( m_pen == pen )
                return ;
                
@@ -493,8 +489,6 @@ void  wxDC::SetPen( const wxPen &pen )
 
 void  wxDC::SetBrush( const wxBrush &brush )
 {
-  wxCHECK_RET(Ok(), wxT("Invalid DC"));
-  
   if (m_brush == brush) 
        return;
   
@@ -504,8 +498,6 @@ void  wxDC::SetBrush( const wxBrush &brush )
 
 void  wxDC::SetBackground( const wxBrush &brush )
 {
-  wxCHECK_RET(Ok(), wxT("Invalid DC"));
-  
   if (m_backgroundBrush == brush) 
        return;
   
@@ -1003,10 +995,10 @@ bool  wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
        if ( LockPixels(bmappixels) )
        {
                Rect srcrect , dstrect ;
-               srcrect.top = source->YLOG2DEV(ysrc) ;
-               srcrect.left = source->XLOG2DEV(xsrc) ;
-               srcrect.right = source->XLOG2DEV(xsrc + width ) ;
-               srcrect.bottom = source->YLOG2DEV(ysrc + height) ;
+               srcrect.top = source->YLOG2DEV(ysrc) + source->m_macLocalOrigin.v ;
+               srcrect.left = source->XLOG2DEV(xsrc) + source->m_macLocalOrigin.h ;
+               srcrect.right = source->XLOG2DEV(xsrc + width ) + source->m_macLocalOrigin.v;
+               srcrect.bottom = source->YLOG2DEV(ysrc + height) + source->m_macLocalOrigin.h;
                dstrect.top = YLOG2DEV(ydest) ;
                dstrect.left = XLOG2DEV(xdest) ;
                dstrect.bottom = YLOG2DEV(ydest + height )  ;
@@ -1028,15 +1020,31 @@ bool  wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
 
                if ( useMask && source->m_macMask )
                {
-                       wxASSERT( mode == srcCopy ) ;
-                       if ( LockPixels( GetGWorldPixMap( source->m_macMask ) ) )
-                       {
-                               CopyMask( GetPortBitMapForCopyBits( sourcePort ) , 
-                                           GetPortBitMapForCopyBits( source->m_macMask ) , 
-                                           GetPortBitMapForCopyBits( m_macPort ) ,
-                                               &srcrect, &srcrect , &dstrect ) ;
-                               UnlockPixels( GetGWorldPixMap( source->m_macMask )  ) ;
-                       }
+                   if ( mode == srcCopy )
+                   {
+                       if ( LockPixels( GetGWorldPixMap( source->m_macMask ) ) )
+                       {
+                               CopyMask( GetPortBitMapForCopyBits( sourcePort ) , 
+                                           GetPortBitMapForCopyBits( source->m_macMask ) , 
+                                           GetPortBitMapForCopyBits( m_macPort ) ,
+                                               &srcrect, &srcrect , &dstrect ) ;
+                               UnlockPixels( GetGWorldPixMap( source->m_macMask )  ) ;
+                       }
+                   }
+                   else
+                   {
+                RgnHandle clipRgn = NewRgn() ;
+                
+                LockPixels( GetGWorldPixMap( source->m_macMask ) ) ;
+                BitMapToRegion( clipRgn , (BitMap*) *GetGWorldPixMap( source->m_macMask ) ) ;
+                UnlockPixels( GetGWorldPixMap( source->m_macMask ) ) ;
+                //OffsetRgn( clipRgn , -source->m_macMask->portRect.left , -source->m_macMask->portRect.top ) ;
+                OffsetRgn( clipRgn , -srcrect.left + dstrect.left, -srcrect.top +  dstrect.top ) ;
+                       CopyBits( GetPortBitMapForCopyBits( sourcePort ) , 
+                           GetPortBitMapForCopyBits( m_macPort ) ,
+                               &srcrect, &dstrect, mode, clipRgn ) ;
+                   DisposeRgn( clipRgn ) ;
+               }
                }
                else
                {
@@ -1553,20 +1561,50 @@ void wxDC::MacInstallPen() const
        m_macFontInstalled = false ;
 }
 
+int wxDC::MacSetupBackgroundForCurrentPort(const wxBrush& background ) 
+{
+    Pattern whiteColor ;
+       if ( background.IsMacTheme() )
+       {
+           SetThemeBackground( background.GetMacTheme() , wxDisplayDepth() , true ) ;
+       }
+       else if ( background.IsMacThemeBackground() )
+       {
+           Rect originBox = { 0,0,1,1 } ;
+           ::ApplyThemeBackground( background.GetMacThemeBackground() , &originBox ,kThemeStateActive , 
+               wxDisplayDepth() , true ) ;
+       }
+       else
+       {
+       ::RGBBackColor( &background.GetColour().GetPixel() );
+       int brushStyle = background.GetStyle();
+       if (brushStyle == wxSOLID)
+               ::BackPat(GetQDGlobalsWhite(&whiteColor));
+       else if (IS_HATCH(brushStyle))
+       {
+               Pattern pat ;
+               wxMacGetHatchPattern(brushStyle, &pat);
+               ::BackPat(&pat);
+       }
+       else
+       {
+               ::BackPat(GetQDGlobalsWhite(&whiteColor));
+       }
+       }
+       return 0 ;
+}
+
 void wxDC::MacInstallBrush() const
 {
     wxCHECK_RET(Ok(), wxT("Invalid DC"));
 
-       Pattern  blackColor, whiteColor ;
+       Pattern  blackColor ;
 //     if ( m_macBrushInstalled )
 //             return ;
 
        // foreground
 
-       RGBColor forecolor = m_brush.GetColour().GetPixel();
-       RGBColor backcolor = m_backgroundBrush.GetColour().GetPixel();
-       ::RGBForeColor( &forecolor );
-       ::RGBBackColor( &backcolor );
+       ::RGBForeColor( &m_brush.GetColour().GetPixel() );
 
        int brushStyle = m_brush.GetStyle();
        if (brushStyle == wxSOLID)
@@ -1585,24 +1623,12 @@ void wxDC::MacInstallBrush() const
        
        // background
        
-       brushStyle = m_backgroundBrush.GetStyle();
-       if (brushStyle == wxSOLID)
-               ::BackPat(GetQDGlobalsWhite(&whiteColor));
-       else if (IS_HATCH(brushStyle))
-       {
-               Pattern pat ;
-               wxMacGetHatchPattern(brushStyle, &pat);
-               ::BackPat(&pat);
-       }
-       else
-       {
-               ::BackPat(GetQDGlobalsWhite(&whiteColor));
-       }
+    MacSetupBackgroundForCurrentPort( m_backgroundBrush ) ;
        
-       short mode = patCopy ;
 
        // todo :
        
+       short mode = patCopy ;
        switch( m_logicalFunction )
        {
                case wxCOPY:       // src
index 275f5147249ff5ceb6a918c28682fb6ff8beb04c..6d995bb99f1e11bbd84c68f78e2cf3af5057256e 100644 (file)
@@ -473,16 +473,12 @@ void  wxDC::SetBackgroundMode( int mode )
 
 void  wxDC::SetFont( const wxFont &font )
 {
-    wxCHECK_RET(Ok(), wxT("Invalid DC"));
-
     m_font = font;
     m_macFontInstalled = false ;
 }
 
 void  wxDC::SetPen( const wxPen &pen )
 {
-    wxCHECK_RET(Ok(), wxT("Invalid DC"));
-
        if ( m_pen == pen )
                return ;
                
@@ -493,8 +489,6 @@ void  wxDC::SetPen( const wxPen &pen )
 
 void  wxDC::SetBrush( const wxBrush &brush )
 {
-  wxCHECK_RET(Ok(), wxT("Invalid DC"));
-  
   if (m_brush == brush) 
        return;
   
@@ -504,8 +498,6 @@ void  wxDC::SetBrush( const wxBrush &brush )
 
 void  wxDC::SetBackground( const wxBrush &brush )
 {
-  wxCHECK_RET(Ok(), wxT("Invalid DC"));
-  
   if (m_backgroundBrush == brush) 
        return;
   
@@ -1003,10 +995,10 @@ bool  wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
        if ( LockPixels(bmappixels) )
        {
                Rect srcrect , dstrect ;
-               srcrect.top = source->YLOG2DEV(ysrc) ;
-               srcrect.left = source->XLOG2DEV(xsrc) ;
-               srcrect.right = source->XLOG2DEV(xsrc + width ) ;
-               srcrect.bottom = source->YLOG2DEV(ysrc + height) ;
+               srcrect.top = source->YLOG2DEV(ysrc) + source->m_macLocalOrigin.v ;
+               srcrect.left = source->XLOG2DEV(xsrc) + source->m_macLocalOrigin.h ;
+               srcrect.right = source->XLOG2DEV(xsrc + width ) + source->m_macLocalOrigin.v;
+               srcrect.bottom = source->YLOG2DEV(ysrc + height) + source->m_macLocalOrigin.h;
                dstrect.top = YLOG2DEV(ydest) ;
                dstrect.left = XLOG2DEV(xdest) ;
                dstrect.bottom = YLOG2DEV(ydest + height )  ;
@@ -1028,15 +1020,31 @@ bool  wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
 
                if ( useMask && source->m_macMask )
                {
-                       wxASSERT( mode == srcCopy ) ;
-                       if ( LockPixels( GetGWorldPixMap( source->m_macMask ) ) )
-                       {
-                               CopyMask( GetPortBitMapForCopyBits( sourcePort ) , 
-                                           GetPortBitMapForCopyBits( source->m_macMask ) , 
-                                           GetPortBitMapForCopyBits( m_macPort ) ,
-                                               &srcrect, &srcrect , &dstrect ) ;
-                               UnlockPixels( GetGWorldPixMap( source->m_macMask )  ) ;
-                       }
+                   if ( mode == srcCopy )
+                   {
+                       if ( LockPixels( GetGWorldPixMap( source->m_macMask ) ) )
+                       {
+                               CopyMask( GetPortBitMapForCopyBits( sourcePort ) , 
+                                           GetPortBitMapForCopyBits( source->m_macMask ) , 
+                                           GetPortBitMapForCopyBits( m_macPort ) ,
+                                               &srcrect, &srcrect , &dstrect ) ;
+                               UnlockPixels( GetGWorldPixMap( source->m_macMask )  ) ;
+                       }
+                   }
+                   else
+                   {
+                RgnHandle clipRgn = NewRgn() ;
+                
+                LockPixels( GetGWorldPixMap( source->m_macMask ) ) ;
+                BitMapToRegion( clipRgn , (BitMap*) *GetGWorldPixMap( source->m_macMask ) ) ;
+                UnlockPixels( GetGWorldPixMap( source->m_macMask ) ) ;
+                //OffsetRgn( clipRgn , -source->m_macMask->portRect.left , -source->m_macMask->portRect.top ) ;
+                OffsetRgn( clipRgn , -srcrect.left + dstrect.left, -srcrect.top +  dstrect.top ) ;
+                       CopyBits( GetPortBitMapForCopyBits( sourcePort ) , 
+                           GetPortBitMapForCopyBits( m_macPort ) ,
+                               &srcrect, &dstrect, mode, clipRgn ) ;
+                   DisposeRgn( clipRgn ) ;
+               }
                }
                else
                {
@@ -1553,20 +1561,50 @@ void wxDC::MacInstallPen() const
        m_macFontInstalled = false ;
 }
 
+int wxDC::MacSetupBackgroundForCurrentPort(const wxBrush& background ) 
+{
+    Pattern whiteColor ;
+       if ( background.IsMacTheme() )
+       {
+           SetThemeBackground( background.GetMacTheme() , wxDisplayDepth() , true ) ;
+       }
+       else if ( background.IsMacThemeBackground() )
+       {
+           Rect originBox = { 0,0,1,1 } ;
+           ::ApplyThemeBackground( background.GetMacThemeBackground() , &originBox ,kThemeStateActive , 
+               wxDisplayDepth() , true ) ;
+       }
+       else
+       {
+       ::RGBBackColor( &background.GetColour().GetPixel() );
+       int brushStyle = background.GetStyle();
+       if (brushStyle == wxSOLID)
+               ::BackPat(GetQDGlobalsWhite(&whiteColor));
+       else if (IS_HATCH(brushStyle))
+       {
+               Pattern pat ;
+               wxMacGetHatchPattern(brushStyle, &pat);
+               ::BackPat(&pat);
+       }
+       else
+       {
+               ::BackPat(GetQDGlobalsWhite(&whiteColor));
+       }
+       }
+       return 0 ;
+}
+
 void wxDC::MacInstallBrush() const
 {
     wxCHECK_RET(Ok(), wxT("Invalid DC"));
 
-       Pattern  blackColor, whiteColor ;
+       Pattern  blackColor ;
 //     if ( m_macBrushInstalled )
 //             return ;
 
        // foreground
 
-       RGBColor forecolor = m_brush.GetColour().GetPixel();
-       RGBColor backcolor = m_backgroundBrush.GetColour().GetPixel();
-       ::RGBForeColor( &forecolor );
-       ::RGBBackColor( &backcolor );
+       ::RGBForeColor( &m_brush.GetColour().GetPixel() );
 
        int brushStyle = m_brush.GetStyle();
        if (brushStyle == wxSOLID)
@@ -1585,24 +1623,12 @@ void wxDC::MacInstallBrush() const
        
        // background
        
-       brushStyle = m_backgroundBrush.GetStyle();
-       if (brushStyle == wxSOLID)
-               ::BackPat(GetQDGlobalsWhite(&whiteColor));
-       else if (IS_HATCH(brushStyle))
-       {
-               Pattern pat ;
-               wxMacGetHatchPattern(brushStyle, &pat);
-               ::BackPat(&pat);
-       }
-       else
-       {
-               ::BackPat(GetQDGlobalsWhite(&whiteColor));
-       }
+    MacSetupBackgroundForCurrentPort( m_backgroundBrush ) ;
        
-       short mode = patCopy ;
 
        // todo :
        
+       short mode = patCopy ;
        switch( m_logicalFunction )
        {
                case wxCOPY:       // src