connectioncontainer.h \
objectsafety.cpp \
objectsafety.h \
+ viewobject.cpp \
+ viewobject.h \
vlccontrol.cpp \
vlccontrol.h \
plugin.cpp \
#include "connectioncontainer.h"
#include "objectsafety.h"
#include "vlccontrol.h"
+#include "viewobject.h"
#include "utils.h"
RECT pr;
if( GetUpdateRect(hWnd, &pr, FALSE) )
{
+ RECT bounds;
+ GetClientRect(hWnd, &bounds);
BeginPaint(hWnd, &ps);
- p_instance->onPaint(ps, pr);
+ p_instance->onPaint(ps.hdc, bounds, pr);
EndPaint(hWnd, &ps);
}
return 0L;
vlcConnectionPointContainer = new VLCConnectionPointContainer(this);
vlcObjectSafety = new VLCObjectSafety(this);
vlcControl = new VLCControl(this);
+ vlcViewObject = new VLCViewObject(this);
};
VLCPlugin::~VLCPlugin()
vlcOleInPlaceObject->UIDeactivate();
vlcOleInPlaceObject->InPlaceDeactivate();
+ delete vlcViewObject;
delete vlcControl;
delete vlcObjectSafety;
delete vlcConnectionPointContainer;
*ppv = reinterpret_cast<LPVOID>(vlcControl);
return NOERROR;
}
+ else if( IID_IViewObject == riid )
+ {
+ AddRef();
+ *ppv = reinterpret_cast<LPVOID>(vlcViewObject);
+ return NOERROR;
+ }
*ppv = NULL;
return GetActiveWindow() == _inplacewnd;
};
-void VLCPlugin::onPaint(PAINTSTRUCT &ps, RECT &pr)
+void VLCPlugin::onPaint(HDC hdc, const RECT &bounds, const RECT &pr)
{
/*
** if VLC is playing, it may not display any VIDEO content
** hence, draw control logo
*/
- int width = _bounds.right-_bounds.left;
- int height = _bounds.bottom-_bounds.top;
+ int width = bounds.right-bounds.left;
+ int height = bounds.bottom-bounds.top;
HBITMAP pict = _p_class->getInPlacePict();
if( NULL != pict )
{
- HDC hdcPict = CreateCompatibleDC(ps.hdc);
+ HDC hdcPict = CreateCompatibleDC(hdc);
if( NULL != hdcPict )
{
BITMAP bm;
if( dstHeight > height-4 )
dstHeight = height-4;
- int dstX = (width-dstWidth)/2;
- int dstY = (height-dstHeight)/2;
+ int dstX = bounds.left+(width-dstWidth)/2;
+ int dstY = bounds.top+(height-dstHeight)/2;
SelectObject(hdcPict, pict);
- StretchBlt(ps.hdc, dstX, dstY, dstWidth, dstHeight,
+ StretchBlt(hdc, dstX, dstY, dstWidth, dstHeight,
hdcPict, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
DeleteDC(hdcPict);
- ExcludeClipRect(ps.hdc, dstX, dstY, dstWidth+dstX, dstHeight+dstY);
+ ExcludeClipRect(hdc, dstX, dstY, dstWidth+dstX, dstHeight+dstY);
}
}
}
- FillRect(ps.hdc, &pr, (HBRUSH)GetStockObject(WHITE_BRUSH));
- SelectObject(ps.hdc, GetStockObject(BLACK_BRUSH));
+ FillRect(hdc, &pr, (HBRUSH)GetStockObject(WHITE_BRUSH));
+ SelectObject(hdc, GetStockObject(BLACK_BRUSH));
- MoveToEx(ps.hdc, 0, 0, NULL);
- LineTo(ps.hdc, width-1, 0);
- LineTo(ps.hdc, width-1, height-1);
- LineTo(ps.hdc, 0, height-1);
- LineTo(ps.hdc, 0, 0);
+ MoveToEx(hdc, bounds.left, bounds.top, NULL);
+ LineTo(hdc, bounds.left+width-1, bounds.top);
+ LineTo(hdc, bounds.left+width-1, bounds.top+height-1);
+ LineTo(hdc, bounds.left, bounds.top+height-1);
+ LineTo(hdc, bounds.left, bounds.top);
};
void VLCPlugin::onPositionChange(LPCRECT lprcPosRect, LPCRECT lprcClipRect)
// container events
void onPositionChange(LPCRECT lprcPosRect, LPCRECT lprcClipRect);
- void onPaint(PAINTSTRUCT &ps, RECT &pr);
+ void onPaint(HDC hdc, const RECT &bounds, const RECT &pr);
// control events
void firePropChangedEvent(DISPID dispid);
class VLCConnectionPointContainer *vlcConnectionPointContainer;
class VLCObjectSafety *vlcObjectSafety;
class VLCControl *vlcControl;
+ class VLCViewObject *vlcViewObject;
// in place activated window (Clipping window)
HWND _inplacewnd;
--- /dev/null
+/*****************************************************************************
+ * viewobject.cpp: ActiveX control for VLC
+ *****************************************************************************
+ * Copyright (C) 2005 VideoLAN
+ *
+ * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ *****************************************************************************/
+
+#include "plugin.h"
+#include "viewobject.h"
+
+#include <iostream>
+
+using namespace std;
+
+STDMETHODIMP VLCViewObject::Draw(DWORD dwAspect, LONG lindex, PVOID pvAspect,
+ DVTARGETDEVICE *ptd, HDC hicTargetDev, HDC hdcDraw, LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds, BOOL(CALLBACK *pfnContinue)(DWORD), DWORD dwContinue)
+{
+ switch( dwAspect )
+ {
+ case DVASPECT_CONTENT:
+ if( _p_instance->getVisible() )
+ {
+ RECT bounds;
+ bounds.left = lprcBounds->left;
+ bounds.top = lprcBounds->top;
+ bounds.right = lprcBounds->right;
+ bounds.bottom = lprcBounds->bottom;
+ _p_instance->onPaint(hdcDraw, bounds, bounds);
+ }
+ return S_OK;
+ case DVASPECT_THUMBNAIL:
+ break;
+ case DVASPECT_ICON:
+ break;
+ case DVASPECT_DOCPRINT:
+ break;
+ }
+ return E_NOTIMPL;
+};
+
+STDMETHODIMP VLCViewObject::Freeze(DWORD dwAspect, LONG lindex,
+ PVOID pvAspect, LPDWORD pdwFreeze)
+{
+ if( NULL != pvAspect )
+ return E_INVALIDARG;
+
+ return OLE_E_BLANK;
+};
+
+STDMETHODIMP VLCViewObject::GetAdvise(LPDWORD pdwAspect, LPDWORD padvf,
+ LPADVISESINK *ppAdviseSink)
+{
+ return E_NOTIMPL;
+};
+
+STDMETHODIMP VLCViewObject::GetColorSet(DWORD dwAspect, LONG lindex,
+ PVOID pvAspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LPLOGPALETTE *ppColorSet)
+{
+ return E_NOTIMPL;
+};
+
+STDMETHODIMP VLCViewObject::SetAdvise(DWORD dwAspect, DWORD advf,
+ LPADVISESINK pAdvSink)
+{
+ return OLE_E_ADVISENOTSUPPORTED;
+};
+
+STDMETHODIMP VLCViewObject::Unfreeze(DWORD dwFreeze)
+{
+ return E_NOTIMPL;
+};
+
--- /dev/null
+/*****************************************************************************
+ * persiststorage.h: ActiveX control for VLC
+ *****************************************************************************
+ * Copyright (C) 2005 VideoLAN
+ *
+ * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ *****************************************************************************/
+
+#ifndef __VIEWOBJECT_H__
+#define __VIEWOBJECT_H__
+
+#include <oleidl.h>
+
+class VLCViewObject : public IViewObject
+{
+
+public:
+
+ VLCViewObject(VLCPlugin *p_instance) : _p_instance(p_instance) {};
+ virtual ~VLCViewObject() {};
+
+ // IUnknown methods
+ STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
+ {
+ if( (NULL != ppv)
+ && (IID_IUnknown == riid)
+ && (IID_IPersist == riid)
+ && (IID_IViewObject == riid) ) {
+ AddRef();
+ *ppv = reinterpret_cast<LPVOID>(this);
+ return NOERROR;
+ }
+ return _p_instance->QueryInterface(riid, ppv);
+ };
+
+ STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->AddRef(); };
+ STDMETHODIMP_(ULONG) Release(void) { return _p_instance->Release(); };
+
+ // IViewObject methods
+ STDMETHODIMP Draw(DWORD,LONG,PVOID,DVTARGETDEVICE*,HDC,HDC,LPCRECTL,LPCRECTL,BOOL(CALLBACK *)(DWORD),DWORD);
+ STDMETHODIMP Freeze(DWORD,LONG,PVOID,LPDWORD);
+ STDMETHODIMP GetAdvise(LPDWORD,LPDWORD,LPADVISESINK *);
+ STDMETHODIMP GetColorSet(DWORD,LONG,PVOID,DVTARGETDEVICE *,HDC,LPLOGPALETTE *);
+ STDMETHODIMP SetAdvise(DWORD,DWORD,LPADVISESINK);
+ STDMETHODIMP Unfreeze(DWORD);
+
+private:
+
+ VLCPlugin *_p_instance;
+};
+
+#endif
+