]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/button.cpp
Fix crash in wxDC::GetMultiLineTextExtent() after last commit.
[wxWidgets.git] / src / osx / carbon / button.cpp
index 14ff0c1f5570dfd1e6a3a7a9360f1fa96fc35a94..b96099be0d526c9c71c7142b2065ae2356bb8af5 100644 (file)
 //
 //
 
 //
 //
 
-wxSize wxButton::DoGetBestSize() const
-{
-    if ( GetId() == wxID_HELP )
-        return wxSize( 20 , 20 ) ;
-
-    wxSize sz = GetDefaultSize() ;
-
-    switch (GetWindowVariant())
-    {
-        case wxWINDOW_VARIANT_NORMAL:
-        case wxWINDOW_VARIANT_LARGE:
-            sz.y = 20 ;
-            break;
-
-        case wxWINDOW_VARIANT_SMALL:
-            sz.y = 17 ;
-            break;
-
-        case wxWINDOW_VARIANT_MINI:
-            sz.y = 15 ;
-            break;
-
-        default:
-            break;
-    }
-
-#if wxOSX_USE_CARBON
-    Rect    bestsize = { 0 , 0 , 0 , 0 } ;
-    m_peer->GetBestRect( &bestsize ) ;
-
-    int wBtn;
-    if ( EmptyRect( &bestsize ) || ( GetWindowStyle() & wxBU_EXACTFIT) )
-    {
-        Point bounds;
-
-        ControlFontStyleRec controlFont;
-        OSStatus err = m_peer->GetData<ControlFontStyleRec>( kControlEntireControl, kControlFontStyleTag, &controlFont );
-        verify_noerr( err );
-
-        wxCFStringRef str( m_label,  GetFont().GetEncoding() );
-
-#if wxOSX_USE_ATSU_TEXT
-        SInt16 baseline;
-        if ( m_font.MacGetThemeFontID() != kThemeCurrentPortFont )
-        {
-            err = GetThemeTextDimensions(
-                (!m_label.empty() ? (CFStringRef)str : CFSTR(" ")),
-                m_font.MacGetThemeFontID(), kThemeStateActive, false, &bounds, &baseline );
-            verify_noerr( err );
-        }
-        else
-#endif
-        {
-            wxClientDC dc(const_cast<wxButton*>(this));
-            wxCoord width, height ;
-            dc.GetTextExtent( m_label , &width, &height);
-            bounds.h = width;
-            bounds.v = height;
-        }
-
-        wBtn = bounds.h + sz.y;
-    }
-    else
-    {
-        wBtn = bestsize.right - bestsize.left ;
-        // non 'normal' window variants don't return the correct height
-        // sz.y = bestsize.bottom - bestsize.top ;
-    }
-    if ((wBtn > sz.x) || ( GetWindowStyle() & wxBU_EXACTFIT))
-        sz.x = wBtn;
-#endif
-
-    return sz ;
-}
-
-wxSize wxButton::GetDefaultSize()
-{
-    int wBtn = 70 ;
-    int hBtn = 20 ;
-
-    return wxSize(wBtn, hBtn);
-}
-
-wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer, 
-                                    wxWindowMac* parent, 
-                                    wxWindowID id, 
+wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
+                                    wxWindowMac* parent,
+                                    wxWindowID id,
                                     const wxString& label,
                                     const wxString& label,
-                                    const wxPoint& pos, 
+                                    const wxPoint& pos,
                                     const wxSize& size,
                                     const wxSize& size,
-                                    long WXUNUSED(style), 
-                                    long WXUNUSED(extraStyle)) 
+                                    long WXUNUSED(style),
+                                    long WXUNUSED(extraStyle))
 {
     OSStatus err;
     Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
 {
     OSStatus err;
     Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
@@ -136,18 +53,21 @@ wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
     {
         // Button height is static in Mac, can't be changed, so we need to force it here
         int maxHeight;
     {
         // Button height is static in Mac, can't be changed, so we need to force it here
         int maxHeight;
-        switch (wxpeer->GetWindowVariant() ) 
+        switch (wxpeer->GetWindowVariant() )
         {
         {
+            default:
+                wxFAIL_MSG( "unknown window variant" );
+                // fall through
+
             case wxWINDOW_VARIANT_NORMAL:
             case wxWINDOW_VARIANT_LARGE:
                 maxHeight = 20 ;
                 break;
             case wxWINDOW_VARIANT_SMALL:
                 maxHeight = 17;
             case wxWINDOW_VARIANT_NORMAL:
             case wxWINDOW_VARIANT_LARGE:
                 maxHeight = 20 ;
                 break;
             case wxWINDOW_VARIANT_SMALL:
                 maxHeight = 17;
+                break;
             case wxWINDOW_VARIANT_MINI:
                 maxHeight = 15;
             case wxWINDOW_VARIANT_MINI:
                 maxHeight = 15;
-            default:
-                break;
         }
         bounds.bottom = bounds.top + maxHeight ;
         wxpeer->SetMaxSize( wxSize( wxpeer->GetMaxWidth() , maxHeight ));
         }
         bounds.bottom = bounds.top + maxHeight ;
         wxpeer->SetMaxSize( wxSize( wxpeer->GetMaxWidth() , maxHeight ));
@@ -169,33 +89,33 @@ wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
 }
 
 void wxMacControl::SetDefaultButton( bool isDefault )
 }
 
 void wxMacControl::SetDefaultButton( bool isDefault )
-{ 
+{
     SetData(kControlButtonPart , kControlPushButtonDefaultTag , (Boolean) isDefault ) ;
 }
 
     SetData(kControlButtonPart , kControlPushButtonDefaultTag , (Boolean) isDefault ) ;
 }
 
-wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer, 
-                                    wxWindowMac* parent, 
-                                    wxWindowID WXUNUSED(id), 
+wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer,
+                                    wxWindowMac* parent,
+                                    wxWindowID WXUNUSED(id),
                                     const wxString& label,
                                     const wxString& label,
-                                    const wxPoint& pos, 
+                                    const wxPoint& pos,
                                     const wxSize& size,
                                     const wxSize& size,
-                                    long WXUNUSED(style), 
-                                    long WXUNUSED(extraStyle)) 
+                                    long WXUNUSED(style),
+                                    long WXUNUSED(extraStyle))
 {
     Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
     wxMacControl* peer = new wxMacControl(wxpeer) ;
 
     OSStatus err = CreateDisclosureTriangleControl(
 {
     Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
     wxMacControl* peer = new wxMacControl(wxpeer) ;
 
     OSStatus err = CreateDisclosureTriangleControl(
-            MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds, 
+            MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds,
             kControlDisclosureTrianglePointDefault,
             wxCFStringRef( label ),
             0,    // closed
             TRUE, // draw title
             TRUE, // auto toggle back and forth
             peer->GetControlRefAddr() );
             kControlDisclosureTrianglePointDefault,
             wxCFStringRef( label ),
             0,    // closed
             TRUE, // draw title
             TRUE, // auto toggle back and forth
             peer->GetControlRefAddr() );
-           
+
     verify_noerr( err );
     return peer;
 }
     verify_noerr( err );
     return peer;
 }
-                                    
+