From: Mark Harmstone Subject: [PATCH] uxtheme: fix colour errors in UXTHEME_StretchBlt Message-Id: <54E3E402.1040601@burntcomma.com> Date: Wed, 18 Feb 2015 00:59:46 +0000 UXTHEME_StretchBlt wasn't setting the mode before calling StretchBlt. This was causing graphical errors to be introduced, such as the faint purple lines visible in the background when running winecfg with the Luna style. --- dlls/uxtheme/draw.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/dlls/uxtheme/draw.c b/dlls/uxtheme/draw.c index d6225d2..24749ef 100644 --- a/dlls/uxtheme/draw.c +++ b/dlls/uxtheme/draw.c @@ -290,22 +290,34 @@ static inline BOOL UXTHEME_StretchBlt(HDC hdcDst, int nXOriginDst, int nYOriginD 255, /* SourceConstantAlpha */ AC_SRC_ALPHA /* AlphaFormat */ }; + + BOOL ret = TRUE; + int old_stretch_mode; + POINT old_brush_org; + + old_stretch_mode = GetStretchBltMode(hdcDst); + SetStretchBltMode(hdcDst, HALFTONE); + SetBrushOrgEx(hdcDst, nXOriginDst, nYOriginDst, &old_brush_org); + if (transparent == ALPHABLEND_BINARY) { /* Ensure we don't pass any negative values to TransparentBlt */ - return TransparentBlt(hdcDst, nXOriginDst, nYOriginDst, abs(nWidthDst), abs(nHeightDst), + ret = TransparentBlt(hdcDst, nXOriginDst, nYOriginDst, abs(nWidthDst), abs(nHeightDst), hdcSrc, nXOriginSrc, nYOriginSrc, abs(nWidthSrc), abs(nHeightSrc), transcolor); - } - if ((transparent == ALPHABLEND_NONE) || + } else if ((transparent == ALPHABLEND_NONE) || !AlphaBlend(hdcDst, nXOriginDst, nYOriginDst, nWidthDst, nHeightDst, hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, blendFunc)) { - return StretchBlt(hdcDst, nXOriginDst, nYOriginDst, nWidthDst, nHeightDst, + ret = StretchBlt(hdcDst, nXOriginDst, nYOriginDst, nWidthDst, nHeightDst, hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY); } - return TRUE; + + SetBrushOrgEx(hdcDst, old_brush_org.x, old_brush_org.y, NULL); + SetStretchBltMode(hdcDst, old_stretch_mode); + + return ret; } /***********************************************************************