ole32: Fix OleDraw() regarding passed rectangle handling
Nikolay Sivov
nsivov at codeweavers.com
Mon Nov 26 04:53:58 CST 2012
http://bugs.winehq.org/show_bug.cgi?id=32292
-------------- next part --------------
>From 04cbde83b4ca72162da1e59f7b2b740ba41234f4 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon, 26 Nov 2012 12:49:59 -0500
Subject: [PATCH 5/5] Fix OleDraw() regarding passed rectangle handling
---
dlls/ole32/ole2.c | 14 ++------
dlls/ole32/tests/ole2.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 89 insertions(+), 12 deletions(-)
diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c
index 6a91ba6..7e55fb2 100644
--- a/dlls/ole32/ole2.c
+++ b/dlls/ole32/ole2.c
@@ -2554,7 +2554,7 @@ HRESULT WINAPI OleDraw(
IUnknown *pUnk,
DWORD dwAspect,
HDC hdcDraw,
- LPCRECT lprcBounds)
+ LPCRECT rect)
{
HRESULT hres;
IViewObject *viewobject;
@@ -2562,24 +2562,14 @@ HRESULT WINAPI OleDraw(
hres = IUnknown_QueryInterface(pUnk,
&IID_IViewObject,
(void**)&viewobject);
-
if (SUCCEEDED(hres))
{
- RECTL rectl;
-
- rectl.left = lprcBounds->left;
- rectl.right = lprcBounds->right;
- rectl.top = lprcBounds->top;
- rectl.bottom = lprcBounds->bottom;
- hres = IViewObject_Draw(viewobject, dwAspect, -1, 0, 0, 0, hdcDraw, &rectl, 0, 0, 0);
-
+ hres = IViewObject_Draw(viewobject, dwAspect, -1, 0, 0, 0, hdcDraw, (RECTL*)rect, 0, 0, 0);
IViewObject_Release(viewobject);
return hres;
}
else
- {
return DV_E_NOIVIEWOBJECT;
- }
}
/***********************************************************************
diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c
index 8dd3606..eb8e6d3 100644
--- a/dlls/ole32/tests/ole2.c
+++ b/dlls/ole32/tests/ole2.c
@@ -726,6 +726,84 @@ static IRunnableObject OleObjectRunnable = { &OleObjectRunnableVtbl };
static const CLSID CLSID_Equation3 = {0x0002CE02, 0x0000, 0x0000, {0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46} };
+static HRESULT WINAPI viewobject_QueryInterface(IViewObject *iface, REFIID riid, void **obj)
+{
+ if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IViewObject))
+ {
+ *obj = iface;
+ return S_OK;
+ }
+
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI viewobject_AddRef(IViewObject *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI viewobject_Release(IViewObject *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI viewobject_Draw(IViewObject *iface, DWORD aspect, LONG index,
+ void *paspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw,
+ LPCRECTL bounds, LPCRECTL wbounds, BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+ ULONG_PTR dwContinue)
+{
+ ok(index == -1, "index=%d\n", index);
+ return S_OK;
+}
+
+static HRESULT WINAPI viewobject_GetColorSet(IViewObject *iface, DWORD draw_aspect, LONG index,
+ void *aspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **colorset)
+{
+ ok(0, "unexpected call GetColorSet\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI viewobject_Freeze(IViewObject *iface, DWORD draw_aspect, LONG index,
+ void *aspect, DWORD *freeze)
+{
+ ok(0, "unexpected call Freeze\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI viewobject_Unfreeze(IViewObject *iface, DWORD freeze)
+{
+ ok(0, "unexpected call Unfreeze\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI viewobject_SetAdvise(IViewObject *iface, DWORD aspects, DWORD advf, IAdviseSink *sink)
+{
+ ok(0, "unexpected call SetAdvise\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI viewobject_GetAdvise(IViewObject *iface, DWORD *aspects, DWORD *advf,
+ IAdviseSink **sink)
+{
+ ok(0, "unexpected call GetAdvise\n");
+ return E_NOTIMPL;
+}
+
+static const struct IViewObjectVtbl viewobjectvtbl = {
+ viewobject_QueryInterface,
+ viewobject_AddRef,
+ viewobject_Release,
+ viewobject_Draw,
+ viewobject_GetColorSet,
+ viewobject_Freeze,
+ viewobject_Unfreeze,
+ viewobject_SetAdvise,
+ viewobject_GetAdvise
+};
+
+static IViewObject viewobject = { &viewobjectvtbl };
+
static void test_OleCreate(IStorage *pStorage)
{
HRESULT hr;
@@ -1853,6 +1931,14 @@ static void test_OleLockRunning(void)
ok(hr == S_OK, "OleLockRunning failed 0x%08x\n", hr);
}
+static void test_OleDraw(void)
+{
+ HRESULT hr;
+
+ hr = OleDraw((IUnknown*)&viewobject, 0, (HDC)0x1, NULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+}
+
START_TEST(ole2)
{
DWORD dwRegister;
@@ -1889,6 +1975,7 @@ START_TEST(ole2)
test_default_handler();
test_runnable();
test_OleLockRunning();
+ test_OleDraw();
CoUninitialize();
}
--
1.7.10.4
More information about the wine-patches
mailing list