Module: wine Branch: master Commit: b6d50aed419a9390aa6b840de6a17b7c2698d1f9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b6d50aed419a9390aa6b840de6...
Author: Nikolay Sivov bunglehead@gmail.com Date: Wed Dec 10 15:08:47 2008 +0300
oleaut32: Added PICTYPE_NONE and PICTYPE_UNINITIALIZED to IPicture::Render.
---
dlls/oleaut32/olepicture.c | 8 +++++ dlls/oleaut32/tests/olepicture.c | 65 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 0 deletions(-)
diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c index 498ee53..bdce729 100644 --- a/dlls/oleaut32/olepicture.c +++ b/dlls/oleaut32/olepicture.c @@ -637,6 +637,10 @@ static HRESULT WINAPI OLEPictureImpl_Render(IPicture *iface, HDC hdc, TRACE("prcWBounds (%d,%d) - (%d,%d)\n", prcWBounds->left, prcWBounds->top, prcWBounds->right, prcWBounds->bottom);
+ if(cx == 0 || cy == 0 || cxSrc == 0 || cySrc == 0){ + return CTL_E_INVALIDPROPERTYVALUE; + } + /* * While the documentation suggests this to be here (or after rendering?) * it does cause an endless recursion in my sample app. -MM 20010804 @@ -644,6 +648,10 @@ static HRESULT WINAPI OLEPictureImpl_Render(IPicture *iface, HDC hdc, */
switch(This->desc.picType) { + case PICTYPE_UNINITIALIZED: + case PICTYPE_NONE: + /* nothing to do */ + return S_OK; case PICTYPE_BITMAP: { HBITMAP hbmpOld; diff --git a/dlls/oleaut32/tests/olepicture.c b/dlls/oleaut32/tests/olepicture.c index f81c419..89e99dd 100644 --- a/dlls/oleaut32/tests/olepicture.c +++ b/dlls/oleaut32/tests/olepicture.c @@ -25,6 +25,7 @@ #include <float.h>
#define COBJMACROS +#define NONAMELESSUNION
#include "wine/test.h" #include <windef.h> @@ -587,6 +588,69 @@ static void test_enhmetafile(void) GlobalFree(hglob); }
+static void test_Render(void) +{ + IPicture *pic; + HRESULT hres; + short type; + PICTDESC desc; + HDC hdc = GetDC(0); + + /* test IPicture::Render return code on uninitialized picture */ + OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (VOID**)&pic); + hres = IPicture_get_Type(pic, &type); + ok(hres == S_OK, "IPicture_get_Type does not return S_OK, but 0x%08x\n", hres); + ok(type == PICTYPE_UNINITIALIZED, "Expected type = PICTYPE_UNINITIALIZED, got = %d\n", type); + /* zero dimensions */ + hres = IPicture_Render(pic, hdc, 0, 0, 0, 0, 0, 0, 0, 0, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 10, 0, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 0, 10, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 0, 0, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 0, 10, 0, 0, 10, 10, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 10, 0, 0, 0, 10, 10, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 0, 0, 0, 0, 10, 10, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + /* nonzero dimensions, PICTYPE_UNINITIALIZED */ + hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 10, 10, NULL); + ole_expect(hres, S_OK); + IPicture_Release(pic); + + desc.cbSizeofstruct = sizeof(PICTDESC); + desc.picType = PICTYPE_ICON; + desc.u.icon.hicon = LoadIcon(NULL, IDI_APPLICATION); + if(!desc.u.icon.hicon){ + win_skip("LoadIcon failed. Skipping...\n"); + ReleaseDC(NULL, hdc); + return; + } + + OleCreatePictureIndirect(&desc, &IID_IPicture, TRUE, (VOID**)&pic); + /* zero dimensions, PICTYPE_ICON */ + hres = IPicture_Render(pic, hdc, 0, 0, 0, 0, 0, 0, 0, 0, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 10, 0, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 0, 10, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 0, 0, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 0, 10, 0, 0, 10, 10, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 10, 0, 0, 0, 10, 10, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + hres = IPicture_Render(pic, hdc, 0, 0, 0, 0, 0, 0, 10, 10, NULL); + ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE); + IPicture_Release(pic); + + ReleaseDC(NULL, hdc); +} + START_TEST(olepicture) { hOleaut32 = GetModuleHandleA("oleaut32.dll"); @@ -613,6 +677,7 @@ START_TEST(olepicture)
test_Invoke(); test_OleCreatePictureIndirect(); + test_Render(); }