]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/corefoundation/cfstring.cpp
use safer RemoveEventHandler() instead of PopEventHandler() (patch 1678016)
[wxWidgets.git] / src / mac / corefoundation / cfstring.cpp
index 078df1e308da30b4ccc9c1ffe0eaaa4dc91377b0..8cfdec84b80dfe889a239b2b04b9138042db527a 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 
 #include "wx/wxprec.h"
+
 #ifndef WX_PRECOMP
     #include "wx/string.h"
     #include "wx/intl.h"
+    #if wxUSE_GUI
+        #include "wx/font.h"
+    #endif
 #endif
-#include "wx/mac/corefoundation/cfstring.h"
 
-#if wxUSE_GUI
-    #include "wx/font.h"
-#endif
+#include "wx/mac/corefoundation/cfstring.h"
 
 #ifdef __DARWIN__
     #include <CoreServices/CoreServices.h>
@@ -104,9 +105,10 @@ wxUint32 wxMacGetSystemEncFromFontEnc(wxFontEncoding encoding)
 #if wxUSE_GUI
         encoding = wxFont::GetDefaultEncoding() ;
 #else
-        encoding = wxLocale::GetSystemEncoding() ;
+        encoding = wxFONTENCODING_SYSTEM; // to be set below
 #endif
     }
+
     if ( encoding == wxFONTENCODING_SYSTEM )
     {
         enc = CFStringGetSystemEncoding();
@@ -633,7 +635,7 @@ wxFontEncoding wxMacGetFontEncFromSystemEnc(wxUint32 encoding)
 // converts this string into a carbon foundation string with optional pc 2 mac encoding
 void wxMacCFStringHolder::Assign( const wxString &st , wxFontEncoding encoding )
 {
-    Release() ; 
+    Release() ;
     if (st.IsEmpty())
     {
         m_cfs = CFSTR("") ;
@@ -666,6 +668,9 @@ void wxMacCFStringHolder::Assign( const wxString &st , wxFontEncoding encoding )
 
 wxString wxMacCFStringHolder::AsString(wxFontEncoding encoding)
 {
+    if ( m_cfs == NULL )
+        return wxEmptyString ;
+
     Size cflen = CFStringGetLength( m_cfs )  ;
     size_t noChars ;
     wxChar* buf = NULL ;
@@ -704,3 +709,49 @@ wxString wxMacCFStringHolder::AsString(wxFontEncoding encoding)
     return result ;
 }
 
+
+wxMacUniCharBuffer::wxMacUniCharBuffer( const wxString &str )
+{
+    m_chars = str.length() ;
+    m_ubuf = NULL ;
+
+#if SIZEOF_WCHAR_T == 4
+    wxMBConvUTF16 converter ;
+#if wxUSE_UNICODE
+    size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
+    m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
+    converter.WC2MB( (char*) m_ubuf , str.wc_str(), unicharlen + 2 ) ;
+#else
+    const wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
+    size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ;
+    m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
+    converter.WC2MB( (char*) m_ubuf , wchar.data() , unicharlen + 2 ) ;
+#endif
+    m_chars = unicharlen / 2 ;
+#else // SIZEOF_WCHAR_T is then 2
+#if wxUSE_UNICODE
+    m_ubuf = malloc( m_chars * 2 + 2 ) ;
+    memcpy( m_ubuf , (UniChar*) str.wc_str() , m_chars * 2 + 2 ) ;
+#else
+    wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
+    m_chars = wxWcslen( wchar.data() ) ;
+    m_ubuf = malloc( m_chars * 2 + 2 ) ;
+    memcpy( m_ubuf , (UniChar*) wchar.data() , m_chars * 2 + 2 ) ;
+#endif
+#endif
+}
+
+wxMacUniCharBuffer::~wxMacUniCharBuffer()
+{
+    free( m_ubuf ) ;
+}
+
+UniCharArrayPtr wxMacUniCharBuffer::GetBuffer() 
+{
+    return m_ubuf ;
+}
+   
+UniCharCount wxMacUniCharBuffer::GetChars()
+{
+    return m_chars ;
+}