[PATCH] Add DISPID_PICT_RENDER support to OLEPictureImpl_Invoke
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Mon Jul 11 06:39:21 CDT 2011
---
dlls/oleaut32/olepicture.c | 80 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 80 insertions(+), 0 deletions(-)
diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c
index 8081785..b62404d 100644
--- a/dlls/oleaut32/olepicture.c
+++ b/dlls/oleaut32/olepicture.c
@@ -2021,6 +2021,14 @@ static HRESULT WINAPI OLEPictureImpl_Invoke(
return DISP_E_BADPARAMCOUNT;
}
}
+ else if (wFlags & DISPATCH_METHOD)
+ {
+ if (pDispParams->cArgs != 10)
+ {
+ ERR("param count for DISPATCH_METHOD was %d instead of 10\n", pDispParams->cArgs);
+ return DISP_E_BADPARAMCOUNT;
+ }
+ }
switch (dispIdMember)
{
@@ -2080,6 +2088,78 @@ static HRESULT WINAPI OLEPictureImpl_Invoke(
return IPicture_get_Height(&This->IPicture_iface, &V_I4(pVarResult));
}
break;
+ case DISPID_PICT_RENDER:
+ if (wFlags & DISPATCH_METHOD)
+ {
+ VARIANTARG varHDC, varRect;
+ VARIANTARG varX, varY, varCX, varCY;
+ VARIANTARG varXSrc, varYSrc, varCXSrc, varCYSrc;
+ HRESULT hr;
+
+ TRACE("DISPID_PICT_RENDER %d %d %d %d %d %d %d %d %d %d\n",
+ V_VT(&pDispParams->rgvarg[0]), V_VT(&pDispParams->rgvarg[1]),
+ V_VT(&pDispParams->rgvarg[2]), V_VT(&pDispParams->rgvarg[3]),
+ V_VT(&pDispParams->rgvarg[4]), V_VT(&pDispParams->rgvarg[5]),
+ V_VT(&pDispParams->rgvarg[6]), V_VT(&pDispParams->rgvarg[7]),
+ V_VT(&pDispParams->rgvarg[8]), V_VT(&pDispParams->rgvarg[9]));
+
+ VariantInit(&varHDC);
+ hr = VariantChangeTypeEx(&varHDC, &pDispParams->rgvarg[9], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ VariantInit(&varX);
+ hr = VariantChangeTypeEx(&varX, &pDispParams->rgvarg[8], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ VariantInit(&varY);
+ hr = VariantChangeTypeEx(&varY, &pDispParams->rgvarg[7], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ VariantInit(&varCX);
+ hr = VariantChangeTypeEx(&varCX, &pDispParams->rgvarg[6], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ VariantInit(&varCY);
+ hr = VariantChangeTypeEx(&varCY, &pDispParams->rgvarg[5], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ VariantInit(&varXSrc);
+ hr = VariantChangeTypeEx(&varXSrc, &pDispParams->rgvarg[4], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ VariantInit(&varYSrc);
+ hr = VariantChangeTypeEx(&varYSrc, &pDispParams->rgvarg[3], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ VariantInit(&varCXSrc);
+ hr = VariantChangeTypeEx(&varCXSrc, &pDispParams->rgvarg[2], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ VariantInit(&varCYSrc);
+ hr = VariantChangeTypeEx(&varCY, &pDispParams->rgvarg[1], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ VariantInit(&varRect);
+ hr = VariantChangeTypeEx(&varRect, &pDispParams->rgvarg[0], lcid, 0, VT_I4);
+ if (FAILED(hr))
+ return hr;
+
+ return IPicture_Render(&This->IPicture_iface, (HDC)V_I4(&varHDC),
+ V_I4(&varX), V_I4(&varY), V_I4(&varCX), V_I4(&varCY),
+ V_I4(&varXSrc), V_I4(&varYSrc),
+ V_I4(&varCXSrc), V_I4(&varCYSrc),
+ (LPCRECT)&V_I4(&varRect));
+ }
+ break;
}
ERR("invalid dispid 0x%x or wFlags 0x%x\n", dispIdMember, wFlags);
--
1.7.4.1
--------------040805080300030704030002--
More information about the wine-patches
mailing list