-static const wxChar *TRACE_CLIPBOARD = wxT("clipboard");
-
-
-void * wxGetClipboardData( wxDataFormat dataFormat, long *len )
-{
- OSStatus err = noErr;
- void * data = NULL;
- Size byteCount;
-
- switch (dataFormat.GetType())
- {
- case wxDF_OEMTEXT:
- dataFormat = wxDF_TEXT;
- break;
-
- case wxDF_TEXT:
- case wxDF_UNICODETEXT:
- break;
-
- case wxDF_BITMAP:
- case wxDF_METAFILE:
- break;
-
- default:
- // custom datatype
- break;
- }
-
-#if TARGET_CARBON
- ScrapRef scrapRef;
-
- err = GetCurrentScrap( &scrapRef );
- if ( err != noTypeErr && err != memFullErr )
- {
- ScrapFlavorFlags flavorFlags;
-
- err = GetScrapFlavorFlags( scrapRef, dataFormat.GetFormatId(), &flavorFlags );
- if (err == noErr)
- {
- err = GetScrapFlavorSize( scrapRef, dataFormat.GetFormatId(), &byteCount );
- if (err == noErr)
- {
- Size allocSize = byteCount;
- if ( dataFormat.GetType() == wxDF_TEXT )
- allocSize += 1;
- else if ( dataFormat.GetType() == wxDF_UNICODETEXT )
- allocSize += 2;
-
- data = new char[ allocSize ];
-
- if (( err = GetScrapFlavorData( scrapRef, dataFormat.GetFormatId(), &byteCount , data )) == noErr )
- {
- *len = allocSize;
- if ( dataFormat.GetType() == wxDF_TEXT )
- ((char*)data)[ byteCount ] = 0;
- if ( dataFormat.GetType() == wxDF_UNICODETEXT )
- {
- // "data" format is UTF16, so 2 bytes = one character
- // wxChar size depends on platform, so just clear last 2 bytes
- ((char*)data)[ byteCount + 0 ] =
- ((char*)data)[ byteCount + 1 ] = 0;
- }
- }
- else
- {
- delete [] (char*)data;
- data = NULL;
- }
- }
- }
- }
-
-#else
- long offset;
- Handle datahandle = NewHandle( 0 );
- HLock( datahandle );
- err = (OSStatus)GetScrap( datahandle, dataFormat.GetFormatId(), &offset );
- HUnlock( datahandle );
- if ( GetHandleSize( datahandle ) > 0 )
- {
- byteCount = GetHandleSize( datahandle );
- Size allocSize = byteCount;
- if ( dataFormat.GetType() == wxDF_TEXT )
- allocSize += 1;
- else if ( dataFormat.GetType() == wxDF_UNICODETEXT )
- allocSize += 2;
-
- data = new char[ allocSize ];
-
- memcpy( (char*) data, (char*) *datahandle, byteCount );
- if ( dataFormat.GetType() == wxDF_TEXT )
- ((char*)data)[ byteCount ] = 0;
- else if ( dataFormat.GetType() == wxDF_UNICODETEXT )
- ((wxChar*)data)[ byteCount / 2 ] = 0;
- *len = byteCount;
- }
-
- DisposeHandle( datahandle );
-#endif
-
- if (err != noErr)
- {
- wxLogSysError(wxT("Failed to get clipboard data."));
-
- return NULL;
- }
-
- if (dataFormat.GetType() == wxDF_TEXT)
- wxMacConvertNewlines10To13( (char*)data );
-
- return data;
-}