]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/toolbar.cpp
debug handling. More broken Apple 'goodness'
[wxWidgets.git] / src / mac / carbon / toolbar.cpp
index e445850c6061701dd81c7ea39f88fe257868801d..c200e86f7b1d2514232f7a8467f3a936d6c2e91e 100644 (file)
@@ -123,10 +123,9 @@ static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef
                 wxToolBarTool* tbartool = (wxToolBarTool*)data ;
                 if ( tbartool->CanBeToggled() )
                 {
-                    tbartool->Toggle( GetControl32BitValue( (ControlRef) tbartool->GetControlHandle() ) ) ;
+                    ((wxToolBar*)tbartool->GetToolBar())->ToggleTool(tbartool->GetId(), GetControl32BitValue((ControlRef)tbartool->GetControlHandle()));
                 }
                 ((wxToolBar*)tbartool->GetToolBar())->OnLeftClick( tbartool->GetId() , tbartool -> IsToggled() ) ;
-
                 result = noErr; 
             }
             break ;
@@ -212,7 +211,7 @@ void wxToolBarTool::SetPosition(const wxPoint& position)
         GetControlBounds( m_controlHandle , &contrlRect ) ; 
         int former_mac_x = contrlRect.left ;
         int former_mac_y = contrlRect.top ;
-        wxSize sz = GetToolBar()->GetToolSize() ;
+        GetToolBar()->GetToolSize() ;
         
         if ( mac_x != former_mac_x || mac_y != former_mac_y )
         {
@@ -349,12 +348,32 @@ bool wxToolBar::Realize()
         node = node->GetNext();
     }
 
+    bool lastWasRadio = FALSE;
     node = m_tools.GetFirst();
     while (node)
     {
         wxToolBarTool *tool = (wxToolBarTool *)node->GetData();
         wxSize cursize = tool->GetSize() ;
         
+        bool isRadio = FALSE;
+
+        if ( tool->IsButton() && tool->GetKind() == wxITEM_RADIO )
+        {
+            if ( !lastWasRadio )
+            {
+                if (tool->Toggle(true))
+                {
+                    DoToggleTool(tool, true);
+                }
+            }
+            isRadio = TRUE;
+        }
+        else
+        {
+            isRadio = FALSE;
+        }
+        lastWasRadio = isRadio;
+
         // for the moment we just do a single row/column alignement
         if ( x + cursize.x > maxWidth )
             maxWidth = x + cursize.x ;
@@ -551,8 +570,41 @@ void wxToolBar::OnPaint(wxPaintEvent& event)
     if ( toolbarrect.top < 0 )
         toolbarrect.top = 0 ;
 */
-    UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
+    if ( !MacGetTopLevelWindow()->MacGetMetalAppearance() )
+    {
+        UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
+    }
+    else
+    {
+#if TARGET_API_MAC_OSX
+#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2
+    if ( UMAGetSystemVersion() >= 0x1030 )
+    {
+        HIRect hiToolbarrect = CGRectMake( dc.YLOG2DEVMAC(0) , dc.XLOG2DEVMAC(0) , 
+        dc.YLOG2DEVREL(h) , dc.XLOG2DEVREL(w) );
+        CGContextRef cgContext ;
+        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 ) ;
 
+        {
+            HIThemeBackgroundDrawInfo drawInfo ;
+            drawInfo.version = 0 ;
+            drawInfo.state = kThemeStateActive ;
+            drawInfo.kind = kThemeBackgroundMetal ;
+            HIThemeApplyBackground( &hiToolbarrect, &drawInfo , cgContext,kHIThemeOrientationNormal) ;
+        }
+        QDEndCGContext( (CGrafPtr) dc.m_macPort , &cgContext ) ;
+    }
+    else
+#endif
+    {
+        UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
+    }
+#endif
+    }
     event.Skip() ;
 }