adapting text object data handling along the GTK2 lines
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35255 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -276,39 +276,30 @@ bool wxTextDataObject::SetData(const wxDataFormat& format,
|
||||
|
||||
#elif wxUSE_UNICODE && defined(__WXMAC__)
|
||||
|
||||
static wxMBConvUTF16 sUTF16Converter ;
|
||||
|
||||
static inline wxMBConv& GetConv(const wxDataFormat& format)
|
||||
{
|
||||
return format == wxDF_UNICODETEXT ? sUTF16Converter : (wxMBConv&) wxConvLocal;
|
||||
}
|
||||
|
||||
size_t wxTextDataObject::GetDataSize(const wxDataFormat& format) const
|
||||
{
|
||||
if (format == wxDF_UNICODETEXT)
|
||||
{
|
||||
// host native is UTF16
|
||||
wxMBConvUTF16 converter ;
|
||||
return converter.WC2MB( NULL , GetText().c_str() , 0 ) + 2; // add space for trailing unichar 0
|
||||
}
|
||||
else // == wxDF_TEXT
|
||||
{
|
||||
wxCharBuffer buffer = wxConvLibc.cWX2MB( GetText().c_str() );
|
||||
// in some cases "buffer" is null (e.g. Mac OS X)
|
||||
return buffer ? strlen( (const char*) buffer ) + 1 : 0;
|
||||
}
|
||||
size_t len = GetConv(format).WC2MB( NULL , GetText().c_str() , 0 )
|
||||
+ ( format == wxDF_UNICODETEXT ? 2 : 1 ) ;
|
||||
return len ;
|
||||
}
|
||||
|
||||
bool wxTextDataObject::GetDataHere(const wxDataFormat& format, void *buf) const
|
||||
{
|
||||
if (format == wxDF_UNICODETEXT)
|
||||
{
|
||||
// host native is UTF16
|
||||
wxMBConvUTF16 converter ;
|
||||
size_t len = converter.WC2MB( NULL , GetText().c_str() , 0 ) ;
|
||||
wxCharBuffer buffer = converter.cWX2MB( GetText().c_str() );
|
||||
memcpy( (char*) buf, (const char*) buffer , len + 2); // trailing unichar 0
|
||||
}
|
||||
else
|
||||
{
|
||||
wxCharBuffer buffer = wxConvLibc.cWX2MB( GetText().c_str() );
|
||||
// in some cases "buffer" is null (e.g. Mac OS X)
|
||||
if (buffer)
|
||||
strcpy( (char*) buf, (const char*) buffer );
|
||||
}
|
||||
wxCharBuffer buffer = GetConv(format).cWX2MB( GetText().c_str() );
|
||||
if ( !buffer )
|
||||
return false;
|
||||
|
||||
size_t len = GetConv(format).WC2MB( NULL , GetText().c_str() , 0 )
|
||||
+ ( format == wxDF_UNICODETEXT ? 2 : 1 ) ;
|
||||
|
||||
memcpy( (char*) buf, (const char*) buffer , len ); // trailing (uni)char 0
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -316,15 +307,12 @@ bool wxTextDataObject::GetDataHere(const wxDataFormat& format, void *buf) const
|
||||
bool wxTextDataObject::SetData(const wxDataFormat& format,
|
||||
size_t WXUNUSED(len), const void *buf)
|
||||
{
|
||||
if (format == wxDF_UNICODETEXT)
|
||||
{
|
||||
// host native is UTF16
|
||||
wxMBConvUTF16 converter ;
|
||||
SetText( converter.cMB2WX( (const char*) buf ) );
|
||||
}
|
||||
else
|
||||
SetText( wxConvLibc.cMB2WX( (const char*) buf ) );
|
||||
|
||||
wxWCharBuffer buffer = GetConv(format).cMB2WX((const char *)buf);
|
||||
if ( !buffer )
|
||||
return false;
|
||||
|
||||
SetText(buffer);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user