Module: wine Branch: master Commit: 396b0ad126eb239507e7b6cfbd8de621e70ce587 URL: http://source.winehq.org/git/wine.git/?a=commit;h=396b0ad126eb239507e7b6cfbd...
Author: Jacek Caban jacek@codeweavers.com Date: Sun Nov 12 17:09:38 2006 +0100
mshtml: Added border implementation.
---
dlls/mshtml/mshtml_private.h | 2 + dlls/mshtml/oleobj.c | 9 +++++- dlls/mshtml/view.c | 60 ++++++++++++++++++++++++++--------------- 3 files changed, 47 insertions(+), 24 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index f47a799..998ee49 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -91,6 +91,8 @@ struct HTMLDocument { HWND hwnd; HWND tooltips_hwnd;
+ DOCHOSTUIINFO hostinfo; + USERMODE usermode; READYSTATE readystate; BOOL in_place_active; diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c index 9ed62f7..343facc 100644 --- a/dlls/mshtml/oleobj.c +++ b/dlls/mshtml/oleobj.c @@ -84,6 +84,8 @@ static HRESULT WINAPI OleObject_SetClien This->hostui = NULL; }
+ memset(&This->hostinfo, 0, sizeof(DOCHOSTUIINFO)); + if(!pClientSite) return S_OK;
@@ -96,11 +98,12 @@ static HRESULT WINAPI OleObject_SetClien memset(&hostinfo, 0, sizeof(DOCHOSTUIINFO)); hostinfo.cbSize = sizeof(DOCHOSTUIINFO); hres = IDocHostUIHandler_GetHostInfo(pDocHostUIHandler, &hostinfo); - if(SUCCEEDED(hres)) - /* FIXME: use hostinfo */ + if(SUCCEEDED(hres)) { TRACE("hostinfo = {%u %08x %08x %s %s}\n", hostinfo.cbSize, hostinfo.dwFlags, hostinfo.dwDoubleClick, debugstr_w(hostinfo.pchHostCss), debugstr_w(hostinfo.pchHostNS)); + memcpy(&This->hostinfo, &hostinfo, sizeof(DOCHOSTUIINFO)); + }
if(!This->has_key_path) { hres = IDocHostUIHandler_GetOptionKeyPath(pDocHostUIHandler, &key_path, 0); @@ -693,4 +696,6 @@ void HTMLDocument_OleObj_Init(HTMLDocume
This->has_key_path = FALSE; This->container_locked = FALSE; + + memset(&This->hostinfo, 0, sizeof(DOCHOSTUIINFO)); } diff --git a/dlls/mshtml/view.c b/dlls/mshtml/view.c index 632d6bd..e0db0b8 100644 --- a/dlls/mshtml/view.c +++ b/dlls/mshtml/view.c @@ -49,29 +49,37 @@ typedef struct { WNDPROC proc; } tooltip_data;
-static void paint_disabled(HWND hwnd) { - HDC hdc; +static void paint_document(HTMLDocument *This) +{ PAINTSTRUCT ps; - HBRUSH brush; RECT rect; - HFONT font; - WCHAR wszHTMLDisabled[100]; + HDC hdc; + + GetClientRect(This->hwnd, &rect); + + hdc = BeginPaint(This->hwnd, &ps); + + if(!(This->hostinfo.dwFlags & (DOCHOSTUIFLAG_NO3DOUTERBORDER|DOCHOSTUIFLAG_NO3DBORDER))) + DrawEdge(hdc, &rect, EDGE_SUNKEN, BF_RECT|BF_ADJUST); + + if(!This->nscontainer) { + WCHAR wszHTMLDisabled[100]; + HFONT font;
- LoadStringW(hInst, IDS_HTMLDISABLED, wszHTMLDisabled, sizeof(wszHTMLDisabled)/sizeof(WCHAR)); + LoadStringW(hInst, IDS_HTMLDISABLED, wszHTMLDisabled, sizeof(wszHTMLDisabled)/sizeof(WCHAR));
- font = CreateFontA(25,0,0,0,400,0,0,0,ANSI_CHARSET,0,0,DEFAULT_QUALITY,DEFAULT_PITCH,NULL); - brush = CreateSolidBrush(RGB(255,255,255)); - GetClientRect(hwnd, &rect); + font = CreateFontA(25,0,0,0,400,0,0,0,ANSI_CHARSET,0,0,DEFAULT_QUALITY,DEFAULT_PITCH,NULL);
- hdc = BeginPaint(hwnd, &ps); - SelectObject(hdc, font); - SelectObject(hdc, brush); - Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom); - DrawTextW(hdc, wszHTMLDisabled,-1, &rect, DT_CENTER | DT_SINGLELINE | DT_VCENTER); - EndPaint(hwnd, &ps); + SelectObject(hdc, font); + SelectObject(hdc, GetSysColorBrush(COLOR_WINDOW));
- DeleteObject(font); - DeleteObject(brush); + Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom); + DrawTextW(hdc, wszHTMLDisabled,-1, &rect, DT_CENTER | DT_SINGLELINE | DT_VCENTER); + + DeleteObject(font); + } + + EndPaint(This->hwnd, &ps); }
static void activate_gecko(HTMLDocument *This) @@ -106,14 +114,22 @@ static LRESULT WINAPI serverwnd_proc(HWN activate_gecko(This); break; case WM_PAINT: - if(!This->nscontainer) - paint_disabled(hwnd); + paint_document(This); break; case WM_SIZE: TRACE("(%p)->(WM_SIZE)\n", This); - if(This->nscontainer) - SetWindowPos(This->nscontainer->hwnd, NULL, 0, 0, LOWORD(lParam), HIWORD(lParam), - SWP_NOZORDER | SWP_NOACTIVATE); + if(This->nscontainer) { + INT ew=0, eh=0; + + if(!(This->hostinfo.dwFlags & (DOCHOSTUIFLAG_NO3DOUTERBORDER|DOCHOSTUIFLAG_NO3DBORDER))) { + ew = GetSystemMetrics(SM_CXEDGE); + eh = GetSystemMetrics(SM_CYEDGE); + } + + SetWindowPos(This->nscontainer->hwnd, NULL, ew, eh, + LOWORD(lParam) - 2*ew, HIWORD(lParam) - 2*eh, + SWP_NOZORDER | SWP_NOACTIVATE); + } }
return DefWindowProcW(hwnd, msg, wParam, lParam);