+ for (size_t i = 0; i < m_data->GetFormatCount(); i++)
+ {
+ wxLogTrace( TRACE_CLIPBOARD,
+ wxT("wxClipboard now supports atom %s"),
+ array[i].GetId().c_str() );
+
+#if !TARGET_CARBON
+ OSErr err = noErr ;
+#else
+ OSStatus err = noErr ;
+#endif
+
+ switch ( array[i].GetType() )
+ {
+ case wxDF_TEXT:
+ case wxDF_OEMTEXT:
+ {
+ wxTextDataObject* textDataObject = (wxTextDataObject*) data;
+ wxCharBuffer buf = textDataObject->GetText().mb_str() ;
+ err = UMAPutScrap( strlen(buf) , kScrapFlavorTypeText , (void*) buf.data() ) ;
+ }
+ break ;
+#if wxUSE_UNICODE
+ case wxDF_UNICODETEXT :
+ {
+ wxTextDataObject* textDataObject = (wxTextDataObject*) data;
+ wxString str(textDataObject->GetText());
+ err = UMAPutScrap( str.Length() * sizeof(wxChar) , kScrapFlavorTypeUnicode , (void*) str.wc_str() ) ;
+ }
+ break ;
+#endif
+#if wxUSE_DRAG_AND_DROP
+ case wxDF_METAFILE:
+ {
+ wxMetafileDataObject* metaFileDataObject =
+ (wxMetafileDataObject*) data;
+ wxMetafile metaFile = metaFileDataObject->GetMetafile();
+ PicHandle pict = (PicHandle) metaFile.GetHMETAFILE() ;
+ HLock( (Handle) pict ) ;
+ err = UMAPutScrap( GetHandleSize( (Handle) pict ) , kScrapFlavorTypePicture , *pict ) ;
+ HUnlock( (Handle) pict ) ;
+ }
+ break ;
+#endif
+ case wxDF_BITMAP:
+ case wxDF_DIB:
+ {
+ bool created = false ;
+ PicHandle pict = NULL ;
+
+ wxBitmapDataObject* bitmapDataObject = (wxBitmapDataObject*) data ;
+ pict = (PicHandle) bitmapDataObject->GetBitmap().GetPict( &created ) ;
+
+ HLock( (Handle) pict ) ;
+ err = UMAPutScrap( GetHandleSize( (Handle) pict ) , kScrapFlavorTypePicture , *pict ) ;
+ HUnlock( (Handle) pict ) ;
+ if ( created )
+ KillPicture( pict ) ;
+ }
+ default:
+ break ;
+ }
+
+ }
+
+ delete[] array;
+
+ return true ;