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

📄 viewport.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                    IHXViewPortSupplier* pSupplier = NULL;
                    pSink->QueryInterface(IID_IHXViewPortSupplier, (void**) &pSupplier);
                    if (pSupplier != m_pViewPortSupplier)
                    {
                        HX_RELEASE(m_pViewPortSupplier);
                        m_pViewPortSupplier = pSupplier;
                        m_pViewPortSupplier->AddRef();
                        HX_RELEASE(pSupplier);
                        break;
                    }
                    HX_RELEASE(pSupplier);
                }
            }
        }
    }
#else
    if (m_pPlayer && !m_pViewPortSupplier)
    {
	if (HXR_OK != m_pPlayer->QueryInterface(IID_IHXViewPortSupplier, (void**)&m_pViewPortSupplier))
	{
	    m_pViewPortSupplier = NULL;
	}
    }
#endif

    if (m_pViewPortSupplier)
    {
	m_pViewPortSupplier->OnViewPortOpen(pValues, pSiteUser);

	if (m_pViewPortSinkList)
	{
	    ndx = m_pViewPortSinkList->Begin();
	    for (; ndx != m_pViewPortSinkList->End(); ++ndx)
	    {
		pViewPortSink = (IHXViewPortSink*) (*ndx);
		pViewPortSink->ViewPortOpened(pszViewPort);
	    }
	}
    }

cleanup:

   HX_RELEASE(pBuffer);
   
   return rc;
}

/************************************************************************
 *	Method:
 *	    IHXViewPortManager::GetViewPort
 *	Purpose:
 *	    get viewport
 */
STDMETHODIMP
HXViewPortManager::GetViewPort(const char* pszViewPort,
				REF(IHXViewPort*) pViewPort)
{
    HX_RESULT	rc = HXR_OK;

    pViewPort = NULL;

    if (!m_pViewPortMap)
    {
	rc = HXR_FAILED;
	goto cleanup;
    }

    if (!m_pViewPortMap->Lookup(pszViewPort, (void*&)pViewPort))
    {
	rc = HXR_FAILED;
	goto cleanup;
    }

    pViewPort->AddRef();

cleanup:

    return rc;
}

/************************************************************************
 *	Method:
 *	    IHXViewPortManager::CloseViewPort
 *	Purpose:
 *	    remove viewport
 */
STDMETHODIMP
HXViewPortManager::CloseViewPort(const char* pszViewPort)
{
    HX_RESULT		rc = HXR_OK;
    IHXViewPort*	pViewPort = NULL;
    IHXViewPortSink*	pViewPortSink = NULL;
    CHXSimpleList::Iterator ndx;

    if (m_pViewPortMap &&
	m_pViewPortMap->Lookup(pszViewPort, (void*&)pViewPort))
    {
	m_pViewPortMap->RemoveKey(pszViewPort);
	HX_RELEASE(pViewPort);
    }

    if (m_pViewPortSupplier)
    {
	m_pViewPortSupplier->OnViewPortClose(pszViewPort);

	if (m_pViewPortSinkList)
	{
	    ndx = m_pViewPortSinkList->Begin();
	    for (; ndx != m_pViewPortSinkList->End(); ++ndx)
	    {
		pViewPortSink = (IHXViewPortSink*) (*ndx);
		pViewPortSink->ViewPortClosed(pszViewPort);
	    }
	}
    }

    return rc;
}

/************************************************************************
 *	Method:
 *	    IHXViewPortManager::AddViewPortSink
 *	Purpose:
 *	    add viewport sinker
 */
STDMETHODIMP
HXViewPortManager::AddViewPortSink(IHXViewPortSink*  pViewPortSink)
{
    HX_RESULT	rc = HXR_OK;

    if (!m_pViewPortSinkList)
    {
	m_pViewPortSinkList = new CHXSimpleList();
    }

    m_pViewPortSinkList->AddTail(pViewPortSink);
    pViewPortSink->AddRef();

    return rc;
}

/************************************************************************
 *	Method:
 *	    IHXViewPortManager::RemoveViewPortSink
 *	Purpose:
 *	    remove viewport sinker
 */
STDMETHODIMP
HXViewPortManager::RemoveViewPortSink(IHXViewPortSink*  pViewPortSink)
{
    if (!m_pViewPortSinkList)
    {
	return HXR_UNEXPECTED;
    }

    LISTPOSITION lPosition = m_pViewPortSinkList->Find(pViewPortSink);
    if (!lPosition)
    {
	return HXR_UNEXPECTED;
    }

    m_pViewPortSinkList->RemoveAt(lPosition);
    HX_RELEASE(pViewPortSink);
    
    return HXR_OK;
}


HX_RESULT
HXViewPortManager::OnViewPortShow(const char* pszViewPortName)
{
    HX_RESULT		rc = HXR_OK;
    IHXViewPortSink*	pViewPortSink = NULL;
    CHXSimpleList::Iterator ndx;

    if (!m_pViewPortSupplier)
    {
	rc = HXR_FAILED;
	goto cleanup;
    }

    m_pViewPortSupplier->OnViewPortShow(pszViewPortName);

    if (m_pViewPortSinkList)
    {
	ndx = m_pViewPortSinkList->Begin();
	for (; ndx != m_pViewPortSinkList->End(); ++ndx)
	{
	    pViewPortSink = (IHXViewPortSink*) (*ndx);
	    pViewPortSink->ViewPortShown(pszViewPortName);
	}
    }

cleanup:

    return rc;
}

HX_RESULT
HXViewPortManager::OnViewPortHide(const char* pszViewPortName)
{
    HX_RESULT		rc = HXR_OK;
    IHXViewPortSink*	pViewPortSink = NULL;
    CHXSimpleList::Iterator ndx;

    if (!m_pViewPortSupplier)
    {
	rc = HXR_FAILED;
	goto cleanup;
    }

    m_pViewPortSupplier->OnViewPortHide(pszViewPortName);

    if (m_pViewPortSinkList)
    {
	ndx = m_pViewPortSinkList->Begin();
	for (; ndx != m_pViewPortSinkList->End(); ++ndx)
	{
	    pViewPortSink = (IHXViewPortSink*) (*ndx);
	    pViewPortSink->ViewPortHidden(pszViewPortName);
	}
    }

cleanup:

    return rc;
}

HX_RESULT
HXViewPortManager::OnViewPortFocus(const char* pszViewPortName)
{
    HX_RESULT		rc = HXR_OK;
    IHXViewPortSink*	pViewPortSink = NULL;
    CHXSimpleList::Iterator ndx;

    if (!m_pViewPortSupplier)
    {
	rc = HXR_FAILED;
	goto cleanup;
    }

    m_pViewPortSupplier->OnViewPortFocus(pszViewPortName);

    if (m_pViewPortSinkList)
    {
	ndx = m_pViewPortSinkList->Begin();
	for (; ndx != m_pViewPortSinkList->End(); ++ndx)
	{
	    pViewPortSink = (IHXViewPortSink*) (*ndx);
	    pViewPortSink->ViewPortFocusSet(pszViewPortName);
	}
    }

cleanup:

    return rc;
}

HX_RESULT
HXViewPortManager::OnViewPortZOrder(const char* pszViewPortName, 
				     UINT32 ulZOrder)
{
    HX_RESULT		rc = HXR_OK;
    IHXViewPortSink*	pViewPortSink = NULL;
    CHXSimpleList::Iterator ndx;

    if (!m_pViewPortSupplier)
    {
	rc = HXR_FAILED;
	goto cleanup;
    }

    m_pViewPortSupplier->OnViewPortZOrder(pszViewPortName, ulZOrder);

    if (m_pViewPortSinkList)
    {
	ndx = m_pViewPortSinkList->Begin();
	for (; ndx != m_pViewPortSinkList->End(); ++ndx)
	{
	    pViewPortSink = (IHXViewPortSink*) (*ndx);
	    pViewPortSink->ViewPortZOrderSet(pszViewPortName, ulZOrder);
	}
    }

cleanup:

    return rc;
}

void
HXViewPortManager::Close()
{
    if (m_pViewPortMap)
    {
	CHXMapStringToOb::Iterator ndx = m_pViewPortMap->Begin();
	for (; ndx != m_pViewPortMap->End(); ++ndx)
	{
	    HXViewPort* pViewPort = (HXViewPort*)(*ndx);
	    HX_RELEASE(pViewPort);
	}
    }
    HX_DELETE(m_pViewPortMap);

    if (m_pViewPortSinkList)
    {
	CHXSimpleList::Iterator ndx = m_pViewPortSinkList->Begin();
	for (; ndx != m_pViewPortSinkList->End(); ++ndx)
	{
	    IHXViewPortSink* pViewPortSink = (IHXViewPortSink*)(*ndx);
	    HX_RELEASE(pViewPortSink);
	}
    }
    HX_DELETE(m_pViewPortSinkList);

    HX_RELEASE(m_pViewPortSupplier);
    HX_RELEASE(m_pPlayer);
}

⌨️ 快捷键说明

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