Module: wine Branch: master Commit: 83a66a981f6c8f46072c466266a54f4e265bdf85 URL: http://source.winehq.org/git/wine.git/?a=commit;h=83a66a981f6c8f46072c466266...
Author: Mike McCormack mike@codeweavers.com Date: Wed Nov 1 15:45:11 2006 +0900
imagelist: Move Nx1 assumptions about bitmaps dimensions into a single function.
---
dlls/comctl32/imagelist.c | 41 ++++++++++++++++++++++++++++------------- 1 files changed, 28 insertions(+), 13 deletions(-)
diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c index eac188e..ae24e06 100644 --- a/dlls/comctl32/imagelist.c +++ b/dlls/comctl32/imagelist.c @@ -22,14 +22,14 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * NOTE - * + * * This code was audited for completeness against the documented features * of Comctl32.dll version 6.0 on Sep. 12, 2002, by Dimitrie O. Paun. - * + * * Unless otherwise noted, we believe this code to be complete, as per * the specification mentioned above. * If you discover missing features, or bugs, please note them below. - * + * * TODO: * - Add support for ILD_PRESERVEALPHA, ILD_SCALE, ILD_DPISCALE * - Add support for ILS_GLOW, ILS_SHADOW, ILS_SATURATE, ILS_ALPHA @@ -90,6 +90,12 @@ static inline void imagelist_point_from_ pt->y = 0; }
+static inline void imagelist_get_bitmap_size( HIMAGELIST himl, UINT count, UINT cy, SIZE *sz ) +{ + sz->cx = count * himl->cx; + sz->cy = cy; +} + /************************************************************************* * IMAGELIST_InternalExpandBitmaps [Internal] * @@ -111,6 +117,7 @@ IMAGELIST_InternalExpandBitmaps (HIMAGEL HDC hdcBitmap; HBITMAP hbmNewBitmap, hbmNull; INT nNewWidth, nNewCount; + SIZE sz;
if ((himl->cCurImage + nImageCount <= himl->cMaxImage) && (himl->cy >= cy)) @@ -128,10 +135,12 @@ IMAGELIST_InternalExpandBitmaps (HIMAGEL if (hbmNewBitmap == 0) ERR("creating new image bitmap (x=%d y=%d)!\n", nNewWidth, cy);
- if(himl->cCurImage) + imagelist_get_bitmap_size(himl, nNewCount, cy, &sz); + + if (himl->cCurImage) { hbmNull = SelectObject (hdcBitmap, hbmNewBitmap); - BitBlt (hdcBitmap, 0, 0, himl->cCurImage * himl->cx, cy, + BitBlt (hdcBitmap, 0, 0, sz.cx, sz.cy, himl->hdcImage, 0, 0, SRCCOPY); SelectObject (hdcBitmap, hbmNull); } @@ -149,7 +158,7 @@ IMAGELIST_InternalExpandBitmaps (HIMAGEL if(himl->cCurImage) { hbmNull = SelectObject (hdcBitmap, hbmNewBitmap); - BitBlt (hdcBitmap, 0, 0, himl->cCurImage * himl->cx, cy, + BitBlt (hdcBitmap, 0, 0, sz.cx, sz.cy, himl->hdcMask, 0, 0, SRCCOPY); SelectObject (hdcBitmap, hbmNull); } @@ -617,9 +626,10 @@ ImageList_Create (INT cx, INT cy, UINT f himl->hbmImage = 0;
if ((himl->cMaxImage > 0) && (himl->flags & ILC_MASK)) { - himl->hbmMask = - CreateBitmap (himl->cx * himl->cMaxImage, himl->cy, - 1, 1, NULL); + SIZE sz; + + imagelist_get_bitmap_size(himl, himl->cMaxImage, himl->cy, &sz); + himl->hbmMask = CreateBitmap (sz.cx, sz.cy, 1, 1, NULL); if (himl->hbmMask == 0) { ERR("Error creating mask bitmap!\n"); goto cleanup; @@ -1275,11 +1285,14 @@ ImageList_Duplicate (HIMAGELIST himlSrc)
if (himlDst) { - BitBlt (himlDst->hdcImage, 0, 0, himlSrc->cCurImage * himlSrc->cx, himlSrc->cy, + SIZE sz; + + imagelist_get_bitmap_size(himlSrc, himlSrc->cCurImage, himlSrc->cy, &sz); + BitBlt (himlDst->hdcImage, 0, 0, sz.cx, sz.cy, himlSrc->hdcImage, 0, 0, SRCCOPY);
if (himlDst->hbmMask) - BitBlt (himlDst->hdcMask, 0, 0, himlSrc->cCurImage * himlSrc->cx, himlSrc->cy, + BitBlt (himlDst->hdcMask, 0, 0, sz.cx, sz.cy, himlSrc->hdcMask, 0, 0, SRCCOPY);
himlDst->cCurImage = himlSrc->cCurImage; @@ -2079,8 +2092,10 @@ ImageList_Remove (HIMAGELIST himl, INT i himl->hbmImage = hbmNewImage;
if (himl->hbmMask) { - hbmNewMask = CreateBitmap (himl->cMaxImage * himl->cx, himl->cy, - 1, 1, NULL); + SIZE sz; + + imagelist_get_bitmap_size(himl, himl->cMaxImage, himl->cy, &sz); + hbmNewMask = CreateBitmap (sz.cx, sz.cy, 1, 1, NULL); SelectObject (himl->hdcMask, hbmNewMask); DeleteObject (himl->hbmMask); himl->hbmMask = hbmNewMask;