]> git.sesse.net Git - vlc/blob - activex/viewobject.cpp
Improved compatibility
[vlc] / activex / viewobject.cpp
1 /*****************************************************************************
2  * viewobject.cpp: ActiveX control for VLC
3  *****************************************************************************
4  * Copyright (C) 2005 the VideoLAN team
5  *
6  * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
21  *****************************************************************************/
22
23 #include "plugin.h"
24 #include "viewobject.h"
25
26 #include "utils.h"
27
28 using namespace std;
29
30 STDMETHODIMP VLCViewObject::Draw(DWORD dwAspect, LONG lindex, PVOID pvAspect,
31         DVTARGETDEVICE *ptd, HDC hicTargetDev, HDC hdcDraw, LPCRECTL lprcBounds,
32         LPCRECTL lprcWBounds, BOOL(CALLBACK *pfnContinue)(DWORD), DWORD dwContinue)
33 {
34     if( dwAspect & DVASPECT_CONTENT )
35     {
36         _p_instance->onDraw(ptd, hicTargetDev, hdcDraw, lprcBounds, lprcWBounds);
37         return S_OK;
38     }
39     return E_NOTIMPL;
40 };
41
42 STDMETHODIMP VLCViewObject::Freeze(DWORD dwAspect, LONG lindex,
43         PVOID pvAspect, LPDWORD pdwFreeze)
44 {
45     return E_NOTIMPL;
46 };
47
48 STDMETHODIMP VLCViewObject::GetAdvise(LPDWORD pdwAspect, LPDWORD padvf,
49         LPADVISESINK *ppAdviseSink)
50 {
51     if( NULL != pdwAspect )
52         *pdwAspect = _dwAspect;
53
54     if( NULL != padvf )
55         *padvf = _advf;
56
57     if( NULL != ppAdviseSink )
58     {
59         *ppAdviseSink = _pAdvSink;
60         if( NULL != _pAdvSink )
61             _pAdvSink->AddRef();
62     }
63
64     return S_OK;
65 };
66
67 STDMETHODIMP VLCViewObject::GetColorSet(DWORD dwAspect, LONG lindex, 
68         PVOID pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LPLOGPALETTE *ppColorSet)
69 {
70     return S_FALSE;
71 };
72
73 STDMETHODIMP VLCViewObject::SetAdvise(DWORD dwAspect, DWORD advf,
74         LPADVISESINK pAdvSink)
75 {
76     if( NULL != pAdvSink )
77         pAdvSink->AddRef();
78
79     if( NULL != _pAdvSink )
80         _pAdvSink->Release();
81
82     _dwAspect = dwAspect;
83     _advf = advf;
84     _pAdvSink = pAdvSink;
85
86     if( (dwAspect & DVASPECT_CONTENT) && (advf & ADVF_PRIMEFIRST) && (NULL != _pAdvSink) )
87     {
88         _pAdvSink->OnViewChange(DVASPECT_CONTENT, -1);
89     }
90
91     return S_OK;
92 };
93
94 STDMETHODIMP VLCViewObject::Unfreeze(DWORD dwFreeze)
95 {
96     return E_NOTIMPL;
97 };
98
99 STDMETHODIMP VLCViewObject::GetExtent(DWORD dwAspect, LONG lindex,
100         DVTARGETDEVICE *ptd, LPSIZEL lpSizel)
101 {
102     if( dwAspect & DVASPECT_CONTENT )
103     {
104         *lpSizel = _p_instance->getExtent();
105         return S_OK;
106     }
107     lpSizel->cx= 0L;
108     lpSizel->cy= 0L;
109     return E_NOTIMPL;
110 };
111