test: wmicon.c File Reference

Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

# wmicon.c File Reference

`#include "precomp.h"`

Go to the source code of this file.

## Defines

#define | SetBestStretchMode(hdc, bpp, fHT)
#define | GetCWidth(cxOrg, lrF, cxDes) (cxOrg ? cxOrg : ((lrF & DI_DEFAULTSIZE) ? SYSMET(CXICON) : cxDes))
#define | GetCHeight(cyOrg, lrF, cyDes) (cyOrg ? cyOrg : ((lrF & DI_DEFAULTSIZE) ? SYSMET(CYICON) : cyDes))

## Functions

BOOL | BltIcon (HDC hdc, int x, int y, int cx, int cy, HDC hdcSrc, PCURSOR pcur, BOOL fMask, LONG rop)
BOOL | _DrawIconEx (HDC hdc, int x, int y, PCURSOR pcur, int cx, int cy, UINT istepIfAniCur, HBRUSH hbr, UINT diFlags)

## Define Documentation

#define GetCHeight | ( | cyOrg,
|  | lrF,
|  | cyDes |  | ) | (cyOrg ? cyOrg : ((lrF & DI_DEFAULTSIZE) ? SYSMET(CYICON) : cyDes))

| Definition at line 23 of file wmicon.c. Referenced by _DrawIconEx().

#define GetCWidth | ( | cxOrg,
|  | lrF,
|  | cxDes |  | ) | (cxOrg ? cxOrg : ((lrF & DI_DEFAULTSIZE) ? SYSMET(CXICON) : cxDes))

| Definition at line 20 of file wmicon.c. Referenced by _DrawIconEx().

#define SetBestStretchMode | ( | hdc,
|  | bpp,
|  | fHT |  | ) |

Value:

    GreSetStretchBltMode(hdc,                                            \
                             (fHT ? HALFTONE :                               \
                                 ((bpp) == 1 ? BLACKONWHITE : COLORONCOLOR)))

Definition at line 15 of file wmicon.c.

## Function Documentation

BOOL _DrawIconEx | ( | HDC | hdc,
|  | int | x,
|  | int | y,
|  | PCURSOR | pcur,
|  | int | cx,
|  | int | cy,
|  | UINT | istepIfAniCur,
|  | HBRUSH | hbr,
|  | UINT | diFlags
| ) |

Definition at line 93 of file wmicon.c.

References BltIcon(), BOOL, CURSORF_ACON, cy, FALSE, GetCHeight, GetCWidth, ghdcMem, NULL, and TRUE.

Referenced by DrawCaptionIcon(), NtUserDrawIconEx(), xxxPaintIconsInSwitchWindow(), and xxxRealDrawMenuItem().

    00103 {
    00104     BOOL fSuccess = FALSE;
    00105
    00106     /*
    00107      * If this is an animated cursor, just grab the ith frame and use it
    00108      * for drawing.
    00109      */
    00110     if (pcur->CURSORF_flags & CURSORF_ACON) {
    00111
    00112         if ((int)istepIfAniCur >= ((PACON)pcur)->cicur) {
    00113             RIPERR0(ERROR_INVALID_PARAMETER, RIP_WARNING, "DrawIconEx, icon step out of range.");
    00114             goto Done;
    00115         }
    00116
    00117         pcur = ((PACON)pcur)->aspcur[((PACON)pcur)->aicur[istepIfAniCur]];
    00118     }
    00119
    00120     /*
    00121      * Setup defaults.
    00122      */
    00123     cx = GetCWidth(cx, diFlags, pcur->cx);
    00124     cy = GetCHeight(cy, diFlags, (pcur->cy / 2));
    00125
    00126     if (hbr) {
    00127
    00128         HBITMAP    hbmpT = NULL;
    00129         HDC        hdcT;
    00130         HBITMAP    hbmpOld;
    00131         POLYPATBLT PolyData;
    00132
    00133         if (hdcT = GreCreateCompatibleDC(hdc)) {
    00134
    00135             if (hbmpT = GreCreateCompatibleBitmap(hdc, cx, cy)) {
    00136                 POINT pt;
    00137                 BOOL bRet;
    00138
    00139                 hbmpOld = GreSelectBitmap(hdcT, hbmpT);
    00140
    00141                 /*
    00142                  * Set new dc's brush origin in same relative
    00143                  * location as passed-in dc's.
    00144                  */
    00145                 bRet = GreGetBrushOrg(hdc, &pt);
    00146                 /*
    00147                  * Bug 292396 - joejo
    00148                  * Stop overactive asserts by replacing with RIPMSG.
    00149                  */
    00150                 if (bRet != TRUE) {
    00151                     RIPMSG0(RIP_WARNING, "DrawIconEx, GreGetBrushOrg failed.");
    00152                 }
    00153
    00154                 bRet = GreSetBrushOrg(hdcT, pt.x, pt.y, NULL);
    00155                 if (bRet != TRUE) {
    00156                     RIPMSG0(RIP_WARNING, "DrawIconEx, GreSetBrushOrg failed.");
    00157                 }
    00158
    00159                 PolyData.x         = 0;
    00160                 PolyData.y         = 0;
    00161                 PolyData.cx        = cx;
    00162                 PolyData.cy        = cy;
    00163                 PolyData.BrClr.hbr = hbr;
    00164
    00165                 bRet = GrePolyPatBlt(hdcT, PATCOPY, &PolyData, 1, PPB_BRUSH);
    00166                 if (bRet != TRUE) {
    00167                     RIPMSG0(RIP_WARNING, "DrawIconEx, GrePolyPatBlt failed.");
    00168                 }
    00169
    00170                 /*
    00171                  * Output the image to the temporary memoryDC.
    00172                  */
    00173                 BltIcon(hdcT, 0, 0, cx, cy, ghdcMem, pcur, TRUE, SRCAND);
    00174                 BltIcon(hdcT, 0, 0, cx, cy, ghdcMem, pcur, FALSE, SRCINVERT);
    00175
    00176                 /*
    00177                  * Blt the bitmap to the original DC.
    00178                  */
    00179                 GreBitBlt(hdc, x, y, cx, cy, hdcT, 0, 0, SRCCOPY, (COLORREF)-1);
    00180
    00181                 GreSelectBitmap(hdcT, hbmpOld);
    00182
    00183                 bRet = GreDeleteObject(hbmpT);
    00184                 if (bRet != TRUE) {
    00185                     RIPMSG0(RIP_WARNING, "DrawIconEx, GreDeleteObject failed. Possible Leak");
    00186                 }
    00187
    00188                 fSuccess = TRUE;
    00189             }
    00190
    00191             GreDeleteDC(hdcT);
    00192         }
    00193
    00194     } else {
    00195
    00196         if (diFlags & DI_MASK) {
    00197
    00198             BltIcon(hdc,
    00199                     x,
    00200                     y,
    00201                     cx,
    00202                     cy,
    00203                     ghdcMem,
    00204                     pcur,
    00205                     TRUE,
    00206                     ((diFlags & DI_IMAGE) ? SRCAND : SRCCOPY));
    00207         }
    00208
    00209         if (diFlags & DI_IMAGE) {
    00210
    00211             BltIcon(hdc,
    00212                     x,
    00213                     y,
    00214                     cx,
    00215                     cy,
    00216                     ghdcMem,
    00217                     pcur,
    00218                     FALSE,
    00219                     ((diFlags & DI_MASK) ? SRCINVERT : SRCCOPY));
    00220         }
    00221
    00222         fSuccess = TRUE;
    00223     }
    00224
    00225 Done:
    00226
    00227     return fSuccess;
    00228 }

BOOL BltIcon | ( | HDC | hdc,
|  | int | x,
|  | int | y,
|  | int | cx,
|  | int | cy,
|  | HDC | hdcSrc,
|  | PCURSOR | pcur,
|  | BOOL | fMask,
|  | LONG | rop
| ) |

Definition at line 32 of file wmicon.c.

References BOOL, cy, FALSE, SetBestStretchMode, and TRUE.

Referenced by _DrawIconEx(), and BltMe4Times().

    00042 {
    00043     HBITMAP hbmpSave;
    00044     HBITMAP hbmpUse;
    00045     LONG    rgbText;
    00046     LONG    rgbBk;
    00047     int     nMode;
    00048
    00049     /*
    00050      * Setup the DC for drawing
    00051      */
    00052     hbmpUse = (fMask || !pcur->hbmColor ? pcur->hbmMask : pcur->hbmColor);
    00053
    00054     rgbBk   = GreSetBkColor(hdc, 0x00FFFFFFL);
    00055     rgbText = GreSetTextColor(hdc, 0x00000000L);
    00056     nMode   = SetBestStretchMode(hdc, pcur->bpp, FALSE);
    00057
    00058     hbmpSave = GreSelectBitmap(hdcSrc, hbmpUse);
    00059
    00060     /*
    00061      * Do the output to the surface.  By passing in (-1) as the background
    00062      * color, we are telling GDI to use the background-color already set
    00063      * in the DC.
    00064      */
    00065     GreStretchBlt(hdc,
    00066                   x,
    00067                   y,
    00068                   cx,
    00069                   cy,
    00070                   hdcSrc,
    00071                   0,
    00072                   (fMask || pcur->hbmColor ? 0 : pcur->cy / 2),
    00073                   pcur->cx,
    00074                   pcur->cy / 2,
    00075                   rop,
    00076                   (COLORREF)-1);
    00077
    00078     GreSetStretchBltMode(hdc, nMode);
    00079     GreSetTextColor(hdc, rgbText);
    00080     GreSetBkColor(hdc, rgbBk);
    00081
    00082     GreSelectBitmap(hdcSrc, hbmpSave);
    00083
    00084     return TRUE;
    00085 }