*/
#include "wx/mac/uma.h"
+#include "wx/notebook.h"
+#include "wx/tabctrl.h"
+
+
+static wxBrush MacGetBackgroundBrush( wxWindow* window )
+{
+ wxBrush bkdBrush = window->MacGetBackgroundBrush() ;
+#if !TARGET_API_MAC_OSX
+ // transparency cannot be handled by the OS when not using composited windows
+ wxWindow* parent = window->GetParent() ;
+ // if we have some 'pseudo' transparency
+ if ( ! bkdBrush.Ok() || bkdBrush.GetStyle() == wxTRANSPARENT || window->GetBackgroundColour() == wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE ) )
+ {
+ // walk up until we find something
+ while( parent != NULL )
+ {
+ if ( parent->GetBackgroundColour() != wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE ) )
+ {
+ // if we have any other colours in the hierarchy
+ bkdBrush.SetColour( parent->GetBackgroundColour() ) ;
+ break ;
+ }
+ if ( parent->IsKindOf( CLASSINFO(wxTopLevelWindow) ) )
+ {
+ bkdBrush = parent->MacGetBackgroundBrush() ;
+ break ;
+ }
+ if ( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) ) )
+ {
+ Rect extent = { 0 , 0 , 0 , 0 } ;
+ int x , y ;
+ x = y = 0 ;
+ wxSize size = parent->GetSize() ;
+ parent->MacClientToRootWindow( &x , &y ) ;
+ extent.left = x ;
+ extent.top = y ;
+ extent.top-- ;
+ extent.right = x + size.x ;
+ extent.bottom = y + size.y ;
+ bkdBrush.MacSetThemeBackground( kThemeBackgroundTabPane , (WXRECTPTR) &extent ) ;
+ break ;
+ }
+
+ parent = parent->GetParent() ;
+ }
+ }
+ if ( !bkdBrush.Ok() || bkdBrush.GetStyle() == wxTRANSPARENT )
+ {
+ // if we did not find something, use a default
+ bkdBrush.MacSetTheme( kThemeBrushDialogBackgroundActive ) ;
+ }
+#endif
+ return bkdBrush ;
+}
+
wxWindowDC::wxWindowDC()
{
CopyRgn( (RgnHandle) m_macBoundaryClipRgn , (RgnHandle) m_macCurrentClipRgn ) ;
m_macPort = UMAGetWindowPort( windowref ) ;
m_ok = TRUE ;
- SetBackground(window->MacGetBackgroundBrush());
+ SetBackground(MacGetBackgroundBrush(window));
}
wxWindowDC::~wxWindowDC()
m_macPort = UMAGetWindowPort( windowref ) ;
m_ok = TRUE ;
- SetBackground(window->MacGetBackgroundBrush());
+ SetBackground(MacGetBackgroundBrush(window));
SetFont( window->GetFont() ) ;
}
m_macPort = UMAGetWindowPort( windowref ) ;
m_ok = TRUE ;
- SetBackground(window->MacGetBackgroundBrush());
+ SetBackground(MacGetBackgroundBrush(window));
SetFont( window->GetFont() ) ;
}
wxWindow* wx = (wxWindow*) wxFindControlFromMacControl( iControl ) ;
if ( wx != NULL )
{
- /*
const wxBrush &brush = wx->MacGetBackgroundBrush() ;
if ( brush.Ok() )
{
-
wxDC::MacSetupBackgroundForCurrentPort( brush ) ;
- */
- // this clipping is only needed for non HIView
RgnHandle clip = NewRgn() ;
int x = 0 , y = 0;
DisposeRgn( clip ) ;
status = noErr ;
- /*
}
else if ( wx->MacIsUserPane() )
{
// setup of our parent ourselves
status = SetUpControlBackground( (ControlRef) wx->GetParent()->GetHandle() , iDepth , iIsColor ) ;
}
- */
}
}
break ;
#if !TARGET_API_MAC_OSX
// eventually we can fix some clipping issues be reactivating this hook
//if ( m_macIsUserPane )
- // SetControlColorProc( *m_peer , wxMacSetupControlBackgroundUPP ) ;
+ // SetControlColorProc( m_peer->GetControlRef() , wxMacSetupControlBackgroundUPP ) ;
#endif
m_peer->SetTitle( wxStripMenuCodes(m_label) ) ;
void wxWindowMac::OnEraseBackground(wxEraseEvent& event)
{
+#if TARGET_API_MAC_OSX
if ( m_macBackgroundBrush.Ok() == false || m_macBackgroundBrush.GetStyle() == wxTRANSPARENT )
{
event.Skip() ;
}
else
+#endif
event.GetDC()->Clear() ;
}