A test program run on windows can prove me wrong, but I doubt it... Also wrong assumptions are not uncommon, but looking at the struct that is passed I would assume exactly that.
BR, Peter > On May 4, 2017, at 17:31, Giannis Adamopoulos > <giannis.adamopou...@reactos.org> wrote: > > Hi, are you sure that 1 means original and 9 means nine grid? I kept fields > that I don't know what are for as ... unknown. > > > Peter Hater <7elem...@mail.bg> wrote on Wed, May 3rd, 2017, 8:23 PM: >> Hi, >> >> Why not use constant for 0x44727753 and rename unknown1 and unknown2 to >> srcImageType and dstImageType (or something similar) and use defines for >> these types also 1 = OriginalImage, 9 = NineGridImage (or similar). >> This will make code a little bit less magical :) IMHO >> >> BR, >> Peter >> >>> On May 3, 2017, at 14:13, gadamopou...@svn.reactos.org wrote: >>> >>> Author: gadamopoulos >>> Date: Wed May 3 11:13:23 2017 >>> New Revision: 74457 >>> >>> URL: http://svn.reactos.org/svn/reactos?rev=74457&view=rev >>> Log: >>> [UXTHEME] -Use GdiDrawStream in UXTHEME_DrawImageGlyph and >>> UXTHEME_DrawImageBackground. >>> >>> Modified: >>> trunk/reactos/dll/win32/uxtheme/draw.c >>> trunk/reactos/dll/win32/uxtheme/uxthemep.h >>> >>> Modified: trunk/reactos/dll/win32/uxtheme/draw.c >>> URL: >>> http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/uxtheme/draw.c?rev=74457&r1=74456&r2=74457&view=diff >>> ============================================================================== >>> --- trunk/reactos/dll/win32/uxtheme/draw.c [iso-8859-1] (original) >>> +++ trunk/reactos/dll/win32/uxtheme/draw.c [iso-8859-1] Wed May 3 >>> 11:13:23 2017 >>> @@ -269,163 +269,6 @@ >>> return S_OK; >>> } >>> >>> -/*********************************************************************** >>> - * UXTHEME_StretchBlt >>> - * >>> - * Pseudo TransparentBlt/StretchBlt >>> - */ >>> -static inline BOOL UXTHEME_StretchBlt(HDC hdcDst, int nXOriginDst, int >>> nYOriginDst, int nWidthDst, int nHeightDst, >>> - HDC hdcSrc, int nXOriginSrc, int >>> nYOriginSrc, int nWidthSrc, int nHeightSrc, >>> - INT transparent, COLORREF transcolor) >>> -{ >>> - static const BLENDFUNCTION blendFunc = >>> - { >>> - AC_SRC_OVER, /* BlendOp */ >>> - 0, /* BlendFlag */ >>> - 255, /* SourceConstantAlpha */ >>> - AC_SRC_ALPHA /* AlphaFormat */ >>> - }; >>> - >>> - BOOL ret = TRUE; >>> - int old_stretch_mode; >>> - POINT old_brush_org; >>> - >>> - old_stretch_mode = SetStretchBltMode(hdcDst, HALFTONE); >>> - SetBrushOrgEx(hdcDst, nXOriginDst, nYOriginDst, &old_brush_org); >>> - >>> - if (transparent == ALPHABLEND_BINARY) { >>> - /* Ensure we don't pass any negative values to TransparentBlt */ >>> - ret = TransparentBlt(hdcDst, nXOriginDst, nYOriginDst, >>> abs(nWidthDst), abs(nHeightDst), >>> - hdcSrc, nXOriginSrc, nYOriginSrc, >>> abs(nWidthSrc), abs(nHeightSrc), >>> - transcolor); >>> - } else if ((transparent == ALPHABLEND_NONE) || >>> - !AlphaBlend(hdcDst, nXOriginDst, nYOriginDst, nWidthDst, >>> nHeightDst, >>> - hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, >>> nHeightSrc, >>> - blendFunc)) >>> - { >>> - ret = StretchBlt(hdcDst, nXOriginDst, nYOriginDst, nWidthDst, >>> nHeightDst, >>> - hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, >>> nHeightSrc, >>> - SRCCOPY); >>> - } >>> - >>> - SetBrushOrgEx(hdcDst, old_brush_org.x, old_brush_org.y, NULL); >>> - SetStretchBltMode(hdcDst, old_stretch_mode); >>> - >>> - return ret; >>> -} >>> - >>> -/*********************************************************************** >>> - * UXTHEME_Blt >>> - * >>> - * Simplify sending same width/height for both source and dest >>> - */ >>> -static inline BOOL UXTHEME_Blt(HDC hdcDest, int nXOriginDest, int >>> nYOriginDest, int nWidthDest, int nHeightDest, >>> - HDC hdcSrc, int nXOriginSrc, int >>> nYOriginSrc, >>> - INT transparent, COLORREF transcolor) >>> -{ >>> - return UXTHEME_StretchBlt(hdcDest, nXOriginDest, nYOriginDest, >>> nWidthDest, nHeightDest, >>> - hdcSrc, nXOriginSrc, nYOriginSrc, >>> nWidthDest, nHeightDest, >>> - transparent, transcolor); >>> -} >>> - >>> -/*********************************************************************** >>> - * UXTHEME_SizedBlt >>> - * >>> - * Stretches or tiles, depending on sizingtype. >>> - */ >>> -static inline BOOL UXTHEME_SizedBlt (HDC hdcDst, int nXOriginDst, int >>> nYOriginDst, >>> - int nWidthDst, int nHeightDst, >>> - HDC hdcSrc, int nXOriginSrc, int >>> nYOriginSrc, >>> - int nWidthSrc, int nHeightSrc, >>> - int sizingtype, >>> - INT transparent, COLORREF transcolor) >>> -{ >>> - if (sizingtype == ST_TILE) >>> - { >>> - HDC hdcTemp; >>> - BOOL result = FALSE; >>> - >>> - if (!nWidthSrc || !nHeightSrc) return TRUE; >>> - >>> - /* For destination width/height less than or equal to source >>> - width/height, do not bother with memory bitmap optimization */ >>> - if (nWidthSrc >= nWidthDst && nHeightSrc >= nHeightDst) >>> - { >>> - int bltWidth = min (nWidthDst, nWidthSrc); >>> - int bltHeight = min (nHeightDst, nHeightSrc); >>> - >>> - return UXTHEME_Blt (hdcDst, nXOriginDst, nYOriginDst, >>> bltWidth, bltHeight, >>> - hdcSrc, nXOriginSrc, nYOriginSrc, >>> - transparent, transcolor); >>> - } >>> - >>> - /* Create a DC with a bitmap consisting of a tiling of the source >>> - bitmap, with standard GDI functions. This is faster than an >>> - iteration with UXTHEME_Blt(). */ >>> - hdcTemp = CreateCompatibleDC(hdcSrc); >>> - if (hdcTemp != 0) >>> - { >>> - HBITMAP bitmapTemp; >>> - HBITMAP bitmapOrig; >>> - int nWidthTemp, nHeightTemp; >>> - int xOfs, xRemaining; >>> - int yOfs, yRemaining; >>> - int growSize; >>> - >>> - /* Calculate temp dimensions of integer multiples of source >>> dimensions */ >>> - nWidthTemp = ((nWidthDst + nWidthSrc - 1) / nWidthSrc) * >>> nWidthSrc; >>> - nHeightTemp = ((nHeightDst + nHeightSrc - 1) / nHeightSrc) * >>> nHeightSrc; >>> - bitmapTemp = CreateCompatibleBitmap(hdcSrc, nWidthTemp, >>> nHeightTemp); >>> - bitmapOrig = SelectObject(hdcTemp, bitmapTemp); >>> - >>> - /* Initial copy of bitmap */ >>> - BitBlt(hdcTemp, 0, 0, nWidthSrc, nHeightSrc, hdcSrc, >>> nXOriginSrc, nYOriginSrc, SRCCOPY); >>> - >>> - /* Extend bitmap in the X direction. Growth of width is >>> exponential */ >>> - xOfs = nWidthSrc; >>> - xRemaining = nWidthTemp - nWidthSrc; >>> - growSize = nWidthSrc; >>> - while (xRemaining > 0) >>> - { >>> - growSize = min(growSize, xRemaining); >>> - BitBlt(hdcTemp, xOfs, 0, growSize, nHeightSrc, hdcTemp, 0, >>> 0, SRCCOPY); >>> - xOfs += growSize; >>> - xRemaining -= growSize; >>> - growSize *= 2; >>> - } >>> - >>> - /* Extend bitmap in the Y direction. Growth of height is >>> exponential */ >>> - yOfs = nHeightSrc; >>> - yRemaining = nHeightTemp - nHeightSrc; >>> - growSize = nHeightSrc; >>> - while (yRemaining > 0) >>> - { >>> - growSize = min(growSize, yRemaining); >>> - BitBlt(hdcTemp, 0, yOfs, nWidthTemp, growSize, hdcTemp, 0, >>> 0, SRCCOPY); >>> - yOfs += growSize; >>> - yRemaining -= growSize; >>> - growSize *= 2; >>> - } >>> - >>> - /* Use temporary hdc for source */ >>> - result = UXTHEME_Blt (hdcDst, nXOriginDst, nYOriginDst, >>> nWidthDst, nHeightDst, >>> - hdcTemp, 0, 0, >>> - transparent, transcolor); >>> - >>> - SelectObject(hdcTemp, bitmapOrig); >>> - DeleteObject(bitmapTemp); >>> - } >>> - DeleteDC(hdcTemp); >>> - return result; >>> - } >>> - else >>> - { >>> - return UXTHEME_StretchBlt (hdcDst, nXOriginDst, nYOriginDst, >>> nWidthDst, nHeightDst, >>> - hdcSrc, nXOriginSrc, nYOriginSrc, >>> nWidthSrc, nHeightSrc, >>> - transparent, transcolor); >>> - } >>> -} >>> - >>> /* Get transparency parameters passed to UXTHEME_StretchBlt() - the >>> parameters >>> * depend on whether the image has full alpha or whether it is >>> * color-transparent or just opaque. */ >>> @@ -468,8 +311,6 @@ >>> { >>> HRESULT hr; >>> HBITMAP bmpSrc = NULL; >>> - HDC hdcSrc = NULL; >>> - HGDIOBJ oldSrc = NULL; >>> RECT rcSrc; >>> INT transparent = 0; >>> COLORREF transparentcolor; >>> @@ -477,18 +318,13 @@ >>> int halign = HA_CENTER; >>> POINT dstSize; >>> POINT srcSize; >>> - POINT topleft; >>> BOOL hasAlpha; >>> + RECT rcDst; >>> + GDI_DRAW_STREAM DrawStream; >>> >>> hr = UXTHEME_LoadImage(hTheme, hdc, iPartId, iStateId, pRect, TRUE, >>> &bmpSrc, &rcSrc, &hasAlpha); >>> if(FAILED(hr)) return hr; >>> - hdcSrc = CreateCompatibleDC(hdc); >>> - if(!hdcSrc) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - return hr; >>> - } >>> - oldSrc = SelectObject(hdcSrc, bmpSrc); >>> >>> dstSize.x = pRect->right-pRect->left; >>> dstSize.y = pRect->bottom-pRect->top; >>> @@ -500,22 +336,37 @@ >>> GetThemeEnumValue(hTheme, iPartId, iStateId, TMT_VALIGN, &valign); >>> GetThemeEnumValue(hTheme, iPartId, iStateId, TMT_HALIGN, &halign); >>> >>> - topleft.x = pRect->left; >>> - topleft.y = pRect->top; >>> - if(halign == HA_CENTER) topleft.x += (dstSize.x/2)-(srcSize.x/2); >>> - else if(halign == HA_RIGHT) topleft.x += dstSize.x-srcSize.x; >>> - if(valign == VA_CENTER) topleft.y += (dstSize.y/2)-(srcSize.y/2); >>> - else if(valign == VA_BOTTOM) topleft.y += dstSize.y-srcSize.y; >>> - >>> - if(!UXTHEME_Blt(hdc, topleft.x, topleft.y, srcSize.x, srcSize.y, >>> - hdcSrc, rcSrc.left, rcSrc.top, >>> - transparent, transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - } >>> - >>> - SelectObject(hdcSrc, oldSrc); >>> - DeleteDC(hdcSrc); >>> - return hr; >>> + rcDst = *pRect; >>> + if(halign == HA_CENTER) rcDst.left += (dstSize.x/2)-(srcSize.x/2); >>> + else if(halign == HA_RIGHT) rcDst.left += dstSize.x-srcSize.x; >>> + if(valign == VA_CENTER) rcDst.top += (dstSize.y/2)-(srcSize.y/2); >>> + else if(valign == VA_BOTTOM) rcDst.top += dstSize.y-srcSize.y; >>> + >>> + rcDst.right = rcDst.left + srcSize.x; >>> + rcDst.bottom = rcDst.top + srcSize.y; >>> + >>> + DrawStream.signature = 0x44727753; >>> + DrawStream.reserved = 0; >>> + DrawStream.unknown1 = 1; >>> + DrawStream.unknown2 = 9; >>> + DrawStream.hDC = hdc; >>> + DrawStream.hImage = bmpSrc; >>> + DrawStream.crTransparent = transparentcolor; >>> + DrawStream.rcSrc = rcSrc; >>> + DrawStream.rcDest = rcDst; >>> + DrawStream.leftSizingMargin = 0; >>> + DrawStream.rightSizingMargin = 0; >>> + DrawStream.topSizingMargin = 0; >>> + DrawStream.bottomSizingMargin = 0; >>> + DrawStream.drawOption = DS_TRUESIZE; >>> + >>> + if (transparent == ALPHABLEND_FULL) >>> + DrawStream.drawOption |= DS_TRANSPARENTALPHA; >>> + else if (transparent == ALPHABLEND_BINARY) >>> + DrawStream.drawOption |= DS_TRANSPARENTCLR; >>> + >>> + GdiDrawStream(hdc, sizeof(DrawStream), &DrawStream); >>> + return HRESULT_FROM_WIN32(GetLastError()); >>> } >>> >>> /*********************************************************************** >>> @@ -655,40 +506,33 @@ >>> const DTBGOPTS *pOptions) >>> { >>> HRESULT hr = S_OK; >>> - HBITMAP bmpSrc, bmpSrcResized = NULL; >>> - HGDIOBJ oldSrc; >>> - HDC hdcSrc, hdcOrigSrc = NULL; >>> + HBITMAP bmpSrc; >>> RECT rcSrc; >>> RECT rcDst; >>> POINT dstSize; >>> - POINT srcSize; >>> POINT drawSize; >>> int sizingtype = ST_STRETCH; >>> INT transparent; >>> COLORREF transparentcolor = 0; >>> BOOL hasAlpha; >>> - >>> - hr = UXTHEME_LoadImage(hTheme, hdc, iPartId, iStateId, pRect, FALSE, >>> - &bmpSrc, &rcSrc, &hasAlpha); >>> - if(FAILED(hr)) return hr; >>> - hdcSrc = CreateCompatibleDC(hdc); >>> - if(!hdcSrc) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> + MARGINS sm; >>> + GDI_DRAW_STREAM DrawStream; >>> + >>> + hr = UXTHEME_LoadImage(hTheme, hdc, iPartId, iStateId, pRect, FALSE, >>> &bmpSrc, &rcSrc, &hasAlpha); >>> + if(FAILED(hr)) >>> return hr; >>> - } >>> - oldSrc = SelectObject(hdcSrc, bmpSrc); >>> + get_transparency (hTheme, iPartId, iStateId, hasAlpha, &transparent, >>> &transparentcolor, FALSE); >>> >>> rcDst = *pRect; >>> - >>> - get_transparency (hTheme, iPartId, iStateId, hasAlpha, &transparent, >>> - &transparentcolor, FALSE); >>> - >>> dstSize.x = rcDst.right-rcDst.left; >>> dstSize.y = rcDst.bottom-rcDst.top; >>> - srcSize.x = rcSrc.right-rcSrc.left; >>> - srcSize.y = rcSrc.bottom-rcSrc.top; >>> - >>> + >>> + GetThemeMargins(hTheme, hdc, iPartId, iStateId, TMT_SIZINGMARGINS, >>> NULL, &sm); >>> GetThemeEnumValue(hTheme, iPartId, iStateId, TMT_SIZINGTYPE, >>> &sizingtype); >>> + >>> + /*FIXME: Is this ever used? */ >>> + /*GetThemeBool(hTheme, iPartId, iStateId, TMT_BORDERONLY, >>> &borderonly);*/ >>> + >>> if(sizingtype == ST_TRUESIZE) { >>> int valign = VA_CENTER, halign = HA_CENTER; >>> >>> @@ -706,161 +550,36 @@ >>> rcDst.top = rcDst.bottom - drawSize.y; >>> rcDst.right = rcDst.left + drawSize.x; >>> rcDst.bottom = rcDst.top + drawSize.y; >>> - if(!UXTHEME_StretchBlt(hdc, rcDst.left, rcDst.top, drawSize.x, >>> drawSize.y, >>> - hdcSrc, rcSrc.left, rcSrc.top, srcSize.x, >>> srcSize.y, >>> - transparent, transparentcolor)) >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - } >>> - else { >>> - HDC hdcDst = NULL; >>> - MARGINS sm; >>> - POINT org; >>> - >>> - dstSize.x = abs(dstSize.x); >>> - dstSize.y = abs(dstSize.y); >>> - >>> - GetThemeMargins(hTheme, hdc, iPartId, iStateId, TMT_SIZINGMARGINS, >>> NULL, &sm); >>> - >>> - /* Resize source image if destination smaller than margins */ >>> -#ifndef __REACTOS__ >>> - /* Revert Wine Commit 2b650fa as it breaks themed Explorer Toolbar >>> Separators >>> - FIXME: Revisit this when the bug is fixed. CORE-9636 and Wine >>> Bug #38538 */ >>> - if (sm.cyTopHeight + sm.cyBottomHeight > dstSize.y || >>> sm.cxLeftWidth + sm.cxRightWidth > dstSize.x) { >>> - if (sm.cyTopHeight + sm.cyBottomHeight > dstSize.y) { >>> - sm.cyTopHeight = MulDiv(sm.cyTopHeight, dstSize.y, >>> srcSize.y); >>> - sm.cyBottomHeight = dstSize.y - sm.cyTopHeight; >>> - srcSize.y = dstSize.y; >>> - } >>> - >>> - if (sm.cxLeftWidth + sm.cxRightWidth > dstSize.x) { >>> - sm.cxLeftWidth = MulDiv(sm.cxLeftWidth, dstSize.x, >>> srcSize.x); >>> - sm.cxRightWidth = dstSize.x - sm.cxLeftWidth; >>> - srcSize.x = dstSize.x; >>> - } >>> - >>> - hdcOrigSrc = hdcSrc; >>> - hdcSrc = CreateCompatibleDC(NULL); >>> - bmpSrcResized = CreateBitmap(srcSize.x, srcSize.y, 1, 32, >>> NULL); >>> - SelectObject(hdcSrc, bmpSrcResized); >>> - >>> - UXTHEME_StretchBlt(hdcSrc, 0, 0, srcSize.x, srcSize.y, >>> hdcOrigSrc, rcSrc.left, rcSrc.top, >>> - rcSrc.right - rcSrc.left, rcSrc.bottom - >>> rcSrc.top, transparent, transparentcolor); >>> - >>> - rcSrc.left = 0; >>> - rcSrc.top = 0; >>> - rcSrc.right = srcSize.x; >>> - rcSrc.bottom = srcSize.y; >>> - } >>> -#endif /* __REACTOS__ */ >>> - >>> - hdcDst = hdc; >>> - OffsetViewportOrgEx(hdcDst, rcDst.left, rcDst.top, &org); >>> - >>> - /* Upper left corner */ >>> - if(!UXTHEME_Blt(hdcDst, 0, 0, sm.cxLeftWidth, sm.cyTopHeight, >>> - hdcSrc, rcSrc.left, rcSrc.top, >>> - transparent, transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - goto draw_error; >>> - } >>> - /* Upper right corner */ >>> - if(!UXTHEME_Blt (hdcDst, dstSize.x-sm.cxRightWidth, 0, >>> - sm.cxRightWidth, sm.cyTopHeight, >>> - hdcSrc, rcSrc.right-sm.cxRightWidth, rcSrc.top, >>> - transparent, transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - goto draw_error; >>> - } >>> - /* Lower left corner */ >>> - if(!UXTHEME_Blt (hdcDst, 0, dstSize.y-sm.cyBottomHeight, >>> - sm.cxLeftWidth, sm.cyBottomHeight, >>> - hdcSrc, rcSrc.left, >>> rcSrc.bottom-sm.cyBottomHeight, >>> - transparent, transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - goto draw_error; >>> - } >>> - /* Lower right corner */ >>> - if(!UXTHEME_Blt (hdcDst, dstSize.x-sm.cxRightWidth, >>> dstSize.y-sm.cyBottomHeight, >>> - sm.cxRightWidth, sm.cyBottomHeight, >>> - hdcSrc, rcSrc.right-sm.cxRightWidth, >>> rcSrc.bottom-sm.cyBottomHeight, >>> - transparent, transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - goto draw_error; >>> - } >>> - >>> - if ((sizingtype == ST_STRETCH) || (sizingtype == ST_TILE)) { >>> - int destCenterWidth = dstSize.x - (sm.cxLeftWidth + >>> sm.cxRightWidth); >>> - int srcCenterWidth = srcSize.x - (sm.cxLeftWidth + >>> sm.cxRightWidth); >>> - int destCenterHeight = dstSize.y - (sm.cyTopHeight + >>> sm.cyBottomHeight); >>> - int srcCenterHeight = srcSize.y - (sm.cyTopHeight + >>> sm.cyBottomHeight); >>> - >>> - if(destCenterWidth > 0) { >>> - /* Center top */ >>> - if(!UXTHEME_SizedBlt (hdcDst, sm.cxLeftWidth, 0, >>> - destCenterWidth, sm.cyTopHeight, >>> - hdcSrc, rcSrc.left+sm.cxLeftWidth, >>> rcSrc.top, >>> - srcCenterWidth, sm.cyTopHeight, >>> - sizingtype, transparent, >>> transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - goto draw_error; >>> - } >>> - /* Center bottom */ >>> - if(!UXTHEME_SizedBlt (hdcDst, sm.cxLeftWidth, >>> dstSize.y-sm.cyBottomHeight, >>> - destCenterWidth, sm.cyBottomHeight, >>> - hdcSrc, rcSrc.left+sm.cxLeftWidth, >>> rcSrc.bottom-sm.cyBottomHeight, >>> - srcCenterWidth, sm.cyBottomHeight, >>> - sizingtype, transparent, >>> transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - goto draw_error; >>> - } >>> - } >>> - if(destCenterHeight > 0) { >>> - /* Left center */ >>> - if(!UXTHEME_SizedBlt (hdcDst, 0, sm.cyTopHeight, >>> - sm.cxLeftWidth, destCenterHeight, >>> - hdcSrc, rcSrc.left, >>> rcSrc.top+sm.cyTopHeight, >>> - sm.cxLeftWidth, srcCenterHeight, >>> - sizingtype, >>> - transparent, transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - goto draw_error; >>> - } >>> - /* Right center */ >>> - if(!UXTHEME_SizedBlt (hdcDst, dstSize.x-sm.cxRightWidth, >>> sm.cyTopHeight, >>> - sm.cxRightWidth, destCenterHeight, >>> - hdcSrc, rcSrc.right-sm.cxRightWidth, >>> rcSrc.top+sm.cyTopHeight, >>> - sm.cxRightWidth, srcCenterHeight, >>> - sizingtype, transparent, >>> transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - goto draw_error; >>> - } >>> - } >>> - if(destCenterHeight > 0 && destCenterWidth > 0) { >>> - BOOL borderonly = FALSE; >>> - GetThemeBool(hTheme, iPartId, iStateId, TMT_BORDERONLY, >>> &borderonly); >>> - if(!borderonly) { >>> - /* Center */ >>> - if(!UXTHEME_SizedBlt (hdcDst, sm.cxLeftWidth, >>> sm.cyTopHeight, >>> - destCenterWidth, >>> destCenterHeight, >>> - hdcSrc, >>> rcSrc.left+sm.cxLeftWidth, rcSrc.top+sm.cyTopHeight, >>> - srcCenterWidth, srcCenterHeight, >>> - sizingtype, transparent, >>> transparentcolor)) { >>> - hr = HRESULT_FROM_WIN32(GetLastError()); >>> - goto draw_error; >>> - } >>> - } >>> - } >>> - } >>> - >>> -draw_error: >>> - SetViewportOrgEx (hdcDst, org.x, org.y, NULL); >>> - } >>> - SelectObject(hdcSrc, oldSrc); >>> - DeleteDC(hdcSrc); >>> - if (bmpSrcResized) DeleteObject(bmpSrcResized); >>> - if (hdcOrigSrc) DeleteDC(hdcOrigSrc); >>> - *pRect = rcDst; >>> - return hr; >>> + *pRect = rcDst; >>> + } >>> + >>> + DrawStream.signature = 0x44727753; >>> + DrawStream.reserved = 0; >>> + DrawStream.unknown1 = 1; >>> + DrawStream.unknown2 = 9; >>> + DrawStream.hDC = hdc; >>> + DrawStream.hImage = bmpSrc; >>> + DrawStream.crTransparent = transparentcolor; >>> + DrawStream.rcSrc = rcSrc; >>> + DrawStream.rcDest = rcDst; >>> + DrawStream.leftSizingMargin = sm.cxLeftWidth; >>> + DrawStream.rightSizingMargin = sm.cxRightWidth; >>> + DrawStream.topSizingMargin = sm.cyTopHeight; >>> + DrawStream.bottomSizingMargin = sm.cyBottomHeight; >>> + DrawStream.drawOption = 0; >>> + >>> + if (transparent == ALPHABLEND_FULL) >>> + DrawStream.drawOption |= DS_TRANSPARENTALPHA; >>> + else if (transparent == ALPHABLEND_BINARY) >>> + DrawStream.drawOption |= DS_TRANSPARENTCLR; >>> + >>> + if (sizingtype == ST_TILE) >>> + DrawStream.drawOption |= DS_TILE; >>> + else if (sizingtype == ST_TRUESIZE) >>> + DrawStream.drawOption |= DS_TRUESIZE; >>> + >>> + GdiDrawStream(hdc, sizeof(DrawStream), &DrawStream); >>> + return HRESULT_FROM_WIN32(GetLastError()); >>> } >>> >>> /*********************************************************************** >>> @@ -1050,7 +769,9 @@ >>> /* This should never happen, and hence I don't know what to return */ >>> hr = E_FAIL; >>> } >>> +#if 0 >>> if(SUCCEEDED(hr)) >>> +#endif >>> { >>> RECT rcGlyph = *pRect; >>> MARGINS margin; >>> >>> Modified: trunk/reactos/dll/win32/uxtheme/uxthemep.h >>> URL: >>> http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/uxtheme/uxthemep.h?rev=74457&r1=74456&r2=74457&view=diff >>> ============================================================================== >>> --- trunk/reactos/dll/win32/uxtheme/uxthemep.h [iso-8859-1] (original) >>> +++ trunk/reactos/dll/win32/uxtheme/uxthemep.h [iso-8859-1] Wed May 3 >>> 11:13:23 2017 >>> @@ -14,6 +14,7 @@ >>> #include <winnls.h> >>> #include <windowsx.h> >>> #include <undocuser.h> >>> +#include <undocgdi.h> >>> #include <uxtheme.h> >>> #include <uxundoc.h> >>> #include <vfwmsgs.h> >>> >>> >>> >> >> >> _______________________________________________ >> Ros-dev mailing list >> Ros-dev@reactos.org >> http://www.reactos.org/mailman/listinfo/ros-dev > > _______________________________________________ > Ros-dev mailing list > Ros-dev@reactos.org > http://www.reactos.org/mailman/listinfo/ros-dev > _______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev