--- /dev/null
+//
+// 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;
+}
+