📄 viewport.cpp
字号:
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 + -