@@ -835,6 +835,10 @@ BOOL WINAPI PolyDraw(HDC hdc, const POIN result = dc->funcs->pPolyDraw( dc->physDev, lppt, lpbTypes, cCount ); goto end; }
- if( PATH_IsPathOpen( dc->path ) ){
result = PATH_PolyDraw(dc, lppt, lpbTypes, cCount);
goto end;
- }
I believe the correct order here is:
--- if( PATH_IsPathOpen( dc->path )) result = PATH_PolyDraw(dc, lppt, lpbTypes, cCount); else if (dc->funcs->pPolyDraw) result = dc->funcs->pPolyDraw( dc->physDev, lppt, lpbTypes, cCount ); else{ Non-path open case here result = TRUE; }
end: GDI_ReleaseObj( hdc ); return result; ---
The reason is that BeginPath either calls pBeginPath, in which case the gdi driver handles the path calls, or it sets path state to PATH_Open, which means we will be handling the path ourselves and we then do not call any of the gdi driver's pFunc functions while we are in the path (also if you look at most of the other functions in painting.c they are implemented in this way).
Also, if you do the if ... else's like I showed above, you can avoid all the goto's except the ones in the non-path open case in case of failure.
Misha