mshtml: Added IHTMLWindow2::get_screen implementation.

This commit is contained in:
Jacek Caban 2009-11-30 17:56:01 +01:00 committed by Alexandre Julliard
parent cb5a2bbb02
commit 06884fb181
5 changed files with 270 additions and 4 deletions

View File

@ -33,6 +33,7 @@ C_SRCS = \
htmllocation.c \
htmlnode.c \
htmloption.c \
htmlscreen.c \
htmlscript.c \
htmlselect.c \
htmlstyle.c \

230
dlls/mshtml/htmlscreen.c Normal file
View File

@ -0,0 +1,230 @@
/*
* Copyright 2009 Jacek Caban for CodeWeavers
*
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdarg.h>
#define COBJMACROS
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "ole2.h"
#include "wine/debug.h"
#include "mshtml_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
typedef struct {
const IHTMLScreenVtbl *lpIHTMLScreenVtbl;
LONG ref;
} HTMLScreen;
#define HTMLSCREEN(x) ((IHTMLScreen*) &(x)->lpIHTMLScreenVtbl)
#define HTMLSCREEN_THIS(iface) DEFINE_THIS(HTMLScreen, IHTMLScreen, iface)
static HRESULT WINAPI HTMLScreen_QueryInterface(IHTMLScreen *iface, REFIID riid, void **ppv)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
*ppv = NULL;
if(IsEqualGUID(&IID_IUnknown, riid)) {
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
*ppv = HTMLSCREEN(This);
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
*ppv = HTMLSCREEN(This);
}else if(IsEqualGUID(&IID_IHTMLScreen, riid)) {
TRACE("(%p)->(IID_IHTMLScreen %p)\n", This, ppv);
*ppv = HTMLSCREEN(This);
}
if(*ppv) {
IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
return E_NOINTERFACE;
}
static ULONG WINAPI HTMLScreen_AddRef(IHTMLScreen *iface)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
return ref;
}
static ULONG WINAPI HTMLScreen_Release(IHTMLScreen *iface)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
if(!ref)
heap_free(This);
return ref;
}
static HRESULT WINAPI HTMLScreen_GetTypeInfoCount(IHTMLScreen *iface, UINT *pctinfo)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_GetTypeInfo(IHTMLScreen *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_GetIDsOfNames(IHTMLScreen *iface, REFIID riid,
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_Invoke(IHTMLScreen *iface, DISPID dispIdMember,
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)\n", This);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_get_colorDepth(IHTMLScreen *iface, LONG *p)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_put_bufferDepth(IHTMLScreen *iface, LONG v)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%d)\n", This, v);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_get_bufferDepth(IHTMLScreen *iface, LONG *p)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_get_width(IHTMLScreen *iface, LONG *p)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_get_height(IHTMLScreen *iface, LONG *p)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_put_updateInterval(IHTMLScreen *iface, LONG v)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%d)\n", This, v);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_get_updateInterval(IHTMLScreen *iface, LONG *p)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_get_availHeight(IHTMLScreen *iface, LONG *p)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_get_availWidth(IHTMLScreen *iface, LONG *p)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLScreen_get_fontSmoothingEnabled(IHTMLScreen *iface, VARIANT_BOOL *p)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
}
#undef HTMLSCREEN_THIS
static const IHTMLScreenVtbl HTMLSreenVtbl = {
HTMLScreen_QueryInterface,
HTMLScreen_AddRef,
HTMLScreen_Release,
HTMLScreen_GetTypeInfoCount,
HTMLScreen_GetTypeInfo,
HTMLScreen_GetIDsOfNames,
HTMLScreen_Invoke,
HTMLScreen_get_colorDepth,
HTMLScreen_put_bufferDepth,
HTMLScreen_get_bufferDepth,
HTMLScreen_get_width,
HTMLScreen_get_height,
HTMLScreen_put_updateInterval,
HTMLScreen_get_updateInterval,
HTMLScreen_get_availHeight,
HTMLScreen_get_availWidth,
HTMLScreen_get_fontSmoothingEnabled
};
HRESULT HTMLScreen_Create(IHTMLScreen **ret)
{
HTMLScreen *screen;
screen = heap_alloc_zero(sizeof(HTMLScreen));
if(!screen)
return E_OUTOFMEMORY;
screen->lpIHTMLScreenVtbl = &HTMLSreenVtbl;
screen->ref = 1;
*ret = HTMLSCREEN(screen);
return S_OK;
}

View File

@ -950,8 +950,20 @@ static HRESULT WINAPI HTMLWindow2_showHelp(IHTMLWindow2 *iface, BSTR helpURL, VA
static HRESULT WINAPI HTMLWindow2_get_screen(IHTMLWindow2 *iface, IHTMLScreen **p)
{
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
TRACE("(%p)->(%p)\n", This, p);
if(!This->screen) {
HRESULT hres;
hres = HTMLScreen_Create(&This->screen);
if(FAILED(hres))
return hres;
}
*p = This->screen;
IHTMLScreen_AddRef(This->screen);
return S_OK;
}
static HRESULT WINAPI HTMLWindow2_get_Option(IHTMLWindow2 *iface, IHTMLOptionElementFactory **p)

View File

@ -247,6 +247,7 @@ struct HTMLWindow {
HTMLOptionElementFactory *option_factory;
HTMLImageElementFactory *image_factory;
HTMLLocation *location;
IHTMLScreen *screen;
global_prop_t *global_props;
DWORD global_prop_cnt;
@ -618,6 +619,7 @@ HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLWindow*);
HTMLImageElementFactory *HTMLImageElementFactory_Create(HTMLWindow*);
HRESULT HTMLLocation_Create(HTMLWindow*,HTMLLocation**);
IOmNavigator *OmNavigator_Create(void);
HRESULT HTMLScreen_Create(IHTMLScreen**);
void HTMLDocument_HTMLDocument3_Init(HTMLDocument*);
void HTMLDocument_HTMLDocument5_Init(HTMLDocument*);

View File

@ -3032,6 +3032,26 @@ static void test_navigator(IHTMLDocument2 *doc)
ok(!ref, "navigator should be destroyed here\n");
}
static void test_screen(IHTMLWindow2 *window)
{
IHTMLScreen *screen, *screen2;
HRESULT hres;
screen = NULL;
hres = IHTMLWindow2_get_screen(window, &screen);
ok(hres == S_OK, "get_screen failed: %08x\n", hres);
ok(screen != NULL, "screen == NULL\n");
screen2 = NULL;
hres = IHTMLWindow2_get_screen(window, &screen2);
ok(hres == S_OK, "get_screen failed: %08x\n", hres);
ok(screen2 != NULL, "screen == NULL\n");
ok(iface_cmp((IUnknown*)screen2, (IUnknown*)screen), "screen2 != screen\n");
IHTMLScreen_Release(screen2);
IHTMLScreen_Release(screen);
}
static void test_current_style(IHTMLCurrentStyle *current_style)
{
BSTR str;
@ -4654,6 +4674,7 @@ static void test_window(IHTMLDocument2 *doc)
test_window_name(window, NULL);
set_window_name(window, "test");
test_window_length(window, 0);
test_screen(window);
IHTMLWindow2_Release(window);
}