]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/choice.cpp
screendc implementation
[wxWidgets.git] / src / mac / carbon / choice.cpp
index d4268c6e97b765b6f4c21fef011dbb937b47b2c2..ff814d85612c467da7b0385e98fe893e58065bfc 100644 (file)
@@ -17,6 +17,7 @@
 
 #ifndef WX_PRECOMP
     #include "wx/menu.h"
+    #include "wx/dcclient.h"
 #endif
 
 #include "wx/mac/uma.h"
@@ -217,6 +218,12 @@ unsigned int wxChoice::GetCount() const
 
 int wxChoice::FindString( const wxString& s, bool bCase ) const
 {
+#if !wxUSE_STL
+    // Avoid assert for non-default args passed to sorted array Index
+    if ( HasFlag(wxCB_SORT) )
+        bCase = true;
+#endif
+
     return m_strings.Index( s , bCase ) ;
 }
 
@@ -294,13 +301,16 @@ wxSize wxChoice::DoGetBestSize() const
     int wLine;
 
 #if TARGET_CARBON
-    long metric ;
+    SInt32 metric ;
 
     GetThemeMetric( kThemeMetricPopupButtonHeight , &metric );
     lbHeight = metric ;
 #endif
 
     {
+#if wxMAC_USE_CORE_GRAPHICS
+        wxClientDC dc(const_cast<wxChoice*>(this));
+#else
         wxMacPortStateHelper st( UMAGetWindowPort( (WindowRef) MacGetTopLevelWindowRef() ) ) ;
         if ( m_font.Ok() )
         {
@@ -314,12 +324,16 @@ wxSize wxChoice::DoGetBestSize() const
             ::TextSize( 9 ) ;
             ::TextFace( 0 ) ;
         }
-
+#endif
         // Find the widest line
         for(unsigned int i = 0; i < GetCount(); i++)
         {
             wxString str(GetString(i));
-
+#if wxMAC_USE_CORE_GRAPHICS
+            wxCoord width, height ;
+            dc.GetTextExtent( str , &width, &height);
+            wLine = width ;
+#else
 #if wxUSE_UNICODE
             Point bounds = { 0, 0 } ;
             SInt16 baseline ;
@@ -335,15 +349,20 @@ wxSize wxChoice::DoGetBestSize() const
 #else
             wLine = ::TextWidth( str.c_str() , 0 , str.length() ) ;
 #endif
-
+#endif
             lbWidth = wxMax( lbWidth, wLine ) ;
         }
 
         // Add room for the popup arrow
         lbWidth += 2 * lbHeight ;
-
+#if wxMAC_USE_CORE_GRAPHICS
+        wxCoord width, height ;
+        dc.GetTextExtent( wxT("X"), &width, &height);
+        int cx = width ;
+#else
         // And just a bit more
         int cx = ::TextWidth( "X" , 0 , 1 ) ;
+#endif
         lbWidth += cx ;
     }