Пример #1
0
/*
 * @implemented
 */
ULONG
APIENTRY
CLIPOBJ_cEnumStart(
    _Inout_ CLIPOBJ *pco,
    _In_ BOOL bAll,
    _In_ ULONG iType,
    _In_ ULONG iDirection,
    _In_ ULONG cMaxRects)
{
    XCLIPOBJ* Clip = CONTAINING_RECORD(pco, XCLIPOBJ, ClipObj);
    SORTCOMP CompareFunc;

    Clip->EnumPos = 0;
    Clip->EnumMax = (cMaxRects > 0) ? cMaxRects : Clip->RectCount;

    if (CD_ANY != iDirection && Clip->EnumOrder != iDirection)
    {
        switch (iDirection)
        {
            case CD_RIGHTDOWN:
                CompareFunc = (SORTCOMP) CompareRightDown;
                break;

            case CD_RIGHTUP:
                CompareFunc = (SORTCOMP) CompareRightUp;
                break;

            case CD_LEFTDOWN:
                CompareFunc = (SORTCOMP) CompareLeftDown;
                break;

            case CD_LEFTUP:
                CompareFunc = (SORTCOMP) CompareLeftUp;
                break;

            default:
                ERR("Invalid iDirection %lu\n", iDirection);
                iDirection = Clip->EnumOrder;
                CompareFunc = NULL;
                break;
        }

        if (NULL != CompareFunc)
        {
            EngSort((PBYTE) Clip->Rects, sizeof(RECTL), Clip->RectCount, CompareFunc);
        }

        Clip->EnumOrder = iDirection;
    }

    /* Return the number of rectangles enumerated */
    if ((cMaxRects > 0) && (Clip->RectCount > cMaxRects))
    {
        return 0xFFFFFFFF;
    }

    return Clip->RectCount;
}
Пример #2
0
/*
 * @implemented
 */
ULONG
APIENTRY
CLIPOBJ_cEnumStart(
    _Inout_ CLIPOBJ *pco,
    _In_ BOOL bAll,
    _In_ ULONG iType,
    _In_ ULONG iDirection,
    _In_ ULONG cMaxRects)
{
    CLIPGDI *ClipGDI = ObjToGDI(pco, CLIP);
    SORTCOMP CompareFunc;

    ClipGDI->EnumPos = 0;
    ClipGDI->EnumMax = (cMaxRects > 0) ? cMaxRects : ClipGDI->EnumRects.c;

    if (CD_ANY != iDirection && ClipGDI->EnumOrder != iDirection)
    {
        switch (iDirection)
        {
            case CD_RIGHTDOWN:
                CompareFunc = (SORTCOMP) CompareRightDown;
                break;

            case CD_RIGHTUP:
                CompareFunc = (SORTCOMP) CompareRightUp;
                break;

            case CD_LEFTDOWN:
                CompareFunc = (SORTCOMP) CompareLeftDown;
                break;

            case CD_LEFTUP:
                CompareFunc = (SORTCOMP) CompareLeftUp;
                break;

            default:
                DPRINT1("Invalid iDirection %lu\n", iDirection);
                iDirection = ClipGDI->EnumOrder;
                CompareFunc = NULL;
                break;
        }

        if (NULL != CompareFunc)
        {
            EngSort((PBYTE) ClipGDI->EnumRects.arcl, sizeof(RECTL), ClipGDI->EnumRects.c, CompareFunc);
        }

        ClipGDI->EnumOrder = iDirection;
    }

    /* Return the number of rectangles enumerated */
    if ((cMaxRects > 0) && (ClipGDI->EnumRects.c > cMaxRects))
    {
        return 0xFFFFFFFF;
    }

    return ClipGDI->EnumRects.c;
}
Пример #3
0
/*
 * @implemented
 */
ULONG APIENTRY
CLIPOBJ_cEnumStart(
    IN CLIPOBJ* ClipObj,
    IN BOOL ShouldDoAll,
    IN ULONG ClipType,
    IN ULONG BuildOrder,
    IN ULONG MaxRects)
{
    CLIPGDI *ClipGDI = ObjToGDI(ClipObj, CLIP);
    SORTCOMP CompareFunc;

    ClipGDI->EnumPos = 0;
    ClipGDI->EnumMax = (MaxRects > 0) ? MaxRects : ClipGDI->EnumRects.c;

    if (CD_ANY != BuildOrder && ClipGDI->EnumOrder != BuildOrder)
    {
        switch (BuildOrder)
        {
            case CD_RIGHTDOWN:
                CompareFunc = (SORTCOMP) CompareRightDown;
                break;

            case CD_RIGHTUP:
                CompareFunc = (SORTCOMP) CompareRightUp;
                break;

            case CD_LEFTDOWN:
                CompareFunc = (SORTCOMP) CompareLeftDown;
                break;

            case CD_LEFTUP:
                CompareFunc = (SORTCOMP) CompareLeftUp;
                break;

            default:
                DPRINT1("Invalid BuildOrder %d\n", BuildOrder);
                BuildOrder = ClipGDI->EnumOrder;
                CompareFunc = NULL;
                break;
        }

        if (NULL != CompareFunc)
        {
            EngSort((PBYTE) ClipGDI->EnumRects.arcl, sizeof(RECTL), ClipGDI->EnumRects.c, CompareFunc);
        }

        ClipGDI->EnumOrder = BuildOrder;
    }

    /* Return the number of rectangles enumerated */
    if ((MaxRects > 0) && (ClipGDI->EnumRects.c > MaxRects))
    {
        return 0xFFFFFFFF;
    }

    return ClipGDI->EnumRects.c;
}