X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2480cf888f6813fa69915ac927eff599f6161014..6ac23e25b85468c7885f6ab43ca0a45f6458af2e:/src/mac/carbon/renderer.cpp diff --git a/src/mac/carbon/renderer.cpp b/src/mac/carbon/renderer.cpp index f6f4878aaa..62ff9846c9 100644 --- a/src/mac/carbon/renderer.cpp +++ b/src/mac/carbon/renderer.cpp @@ -133,14 +133,12 @@ void wxRendererMac::DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, - int WXUNUSED(flags)) + int flags) { - const int CORNER = 1; - - const wxCoord x = rect.x-1, - y = rect.y-1, - w = rect.width, - h = rect.height; + const wxCoord x = dc.XLOG2DEV(rect.x-1), + y = dc.YLOG2DEV(rect.y-1), + w = dc.XLOG2DEVREL(rect.width), + h = dc.YLOG2DEVREL(rect.height); int major,minor; wxGetOsVersion( &major, &minor ); @@ -164,20 +162,23 @@ wxRendererMac::DrawHeaderButton(wxWindow *win, { CGContextRef cgContext ; #if wxMAC_USE_CORE_GRAPHICS - cgContext = dynamic_cast(dc.GetGraphicContext())->GetNativeContext() ; + cgContext = ((wxMacCGContext*)(dc.GetGraphicContext()))->GetNativeContext() ; #else Rect bounds ; GetPortBounds( (CGrafPtr) dc.m_macPort , &bounds ) ; QDBeginCGContext( (CGrafPtr) dc.m_macPort , &cgContext ) ; CGContextTranslateCTM( cgContext , 0 , bounds.bottom - bounds.top ) ; CGContextScaleCTM( cgContext , 1 , -1 ) ; + HIShapeReplacePathInCGContext( HIShapeCreateWithQDRgn( (RgnHandle) dc.m_macCurrentClipRgn ) , cgContext ) ; + CGContextClip( cgContext ) ; + HIViewConvertRect( &headerRect , (HIViewRef) win->GetHandle() , (HIViewRef) win->MacGetTopLevelWindow()->GetHandle() ) ; #endif { HIThemeButtonDrawInfo drawInfo ; HIRect labelRect ; memset( &drawInfo , 0 , sizeof(drawInfo) ) ; drawInfo.version = 0 ; - drawInfo.state = kThemeStateActive ; + drawInfo.state = ( flags & wxCONTROL_DISABLED ) ? kThemeStateInactive : kThemeStateActive ; drawInfo.kind = kThemeListHeaderButton ; drawInfo.value = 0 ; drawInfo.adornment = kThemeAdornmentNone ; @@ -191,54 +192,23 @@ wxRendererMac::DrawHeaderButton(wxWindow *win, } else #endif - if ( major >= 10 ) { - dc.SetPen( wxPen( wxColour( 0xC5 , 0xC5 , 0xC5 ) , 1 , wxSOLID ) ); - dc.DrawRectangle( x, y+CORNER, 1, h-CORNER ); // left - // The right border is overdrawn by the left border of the right neighbouring - // header (to maintain a proper single pixel border). Except for the - // rightmost header of the listctrl. - dc.DrawRectangle( x+w+(CORNER*2), y+CORNER, 1, h-CORNER ); // right - dc.SetPen( wxPen( wxColour( 0xB1 , 0xB1 , 0xB1 ) , 1 , wxSOLID ) ); - dc.DrawRectangle( x, y+h, w+(CORNER*3), 1 ); // bottom - dc.DrawRectangle( x, y, w+(CORNER*3), 1 ); // top - - // Do a fill of the interior for background: - dc.SetPen( wxPen( wxColour( 0xF6 , 0xF6 , 0xF6 ) , 1 , wxSOLID ) ); - dc.DrawRectangle( x+CORNER, y+CORNER, w+CORNER, h-CORNER ); - - // Do the gradient fill: - static int grayValues[] = - { - 0xF6, 0xF2, 0xEF, 0xED, 0xED, 0xEB, 0xEA, 0xEA, 0xE8, - 0xE8, 0xE2, 0xE5, 0xE8, 0xEB, 0xEF, 0xF2, 0xFD - }; - int i; - for (i=0; i < h && i < (int)WXSIZEOF(grayValues); i++) - { - dc.SetPen( wxPen( wxColour( grayValues[i] , grayValues[i] , grayValues[i] ), - 1 , wxSOLID ) ); - dc.DrawRectangle( x+CORNER, y+CORNER+i, w+CORNER, 1 ); - } + wxMacWindowClipper clipper(win) ; + Rect rect = { y , x , y + h , x + w } ; + wxPoint origin = win->GetClientAreaOrigin() ; + int dx , dy ; + dx = origin.x ; + dy = origin.y ; + win->MacWindowToRootWindow( &dx , &dy ) ; + OffsetRect( &rect , dx , dy ) ; + + ThemeButtonDrawInfo drawInfo ; + memset( &drawInfo , 0 , sizeof(drawInfo) ) ; + drawInfo.state = ( flags & wxCONTROL_DISABLED ) ? kThemeStateInactive : kThemeStateActive ; + drawInfo.value = 0 ; + drawInfo.adornment = kThemeAdornmentNone ; + DrawThemeButton( &rect , kThemeListHeaderButton , &drawInfo , NULL , NULL , NULL , 0 ) ; } - else - { - dc.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNSHADOW ) , 1 , wxSOLID ) ); - dc.DrawLine( x+w-CORNER+1, y, x+w, y+h ); // right (outer) - dc.DrawRectangle( x, y+h, w+1, 1 ); // bottom (outer) - - wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID ); - - dc.SetPen( pen ); - dc.DrawLine( x+w-CORNER, y, x+w-1, y+h ); // right (inner) - dc.DrawRectangle( x+1, y+h-1, w-2, 1 ); // bottom (inner) - - dc.SetPen( *wxWHITE_PEN ); - dc.DrawRectangle( x, y, w-CORNER+1, 1 ); // top (outer) - dc.DrawRectangle( x, y, 1, h ); // left (outer) - dc.DrawLine( x, y+h-1, x+1, y+h-1 ); - dc.DrawLine( x+w-1, y, x+w-1, y+1 ); - } } void @@ -318,7 +288,7 @@ wxRendererMac::DrawSplitterSash(wxWindow *win, { CGContextRef cgContext ; #if wxMAC_USE_CORE_GRAPHICS - cgContext = dynamic_cast(dc.GetGraphicContext())->GetNativeContext() ; + cgContext = ((wxMacCGContext*)(dc.GetGraphicContext()))->GetNativeContext() ; #else Rect bounds ; GetPortBounds( (CGrafPtr) dc.m_macPort , &bounds ) ;