]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/renderer.cpp
don't do anything before including the PCH header
[wxWidgets.git] / src / mac / carbon / renderer.cpp
index 849f287b025c2f6f4a99197db6257db66dab3cbe..e0f9bc23e2f4734b4eb8e1cac2bf0d7226c5f01e 100644 (file)
@@ -72,6 +72,8 @@ public:
                                        const wxRect& rect,
                                        int flags = 0);
 
                                        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,
 private:
     void DrawMacThemeButton(wxWindow *win,
                             wxDC& dc,
@@ -206,8 +208,8 @@ int wxRendererMac::DrawHeaderButton( wxWindow *win,
 
 int wxRendererMac::GetHeaderButtonHeight(wxWindow* WXUNUSED(win))
 {
 
 int wxRendererMac::GetHeaderButtonHeight(wxWindow* WXUNUSED(win))
 {
-    SInt32             standardHeight;
-    OSStatus           errStatus;
+    SInt32      standardHeight;
+    OSStatus        errStatus;
 
     errStatus = GetThemeMetric( kThemeMetricListHeaderHeight, &standardHeight );
     if (errStatus == noErr)
 
     errStatus = GetThemeMetric( kThemeMetricListHeaderHeight, &standardHeight );
     if (errStatus == noErr)
@@ -370,16 +372,16 @@ wxRendererMac::DrawItemSelectionRect(wxWindow *win,
                                      const wxRect& rect,
                                      int flags )
 {
                                      const wxRect& rect,
                                      int flags )
 {
+    if ( !(flags & wxCONTROL_SELECTED) )
+        return;
+
     RGBColor selColor;
     RGBColor selColor;
-    if (flags & wxCONTROL_SELECTED)
-    {
-        if (flags & wxCONTROL_FOCUSED)
-            GetThemeBrushAsColor(kThemeBrushAlternatePrimaryHighlightColor, 32, true, &selColor);
-        else
-            GetThemeBrushAsColor(kThemeBrushSecondaryHighlightColor, 32, true, &selColor);
-    }
+    GetThemeBrushAsColor(flags & wxCONTROL_FOCUSED
+                            ? kThemeBrushAlternatePrimaryHighlightColor
+                            : kThemeBrushSecondaryHighlightColor,
+                         32, true, &selColor);
 
 
-    wxBrush selBrush = wxBrush( wxColour( selColor.red, selColor.green, selColor.blue ), wxSOLID );
+    wxBrush selBrush(selColor);
 
     dc.SetPen( *wxTRANSPARENT_PEN );
     dc.SetBrush( selBrush );
 
     dc.SetPen( *wxTRANSPARENT_PEN );
     dc.SetBrush( selBrush );
@@ -504,3 +506,47 @@ wxRendererMac::DrawPushButton(wxWindow *win,
                        kind, 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
+}
+