gdi32: Replace DC_GetDCUpdate by get_dc_ptr+update_dc in the painting functions.
This commit is contained in:
parent
f486f24b96
commit
f3f792d064
|
@ -42,11 +42,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdi);
|
|||
*/
|
||||
BOOL WINAPI LineTo( HDC hdc, INT x, INT y )
|
||||
{
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
BOOL ret;
|
||||
|
||||
if(!dc) return FALSE;
|
||||
|
||||
update_dc( dc );
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_LineTo(dc, x, y);
|
||||
else
|
||||
|
@ -55,7 +56,7 @@ BOOL WINAPI LineTo( HDC hdc, INT x, INT y )
|
|||
dc->CursPosX = x;
|
||||
dc->CursPosY = y;
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -92,14 +93,16 @@ BOOL WINAPI Arc( HDC hdc, INT left, INT top, INT right,
|
|||
INT xend, INT yend )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Arc(dc, left, top, right, bottom, xstart, ystart, xend, yend,0);
|
||||
else if (dc->funcs->pArc)
|
||||
ret = dc->funcs->pArc(dc->physDev,left,top,right,bottom,xstart,ystart,xend,yend);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -121,9 +124,10 @@ BOOL WINAPI ArcTo( HDC hdc,
|
|||
ycenter = bottom > top ? top+yradius : bottom+yradius,
|
||||
angle;
|
||||
BOOL result;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
if(!dc) return FALSE;
|
||||
|
||||
update_dc( dc );
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
result = PATH_Arc(dc,left,top,right,bottom,xstart,ystart,xend,yend,-1);
|
||||
else if(dc->funcs->pArcTo)
|
||||
|
@ -143,7 +147,7 @@ BOOL WINAPI ArcTo( HDC hdc,
|
|||
dc->CursPosX = GDI_ROUND(xcenter+(cos(angle)*xradius));
|
||||
dc->CursPosY = GDI_ROUND(ycenter+(sin(angle)*yradius));
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -156,15 +160,16 @@ BOOL WINAPI Pie( HDC hdc, INT left, INT top,
|
|||
INT xend, INT yend )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
update_dc( dc );
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Arc(dc,left,top,right,bottom,xstart,ystart,xend,yend,2);
|
||||
else if(dc->funcs->pPie)
|
||||
ret = dc->funcs->pPie(dc->physDev,left,top,right,bottom,xstart,ystart,xend,yend);
|
||||
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -177,15 +182,16 @@ BOOL WINAPI Chord( HDC hdc, INT left, INT top,
|
|||
INT xend, INT yend )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
update_dc( dc );
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Arc(dc,left,top,right,bottom,xstart,ystart,xend,yend,1);
|
||||
else if(dc->funcs->pChord)
|
||||
ret = dc->funcs->pChord(dc->physDev,left,top,right,bottom,xstart,ystart,xend,yend);
|
||||
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -197,15 +203,16 @@ BOOL WINAPI Ellipse( HDC hdc, INT left, INT top,
|
|||
INT right, INT bottom )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
update_dc( dc );
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Ellipse(dc,left,top,right,bottom);
|
||||
else if (dc->funcs->pEllipse)
|
||||
ret = dc->funcs->pEllipse(dc->physDev,left,top,right,bottom);
|
||||
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -217,14 +224,16 @@ BOOL WINAPI Rectangle( HDC hdc, INT left, INT top,
|
|||
INT right, INT bottom )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_Rectangle(dc, left, top, right, bottom);
|
||||
else if (dc->funcs->pRectangle)
|
||||
ret = dc->funcs->pRectangle(dc->physDev,left,top,right,bottom);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -237,15 +246,16 @@ BOOL WINAPI RoundRect( HDC hdc, INT left, INT top, INT right,
|
|||
INT bottom, INT ell_width, INT ell_height )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC *dc = DC_GetDCUpdate( hdc );
|
||||
DC *dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
ret = PATH_RoundRect(dc,left,top,right,bottom,ell_width,ell_height);
|
||||
else if (dc->funcs->pRoundRect)
|
||||
ret = dc->funcs->pRoundRect(dc->physDev,left,top,right,bottom,ell_width,ell_height);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -256,11 +266,13 @@ BOOL WINAPI RoundRect( HDC hdc, INT left, INT top, INT right,
|
|||
COLORREF WINAPI SetPixel( HDC hdc, INT x, INT y, COLORREF color )
|
||||
{
|
||||
COLORREF ret = 0;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if (dc->funcs->pSetPixel) ret = dc->funcs->pSetPixel(dc->physDev,x,y,color);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -271,15 +283,17 @@ COLORREF WINAPI SetPixel( HDC hdc, INT x, INT y, COLORREF color )
|
|||
BOOL WINAPI SetPixelV( HDC hdc, INT x, INT y, COLORREF color )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if (dc->funcs->pSetPixel)
|
||||
{
|
||||
dc->funcs->pSetPixel(dc->physDev,x,y,color);
|
||||
ret = TRUE;
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -290,16 +304,17 @@ BOOL WINAPI SetPixelV( HDC hdc, INT x, INT y, COLORREF color )
|
|||
COLORREF WINAPI GetPixel( HDC hdc, INT x, INT y )
|
||||
{
|
||||
COLORREF ret = CLR_INVALID;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
/* FIXME: should this be in the graphics driver? */
|
||||
if (PtVisible( hdc, x, y ))
|
||||
{
|
||||
if (dc->funcs->pGetPixel) ret = dc->funcs->pGetPixel(dc->physDev,x,y);
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -469,11 +484,13 @@ BOOL WINAPI SwapBuffers( HDC hdc )
|
|||
BOOL WINAPI PaintRgn( HDC hdc, HRGN hrgn )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if (dc->funcs->pPaintRgn) ret = dc->funcs->pPaintRgn(dc->physDev,hrgn);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -486,17 +503,20 @@ BOOL WINAPI FillRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush )
|
|||
{
|
||||
BOOL retval = FALSE;
|
||||
HBRUSH prevBrush;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (!dc) return FALSE;
|
||||
if(dc->funcs->pFillRgn)
|
||||
{
|
||||
update_dc( dc );
|
||||
retval = dc->funcs->pFillRgn(dc->physDev, hrgn, hbrush);
|
||||
}
|
||||
else if ((prevBrush = SelectObject( hdc, hbrush )))
|
||||
{
|
||||
retval = PaintRgn( hdc, hrgn );
|
||||
SelectObject( hdc, prevBrush );
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -508,11 +528,15 @@ BOOL WINAPI FrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush,
|
|||
INT nWidth, INT nHeight )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC *dc = DC_GetDCUpdate( hdc );
|
||||
DC *dc = get_dc_ptr( hdc );
|
||||
|
||||
if (!dc) return FALSE;
|
||||
|
||||
if(dc->funcs->pFrameRgn)
|
||||
{
|
||||
update_dc( dc );
|
||||
ret = dc->funcs->pFrameRgn( dc->physDev, hrgn, hbrush, nWidth, nHeight );
|
||||
}
|
||||
else
|
||||
{
|
||||
HRGN tmp = CreateRectRgn( 0, 0, 0, 0 );
|
||||
|
@ -526,7 +550,7 @@ BOOL WINAPI FrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush,
|
|||
DeleteObject( tmp );
|
||||
}
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -539,11 +563,14 @@ BOOL WINAPI InvertRgn( HDC hdc, HRGN hrgn )
|
|||
HBRUSH prevBrush;
|
||||
INT prevROP;
|
||||
BOOL retval;
|
||||
DC *dc = DC_GetDCUpdate( hdc );
|
||||
DC *dc = get_dc_ptr( hdc );
|
||||
if (!dc) return FALSE;
|
||||
|
||||
if(dc->funcs->pInvertRgn)
|
||||
{
|
||||
update_dc( dc );
|
||||
retval = dc->funcs->pInvertRgn( dc->physDev, hrgn );
|
||||
}
|
||||
else
|
||||
{
|
||||
prevBrush = SelectObject( hdc, GetStockObject(BLACK_BRUSH) );
|
||||
|
@ -552,7 +579,7 @@ BOOL WINAPI InvertRgn( HDC hdc, HRGN hrgn )
|
|||
SelectObject( hdc, prevBrush );
|
||||
SetROP2( hdc, prevROP );
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -563,12 +590,14 @@ BOOL WINAPI InvertRgn( HDC hdc, HRGN hrgn )
|
|||
BOOL WINAPI Polyline( HDC hdc, const POINT* pt, INT count )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if (PATH_IsPathOpen(dc->path)) ret = PATH_Polyline(dc, pt, count);
|
||||
else if (dc->funcs->pPolyline) ret = dc->funcs->pPolyline(dc->physDev,pt,count);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -578,18 +607,23 @@ BOOL WINAPI Polyline( HDC hdc, const POINT* pt, INT count )
|
|||
*/
|
||||
BOOL WINAPI PolylineTo( HDC hdc, const POINT* pt, DWORD cCount )
|
||||
{
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if(!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
{
|
||||
update_dc( dc );
|
||||
ret = PATH_PolylineTo(dc, pt, cCount);
|
||||
|
||||
}
|
||||
else if(dc->funcs->pPolylineTo)
|
||||
{
|
||||
update_dc( dc );
|
||||
ret = dc->funcs->pPolylineTo(dc->physDev, pt, cCount);
|
||||
|
||||
else { /* do it using Polyline */
|
||||
}
|
||||
else /* do it using Polyline */
|
||||
{
|
||||
POINT *pts = HeapAlloc( GetProcessHeap(), 0,
|
||||
sizeof(POINT) * (cCount + 1) );
|
||||
if (pts)
|
||||
|
@ -605,7 +639,7 @@ BOOL WINAPI PolylineTo( HDC hdc, const POINT* pt, DWORD cCount )
|
|||
dc->CursPosX = pt[cCount-1].x;
|
||||
dc->CursPosY = pt[cCount-1].y;
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -616,12 +650,14 @@ BOOL WINAPI PolylineTo( HDC hdc, const POINT* pt, DWORD cCount )
|
|||
BOOL WINAPI Polygon( HDC hdc, const POINT* pt, INT count )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if (PATH_IsPathOpen(dc->path)) ret = PATH_Polygon(dc, pt, count);
|
||||
else if (dc->funcs->pPolygon) ret = dc->funcs->pPolygon(dc->physDev,pt,count);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -634,12 +670,14 @@ BOOL WINAPI PolyPolygon( HDC hdc, const POINT* pt, const INT* counts,
|
|||
UINT polygons )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if (PATH_IsPathOpen(dc->path)) ret = PATH_PolyPolygon(dc, pt, counts, polygons);
|
||||
else if (dc->funcs->pPolyPolygon) ret = dc->funcs->pPolyPolygon(dc->physDev,pt,counts,polygons);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -651,12 +689,14 @@ BOOL WINAPI PolyPolyline( HDC hdc, const POINT* pt, const DWORD* counts,
|
|||
DWORD polylines )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if (PATH_IsPathOpen(dc->path)) ret = PATH_PolyPolyline(dc, pt, counts, polylines);
|
||||
else if (dc->funcs->pPolyPolyline) ret = dc->funcs->pPolyPolyline(dc->physDev,pt,counts,polylines);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -668,11 +708,13 @@ BOOL WINAPI ExtFloodFill( HDC hdc, INT x, INT y, COLORREF color,
|
|||
UINT fillType )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
DC * dc = DC_GetDCUpdate( hdc );
|
||||
DC * dc = get_dc_ptr( hdc );
|
||||
|
||||
if (dc)
|
||||
{
|
||||
update_dc( dc );
|
||||
if (dc->funcs->pExtFloodFill) ret = dc->funcs->pExtFloodFill(dc->physDev,x,y,color,fillType);
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -708,13 +750,19 @@ BOOL WINAPI PolyBezier( HDC hdc, const POINT* lppt, DWORD cPoints )
|
|||
/* cPoints must be 3 * n + 1 (where n>=1) */
|
||||
if (cPoints == 1 || (cPoints % 3) != 1) return FALSE;
|
||||
|
||||
dc = DC_GetDCUpdate( hdc );
|
||||
dc = get_dc_ptr( hdc );
|
||||
if(!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
{
|
||||
update_dc( dc );
|
||||
ret = PATH_PolyBezier(dc, lppt, cPoints);
|
||||
}
|
||||
else if (dc->funcs->pPolyBezier)
|
||||
{
|
||||
update_dc( dc );
|
||||
ret = dc->funcs->pPolyBezier(dc->physDev, lppt, cPoints);
|
||||
}
|
||||
else /* We'll convert it into line segments and draw them using Polyline */
|
||||
{
|
||||
POINT *Pts;
|
||||
|
@ -723,12 +771,12 @@ BOOL WINAPI PolyBezier( HDC hdc, const POINT* lppt, DWORD cPoints )
|
|||
if ((Pts = GDI_Bezier( lppt, cPoints, &nOut )))
|
||||
{
|
||||
TRACE("Pts = %p, no = %d\n", Pts, nOut);
|
||||
ret = Polyline( dc->hSelf, Pts, nOut );
|
||||
ret = Polyline( hdc, Pts, nOut );
|
||||
HeapFree( GetProcessHeap(), 0, Pts );
|
||||
}
|
||||
}
|
||||
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -748,33 +796,41 @@ BOOL WINAPI PolyBezier( HDC hdc, const POINT* lppt, DWORD cPoints )
|
|||
BOOL WINAPI PolyBezierTo( HDC hdc, const POINT* lppt, DWORD cPoints )
|
||||
{
|
||||
DC * dc;
|
||||
BOOL ret;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
/* cbPoints must be 3 * n (where n>=1) */
|
||||
if (!cPoints || (cPoints % 3) != 0) return FALSE;
|
||||
|
||||
dc = DC_GetDCUpdate( hdc );
|
||||
dc = get_dc_ptr( hdc );
|
||||
if(!dc) return FALSE;
|
||||
|
||||
if(PATH_IsPathOpen(dc->path))
|
||||
{
|
||||
update_dc( dc );
|
||||
ret = PATH_PolyBezierTo(dc, lppt, cPoints);
|
||||
}
|
||||
else if(dc->funcs->pPolyBezierTo)
|
||||
{
|
||||
update_dc( dc );
|
||||
ret = dc->funcs->pPolyBezierTo(dc->physDev, lppt, cPoints);
|
||||
else { /* We'll do it using PolyBezier */
|
||||
POINT *pt;
|
||||
pt = HeapAlloc( GetProcessHeap(), 0, sizeof(POINT) * (cPoints + 1) );
|
||||
if(!pt) return FALSE;
|
||||
}
|
||||
else /* We'll do it using PolyBezier */
|
||||
{
|
||||
POINT *pt = HeapAlloc( GetProcessHeap(), 0, sizeof(POINT) * (cPoints + 1) );
|
||||
if(pt)
|
||||
{
|
||||
pt[0].x = dc->CursPosX;
|
||||
pt[0].y = dc->CursPosY;
|
||||
memcpy(pt + 1, lppt, sizeof(POINT) * cPoints);
|
||||
ret = PolyBezier(dc->hSelf, pt, cPoints+1);
|
||||
ret = PolyBezier(hdc, pt, cPoints+1);
|
||||
HeapFree( GetProcessHeap(), 0, pt );
|
||||
}
|
||||
}
|
||||
if(ret) {
|
||||
dc->CursPosX = lppt[cPoints-1].x;
|
||||
dc->CursPosY = lppt[cPoints-1].y;
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -790,7 +846,7 @@ BOOL WINAPI AngleArc(HDC hdc, INT x, INT y, DWORD dwRadius, FLOAT eStartAngle, F
|
|||
if( (signed int)dwRadius < 0 )
|
||||
return FALSE;
|
||||
|
||||
dc = DC_GetDCUpdate( hdc );
|
||||
dc = get_dc_ptr( hdc );
|
||||
if(!dc) return FALSE;
|
||||
|
||||
/* Calculate the end point */
|
||||
|
@ -798,7 +854,10 @@ BOOL WINAPI AngleArc(HDC hdc, INT x, INT y, DWORD dwRadius, FLOAT eStartAngle, F
|
|||
y2 = y - sin((eStartAngle+eSweepAngle)*M_PI/180) * dwRadius;
|
||||
|
||||
if(!PATH_IsPathOpen(dc->path) && dc->funcs->pAngleArc)
|
||||
{
|
||||
update_dc( dc );
|
||||
result = dc->funcs->pAngleArc( dc->physDev, x, y, dwRadius, eStartAngle, eSweepAngle );
|
||||
}
|
||||
else { /* do it using ArcTo */
|
||||
x1 = x + cos(eStartAngle*M_PI/180) * dwRadius;
|
||||
y1 = y - sin(eStartAngle*M_PI/180) * dwRadius;
|
||||
|
@ -812,7 +871,7 @@ BOOL WINAPI AngleArc(HDC hdc, INT x, INT y, DWORD dwRadius, FLOAT eStartAngle, F
|
|||
dc->CursPosX = x2;
|
||||
dc->CursPosY = y2;
|
||||
}
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -827,13 +886,19 @@ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes,
|
|||
POINT * line_pts = NULL, * bzr_pts = NULL, bzr[4];
|
||||
INT i, num_pts, num_bzr_pts, space, size;
|
||||
|
||||
dc = DC_GetDCUpdate( hdc );
|
||||
dc = get_dc_ptr( hdc );
|
||||
if(!dc) return FALSE;
|
||||
|
||||
if( PATH_IsPathOpen( dc->path ) )
|
||||
{
|
||||
update_dc( dc );
|
||||
result = PATH_PolyDraw(dc, lppt, lpbTypes, cCount);
|
||||
}
|
||||
else if(dc->funcs->pPolyDraw)
|
||||
{
|
||||
update_dc( dc );
|
||||
result = dc->funcs->pPolyDraw( dc->physDev, lppt, lpbTypes, cCount );
|
||||
}
|
||||
else {
|
||||
/* check for valid point types */
|
||||
for(i = 0; i < cCount; i++) {
|
||||
|
@ -864,7 +929,7 @@ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes,
|
|||
switch(lpbTypes[i]) {
|
||||
case PT_MOVETO:
|
||||
if(num_pts >= 2)
|
||||
Polyline(dc->hSelf, line_pts, num_pts);
|
||||
Polyline(hdc, line_pts, num_pts);
|
||||
num_pts = 0;
|
||||
line_pts[num_pts++] = lppt[i];
|
||||
break;
|
||||
|
@ -900,15 +965,15 @@ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes,
|
|||
}
|
||||
|
||||
if(num_pts >= 2)
|
||||
Polyline(dc->hSelf, line_pts, num_pts);
|
||||
Polyline(hdc, line_pts, num_pts);
|
||||
|
||||
MoveToEx(dc->hSelf, line_pts[num_pts - 1].x, line_pts[num_pts - 1].y, NULL);
|
||||
MoveToEx(hdc, line_pts[num_pts - 1].x, line_pts[num_pts - 1].y, NULL);
|
||||
|
||||
result = TRUE;
|
||||
}
|
||||
|
||||
end:
|
||||
DC_ReleaseDCPtr( dc );
|
||||
release_dc_ptr( dc );
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue