Module: wine Branch: master Commit: 03b06fb76ba4204df5c20fda8955da09e16ec095 URL: http://source.winehq.org/git/wine.git/?a=commit;h=03b06fb76ba4204df5c20fda89...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Jun 8 07:47:27 2016 +0300
msscript: Implement GetExtent().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/msscript.ocx/Makefile.in | 2 +- dlls/msscript.ocx/msscript.c | 19 +++++++++++++++++-- dlls/msscript.ocx/tests/Makefile.in | 2 +- dlls/msscript.ocx/tests/msscript.c | 34 +++++++++++++++++++++++++++++++++- 4 files changed, 52 insertions(+), 5 deletions(-)
diff --git a/dlls/msscript.ocx/Makefile.in b/dlls/msscript.ocx/Makefile.in index bc12e76..7d76896 100644 --- a/dlls/msscript.ocx/Makefile.in +++ b/dlls/msscript.ocx/Makefile.in @@ -1,7 +1,7 @@ MODULE = msscript.ocx RC_SRCS = msscript.rc IDL_SRCS = msscript.idl -IMPORTS = ole32 oleaut32 +IMPORTS = gdi32 user32 ole32 oleaut32
C_SRCS = \ msscript.c diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c index d525b57..efa20c0 100644 --- a/dlls/msscript.ocx/msscript.c +++ b/dlls/msscript.ocx/msscript.c @@ -35,6 +35,7 @@ struct ScriptControl { IOleObject IOleObject_iface; LONG ref; IOleClientSite *site; + SIZEL extent; };
static HINSTANCE msscript_instance; @@ -611,9 +612,13 @@ static HRESULT WINAPI OleObject_GetExtent(IOleObject *iface, DWORD aspect, SIZEL { ScriptControl *This = impl_from_IOleObject(iface);
- FIXME("(%p)->(%d %p)\n", This, aspect, size); + TRACE("(%p)->(%d %p)\n", This, aspect, size);
- return E_NOTIMPL; + if (aspect != DVASPECT_CONTENT) + return DV_E_DVASPECT; + + *size = This->extent; + return S_OK; }
static HRESULT WINAPI OleObject_Advise(IOleObject *iface, IAdviseSink *sink, DWORD *connection) @@ -775,7 +780,9 @@ static const IPersistStreamInitVtbl PersistStreamInitVtbl = { static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv) { ScriptControl *script_control; + DWORD dpi_x, dpi_y; HRESULT hres; + HDC hdc;
TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
@@ -789,6 +796,14 @@ static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknow script_control->ref = 1; script_control->site = NULL;
+ hdc = GetDC(0); + dpi_x = GetDeviceCaps(hdc, LOGPIXELSX); + dpi_y = GetDeviceCaps(hdc, LOGPIXELSY); + ReleaseDC(0, hdc); + + script_control->extent.cx = MulDiv(38, 2540, dpi_x); + script_control->extent.cy = MulDiv(38, 2540, dpi_y); + hres = IScriptControl_QueryInterface(&script_control->IScriptControl_iface, riid, ppv); IScriptControl_Release(&script_control->IScriptControl_iface); return hres; diff --git a/dlls/msscript.ocx/tests/Makefile.in b/dlls/msscript.ocx/tests/Makefile.in index 597214a..8d769d3 100644 --- a/dlls/msscript.ocx/tests/Makefile.in +++ b/dlls/msscript.ocx/tests/Makefile.in @@ -1,5 +1,5 @@ TESTDLL = msscript.ocx -IMPORTS = ole32 +IMPORTS = user32 gdi32 ole32
C_SRCS = \ msscript.c diff --git a/dlls/msscript.ocx/tests/msscript.c b/dlls/msscript.ocx/tests/msscript.c index 7c96f99..6dd7d67 100644 --- a/dlls/msscript.ocx/tests/msscript.c +++ b/dlls/msscript.ocx/tests/msscript.c @@ -96,10 +96,12 @@ static IOleClientSite testclientsite = { &OleClientSiteVtbl };
static void test_oleobject(void) { + DWORD status, dpi_x, dpi_y; IOleClientSite *site; IOleObject *obj; - DWORD status; + SIZEL extent; HRESULT hr; + HDC hdc;
hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, &IID_IOleObject, (void**)&obj); @@ -131,6 +133,36 @@ static void test_oleobject(void) ok(hr == S_OK, "got 0x%08x\n", hr); ok(site == NULL, "got %p\n", site);
+ /* extents */ + hdc = GetDC(0); + dpi_x = GetDeviceCaps(hdc, LOGPIXELSX); + dpi_y = GetDeviceCaps(hdc, LOGPIXELSY); + ReleaseDC(0, hdc); + + memset(&extent, 0, sizeof(extent)); + hr = IOleObject_GetExtent(obj, DVASPECT_CONTENT, &extent); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(extent.cx == MulDiv(38, 2540, dpi_x), "got %d\n", extent.cx); + ok(extent.cy == MulDiv(38, 2540, dpi_y), "got %d\n", extent.cy); + + extent.cx = extent.cy = 0xdeadbeef; + hr = IOleObject_GetExtent(obj, DVASPECT_THUMBNAIL, &extent); + ok(hr == DV_E_DVASPECT, "got 0x%08x\n", hr); + ok(extent.cx == 0xdeadbeef, "got %d\n", extent.cx); + ok(extent.cy == 0xdeadbeef, "got %d\n", extent.cy); + + extent.cx = extent.cy = 0xdeadbeef; + hr = IOleObject_GetExtent(obj, DVASPECT_ICON, &extent); + ok(hr == DV_E_DVASPECT, "got 0x%08x\n", hr); + ok(extent.cx == 0xdeadbeef, "got %d\n", extent.cx); + ok(extent.cy == 0xdeadbeef, "got %d\n", extent.cy); + + extent.cx = extent.cy = 0xdeadbeef; + hr = IOleObject_GetExtent(obj, DVASPECT_DOCPRINT, &extent); + ok(hr == DV_E_DVASPECT, "got 0x%08x\n", hr); + ok(extent.cx == 0xdeadbeef, "got %d\n", extent.cx); + ok(extent.cy == 0xdeadbeef, "got %d\n", extent.cy); + IOleObject_Release(obj); }