applying 1890924

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51656 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2008-02-11 14:21:34 +00:00
parent 25645ca5b1
commit eb0751b147

View File

@@ -610,12 +610,23 @@ wxCFStringRef::wxCFStringRef( const wxString &st , wxFontEncoding WXUNUSED_IN_UN
(UniChar*)str.wc_str() , str.Len() ) );
#else
wxMBConvUTF16 converter ;
size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
UniChar *unibuf = new UniChar[ unicharlen / sizeof(UniChar) + 1 ] ;
converter.WC2MB( (char*)unibuf , str.wc_str() , unicharlen ) ;
reset( CFStringCreateWithCharacters( kCFAllocatorDefault ,
unibuf , unicharlen / sizeof(UniChar) ) );
delete[] unibuf ;
size_t unicharbytes = converter.FromWChar( NULL , 0 , str.wc_str() , str.Length() ) ;
wxASSERT( unicharbytes != wxCONV_FAILED );
if ( unicharbytes == wxCONV_FAILED )
{
// create an empty string
reset( wxCFRetain( CFSTR("") ) );
}
else
{
// unicharbytes: number of bytes needed for UTF-16 encoded string (without terminating null)
// unichars: number of UTF-16 characters (without terminating null)
size_t unichars = unicharbytes / sizeof(UniChar) ;
UniChar *unibuf = new UniChar[ unichars ] ;
converter.FromWChar( (char*)unibuf , unicharbytes , str.wc_str() , str.Length() ) ;
reset( CFStringCreateWithCharacters( kCFAllocatorDefault , unibuf , unichars ) ) ;
delete[] unibuf ;
}
#endif
#else // not wxUSE_UNICODE
reset( CFStringCreateWithCString( kCFAllocatorSystemDefault , str.c_str() ,