riched20: Draw OLE objects with IViewObject implementation.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52752
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
This commit is contained in:
Jinoh Kang 2022-04-01 01:25:24 +09:00 committed by Alexandre Julliard
parent 164897e6c9
commit ecc607c6da
2 changed files with 29 additions and 2 deletions

View file

@ -5733,6 +5733,7 @@ void ME_GetOLEObjectSize(const ME_Context *c, ME_Run *run, SIZE *pSize)
void draw_ole( ME_Context *c, int x, int y, ME_Run *run, BOOL selected )
{
IDataObject* ido;
IViewObject* ivo;
FORMATETC fmt;
STGMEDIUM stgm;
DIBSECTION dibsect;
@ -5745,6 +5746,34 @@ void draw_ole( ME_Context *c, int x, int y, ME_Run *run, BOOL selected )
assert(run->nFlags & MERF_GRAPHICS);
assert(run->reobj);
if (SUCCEEDED(IOleObject_QueryInterface(run->reobj->obj.poleobj, &IID_IViewObject, (void**)&ivo)))
{
HRESULT hr;
RECTL bounds;
convert_sizel(c, &run->reobj->obj.sizel, &sz);
if (c->editor->nZoomNumerator != 0)
{
sz.cx = MulDiv(sz.cx, c->editor->nZoomNumerator, c->editor->nZoomDenominator);
sz.cy = MulDiv(sz.cy, c->editor->nZoomNumerator, c->editor->nZoomDenominator);
}
bounds.left = x;
bounds.top = y - sz.cy;
bounds.right = x + sz.cx;
bounds.bottom = y;
hr = IViewObject_Draw(ivo, DVASPECT_CONTENT, -1, 0, 0, 0, c->hDC, &bounds, NULL, NULL, 0);
if (FAILED(hr))
{
WARN("failed to draw object: %#08lx\n", hr);
}
IViewObject_Release(ivo);
return;
}
if (IOleObject_QueryInterface(run->reobj->obj.poleobj, &IID_IDataObject, (void**)&ido) != S_OK)
{
FIXME("Couldn't get interface\n");

View file

@ -4193,7 +4193,6 @@ static void subtest_InsertObject(struct reolecb_obj *callback)
UpdateWindow(hwnd);
testobj->line = __LINE__;
flush_dispatch_messages();
todo_wine
ok(testobj->draw_count != 0, "expected draw_count to be nonzero, got %d\n", testobj->draw_count);
SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)"");
@ -4225,7 +4224,6 @@ static void subtest_InsertObject(struct reolecb_obj *callback)
UpdateWindow(hwnd);
testobj->line = __LINE__;
flush_dispatch_messages();
todo_wine
ok(testobj->draw_count != 0, "expected draw_count to be nonzero, got %d\n", testobj->draw_count);
SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)"");