Synchronize up to trunk's revision r57784.
[reactos.git] / dll / win32 / mshtml / htmlscreen.c
1 /*
2 * Copyright 2009 Jacek Caban for CodeWeavers
3 *
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.
8 *
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.
13 *
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
17 */
18
19 #include <stdarg.h>
20
21 #define COBJMACROS
22
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winuser.h"
26 #include "ole2.h"
27
28 #include "wine/debug.h"
29
30 #include "mshtml_private.h"
31
32 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
33
34 typedef struct {
35 DispatchEx dispex;
36 const IHTMLScreenVtbl *lpIHTMLScreenVtbl;
37
38 LONG ref;
39 } HTMLScreen;
40
41 #define HTMLSCREEN(x) ((IHTMLScreen*) &(x)->lpIHTMLScreenVtbl)
42
43 #define HTMLSCREEN_THIS(iface) DEFINE_THIS(HTMLScreen, IHTMLScreen, iface)
44
45 static HRESULT WINAPI HTMLScreen_QueryInterface(IHTMLScreen *iface, REFIID riid, void **ppv)
46 {
47 HTMLScreen *This = HTMLSCREEN_THIS(iface);
48
49 *ppv = NULL;
50
51 if(IsEqualGUID(&IID_IUnknown, riid)) {
52 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
53 *ppv = HTMLSCREEN(This);
54 }else if(IsEqualGUID(&IID_IHTMLScreen, riid)) {
55 TRACE("(%p)->(IID_IHTMLScreen %p)\n", This, ppv);
56 *ppv = HTMLSCREEN(This);
57 }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
58 return *ppv ? S_OK : E_NOINTERFACE;
59 }
60
61 if(*ppv) {
62 IUnknown_AddRef((IUnknown*)*ppv);
63 return S_OK;
64 }
65
66 WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
67 return E_NOINTERFACE;
68 }
69
70 static ULONG WINAPI HTMLScreen_AddRef(IHTMLScreen *iface)
71 {
72 HTMLScreen *This = HTMLSCREEN_THIS(iface);
73 LONG ref = InterlockedIncrement(&This->ref);
74
75 TRACE("(%p) ref=%d\n", This, ref);
76
77 return ref;
78 }
79
80 static ULONG WINAPI HTMLScreen_Release(IHTMLScreen *iface)
81 {
82 HTMLScreen *This = HTMLSCREEN_THIS(iface);
83 LONG ref = InterlockedDecrement(&This->ref);
84
85 TRACE("(%p) ref=%d\n", This, ref);
86
87 if(!ref) {
88 release_dispex(&This->dispex);
89 heap_free(This);
90 }
91
92 return ref;
93 }
94
95 static HRESULT WINAPI HTMLScreen_GetTypeInfoCount(IHTMLScreen *iface, UINT *pctinfo)
96 {
97 HTMLScreen *This = HTMLSCREEN_THIS(iface);
98 FIXME("(%p)\n", This);
99 return E_NOTIMPL;
100 }
101
102 static HRESULT WINAPI HTMLScreen_GetTypeInfo(IHTMLScreen *iface, UINT iTInfo,
103 LCID lcid, ITypeInfo **ppTInfo)
104 {
105 HTMLScreen *This = HTMLSCREEN_THIS(iface);
106 FIXME("(%p)\n", This);
107 return E_NOTIMPL;
108 }
109
110 static HRESULT WINAPI HTMLScreen_GetIDsOfNames(IHTMLScreen *iface, REFIID riid,
111 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
112 {
113 HTMLScreen *This = HTMLSCREEN_THIS(iface);
114 FIXME("(%p)\n", This);
115 return E_NOTIMPL;
116 }
117
118 static HRESULT WINAPI HTMLScreen_Invoke(IHTMLScreen *iface, DISPID dispIdMember,
119 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
120 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
121 {
122 HTMLScreen *This = HTMLSCREEN_THIS(iface);
123 FIXME("(%p)\n", This);
124 return E_NOTIMPL;
125 }
126
127 static HRESULT WINAPI HTMLScreen_get_colorDepth(IHTMLScreen *iface, LONG *p)
128 {
129 HTMLScreen *This = HTMLSCREEN_THIS(iface);
130
131 TRACE("(%p)->(%p)\n", This, p);
132
133 *p = GetDeviceCaps(get_display_dc(), BITSPIXEL);
134 return S_OK;
135 }
136
137 static HRESULT WINAPI HTMLScreen_put_bufferDepth(IHTMLScreen *iface, LONG v)
138 {
139 HTMLScreen *This = HTMLSCREEN_THIS(iface);
140 FIXME("(%p)->(%d)\n", This, v);
141 return E_NOTIMPL;
142 }
143
144 static HRESULT WINAPI HTMLScreen_get_bufferDepth(IHTMLScreen *iface, LONG *p)
145 {
146 HTMLScreen *This = HTMLSCREEN_THIS(iface);
147 FIXME("(%p)->(%p)\n", This, p);
148 return E_NOTIMPL;
149 }
150
151 static HRESULT WINAPI HTMLScreen_get_width(IHTMLScreen *iface, LONG *p)
152 {
153 HTMLScreen *This = HTMLSCREEN_THIS(iface);
154
155 TRACE("(%p)->(%p)\n", This, p);
156
157 *p = GetDeviceCaps(get_display_dc(), HORZRES);
158 return S_OK;
159 }
160
161 static HRESULT WINAPI HTMLScreen_get_height(IHTMLScreen *iface, LONG *p)
162 {
163 HTMLScreen *This = HTMLSCREEN_THIS(iface);
164
165 TRACE("(%p)->(%p)\n", This, p);
166
167 *p = GetDeviceCaps(get_display_dc(), VERTRES);
168 return S_OK;
169 }
170
171 static HRESULT WINAPI HTMLScreen_put_updateInterval(IHTMLScreen *iface, LONG v)
172 {
173 HTMLScreen *This = HTMLSCREEN_THIS(iface);
174 FIXME("(%p)->(%d)\n", This, v);
175 return E_NOTIMPL;
176 }
177
178 static HRESULT WINAPI HTMLScreen_get_updateInterval(IHTMLScreen *iface, LONG *p)
179 {
180 HTMLScreen *This = HTMLSCREEN_THIS(iface);
181 FIXME("(%p)->(%p)\n", This, p);
182 return E_NOTIMPL;
183 }
184
185 static HRESULT WINAPI HTMLScreen_get_availHeight(IHTMLScreen *iface, LONG *p)
186 {
187 HTMLScreen *This = HTMLSCREEN_THIS(iface);
188 FIXME("(%p)->(%p)\n", This, p);
189 return E_NOTIMPL;
190 }
191
192 static HRESULT WINAPI HTMLScreen_get_availWidth(IHTMLScreen *iface, LONG *p)
193 {
194 HTMLScreen *This = HTMLSCREEN_THIS(iface);
195 FIXME("(%p)->(%p)\n", This, p);
196 return E_NOTIMPL;
197 }
198
199 static HRESULT WINAPI HTMLScreen_get_fontSmoothingEnabled(IHTMLScreen *iface, VARIANT_BOOL *p)
200 {
201 HTMLScreen *This = HTMLSCREEN_THIS(iface);
202 FIXME("(%p)->(%p)\n", This, p);
203 return E_NOTIMPL;
204 }
205
206 #undef HTMLSCREEN_THIS
207
208 static const IHTMLScreenVtbl HTMLSreenVtbl = {
209 HTMLScreen_QueryInterface,
210 HTMLScreen_AddRef,
211 HTMLScreen_Release,
212 HTMLScreen_GetTypeInfoCount,
213 HTMLScreen_GetTypeInfo,
214 HTMLScreen_GetIDsOfNames,
215 HTMLScreen_Invoke,
216 HTMLScreen_get_colorDepth,
217 HTMLScreen_put_bufferDepth,
218 HTMLScreen_get_bufferDepth,
219 HTMLScreen_get_width,
220 HTMLScreen_get_height,
221 HTMLScreen_put_updateInterval,
222 HTMLScreen_get_updateInterval,
223 HTMLScreen_get_availHeight,
224 HTMLScreen_get_availWidth,
225 HTMLScreen_get_fontSmoothingEnabled
226 };
227
228 static const tid_t HTMLScreen_iface_tids[] = {
229 IHTMLScreen_tid,
230 0
231 };
232 static dispex_static_data_t HTMLScreen_dispex = {
233 NULL,
234 DispHTMLScreen_tid,
235 NULL,
236 HTMLScreen_iface_tids
237 };
238
239 HRESULT HTMLScreen_Create(IHTMLScreen **ret)
240 {
241 HTMLScreen *screen;
242
243 screen = heap_alloc_zero(sizeof(HTMLScreen));
244 if(!screen)
245 return E_OUTOFMEMORY;
246
247 screen->lpIHTMLScreenVtbl = &HTMLSreenVtbl;
248 screen->ref = 1;
249
250 init_dispex(&screen->dispex, (IUnknown*)HTMLSCREEN(screen), &HTMLScreen_dispex);
251
252 *ret = HTMLSCREEN(screen);
253 return S_OK;
254 }