wxHeaderButtonParams* params = NULL );
virtual int GetHeaderButtonHeight(wxWindow *win);
-
+
// draw the expanded/collapsed icon for a tree control item
virtual void DrawTreeItemButton( wxWindow *win,
wxDC& dc,
wxOrientation orient,
int flags = 0 );
+ virtual void DrawCheckBox(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags = 0);
+
virtual void DrawComboBoxDropButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0);
-
+
virtual void DrawPushButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0);
-
+
virtual void DrawItemSelectionRect(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0);
+ virtual void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0);
+
private:
void DrawMacThemeButton(wxWindow *win,
wxDC& dc,
int flags,
int kind,
int adornment);
-
+
// the tree buttons
wxBitmap m_bmpTreeExpanded;
wxBitmap m_bmpTreeCollapsed;
wxHeaderSortIconType sortArrow,
wxHeaderButtonParams* params )
{
-#if !wxMAC_USE_CORE_GRAPHICS
- const wxCoord x = dc.LogicalToDeviceX(rect.x);
- const wxCoord y = dc.LogicalToDeviceY(rect.y);
- const wxCoord w = dc.LogicalToDeviceXRel(rect.width);
- const wxCoord h = dc.LogicalToDeviceYRel(rect.height);
-#else
- // now the wxGCDC is using native transformations
const wxCoord x = rect.x;
const wxCoord y = rect.y;
const wxCoord w = rect.width;
const wxCoord h = rect.height;
-#endif
dc.SetBrush( *wxTRANSPARENT_BRUSH );
HIRect headerRect = CGRectMake( x, y, w, h );
if ( !dc.IsKindOf( CLASSINFO( wxPaintDC ) ) )
{
- Rect r =
- {
- (short) headerRect.origin.y, (short) headerRect.origin.x,
- (short) (headerRect.origin.y + headerRect.size.height),
- (short) (headerRect.origin.x + headerRect.size.width)
- };
-
- RgnHandle updateRgn = NewRgn();
- RectRgn( updateRgn, &r );
- HIViewSetNeedsDisplayInRegion( (HIViewRef) win->GetHandle(), updateRgn, true );
- DisposeRgn( updateRgn );
+ win->Refresh( &rect );
}
else
{
CGContextRef cgContext;
+ wxGCDCImpl *impl = (wxGCDCImpl*) dc.GetImpl();
-#if wxMAC_USE_CORE_GRAPHICS
- cgContext = (CGContextRef) dc.GetGraphicsContext()->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
+ cgContext = (CGContextRef) impl->GetGraphicsContext()->GetNativeContext();
{
HIThemeButtonDrawInfo drawInfo;
// The down arrow is drawn automatically, change it to an up arrow if needed.
if ( sortArrow == wxHDR_SORT_ICON_UP )
drawInfo.adornment = kThemeAdornmentHeaderButtonSortUp;
-
+
HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );
// If we don't want any arrows we need to draw over the one already there
headerRect.size.width += 25;
HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );
CGContextRestoreGState( cgContext );
- }
+ }
}
-
-#if wxMAC_USE_CORE_GRAPHICS
-#else
- QDEndCGContext( (CGrafPtr) dc.m_macPort, &cgContext );
-#endif
}
// Reserve room for the arrows before writing the label, and turn off the
int wxRendererMac::GetHeaderButtonHeight(wxWindow* WXUNUSED(win))
{
- SInt32 standardHeight;
- OSStatus errStatus;
+ SInt32 standardHeight;
+ OSStatus errStatus;
errStatus = GetThemeMetric( kThemeMetricListHeaderHeight, &standardHeight );
if (errStatus == noErr)
const wxRect& rect,
int flags )
{
-#if !wxMAC_USE_CORE_GRAPHICS
- const wxCoord x = dc.LogicalToDeviceX(rect.x);
- const wxCoord y = dc.LogicalToDeviceY(rect.y);
- const wxCoord w = dc.LogicalToDeviceXRel(rect.width);
- const wxCoord h = dc.LogicalToDeviceYRel(rect.height);
-#else
// now the wxGCDC is using native transformations
const wxCoord x = rect.x;
const wxCoord y = rect.y;
const wxCoord w = rect.width;
const wxCoord h = rect.height;
-#endif
dc.SetBrush( *wxTRANSPARENT_BRUSH );
HIRect headerRect = CGRectMake( x, y, w, h );
if ( !dc.IsKindOf( CLASSINFO( wxPaintDC ) ) )
{
- Rect r =
- {
- (short) headerRect.origin.y, (short) headerRect.origin.x,
- (short) (headerRect.origin.y + headerRect.size.height),
- (short) (headerRect.origin.x + headerRect.size.width)
- };
-
- RgnHandle updateRgn = NewRgn();
- RectRgn( updateRgn, &r );
- HIViewSetNeedsDisplayInRegion( (HIViewRef) win->GetHandle(), updateRgn, true );
- DisposeRgn( updateRgn );
+ win->Refresh( &rect );
}
else
{
CGContextRef cgContext;
-#if wxMAC_USE_CORE_GRAPHICS
- cgContext = (CGContextRef) dc.GetGraphicsContext()->GetNativeContext();
-#else
- Rect bounds;
-
- GetPortBounds( (CGrafPtr) dc.m_macPort, &bounds );
- QDBeginCGContext( (CGrafPtr) dc.m_macPort, &cgContext );
+ wxGCDCImpl *impl = (wxGCDCImpl*) dc.GetImpl();
+ cgContext = (CGContextRef) impl->GetGraphicsContext()->GetNativeContext();
- CGContextTranslateCTM( cgContext, 0, bounds.bottom - bounds.top );
- CGContextScaleCTM( cgContext, 1, -1 );
+ HIThemeButtonDrawInfo drawInfo;
+ HIRect labelRect;
- 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.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 );
-
- }
-
-#if wxMAC_USE_CORE_GRAPHICS
-#else
- QDEndCGContext( (CGrafPtr) dc.m_macPort, &cgContext );
-#endif
+ 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 );
}
}
else
splitterRect = CGRectMake( 0, position, size.x, height );
-#if !wxMAC_USE_CORE_GRAPHICS
- HIViewConvertRect(
- &splitterRect,
- (HIViewRef) win->GetHandle(),
- (HIViewRef) win->MacGetTopLevelWindow()->GetHandle() );
-#endif
-
// under compositing we should only draw when called by the OS, otherwise just issue a redraw command
// strange redraw errors occur if we don't do this
if ( !dc.IsKindOf( CLASSINFO( wxPaintDC ) ) )
{
- Rect r =
- {
- (short) splitterRect.origin.y,
- (short) splitterRect.origin.x,
- (short) (splitterRect.origin.y + splitterRect.size.height),
- (short) (splitterRect.origin.x + splitterRect.size.width)
- };
-
- RgnHandle updateRgn = NewRgn();
- RectRgn( updateRgn, &r );
- HIViewSetNeedsDisplayInRegion( (HIViewRef) win->GetHandle(), updateRgn, true );
- DisposeRgn( updateRgn );
- }
+ wxRect rect( (int) splitterRect.origin.x, (int) splitterRect.origin.y, (int) splitterRect.size.width,
+ (int) splitterRect.size.height );
+ win->Refresh( &rect );
+ }
else
{
CGContextRef cgContext;
-
-#if wxMAC_USE_CORE_GRAPHICS
- cgContext = (CGContextRef) dc.GetGraphicsContext()->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 );
-#endif
+ wxGCDCImpl *impl = (wxGCDCImpl*) dc.GetImpl();
+ cgContext = (CGContextRef) impl->GetGraphicsContext()->GetNativeContext();
HIThemeSplitterDrawInfo drawInfo;
drawInfo.version = 0;
drawInfo.state = kThemeStateActive;
drawInfo.adornment = hasMetal ? kHIThemeSplitterAdornmentMetal : kHIThemeSplitterAdornmentNone;
HIThemeDrawPaneSplitter( &splitterRect, &drawInfo, cgContext, kHIThemeOrientationNormal );
-
-#if wxMAC_USE_CORE_GRAPHICS
-#else
- QDEndCGContext( (CGrafPtr) dc.m_macPort, &cgContext );
-#endif
}
}
void
-wxRendererMac::DrawItemSelectionRect(wxWindow *win,
+wxRendererMac::DrawItemSelectionRect(wxWindow * WXUNUSED(win),
wxDC& dc,
const wxRect& rect,
- int flags )
+ int flags)
{
- RGBColor selColor;
- if (flags & wxCONTROL_SELECTED)
- {
- if (flags & wxCONTROL_FOCUSED)
- GetThemeBrushAsColor(kThemeBrushAlternatePrimaryHighlightColor, 32, true, &selColor);
- else
- GetThemeBrushAsColor(kThemeBrushSecondaryHighlightColor, 32, true, &selColor);
- }
-
- wxBrush selBrush = wxBrush( wxColour( selColor.red, selColor.green, selColor.blue ), wxSOLID );
+ if ( !(flags & wxCONTROL_SELECTED) )
+ return;
+
+ wxColour col( wxMacCreateCGColorFromHITheme( (flags & wxCONTROL_FOCUSED) ?
+ kThemeBrushAlternatePrimaryHighlightColor
+ : kThemeBrushSecondaryHighlightColor ) );
+ wxBrush selBrush( col );
dc.SetPen( *wxTRANSPARENT_PEN );
dc.SetBrush( selBrush );
int kind,
int adornment)
{
-#if !wxMAC_USE_CORE_GRAPHICS
- const wxCoord x = dc.LogicalToDeviceX(rect.x);
- const wxCoord y = dc.LogicalToDeviceY(rect.y);
- const wxCoord w = dc.LogicalToDeviceXRel(rect.width);
- const wxCoord h = dc.LogicalToDeviceYRel(rect.height);
-#else
// now the wxGCDC is using native transformations
const wxCoord x = rect.x;
const wxCoord y = rect.y;
const wxCoord w = rect.width;
const wxCoord h = rect.height;
-#endif
dc.SetBrush( *wxTRANSPARENT_BRUSH );
HIRect headerRect = CGRectMake( x, y, w, h );
if ( !dc.IsKindOf( CLASSINFO( wxPaintDC ) ) )
{
- Rect r =
- {
- (short) headerRect.origin.y, (short) headerRect.origin.x,
- (short) (headerRect.origin.y + headerRect.size.height),
- (short) (headerRect.origin.x + headerRect.size.width)
- };
-
- RgnHandle updateRgn = NewRgn();
- RectRgn( updateRgn, &r );
- HIViewSetNeedsDisplayInRegion( (HIViewRef) win->GetHandle(), updateRgn, true );
- DisposeRgn( updateRgn );
+ win->Refresh( &rect );
}
else
{
+ wxGCDCImpl *impl = (wxGCDCImpl*) dc.GetImpl();
CGContextRef cgContext;
+ cgContext = (CGContextRef) impl->GetGraphicsContext()->GetNativeContext();
-#if wxMAC_USE_CORE_GRAPHICS
- cgContext = (CGContextRef) dc.GetGraphicsContext()->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;
+ HIThemeButtonDrawInfo drawInfo;
+ HIRect labelRect;
- memset( &drawInfo, 0, sizeof(drawInfo) );
- drawInfo.version = 0;
- drawInfo.kind = kind;
- drawInfo.state = (flags & wxCONTROL_DISABLED) ? kThemeStateInactive : kThemeStateActive;
- drawInfo.value = (flags & wxCONTROL_SELECTED) ? kThemeButtonOn : kThemeButtonOff;
- drawInfo.adornment = adornment;
-
- HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );
- }
-
-#if wxMAC_USE_CORE_GRAPHICS
-#else
- QDEndCGContext( (CGrafPtr) dc.m_macPort, &cgContext );
-#endif
+ memset( &drawInfo, 0, sizeof(drawInfo) );
+ drawInfo.version = 0;
+ drawInfo.kind = kind;
+ drawInfo.state = (flags & wxCONTROL_DISABLED) ? kThemeStateInactive : kThemeStateActive;
+ drawInfo.value = (flags & wxCONTROL_SELECTED) ? kThemeButtonOn : kThemeButtonOff;
+ if (flags & wxCONTROL_UNDETERMINED)
+ drawInfo.value = kThemeButtonMixed;
+ drawInfo.adornment = adornment;
+
+ HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );
}
}
+void
+wxRendererMac::DrawCheckBox(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags)
+{
+ if (flags & wxCONTROL_CHECKED)
+ flags |= wxCONTROL_SELECTED;
+
+ DrawMacThemeButton(win, dc, rect, flags,
+ kThemeCheckBox, kThemeAdornmentNone);
+}
void
wxRendererMac::DrawComboBoxDropButton(wxWindow *win,
const wxRect& rect,
int flags)
{
+ int kind;
+ if (win->GetWindowVariant() == wxWINDOW_VARIANT_SMALL || (win->GetParent() && win->GetParent()->GetWindowVariant() == wxWINDOW_VARIANT_SMALL))
+ kind = kThemeArrowButtonSmall;
+ else if (win->GetWindowVariant() == wxWINDOW_VARIANT_MINI || (win->GetParent() && win->GetParent()->GetWindowVariant() == wxWINDOW_VARIANT_MINI))
+ kind = kThemeArrowButtonMini;
+ else
+ kind = kThemeArrowButton;
+
DrawMacThemeButton(win, dc, rect, flags,
- kThemeArrowButton, kThemeAdornmentArrowDownArrow);
+ kind, kThemeAdornmentArrowDownArrow);
}
-
+
void
wxRendererMac::DrawPushButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags)
{
+ int kind;
+ if (win->GetWindowVariant() == wxWINDOW_VARIANT_SMALL || (win->GetParent() && win->GetParent()->GetWindowVariant() == wxWINDOW_VARIANT_SMALL))
+ kind = kThemeBevelButtonSmall;
+ // There is no kThemeBevelButtonMini, but in this case, use Small
+ else if (win->GetWindowVariant() == wxWINDOW_VARIANT_MINI || (win->GetParent() && win->GetParent()->GetWindowVariant() == wxWINDOW_VARIANT_MINI))
+ kind = kThemeBevelButtonSmall;
+ else
+ kind = kThemeBevelButton;
+
DrawMacThemeButton(win, dc, rect, flags,
- kThemeBevelButton, kThemeAdornmentNone);
+ kind, kThemeAdornmentNone);
+}
+
+void
+wxRendererMac::DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, int flags)
+{
+ if (!win)
+ {
+ wxDelegateRendererNative::DrawFocusRect(win, dc, rect, flags);
+ return;
+ }
+
+ CGRect cgrect = CGRectMake( rect.x , rect.y , rect.width, rect.height ) ;
+
+ HIThemeFrameDrawInfo info ;
+ memset( &info, 0 , sizeof(info) ) ;
+
+ info.version = 0 ;
+ info.kind = 0 ;
+ info.state = kThemeStateActive;
+ info.isFocused = true ;
+
+ CGContextRef cgContext = (CGContextRef) win->MacGetCGContextRef() ;
+ wxASSERT( cgContext ) ;
+
+ HIThemeDrawFocusRect( &cgrect , true , cgContext , kHIThemeOrientationNormal ) ;
}
-
+