⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrl_video.cpp

📁 uclinux 下的vlc播放器源代码
💻 CPP
字号:
/***************************************************************************** * ctrl_video.cpp ***************************************************************************** * Copyright (C) 2004 the VideoLAN team * $Id: ctrl_video.cpp 16457 2006-08-31 20:51:12Z hartman $ * * Authors: Cyril Deguet     <asmax@via.ecp.fr> * * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/#include "ctrl_video.hpp"#include "../src/theme.hpp"#include "../src/vout_window.hpp"#include "../src/os_graphics.hpp"#include "../src/vlcproc.hpp"#include "../src/window_manager.hpp"#include "../commands/async_queue.hpp"#include "../commands/cmd_resize.hpp"CtrlVideo::CtrlVideo( intf_thread_t *pIntf, GenericLayout &rLayout,                      bool autoResize, const UString &rHelp,                      VarBool *pVisible ):    CtrlGeneric( pIntf, rHelp, pVisible ), m_pVout( NULL ),    m_rLayout( rLayout ), m_xShift( 0 ), m_yShift( 0 ){    // Observe the vout size variable if the control is auto-resizable    if( autoResize )    {        VarBox &rVoutSize = VlcProc::instance( pIntf )->getVoutSizeVar();        rVoutSize.addObserver( this );    }}CtrlVideo::~CtrlVideo(){    VarBox &rVoutSize = VlcProc::instance( getIntf() )->getVoutSizeVar();    rVoutSize.delObserver( this );    if( m_pVout )    {        delete m_pVout;    }}void CtrlVideo::handleEvent( EvtGeneric &rEvent ){}bool CtrlVideo::mouseOver( int x, int y ) const{    return false;}void CtrlVideo::onResize(){    const Position *pPos = getPosition();    if( pPos && m_pVout )    {        m_pVout->move( pPos->getLeft(), pPos->getTop() );        m_pVout->resize( pPos->getWidth(), pPos->getHeight() );    }}void CtrlVideo::onPositionChange(){    // Compute the difference between layout size and video size    m_xShift = m_rLayout.getWidth() - getPosition()->getWidth();    m_yShift = m_rLayout.getHeight() - getPosition()->getHeight();}void CtrlVideo::draw( OSGraphics &rImage, int xDest, int yDest ){    GenericWindow *pParent = getWindow();    const Position *pPos = getPosition();    if( pParent && pPos )    {        // Draw a black rectangle under the video to avoid transparency        rImage.fillRect( pPos->getLeft(), pPos->getTop(), pPos->getWidth(),                         pPos->getHeight(), 0 );    }}void CtrlVideo::onUpdate( Subject<VarBox> &rVoutSize, void *arg ){    int newWidth = ((VarBox&)rVoutSize).getWidth() + m_xShift;    int newHeight = ((VarBox&)rVoutSize).getHeight() + m_yShift;    // Create a resize command    // FIXME: this way of getting the window manager kind of sucks    WindowManager &rWindowManager =        getIntf()->p_sys->p_theme->getWindowManager();    rWindowManager.startResize( m_rLayout, WindowManager::kResizeSE );    CmdGeneric *pCmd = new CmdResize( getIntf(), rWindowManager,                                      m_rLayout, newWidth, newHeight );    // Push the command in the asynchronous command queue    AsyncQueue *pQueue = AsyncQueue::instance( getIntf() );    pQueue->push( CmdGenericPtr( pCmd ) );    // FIXME: this should be a command too    rWindowManager.stopResize();}void CtrlVideo::setVisible( bool visible ){    if( visible )    {        GenericWindow *pParent = getWindow();        const Position *pPos = getPosition();        // Create a child window for the vout if it doesn't exist yet        if( !m_pVout && pParent && pPos )        {            m_pVout = new VoutWindow( getIntf(), pPos->getLeft(),                                      pPos->getTop(), false, false, *pParent );            m_pVout->resize( pPos->getWidth(), pPos->getHeight() );            m_pVout->show();        }    }    else    {        delete m_pVout;        m_pVout = NULL;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -