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