Module: wine Branch: master Commit: ca54be2cc64fab230d2d199a8cb827928d28c2de URL: http://source.winehq.org/git/wine.git/?a=commit;h=ca54be2cc64fab230d2d199a8c...
Author: Jacek Caban jacek@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); }