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