winex11: Fix a potential deadlock in the GradientFill non-XRender fallback.
This commit is contained in:
parent
c0c7547f37
commit
46390b09d5
|
@ -1446,11 +1446,13 @@ BOOL X11DRV_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert,
|
||||||
}
|
}
|
||||||
for (x = 0, pos = min( pt[0].x, pt[1].x ); x < dx; x++, pos++)
|
for (x = 0, pos = min( pt[0].x, pt[1].x ); x < dx; x++, pos++)
|
||||||
{
|
{
|
||||||
COLORREF color = RGB( (v[0].Red * (dx - x) + v[1].Red * x) / dx / 256,
|
int color = X11DRV_PALETTE_ToPhysical( physdev,
|
||||||
|
RGB( (v[0].Red * (dx - x) + v[1].Red * x) / dx / 256,
|
||||||
(v[0].Green * (dx - x) + v[1].Green * x) / dx / 256,
|
(v[0].Green * (dx - x) + v[1].Green * x) / dx / 256,
|
||||||
(v[0].Blue * (dx - x) + v[1].Blue * x) / dx / 256);
|
(v[0].Blue * (dx - x) + v[1].Blue * x) / dx / 256) );
|
||||||
|
|
||||||
wine_tsx11_lock();
|
wine_tsx11_lock();
|
||||||
XSetForeground( gdi_display, physdev->gc, X11DRV_PALETTE_ToPhysical( physdev, color ));
|
XSetForeground( gdi_display, physdev->gc, color );
|
||||||
XDrawLine( gdi_display, physdev->drawable, physdev->gc,
|
XDrawLine( gdi_display, physdev->drawable, physdev->gc,
|
||||||
physdev->dc_rect.left + pos, physdev->dc_rect.top + pt[0].y,
|
physdev->dc_rect.left + pos, physdev->dc_rect.top + pt[0].y,
|
||||||
physdev->dc_rect.left + pos, physdev->dc_rect.top + pt[1].y );
|
physdev->dc_rect.left + pos, physdev->dc_rect.top + pt[1].y );
|
||||||
|
@ -1491,11 +1493,13 @@ BOOL X11DRV_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert,
|
||||||
}
|
}
|
||||||
for (y = 0, pos = min( pt[0].y, pt[1].y ); y < dy; y++, pos++)
|
for (y = 0, pos = min( pt[0].y, pt[1].y ); y < dy; y++, pos++)
|
||||||
{
|
{
|
||||||
COLORREF color = RGB( (v[0].Red * (dy - y) + v[1].Red * y) / dy / 256,
|
int color = X11DRV_PALETTE_ToPhysical( physdev,
|
||||||
|
RGB( (v[0].Red * (dy - y) + v[1].Red * y) / dy / 256,
|
||||||
(v[0].Green * (dy - y) + v[1].Green * y) / dy / 256,
|
(v[0].Green * (dy - y) + v[1].Green * y) / dy / 256,
|
||||||
(v[0].Blue * (dy - y) + v[1].Blue * y) / dy / 256);
|
(v[0].Blue * (dy - y) + v[1].Blue * y) / dy / 256) );
|
||||||
|
|
||||||
wine_tsx11_lock();
|
wine_tsx11_lock();
|
||||||
XSetForeground( gdi_display, physdev->gc, X11DRV_PALETTE_ToPhysical( physdev, color ));
|
XSetForeground( gdi_display, physdev->gc, color );
|
||||||
XDrawLine( gdi_display, physdev->drawable, physdev->gc,
|
XDrawLine( gdi_display, physdev->drawable, physdev->gc,
|
||||||
physdev->dc_rect.left + pt[0].x, physdev->dc_rect.top + pos,
|
physdev->dc_rect.left + pt[0].x, physdev->dc_rect.top + pos,
|
||||||
physdev->dc_rect.left + pt[1].x, physdev->dc_rect.top + pos );
|
physdev->dc_rect.left + pt[1].x, physdev->dc_rect.top + pos );
|
||||||
|
|
Loading…
Reference in New Issue