]> git.saurik.com Git - wxWidgets.git/commitdiff
moving UniChar code to one place
authorStefan Csomor <csomor@advancedconcepts.ch>
Thu, 29 Jun 2006 17:23:37 +0000 (17:23 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Thu, 29 Jun 2006 17:23:37 +0000 (17:23 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39893 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/corefoundation/cfstring.h
src/mac/corefoundation/cfstring.cpp

index 5e9f2ffc2642390af9feccfed48b74846a1ca1ad..4024ce62a7887e7da9df4aa949adf6917aeaceba 100644 (file)
@@ -88,4 +88,21 @@ private:
     DECLARE_NO_COPY_CLASS( wxMacCFStringHolder )
 } ;
 
+// corresponding class for holding UniChars (native unicode characters)
+
+class wxMacUniCharBuffer
+{
+public :
+    wxMacUniCharBuffer( const wxString &str ) ;
+    
+    ~wxMacUniCharBuffer() ;
+        
+    UniChar* GetBuffer() ;
+       
+    UniCharCount GetChars() ;
+    
+private :
+    UniChar* m_ubuf ;
+    UniCharCount m_chars ;
+};
 #endif //__WXCFSTRINGHOLDER_H__
index ac72e36b7f25426ecabfe91fd80eb71a50162433..4e71aeee0d5418b62dec726c5d92381069ccc5ed 100644 (file)
@@ -707,3 +707,50 @@ wxString wxMacCFStringHolder::AsString(wxFontEncoding encoding)
     delete[] buf ;
     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 ;
+}