Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / sdk / lib / 3rdparty / cardlib / dropzone.cpp
diff --git a/sdk/lib/3rdparty/cardlib/dropzone.cpp b/sdk/lib/3rdparty/cardlib/dropzone.cpp
new file mode 100644 (file)
index 0000000..ae62470
--- /dev/null
@@ -0,0 +1,66 @@
+//
+//    CardLib - DropZone class
+//
+//    Freeware
+//    Copyright J Brown 2001
+//
+
+#include "cardlib.h"
+
+bool CardWindow::RegisterDropZone(int id, RECT *rect, pDropZoneProc proc)
+{
+    if(nNumDropZones == MAXDROPZONES)
+        return false;
+
+    DropZone *dz = new DropZone(id, rect, proc);
+
+    dropzone[nNumDropZones++] = dz;
+
+    return false;
+}
+
+DropZone *CardWindow::GetDropZoneFromRect(RECT *rect)
+{
+    for(int i = 0; i < nNumDropZones; i++)
+    {
+        RECT inter;
+        RECT zone;
+
+        //if any part of the drag rectangle falls within a drop zone,
+        //let that take priority over any other card stack.
+        dropzone[i]->GetZone(&zone);
+
+        if(IntersectRect(&inter, rect, &zone))
+        {
+            //see if the callback wants us to drop a card on
+            //a particular stack
+            return dropzone[i];
+        }
+    }
+
+    return 0;
+}
+
+bool CardWindow::DeleteDropZone(int id)
+{
+    for(int i = 0; i < nNumDropZones; i++)
+    {
+        if(dropzone[i]->id == id)
+        {
+            DropZone *dz = dropzone[i];
+
+            //shift any after this one backwards
+            for(int j = i; j < nNumDropZones - 1; j++)
+            {
+                dropzone[j] = dropzone[j + 1];
+            }
+
+            delete dz;
+            nNumDropZones--;
+            return true;
+        }
+    }
+
+    return false;
+}
+