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