X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/51d4293d689966f36adcb7649973c6e84a986d46..ff42758536f8d573409bf6c35528497ba36b4d0e:/src/mac/carbon/dataobj.cpp diff --git a/src/mac/carbon/dataobj.cpp b/src/mac/carbon/dataobj.cpp index e216ad5887..748c387ad6 100644 --- a/src/mac/carbon/dataobj.cpp +++ b/src/mac/carbon/dataobj.cpp @@ -14,16 +14,19 @@ #if wxUSE_DATAOBJ +#include "wx/dataobj.h" + #ifndef WX_PRECOMP -#include "wx/intl.h" + #include "wx/intl.h" + #include "wx/log.h" + #include "wx/dcmemory.h" + #include "wx/image.h" #endif -#include "wx/log.h" -#include "wx/dataobj.h" -#include "wx/dcmemory.h" #include "wx/mstream.h" -#include "wx/image.h" #include "wx/metafile.h" +#include "wx/tokenzr.h" + #include "wx/mac/private.h" #ifndef __DARWIN__ @@ -46,11 +49,6 @@ wxDataFormat::wxDataFormat( wxDataFormatId vType ) SetType( vType ); } -wxDataFormat::wxDataFormat( const wxChar *zId ) -{ - SetId( zId ); -} - wxDataFormat::wxDataFormat( const wxString& rId ) { SetId( rId ); @@ -96,7 +94,7 @@ void wxDataFormat::SetType( wxDataFormatId dataType ) wxString wxDataFormat::GetId() const { - wxCHECK_MSG( !IsStandard(), wxEmptyString , + wxCHECK_MSG( !IsStandard(), wxEmptyString, wxT("name of predefined format cannot be retrieved") ); return m_id; @@ -127,14 +125,14 @@ void wxDataFormat::SetId( NativeFormat format ) default: m_type = wxDF_PRIVATE; char text[5]; - strncpy( text, (char*)&format, 4 ); + memcpy( text, (const char*)&format, 4 ); text[4] = 0; m_id = wxString::FromAscii( text ); break; } } -void wxDataFormat::SetId( const wxChar* zId ) +void wxDataFormat::SetId( const wxString& zId ) { m_type = wxDF_PRIVATE; m_id = zId; @@ -168,14 +166,14 @@ bool wxDataObject::IsSupportedFormat( const wxDataFormat& rFormat, Direction vDi } else { - wxDataFormat* pFormats = new wxDataFormat[nFormatCount]; + wxDataFormat *pFormats = new wxDataFormat[nFormatCount]; GetAllFormats( pFormats, vDir ); for (size_t n = 0; n < nFormatCount; n++) { if (pFormats[n] == rFormat) { - found = true; + found = true; break; } } @@ -202,45 +200,56 @@ void wxTextDataObject::GetAllFormats( wxDataFormat *formats, wxDataObjectBase::D // wxFileDataObject // ---------------------------------------------------------------------------- -bool wxFileDataObject::GetDataHere( void *pBuf ) const +void wxFileDataObject::GetFileNames( wxCharBuffer &buf ) const { - if (pBuf == NULL) - return false; - - wxString sFilenames; + wxString filenames; for (size_t i = 0; i < m_filenames.GetCount(); i++) { - sFilenames += m_filenames[i]; - sFilenames += (wxChar)0; + filenames += m_filenames[i]; + filenames += wxT('\n'); } - memcpy( pBuf, sFilenames.mbc_str(), sFilenames.Len() + 1 ); + buf = filenames.fn_str(); +} + +bool wxFileDataObject::GetDataHere( void *pBuf ) const +{ + if (pBuf == NULL) + return false; + + wxCharBuffer buf; + size_t buffLength; + + GetFileNames( buf ); + buffLength = strlen( buf ); + memcpy( pBuf, (const char*)buf, buffLength + 1 ); return true; } size_t wxFileDataObject::GetDataSize() const { - size_t nRes = 0; + wxCharBuffer buf; + size_t buffLength; - for (size_t i = 0; i < m_filenames.GetCount(); i++) - { - nRes += m_filenames[i].Len(); - nRes += 1; - } + GetFileNames( buf ); + buffLength = strlen( buf ); - return nRes + 1; + return buffLength + 1; } -bool wxFileDataObject::SetData( size_t WXUNUSED(nSize), const void *pBuf ) +bool wxFileDataObject::SetData( size_t nSize, const void *pBuf ) { - m_filenames.Empty(); + wxString filenames; - // only add if this is not an empty string - // we can therefore clear the list by just setting an empty string - if ((*(const char*)pBuf) != 0) - AddFile( wxString::FromAscii( (char*)pBuf) ); +#if wxUSE_UNICODE + filenames = wxString( (const char*)pBuf, *wxConvFileName ); +#else + filenames = wxString (wxConvLocal.cWC2WX(wxConvFileName->cMB2WC( (const char*)pBuf))); +#endif + + m_filenames = wxStringTokenize( filenames, wxT("\n"), wxTOKEN_STRTOK ); return true; } @@ -297,8 +306,10 @@ void wxBitmapDataObject::Clear() { if (m_pictHandle != NULL) { +#ifndef __LP64__ if (m_pictCreated) KillPicture( (PicHandle)m_pictHandle ); +#endif m_pictHandle = NULL; } @@ -342,15 +353,21 @@ bool wxBitmapDataObject::SetData( size_t nSize, const void *pBuf ) // ownership is transferred to the bitmap m_pictCreated = false; - Rect frame = (**picHandle).picFrame; - +#ifndef __LP64__ + Rect frame; + wxMacGetPictureBounds( picHandle, &frame ); +#if wxUSE_METAFILE wxMetafile mf; mf.SetHMETAFILE( (WXHMETAFILE)m_pictHandle ); +#endif wxMemoryDC mdc; m_bitmap.Create( frame.right - frame.left, frame.bottom - frame.top ); mdc.SelectObject( m_bitmap ); +#if wxUSE_METAFILE mf.Play( &mdc ); +#endif mdc.SelectObject( wxNullBitmap ); +#endif return m_bitmap.Ok(); }