]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/renderer.cpp
fix more unused parameters and variables warnings
[wxWidgets.git] / src / mac / carbon / renderer.cpp
index 15d9ef20b171e992a080215259e14d5f96342ccf..182ee909127f63e76cf3234c3e7dca198f89b4b5 100644 (file)
@@ -42,7 +42,7 @@ public:
         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,
@@ -57,21 +57,28 @@ public:
         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,
@@ -79,7 +86,7 @@ private:
                             int flags,
                             int kind,
                             int adornment);
-        
+
     // the tree buttons
     wxBitmap m_bmpTreeExpanded;
     wxBitmap m_bmpTreeCollapsed;
@@ -149,8 +156,13 @@ int wxRendererMac::DrawHeaderButton( wxWindow *win,
         CGContextTranslateCTM( cgContext, 0, bounds.bottom - bounds.top );
         CGContextScaleCTM( cgContext, 1, -1 );
 
-        HIShapeReplacePathInCGContext( HIShapeCreateWithQDRgn( (RgnHandle) dc.m_macCurrentClipRgn ), cgContext );
-        CGContextClip( cgContext );
+        HIShapeRef shape = HIShapeCreateWithQDRgn( (RgnHandle) dc.m_macCurrentClipRgn );
+        if ( shape != 0 )
+        {
+            HIShapeReplacePathInCGContext( shape , cgContext );
+            CFRelease( shape );
+            CGContextClip( cgContext );
+        }
         HIViewConvertRect( &headerRect, (HIViewRef) win->GetHandle(), (HIViewRef) win->MacGetTopLevelWindow()->GetHandle() );
 #endif
 
@@ -168,7 +180,7 @@ int wxRendererMac::DrawHeaderButton( wxWindow *win,
             // 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
@@ -181,7 +193,7 @@ int wxRendererMac::DrawHeaderButton( wxWindow *win,
                 headerRect.size.width += 25;
                 HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );
                 CGContextRestoreGState( cgContext );
-            }                
+            }
         }
 
 #if wxMAC_USE_CORE_GRAPHICS
@@ -206,8 +218,8 @@ int wxRendererMac::DrawHeaderButton( wxWindow *win,
 
 int wxRendererMac::GetHeaderButtonHeight(wxWindow* WXUNUSED(win))
 {
-    SInt32             standardHeight;
-    OSStatus           errStatus;
+    SInt32      standardHeight;
+    OSStatus        errStatus;
 
     errStatus = GetThemeMetric( kThemeMetricListHeaderHeight, &standardHeight );
     if (errStatus == noErr)
@@ -233,7 +245,7 @@ void wxRendererMac::DrawTreeItemButton( wxWindow *win,
     const wxCoord y = rect.y;
     const wxCoord w = rect.width;
     const wxCoord h = rect.height;
-#endif    
+#endif
 
     dc.SetBrush( *wxTRANSPARENT_BRUSH );
 
@@ -283,10 +295,10 @@ void wxRendererMac::DrawTreeItemButton( wxWindow *win,
             // 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
@@ -370,16 +382,22 @@ wxRendererMac::DrawItemSelectionRect(wxWindow *win,
                                      const wxRect& rect,
                                      int flags )
 {
-    RGBColor selColor; 
-    if (flags & wxCONTROL_SELECTED)
+    if ( !(flags & wxCONTROL_SELECTED) )
+        return;
+        
+    if (flags & wxCONTROL_FOCUSED)
     {
-        if (flags & wxCONTROL_FOCUSED)
-            GetThemeBrushAsColor(kThemeBrushAlternatePrimaryHighlightColor, 32, true, &selColor);
-        else
-            GetThemeBrushAsColor(kThemeBrushSecondaryHighlightColor, 32, true, &selColor);
+        if (!IsControlActive( (ControlRef)win->GetHandle() ))
+            flags = wxCONTROL_SELECTED;
     }
-    
-    wxBrush selBrush = wxBrush( wxColour( selColor.red, selColor.green, selColor.blue ), wxSOLID );
+
+    RGBColor selColor;
+    GetThemeBrushAsColor(flags & wxCONTROL_FOCUSED
+                            ? kThemeBrushAlternatePrimaryHighlightColor
+                            : kThemeBrushSecondaryHighlightColor,
+                         32, true, &selColor);
+
+    wxBrush selBrush(selColor);
 
     dc.SetPen( *wxTRANSPARENT_PEN );
     dc.SetBrush( selBrush );
@@ -454,6 +472,8 @@ wxRendererMac::DrawMacThemeButton(wxWindow *win,
             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 );
@@ -466,6 +486,18 @@ wxRendererMac::DrawMacThemeButton(wxWindow *win,
     }
 }
 
+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,
@@ -473,17 +505,78 @@ 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;
+    }
+
+#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
+}
+