//
//    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;
}