From: Stefan Csomor Date: Thu, 29 Jun 2006 17:23:37 +0000 (+0000) Subject: moving UniChar code to one place X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/dfd468aafd8c2b0c6db2c8d56ddca04e26c45715?ds=sidebyside moving UniChar code to one place git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39893 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/mac/corefoundation/cfstring.h b/include/wx/mac/corefoundation/cfstring.h index 5e9f2ffc26..4024ce62a7 100644 --- a/include/wx/mac/corefoundation/cfstring.h +++ b/include/wx/mac/corefoundation/cfstring.h @@ -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__ diff --git a/src/mac/corefoundation/cfstring.cpp b/src/mac/corefoundation/cfstring.cpp index ac72e36b7f..4e71aeee0d 100644 --- a/src/mac/corefoundation/cfstring.cpp +++ b/src/mac/corefoundation/cfstring.cpp @@ -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 ; +}