Jacek Caban : mshtml: Added IHTMLScreen::get_width implementation.
Alexandre Julliard
julliard at winehq.org
Tue Dec 1 09:19:39 CST 2009
Module: wine
Branch: master
Commit: ca54be2cc64fab230d2d199a8cb827928d28c2de
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ca54be2cc64fab230d2d199a8cb827928d28c2de
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Nov 30 17:57:39 2009 +0100
mshtml: Added IHTMLScreen::get_width implementation.
---
dlls/mshtml/htmlscreen.c | 7 +++++--
dlls/mshtml/main.c | 18 ++++++++++++++++++
dlls/mshtml/mshtml_private.h | 1 +
dlls/mshtml/tests/Makefile.in | 2 +-
dlls/mshtml/tests/dom.c | 15 +++++++++++++++
5 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlscreen.c b/dlls/mshtml/htmlscreen.c
index b504b20..3ed403f 100644
--- a/dlls/mshtml/htmlscreen.c
+++ b/dlls/mshtml/htmlscreen.c
@@ -148,8 +148,11 @@ static HRESULT WINAPI HTMLScreen_get_bufferDepth(IHTMLScreen *iface, LONG *p)
static HRESULT WINAPI HTMLScreen_get_width(IHTMLScreen *iface, LONG *p)
{
HTMLScreen *This = HTMLSCREEN_THIS(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ *p = GetDeviceCaps(get_display_dc(), HORZRES);
+ return S_OK;
}
static HRESULT WINAPI HTMLScreen_get_height(IHTMLScreen *iface, LONG *p)
diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c
index 6a358e5..1e30066 100644
--- a/dlls/mshtml/main.c
+++ b/dlls/mshtml/main.c
@@ -47,6 +47,7 @@ HINSTANCE hInst;
DWORD mshtml_tls = TLS_OUT_OF_INDEXES;
static HINSTANCE shdoclc = NULL;
+static HDC display_dc;
static void thread_detach(void)
{
@@ -71,6 +72,8 @@ static void process_detach(void)
FreeLibrary(shdoclc);
if(mshtml_tls != TLS_OUT_OF_INDEXES)
TlsFree(mshtml_tls);
+ if(display_dc)
+ DeleteObject(display_dc);
}
HINSTANCE get_shdoclc(void)
@@ -84,6 +87,21 @@ HINSTANCE get_shdoclc(void)
return shdoclc = LoadLibraryExW(wszShdoclc, NULL, LOAD_LIBRARY_AS_DATAFILE);
}
+HDC get_display_dc(void)
+{
+ static const WCHAR displayW[] = {'D','I','S','P','L','A','Y',0};
+
+ if(!display_dc) {
+ HDC hdc;
+
+ hdc = CreateICW(displayW, NULL, NULL, NULL);
+ if(InterlockedCompareExchangePointer((void**)&display_dc, hdc, NULL))
+ DeleteObject(hdc);
+ }
+
+ return display_dc;
+}
+
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
{
switch(fdwReason) {
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 33f9c96..d99fb54 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -940,6 +940,7 @@ static inline void windowref_release(windowref_t *ref)
heap_free(ref);
}
+HDC get_display_dc(void);
HINSTANCE get_shdoclc(void);
extern HINSTANCE hInst;
diff --git a/dlls/mshtml/tests/Makefile.in b/dlls/mshtml/tests/Makefile.in
index dc86c18..d2815ae 100644
--- a/dlls/mshtml/tests/Makefile.in
+++ b/dlls/mshtml/tests/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../../..
SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = mshtml.dll
-IMPORTS = ole32 oleaut32 user32 urlmon advapi32 kernel32
+IMPORTS = ole32 oleaut32 user32 urlmon gdi32 advapi32 kernel32
CTESTS = \
dom.c \
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index bc012f5..ff58013 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -3035,8 +3035,12 @@ static void test_navigator(IHTMLDocument2 *doc)
static void test_screen(IHTMLWindow2 *window)
{
IHTMLScreen *screen, *screen2;
+ LONG l, exl;
+ HDC hdc;
HRESULT hres;
+ static const WCHAR displayW[] = {'D','I','S','P','L','A','Y',0};
+
screen = NULL;
hres = IHTMLWindow2_get_screen(window, &screen);
ok(hres == S_OK, "get_screen failed: %08x\n", hres);
@@ -3051,6 +3055,17 @@ static void test_screen(IHTMLWindow2 *window)
test_disp((IUnknown*)screen, &DIID_DispHTMLScreen, "[object]");
+ hdc = CreateICW(displayW, NULL, NULL, NULL);
+
+ exl = GetDeviceCaps(hdc, HORZRES);
+
+ l = 0xdeadbeef;
+ hres = IHTMLScreen_get_width(screen, &l);
+ ok(hres == S_OK, "get_width failed: %08x\n", hres);
+ ok(l == exl, "width = %d, expected %d\n", l, exl);
+
+ DeleteObject(hdc);
+
IHTMLScreen_Release(screen);
}
More information about the wine-cvs
mailing list