xref: /reactos/sdk/lib/3rdparty/cardlib/dropzone.cpp (revision dc0433f0)
1 //
2 //    CardLib - DropZone class
3 //
4 //    Freeware
5 //    Copyright J Brown 2001
6 //
7 
8 #include "cardlib.h"
9 
10 bool CardWindow::RegisterDropZone(int id, RECT *rect, pDropZoneProc proc)
11 {
12     if(nNumDropZones == MAXDROPZONES)
13         return false;
14 
15     DropZone *dz = new DropZone(id, rect, proc);
16 
17     dropzone[nNumDropZones++] = dz;
18 
19     return false;
20 }
21 
22 DropZone *CardWindow::GetDropZoneFromRect(RECT *rect)
23 {
24     for(int i = 0; i < nNumDropZones; i++)
25     {
26         RECT inter;
27         RECT zone;
28 
29         //if any part of the drag rectangle falls within a drop zone,
30         //let that take priority over any other card stack.
31         dropzone[i]->GetZone(&zone);
32 
33         if(IntersectRect(&inter, rect, &zone))
34         {
35             //see if the callback wants us to drop a card on
36             //a particular stack
37             return dropzone[i];
38         }
39     }
40 
41     return 0;
42 }
43 
44 bool CardWindow::DeleteDropZone(int id)
45 {
46     for(int i = 0; i < nNumDropZones; i++)
47     {
48         if(dropzone[i]->id == id)
49         {
50             DropZone *dz = dropzone[i];
51 
52             //shift any after this one backwards
53             for(int j = i; j < nNumDropZones - 1; j++)
54             {
55                 dropzone[j] = dropzone[j + 1];
56             }
57 
58             delete dz;
59             nNumDropZones--;
60             return true;
61         }
62     }
63 
64     return false;
65 }
66 
67