- 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 );
- }
+ CGContextRef cgContext;
+
+ wxGCDCImpl *impl = (wxGCDCImpl*) dc.GetImpl();
+ cgContext = (CGContextRef) impl->GetGraphicsContext()->GetNativeContext();
+
+ HIThemeButtonDrawInfo drawInfo;
+ HIRect labelRect;
+
+ memset( &drawInfo, 0, sizeof(drawInfo) );
+ drawInfo.version = 0;
+ drawInfo.kind = kThemeDisclosureButton;
+ drawInfo.state = (flags & wxCONTROL_DISABLED) ? kThemeStateInactive : kThemeStateActive;
+ // Apple mailing list posts say to use the arrow adornment constants, but those don't work.
+ // We need to set the value using the 'old' DrawThemeButton constants instead.
+ drawInfo.value = (flags & wxCONTROL_EXPANDED) ? kThemeDisclosureDown : kThemeDisclosureRight;
+ drawInfo.adornment = kThemeAdornmentNone;
+
+ HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );