mshtml: Add stub implementation for HTMLImageElementFactory.
This commit is contained in:
parent
8872a14288
commit
9579d64c69
|
@ -611,3 +611,126 @@ HTMLElement *HTMLImgElement_Create(nsIDOMHTMLElement *nselem)
|
||||||
|
|
||||||
return &ret->element;
|
return &ret->element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define HTMLIMGFACTORY_THIS(iface) DEFINE_THIS(HTMLImageElementFactory, HTMLImageElementFactory, iface)
|
||||||
|
|
||||||
|
static HRESULT WINAPI HTMLImageElementFactory_QueryInterface(IHTMLImageElementFactory *iface,
|
||||||
|
REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
HTMLImageElementFactory *This = HTMLIMGFACTORY_THIS(iface);
|
||||||
|
|
||||||
|
*ppv = NULL;
|
||||||
|
|
||||||
|
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||||
|
TRACE("(%p)->(IID_Unknown %p)\n", This, ppv);
|
||||||
|
*ppv = HTMLIMGFACTORY(This);
|
||||||
|
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||||
|
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||||
|
*ppv = HTMLIMGFACTORY(This);
|
||||||
|
}else if(IsEqualGUID(&IID_IHTMLImageElementFactory, riid)) {
|
||||||
|
TRACE("(%p)->(IID_IHTMLImageElementFactory %p)\n", This, ppv);
|
||||||
|
*ppv = HTMLIMGFACTORY(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 HTMLImageElementFactory_AddRef(IHTMLImageElementFactory *iface)
|
||||||
|
{
|
||||||
|
HTMLImageElementFactory *This = HTMLIMGFACTORY_THIS(iface);
|
||||||
|
LONG ref = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
|
TRACE("(%p) ref=%d\n", This, ref);
|
||||||
|
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI HTMLImageElementFactory_Release(IHTMLImageElementFactory *iface)
|
||||||
|
{
|
||||||
|
HTMLImageElementFactory *This = HTMLIMGFACTORY_THIS(iface);
|
||||||
|
LONG ref = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
|
TRACE("(%p) ref=%d\n", This, ref);
|
||||||
|
|
||||||
|
if(!ref)
|
||||||
|
heap_free(This);
|
||||||
|
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI HTMLImageElementFactory_GetTypeInfoCount(IHTMLImageElementFactory *iface,
|
||||||
|
UINT *pctinfo)
|
||||||
|
{
|
||||||
|
HTMLImageElementFactory *This = HTMLIMGFACTORY_THIS(iface);
|
||||||
|
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI HTMLImageElementFactory_GetTypeInfo(IHTMLImageElementFactory *iface,
|
||||||
|
UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
|
||||||
|
{
|
||||||
|
HTMLImageElementFactory *This = HTMLIMGFACTORY_THIS(iface);
|
||||||
|
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI HTMLImageElementFactory_GetIDsOfNames(IHTMLImageElementFactory *iface,
|
||||||
|
REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid,
|
||||||
|
DISPID *rgDispId)
|
||||||
|
{
|
||||||
|
HTMLImageElementFactory *This = HTMLIMGFACTORY_THIS(iface);
|
||||||
|
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames,
|
||||||
|
cNames, lcid, rgDispId);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI HTMLImageElementFactory_Invoke(IHTMLImageElementFactory *iface,
|
||||||
|
DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
|
||||||
|
DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
|
||||||
|
UINT *puArgErr)
|
||||||
|
{
|
||||||
|
HTMLImageElementFactory *This = HTMLIMGFACTORY_THIS(iface);
|
||||||
|
FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
|
||||||
|
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI HTMLImageElementFactory_create(IHTMLImageElementFactory *iface,
|
||||||
|
VARIANT width, VARIANT height, IHTMLImgElement **elem)
|
||||||
|
{
|
||||||
|
HTMLImageElementFactory *This = HTMLIMGFACTORY_THIS(iface);
|
||||||
|
FIXME("(%p)->(%s %s %p)\n", This, debugstr_variant(&width), debugstr_variant(&height), elem);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef HTMLIMGFACTORY_THIS
|
||||||
|
|
||||||
|
static const IHTMLImageElementFactoryVtbl HTMLImageElementFactoryVtbl = {
|
||||||
|
HTMLImageElementFactory_QueryInterface,
|
||||||
|
HTMLImageElementFactory_AddRef,
|
||||||
|
HTMLImageElementFactory_Release,
|
||||||
|
HTMLImageElementFactory_GetTypeInfoCount,
|
||||||
|
HTMLImageElementFactory_GetTypeInfo,
|
||||||
|
HTMLImageElementFactory_GetIDsOfNames,
|
||||||
|
HTMLImageElementFactory_Invoke,
|
||||||
|
HTMLImageElementFactory_create
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLImageElementFactory *HTMLImageElementFactory_Create(HTMLWindow *window)
|
||||||
|
{
|
||||||
|
HTMLImageElementFactory *ret;
|
||||||
|
|
||||||
|
ret = heap_alloc(sizeof(HTMLImageElementFactory));
|
||||||
|
|
||||||
|
ret->lpHTMLImageElementFactoryVtbl = &HTMLImageElementFactoryVtbl;
|
||||||
|
ret->ref = 1;
|
||||||
|
ret->window = window;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
|
@ -113,6 +113,11 @@ static ULONG WINAPI HTMLWindow2_Release(IHTMLWindow2 *iface)
|
||||||
IHTMLOptionElementFactory_Release(HTMLOPTFACTORY(This->option_factory));
|
IHTMLOptionElementFactory_Release(HTMLOPTFACTORY(This->option_factory));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(This->image_factory) {
|
||||||
|
This->image_factory->window = NULL;
|
||||||
|
IHTMLImageElementFactory_Release(HTMLIMGFACTORY(This->image_factory));
|
||||||
|
}
|
||||||
|
|
||||||
if(This->location) {
|
if(This->location) {
|
||||||
This->location->window = NULL;
|
This->location->window = NULL;
|
||||||
IHTMLLocation_Release(HTMLLOCATION(This->location));
|
IHTMLLocation_Release(HTMLLOCATION(This->location));
|
||||||
|
@ -392,8 +397,16 @@ static HRESULT WINAPI HTMLWindow2_prompt(IHTMLWindow2 *iface, BSTR message,
|
||||||
static HRESULT WINAPI HTMLWindow2_get_Image(IHTMLWindow2 *iface, IHTMLImageElementFactory **p)
|
static HRESULT WINAPI HTMLWindow2_get_Image(IHTMLWindow2 *iface, IHTMLImageElementFactory **p)
|
||||||
{
|
{
|
||||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||||
FIXME("(%p)->(%p)\n", This, p);
|
|
||||||
return E_NOTIMPL;
|
TRACE("(%p)->(%p)\n", This, p);
|
||||||
|
|
||||||
|
if(!This->image_factory)
|
||||||
|
This->image_factory = HTMLImageElementFactory_Create(This);
|
||||||
|
|
||||||
|
*p = HTMLIMGFACTORY(This->image_factory);
|
||||||
|
IHTMLImageElementFactory_AddRef(*p);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI HTMLWindow2_get_location(IHTMLWindow2 *iface, IHTMLLocation **p)
|
static HRESULT WINAPI HTMLWindow2_get_location(IHTMLWindow2 *iface, IHTMLLocation **p)
|
||||||
|
|
|
@ -181,6 +181,14 @@ typedef struct {
|
||||||
HTMLWindow *window;
|
HTMLWindow *window;
|
||||||
} HTMLOptionElementFactory;
|
} HTMLOptionElementFactory;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const IHTMLImageElementFactoryVtbl *lpHTMLImageElementFactoryVtbl;
|
||||||
|
|
||||||
|
LONG ref;
|
||||||
|
|
||||||
|
HTMLWindow *window;
|
||||||
|
} HTMLImageElementFactory;
|
||||||
|
|
||||||
struct HTMLLocation {
|
struct HTMLLocation {
|
||||||
DispatchEx dispex;
|
DispatchEx dispex;
|
||||||
const IHTMLLocationVtbl *lpHTMLLocationVtbl;
|
const IHTMLLocationVtbl *lpHTMLLocationVtbl;
|
||||||
|
@ -210,6 +218,7 @@ struct HTMLWindow {
|
||||||
struct list script_hosts;
|
struct list script_hosts;
|
||||||
|
|
||||||
HTMLOptionElementFactory *option_factory;
|
HTMLOptionElementFactory *option_factory;
|
||||||
|
HTMLImageElementFactory *image_factory;
|
||||||
HTMLLocation *location;
|
HTMLLocation *location;
|
||||||
|
|
||||||
global_prop_t *global_props;
|
global_prop_t *global_props;
|
||||||
|
@ -545,6 +554,7 @@ struct HTMLDocumentNode {
|
||||||
#define HTMLTEXTCONT(x) ((IHTMLTextContainer*) &(x)->lpHTMLTextContainerVtbl)
|
#define HTMLTEXTCONT(x) ((IHTMLTextContainer*) &(x)->lpHTMLTextContainerVtbl)
|
||||||
|
|
||||||
#define HTMLOPTFACTORY(x) ((IHTMLOptionElementFactory*) &(x)->lpHTMLOptionElementFactoryVtbl)
|
#define HTMLOPTFACTORY(x) ((IHTMLOptionElementFactory*) &(x)->lpHTMLOptionElementFactoryVtbl)
|
||||||
|
#define HTMLIMGFACTORY(x) ((IHTMLImageElementFactory*) &(x)->lpHTMLImageElementFactoryVtbl)
|
||||||
#define HTMLLOCATION(x) ((IHTMLLocation*) &(x)->lpHTMLLocationVtbl)
|
#define HTMLLOCATION(x) ((IHTMLLocation*) &(x)->lpHTMLLocationVtbl)
|
||||||
|
|
||||||
#define DISPATCHEX(x) ((IDispatchEx*) &(x)->lpIDispatchExVtbl)
|
#define DISPATCHEX(x) ((IDispatchEx*) &(x)->lpIDispatchExVtbl)
|
||||||
|
@ -564,6 +574,7 @@ HRESULT HTMLWindow_Create(HTMLDocumentObj*,nsIDOMWindow*,HTMLWindow**);
|
||||||
void window_set_docnode(HTMLWindow*,HTMLDocumentNode*);
|
void window_set_docnode(HTMLWindow*,HTMLDocumentNode*);
|
||||||
HTMLWindow *nswindow_to_window(const nsIDOMWindow*);
|
HTMLWindow *nswindow_to_window(const nsIDOMWindow*);
|
||||||
HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLWindow*);
|
HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLWindow*);
|
||||||
|
HTMLImageElementFactory *HTMLImageElementFactory_Create(HTMLWindow*);
|
||||||
HRESULT HTMLLocation_Create(HTMLWindow*,HTMLLocation**);
|
HRESULT HTMLLocation_Create(HTMLWindow*,HTMLLocation**);
|
||||||
IOmNavigator *OmNavigator_Create(void);
|
IOmNavigator *OmNavigator_Create(void);
|
||||||
|
|
||||||
|
|
|
@ -1056,6 +1056,102 @@ static IHTMLOptionElement *_create_option_elem(unsigned line, IHTMLDocument2 *do
|
||||||
return option;
|
return option;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define test_img_width(o,w) _test_img_width(__LINE__,o,w)
|
||||||
|
static void _test_img_width(unsigned line, IHTMLImgElement *img, const long exp)
|
||||||
|
{
|
||||||
|
LONG found = -1;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLImgElement_get_width(img, &found);
|
||||||
|
todo_wine ok_(__FILE__,line) (hres == S_OK, "get_width failed: %08x\n", hres);
|
||||||
|
todo_wine ok_(__FILE__,line) (found == exp, "width=%d\n", found);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define test_img_put_width(o,w) _test_img_put_width(__LINE__,o,w)
|
||||||
|
static void _test_img_put_width(unsigned line, IHTMLImgElement *img, const long width)
|
||||||
|
{
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLImgElement_put_width(img, width);
|
||||||
|
todo_wine ok(hres == S_OK, "put_width failed: %08x\n", hres);
|
||||||
|
|
||||||
|
_test_img_width(line, img, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define test_img_height(o,h) _test_img_height(__LINE__,o,h)
|
||||||
|
static void _test_img_height(unsigned line, IHTMLImgElement *img, const long exp)
|
||||||
|
{
|
||||||
|
LONG found = -1;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLImgElement_get_height(img, &found);
|
||||||
|
todo_wine ok_(__FILE__,line) (hres == S_OK, "get_height failed: %08x\n", hres);
|
||||||
|
todo_wine ok_(__FILE__,line) (found == exp, "height=%d\n", found);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define test_img_put_height(o,w) _test_img_put_height(__LINE__,o,w)
|
||||||
|
static void _test_img_put_height(unsigned line, IHTMLImgElement *img, const long height)
|
||||||
|
{
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLImgElement_put_height(img, height);
|
||||||
|
todo_wine ok(hres == S_OK, "put_height failed: %08x\n", hres);
|
||||||
|
|
||||||
|
_test_img_height(line, img, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define create_img_elem(d,t,v) _create_img_elem(__LINE__,d,t,v)
|
||||||
|
static IHTMLImgElement *_create_img_elem(unsigned line, IHTMLDocument2 *doc,
|
||||||
|
LONG wdth, LONG hght)
|
||||||
|
{
|
||||||
|
IHTMLImageElementFactory *factory;
|
||||||
|
IHTMLImgElement *img;
|
||||||
|
IHTMLWindow2 *window;
|
||||||
|
VARIANT width, height;
|
||||||
|
char buf[16];
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
hres = IHTMLDocument2_get_parentWindow(doc, &window);
|
||||||
|
ok_(__FILE__,line) (hres == S_OK, "get_parentElement failed: %08x\n", hres);
|
||||||
|
|
||||||
|
hres = IHTMLWindow2_get_Image(window, &factory);
|
||||||
|
IHTMLWindow2_Release(window);
|
||||||
|
ok_(__FILE__,line) (hres == S_OK, "get_Image failed: %08x\n", hres);
|
||||||
|
|
||||||
|
if(wdth >= 0){
|
||||||
|
snprintf(buf, 16, "%d", wdth);
|
||||||
|
V_VT(&width) = VT_BSTR;
|
||||||
|
V_BSTR(&width) = a2bstr(buf);
|
||||||
|
}else{
|
||||||
|
V_VT(&width) = VT_EMPTY;
|
||||||
|
wdth = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hght >= 0){
|
||||||
|
snprintf(buf, 16, "%d", hght);
|
||||||
|
V_VT(&height) = VT_BSTR;
|
||||||
|
V_BSTR(&height) = a2bstr(buf);
|
||||||
|
}else{
|
||||||
|
V_VT(&height) = VT_EMPTY;
|
||||||
|
hght = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
hres = IHTMLImageElementFactory_create(factory, width, height, &img);
|
||||||
|
todo_wine ok_(__FILE__,line) (hres == S_OK, "create failed: %08x\n", hres);
|
||||||
|
|
||||||
|
IHTMLImageElementFactory_Release(factory);
|
||||||
|
VariantClear(&width);
|
||||||
|
VariantClear(&height);
|
||||||
|
|
||||||
|
if(SUCCEEDED(hres)) {
|
||||||
|
_test_img_width(line, img, wdth);
|
||||||
|
_test_img_height(line, img, hght);
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#define test_select_length(s,l) _test_select_length(__LINE__,s,l)
|
#define test_select_length(s,l) _test_select_length(__LINE__,s,l)
|
||||||
static void _test_select_length(unsigned line, IHTMLSelectElement *select, LONG length)
|
static void _test_select_length(unsigned line, IHTMLSelectElement *select, LONG length)
|
||||||
{
|
{
|
||||||
|
@ -2432,6 +2528,30 @@ static void test_create_option_elem(IHTMLDocument2 *doc)
|
||||||
IHTMLOptionElement_Release(option);
|
IHTMLOptionElement_Release(option);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_create_img_elem(IHTMLDocument2 *doc)
|
||||||
|
{
|
||||||
|
IHTMLImgElement *img;
|
||||||
|
|
||||||
|
img = create_img_elem(doc, 10, 15);
|
||||||
|
|
||||||
|
if(img){
|
||||||
|
test_img_put_width(img, 5);
|
||||||
|
test_img_put_height(img, 20);
|
||||||
|
|
||||||
|
IHTMLImgElement_Release(img);
|
||||||
|
img = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
img = create_img_elem(doc, -1, -1);
|
||||||
|
|
||||||
|
if(img){
|
||||||
|
test_img_put_width(img, 5);
|
||||||
|
test_img_put_height(img, 20);
|
||||||
|
|
||||||
|
IHTMLImgElement_Release(img);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static IHTMLTxtRange *test_create_body_range(IHTMLDocument2 *doc)
|
static IHTMLTxtRange *test_create_body_range(IHTMLDocument2 *doc)
|
||||||
{
|
{
|
||||||
IHTMLBodyElement *body;
|
IHTMLBodyElement *body;
|
||||||
|
@ -5158,6 +5278,7 @@ static void test_elems(IHTMLDocument2 *doc)
|
||||||
|
|
||||||
test_stylesheets(doc);
|
test_stylesheets(doc);
|
||||||
test_create_option_elem(doc);
|
test_create_option_elem(doc);
|
||||||
|
test_create_img_elem(doc);
|
||||||
|
|
||||||
elem = get_doc_elem_by_id(doc, "tbl");
|
elem = get_doc_elem_by_id(doc, "tbl");
|
||||||
ok(elem != NULL, "elem = NULL\n");
|
ok(elem != NULL, "elem = NULL\n");
|
||||||
|
|
Loading…
Reference in New Issue