]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/button.cpp
Start on ShowWindowModal for OS X Cocoa. Not working properly as children do not...
[wxWidgets.git] / src / osx / carbon / button.cpp
index 14ff0c1f5570dfd1e6a3a7a9360f1fa96fc35a94..ea77565438ec6650021bb88c0f863d26711c1f4c 100644 (file)
@@ -66,14 +66,21 @@ wxSize wxButton::DoGetBestSize() const
         OSStatus err = m_peer->GetData<ControlFontStyleRec>( kControlEntireControl, kControlFontStyleTag, &controlFont );
         verify_noerr( err );
 
-        wxCFStringRef str( m_label,  GetFont().GetEncoding() );
+        // GetThemeTextDimensions will cache strings and the documentation
+        // says not to use the NoCopy string creation calls.
+        // This also means that we can't use CFSTR without
+        // -fno-constant-cfstrings if the library might be unloaded,
+        // as GetThemeTextDimensions may cache a pointer to our
+        // unloaded segment.
+        wxCFStringRef str( !m_label.empty() ? m_label : wxString(" "),
+                          GetFont().GetEncoding() );
 
 #if wxOSX_USE_ATSU_TEXT
         SInt16 baseline;
         if ( m_font.MacGetThemeFontID() != kThemeCurrentPortFont )
         {
             err = GetThemeTextDimensions(
-                (!m_label.empty() ? (CFStringRef)str : CFSTR(" ")),
+                (CFStringRef)str,
                 m_font.MacGetThemeFontID(), kThemeStateActive, false, &bounds, &baseline );
             verify_noerr( err );
         }
@@ -110,14 +117,14 @@ wxSize wxButton::GetDefaultSize()
     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 wxPoint& pos, 
+                                    const wxPoint& pos,
                                     const wxSize& size,
-                                    long WXUNUSED(style), 
-                                    long WXUNUSED(extraStyle)) 
+                                    long WXUNUSED(style),
+                                    long WXUNUSED(extraStyle))
 {
     OSStatus err;
     Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
@@ -136,18 +143,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;
-        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;
+                break;
             case wxWINDOW_VARIANT_MINI:
                 maxHeight = 15;
-            default:
-                break;
         }
         bounds.bottom = bounds.top + maxHeight ;
         wxpeer->SetMaxSize( wxSize( wxpeer->GetMaxWidth() , maxHeight ));
@@ -169,33 +179,33 @@ wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
 }
 
 void wxMacControl::SetDefaultButton( bool 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 wxPoint& pos, 
+                                    const wxPoint& pos,
                                     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(
-            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() );
-           
+
     verify_noerr( err );
     return peer;
 }
-                                    
+