X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=activex%2Fplugin.cpp;h=65c15eb8512f8f36bd0f61cf44d48186a87a3498;hb=128338ce014d8a40645a9cb4b6f4d0f545b7f3b3;hp=ab96416b039fed8ddb8d993256e39af66ccd9df1;hpb=443254c6fe0534a05a48122e34738649d83ab247;p=vlc diff --git a/activex/plugin.cpp b/activex/plugin.cpp index ab96416b03..65c15eb851 100644 --- a/activex/plugin.cpp +++ b/activex/plugin.cpp @@ -351,6 +351,7 @@ HRESULT VLCPlugin::onInit(void) _b_mute = FALSE; _i_volume = 50; _i_time = 0; + _i_backcolor = 0; // set default/preferred size (320x240) pixels in HIMETRIC HDC hDC = CreateDevDC(NULL); _extent.cx = 320; @@ -559,6 +560,12 @@ HRESULT VLCPlugin::onAmbientChanged(LPUNKNOWN pContainer, DISPID dispID) switch( dispID ) { case DISPID_AMBIENT_BACKCOLOR: + VariantInit(&v); + V_VT(&v) = VT_I4; + if( SUCCEEDED(GetObjectProperty(pContainer, dispID, v)) ) + { + setBackColor(V_I4(&v)); + } break; case DISPID_AMBIENT_DISPLAYNAME: break; @@ -782,6 +789,19 @@ void VLCPlugin::setVolume(int volume) } }; +void VLCPlugin::setBackColor(OLE_COLOR backcolor) +{ + if( _i_backcolor != backcolor ) + { + _i_backcolor = backcolor; + if( isInPlaceActive() ) + { + + } + setDirty(TRUE); + } +}; + void VLCPlugin::setTime(int seconds) { if( seconds < 0 ) @@ -796,7 +816,7 @@ void VLCPlugin::setTime(int seconds) if( NULL != p_md ) { libvlc_media_instance_set_time(p_md, _i_time, NULL); - libvlc_media_instance_destroy_and_detach(p_md); + libvlc_media_instance_release(p_md); } } } @@ -822,57 +842,80 @@ void VLCPlugin::onDraw(DVTARGETDEVICE * ptd, HDC hicTargetDev, long height = lprcBounds->bottom-lprcBounds->top; RECT bounds = { lprcBounds->left, lprcBounds->top, lprcBounds->right, lprcBounds->bottom }; - FillRect(hdcDraw, &bounds, (HBRUSH)GetStockObject(WHITE_BRUSH)); - LPPICTURE pict = getPicture(); - if( NULL != pict ) + if( isUserMode() ) { - OLE_XSIZE_HIMETRIC picWidth; - OLE_YSIZE_HIMETRIC picHeight; - - pict->get_Width(&picWidth); - pict->get_Height(&picHeight); - - SIZEL picSize = { picWidth, picHeight }; - - if( NULL != hicTargetDev ) + /* VLC is in user mode, just draw background color */ + COLORREF colorref = RGB(0, 0, 0); + OleTranslateColor(_i_backcolor, (HPALETTE)GetStockObject(DEFAULT_PALETTE), &colorref); + if( colorref != RGB(0, 0, 0) ) { - DPFromHimetric(hicTargetDev, (LPPOINT)&picSize, 1); + /* custom background */ + HBRUSH colorbrush = CreateSolidBrush(colorref); + FillRect(hdcDraw, &bounds, colorbrush); + DeleteObject((HANDLE)colorbrush); } - else if( NULL != (hicTargetDev = CreateDevDC(ptd)) ) + else { - DPFromHimetric(hicTargetDev, (LPPOINT)&picSize, 1); - DeleteDC(hicTargetDev); + /* black background */ + FillRect(hdcDraw, &bounds, (HBRUSH)GetStockObject(BLACK_BRUSH)); } + } + else + { + /* VLC is in design mode, draw the VLC logo */ + FillRect(hdcDraw, &bounds, (HBRUSH)GetStockObject(WHITE_BRUSH)); - if( picSize.cx > width-4 ) - picSize.cx = width-4; - if( picSize.cy > height-4 ) - picSize.cy = height-4; + LPPICTURE pict = getPicture(); + if( NULL != pict ) + { + OLE_XSIZE_HIMETRIC picWidth; + OLE_YSIZE_HIMETRIC picHeight; - LONG dstX = lprcBounds->left+(width-picSize.cx)/2; - LONG dstY = lprcBounds->top+(height-picSize.cy)/2; + pict->get_Width(&picWidth); + pict->get_Height(&picHeight); - if( NULL != lprcWBounds ) - { - RECT wBounds = { lprcWBounds->left, lprcWBounds->top, lprcWBounds->right, lprcWBounds->bottom }; - pict->Render(hdcDraw, dstX, dstY, picSize.cx, picSize.cy, - 0L, picHeight, picWidth, -picHeight, &wBounds); - } - else - pict->Render(hdcDraw, dstX, dstY, picSize.cx, picSize.cy, - 0L, picHeight, picWidth, -picHeight, NULL); + SIZEL picSize = { picWidth, picHeight }; - pict->Release(); - } + if( NULL != hicTargetDev ) + { + DPFromHimetric(hicTargetDev, (LPPOINT)&picSize, 1); + } + else if( NULL != (hicTargetDev = CreateDevDC(ptd)) ) + { + DPFromHimetric(hicTargetDev, (LPPOINT)&picSize, 1); + DeleteDC(hicTargetDev); + } + + if( picSize.cx > width-4 ) + picSize.cx = width-4; + if( picSize.cy > height-4 ) + picSize.cy = height-4; + + LONG dstX = lprcBounds->left+(width-picSize.cx)/2; + LONG dstY = lprcBounds->top+(height-picSize.cy)/2; - SelectObject(hdcDraw, GetStockObject(BLACK_BRUSH)); + if( NULL != lprcWBounds ) + { + RECT wBounds = { lprcWBounds->left, lprcWBounds->top, lprcWBounds->right, lprcWBounds->bottom }; + pict->Render(hdcDraw, dstX, dstY, picSize.cx, picSize.cy, + 0L, picHeight, picWidth, -picHeight, &wBounds); + } + else + pict->Render(hdcDraw, dstX, dstY, picSize.cx, picSize.cy, + 0L, picHeight, picWidth, -picHeight, NULL); - MoveToEx(hdcDraw, bounds.left, bounds.top, NULL); - LineTo(hdcDraw, bounds.left+width-1, bounds.top); - LineTo(hdcDraw, bounds.left+width-1, bounds.top+height-1); - LineTo(hdcDraw, bounds.left, bounds.top+height-1); - LineTo(hdcDraw, bounds.left, bounds.top); + pict->Release(); + } + + SelectObject(hdcDraw, GetStockObject(BLACK_BRUSH)); + + MoveToEx(hdcDraw, bounds.left, bounds.top, NULL); + LineTo(hdcDraw, bounds.left+width-1, bounds.top); + LineTo(hdcDraw, bounds.left+width-1, bounds.top+height-1); + LineTo(hdcDraw, bounds.left, bounds.top+height-1); + LineTo(hdcDraw, bounds.left, bounds.top); + } } }; @@ -880,8 +923,7 @@ void VLCPlugin::onPaint(HDC hdc, const RECT &bounds, const RECT &clipRect) { if( isVisible() ) { - /** if VLC is playing, it may not display any VIDEO content - ** hence, draw control logo*/ + /* if VLC is in design mode, draw control logo */ HDC hdcDraw = CreateCompatibleDC(hdc); if( NULL != hdcDraw ) {