[try4 3/3] gdi32: added PATH_PolyDraw

Misha Koshelev mk144210 at bcm.edu
Wed Jul 4 14:49:35 CDT 2007


> @@ -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



More information about the wine-devel mailing list