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__)
|
#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
|
size_t wxTextDataObject::GetDataSize(const wxDataFormat& format) const
|
||||||
{
|
{
|
||||||
if (format == wxDF_UNICODETEXT)
|
size_t len = GetConv(format).WC2MB( NULL , GetText().c_str() , 0 )
|
||||||
{
|
+ ( format == wxDF_UNICODETEXT ? 2 : 1 ) ;
|
||||||
// host native is UTF16
|
return len ;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxTextDataObject::GetDataHere(const wxDataFormat& format, void *buf) const
|
bool wxTextDataObject::GetDataHere(const wxDataFormat& format, void *buf) const
|
||||||
{
|
{
|
||||||
if (format == wxDF_UNICODETEXT)
|
wxCharBuffer buffer = GetConv(format).cWX2MB( GetText().c_str() );
|
||||||
{
|
if ( !buffer )
|
||||||
// host native is UTF16
|
return false;
|
||||||
wxMBConvUTF16 converter ;
|
|
||||||
size_t len = converter.WC2MB( NULL , GetText().c_str() , 0 ) ;
|
size_t len = GetConv(format).WC2MB( NULL , GetText().c_str() , 0 )
|
||||||
wxCharBuffer buffer = converter.cWX2MB( GetText().c_str() );
|
+ ( format == wxDF_UNICODETEXT ? 2 : 1 ) ;
|
||||||
memcpy( (char*) buf, (const char*) buffer , len + 2); // trailing unichar 0
|
|
||||||
}
|
memcpy( (char*) buf, (const char*) buffer , len ); // trailing (uni)char 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 );
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -316,14 +307,11 @@ bool wxTextDataObject::GetDataHere(const wxDataFormat& format, void *buf) const
|
|||||||
bool wxTextDataObject::SetData(const wxDataFormat& format,
|
bool wxTextDataObject::SetData(const wxDataFormat& format,
|
||||||
size_t WXUNUSED(len), const void *buf)
|
size_t WXUNUSED(len), const void *buf)
|
||||||
{
|
{
|
||||||
if (format == wxDF_UNICODETEXT)
|
wxWCharBuffer buffer = GetConv(format).cMB2WX((const char *)buf);
|
||||||
{
|
if ( !buffer )
|
||||||
// host native is UTF16
|
return false;
|
||||||
wxMBConvUTF16 converter ;
|
|
||||||
SetText( converter.cMB2WX( (const char*) buf ) );
|
SetText(buffer);
|
||||||
}
|
|
||||||
else
|
|
||||||
SetText( wxConvLibc.cMB2WX( (const char*) buf ) );
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user