+static
+PPATH
+FASTCALL
+PATH_WidenPath(DC *dc)
+{
+ INT size;
+ UINT penWidth, penStyle;
+ DWORD obj_type;
+ PPATH pPath, pNewPath;
+ LPEXTLOGPEN elp;
+ PDC_ATTR pdcattr = dc->pdcattr;
+
+ pPath = PATH_LockPath(dc->dclevel.hPath);
+ if (!pPath)
+ {
+ EngSetLastError( ERROR_CAN_NOT_COMPLETE );
+ return NULL;
+ }
+
+ if (pPath->state != PATH_Closed)
+ {
+ DPRINT("PWP 1\n");
+ PATH_UnlockPath(pPath);
+ EngSetLastError(ERROR_CAN_NOT_COMPLETE);
+ return NULL;
+ }
+
+ size = GreGetObject(pdcattr->hpen, 0, NULL);
+ if (!size)
+ {
+ DPRINT("PWP 2\n");
+ PATH_UnlockPath(pPath);
+ EngSetLastError(ERROR_CAN_NOT_COMPLETE);
+ return NULL;
+ }
+
+ elp = ExAllocatePoolWithTag(PagedPool, size, TAG_PATH);
+ if (elp == NULL)
+ {
+ DPRINT("PWP 3\n");
+ PATH_UnlockPath(pPath);
+ EngSetLastError(ERROR_OUTOFMEMORY);
+ return NULL;
+ }
+
+ GreGetObject(pdcattr->hpen, size, elp);
+
+ obj_type = GDI_HANDLE_GET_TYPE(pdcattr->hpen);
+ if (obj_type == GDI_OBJECT_TYPE_PEN)
+ {
+ penStyle = ((LOGPEN*)elp)->lopnStyle;
+ }
+ else if (obj_type == GDI_OBJECT_TYPE_EXTPEN)
+ {
+ penStyle = elp->elpPenStyle;
+ }
+ else
+ {
+ DPRINT("PWP 4\n");
+ EngSetLastError(ERROR_CAN_NOT_COMPLETE);
+ ExFreePoolWithTag(elp, TAG_PATH);
+ PATH_UnlockPath(pPath);
+ return NULL;
+ }
+
+ penWidth = elp->elpWidth;
+ ExFreePoolWithTag(elp, TAG_PATH);
+
+ /* The function cannot apply to cosmetic pens */
+ if (obj_type == GDI_OBJECT_TYPE_EXTPEN &&
+ (PS_TYPE_MASK & penStyle) == PS_COSMETIC)
+ {
+ DPRINT("PWP 5\n");
+ PATH_UnlockPath(pPath);
+ EngSetLastError(ERROR_CAN_NOT_COMPLETE);
+ return FALSE;
+ }
+
+ pNewPath = IntGdiWidenPath(pPath, penWidth, penStyle, dc->dclevel.laPath.eMiterLimit);
+ PATH_UnlockPath(pPath);
+ return pNewPath;
+}
+