diff --git a/dlls/shdocvw/Makefile.in b/dlls/shdocvw/Makefile.in index ee9723a53fb..3f3d88d0365 100644 --- a/dlls/shdocvw/Makefile.in +++ b/dlls/shdocvw/Makefile.in @@ -19,6 +19,7 @@ C_SRCS = \ regsvr.c \ shdocvw_main.c \ shlinstobj.c \ + view.c \ webbrowser.c RC_SRCS = shdocvw.rc diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index fb225a3decc..4dd8e9532f7 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -67,6 +67,7 @@ typedef struct { const IProvideClassInfo2Vtbl *lpProvideClassInfoVtbl; const IQuickActivateVtbl *lpQuickActivateVtbl; const IConnectionPointContainerVtbl *lpConnectionPointContainerVtbl; + const IViewObject2Vtbl *lpViewObjectVtbl; LONG ref; @@ -83,8 +84,11 @@ typedef struct { #define CLASSINFO(x) ((IProvideClassInfo2*) &(x)->lpProvideClassInfoVtbl) #define QUICKACT(x) ((IQuickActivate*) &(x)->lpQuickActivateVtbl) #define CONPTCONT(x) ((IConnectionPointContainer*) &(x)->lpConnectionPointContainerVtbl) +#define VIEWOBJ(x) ((IViewObject*) &(x)->lpViewObjectVtbl); +#define VIEWOBJ2(x) ((IViewObject2*) &(x)->lpViewObjectVtbl); void WebBrowser_OleObject_Init(WebBrowser*); +void WebBrowser_ViewObject_Init(WebBrowser*); void WebBrowser_Persist_Init(WebBrowser*); void WebBrowser_ClassInfo_Init(WebBrowser*); void WebBrowser_Misc_Init(WebBrowser*); diff --git a/dlls/shdocvw/view.c b/dlls/shdocvw/view.c new file mode 100644 index 00000000000..1f4d3c708b9 --- /dev/null +++ b/dlls/shdocvw/view.c @@ -0,0 +1,124 @@ +/* + * Copyright 2005 Jacek Caban + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "wine/debug.h" +#include "shdocvw.h" + +WINE_DEFAULT_DEBUG_CHANNEL(shdocvw); + +#define VIEWOBJ_THIS(iface) DEFINE_THIS(WebBrowser, ViewObject, iface) + +static HRESULT WINAPI ViewObject_QueryInterface(IViewObject2 *iface, REFIID riid, void **ppv) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + return IWebBrowser2_QueryInterface(WEBBROWSER(This), riid, ppv); +} + +static ULONG WINAPI ViewObject_AddRef(IViewObject2 *iface) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + return IWebBrowser2_AddRef(WEBBROWSER(This)); +} + +static ULONG WINAPI ViewObject_Release(IViewObject2 *iface) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + return IWebBrowser2_Release(WEBBROWSER(This)); +} + +static HRESULT WINAPI ViewObject_Draw(IViewObject2 *iface, DWORD dwDrawAspect, + LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, + HDC hdcDraw, LPCRECTL lprcBounds, LPCRECTL lprcWBounds, + BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR), + ULONG_PTR dwContinue) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + FIXME("(%p)->(%ld %ld %p %p %p %p %p %p %p %08lx)\n", This, dwDrawAspect, lindex, + pvAspect, ptd, hdcTargetDev, hdcDraw, lprcBounds, lprcWBounds, pfnContinue, + dwContinue); + return E_NOTIMPL; +} + +static HRESULT WINAPI ViewObject_GetColorSet(IViewObject2 *iface, DWORD dwAspect, + LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, + LOGPALETTE **ppColorSet) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + FIXME("(%p)->(%ld %ld %p %p %p %p)\n", This, dwAspect, lindex, pvAspect, ptd, + hicTargetDev, ppColorSet); + return E_NOTIMPL; +} + +static HRESULT WINAPI ViewObject_Freeze(IViewObject2 *iface, DWORD dwDrawAspect, LONG lindex, + void *pvAspect, DWORD *pdwFreeze) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + FIXME("(%p)->(%ld %ld %p %p)\n", This, dwDrawAspect, lindex, pvAspect, pdwFreeze); + return E_NOTIMPL; +} + +static HRESULT WINAPI ViewObject_Unfreeze(IViewObject2 *iface, DWORD dwFreeze) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + FIXME("(%p)->(%ld)\n", This, dwFreeze); + return E_NOTIMPL; +} + +static HRESULT WINAPI ViewObject_SetAdvise(IViewObject2 *iface, DWORD aspects, DWORD advf, + IAdviseSink *pAdvSink) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + FIXME("(%p)->(%ld %08lx %p)\n", This, aspects, advf, pAdvSink); + return E_NOTIMPL; +} + +static HRESULT WINAPI ViewObject_GetAdvise(IViewObject2 *iface, DWORD *pAspects, + DWORD *pAdvf, IAdviseSink **ppAdvSink) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + FIXME("(%p)->(%p %p %p)\n", This, pAspects, pAdvf, ppAdvSink); + return E_NOTIMPL; +} + +static HRESULT WINAPI ViewObject_GetExtent(IViewObject2 *iface, DWORD dwAspect, LONG lindex, + DVTARGETDEVICE *ptd, LPSIZEL lpsizel) +{ + WebBrowser *This = VIEWOBJ_THIS(iface); + FIXME("(%p)->(%ld %ld %p %p)\n", This, dwAspect, lindex, ptd, lpsizel); + return E_NOTIMPL; +} + +static const IViewObject2Vtbl ViewObjectVtbl = { + ViewObject_QueryInterface, + ViewObject_AddRef, + ViewObject_Release, + ViewObject_Draw, + ViewObject_GetColorSet, + ViewObject_Freeze, + ViewObject_Unfreeze, + ViewObject_SetAdvise, + ViewObject_GetAdvise, + ViewObject_GetExtent +}; + +#undef VIEWOBJ_THIS + +void WebBrowser_ViewObject_Init(WebBrowser *This) +{ + This->lpViewObjectVtbl = &ViewObjectVtbl; +} diff --git a/dlls/shdocvw/webbrowser.c b/dlls/shdocvw/webbrowser.c index 5520d745abd..f9b8b939115 100644 --- a/dlls/shdocvw/webbrowser.c +++ b/dlls/shdocvw/webbrowser.c @@ -41,7 +41,7 @@ static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = WEBBROWSER(This); - }else if(IsEqualGUID (&IID_IDispatch, riid)) { + }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); *ppv = WEBBROWSER(This); }else if(IsEqualGUID(&IID_IWebBrowser, riid)) { @@ -74,18 +74,24 @@ static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid }else if(IsEqualGUID (&IID_IPersistStreamInit, riid)) { TRACE("(%p)->(IID_IPersistStreamInit %p)\n", This, ppv); *ppv = PERSTRINIT(This); - }else if(IsEqualGUID (&IID_IProvideClassInfo, riid)) { + }else if(IsEqualGUID(&IID_IProvideClassInfo, riid)) { TRACE("(%p)->(IID_IProvideClassInfo %p)\n", This, ppv); *ppv = CLASSINFO(This); - }else if(IsEqualGUID (&IID_IProvideClassInfo2, riid)) { + }else if(IsEqualGUID(&IID_IProvideClassInfo2, riid)) { TRACE("(%p)->(IID_IProvideClassInfo2 %p)\n", This, ppv); *ppv = CLASSINFO(This); - }else if(IsEqualGUID (&IID_IQuickActivate, riid)) { + }else if(IsEqualGUID(&IID_IQuickActivate, riid)) { TRACE("(%p)->(IID_IQuickActivate %p)\n", This, ppv); *ppv = QUICKACT(This); - }else if(IsEqualGUID (&IID_IConnectionPointContainer, riid)) { + }else if(IsEqualGUID(&IID_IConnectionPointContainer, riid)) { TRACE("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv); *ppv = CONPTCONT(This); + }else if(IsEqualGUID(&IID_IViewObject, riid)) { + TRACE("(%p)->(IID_IViewObject %p)\n", This, ppv); + *ppv = VIEWOBJ(This); + }else if(IsEqualGUID(&IID_IViewObject2, riid)) { + TRACE("(%p)->(IID_IViewObject2 %p)\n", This, ppv); + *ppv = VIEWOBJ2(This); } if(*ppv) { @@ -706,6 +712,7 @@ HRESULT WebBrowser_Create(IUnknown *pOuter, REFIID riid, void **ppv) ret->ref = 0; WebBrowser_OleObject_Init(ret); + WebBrowser_ViewObject_Init(ret); WebBrowser_Persist_Init(ret); WebBrowser_ClassInfo_Init(ret); WebBrowser_Misc_Init(ret);