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

Reply via email to