Module: wine Branch: master Commit: 8a4a761683599b9c581a9df75dea3f00070f2500 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8a4a761683599b9c581a9df75d...
Author: Owen Rudge orudge@codeweavers.com Date: Fri Nov 13 11:14:31 2009 -0600
comctl32: Implement SetOverlayImage, Replace, AddMasked, Draw, Remove, GetImageInfo.
---
dlls/comctl32/imagelist.c | 58 +++++++++++++++++++++++++++++++++++--------- 1 files changed, 46 insertions(+), 12 deletions(-)
diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c index 8853e22..0f2d042 100644 --- a/dlls/comctl32/imagelist.c +++ b/dlls/comctl32/imagelist.c @@ -3021,29 +3021,54 @@ static HRESULT WINAPI ImageListImpl_ReplaceIcon(IImageList *iface, int i, static HRESULT WINAPI ImageListImpl_SetOverlayImage(IImageList *iface, int iImage, int iOverlay) { - FIXME("STUB: %p %d %d\n", iface, iImage, iOverlay); - return E_NOTIMPL; + return ImageList_SetOverlayImage((HIMAGELIST) iface, iImage, iOverlay) + ? S_OK : E_FAIL; }
static HRESULT WINAPI ImageListImpl_Replace(IImageList *iface, int i, HBITMAP hbmImage, HBITMAP hbmMask) { - FIXME("STUB: %p %d %p %p\n", iface, i, hbmImage, hbmMask); - return E_NOTIMPL; + return ImageList_Replace((HIMAGELIST) iface, i, hbmImage, hbmMask) ? S_OK : + E_FAIL; }
static HRESULT WINAPI ImageListImpl_AddMasked(IImageList *iface, HBITMAP hbmImage, COLORREF crMask, int *pi) { - FIXME("STUB: %p %p %x %p\n", iface, hbmImage, crMask, pi); - return E_NOTIMPL; + HIMAGELIST This = (HIMAGELIST) iface; + int ret; + + if (!pi) + return E_FAIL; + + ret = ImageList_AddMasked(This, hbmImage, crMask); + + if (ret == -1) + return E_FAIL; + + *pi = ret; + return S_OK; }
static HRESULT WINAPI ImageListImpl_Draw(IImageList *iface, IMAGELISTDRAWPARAMS *pimldp) { - FIXME("STUB: %p %p\n", iface, pimldp); - return E_NOTIMPL; + HIMAGELIST This = (HIMAGELIST) iface; + HIMAGELIST old_himl = 0; + int ret = 0; + + if (!pimldp) + return E_FAIL; + + /* As far as I can tell, Windows simply ignores the contents of pimldp->himl + so we shall simulate the same */ + old_himl = pimldp->himl; + pimldp->himl = This; + + ret = ImageList_DrawIndirect(pimldp); + + pimldp->himl = old_himl; + return ret ? S_OK : E_FAIL; }
static HRESULT WINAPI ImageListImpl_Remove(IImageList *iface, int i) @@ -3054,15 +3079,24 @@ static HRESULT WINAPI ImageListImpl_Remove(IImageList *iface, int i) static HRESULT WINAPI ImageListImpl_GetIcon(IImageList *iface, int i, UINT flags, HICON *picon) { - FIXME("STUB: %p %d %x %p\n", iface, i, flags, picon); - return E_NOTIMPL; + HICON hIcon; + + if (!picon) + return E_FAIL; + + hIcon = ImageList_GetIcon((HIMAGELIST) iface, i, flags); + + if (hIcon == NULL) + return E_FAIL; + + *picon = hIcon; + return S_OK; }
static HRESULT WINAPI ImageListImpl_GetImageInfo(IImageList *iface, int i, IMAGEINFO *pImageInfo) { - FIXME("STUB: %p %d %p\n", iface, i, pImageInfo); - return E_NOTIMPL; + return ImageList_GetImageInfo((HIMAGELIST) iface, i, pImageInfo) ? S_OK : E_FAIL; }
static HRESULT WINAPI ImageListImpl_Copy(IImageList *iface, int iDst,