]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/dnd_osx.cpp
Applied Blit system options optimization to StretchBlit
[wxWidgets.git] / src / osx / dnd_osx.cpp
index c19bf6eb8f0aae1c9bb1df1f083e937fc1bd78e7..351d2b4007bedcf15cf91059b6d1edfad0666539 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Stefan Csomor
 // Modified by:
 // Created:     1998-01-01
-// RCS-ID:      $Id: dnd.cpp 61724 2009-08-21 10:41:26Z VZ $
+// RCS-ID:      $Id$
 // Copyright:   (c) 1998 Stefan Csomor
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -36,7 +36,7 @@ wxDragResult wxDropTarget::OnDragOver(
 
 wxDataFormat wxDropTarget::GetMatchingPair()
 {
-    wxFAIL_MSG("wxDropTarget::GetMatchingPair() not implemented in src/osx/carbon/dnd.cpp");
+    wxFAIL_MSG("wxDropTarget::GetMatchingPair() not implemented in src/osx/dnd_osx.cpp");
     return wxDF_INVALID;
 }
 
@@ -61,6 +61,95 @@ wxDragResult wxDropTarget::OnData(
     return GetData() ? def : wxDragNone;
 }
 
+bool wxDropTarget::CurrentDragHasSupportedFormat()
+{
+    bool supported = false;
+    if (m_dataObject == NULL)
+        return false;
+
+    if ( wxDropSource* currentSource = wxDropSource::GetCurrentDropSource() )
+    {
+        wxDataObject* data = currentSource->GetDataObject();
+
+        if ( data )
+        {
+            size_t formatcount = data->GetFormatCount();
+            wxDataFormat *array = new wxDataFormat[formatcount];
+            data->GetAllFormats( array );
+            for (size_t i = 0; !supported && i < formatcount; i++)
+            {
+                wxDataFormat format = array[i];
+                if ( m_dataObject->IsSupported( format, wxDataObject::Set ) )
+                {
+                    supported = true;
+                    break;
+                }
+            }
+
+            delete [] array;
+        }
+    }
+
+    if ( !supported )
+    {
+        supported = m_dataObject->HasDataInPasteboard( m_currentDragPasteboard );
+    }
+
+    return supported;
+}
+
+bool wxDropTarget::GetData()
+{
+    if (m_dataObject == NULL)
+        return false;
+
+    if ( !CurrentDragHasSupportedFormat() )
+        return false;
+
+    bool transferred = false;
+    if ( wxDropSource* currentSource = wxDropSource::GetCurrentDropSource() )
+    {
+        wxDataObject* data = currentSource->GetDataObject();
+
+        if (data != NULL)
+        {
+            size_t formatcount = data->GetFormatCount();
+            wxDataFormat *array = new wxDataFormat[formatcount];
+            data->GetAllFormats( array );
+            for (size_t i = 0; !transferred && i < formatcount; i++)
+            {
+                wxDataFormat format = array[i];
+                if ( m_dataObject->IsSupported( format, wxDataObject::Set ) )
+                {
+                    int size = data->GetDataSize( format );
+                    transferred = true;
+
+                    if (size == 0)
+                    {
+                        m_dataObject->SetData( format, 0, 0 );
+                    }
+                    else
+                    {
+                        char *d = new char[size];
+                        data->GetDataHere( format, (void*)d );
+                        m_dataObject->SetData( format, size, d );
+                        delete [] d;
+                    }
+                }
+            }
+
+            delete [] array;
+        }
+    }
+
+    if ( !transferred )
+    {
+        transferred = m_dataObject->GetFromPasteboard( m_currentDragPasteboard );
+    }
+
+    return transferred;
+}
+
 //-------------------------------------------------------------------------
 // wxDropSource
 //-------------------------------------------------------------------------
@@ -75,7 +164,7 @@ wxDropSource::~wxDropSource()
 bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
 {
     const wxCursor& cursor = GetCursor(effect);
-    bool result = cursor.Ok();
+    bool result = cursor.IsOk();
 
     if ( result )
         cursor.MacInstall();