kernel32: Add message resource for TRUST_E_NOSIGNATURE.
[wine.git] / dlls / mshtml / htmlscreen.c
blob5c52e4c437414677d8adc7e81bf05f2535658da9
1 /*
2 * Copyright 2009 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include <stdarg.h>
21 #define COBJMACROS
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winuser.h"
26 #include "ole2.h"
28 #include "wine/debug.h"
30 #include "mshtml_private.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
34 typedef struct {
35 DispatchEx dispex;
36 IHTMLScreen IHTMLScreen_iface;
38 LONG ref;
39 } HTMLScreen;
41 static inline HTMLScreen *impl_from_IHTMLScreen(IHTMLScreen *iface)
43 return CONTAINING_RECORD(iface, HTMLScreen, IHTMLScreen_iface);
46 static HRESULT WINAPI HTMLScreen_QueryInterface(IHTMLScreen *iface, REFIID riid, void **ppv)
48 HTMLScreen *This = impl_from_IHTMLScreen(iface);
50 TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
52 if(IsEqualGUID(&IID_IUnknown, riid)) {
53 *ppv = &This->IHTMLScreen_iface;
54 }else if(IsEqualGUID(&IID_IHTMLScreen, riid)) {
55 *ppv = &This->IHTMLScreen_iface;
56 }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
57 return *ppv ? S_OK : E_NOINTERFACE;
58 }else {
59 *ppv = NULL;
60 WARN("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
61 return E_NOINTERFACE;
64 IUnknown_AddRef((IUnknown*)*ppv);
65 return S_OK;
68 static ULONG WINAPI HTMLScreen_AddRef(IHTMLScreen *iface)
70 HTMLScreen *This = impl_from_IHTMLScreen(iface);
71 LONG ref = InterlockedIncrement(&This->ref);
73 TRACE("(%p) ref=%d\n", This, ref);
75 return ref;
78 static ULONG WINAPI HTMLScreen_Release(IHTMLScreen *iface)
80 HTMLScreen *This = impl_from_IHTMLScreen(iface);
81 LONG ref = InterlockedDecrement(&This->ref);
83 TRACE("(%p) ref=%d\n", This, ref);
85 if(!ref) {
86 release_dispex(&This->dispex);
87 heap_free(This);
90 return ref;
93 static HRESULT WINAPI HTMLScreen_GetTypeInfoCount(IHTMLScreen *iface, UINT *pctinfo)
95 HTMLScreen *This = impl_from_IHTMLScreen(iface);
96 return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
99 static HRESULT WINAPI HTMLScreen_GetTypeInfo(IHTMLScreen *iface, UINT iTInfo,
100 LCID lcid, ITypeInfo **ppTInfo)
102 HTMLScreen *This = impl_from_IHTMLScreen(iface);
103 return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
106 static HRESULT WINAPI HTMLScreen_GetIDsOfNames(IHTMLScreen *iface, REFIID riid,
107 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
109 HTMLScreen *This = impl_from_IHTMLScreen(iface);
110 return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
111 lcid, rgDispId);
114 static HRESULT WINAPI HTMLScreen_Invoke(IHTMLScreen *iface, DISPID dispIdMember,
115 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
116 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
118 HTMLScreen *This = impl_from_IHTMLScreen(iface);
119 return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid, wFlags,
120 pDispParams, pVarResult, pExcepInfo, puArgErr);
123 static HRESULT WINAPI HTMLScreen_get_colorDepth(IHTMLScreen *iface, LONG *p)
125 HTMLScreen *This = impl_from_IHTMLScreen(iface);
126 HDC hdc = GetDC(0);
128 TRACE("(%p)->(%p)\n", This, p);
130 *p = GetDeviceCaps(hdc, BITSPIXEL);
131 ReleaseDC(0, hdc);
132 return S_OK;
135 static HRESULT WINAPI HTMLScreen_put_bufferDepth(IHTMLScreen *iface, LONG v)
137 HTMLScreen *This = impl_from_IHTMLScreen(iface);
138 FIXME("(%p)->(%d)\n", This, v);
139 return E_NOTIMPL;
142 static HRESULT WINAPI HTMLScreen_get_bufferDepth(IHTMLScreen *iface, LONG *p)
144 HTMLScreen *This = impl_from_IHTMLScreen(iface);
145 FIXME("(%p)->(%p)\n", This, p);
146 return E_NOTIMPL;
149 static HRESULT WINAPI HTMLScreen_get_width(IHTMLScreen *iface, LONG *p)
151 HTMLScreen *This = impl_from_IHTMLScreen(iface);
153 TRACE("(%p)->(%p)\n", This, p);
155 *p = GetSystemMetrics(SM_CXSCREEN);
156 return S_OK;
159 static HRESULT WINAPI HTMLScreen_get_height(IHTMLScreen *iface, LONG *p)
161 HTMLScreen *This = impl_from_IHTMLScreen(iface);
163 TRACE("(%p)->(%p)\n", This, p);
165 *p = GetSystemMetrics(SM_CYSCREEN);
166 return S_OK;
169 static HRESULT WINAPI HTMLScreen_put_updateInterval(IHTMLScreen *iface, LONG v)
171 HTMLScreen *This = impl_from_IHTMLScreen(iface);
172 FIXME("(%p)->(%d)\n", This, v);
173 return E_NOTIMPL;
176 static HRESULT WINAPI HTMLScreen_get_updateInterval(IHTMLScreen *iface, LONG *p)
178 HTMLScreen *This = impl_from_IHTMLScreen(iface);
179 FIXME("(%p)->(%p)\n", This, p);
180 return E_NOTIMPL;
183 static HRESULT WINAPI HTMLScreen_get_availHeight(IHTMLScreen *iface, LONG *p)
185 HTMLScreen *This = impl_from_IHTMLScreen(iface);
186 RECT work_area;
188 TRACE("(%p)->(%p)\n", This, p);
190 if(!SystemParametersInfoW(SPI_GETWORKAREA, 0, &work_area, 0))
191 return E_FAIL;
193 *p = work_area.bottom-work_area.top;
194 return S_OK;
197 static HRESULT WINAPI HTMLScreen_get_availWidth(IHTMLScreen *iface, LONG *p)
199 HTMLScreen *This = impl_from_IHTMLScreen(iface);
200 RECT work_area;
202 TRACE("(%p)->(%p)\n", This, p);
204 if(!SystemParametersInfoW(SPI_GETWORKAREA, 0, &work_area, 0))
205 return E_FAIL;
207 *p = work_area.right-work_area.left;
208 return S_OK;
211 static HRESULT WINAPI HTMLScreen_get_fontSmoothingEnabled(IHTMLScreen *iface, VARIANT_BOOL *p)
213 HTMLScreen *This = impl_from_IHTMLScreen(iface);
214 FIXME("(%p)->(%p)\n", This, p);
215 return E_NOTIMPL;
218 static const IHTMLScreenVtbl HTMLSreenVtbl = {
219 HTMLScreen_QueryInterface,
220 HTMLScreen_AddRef,
221 HTMLScreen_Release,
222 HTMLScreen_GetTypeInfoCount,
223 HTMLScreen_GetTypeInfo,
224 HTMLScreen_GetIDsOfNames,
225 HTMLScreen_Invoke,
226 HTMLScreen_get_colorDepth,
227 HTMLScreen_put_bufferDepth,
228 HTMLScreen_get_bufferDepth,
229 HTMLScreen_get_width,
230 HTMLScreen_get_height,
231 HTMLScreen_put_updateInterval,
232 HTMLScreen_get_updateInterval,
233 HTMLScreen_get_availHeight,
234 HTMLScreen_get_availWidth,
235 HTMLScreen_get_fontSmoothingEnabled
238 static const tid_t HTMLScreen_iface_tids[] = {
239 IHTMLScreen_tid,
242 static dispex_static_data_t HTMLScreen_dispex = {
243 NULL,
244 DispHTMLScreen_tid,
245 HTMLScreen_iface_tids
248 HRESULT HTMLScreen_Create(IHTMLScreen **ret)
250 HTMLScreen *screen;
252 screen = heap_alloc_zero(sizeof(HTMLScreen));
253 if(!screen)
254 return E_OUTOFMEMORY;
256 screen->IHTMLScreen_iface.lpVtbl = &HTMLSreenVtbl;
257 screen->ref = 1;
259 init_dispex(&screen->dispex, (IUnknown*)&screen->IHTMLScreen_iface, &HTMLScreen_dispex);
261 *ret = &screen->IHTMLScreen_iface;
262 return S_OK;