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,
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;
// 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
int wxRendererMac::GetHeaderButtonHeight(wxWindow* WXUNUSED(win))
{
- SInt32 standardHeight;
- OSStatus errStatus;
+ SInt32 standardHeight;
+ OSStatus errStatus;
errStatus = GetThemeMetric( kThemeMetricListHeaderHeight, &standardHeight );
if (errStatus == noErr)
const wxCoord y = rect.y;
const wxCoord w = rect.width;
const wxCoord h = rect.height;
-#endif
+#endif
dc.SetBrush( *wxTRANSPARENT_BRUSH );
// 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;
+ drawInfo.adornment = kThemeAdornmentNone;
HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );
-
+
}
#if wxMAC_USE_CORE_GRAPHICS
const wxRect& rect,
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;
+
+ RGBColor selColor;
+ GetThemeBrushAsColor(flags & wxCONTROL_FOCUSED
+ ? kThemeBrushAlternatePrimaryHighlightColor
+ : kThemeBrushSecondaryHighlightColor,
+ 32, true, &selColor);
+
+ wxBrush selBrush(selColor);
dc.SetPen( *wxTRANSPARENT_PEN );
dc.SetBrush( selBrush );
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;
+ }
+
+#if wxMAC_USE_CORE_GRAPHICS
+ {
+ 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 ) ;
+ }
+#else
+ // FIXME: not yet working for !wxMAC_USE_CORE_GRAPHICS
+ {
+ Rect r;
+ r.left = rect.x; r.top = rect.y; r.right = rect.GetRight(); r.bottom = rect.GetBottom();
+ wxTopLevelWindowMac* top = win->MacGetTopLevelWindow();
+ if ( top )
+ {
+ wxPoint pt(0, 0) ;
+ wxMacControl::Convert( &pt , win->GetPeer() , top->GetPeer() ) ;
+ OffsetRect( &r , pt.x , pt.y ) ;
+ }
+
+ DrawThemeFocusRect( &r , true ) ;
+ }
+#endif
}
-
+