Nikolay Sivov : msscript: Implement GetExtent().
Alexandre Julliard
julliard at winehq.org
Thu Jun 9 10:35:14 CDT 2016
Module: wine
Branch: master
Commit: 03b06fb76ba4204df5c20fda8955da09e16ec095
URL: http://source.winehq.org/git/wine.git/?a=commit;h=03b06fb76ba4204df5c20fda8955da09e16ec095
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Jun 8 07:47:27 2016 +0300
msscript: Implement GetExtent().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);
}
More information about the wine-cvs
mailing list